<?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>28068</bug_id>
          
          <creation_ts>2009-08-07 08:15:37 -0700</creation_ts>
          <short_desc>Make DOM classes start with a reference count of 1, like all other RefCounted</short_desc>
          <delta_ts>2019-02-06 09:03:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>44851</dependson>
          <blocked>27672</blocked>
    
    <blocked>41321</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>cdumez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>137883</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-07 08:15:37 -0700</bug_when>
    <thetext>Working on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137885</commentid>
    <comment_count>1</comment_count>
      <attachid>34274</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-07 08:16:00 -0700</bug_when>
    <thetext>Created attachment 34274
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138872</commentid>
    <comment_count>2</comment_count>
      <attachid>34532</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-10 18:03:11 -0700</bug_when>
    <thetext>Created attachment 34532
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140411</commentid>
    <comment_count>3</comment_count>
      <attachid>34532</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-08-14 18:49:51 -0700</bug_when>
    <thetext>Comment on attachment 34532
patch

Beautiful. r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140438</commentid>
    <comment_count>4</comment_count>
      <attachid>34532</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-14 23:26:36 -0700</bug_when>
    <thetext>Comment on attachment 34532
patch

Landed as http://trac.webkit.org/changeset/47313</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140693</commentid>
    <comment_count>5</comment_count>
      <attachid>34964</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-17 01:34:48 -0700</bug_when>
    <thetext>Created attachment 34964
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141122</commentid>
    <comment_count>6</comment_count>
      <attachid>35049</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-18 10:32:27 -0700</bug_when>
    <thetext>Created attachment 35049
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141125</commentid>
    <comment_count>7</comment_count>
      <attachid>35050</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-18 10:34:19 -0700</bug_when>
    <thetext>Created attachment 35050
Factored-out preparation piece</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141399</commentid>
    <comment_count>8</comment_count>
      <attachid>35050</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-18 22:54:07 -0700</bug_when>
    <thetext>Comment on attachment 35050
Factored-out preparation piece

Landed as http://trac.webkit.org/changeset/47469</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141448</commentid>
    <comment_count>9</comment_count>
      <attachid>35112</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-19 02:22:40 -0700</bug_when>
    <thetext>Created attachment 35112
patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141845</commentid>
    <comment_count>10</comment_count>
      <attachid>35112</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-21 01:33:18 -0700</bug_when>
    <thetext>Comment on attachment 35112
patch 2

r=me -- in future could you try not to do unrelated code changes -- a lot of
this patch was cleanup (making methods protected or private, etc) and that
clouded a lot of what was going on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142192</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-22 23:53:24 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 35112 [details])
&gt; r=me -- in future could you try not to do unrelated code changes -- a lot of
&gt; this patch was cleanup (making methods protected or private, etc) and that
&gt; clouded a lot of what was going on.

I&apos;d be happy to split up patches like this into smaller pieces. could have a separate &quot;make functions private&quot; patch for each class. Or one that covers multiple classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142194</commentid>
    <comment_count>12</comment_count>
      <attachid>35112</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-22 23:56:39 -0700</bug_when>
    <thetext>Comment on attachment 35112
patch 2

Landed as http://trac.webkit.org/changeset/47688</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271942</commentid>
    <comment_count>13</comment_count>
      <attachid>66014</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-30 22:56:01 -0700</bug_when>
    <thetext>Created attachment 66014
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272167</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-31 10:09:07 -0700</bug_when>
    <thetext>Committed r66498: &lt;http://trac.webkit.org/changeset/66498&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502941</commentid>
    <comment_count>15</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:03:17 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34274</attachid>
            <date>2009-08-07 08:16:00 -0700</date>
            <delta_ts>2009-08-10 18:03:11 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>DOMRefCountPatch1.txt</filename>
            <type>text/plain</type>
            <size>107319</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL0F0dHIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0F0
dHIuY3BwCShyZXZpc2lvbiA0NjY3OSkKKysrIFdlYkNvcmUvZG9tL0F0dHIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIFBldGVyIEtlbGx5
IChwbWtAcG9zdC5jb20pCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVs
bGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMzAsMTUgKzMwLDIxIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotQXR0cjo6QXR0cihFbGVtZW50KiBlbGVtZW50LCBEb2N1bWVudCogZG9jUHRyLCBQYXNzUmVm
UHRyPEF0dHJpYnV0ZT4gYSkKLSAgICA6IENvbnRhaW5lck5vZGUoZG9jUHRyKQoraW5saW5lIEF0
dHI6OkF0dHIoRWxlbWVudCogZWxlbWVudCwgRG9jdW1lbnQqIGRvY3VtZW50LCBQYXNzUmVmUHRy
PEF0dHJpYnV0ZT4gYXR0cmlidXRlKQorICAgIDogQ29udGFpbmVyTm9kZShkb2N1bWVudCkKICAg
ICAsIG1fZWxlbWVudChlbGVtZW50KQotICAgICwgbV9hdHRyaWJ1dGUoYSkKKyAgICAsIG1fYXR0
cmlidXRlKGF0dHJpYnV0ZSkKICAgICAsIG1faWdub3JlQ2hpbGRyZW5DaGFuZ2VkKDApCiAgICAg
LCBtX3NwZWNpZmllZCh0cnVlKSAgCiB7CiAgICAgQVNTRVJUKCFtX2F0dHJpYnV0ZS0+YXR0cigp
KTsKICAgICBtX2F0dHJpYnV0ZS0+bV9pbXBsID0gdGhpczsKKyAgICBjcmVhdGVUZXh0Q2hpbGQo
KTsKK30KKworUGFzc1JlZlB0cjxBdHRyPiBBdHRyOjpjcmVhdGUoRWxlbWVudCogZWxlbWVudCwg
RG9jdW1lbnQqIGRvY3VtZW50LCBQYXNzUmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXR0cihlbGVtZW50LCBkb2N1bWVudCwgYXR0cmlidXRl
KSk7CiB9CiAKIEF0dHI6On5BdHRyKCkKQEAgLTg2LDE0ICs5MiwxNCBAQCBjb25zdCBBdG9taWNT
dHJpbmcmIEF0dHI6OnByZWZpeCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fYXR0cmlidXRlLT5wcmVm
aXgoKTsKIH0KIAotdm9pZCBBdHRyOjpzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZfcHJl
Zml4LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQXR0cjo6c2V0UHJlZml4KGNvbnN0IEF0b21p
Y1N0cmluZyYgcHJlZml4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7Ci0gICAg
Y2hlY2tTZXRQcmVmaXgoX3ByZWZpeCwgZWMpOworICAgIGNoZWNrU2V0UHJlZml4KHByZWZpeCwg
ZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9hdHRyaWJ1dGUtPnNl
dFByZWZpeChfcHJlZml4KTsKKyAgICBtX2F0dHJpYnV0ZS0+c2V0UHJlZml4KHByZWZpeCk7CiB9
CiAKIFN0cmluZyBBdHRyOjpub2RlVmFsdWUoKSBjb25zdApAQCAtMTAxLDExICsxMDcsMTEgQEAg
U3RyaW5nIEF0dHI6Om5vZGVWYWx1ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHZhbHVlKCk7CiB9CiAK
LXZvaWQgQXR0cjo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2LCBFeGNlcHRpb25Db2RlJikKK3Zv
aWQgQXR0cjo6c2V0VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29k
ZSYpCiB7CiAgICAgbV9pZ25vcmVDaGlsZHJlbkNoYW5nZWQrKzsKICAgICByZW1vdmVDaGlsZHJl
bigpOwotICAgIG1fYXR0cmlidXRlLT5zZXRWYWx1ZSh2LmltcGwoKSk7CisgICAgbV9hdHRyaWJ1
dGUtPnNldFZhbHVlKHZhbHVlKTsKICAgICBjcmVhdGVUZXh0Q2hpbGQoKTsKICAgICBtX2lnbm9y
ZUNoaWxkcmVuQ2hhbmdlZC0tOwogCkBAIC0xMjAsNyArMTI2LDcgQEAgdm9pZCBBdHRyOjpzZXRO
b2RlVmFsdWUoY29uc3QgU3RyaW5nJiB2LAogCiBQYXNzUmVmUHRyPE5vZGU+IEF0dHI6OmNsb25l
Tm9kZShib29sIC8qZGVlcCovKQogewotICAgIFJlZlB0cjxBdHRyPiBjbG9uZSA9IG5ldyBBdHRy
KDAsIGRvY3VtZW50KCksIG1fYXR0cmlidXRlLT5jbG9uZSgpKTsKKyAgICBSZWZQdHI8QXR0cj4g
Y2xvbmUgPSBBdHRyOjpjcmVhdGUoMCwgZG9jdW1lbnQoKSwgbV9hdHRyaWJ1dGUtPmNsb25lKCkp
OwogICAgIGNsb25lQ2hpbGROb2RlcyhjbG9uZS5nZXQoKSk7CiAgICAgcmV0dXJuIGNsb25lLnJl
bGVhc2UoKTsKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0F0dHIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9BdHRyLmgJKHJldmlzaW9uIDQ2Njc5KQorKysgV2ViQ29yZS9kb20vQXR0ci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFudHRp
IEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIFBldGVy
IEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVy
IChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzksNTIgKzM5
LDUwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEF0dHIgOiBwdWJsaWMgQ29udGFpbmVy
Tm9kZSB7CiAgICAgZnJpZW5kIGNsYXNzIE5hbWVkTm9kZU1hcDsKIHB1YmxpYzoKLSAgICBBdHRy
KEVsZW1lbnQqLCBEb2N1bWVudCosIFBhc3NSZWZQdHI8QXR0cmlidXRlPik7Ci0gICAgfkF0dHIo
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdHRyPiBjcmVhdGUoRWxlbWVudCosIERvY3VtZW50
KiwgUGFzc1JlZlB0cjxBdHRyaWJ1dGU+KTsKKyAgICB2aXJ0dWFsIH5BdHRyKCk7CiAKLSAgICAv
LyBDYWxsIHRoaXMgYWZ0ZXIgY2FsbGluZyB0aGUgY29uc3RydWN0b3Igc28gdGhlCi0gICAgLy8g
QXR0ciBub2RlIGlzbid0IGZsb2F0aW5nIHdoZW4gd2UgYXBwZW5kIHRoZSB0ZXh0IG5vZGUuCi0g
ICAgdm9pZCBjcmVhdGVUZXh0Q2hpbGQoKTsKLSAgICAKLSAgICAvLyBET00gbWV0aG9kcyAmIGF0
dHJpYnV0ZXMgZm9yIEF0dHIKICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIHF1YWxp
ZmllZE5hbWUoKS50b1N0cmluZygpOyB9CiAgICAgYm9vbCBzcGVjaWZpZWQoKSBjb25zdCB7IHJl
dHVybiBtX3NwZWNpZmllZDsgfQogICAgIEVsZW1lbnQqIG93bmVyRWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZWxlbWVudDsgfQogCi0gICAgU3RyaW5nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV9hdHRyaWJ1dGUtPnZhbHVlKCk7IH0KLSAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV9hdHRyaWJ1dGUtPnZhbHVlKCk7IH0KKyAgICB2b2lkIHNldFZhbHVlKGNvbnN0
IEF0b21pY1N0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIEF0dHJpYnV0ZSogYXR0cigp
IGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlLmdldCgpOyB9CisgICAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgcXVhbGlmaWVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlLT5uYW1lKCk7
IH0KKworICAgIC8vIEFuIGV4dGVuc2lvbiB0byBnZXQgcHJlc2VudGF0aW9uYWwgaW5mb3JtYXRp
b24gZm9yIGF0dHJpYnV0ZXMuCisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSB7IHJl
dHVybiBtX2F0dHJpYnV0ZS0+c3R5bGUoKTsgfQorCisgICAgdm9pZCBzZXRTcGVjaWZpZWQoYm9v
bCBzcGVjaWZpZWQpIHsgbV9zcGVjaWZpZWQgPSBzcGVjaWZpZWQ7IH0KKworcHJpdmF0ZToKKyAg
ICBBdHRyKEVsZW1lbnQqLCBEb2N1bWVudCosIFBhc3NSZWZQdHI8QXR0cmlidXRlPik7CiAKLSAg
ICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZyb20gcGFyZW50IGNsYXNzZXMKLSAgICB2aXJ0
dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgTm9kZVR5cGUgbm9kZVR5
cGUoKSBjb25zdDsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSgpIGNvbnN0Owog
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKCkgY29uc3Q7CiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBwcmVmaXgoKSBjb25zdDsKKworICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVO
YW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nJiwgRXhjZXB0aW9uQ29k
ZSYpOwogCiAgICAgdmlydHVhbCBTdHJpbmcgbm9kZVZhbHVlKCkgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIHNldE5vZGVWYWx1ZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IGNsb25lTm9kZShib29sIGRlZXApOwogCi0gICAgLy8g
T3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQogICAgIHZpcnR1YWwgYm9vbCBpc0F0dHJp
YnV0ZU5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGNoaWxk
VHlwZUFsbG93ZWQoTm9kZVR5cGUpOwogCiAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdl
ZChib29sIGNoYW5nZWRCeVBhcnNlciA9IGZhbHNlLCBOb2RlKiBiZWZvcmVDaGFuZ2UgPSAwLCBO
b2RlKiBhZnRlckNoYW5nZSA9IDAsIGludCBjaGlsZENvdW50RGVsdGEgPSAwKTsKIAotICAgIEF0
dHJpYnV0ZSogYXR0cigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlLmdldCgpOyB9Ci0gICAg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgcXVhbGlmaWVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0
cmlidXRlLT5uYW1lKCk7IH0KLQotICAgIC8vIEFuIGV4dGVuc2lvbiB0byBnZXQgcHJlc2VudGF0
aW9uYWwgaW5mb3JtYXRpb24gZm9yIGF0dHJpYnV0ZXMuCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUoKSB7IHJldHVybiBtX2F0dHJpYnV0ZS0+c3R5bGUoKTsgfQotCi0gICAgdm9pZCBz
ZXRTcGVjaWZpZWQoYm9vbCBzcGVjaWZpZWQpIHsgbV9zcGVjaWZpZWQgPSBzcGVjaWZpZWQ7IH0K
LQotcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdmlydHVhbFByZWZp
eCgpIGNvbnN0IHsgcmV0dXJuIHByZWZpeCgpOyB9CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIHZpcnR1YWxMb2NhbE5hbWUoKSBjb25zdCB7IHJldHVybiBsb2NhbE5hbWUoKTsgfQog
ICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiB2aXJ0dWFsTmFtZXNwYWNlVVJJKCkgY29u
c3QgeyByZXR1cm4gbmFtZXNwYWNlVVJJKCk7IH0KIAorICAgIHZvaWQgY3JlYXRlVGV4dENoaWxk
KCk7CisKICAgICBFbGVtZW50KiBtX2VsZW1lbnQ7CiAgICAgUmVmUHRyPEF0dHJpYnV0ZT4gbV9h
dHRyaWJ1dGU7CiAgICAgdW5zaWduZWQgbV9pZ25vcmVDaGlsZHJlbkNoYW5nZWQgOiAzMTsKSW5k
ZXg6IFdlYkNvcmUvZG9tL0F0dHJpYnV0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
QXR0cmlidXRlLmNwcAkocmV2aXNpb24gNDY2NzkpCisrKyBXZWJDb3JlL2RvbS9BdHRyaWJ1dGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsOCBAQCBQYXNzUmVmUHRyPEF0dHJpYnV0
ZT4gQXR0cmlidXRlOjpjbG9uZSgpCiBQYXNzUmVmUHRyPEF0dHI+IEF0dHJpYnV0ZTo6Y3JlYXRl
QXR0cklmTmVlZGVkKEVsZW1lbnQqIGUpCiB7CiAgICAgUmVmUHRyPEF0dHI+IHIgPSBtX2ltcGw7
Ci0gICAgaWYgKCFyKSB7Ci0gICAgICAgIHIgPSBuZXcgQXR0cihlLCBlLT5kb2N1bWVudCgpLCB0
aGlzKTsKLSAgICAgICAgci0+Y3JlYXRlVGV4dENoaWxkKCk7Ci0gICAgfQorICAgIGlmICghcikK
KyAgICAgICAgciA9IEF0dHI6OmNyZWF0ZShlLCBlLT5kb2N1bWVudCgpLCB0aGlzKTsKICAgICBy
ZXR1cm4gci5yZWxlYXNlKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL0NEQVRBU2VjdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ0RBVEFTZWN0aW9uLmNwcAkocmV2aXNpb24g
NDY2NzkpCisrKyBXZWJDb3JlL2RvbS9DREFUQVNlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDEzICsy
NiwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNEQVRBU2VjdGlvbjo6Q0RBVEFTZWN0
aW9uKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0KQotICAgIDogVGV4dChk
b2N1bWVudCwgdGV4dCkKK2lubGluZSBDREFUQVNlY3Rpb246OkNEQVRBU2VjdGlvbihEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgZGF0YSkKKyAgICA6IFRleHQoZG9jdW1lbnQsIGRh
dGEpCiB7CiB9CiAKLUNEQVRBU2VjdGlvbjo6fkNEQVRBU2VjdGlvbigpCitQYXNzUmVmUHRyPENE
QVRBU2VjdGlvbj4gQ0RBVEFTZWN0aW9uOjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBTdHJpbmcmIGRhdGEpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDREFUQVNlY3Rpb24o
ZG9jdW1lbnQsIGRhdGEpKTsKIH0KIAogU3RyaW5nIENEQVRBU2VjdGlvbjo6bm9kZU5hbWUoKSBj
b25zdApAQCAtNDcsMTkgKzQ4LDE3IEBAIE5vZGU6Ok5vZGVUeXBlIENEQVRBU2VjdGlvbjo6bm9k
ZVR5cGUoKSAKIAogUGFzc1JlZlB0cjxOb2RlPiBDREFUQVNlY3Rpb246OmNsb25lTm9kZShib29s
IC8qZGVlcCovKQogewotICAgIHJldHVybiBuZXcgQ0RBVEFTZWN0aW9uKGRvY3VtZW50KCksIG1f
ZGF0YSk7CisgICAgcmV0dXJuIG5ldyBDREFUQVNlY3Rpb24oZG9jdW1lbnQoKSwgZGF0YSgpKTsK
IH0KIAotLy8gRE9NIFNlY3Rpb24gMS4xLjEKIGJvb2wgQ0RBVEFTZWN0aW9uOjpjaGlsZFR5cGVB
bGxvd2VkKE5vZGVUeXBlKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUGFzc1JlZlB0cjxU
ZXh0PiBDREFUQVNlY3Rpb246OmNyZWF0ZU5ldyhQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHN0cmlu
ZykKK1Bhc3NSZWZQdHI8VGV4dD4gQ0RBVEFTZWN0aW9uOjp2aXJ0dWFsQ3JlYXRlKGNvbnN0IFN0
cmluZyYgZGF0YSkKIHsKLSAgICByZXR1cm4gbmV3IENEQVRBU2VjdGlvbihkb2N1bWVudCgpLCBz
dHJpbmcpOworICAgIHJldHVybiBjcmVhdGUoZG9jdW1lbnQoKSwgZGF0YSk7CiB9CiAKLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vQ0RBVEFTZWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ0RBVEFTZWN0aW9uLmgJKHJldmlzaW9uIDQ2Njc5KQor
KysgV2ViQ29yZS9kb20vQ0RBVEFTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSw3
IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBm
b3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0zMSwxNiArMjksMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBDREFUQVNlY3Rpb24gOiBwdWJsaWMgVGV4dCB7CiBwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q0RBVEFTZWN0aW9uPiBjcmVhdGUoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcm
KTsKKworcHJpdmF0ZToKICAgICBDREFUQVNlY3Rpb24oRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcm
KTsKLSAgICB2aXJ0dWFsIH5DREFUQVNlY3Rpb24oKTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIG5v
ZGVOYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCBOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlPiBjbG9uZU5vZGUoYm9vbCBkZWVwKTsKICAgICB2
aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSk7Ci0KLXByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGV4dD4gY3JlYXRlTmV3KFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4pOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUZXh0PiB2aXJ0dWFsQ3JlYXRlKGNvbnN0IFN0
cmluZyYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20v
Q2hhcmFjdGVyRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0
YS5jcHAJKHJldmlzaW9uIDQ2Njc5KQorKysgV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MzAsMjAgKzMwLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ2hhcmFjdGVyRGF0YTo6
Q2hhcmFjdGVyRGF0YShEb2N1bWVudCAqZG9jLCBib29sIGlzVGV4dCkKLSAgICA6IE5vZGUoZG9j
LCBmYWxzZSwgZmFsc2UsIGlzVGV4dCkKLSAgICAsIG1fZGF0YShTdHJpbmdJbXBsOjplbXB0eSgp
KQotewotfQotCi1DaGFyYWN0ZXJEYXRhOjpDaGFyYWN0ZXJEYXRhKERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIGlzVGV4dCkKLSAgICA6IE5vZGUoZG9jdW1lbnQs
IGZhbHNlLCBmYWxzZSwgaXNUZXh0KQotewotICAgIG1fZGF0YSA9IHRleHQuaW1wbCgpID8gdGV4
dC5pbXBsKCkgOiBTdHJpbmdJbXBsOjplbXB0eSgpOwotfQotCi1DaGFyYWN0ZXJEYXRhOjp+Q2hh
cmFjdGVyRGF0YSgpCitDaGFyYWN0ZXJEYXRhOjpDaGFyYWN0ZXJEYXRhKERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBDb25zdHJ1Y3Rpb25UeXBlIHR5cGUpCisgICAgOiBO
b2RlKGRvY3VtZW50LCB0eXBlKQorICAgICwgbV9kYXRhKHRleHQuaW1wbCgpID8gdGV4dC5pbXBs
KCkgOiBTdHJpbmdJbXBsOjplbXB0eSgpKQogeworICAgIEFTU0VSVCh0eXBlID09IENyZWF0ZU90
aGVyIHx8IHR5cGUgPT0gQ3JlYXRlVGV4dCk7CiB9CiAKIHZvaWQgQ2hhcmFjdGVyRGF0YTo6c2V0
RGF0YShjb25zdCBTdHJpbmcmIGRhdGEsIEV4Y2VwdGlvbkNvZGUmKQpJbmRleDogV2ViQ29yZS9k
b20vQ2hhcmFjdGVyRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NoYXJhY3RlckRh
dGEuaAkocmV2aXNpb24gNDY2NzkpCisrKyBXZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjksMTIgKzI5LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDaGFyYWN0ZXJEYXRhIDogcHVibGljIE5vZGUg
ewogcHVibGljOgotICAgIENoYXJhY3RlckRhdGEoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIHRl
eHQsIGJvb2wgaXNUZXh0ID0gZmFsc2UpOwotICAgIENoYXJhY3RlckRhdGEoRG9jdW1lbnQqLCBi
b29sIGlzVGV4dCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIH5DaGFyYWN0ZXJEYXRhKCk7Ci0KLSAg
ICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9yIENoYXJhY3RlckRhdGEKLQogICAgIFN0
cmluZyBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CiAgICAgdm9pZCBzZXREYXRhKGNv
bnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX2RhdGEtPmxlbmd0aCgpOyB9CkBAIC00MiwzMSArMzYsMzAgQEAgcHVibGlj
OgogICAgIHZvaWQgYXBwZW5kRGF0YShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAg
ICAgdm9pZCBpbnNlcnREYXRhKHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiwgRXhjZXB0
aW9uQ29kZSYpOwogICAgIHZvaWQgZGVsZXRlRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGNvdW50LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCByZXBsYWNlRGF0YSh1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBTdHJpbmcgJmFyZywgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgcmVwbGFjZURhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwg
Y29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgYm9vbCBjb250YWluc09ubHlX
aGl0ZXNwYWNlKCkgY29uc3Q7CiAKLSAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZyb20g
cGFyZW50IGNsYXNzZXMKLQotICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVWYWx1ZSgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgdm9pZCBzZXROb2RlVmFsdWUoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIAotICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKKyAgICBT
dHJpbmdJbXBsKiBkYXRhSW1wbCgpIHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQogCi0gICAgdmly
dHVhbCBib29sIGlzQ2hhcmFjdGVyRGF0YU5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgdmlydHVhbCBpbnQgbWF4Q2hhcmFjdGVyT2Zmc2V0KCkgY29uc3Q7Ci0gICAgU3RyaW5nSW1w
bCogc3RyaW5nKCkgeyByZXR1cm4gbV9kYXRhLmdldCgpOyB9Citwcm90ZWN0ZWQ6CisgICAgQ2hh
cmFjdGVyRGF0YShEb2N1bWVudCosIGNvbnN0IFN0cmluZyYsIENvbnN0cnVjdGlvblR5cGUpOwog
Ci0gICAgdmlydHVhbCBib29sIG9mZnNldEluQ2hhcmFjdGVycygpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7CiAKLXByb3RlY3RlZDoKLSAg
ICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9kYXRhOwotCisgICAgdm9pZCBzZXREYXRhSW1wbChQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IGltcGwpIHsgbV9kYXRhID0gaW1wbDsgfQogICAgIHZvaWQgZGlz
cGF0Y2hNb2RpZmllZEV2ZW50KFN0cmluZ0ltcGwqIG9sZFZhbHVlKTsKIAogcHJpdmF0ZToKKyAg
ICB2aXJ0dWFsIFN0cmluZyBub2RlVmFsdWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Tm9kZVZhbHVlKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNDaGFyYWN0ZXJEYXRhTm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0
dWFsIGludCBtYXhDaGFyYWN0ZXJPZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgb2Zm
c2V0SW5DaGFyYWN0ZXJzKCkgY29uc3Q7CisKICAgICB2b2lkIGNoZWNrQ2hhckRhdGFPcGVyYXRp
b24odW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gbV9kYXRhOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9kb20vQ29tbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ29tbWVudC5jcHAJ
KHJldmlzaW9uIDQ2Njc5KQorKysgV2ViQ29yZS9kb20vQ29tbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsOSArMSw3IEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00g
aW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCisvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDIyICsyMiwxNiBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbW1lbnQuaCIKIAotI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ29tbWVudDo6Q29tbWVudChEb2N1
bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIHRleHQpCi0gICAgOiBDaGFyYWN0ZXJEYXRhKGRvYywg
dGV4dCkKLXsKLX0KLQotQ29tbWVudDo6Q29tbWVudChEb2N1bWVudCogZG9jKQotICAgIDogQ2hh
cmFjdGVyRGF0YShkb2MpCitpbmxpbmUgQ29tbWVudDo6Q29tbWVudChEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IFN0cmluZyYgdGV4dCkKKyAgICA6IENoYXJhY3RlckRhdGEoZG9jdW1lbnQsIHRl
eHQsIENyZWF0ZU90aGVyKQogewogfQogCi1Db21tZW50Ojp+Q29tbWVudCgpCitQYXNzUmVmUHRy
PENvbW1lbnQ+IENvbW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbW1lbnQoZG9jdW1lbnQsIHRl
eHQpKTsKIH0KIAogU3RyaW5nIENvbW1lbnQ6Om5vZGVOYW1lKCkgY29uc3QKQEAgLTU0LDEwICs0
Niw5IEBAIE5vZGU6Ok5vZGVUeXBlIENvbW1lbnQ6Om5vZGVUeXBlKCkgY29uc3QKIAogUGFzc1Jl
ZlB0cjxOb2RlPiBDb21tZW50OjpjbG9uZU5vZGUoYm9vbCAvKmRlZXAqLykKIHsKLSAgICByZXR1
cm4gZG9jdW1lbnQoKS0+Y3JlYXRlQ29tbWVudChtX2RhdGEpOworICAgIHJldHVybiBjcmVhdGUo
ZG9jdW1lbnQoKSwgZGF0YSgpKTsKIH0KIAotLy8gRE9NIFNlY3Rpb24gMS4xLjEKIGJvb2wgQ29t
bWVudDo6Y2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSkKIHsKICAgICByZXR1cm4gZmFsc2U7Cklu
ZGV4OiBXZWJDb3JlL2RvbS9Db21tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ29t
bWVudC5oCShyZXZpc2lvbiA0NjY3OSkKKysrIFdlYkNvcmUvZG9tL0NvbW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw5ICsxLDcgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
RE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMxLDE2ICsyOSwxNCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbW1lbnQgOiBwdWJsaWMgQ2hhcmFjdGVyRGF0
YSB7CiBwdWJsaWM6Ci0gICAgQ29tbWVudChEb2N1bWVudCosIGNvbnN0IFN0cmluZyAmX3RleHQp
OwotICAgIENvbW1lbnQoRG9jdW1lbnQqKTsKLSAgICB2aXJ0dWFsIH5Db21tZW50KCk7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q29tbWVudD4gY3JlYXRlKERvY3VtZW50KiwgY29uc3QgU3RyaW5n
Jik7CisKK3ByaXZhdGU6CisgICAgQ29tbWVudChEb2N1bWVudCosIGNvbnN0IFN0cmluZyYpOwog
Ci0gICAgLy8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xhc3NlcwogICAg
IHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCBOb2RlVHlwZSBu
b2RlVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlPiBjbG9uZU5vZGUo
Ym9vbCBkZWVwKTsKLQotICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKICAg
ICB2aXJ0dWFsIGJvb2wgaXNDb21tZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSk7CiB9OwpJbmRleDogV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZS5jcHAJKHJldmlzaW9uIDQ2Njc5KQorKysgV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2OSwxNiArODY5LDE2IEBAIHN0YXRpYyB2b2lk
IGRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMKICAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hG
b3JiaWRkZW4oKSk7CiAKICAgICBSZWZQdHI8Tm9kZT4gYyA9IGNoaWxkOwotICAgIERvY1B0cjxE
b2N1bWVudD4gZG9jID0gY2hpbGQtPmRvY3VtZW50KCk7CisgICAgUmVmUHRyPERvY3VtZW50PiBk
b2N1bWVudCA9IGNoaWxkLT5kb2N1bWVudCgpOwogCiAgICAgaWYgKGMtPnBhcmVudE5vZGUoKSAm
JiBjLT5wYXJlbnROb2RlKCktPmluRG9jdW1lbnQoKSkKICAgICAgICAgYy0+aW5zZXJ0ZWRJbnRv
RG9jdW1lbnQoKTsKICAgICBlbHNlCiAgICAgICAgIGMtPmluc2VydGVkSW50b1RyZWUodHJ1ZSk7
CiAKLSAgICBkb2MtPmluY0RPTVRyZWVWZXJzaW9uKCk7CisgICAgZG9jdW1lbnQtPmluY0RPTVRy
ZWVWZXJzaW9uKCk7CiAKLSAgICBpZiAoYy0+cGFyZW50Tm9kZSgpICYmIGRvYy0+aGFzTGlzdGVu
ZXJUeXBlKERvY3VtZW50OjpET01OT0RFSU5TRVJURURfTElTVEVORVIpKSB7CisgICAgaWYgKGMt
PnBhcmVudE5vZGUoKSAmJiBkb2N1bWVudC0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01O
T0RFSU5TRVJURURfTElTVEVORVIpKSB7CiAgICAgICAgIGVjID0gMDsKICAgICAgICAgYy0+ZGlz
cGF0Y2hNdXRhdGlvbkV2ZW50KGV2ZW50TmFtZXMoKS5ET01Ob2RlSW5zZXJ0ZWRFdmVudCwgdHJ1
ZSwgYy0+cGFyZW50Tm9kZSgpLCBTdHJpbmcoKSwgU3RyaW5nKCksIGVjKTsgCiAgICAgICAgIGlm
IChlYykKQEAgLTg4NiwyNyArODg2LDI4IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRJbnNl
cnRpb25FdmVudHMKICAgICB9CiAKICAgICAvLyBkaXNwYXRjaCB0aGUgRE9NTm9kZUluc2VydGVk
SW50b0RvY3VtZW50IGV2ZW50IHRvIGFsbCBkZXNjZW5kYW50cwotICAgIGlmIChjLT5pbkRvY3Vt
ZW50KCkgJiYgZG9jLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTU5PREVJTlNFUlRFRElO
VE9ET0NVTUVOVF9MSVNURU5FUikpCisgICAgaWYgKGMtPmluRG9jdW1lbnQoKSAmJiBkb2N1bWVu
dC0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01OT0RFSU5TRVJURURJTlRPRE9DVU1FTlRf
TElTVEVORVIpKSB7CiAgICAgICAgIGZvciAoOyBjOyBjID0gYy0+dHJhdmVyc2VOZXh0Tm9kZShj
aGlsZCkpIHsKICAgICAgICAgICAgIGVjID0gMDsKICAgICAgICAgICAgIGMtPmRpc3BhdGNoTXV0
YXRpb25FdmVudChldmVudE5hbWVzKCkuRE9NTm9kZUluc2VydGVkSW50b0RvY3VtZW50RXZlbnQs
IGZhbHNlLCAwLCBTdHJpbmcoKSwgU3RyaW5nKCksIGVjKTsgCiAgICAgICAgICAgICBpZiAoZWMp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgfQogfQogCiBzdGF0aWMg
dm9pZCBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhOb2RlKiBjaGlsZCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgUmVmUHRyPE5vZGU+IGMgPSBjaGlsZDsKLSAgICBEb2NQdHI8RG9jdW1l
bnQ+IGRvYyA9IGNoaWxkLT5kb2N1bWVudCgpOworICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1l
bnQgPSBjaGlsZC0+ZG9jdW1lbnQoKTsKIAogICAgIC8vIHVwZGF0ZSBhdXhpbGlhcnkgZG9jIGlu
Zm8gKGUuZy4gaXRlcmF0b3JzKSB0byBub3RlIHRoYXQgbm9kZSBpcyBiZWluZyByZW1vdmVkCi0g
ICAgZG9jLT5ub2RlV2lsbEJlUmVtb3ZlZChjaGlsZCk7CisgICAgZG9jdW1lbnQtPm5vZGVXaWxs
QmVSZW1vdmVkKGNoaWxkKTsKIAotICAgIGRvYy0+aW5jRE9NVHJlZVZlcnNpb24oKTsKKyAgICBk
b2N1bWVudC0+aW5jRE9NVHJlZVZlcnNpb24oKTsKIAogICAgIC8vIGRpc3BhdGNoIHByZS1yZW1v
dmFsIG11dGF0aW9uIGV2ZW50cwotICAgIGlmIChjLT5wYXJlbnROb2RlKCkgJiYgZG9jLT5oYXNM
aXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTU5PREVSRU1PVkVEX0xJU1RFTkVSKSkgeworICAgIGlm
IChjLT5wYXJlbnROb2RlKCkgJiYgZG9jdW1lbnQtPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6
RE9NTk9ERVJFTU9WRURfTElTVEVORVIpKSB7CiAgICAgICAgIGVjID0gMDsKICAgICAgICAgYy0+
ZGlzcGF0Y2hNdXRhdGlvbkV2ZW50KGV2ZW50TmFtZXMoKS5ET01Ob2RlUmVtb3ZlZEV2ZW50LCB0
cnVlLCBjLT5wYXJlbnROb2RlKCksIFN0cmluZygpLCBTdHJpbmcoKSwgZWMpOyAKICAgICAgICAg
aWYgKGVjKQpAQCAtOTE0LDcgKzkxNSw3IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRSZW1v
dmFsRXZlbnRzKE4KICAgICB9CiAKICAgICAvLyBkaXNwYXRjaCB0aGUgRE9NTm9kZVJlbW92ZWRG
cm9tRG9jdW1lbnQgZXZlbnQgdG8gYWxsIGRlc2NlbmRhbnRzCi0gICAgaWYgKGMtPmluRG9jdW1l
bnQoKSAmJiBkb2MtPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9NTk9ERVJFTU9WRURGUk9N
RE9DVU1FTlRfTElTVEVORVIpKQorICAgIGlmIChjLT5pbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQt
Pmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9NTk9ERVJFTU9WRURGUk9NRE9DVU1FTlRfTElT
VEVORVIpKQogICAgICAgICBmb3IgKDsgYzsgYyA9IGMtPnRyYXZlcnNlTmV4dE5vZGUoY2hpbGQp
KSB7CiAgICAgICAgICAgICBlYyA9IDA7CiAgICAgICAgICAgICBjLT5kaXNwYXRjaE11dGF0aW9u
RXZlbnQoZXZlbnROYW1lcygpLkRPTU5vZGVSZW1vdmVkRnJvbURvY3VtZW50RXZlbnQsIGZhbHNl
LCAwLCBTdHJpbmcoKSwgU3RyaW5nKCksIGVjKTsgCkluZGV4OiBXZWJDb3JlL2RvbS9Db250YWlu
ZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCShyZXZp
c2lvbiA0NjY3OSkKKysrIFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBr
ZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTM4LDcgKzM4LDYgQEAgbmFtZXNwYWNlIFByaXZhdGUgeyAKIAogY2xhc3Mg
Q29udGFpbmVyTm9kZSA6IHB1YmxpYyBOb2RlIHsKIHB1YmxpYzoKLSAgICBDb250YWluZXJOb2Rl
KERvY3VtZW50KiwgYm9vbCBpc0VsZW1lbnQgPSBmYWxzZSk7CiAgICAgdmlydHVhbCB+Q29udGFp
bmVyTm9kZSgpOwogCiAgICAgTm9kZSogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmly
c3RDaGlsZDsgfQpAQCAtNzQsNiArNzMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbG9uZUNoaWxk
Tm9kZXMoQ29udGFpbmVyTm9kZSogY2xvbmUpOwogCiBwcm90ZWN0ZWQ6CisgICAgQ29udGFpbmVy
Tm9kZShEb2N1bWVudCosIENvbnN0cnVjdGlvblR5cGUgPSBDcmVhdGVDb250YWluZXIpOworCiAg
ICAgc3RhdGljIHZvaWQgcXVldWVQb3N0QXR0YWNoQ2FsbGJhY2soTm9kZUNhbGxiYWNrLCBOb2Rl
Kik7CiAgICAgdm9pZCBzdXNwZW5kUG9zdEF0dGFjaENhbGxiYWNrcygpOwogICAgIHZvaWQgcmVz
dW1lUG9zdEF0dGFjaENhbGxiYWNrcygpOwpAQCAtOTcsOCArOTgsOCBAQCBwcml2YXRlOgogICAg
IE5vZGUqIG1fbGFzdENoaWxkOwogfTsKIAotaW5saW5lIENvbnRhaW5lck5vZGU6OkNvbnRhaW5l
ck5vZGUoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGlzRWxlbWVudCkKLSAgICA6IE5vZGUoZG9j
dW1lbnQsIGlzRWxlbWVudCwgdHJ1ZSkKK2lubGluZSBDb250YWluZXJOb2RlOjpDb250YWluZXJO
b2RlKERvY3VtZW50KiBkb2N1bWVudCwgQ29uc3RydWN0aW9uVHlwZSB0eXBlKQorICAgIDogTm9k
ZShkb2N1bWVudCwgdHlwZSkKICAgICAsIG1fZmlyc3RDaGlsZCgwKQogICAgICwgbV9sYXN0Q2hp
bGQoMCkKIHsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY1B0ci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0RvY1B0ci5oCShyZXZpc2lvbiA0NjY3OSkKKysrIFdlYkNvcmUvZG9tL0RvY1B0ci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDExNCArMSBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqIENvcHlyaWdodCAoQykgMjAw
NSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBEb2NQdHJfaAotI2RlZmlu
ZSBEb2NQdHJfaAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBj
bGFzcyBEb2NQdHIgewotcHVibGljOgotICAgIERvY1B0cigpIDogbV9wdHIoMCkge30KLSAgICBE
b2NQdHIoVCAqcHRyKSA6IG1fcHRyKHB0cikgeyBpZiAocHRyKSBwdHItPnNlbGZPbmx5UmVmKCk7
IH0KLSAgICBEb2NQdHIoY29uc3QgRG9jUHRyICZvKSA6IG1fcHRyKG8ubV9wdHIpIHsgaWYgKFQg
KnB0ciA9IG1fcHRyKSBwdHItPnNlbGZPbmx5UmVmKCk7IH0KLSAgICB+RG9jUHRyKCkgeyBpZiAo
VCAqcHRyID0gbV9wdHIpIHB0ci0+c2VsZk9ubHlEZXJlZigpOyB9Ci0gICAgCi0gICAgdGVtcGxh
dGUgPGNsYXNzIFU+IERvY1B0cihjb25zdCBEb2NQdHI8VT4gJm8pIDogbV9wdHIoby5nZXQoKSkg
eyBpZiAoVCAqcHRyID0gbV9wdHIpIHB0ci0+c2VsZk9ubHlSZWYoKTsgfQotICAgIAotICAgIHZv
aWQgcmVzZXRTa2lwcGluZ1JlZihUICpvKSB7IG1fcHRyID0gbzsgfQotICAgIAotICAgIFQgKmdl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9Ci0gICAgCi0gICAgVCAmb3BlcmF0b3IqKCkgY29u
c3QgeyByZXR1cm4gKm1fcHRyOyB9Ci0gICAgVCAqb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu
IG1fcHRyOyB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9w
dHI7IH0KLQotICAgIC8vIHRoaXMgdHlwZSBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBs
aWNpdCBjb252ZXJzaW9uIHRvCi0gICAgLy8gYm9vbCBidXQgbm90IHRvIG90aGVyIGludGVnZXIg
dHlwZXMKLSAgICAKLSAgICB0eXBlZGVmIFQgKiAoRG9jUHRyOjoqVW5zcGVjaWZpZWRCb29sVHlw
ZSkoKSBjb25zdDsKLSAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3B0ciA/ICZEb2NQdHI6OmdldCA6IDA7Ci0gICAgfQotICAg
IAotICAgIERvY1B0ciAmb3BlcmF0b3I9KGNvbnN0IERvY1B0ciAmKTsKLSAgICBEb2NQdHIgJm9w
ZXJhdG9yPShUICopOwotICAgIAotIHByaXZhdGU6Ci0gICAgVCAqbV9wdHI7Ci19OwotCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4gRG9jUHRyPFQ+ICZEb2NQdHI8VD46Om9wZXJhdG9yPShjb25zdCBEb2NQ
dHI8VD4gJm8pIAotewotICAgIFQgKm9wdHIgPSBvLm1fcHRyOwotICAgIGlmIChvcHRyKQotICAg
ICAgICBvcHRyLT5zZWxmT25seVJlZigpOwotICAgIGlmIChUICpwdHIgPSBtX3B0cikKLSAgICAg
ICAgcHRyLT5zZWxmT25seURlcmVmKCk7Ci0gICAgbV9wdHIgPSBvcHRyOwotICAgICAgICByZXR1
cm4gKnRoaXM7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgRG9jUHRyPFQ+ICZEb2NQ
dHI8VD46Om9wZXJhdG9yPShUICpvcHRyKQotewotICAgIGlmIChvcHRyKQotICAgICAgICBvcHRy
LT5zZWxmT25seVJlZigpOwotICAgIGlmIChUICpwdHIgPSBtX3B0cikKLSAgICAgICAgcHRyLT5z
ZWxmT25seURlcmVmKCk7Ci0gICAgbV9wdHIgPSBvcHRyOwotICAgIHJldHVybiAqdGhpczsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRG9jUHRy
PFQ+ICZhLCBjb25zdCBEb2NQdHI8VD4gJmIpIAoteyAKLSAgICByZXR1cm4gYS5nZXQoKSA9PSBi
LmdldCgpOyAKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgRG9jUHRyPFQ+ICZhLCBjb25zdCBUICpiKSAKLXsgCi0gICAgcmV0dXJuIGEuZ2V0KCkg
PT0gYjsgCi19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFQgKmEsIGNvbnN0IERvY1B0cjxUPiAmYikgCi17Ci0gICAgcmV0dXJuIGEgPT0gYi5nZXQo
KTsgCi19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IERvY1B0cjxUPiAmYSwgY29uc3QgRG9jUHRyPFQ+ICZiKSAKLXsgCi0gICAgcmV0dXJuIGEuZ2V0
KCkgIT0gYi5nZXQoKTsgCi19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IERvY1B0cjxUPiAmYSwgY29uc3QgVCAqYikKLXsKLSAgICByZXR1cm4gYS5n
ZXQoKSAhPSBiOyAKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgVCAqYSwgY29uc3QgRG9jUHRyPFQ+ICZiKSAKLXsgCi0gICAgcmV0dXJuIGEgIT0g
Yi5nZXQoKTsgCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIERvY1B0
cl9oCisjZXJyb3IKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDQ2Njc5KQorKysgV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzksNyArMzM5LDcgQEAgRG9jdW1l
bnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgYm9vbCBpcwogICAgICwgbV9jb250YWluc1dNTENv
bnRlbnQoZmFsc2UpCiAjZW5kaWYKIHsKLSAgICBtX2RvY3VtZW50LnJlc2V0U2tpcHBpbmdSZWYo
dGhpcyk7CisgICAgbV9kb2N1bWVudCA9IHRoaXM7CiAKICAgICBtX3ByaW50aW5nID0gZmFsc2U7
CiAgICAgCkBAIC00MDksOCArNDA5LDcgQEAgdm9pZCBEb2N1bWVudDo6cmVtb3ZlZExhc3RSZWYo
KQogICAgICAgICAvLyB3YW50IHRoZSBkb2N1bWVudCB0byBiZSBkZXN0cnVjdGVkIHVudGlsIGFm
dGVyCiAgICAgICAgIC8vIHJlbW92ZUFsbENoaWxkcmVuIHJldHVybnMsIHNvIHdlIGd1YXJkIG91
cnNlbHZlcyB3aXRoIGFuCiAgICAgICAgIC8vIGV4dHJhIHNlbGYtb25seSByZWYuCi0KLSAgICAg
ICAgRG9jUHRyPERvY3VtZW50PiBndWFyZCh0aGlzKTsKKyAgICAgICAgc2VsZk9ubHlSZWYoKTsK
IAogICAgICAgICAvLyBXZSBtdXN0IG1ha2Ugc3VyZSBub3QgdG8gYmUgcmV0YWluaW5nIGFueSBv
ZiBvdXIgY2hpbGRyZW4gdGhyb3VnaAogICAgICAgICAvLyB0aGVzZSBleHRyYSBwb2ludGVycyBv
ciB3ZSB3aWxsIGNyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZS4KQEAgLTQzNCw2ICs0MzMsOCBAQCB2
b2lkIERvY3VtZW50OjpyZW1vdmVkTGFzdFJlZigpCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBt
X2luUmVtb3ZlZExhc3RSZWZGdW5jdGlvbiA9IGZhbHNlOwogI2VuZGlmCisKKyAgICAgICAgc2Vs
Zk9ubHlEZXJlZigpOwogICAgIH0gZWxzZSB7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBtX2Rl
bGV0aW9uSGFzQmVndW4gPSB0cnVlOwpAQCAtNDYwLDcgKzQ2MSw3IEBAIERvY3VtZW50Ojp+RG9j
dW1lbnQoKQogI2VuZGlmCiAKICAgICBkZWxldGUgbV90b2tlbml6ZXI7Ci0gICAgbV9kb2N1bWVu
dC5yZXNldFNraXBwaW5nUmVmKDApOworICAgIG1fZG9jdW1lbnQgPSAwOwogICAgIGRlbGV0ZSBt
X3N0eWxlU2VsZWN0b3I7CiAgICAgZGVsZXRlIG1fZG9jTG9hZGVyOwogICAgIApAQCAtNDk2LDgg
KzQ5Nyw2IEBAIERvY3VtZW50Ojp+RG9jdW1lbnQoKQogCiAgICAgaWYgKG1fc3R5bGVTaGVldHMp
CiAgICAgICAgIG1fc3R5bGVTaGVldHMtPmRvY3VtZW50RGVzdHJveWVkKCk7Ci0KLSAgICBtX2Rv
Y3VtZW50ID0gMDsKIH0KIAogdm9pZCBEb2N1bWVudDo6cmVzZXRMaW5rQ29sb3IoKQpAQCAtNTY3
LDE3ICs1NjYsMTcgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBEb2N1bWVudDo6Y3JlYXRlRWxlbQog
CiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERvY3VtZW50OjpjcmVhdGVEb2N1bWVudEZy
YWdtZW50KCkKIHsKLSAgICByZXR1cm4gbmV3IERvY3VtZW50RnJhZ21lbnQoZG9jdW1lbnQoKSk7
CisgICAgcmV0dXJuIERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKIH0KIAog
UGFzc1JlZlB0cjxUZXh0PiBEb2N1bWVudDo6Y3JlYXRlVGV4dE5vZGUoY29uc3QgU3RyaW5nJiBk
YXRhKQogewotICAgIHJldHVybiBuZXcgVGV4dCh0aGlzLCBkYXRhKTsKKyAgICByZXR1cm4gVGV4
dDo6Y3JlYXRlKHRoaXMsIGRhdGEpOwogfQogCiBQYXNzUmVmUHRyPENvbW1lbnQ+IERvY3VtZW50
OjpjcmVhdGVDb21tZW50KGNvbnN0IFN0cmluZyYgZGF0YSkKIHsKLSAgICByZXR1cm4gbmV3IENv
bW1lbnQodGhpcywgZGF0YSk7CisgICAgcmV0dXJuIENvbW1lbnQ6OmNyZWF0ZSh0aGlzLCBkYXRh
KTsKIH0KIAogUGFzc1JlZlB0cjxDREFUQVNlY3Rpb24+IERvY3VtZW50OjpjcmVhdGVDREFUQVNl
Y3Rpb24oY29uc3QgU3RyaW5nJiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTU4Niw3ICs1
ODUsNyBAQCBQYXNzUmVmUHRyPENEQVRBU2VjdGlvbj4gRG9jdW1lbnQ6OmNyZWF0CiAgICAgICAg
IGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBy
ZXR1cm4gbmV3IENEQVRBU2VjdGlvbih0aGlzLCBkYXRhKTsKKyAgICByZXR1cm4gQ0RBVEFTZWN0
aW9uOjpjcmVhdGUodGhpcywgZGF0YSk7CiB9CiAKIFBhc3NSZWZQdHI8UHJvY2Vzc2luZ0luc3Ry
dWN0aW9uPiBEb2N1bWVudDo6Y3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uKGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtNTk5
LDcgKzU5OCw3IEBAIFBhc3NSZWZQdHI8UHJvY2Vzc2luZ0luc3RydWN0aW9uPiBEb2N1bWUKICAg
ICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQot
ICAgIHJldHVybiBuZXcgUHJvY2Vzc2luZ0luc3RydWN0aW9uKHRoaXMsIHRhcmdldCwgZGF0YSk7
CisgICAgcmV0dXJuIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Y3JlYXRlKHRoaXMsIHRhcmdldCwg
ZGF0YSk7CiB9CiAKIFBhc3NSZWZQdHI8RW50aXR5UmVmZXJlbmNlPiBEb2N1bWVudDo6Y3JlYXRl
RW50aXR5UmVmZXJlbmNlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBA
IC02MTIsMTIgKzYxMSwxMiBAQCBQYXNzUmVmUHRyPEVudGl0eVJlZmVyZW5jZT4gRG9jdW1lbnQ6
OmNyCiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KLSAgICByZXR1cm4gbmV3IEVudGl0eVJlZmVyZW5jZSh0aGlzLCBuYW1lKTsKKyAgICBy
ZXR1cm4gRW50aXR5UmVmZXJlbmNlOjpjcmVhdGUodGhpcywgbmFtZSk7CiB9CiAKIFBhc3NSZWZQ
dHI8RWRpdGluZ1RleHQ+IERvY3VtZW50OjpjcmVhdGVFZGl0aW5nVGV4dE5vZGUoY29uc3QgU3Ry
aW5nJiB0ZXh0KQogewotICAgIHJldHVybiBuZXcgRWRpdGluZ1RleHQodGhpcywgdGV4dCk7Cisg
ICAgcmV0dXJuIEVkaXRpbmdUZXh0OjpjcmVhdGUodGhpcywgdGV4dCk7CiB9CiAKIFBhc3NSZWZQ
dHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gRG9jdW1lbnQ6OmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRp
b24oKQpAQCAtNjgyLDExICs2ODEsOCBAQCBQYXNzUmVmUHRyPE5vZGU+IERvY3VtZW50OjppbXBv
cnROb2RlKE5vCiAKICAgICAgICAgICAgIHJldHVybiBuZXdFbGVtZW50LnJlbGVhc2UoKTsKICAg
ICAgICAgfQotICAgICAgICBjYXNlIEFUVFJJQlVURV9OT0RFOiB7Ci0gICAgICAgICAgICBSZWZQ
dHI8QXR0cj4gbmV3QXR0ciA9IG5ldyBBdHRyKDAsIHRoaXMsIHN0YXRpY19jYXN0PEF0dHIqPihp
bXBvcnRlZE5vZGUpLT5hdHRyKCktPmNsb25lKCkpOwotICAgICAgICAgICAgbmV3QXR0ci0+Y3Jl
YXRlVGV4dENoaWxkKCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3QXR0ci5yZWxlYXNlKCk7Ci0g
ICAgICAgIH0KKyAgICAgICAgY2FzZSBBVFRSSUJVVEVfTk9ERToKKyAgICAgICAgICAgIHJldHVy
biBBdHRyOjpjcmVhdGUoMCwgdGhpcywgc3RhdGljX2Nhc3Q8QXR0cio+KGltcG9ydGVkTm9kZSkt
PmF0dHIoKS0+Y2xvbmUoKSk7CiAgICAgICAgIGNhc2UgRE9DVU1FTlRfRlJBR01FTlRfTk9ERTog
ewogICAgICAgICAgICAgRG9jdW1lbnRGcmFnbWVudCogb2xkRnJhZ21lbnQgPSBzdGF0aWNfY2Fz
dDxEb2N1bWVudEZyYWdtZW50Kj4oaW1wb3J0ZWROb2RlKTsKICAgICAgICAgICAgIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBuZXdGcmFnbWVudCA9IGNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsK
QEAgLTM4MjQsNyArMzgyMCw3IEBAIFBhc3NSZWZQdHI8QXR0cj4gRG9jdW1lbnQ6OmNyZWF0ZUF0
dHJpYnUKIAogICAgIC8vIEZJWE1FOiBBc3N1bWUgdGhpcyBpcyBhIG1hcHBlZCBhdHRyaWJ1dGUs
IHNpbmNlIGNyZWF0ZUF0dHJpYnV0ZSBpc24ndCBuYW1lc3BhY2UtYXdhcmUuICBUaGVyZSdzIG5v
IGhhcm0gdG8gWE1MCiAgICAgLy8gZG9jdW1lbnRzIGlmIHdlJ3JlIHdyb25nLgotICAgIHJldHVy
biBuZXcgQXR0cigwLCB0aGlzLCBNYXBwZWRBdHRyaWJ1dGU6OmNyZWF0ZShxTmFtZSwgU3RyaW5n
SW1wbDo6ZW1wdHkoKSkpOworICAgIHJldHVybiBBdHRyOjpjcmVhdGUoMCwgdGhpcywgTWFwcGVk
QXR0cmlidXRlOjpjcmVhdGUocU5hbWUsIFN0cmluZ0ltcGw6OmVtcHR5KCkpKTsKIH0KIAogI2lm
IEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDQ2Njc5KQorKysgV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDE5ICsxNzIsMTYgQEAgY2xhc3MgRG9j
dW1lbnQgOiBwdWJsaWMgQ29udGFpbmVyTm9kZSwgcAogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERvY3VtZW50PiBjcmVhdGUoRnJhbWUqIGZyYW1lKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIG5ldyBEb2N1bWVudChmcmFtZSwgZmFsc2UpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IERvY3VtZW50KGZyYW1lLCBmYWxzZSkpOwogICAgIH0KICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxEb2N1bWVudD4gY3JlYXRlWEhUTUwoRnJhbWUqIGZyYW1lKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIG5ldyBEb2N1bWVudChmcmFtZSwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRG9jdW1lbnQoZnJhbWUsIHRydWUpKTsKICAgICB9CiAgICAgdmlydHVhbCB+RG9jdW1lbnQo
KTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0RvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQotCiAgICAgdXNpbmcgQ29udGFpbmVyTm9kZTo6cmVmOwogICAgIHVzaW5nIENvbnRhaW5lck5v
ZGU6OmRlcmVmOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkTGFzdFJlZigpOwogCiAgICAgLy8g
Tm9kZXMgYmVsb25naW5nIHRvIHRoaXMgZG9jdW1lbnQgaG9sZCAic2VsZi1vbmx5IiByZWZlcmVu
Y2VzIC0KICAgICAvLyB0aGVzZSBhcmUgZW5vdWdoIHRvIGtlZXAgdGhlIGRvY3VtZW50IGZyb20g
YmVpbmcgZGVzdHJveWVkLCBidXQKQEAgLTIxNCw3ICsyMTEsNiBAQCBwdWJsaWM6CiAgICAgRG9j
dW1lbnRUeXBlKiBkb2N0eXBlKCkgY29uc3QgeyByZXR1cm4gbV9kb2NUeXBlLmdldCgpOyB9CiAK
ICAgICBET01JbXBsZW1lbnRhdGlvbiogaW1wbGVtZW50YXRpb24oKSBjb25zdDsKLSAgICB2aXJ0
dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5v
ZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291
bnREZWx0YSA9IDApOwogICAgIAogICAgIEVsZW1lbnQqIGRvY3VtZW50RWxlbWVudCgpIGNvbnN0
CiAgICAgewpAQCAtMjk5LDExICsyOTUsNiBAQCBwdWJsaWM6CiAKICAgICBDb2xsZWN0aW9uQ2Fj
aGUqIG5hbWVDb2xsZWN0aW9uSW5mbyhDb2xsZWN0aW9uVHlwZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lKTsKIAotICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAgcGFyZW50IGNs
YXNzZXMKLQotICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0OwotCiAgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90
IHBhcnQgb2YgRE9NKQogICAgIHZpcnR1YWwgYm9vbCBpc0hUTUxEb2N1bWVudCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzSW1hZ2VEb2N1bWVudCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC00NTUsOSArNDQ2LDYgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBTdHJpbmcgdXNlckFnZW50KGNvbnN0IEtVUkwmKSBjb25zdDsKIAotICAgIC8vIGZyb20g
Y2FjaGVkT2JqZWN0Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHNldENTU1N0eWxlU2hlZXQoY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgY29uc3QgQ2FjaGVkQ1NTU3R5
bGVTaGVldCopOwotCiAjaWYgRlJBTUVfTE9BRFNfVVNFUl9TVFlMRVNIRUVUCiAgICAgdm9pZCBz
ZXRVc2VyU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHNoZWV0KTsKICNlbmRpZgpAQCAtNDc0LDEw
ICs0NjIsNiBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFBhcnNlTW9kZSB7IENvbXBhdCwgQWxtb3N0
U3RyaWN0LCBTdHJpY3QgfTsKIAotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5l
UGFyc2VNb2RlKCkge30KLSAgICAKLXB1YmxpYzoKICAgICB2b2lkIHNldFBhcnNlTW9kZShQYXJz
ZU1vZGUgbSkgeyBtX3BhcnNlTW9kZSA9IG07IH0KICAgICBQYXJzZU1vZGUgcGFyc2VNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXJzZU1vZGU7IH0KIApAQCAtNTA2LDExICs0OTAsNiBAQCBwdWJs
aWM6CiAgICAgCiAgICAgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyBwcmVwYXJlTW91c2VF
dmVudChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZChOb2Rl
VHlwZSk7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IGNsb25lTm9kZShib29sIGRlZXAp
OwotCi0gICAgdmlydHVhbCBib29sIGNhblJlcGxhY2VDaGlsZChOb2RlKiBuZXdDaGlsZCwgTm9k
ZSogb2xkQ2hpbGQpOwotICAgIAogICAgIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWV0cygpOwog
CiAgICAgLyogTmV3bHkgcHJvcG9zZWQgQ1NTMyBtZWNoYW5pc20gZm9yIHNlbGVjdGluZyBhbHRl
cm5hdGUKQEAgLTc0Myw4ICs3MjIsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldERvY1R5cGUo
UGFzc1JlZlB0cjxEb2N1bWVudFR5cGU+KTsKIAotICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hlZFBh
cnNpbmcoKTsKLQogI2lmIEVOQUJMRShYUEFUSCkKICAgICAvLyBYUGF0aEV2YWx1YXRvciBtZXRo
b2RzCiAgICAgUGFzc1JlZlB0cjxYUGF0aEV4cHJlc3Npb24+IGNyZWF0ZUV4cHJlc3Npb24oY29u
c3QgU3RyaW5nJiBleHByZXNzaW9uLApAQCAtNzg2LDcgKzc2Myw2IEBAIHB1YmxpYzoKICAgICBI
VE1MQ2FudmFzRWxlbWVudCogZ2V0Q1NTQ2FudmFzRWxlbWVudChjb25zdCBTdHJpbmcmIG5hbWUp
OwogCiAgICAgYm9vbCBpc0ROU1ByZWZldGNoRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNE
TlNQcmVmZXRjaEVuYWJsZWQ7IH0KLSAgICB2b2lkIGluaXRETlNQcmVmZXRjaCgpOwogICAgIHZv
aWQgcGFyc2VETlNQcmVmZXRjaENvbnRyb2xIZWFkZXIoY29uc3QgU3RyaW5nJik7CiAKICAgICB2
aXJ0dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBp
bnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwpAQCAtNzk1LDIyICs3NzEs
MTMwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2NyaXB0SW1wb3J0ZWQodW5zaWduZWQg
bG9uZywgY29uc3QgU3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrKFBhc3NSZWZQ
dHI8VGFzaz4pOyAvLyBFeGVjdXRlcyB0aGUgdGFzayBvbiBjb250ZXh0J3MgdGhyZWFkIGFzeW5j
aHJvbm91c2x5LgogCisgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6Ok5vZGUqLCBKU05vZGUq
PiBKU1dyYXBwZXJDYWNoZTsKKyAgICBKU1dyYXBwZXJDYWNoZSYgd3JhcHBlckNhY2hlKCkgeyBy
ZXR1cm4gbV93cmFwcGVyQ2FjaGU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hlZFBhcnNp
bmcoKTsKKworICAgIGJvb2wgaW5QYWdlQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX2luUGFnZUNh
Y2hlOyB9CisgICAgdm9pZCBzZXRJblBhZ2VDYWNoZShib29sIGZsYWcpOworICAgIAorICAgIC8v
IEVsZW1lbnRzIGNhbiByZWdpc3RlciB0aGVtc2VsdmVzIGZvciB0aGUgImRvY3VtZW50V2lsbEJl
Y29tZUluYWN0aXZlKCkiIGFuZCAgCisgICAgLy8gImRvY3VtZW50RGlkQmVjb21lQWN0aXZlKCki
IGNhbGxiYWNrcworICAgIHZvaWQgcmVnaXN0ZXJGb3JEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFj
a3MoRWxlbWVudCopOworICAgIHZvaWQgdW5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNh
bGxiYWNrcyhFbGVtZW50Kik7CisgICAgdm9pZCBkb2N1bWVudFdpbGxCZWNvbWVJbmFjdGl2ZSgp
OworICAgIHZvaWQgZG9jdW1lbnREaWRCZWNvbWVBY3RpdmUoKTsKKworICAgIHZvaWQgcmVnaXN0
ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50Kik7CisgICAgdm9pZCB1bnJlZ2lzdGVy
Rm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCopOworICAgIHZvaWQgbWVkaWFWb2x1bWVE
aWRDaGFuZ2UoKTsKKworICAgIGJvb2wgc2hvdWxkQ3JlYXRlUmVuZGVyZXJzKCk7CisKKyAgICB2
b2lkIHNldERlY29kZXIoUGFzc1JlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPik7CisgICAgVGV4
dFJlc291cmNlRGVjb2RlciogZGVjb2RlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2Rlci5nZXQo
KTsgfQorCisgICAgU3RyaW5nIGRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoY29uc3Qg
U3RyaW5nJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBkaXNwbGF5U3RyaW5n
TW9kaWZpZWRCeUVuY29kaW5nKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4pIGNvbnN0OworICAgIHZv
aWQgZGlzcGxheUJ1ZmZlck1vZGlmaWVkQnlFbmNvZGluZyhVQ2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBsZW4pIGNvbnN0OworCisgICAgLy8gUXVpcmsgZm9yIHRoZSBiZW5lZml0IG9mIEFwcGxlJ3Mg
RGljdGlvbmFyeSBhcHBsaWNhdGlvbi4KKyAgICB2b2lkIHNldEZyYW1lRWxlbWVudHNTaG91bGRJ
Z25vcmVTY3JvbGxpbmcoYm9vbCBpZ25vcmUpIHsgbV9mcmFtZUVsZW1lbnRzU2hvdWxkSWdub3Jl
U2Nyb2xsaW5nID0gaWdub3JlOyB9CisgICAgYm9vbCBmcmFtZUVsZW1lbnRzU2hvdWxkSWdub3Jl
U2Nyb2xsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUVsZW1lbnRzU2hvdWxkSWdub3JlU2Ny
b2xsaW5nOyB9CisKKyNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCisgICAgdm9pZCBzZXRE
YXNoYm9hcmRSZWdpb25zRGlydHkoYm9vbCBmKSB7IG1fZGFzaGJvYXJkUmVnaW9uc0RpcnR5ID0g
ZjsgfQorICAgIGJvb2wgZGFzaGJvYXJkUmVnaW9uc0RpcnR5KCkgY29uc3QgeyByZXR1cm4gbV9k
YXNoYm9hcmRSZWdpb25zRGlydHk7IH0KKyAgICBib29sIGhhc0Rhc2hib2FyZFJlZ2lvbnMgKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNEYXNoYm9hcmRSZWdpb25zOyB9CisgICAgdm9pZCBzZXRIYXNE
YXNoYm9hcmRSZWdpb25zKGJvb2wgZikgeyBtX2hhc0Rhc2hib2FyZFJlZ2lvbnMgPSBmOyB9Cisg
ICAgY29uc3QgVmVjdG9yPERhc2hib2FyZFJlZ2lvblZhbHVlPiYgZGFzaGJvYXJkUmVnaW9ucygp
IGNvbnN0OworICAgIHZvaWQgc2V0RGFzaGJvYXJkUmVnaW9ucyhjb25zdCBWZWN0b3I8RGFzaGJv
YXJkUmVnaW9uVmFsdWU+Jik7CisjZW5kaWYKKworICAgIHZvaWQgcmVtb3ZlQWxsRXZlbnRMaXN0
ZW5lcnMoKTsKKworICAgIHZvaWQgcmVnaXN0ZXJEaXNjb25uZWN0ZWROb2RlV2l0aEV2ZW50TGlz
dGVuZXJzKE5vZGUqKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJEaXNjb25uZWN0ZWROb2RlV2l0aEV2
ZW50TGlzdGVuZXJzKE5vZGUqKTsKKyAgICAKKyAgICBDaGVja2VkUmFkaW9CdXR0b25zJiBjaGVj
a2VkUmFkaW9CdXR0b25zKCkgeyByZXR1cm4gbV9jaGVja2VkUmFkaW9CdXR0b25zOyB9CisgICAg
CisjaWYgRU5BQkxFKFNWRykKKyAgICBjb25zdCBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIHN2Z0V4
dGVuc2lvbnMoKTsKKyAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIGFjY2Vzc1NWR0V4dGVuc2lv
bnMoKTsKKyNlbmRpZgorCisgICAgdm9pZCBpbml0U2VjdXJpdHlDb250ZXh0KCk7CisKKyAgICAv
LyBFeHBsaWNpdGx5IG92ZXJyaWRlIHRoZSBzZWN1cml0eSBvcmlnaW4gZm9yIHRoaXMgZG9jdW1l
bnQuCisgICAgLy8gTm90ZTogSXQgaXMgZGFuZ2Vyb3VzIHRvIGNoYW5nZSB0aGUgc2VjdXJpdHkg
b3JpZ2luIG9mIGEgZG9jdW1lbnQKKyAgICAvLyAgICAgICB0aGF0IGFscmVhZHkgY29udGFpbnMg
Y29udGVudC4KKyAgICB2b2lkIHNldFNlY3VyaXR5T3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7CisK
KyAgICBib29sIHByb2Nlc3NpbmdMb2FkRXZlbnQoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3Np
bmdMb2FkRXZlbnQ7IH0KKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICB2b2lkIGFkZE9wZW5E
YXRhYmFzZShEYXRhYmFzZSopOworICAgIHZvaWQgcmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNl
Kik7CisgICAgRGF0YWJhc2VUaHJlYWQqIGRhdGFiYXNlVGhyZWFkKCk7ICAgLy8gQ3JlYXRlcyB0
aGUgdGhyZWFkIGFzIG5lZWRlZCwgYnV0IG5vdCBpZiBpdCBoYXMgYmVlbiBhbHJlYWR5IHRlcm1p
bmF0ZWQuCisgICAgdm9pZCBzZXRIYXNPcGVuRGF0YWJhc2VzKCkgeyBtX2hhc09wZW5EYXRhYmFz
ZXMgPSB0cnVlOyB9CisgICAgYm9vbCBoYXNPcGVuRGF0YWJhc2VzKCkgeyByZXR1cm4gbV9oYXNP
cGVuRGF0YWJhc2VzOyB9CisgICAgdm9pZCBzdG9wRGF0YWJhc2VzKCk7CisjZW5kaWYKKworICAg
IHZvaWQgc2V0VXNpbmdHZW9sb2NhdGlvbihib29sIGYpIHsgbV91c2luZ0dlb2xvY2F0aW9uID0g
ZjsgfQorICAgIGJvb2wgdXNpbmdHZW9sb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdXNpbmdH
ZW9sb2NhdGlvbjsgfTsKKworI2lmIEVOQUJMRShXTUwpCisgICAgdm9pZCBzZXRDb250YWluc1dN
TENvbnRlbnQoYm9vbCB2YWx1ZSkgeyBtX2NvbnRhaW5zV01MQ29udGVudCA9IHZhbHVlOyB9Cisg
ICAgYm9vbCBjb250YWluc1dNTENvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zV01M
Q29udGVudDsgfQorCisgICAgdm9pZCByZXNldFdNTFBhZ2VTdGF0ZSgpOworICAgIHZvaWQgaW5p
dGlhbGl6ZVdNTFBhZ2VTdGF0ZSgpOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBEb2N1bWVu
dChGcmFtZSosIGJvb2wgaXNYSFRNTCk7CiAKLSAgICB2b2lkIHNldFN0eWxlU2VsZWN0b3IoQ1NT
U3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvcikgeyAgbV9zdHlsZVNlbGVjdG9yID0gc3R5bGVT
ZWxlY3RvcjsgfQorICAgIHZvaWQgc2V0U3R5bGVTZWxlY3RvcihDU1NTdHlsZVNlbGVjdG9yKiBz
dHlsZVNlbGVjdG9yKSB7IG1fc3R5bGVTZWxlY3RvciA9IHN0eWxlU2VsZWN0b3I7IH0KKworICAg
IHZvaWQgY2xlYXJYTUxWZXJzaW9uKCkgeyBtX3htbFZlcnNpb24gPSBTdHJpbmcoKTsgfQogCiBw
cml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBpc0RvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkTGFzdFJlZigpOworICAgIHZpcnR1YWwgdm9p
ZCBkZXRlcm1pbmVQYXJzZU1vZGUoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNo
YW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIgPSBmYWxzZSwgTm9kZSogYmVmb3JlQ2hhbmdlID0g
MCwgTm9kZSogYWZ0ZXJDaGFuZ2UgPSAwLCBpbnQgY2hpbGRDb3VudERlbHRhID0gMCk7CisKKyAg
ICB2aXJ0dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgTm9kZVR5cGUg
bm9kZVR5cGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q1NTU3R5bGVTaGVldChjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBjb25zdCBDYWNoZWRDU1NTdHls
ZVNoZWV0Kik7CisgICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUpOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlPiBjbG9uZU5vZGUoYm9vbCBkZWVwKTsKKyAgICB2
aXJ0dWFsIGJvb2wgY2FuUmVwbGFjZUNoaWxkKE5vZGUqIG5ld0NoaWxkLCBOb2RlKiBvbGRDaGls
ZCk7CisKICAgICB2aXJ0dWFsIHZvaWQgcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIHsgcmVm
KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgeyBk
ZXJlZigpOyB9CiAKICAgICB2aXJ0dWFsIGNvbnN0IEtVUkwmIHZpcnR1YWxVUkwoKSBjb25zdDsg
Ly8gU2FtZSBhcyB1cmwoKSwgYnV0IG5lZWRlZCBmb3IgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB0
byBpbXBsZW1lbnQgaXQgd2l0aG91dCBhIHBlcmZvcm1hbmNlIGxvc3MgZm9yIGRpcmVjdCBjYWxs
cy4KICAgICB2aXJ0dWFsIEtVUkwgdmlydHVhbENvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYpIGNv
bnN0OyAvLyBTYW1lIGFzIGNvbXBsZXRlVVJMKCkgZm9yIHRoZSBzYW1lIHJlYXNvbiBhcyBhYm92
ZS4KIAorICAgIHZvaWQgaW5pdEROU1ByZWZldGNoKCk7CisKICAgICBTdHJpbmcgZW5jb2Rpbmco
KSBjb25zdDsKIAogICAgIHZvaWQgZXhlY3V0ZVNjcmlwdFNvb25UaW1lckZpcmVkKFRpbWVyPERv
Y3VtZW50PiopOwogCisgICAgdm9pZCBzZXRTaG91bGRDcmVhdGVSZW5kZXJlcnMoYm9vbCk7CisK
KyAgICB2b2lkIHVwZGF0ZVRpdGxlKCk7CisgICAgdm9pZCByZW1vdmVBbGxEaXNjb25uZWN0ZWRO
b2RlRXZlbnRMaXN0ZW5lcnMoKTsKKyAgICB2b2lkIHVwZGF0ZUZvY3VzQXBwZWFyYW5jZVRpbWVy
RmlyZWQoVGltZXI8RG9jdW1lbnQ+Kik7CisgICAgdm9pZCB1cGRhdGVCYXNlVVJMKCk7CisKKyAg
ICB2b2lkIGNhY2hlRG9jdW1lbnRFbGVtZW50KCkgY29uc3Q7CisKICAgICBDU1NTdHlsZVNlbGVj
dG9yKiBtX3N0eWxlU2VsZWN0b3I7CiAgICAgYm9vbCBtX2RpZENhbGN1bGF0ZVN0eWxlU2VsZWN0
b3I7CiAKQEAgLTk2Myw5NiArMTA0Nyw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFBy
b2Nlc3NOb1NjcmlwdEVsZW1lbnQ7CiAjZW5kaWYKIAotcHVibGljOgotICAgIGJvb2wgaW5QYWdl
Q2FjaGUoKSBjb25zdCB7IHJldHVybiBtX2luUGFnZUNhY2hlOyB9Ci0gICAgdm9pZCBzZXRJblBh
Z2VDYWNoZShib29sIGZsYWcpOwotICAgIAotICAgIC8vIEVsZW1lbnRzIGNhbiByZWdpc3RlciB0
aGVtc2VsdmVzIGZvciB0aGUgImRvY3VtZW50V2lsbEJlY29tZUluYWN0aXZlKCkiIGFuZCAgCi0g
ICAgLy8gImRvY3VtZW50RGlkQmVjb21lQWN0aXZlKCkiIGNhbGxiYWNrcwotICAgIHZvaWQgcmVn
aXN0ZXJGb3JEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFja3MoRWxlbWVudCopOwotICAgIHZvaWQg
dW5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyhFbGVtZW50Kik7Ci0gICAg
dm9pZCBkb2N1bWVudFdpbGxCZWNvbWVJbmFjdGl2ZSgpOwotICAgIHZvaWQgZG9jdW1lbnREaWRC
ZWNvbWVBY3RpdmUoKTsKLQotICAgIHZvaWQgcmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNr
cyhFbGVtZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3Mo
RWxlbWVudCopOwotICAgIHZvaWQgbWVkaWFWb2x1bWVEaWRDaGFuZ2UoKTsKLQotICAgIHZvaWQg
c2V0U2hvdWxkQ3JlYXRlUmVuZGVyZXJzKGJvb2wpOwotICAgIGJvb2wgc2hvdWxkQ3JlYXRlUmVu
ZGVyZXJzKCk7Ci0gICAgCi0gICAgdm9pZCBzZXREZWNvZGVyKFBhc3NSZWZQdHI8VGV4dFJlc291
cmNlRGVjb2Rlcj4pOwotICAgIFRleHRSZXNvdXJjZURlY29kZXIqIGRlY29kZXIoKSBjb25zdCB7
IHJldHVybiBtX2RlY29kZXIuZ2V0KCk7IH0KLQotICAgIFN0cmluZyBkaXNwbGF5U3RyaW5nTW9k
aWZpZWRCeUVuY29kaW5nKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+KSBjb25zdDsKLSAgICB2b2lkIGRpc3BsYXlCdWZmZXJNb2RpZmllZEJ5RW5jb2Rpbmco
VUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuKSBjb25zdDsKLQotICAgIC8vIFF1aXJrIGZvciB0
aGUgYmVuZWZpdCBvZiBBcHBsZSdzIERpY3Rpb25hcnkgYXBwbGljYXRpb24uCi0gICAgdm9pZCBz
ZXRGcmFtZUVsZW1lbnRzU2hvdWxkSWdub3JlU2Nyb2xsaW5nKGJvb2wgaWdub3JlKSB7IG1fZnJh
bWVFbGVtZW50c1Nob3VsZElnbm9yZVNjcm9sbGluZyA9IGlnbm9yZTsgfQotICAgIGJvb2wgZnJh
bWVFbGVtZW50c1Nob3VsZElnbm9yZVNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVF
bGVtZW50c1Nob3VsZElnbm9yZVNjcm9sbGluZzsgfQotCi0jaWYgRU5BQkxFKERBU0hCT0FSRF9T
VVBQT1JUKQotICAgIHZvaWQgc2V0RGFzaGJvYXJkUmVnaW9uc0RpcnR5KGJvb2wgZikgeyBtX2Rh
c2hib2FyZFJlZ2lvbnNEaXJ0eSA9IGY7IH0KLSAgICBib29sIGRhc2hib2FyZFJlZ2lvbnNEaXJ0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaGJvYXJkUmVnaW9uc0RpcnR5OyB9Ci0gICAgYm9vbCBo
YXNEYXNoYm9hcmRSZWdpb25zICgpIGNvbnN0IHsgcmV0dXJuIG1faGFzRGFzaGJvYXJkUmVnaW9u
czsgfQotICAgIHZvaWQgc2V0SGFzRGFzaGJvYXJkUmVnaW9ucyhib29sIGYpIHsgbV9oYXNEYXNo
Ym9hcmRSZWdpb25zID0gZjsgfQotICAgIGNvbnN0IFZlY3RvcjxEYXNoYm9hcmRSZWdpb25WYWx1
ZT4mIGRhc2hib2FyZFJlZ2lvbnMoKSBjb25zdDsKLSAgICB2b2lkIHNldERhc2hib2FyZFJlZ2lv
bnMoY29uc3QgVmVjdG9yPERhc2hib2FyZFJlZ2lvblZhbHVlPiYpOwotI2VuZGlmCi0KLSAgICB2
b2lkIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7Ci0KLSAgICB2b2lkIHJlZ2lzdGVyRGlzY29u
bmVjdGVkTm9kZVdpdGhFdmVudExpc3RlbmVycyhOb2RlKik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVy
RGlzY29ubmVjdGVkTm9kZVdpdGhFdmVudExpc3RlbmVycyhOb2RlKik7Ci0gICAgCi0gICAgQ2hl
Y2tlZFJhZGlvQnV0dG9ucyYgY2hlY2tlZFJhZGlvQnV0dG9ucygpIHsgcmV0dXJuIG1fY2hlY2tl
ZFJhZGlvQnV0dG9uczsgfQotICAgIAotI2lmIEVOQUJMRShTVkcpCi0gICAgY29uc3QgU1ZHRG9j
dW1lbnRFeHRlbnNpb25zKiBzdmdFeHRlbnNpb25zKCk7Ci0gICAgU1ZHRG9jdW1lbnRFeHRlbnNp
b25zKiBhY2Nlc3NTVkdFeHRlbnNpb25zKCk7Ci0jZW5kaWYKLQotICAgIHZvaWQgaW5pdFNlY3Vy
aXR5Q29udGV4dCgpOwotCi0gICAgLy8gRXhwbGljaXRseSBvdmVycmlkZSB0aGUgc2VjdXJpdHkg
b3JpZ2luIGZvciB0aGlzIGRvY3VtZW50LgotICAgIC8vIE5vdGU6IEl0IGlzIGRhbmdlcm91cyB0
byBjaGFuZ2UgdGhlIHNlY3VyaXR5IG9yaWdpbiBvZiBhIGRvY3VtZW50Ci0gICAgLy8gICAgICAg
dGhhdCBhbHJlYWR5IGNvbnRhaW5zIGNvbnRlbnQuCi0gICAgdm9pZCBzZXRTZWN1cml0eU9yaWdp
bihTZWN1cml0eU9yaWdpbiopOwotCi0gICAgYm9vbCBwcm9jZXNzaW5nTG9hZEV2ZW50KCkgY29u
c3QgeyByZXR1cm4gbV9wcm9jZXNzaW5nTG9hZEV2ZW50OyB9Ci0KLSNpZiBFTkFCTEUoREFUQUJB
U0UpCi0gICAgdm9pZCBhZGRPcGVuRGF0YWJhc2UoRGF0YWJhc2UqKTsKLSAgICB2b2lkIHJlbW92
ZU9wZW5EYXRhYmFzZShEYXRhYmFzZSopOwotICAgIERhdGFiYXNlVGhyZWFkKiBkYXRhYmFzZVRo
cmVhZCgpOyAgIC8vIENyZWF0ZXMgdGhlIHRocmVhZCBhcyBuZWVkZWQsIGJ1dCBub3QgaWYgaXQg
aGFzIGJlZW4gYWxyZWFkeSB0ZXJtaW5hdGVkLgotICAgIHZvaWQgc2V0SGFzT3BlbkRhdGFiYXNl
cygpIHsgbV9oYXNPcGVuRGF0YWJhc2VzID0gdHJ1ZTsgfQotICAgIGJvb2wgaGFzT3BlbkRhdGFi
YXNlcygpIHsgcmV0dXJuIG1faGFzT3BlbkRhdGFiYXNlczsgfQotICAgIHZvaWQgc3RvcERhdGFi
YXNlcygpOwotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBzZXRVc2luZ0dlb2xvY2F0aW9uKGJvb2wg
ZikgeyBtX3VzaW5nR2VvbG9jYXRpb24gPSBmOyB9Ci0gICAgYm9vbCB1c2luZ0dlb2xvY2F0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV91c2luZ0dlb2xvY2F0aW9uOyB9OwotCi0jaWYgRU5BQkxFKFdN
TCkKLSAgICB2b2lkIHNldENvbnRhaW5zV01MQ29udGVudChib29sIHZhbHVlKSB7IG1fY29udGFp
bnNXTUxDb250ZW50ID0gdmFsdWU7IH0KLSAgICBib29sIGNvbnRhaW5zV01MQ29udGVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGFpbnNXTUxDb250ZW50OyB9Ci0KLSAgICB2b2lkIHJlc2V0V01M
UGFnZVN0YXRlKCk7Ci0gICAgdm9pZCBpbml0aWFsaXplV01MUGFnZVN0YXRlKCk7Ci0jZW5kaWYK
LQotcHJvdGVjdGVkOgotICAgIHZvaWQgY2xlYXJYTUxWZXJzaW9uKCkgeyBtX3htbFZlcnNpb24g
PSBTdHJpbmcoKTsgfQotCi1wcml2YXRlOgotICAgIHZvaWQgdXBkYXRlVGl0bGUoKTsKLSAgICB2
b2lkIHJlbW92ZUFsbERpc2Nvbm5lY3RlZE5vZGVFdmVudExpc3RlbmVycygpOwotICAgIHZvaWQg
dXBkYXRlRm9jdXNBcHBlYXJhbmNlVGltZXJGaXJlZChUaW1lcjxEb2N1bWVudD4qKTsKLSAgICB2
b2lkIHVwZGF0ZUJhc2VVUkwoKTsKLQotICAgIHZvaWQgY2FjaGVEb2N1bWVudEVsZW1lbnQoKSBj
b25zdDsKLQogICAgIFJlbmRlck9iamVjdCogbV9zYXZlZFJlbmRlcmVyOwogICAgIGludCBtX3Nl
Y3VyZUZvcm1zOwogICAgIApAQCAtMTEwNiwxMCArMTEwMCw2IEBAIHByaXZhdGU6CiAKICAgICB1
bnNpZ25lZCBtX251bU5vZGVMaXN0Q2FjaGVzOwogCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBIYXNo
TWFwPFdlYkNvcmU6Ok5vZGUqLCBKU05vZGUqPiBKU1dyYXBwZXJDYWNoZTsKLSAgICBKU1dyYXBw
ZXJDYWNoZSYgd3JhcHBlckNhY2hlKCkgeyByZXR1cm4gbV93cmFwcGVyQ2FjaGU7IH0KLXByaXZh
dGU6CiAgICAgSlNXcmFwcGVyQ2FjaGUgbV93cmFwcGVyQ2FjaGU7CiAKICNpZiBFTkFCTEUoREFU
QUJBU0UpCkBAIC0xMTM0LDcgKzExMjQsNyBAQCBpbmxpbmUgYm9vbCBEb2N1bWVudDo6aGFzRWxl
bWVudFdpdGhJZChBCiAgICAgCiBpbmxpbmUgYm9vbCBOb2RlOjppc0RvY3VtZW50Tm9kZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHRoaXMgPT0gbV9kb2N1bWVudC5nZXQoKTsKKyAgICByZXR1cm4g
dGhpcyA9PSBtX2RvY3VtZW50OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL2RvbS9Eb2N1bWVudEZyYWdtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Eb2N1bWVudEZyYWdtZW50LmNwcAkocmV2aXNpb24gNDY2NzkpCisrKyBXZWJDb3JlL2RvbS9E
b2N1bWVudEZyYWdtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSw4IEBACi0vKioK
LSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4K
LSAqCisvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDEzICsyMSwxOCBAQAogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKLQogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Eb2N1bWVudEZyYWdtZW50OjpEb2N1bWVudEZyYWdt
ZW50KERvY3VtZW50ICpkb2MpIDogQ29udGFpbmVyTm9kZShkb2MpCitpbmxpbmUgRG9jdW1lbnRG
cmFnbWVudDo6RG9jdW1lbnRGcmFnbWVudChEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBDb250
YWluZXJOb2RlKGRvY3VtZW50KQoreworfQorCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCiB7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBEb2N1bWVudEZyYWdtZW50KGRvY3VtZW50KSk7CiB9CiAKIFN0cmlu
ZyBEb2N1bWVudEZyYWdtZW50Ojpub2RlTmFtZSgpIGNvbnN0CkBAIC00Miw3ICs0NSw2IEBAIE5v
ZGU6Ok5vZGVUeXBlIERvY3VtZW50RnJhZ21lbnQ6Om5vZGVUeXAKICAgICByZXR1cm4gRE9DVU1F
TlRfRlJBR01FTlRfTk9ERTsKIH0KIAotLy8gRE9NIFNlY3Rpb24gMS4xLjEKIGJvb2wgRG9jdW1l
bnRGcmFnbWVudDo6Y2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSB0eXBlKQogewogICAgIHN3aXRj
aCAodHlwZSkgewpAQCAtNjAsNyArNjIsNyBAQCBib29sIERvY3VtZW50RnJhZ21lbnQ6OmNoaWxk
VHlwZUFsbG93ZWQoCiAKIFBhc3NSZWZQdHI8Tm9kZT4gRG9jdW1lbnRGcmFnbWVudDo6Y2xvbmVO
b2RlKGJvb2wgZGVlcCkKIHsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY2xvbmUgPSBu
ZXcgRG9jdW1lbnRGcmFnbWVudChkb2N1bWVudCgpKTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gY2xvbmUgPSBjcmVhdGUoZG9jdW1lbnQoKSk7CiAgICAgaWYgKGRlZXApCiAgICAgICAg
IGNsb25lQ2hpbGROb2RlcyhjbG9uZS5nZXQoKSk7CiAgICAgcmV0dXJuIGNsb25lLnJlbGVhc2Uo
KTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50RnJhZ21lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9Eb2N1bWVudEZyYWdtZW50LmgJKHJldmlzaW9uIDQ2Njc5KQorKysgV2ViQ29y
ZS9kb20vRG9jdW1lbnRGcmFnbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsxLDggQEAK
IC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBL
REUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDYgKzMwLDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudEZyYWdtZW50IDogcHVibGljIENvbnRhaW5l
ck5vZGUgewogcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGNyZWF0ZShEb2N1bWVudCopOworCitwcml2YXRlOgogICAgIERvY3VtZW50RnJhZ21lbnQoRG9j
dW1lbnQqKTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CkluZGV4OiBX
ZWJDb3JlL2RvbS9Eb2N1bWVudFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0Rv
Y3VtZW50VHlwZS5jcHAJKHJldmlzaW9uIDQ2Njc5KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnRU
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykg
MTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFu
dHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERp
cmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5LDExICsyOSwxMSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLURvY3VtZW50VHlwZTo6RG9jdW1lbnRUeXBlKERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgU3RyaW5nJiBuLCBjb25zdCBTdHJpbmcmIHAsIGNvbnN0IFN0cmluZyYg
cykKLSAgICA6IE5vZGUoZG9jdW1lbnQpCi0gICAgLCBtX25hbWUobikKLSAgICAsIG1fcHVibGlj
SWQocCkKLSAgICAsIG1fc3lzdGVtSWQocykKK0RvY3VtZW50VHlwZTo6RG9jdW1lbnRUeXBlKERv
Y3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHB1Ymxp
Y0lkLCBjb25zdCBTdHJpbmcmIHN5c3RlbUlkKQorICAgIDogTm9kZShkb2N1bWVudCwgQ3JlYXRl
T3RoZXIpCisgICAgLCBtX25hbWUobmFtZSkKKyAgICAsIG1fcHVibGljSWQocHVibGljSWQpCisg
ICAgLCBtX3N5c3RlbUlkKHN5c3RlbUlkKQogewogfQogCkBAIC01NCw3ICs1NCw3IEBAIE5vZGU6
Ok5vZGVUeXBlIERvY3VtZW50VHlwZTo6bm9kZVR5cGUoKSAKIAogUGFzc1JlZlB0cjxOb2RlPiBE
b2N1bWVudFR5cGU6OmNsb25lTm9kZShib29sIC8qZGVlcCovKQogewotICAgIHJldHVybiBuZXcg
RG9jdW1lbnRUeXBlKGRvY3VtZW50KCksIG1fbmFtZSwgbV9wdWJsaWNJZCwgbV9zeXN0ZW1JZCk7
CisgICAgcmV0dXJuIGNyZWF0ZShkb2N1bWVudCgpLCBtX25hbWUsIG1fcHVibGljSWQsIG1fc3lz
dGVtSWQpOwogfQogCiB2b2lkIERvY3VtZW50VHlwZTo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQpJ
bmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vRG9jdW1lbnRUeXBlLmgJKHJldmlzaW9uIDQ2Njc5KQorKysgV2ViQ29yZS9kb20vRG9jdW1l
bnRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBE
aXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNCw3ICszNCw3IEBAIGNsYXNzIERv
Y3VtZW50VHlwZSA6IHB1YmxpYyBOb2RlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxEb2N1bWVudFR5cGU+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBwdWJsaWNJZCwgY29uc3QgU3RyaW5nJiBzeXN0ZW1JZCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBuZXcgRG9jdW1lbnRUeXBlKGRvY3VtZW50LCBuYW1lLCBwdWJs
aWNJZCwgc3lzdGVtSWQpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERvY3VtZW50VHlw
ZShkb2N1bWVudCwgbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSk7CiAgICAgfQogCiAgICAgTmFt
ZWROb2RlTWFwKiBlbnRpdGllcygpIGNvbnN0IHsgcmV0dXJuIG1fZW50aXRpZXMuZ2V0KCk7IH0K
SW5kZXg6IFdlYkNvcmUvZG9tL0VkaXRpbmdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9FZGl0aW5nVGV4dC5jcHAJKHJldmlzaW9uIDQ2Njc5KQorKysgV2ViQ29yZS9kb20vRWRp
dGluZ1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEsNSBAQAotLyoqCi0gKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgotICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAg
ICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yNCwyNCArMjAsMTkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJF
ZGl0aW5nVGV4dC5oIgogCi0vLyBGSVhNRTogZG9lcyB0aGlzIHJlYWxseSByZXF1aXJlIGEgY2xh
c3M/IFBlcmhhcHMgYW55IFRleHQgbm9kZQotLy8gaW5zaWRlIGFuIGVkaXRhYmxlIGVsZW1lbnQg
c2hvdWxkIGhhdmUgdGhlICJhbHdheXMgY3JlYXRlIGEgcmVuZGVyZXIiCi0vLyBiZWhhdmlvci4K
Ky8vIEZJWE1FOiBEb2VzIHRoaXMgcmVhbGx5IHJlcXVpcmUgYSBjbGFzcz8gUGVyaGFwcyBpbnN0
ZWFkIGFueSB0ZXh0IG5vZGUKKy8vIGluc2lkZSBhbiBlZGl0YWJsZSBlbGVtZW50IGNvdWxkIGhh
dmUgdGhlICJhbHdheXMgY3JlYXRlIGEgcmVuZGVyZXIiIGJlaGF2aW9yLgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUVkaXRpbmdUZXh0OjpFZGl0aW5nVGV4dChEb2N1bWVudCAqaW1wbCwgY29u
c3QgU3RyaW5nICZ0ZXh0KQotICAgIDogVGV4dChpbXBsLCB0ZXh0KQotewotfQotCi1FZGl0aW5n
VGV4dDo6RWRpdGluZ1RleHQoRG9jdW1lbnQgKmltcGwpCi0gICAgOiBUZXh0KGltcGwpCitpbmxp
bmUgRWRpdGluZ1RleHQ6OkVkaXRpbmdUZXh0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3Ry
aW5nJiBkYXRhKQorICAgIDogVGV4dChkb2N1bWVudCwgZGF0YSkKIHsKIH0KIAotRWRpdGluZ1Rl
eHQ6On5FZGl0aW5nVGV4dCgpCitQYXNzUmVmUHRyPEVkaXRpbmdUZXh0PiBFZGl0aW5nVGV4dDo6
Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBkYXRhKQogeworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRWRpdGluZ1RleHQoZG9jdW1lbnQsIGRhdGEpKTsKIH0KIAogYm9v
bCBFZGl0aW5nVGV4dDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopCkluZGV4OiBXZWJD
b3JlL2RvbS9FZGl0aW5nVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VkaXRpbmdU
ZXh0LmgJKHJldmlzaW9uIDQ2Njc5KQorKysgV2ViQ29yZS9kb20vRWRpdGluZ1RleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw5ICsxLDUgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUg
Q29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMxLDExICsyNywxMiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEVkaXRpbmdUZXh0IDogcHVibGljIFRleHQg
ewogcHVibGljOgotICAgIEVkaXRpbmdUZXh0KERvY3VtZW50ICppbXBsLCBjb25zdCBTdHJpbmcg
JnRleHQpOwotICAgIEVkaXRpbmdUZXh0KERvY3VtZW50ICppbXBsKTsKLSAgICB2aXJ0dWFsIH5F
ZGl0aW5nVGV4dCgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVkaXRpbmdUZXh0PiBjcmVhdGUo
RG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmKTsKIAorcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wg
cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqKTsKKworICAgIEVkaXRpbmdUZXh0KERvY3Vt
ZW50KiwgY29uc3QgU3RyaW5nJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAkocmV2aXNpb24gNDY2NzkpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTcsOCArNTcsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIFhNTE5hbWVzOwogICAgIAotRWxl
bWVudDo6RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
KQotICAgIDogQ29udGFpbmVyTm9kZShkb2MsIHRydWUpCitFbGVtZW50OjpFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IENvbnRh
aW5lck5vZGUoZG9jdW1lbnQsIENyZWF0ZUVsZW1lbnRaZXJvUmVmQ291bnQpCiAgICAgLCBtX3Rh
Z05hbWUodGFnTmFtZSkKIHsKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0VudGl0eVJlZmVyZW5jZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRW50aXR5UmVmZXJlbmNlLmNwcAkocmV2aXNp
b24gNDY2NzkpCisrKyBXZWJDb3JlL2RvbS9FbnRpdHlSZWZlcmVuY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxs
eSAocG1rQHBvc3QuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIz
LDEyICsyMywxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVudGl0eVJlZmVyZW5jZTo6
RW50aXR5UmVmZXJlbmNlKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBlbnRpdHlO
YW1lKQoraW5saW5lIEVudGl0eVJlZmVyZW5jZTo6RW50aXR5UmVmZXJlbmNlKERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgU3RyaW5nJiBlbnRpdHlOYW1lKQogICAgIDogQ29udGFpbmVyTm9kZShk
b2N1bWVudCkKICAgICAsIG1fZW50aXR5TmFtZShlbnRpdHlOYW1lKQogewogfQogCitQYXNzUmVm
UHRyPEVudGl0eVJlZmVyZW5jZT4gRW50aXR5UmVmZXJlbmNlOjpjcmVhdGUoRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBTdHJpbmcmIGVudGl0eU5hbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBFbnRpdHlSZWZlcmVuY2UoZG9jdW1lbnQsIGVudGl0eU5hbWUpKTsKK30KKwogU3RyaW5n
IEVudGl0eVJlZmVyZW5jZTo6bm9kZU5hbWUoKSBjb25zdAogewogICAgIHJldHVybiBtX2VudGl0
eU5hbWU7CkBAIC00MSw3ICs0Niw3IEBAIE5vZGU6Ok5vZGVUeXBlIEVudGl0eVJlZmVyZW5jZTo6
bm9kZVR5cGUKIAogUGFzc1JlZlB0cjxOb2RlPiBFbnRpdHlSZWZlcmVuY2U6OmNsb25lTm9kZShi
b29sKQogewotICAgIHJldHVybiBuZXcgRW50aXR5UmVmZXJlbmNlKGRvY3VtZW50KCksIG1fZW50
aXR5TmFtZSk7CisgICAgcmV0dXJuIGNyZWF0ZShkb2N1bWVudCgpLCBtX2VudGl0eU5hbWUpOwog
fQogCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9kb20vRW50aXR5UmVmZXJlbmNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRW50aXR5UmVmZXJlbmNlLmgJKHJldmlzaW9uIDQ2
Njc5KQorKysgV2ViQ29yZS9kb20vRW50aXR5UmVmZXJlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDEzICsyOCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEVudGl0eVJlZmVy
ZW5jZSA6IHB1YmxpYyBDb250YWluZXJOb2RlIHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxFbnRpdHlSZWZlcmVuY2U+IGNyZWF0ZShEb2N1bWVudCosIGNvbnN0IFN0cmluZyYgZW50
aXR5TmFtZSk7CisKK3ByaXZhdGU6CiAgICAgRW50aXR5UmVmZXJlbmNlKERvY3VtZW50KiwgY29u
c3QgU3RyaW5nJiBlbnRpdHlOYW1lKTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1lKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxOb2RlPiBjbG9uZU5vZGUoYm9vbCBkZWVwKTsKIAotcHJpdmF0ZToKICAg
ICBTdHJpbmcgbV9lbnRpdHlOYW1lOwogfTsKIApJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDQ2Njc5KQorKysg
V2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMiw4ICszMzIsNjkgQEAg
Tm9kZTo6U3R5bGVDaGFuZ2UgTm9kZTo6ZGlmZihjb25zdCBSZW5kZQogICAgIHJldHVybiBjaDsK
IH0KIAotTm9kZTo6Tm9kZShEb2N1bWVudCogZG9jLCBib29sIGlzRWxlbWVudCwgYm9vbCBpc0Nv
bnRhaW5lciwgYm9vbCBpc1RleHQpCi0gICAgOiBtX2RvY3VtZW50KGRvYykKK2lubGluZSBib29s
IE5vZGU6OmluaXRpYWxSZWZDb3VudChDb25zdHJ1Y3Rpb25UeXBlIHR5cGUpCit7CisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgQ3JlYXRlQ29udGFpbmVyOgorICAgICAgICBjYXNl
IENyZWF0ZUVsZW1lbnQ6CisgICAgICAgIGNhc2UgQ3JlYXRlT3RoZXI6CisgICAgICAgIGNhc2Ug
Q3JlYXRlVGV4dDoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIENyZWF0ZUVs
ZW1lbnRaZXJvUmVmQ291bnQ6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDE7Cit9CisKK2lubGluZSBib29sIE5vZGU6
OmlzQ29udGFpbmVyKENvbnN0cnVjdGlvblR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBDcmVhdGVDb250YWluZXI6CisgICAgICAgIGNhc2UgQ3JlYXRlRWxl
bWVudDoKKyAgICAgICAgY2FzZSBDcmVhdGVFbGVtZW50WmVyb1JlZkNvdW50OgorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgQ3JlYXRlT3RoZXI6CisgICAgICAgIGNhc2Ug
Q3JlYXRlVGV4dDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBOb2Rl
Ojppc0VsZW1lbnQoQ29uc3RydWN0aW9uVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkg
eworICAgICAgICBjYXNlIENyZWF0ZUNvbnRhaW5lcjoKKyAgICAgICAgY2FzZSBDcmVhdGVPdGhl
cjoKKyAgICAgICAgY2FzZSBDcmVhdGVUZXh0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBjYXNlIENyZWF0ZUVsZW1lbnQ6CisgICAgICAgIGNhc2UgQ3JlYXRlRWxlbWVudFpl
cm9SZWZDb3VudDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIE5vZGU6
OmlzVGV4dChDb25zdHJ1Y3Rpb25UeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgICAgIGNhc2UgQ3JlYXRlQ29udGFpbmVyOgorICAgICAgICBjYXNlIENyZWF0ZUVsZW1lbnQ6
CisgICAgICAgIGNhc2UgQ3JlYXRlRWxlbWVudFplcm9SZWZDb3VudDoKKyAgICAgICAgY2FzZSBD
cmVhdGVPdGhlcjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBDcmVh
dGVUZXh0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworTm9kZTo6Tm9kZShEb2N1bWVudCog
ZG9jdW1lbnQsIENvbnN0cnVjdGlvblR5cGUgdHlwZSkKKyAgICA6IFRyZWVTaGFyZWQ8Tm9kZT4o
aW5pdGlhbFJlZkNvdW50KHR5cGUpKQorICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAs
IG1fcHJldmlvdXMoMCkKICAgICAsIG1fbmV4dCgwKQogICAgICwgbV9yZW5kZXJlcigwKQpAQCAt
MzUwLDI1ICs0MTEsMjYgQEAgTm9kZTo6Tm9kZShEb2N1bWVudCogZG9jLCBib29sIGlzRWxlbWVu
dAogICAgICwgbV9pbkRldGFjaChmYWxzZSkKICAgICAsIG1faW5TdWJ0cmVlTWFyayhmYWxzZSkK
ICAgICAsIG1faGFzUmFyZURhdGEoZmFsc2UpCi0gICAgLCBtX2lzRWxlbWVudChpc0VsZW1lbnQp
Ci0gICAgLCBtX2lzQ29udGFpbmVyKGlzQ29udGFpbmVyKQotICAgICwgbV9pc1RleHQoaXNUZXh0
KQorICAgICwgbV9pc0VsZW1lbnQoaXNFbGVtZW50KHR5cGUpKQorICAgICwgbV9pc0NvbnRhaW5l
cihpc0NvbnRhaW5lcih0eXBlKSkKKyAgICAsIG1faXNUZXh0KGlzVGV4dCh0eXBlKSkKICAgICAs
IG1fcGFyc2luZ0NoaWxkcmVuRmluaXNoZWQodHJ1ZSkKLSNpZiBFTkFCTEUoU1ZHKQotICAgICwg
bV9hcmVTVkdBdHRyaWJ1dGVzVmFsaWQodHJ1ZSkKLSNlbmRpZgogICAgICwgbV9pc1N0eWxlQXR0
cmlidXRlVmFsaWQodHJ1ZSkKICAgICAsIG1fc3luY2hyb25pemluZ1N0eWxlQXR0cmlidXRlKGZh
bHNlKQogI2lmIEVOQUJMRShTVkcpCisgICAgLCBtX2FyZVNWR0F0dHJpYnV0ZXNWYWxpZCh0cnVl
KQogICAgICwgbV9zeW5jaHJvbml6aW5nU1ZHQXR0cmlidXRlcyhmYWxzZSkKICNlbmRpZgogewor
ICAgIG1fZG9jdW1lbnQtPnNlbGZPbmx5UmVmKCk7CisKICNpZm5kZWYgTkRFQlVHCiAgICAgaWYg
KHNob3VsZElnbm9yZUxlYWtzKQogICAgICAgICBpZ25vcmVTZXQuYWRkKHRoaXMpOwogICAgIGVs
c2UKICAgICAgICAgbm9kZUNvdW50ZXIuaW5jcmVtZW50KCk7CiAjZW5kaWYKKwogI2lmIERVTVBf
Tk9ERV9TVEFUSVNUSUNTCiAgICAgbGl2ZU5vZGVTZXQuYWRkKHRoaXMpOwogI2VuZGlmCkBAIC00
MTEsNiArNDczLDggQEAgTm9kZTo6fk5vZGUoKQogICAgICAgICBtX3ByZXZpb3VzLT5zZXROZXh0
U2libGluZygwKTsKICAgICBpZiAobV9uZXh0KQogICAgICAgICBtX25leHQtPnNldFByZXZpb3Vz
U2libGluZygwKTsKKworICAgIG1fZG9jdW1lbnQtPnNlbGZPbmx5RGVyZWYoKTsKIH0KIAogI2lm
ZGVmIE5ERUJVRwpAQCAtNDQ1LDE0ICs1MDksMTggQEAgdm9pZCBOb2RlOjpzZXREb2N1bWVudChE
b2N1bWVudCogZG9jdW1lbgogICAgIGlmIChpbkRvY3VtZW50KCkgfHwgbV9kb2N1bWVudCA9PSBk
b2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCisgICAgZG9jdW1lbnQtPnNlbGZPbmx5UmVmKCk7
CisKICAgICBzZXRXaWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudFdhc0NhbGxlZChmYWxzZSk7CiAg
ICAgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKICAgICBBU1NFUlQod2lsbE1vdmVUb05l
d093bmVyRG9jdW1lbnRXYXNDYWxsZWQpOwogCiAjaWYgVVNFKEpTQykKLSAgICB1cGRhdGVET01O
b2RlRG9jdW1lbnQodGhpcywgbV9kb2N1bWVudC5nZXQoKSwgZG9jdW1lbnQpOworICAgIHVwZGF0
ZURPTU5vZGVEb2N1bWVudCh0aGlzLCBtX2RvY3VtZW50LCBkb2N1bWVudCk7CiAjZW5kaWYKIAor
ICAgIG1fZG9jdW1lbnQtPnNlbGZPbmx5RGVyZWYoKTsKKwogICAgIG1fZG9jdW1lbnQgPSBkb2N1
bWVudDsKIAogICAgIHNldERpZE1vdmVUb05ld093bmVyRG9jdW1lbnRXYXNDYWxsZWQoZmFsc2Up
OwpAQCAtMTg5NSwxMSArMTk2MywxMSBAQCB2b2lkIE5vZGU6OmFwcGVuZFRleHRDb250ZW50KGJv
b2wgY29udmVyCiAgICAgICAgIGNhc2UgVEVYVF9OT0RFOgogICAgICAgICBjYXNlIENEQVRBX1NF
Q1RJT05fTk9ERToKICAgICAgICAgY2FzZSBDT01NRU5UX05PREU6Ci0gICAgICAgICAgICBjb250
ZW50LmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCBDaGFyYWN0ZXJEYXRhKj4odGhpcyktPkNoYXJh
Y3RlckRhdGE6Om5vZGVWYWx1ZSgpKTsKKyAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kKHN0YXRp
Y19jYXN0PGNvbnN0IENoYXJhY3RlckRhdGEqPih0aGlzKS0+ZGF0YSgpKTsKICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgIGNhc2UgUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOgotICAg
ICAgICAgICAgY29udGVudC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKj4odGhpcyktPlByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6bm9kZVZhbHVlKCkpOworICAg
ICAgICAgICAgY29udGVudC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKj4odGhpcyktPmRhdGEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCiAg
ICAgICAgIGNhc2UgRUxFTUVOVF9OT0RFOgpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gNDY2NzkpCisrKyBXZWJDb3Jl
L2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAKICNpZm5kZWYgTm9k
ZV9oCiAjZGVmaW5lIE5vZGVfaAogCi0jaW5jbHVkZSAiRG9jUHRyLmgiCiAjaW5jbHVkZSAiRXZl
bnRUYXJnZXQuaCIKICNpbmNsdWRlICJLVVJMSGFzaC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCkBAIC0xMDgsNyArMTA3LDYgQEAgcHVibGljOgogICAgIGVudW0gU3R5bGVDaGFuZ2Ug
eyBOb0NoYW5nZSwgTm9Jbmhlcml0LCBJbmhlcml0LCBEZXRhY2gsIEZvcmNlIH07ICAgIAogICAg
IHN0YXRpYyBTdHlsZUNoYW5nZSBkaWZmKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVy
U3R5bGUqKTsKIAotICAgIE5vZGUoRG9jdW1lbnQqLCBib29sIGlzRWxlbWVudCA9IGZhbHNlLCBi
b29sIGlzQ29udGFpbmVyID0gZmFsc2UsIGJvb2wgaXNUZXh0ID0gZmFsc2UpOwogICAgIHZpcnR1
YWwgfk5vZGUoKTsKIAogICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3IgTm9kZQpA
QCAtMzE2LDcgKzMxNCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVCh0aGlzKTsK
ICAgICAgICAgQVNTRVJUKG1fZG9jdW1lbnQgfHwgKG5vZGVUeXBlKCkgPT0gRE9DVU1FTlRfVFlQ
RV9OT0RFICYmICFpbkRvY3VtZW50KCkpKTsKLSAgICAgICAgcmV0dXJuIG1fZG9jdW1lbnQuZ2V0
KCk7CisgICAgICAgIHJldHVybiBtX2RvY3VtZW50OwogICAgIH0KICAgICB2b2lkIHNldERvY3Vt
ZW50KERvY3VtZW50Kik7CiAKQEAgLTQ5OSwxOSArNDk3LDYgQEAgcHVibGljOgogCiAgICAgdW5z
aWduZWQgc2hvcnQgY29tcGFyZURvY3VtZW50UG9zaXRpb24oTm9kZSopOwogCi1wcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKLSAgICAKLSAgICB2aXJ0dWFs
IHZvaWQgYWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JikgY29u
c3QgeyB9Ci0gICAgdm9pZCBzZXRUYWJJbmRleEV4cGxpY2l0bHkoc2hvcnQpOwotICAgIAotICAg
IGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdCB7IHJldHVybiBtX2hhc1JhcmVEYXRhOyB9Ci0gICAg
Ci0gICAgTm9kZVJhcmVEYXRhKiByYXJlRGF0YSgpIGNvbnN0OwotICAgIE5vZGVSYXJlRGF0YSog
ZW5zdXJlUmFyZURhdGEoKTsKLQotcHVibGljOgogICAgIHZpcnR1YWwgTm9kZSogdG9Ob2RlKCkg
eyByZXR1cm4gdGhpczsgfQogCiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CkBAIC02NTEsMTQgKzYzNiwzNSBAQCBwdWJs
aWM6CiAKICAgICB1c2luZyBUcmVlU2hhcmVkPE5vZGU+OjpyZWY7CiAgICAgdXNpbmcgVHJlZVNo
YXJlZDxOb2RlPjo6ZGVyZWY7Ci0gCisKK3Byb3RlY3RlZDoKKyAgICAvLyBDcmVhdGVFbGVtZW50
WmVyb1JlZkNvdW50IGlzIGRlcHJlY2F0ZWQgYW5kIGNhbiBiZSByZW1vdmVkIG9uY2Ugd2UgY29u
dmVydCBhbGwgZWxlbWVudAorICAgIC8vIGNsYXNzZXMgdG8gc3RhcnQgd2l0aCBhIHJlZmVyZW5j
ZSBjb3VudCBvZiAxLgorICAgIGVudW0gQ29uc3RydWN0aW9uVHlwZSB7IENyZWF0ZUNvbnRhaW5l
ciwgQ3JlYXRlRWxlbWVudCwgQ3JlYXRlT3RoZXIsIENyZWF0ZVRleHQsIENyZWF0ZUVsZW1lbnRa
ZXJvUmVmQ291bnQgfTsKKyAgICBOb2RlKERvY3VtZW50KiwgQ29uc3RydWN0aW9uVHlwZSk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOworICAgIAorICAgIHZpcnR1YWwg
dm9pZCBhZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25z
dCB7IH0KKyAgICB2b2lkIHNldFRhYkluZGV4RXhwbGljaXRseShzaG9ydCk7CisgICAgCisgICAg
Ym9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmFyZURhdGE7IH0KKyAgICAK
KyAgICBOb2RlUmFyZURhdGEqIHJhcmVEYXRhKCkgY29uc3Q7CisgICAgTm9kZVJhcmVEYXRhKiBl
bnN1cmVSYXJlRGF0YSgpOworCiBwcml2YXRlOgorICAgIHN0YXRpYyBib29sIGluaXRpYWxSZWZD
b3VudChDb25zdHJ1Y3Rpb25UeXBlKTsKKyAgICBzdGF0aWMgYm9vbCBpc0NvbnRhaW5lcihDb25z
dHJ1Y3Rpb25UeXBlKTsKKyAgICBzdGF0aWMgYm9vbCBpc0VsZW1lbnQoQ29uc3RydWN0aW9uVHlw
ZSk7CisgICAgc3RhdGljIGJvb2wgaXNUZXh0KENvbnN0cnVjdGlvblR5cGUpOworCiAgICAgdmly
dHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBk
ZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CiAKICAgICB2b2lkIHJlbW92ZUFsbEV2ZW50
TGlzdGVuZXJzU2xvd0Nhc2UoKTsKIAotcHJpdmF0ZToKICAgICB2aXJ0dWFsIE5vZGVSYXJlRGF0
YSogY3JlYXRlUmFyZURhdGEoKTsKICAgICBOb2RlKiBjb250YWluZXJDaGlsZE5vZGUodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGNvbnRhaW5lckNoaWxkTm9kZUNvdW50KCkg
Y29uc3Q7CkBAIC02NzYsNyArNjgyLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgYXBwZW5kVGV4
dENvbnRlbnQoYm9vbCBjb252ZXJ0QlJzVG9OZXdsaW5lcywgU3RyaW5nQnVpbGRlciYpIGNvbnN0
OwogCi0gICAgRG9jUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OworICAgIERvY3VtZW50KiBtX2Rv
Y3VtZW50OwogICAgIE5vZGUqIG1fcHJldmlvdXM7CiAgICAgTm9kZSogbV9uZXh0OwogICAgIFJl
bmRlck9iamVjdCogbV9yZW5kZXJlcjsKQEAgLTY5OSwyMiArNzA1LDE2IEBAIHByaXZhdGU6CiAg
ICAgY29uc3QgYm9vbCBtX2lzVGV4dCA6IDE7CiAKIHByb3RlY3RlZDoKLSAgICAvLyBUaGVzZSBi
aXRzIGFyZSB1c2VkIGJ5IHRoZSBFbGVtZW50IGRlcml2ZWQgY2xhc3MsIHB1bGxlZCB1cCBoZXJl
IHNvIHRoZXkgY2FuCisgICAgLy8gVGhlc2UgYml0cyBhcmUgdXNlZCBieSBkZXJpdmVkIGNsYXNz
ZXMsIHB1bGxlZCB1cCBoZXJlIHNvIHRoZXkgY2FuCiAgICAgLy8gYmUgc3RvcmVkIGluIHRoZSBz
YW1lIG1lbW9yeSB3b3JkIGFzIHRoZSBOb2RlIGJpdHMgYWJvdmUuCi0gICAgYm9vbCBtX3BhcnNp
bmdDaGlsZHJlbkZpbmlzaGVkIDogMTsKLSNpZiBFTkFCTEUoU1ZHKQotICAgIG11dGFibGUgYm9v
bCBtX2FyZVNWR0F0dHJpYnV0ZXNWYWxpZCA6IDE7Ci0jZW5kaWYKIAotICAgIC8vIFRoZXNlIGJp
dHMgYXJlIHVzZWQgYnkgdGhlIFN0eWxlZEVsZW1lbnQgZGVyaXZlZCBjbGFzcywgYW5kIGxpdmUg
aGVyZSBmb3IgdGhlCi0gICAgLy8gc2FtZSByZWFzb24gYXMgYWJvdmUuCi0gICAgbXV0YWJsZSBi
b29sIG1faXNTdHlsZUF0dHJpYnV0ZVZhbGlkIDogMTsKLSAgICBtdXRhYmxlIGJvb2wgbV9zeW5j
aHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUgOiAxOworICAgIGJvb2wgbV9wYXJzaW5nQ2hpbGRyZW5G
aW5pc2hlZCA6IDE7IC8vIEVsZW1lbnQKKyAgICBtdXRhYmxlIGJvb2wgbV9pc1N0eWxlQXR0cmli
dXRlVmFsaWQgOiAxOyAvLyBTdHlsZWRFbGVtZW50CisgICAgbXV0YWJsZSBib29sIG1fc3luY2hy
b25pemluZ1N0eWxlQXR0cmlidXRlIDogMTsgLy8gU3R5bGVkRWxlbWVudAogCiAjaWYgRU5BQkxF
KFNWRykKLSAgICAvLyBUaGlzIGJpdCBpcyB1c2VkIGJ5IHRoZSBTVkdFbGVtZW50IGRlcml2ZWQg
Y2xhc3MsIGFuZCBsaXZlcyBoZXJlIGZvciB0aGUgc2FtZQotICAgIC8vIHJlYXNvbiBhcyBhYm92
ZS4KLSAgICBtdXRhYmxlIGJvb2wgbV9zeW5jaHJvbml6aW5nU1ZHQXR0cmlidXRlcyA6IDE7Cisg
ICAgbXV0YWJsZSBib29sIG1fYXJlU1ZHQXR0cmlidXRlc1ZhbGlkIDogMTsgLy8gRWxlbWVudAor
ICAgIG11dGFibGUgYm9vbCBtX3N5bmNocm9uaXppbmdTVkdBdHRyaWJ1dGVzIDogMTsgLy8gU1ZH
RWxlbWVudAogI2VuZGlmCiAKICAgICAvLyAxMSBiaXRzIHJlbWFpbmluZwpJbmRleDogV2ViQ29y
ZS9kb20vTm90YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob3RhdGlvbi5oCShy
ZXZpc2lvbiA0NjY3OSkKKysrIFdlYkNvcmUvZG9tL05vdGF0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsOCArMSw2IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBs
ZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxs
eSAocG1rQHBvc3QuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwyNiArMjIsMjQgQEAKICNpZm5kZWYg
Tm90YXRpb25faAogI2RlZmluZSBOb3RhdGlvbl9oCiAKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUNsaWVudC5oIgogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBOb3RhdGlvbiA6IHB1YmxpYyBDb250YWluZXJOb2RlIHsKIHB1YmxpYzoK
KyAgICBjb25zdCBTdHJpbmcmIHB1YmxpY0lkKCkgY29uc3QgeyByZXR1cm4gbV9wdWJsaWNJZDsg
fQorICAgIGNvbnN0IFN0cmluZyYgc3lzdGVtSWQoKSBjb25zdCB7IHJldHVybiBtX3N5c3RlbUlk
OyB9CisKK3ByaXZhdGU6CiAgICAgTm90YXRpb24oRG9jdW1lbnQqKTsKICAgICBOb3RhdGlvbihE
b2N1bWVudCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBwdWJsaWNJZCwgY29u
c3QgU3RyaW5nJiBzeXN0ZW1JZCk7CiAKLSAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMg
Zm9yIE5vdGF0aW9uCi0gICAgU3RyaW5nIHB1YmxpY0lkKCkgY29uc3QgeyByZXR1cm4gbV9wdWJs
aWNJZDsgfQotICAgIFN0cmluZyBzeXN0ZW1JZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3lzdGVtSWQ7
IH0KLQogICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCBO
b2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlPiBj
bG9uZU5vZGUoYm9vbCBkZWVwKTsKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZChO
b2RlVHlwZSk7CiAKLXByaXZhdGU6CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBTdHJpbmcgbV9w
dWJsaWNJZDsKICAgICBTdHJpbmcgbV9zeXN0ZW1JZDsKSW5kZXg6IFdlYkNvcmUvZG9tL1Byb2Nl
c3NpbmdJbnN0cnVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUHJvY2Vzc2lu
Z0luc3RydWN0aW9uLmNwcAkocmV2aXNpb24gNDY2NzkpCisrKyBXZWJDb3JlL2RvbS9Qcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM1LDggKzM1LDEwIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24o
RG9jdW1lbnQqIGRvYykKLSAgICA6IENvbnRhaW5lck5vZGUoZG9jKQoraW5saW5lIFByb2Nlc3Np
bmdJbnN0cnVjdGlvbjo6UHJvY2Vzc2luZ0luc3RydWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkKKyAgICA6IENvbnRhaW5l
ck5vZGUoZG9jdW1lbnQpCisgICAgLCBtX3RhcmdldCh0YXJnZXQpCisgICAgLCBtX2RhdGEoZGF0
YSkKICAgICAsIG1fY2FjaGVkU2hlZXQoMCkKICAgICAsIG1fbG9hZGluZyhmYWxzZSkKICAgICAs
IG1fYWx0ZXJuYXRlKGZhbHNlKQpAQCAtNDYsMTcgKzQ4LDkgQEAgUHJvY2Vzc2luZ0luc3RydWN0
aW9uOjpQcm9jZXNzaW5nSW5zdHJ1YwogewogfQogCi1Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OlBy
b2Nlc3NpbmdJbnN0cnVjdGlvbihEb2N1bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIHRhcmdldCwg
Y29uc3QgU3RyaW5nJiBkYXRhKQotICAgIDogQ29udGFpbmVyTm9kZShkb2MpCi0gICAgLCBtX3Rh
cmdldCh0YXJnZXQpCi0gICAgLCBtX2RhdGEoZGF0YSkKLSAgICAsIG1fY2FjaGVkU2hlZXQoMCkK
LSAgICAsIG1fbG9hZGluZyhmYWxzZSkKLSAgICAsIG1fYWx0ZXJuYXRlKGZhbHNlKQotI2lmIEVO
QUJMRShYU0xUKQotICAgICwgbV9pc1hTTChmYWxzZSkKLSNlbmRpZgorUGFzc1JlZlB0cjxQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24+IFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Y3JlYXRlKERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkKIHsK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFByb2Nlc3NpbmdJbnN0cnVjdGlvbihkb2N1bWVudCwg
dGFyZ2V0LCBkYXRhKSk7CiB9CiAKIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6flByb2Nlc3NpbmdJ
bnN0cnVjdGlvbigpCkBAIC05NSw4ICs4OSw5IEBAIHZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9u
OjpzZXROb2RlVmFsdWUKIAogUGFzc1JlZlB0cjxOb2RlPiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246
OmNsb25lTm9kZShib29sIC8qZGVlcCovKQogewotICAgIC8vICMjIyBjb3B5IG1fbG9jYWxIcmVm
Ci0gICAgcmV0dXJuIG5ldyBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oZG9jdW1lbnQoKSwgbV90YXJn
ZXQsIG1fZGF0YSk7CisgICAgLy8gRklYTUU6IElzIGl0IGEgcHJvYmxlbSB0aGF0IHRoaXMgZG9l
cyBub3QgY29weSBtX2xvY2FsSHJlZj8KKyAgICAvLyBXaGF0IGFib3V0IG90aGVyIGRhdGEgbWVt
YmVycz8KKyAgICByZXR1cm4gY3JlYXRlKGRvY3VtZW50KCksIG1fdGFyZ2V0LCBtX2RhdGEpOwog
fQogCiAvLyBET00gU2VjdGlvbiAxLjEuMQpJbmRleDogV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0
aW9uLmgJKHJldmlzaW9uIDQ2Njc5KQorKysgV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw2IEBACiAvKgotICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdo
dCAoQykgMjAwMCBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNSwxNSArMzMs
MjggQEAgY2xhc3MgQ1NTU3R5bGVTaGVldDsKIAogY2xhc3MgUHJvY2Vzc2luZ0luc3RydWN0aW9u
IDogcHVibGljIENvbnRhaW5lck5vZGUsIHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewog
cHVibGljOgotICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbihEb2N1bWVudCopOwotICAgIFByb2Nl
c3NpbmdJbnN0cnVjdGlvbihEb2N1bWVudCosIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBT
dHJpbmcmIGRhdGEpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2Nlc3NpbmdJbnN0cnVjdGlv
bj4gY3JlYXRlKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYg
ZGF0YSk7CiAgICAgdmlydHVhbCB+UHJvY2Vzc2luZ0luc3RydWN0aW9uKCk7CiAKLSAgICAvLyBE
T00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9yIE5vdGF0aW9uCi0gICAgU3RyaW5nIHRhcmdldCgp
IGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0OyB9Ci0gICAgU3RyaW5nIGRhdGEoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGE7IH0KKyAgICBjb25zdCBTdHJpbmcmIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGFyZ2V0OyB9CisgICAgY29uc3QgU3RyaW5nJiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhOyB9CiAgICAgdm9pZCBzZXREYXRhKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsK
IAorICAgIHZvaWQgc2V0Q3JlYXRlZEJ5UGFyc2VyKGJvb2wgY3JlYXRlZEJ5UGFyc2VyKSB7IG1f
Y3JlYXRlZEJ5UGFyc2VyID0gY3JlYXRlZEJ5UGFyc2VyOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisKKyAgICBjb25zdCBTdHJpbmcmIGxvY2FsSHJlZigp
IGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxIcmVmOyB9CisgICAgU3R5bGVTaGVldCogc2hlZXQoKSBj
b25zdCB7IHJldHVybiBtX3NoZWV0LmdldCgpOyB9CisgICAgdm9pZCBzZXRDU1NTdHlsZVNoZWV0
KFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4pOworCisjaWYgRU5BQkxFKFhTTFQpCisgICAgYm9v
bCBpc1hTTCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYU0w7IH0KKyNlbmRpZgorCitwcml2YXRlOgor
ICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbihEb2N1bWVudCosIGNvbnN0IFN0cmluZyYgdGFyZ2V0
LCBjb25zdCBTdHJpbmcmIGRhdGEpOworCiAgICAgdmlydHVhbCBTdHJpbmcgbm9kZU5hbWUoKSBj
b25zdDsKICAgICB2aXJ0dWFsIE5vZGVUeXBlIG5vZGVUeXBlKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBTdHJpbmcgbm9kZVZhbHVlKCkgY29uc3Q7CkBAIC01NSwyOCArNjYsMTggQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2
b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICB2b2lkIHNldENyZWF0ZWRCeVBhcnNlcihi
b29sIGNyZWF0ZWRCeVBhcnNlcikgeyBtX2NyZWF0ZWRCeVBhcnNlciA9IGNyZWF0ZWRCeVBhcnNl
cjsgfQotICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKIAotICAgIC8v
IE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKLSAgICBTdHJpbmcgbG9jYWxIcmVmKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2NhbEhyZWY7IH0KLSAgICBTdHlsZVNoZWV0KiBzaGVldCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2hlZXQuZ2V0KCk7IH0KICAgICB2b2lkIGNoZWNrU3R5bGVTaGVldCgp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRDU1NTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBj
b25zdCBTdHJpbmcmIGNoYXJzZXQsIGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqKTsKICNpZiBF
TkFCTEUoWFNMVCkKICAgICB2aXJ0dWFsIHZvaWQgc2V0WFNMU3R5bGVTaGVldChjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nJiBzaGVldCk7CiAjZW5kaWYKLSAgICB2b2lkIHNldENTU1N0
eWxlU2hlZXQoUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0Pik7CisKICAgICBib29sIGlzTG9hZGlu
ZygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzaGVldExvYWRlZCgpOwogCi0jaWYgRU5BQkxF
KFhTTFQpCi0gICAgYm9vbCBpc1hTTCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYU0w7IH0KLSNlbmRp
ZgotCiAgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFz
aFNldDxLVVJMPiYpIGNvbnN0OwogCi1wcml2YXRlOgogICAgIHZvaWQgcGFyc2VTdHlsZVNoZWV0
KGNvbnN0IFN0cmluZyYgc2hlZXQpOwogCiAgICAgU3RyaW5nIG1fdGFyZ2V0OwpJbmRleDogV2Vi
Q29yZS9kb20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1JhbmdlLmNwcAko
cmV2aXNpb24gNDY2NzkpCisrKyBXZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU4Niw3ICs1ODYsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFJhbmdlOjpw
cm9jCiAKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQ7CiAgICAgaWYgKGFj
dGlvbiA9PSBFWFRSQUNUX0NPTlRFTlRTIHx8IGFjdGlvbiA9PSBDTE9ORV9DT05URU5UUykKLSAg
ICAgICAgZnJhZ21lbnQgPSBuZXcgRG9jdW1lbnRGcmFnbWVudChtX293bmVyRG9jdW1lbnQuZ2V0
KCkpOworICAgICAgICBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShtX293bmVy
RG9jdW1lbnQuZ2V0KCkpOwogICAgIAogICAgIGVjID0gMDsKICAgICBpZiAoY29sbGFwc2VkKGVj
KSkKSW5kZXg6IFdlYkNvcmUvZG9tL1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L1RleHQuY3BwCShyZXZpc2lvbiA0NjY3OSkKKysrIFdlYkNvcmUvZG9tL1RleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM5LDIw
ICszOSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIERPTSBTZWN0aW9uIDEuMS4x
Ci0KLVRleHQ6OlRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQpCi0g
ICAgOiBDaGFyYWN0ZXJEYXRhKGRvY3VtZW50LCB0ZXh0LCB0cnVlKQotewotfQotCi1UZXh0OjpU
ZXh0KERvY3VtZW50KiBkb2N1bWVudCkKLSAgICA6IENoYXJhY3RlckRhdGEoZG9jdW1lbnQsIHRy
dWUpCitUZXh0OjpUZXh0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBkYXRhKQor
ICAgIDogQ2hhcmFjdGVyRGF0YShkb2N1bWVudCwgZGF0YSwgQ3JlYXRlVGV4dCkKIHsKIH0KIAot
VGV4dDo6flRleHQoKQorUGFzc1JlZlB0cjxUZXh0PiBUZXh0OjpjcmVhdGUoRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBTdHJpbmcmIGRhdGEpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBU
ZXh0KGRvY3VtZW50LCBkYXRhKSk7CiB9CiAKIFBhc3NSZWZQdHI8VGV4dD4gVGV4dDo6c3BsaXRU
ZXh0KHVuc2lnbmVkIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC02MSwxNCArNTUsMTQg
QEAgUGFzc1JlZlB0cjxUZXh0PiBUZXh0OjpzcGxpdFRleHQodW5zaWduZQogCiAgICAgLy8gSU5E
RVhfU0laRV9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIG9mZnNldCBpcyBuZWdhdGl2ZSBv
ciBncmVhdGVyIHRoYW4KICAgICAvLyB0aGUgbnVtYmVyIG9mIDE2LWJpdCB1bml0cyBpbiBkYXRh
LgotICAgIGlmIChvZmZzZXQgPiBtX2RhdGEtPmxlbmd0aCgpKSB7CisgICAgaWYgKG9mZnNldCA+
IGxlbmd0aCgpKSB7CiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KIAotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvbGRTdHIgPSBtX2RhdGE7Ci0g
ICAgUmVmUHRyPFRleHQ+IG5ld1RleHQgPSBjcmVhdGVOZXcob2xkU3RyLT5zdWJzdHJpbmcob2Zm
c2V0KSk7Ci0gICAgbV9kYXRhID0gb2xkU3RyLT5zdWJzdHJpbmcoMCwgb2Zmc2V0KTsKKyAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gb2xkU3RyID0gZGF0YUltcGwoKTsKKyAgICBSZWZQdHI8VGV4dD4g
bmV3VGV4dCA9IHZpcnR1YWxDcmVhdGUob2xkU3RyLT5zdWJzdHJpbmcob2Zmc2V0KSk7CisgICAg
c2V0RGF0YUltcGwob2xkU3RyLT5zdWJzdHJpbmcoMCwgb2Zmc2V0KSk7CiAKICAgICBkaXNwYXRj
aE1vZGlmaWVkRXZlbnQob2xkU3RyLmdldCgpKTsKIApAQCAtODEsNyArNzUsNyBAQCBQYXNzUmVm
UHRyPFRleHQ+IFRleHQ6OnNwbGl0VGV4dCh1bnNpZ25lCiAgICAgICAgIGRvY3VtZW50KCktPnRl
eHROb2RlU3BsaXQodGhpcyk7CiAKICAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgdG9SZW5k
ZXJUZXh0KHJlbmRlcmVyKCkpLT5zZXRUZXh0KG1fZGF0YSk7CisgICAgICAgIHRvUmVuZGVyVGV4
dChyZW5kZXJlcigpKS0+c2V0VGV4dChkYXRhSW1wbCgpKTsKIAogICAgIHJldHVybiBuZXdUZXh0
LnJlbGVhc2UoKTsKIH0KQEAgLTE5OSw3ICsxOTMsNyBAQCBOb2RlOjpOb2RlVHlwZSBUZXh0Ojpu
b2RlVHlwZSgpIGNvbnN0CiAKIFBhc3NSZWZQdHI8Tm9kZT4gVGV4dDo6Y2xvbmVOb2RlKGJvb2wg
LypkZWVwKi8pCiB7Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmNyZWF0ZVRleHROb2RlKG1fZGF0
YSk7CisgICAgcmV0dXJuIGNyZWF0ZShkb2N1bWVudCgpLCBkYXRhKCkpOwogfQogCiBib29sIFRl
eHQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKQpAQCAtMjQ0LDcgKzIzOCw3
IEBAIGJvb2wgVGV4dDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotUmVuZGVyT2JqZWN0ICpUZXh0OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVu
YSogYXJlbmEsIFJlbmRlclN0eWxlKikKK1JlbmRlck9iamVjdCogVGV4dDo6Y3JlYXRlUmVuZGVy
ZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCiB7CiAjaWYgRU5BQkxFKFNWRykK
ICAgICBpZiAocGFyZW50Tm9kZSgpLT5pc1NWR0VsZW1lbnQoKQpAQCAtMjUyLDE3ICsyNDYsMTcg
QEAgUmVuZGVyT2JqZWN0ICpUZXh0OjpjcmVhdGVSZW5kZXJlcihSZW5kZQogICAgICAgICAmJiAh
cGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmb3JlaWduT2JqZWN0VGFnKQogI2Vu
ZGlmCiAgICAgKQotICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHSW5saW5lVGV4
dCh0aGlzLCBtX2RhdGEpOworICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHSW5s
aW5lVGV4dCh0aGlzLCBkYXRhSW1wbCgpKTsKICNlbmRpZgogICAgIAotICAgIHJldHVybiBuZXcg
KGFyZW5hKSBSZW5kZXJUZXh0KHRoaXMsIG1fZGF0YSk7CisgICAgcmV0dXJuIG5ldyAoYXJlbmEp
IFJlbmRlclRleHQodGhpcywgZGF0YUltcGwoKSk7CiB9CiAKIHZvaWQgVGV4dDo6YXR0YWNoKCkK
IHsKICNpZiBFTkFCTEUoV01MKQogICAgIGlmIChkb2N1bWVudCgpLT5pc1dNTERvY3VtZW50KCkg
JiYgIWNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkgewotICAgICAgICBTdHJpbmcgdGV4dCA9IG1f
ZGF0YTsKKyAgICAgICAgU3RyaW5nIHRleHQgPSBkYXRhKCk7CiAgICAgICAgIEFTU0VSVCghdGV4
dC5pc0VtcHR5KCkpOwogCiAgICAgICAgIHRleHQgPSBzdWJzdGl0dXRlVmFyaWFibGVSZWZlcmVu
Y2VzKHRleHQsIGRvY3VtZW50KCkpOwpAQCAtMjg2LDcgKzI4MCw3IEBAIHZvaWQgVGV4dDo6cmVj
YWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2hhbmcKICAgICBpZiAobmVlZHNTdHlsZVJlY2FsYygpKSB7
CiAgICAgICAgIGlmIChyZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIoKS0+
aXNUZXh0KCkpCi0gICAgICAgICAgICAgICAgdG9SZW5kZXJUZXh0KHJlbmRlcmVyKCkpLT5zZXRU
ZXh0KG1fZGF0YSk7CisgICAgICAgICAgICAgICAgdG9SZW5kZXJUZXh0KHJlbmRlcmVyKCkpLT5z
ZXRUZXh0KGRhdGFJbXBsKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGF0
dGFjaGVkKCkpCiAgICAgICAgICAgICAgICAgZGV0YWNoKCk7CkBAIC0yOTYsNDAgKzI5MCwzOSBA
QCB2b2lkIFRleHQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nCiAgICAgc2V0TmVlZHNT
dHlsZVJlY2FsYyhOb1N0eWxlQ2hhbmdlKTsKIH0KIAotLy8gRE9NIFNlY3Rpb24gMS4xLjEKIGJv
b2wgVGV4dDo6Y2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSkKIHsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVBhc3NSZWZQdHI8VGV4dD4gVGV4dDo6Y3JlYXRlTmV3KFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gc3RyaW5nKQorUGFzc1JlZlB0cjxUZXh0PiBUZXh0Ojp2aXJ0dWFsQ3JlYXRlKGNvbnN0
IFN0cmluZyYgZGF0YSkKIHsKLSAgICByZXR1cm4gbmV3IFRleHQoZG9jdW1lbnQoKSwgc3RyaW5n
KTsKKyAgICByZXR1cm4gY3JlYXRlKGRvY3VtZW50KCksIGRhdGEpOwogfQogCi1QYXNzUmVmUHRy
PFRleHQ+IFRleHQ6OmNyZWF0ZVdpdGhMZW5ndGhMaW1pdChEb2N1bWVudCogZG9jLCBjb25zdCBT
dHJpbmcmIHRleHQsIHVuc2lnbmVkJiBjaGFyc0xlZnQsIHVuc2lnbmVkIG1heENoYXJzKQorUGFz
c1JlZlB0cjxUZXh0PiBUZXh0OjpjcmVhdGVXaXRoTGVuZ3RoTGltaXQoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zdCBTdHJpbmcmIGRhdGEsIHVuc2lnbmVkJiBjaGFyc0xlZnQsIHVuc2lnbmVkIG1h
eENoYXJzKQogewotICAgIGlmIChjaGFyc0xlZnQgPT0gdGV4dC5sZW5ndGgoKSAmJiBjaGFyc0xl
ZnQgPD0gbWF4Q2hhcnMpIHsKKyAgICBpZiAoY2hhcnNMZWZ0ID09IGRhdGEubGVuZ3RoKCkgJiYg
Y2hhcnNMZWZ0IDw9IG1heENoYXJzKSB7CiAgICAgICAgIGNoYXJzTGVmdCA9IDA7Ci0gICAgICAg
IHJldHVybiBuZXcgVGV4dChkb2MsIHRleHQpOworICAgICAgICByZXR1cm4gY3JlYXRlKGRvY3Vt
ZW50LCBkYXRhKTsKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgc3RhcnQgPSB0ZXh0Lmxlbmd0
aCgpIC0gY2hhcnNMZWZ0OworICAgIHVuc2lnbmVkIHN0YXJ0ID0gZGF0YS5sZW5ndGgoKSAtIGNo
YXJzTGVmdDsKICAgICB1bnNpZ25lZCBlbmQgPSBzdGFydCArIHN0ZDo6bWluKGNoYXJzTGVmdCwg
bWF4Q2hhcnMpOwogICAgIAogICAgIC8vIGNoZWNrIHdlIGFyZSBub3Qgb24gYW4gdW5icmVha2Fi
bGUgYm91bmRhcnkKLSAgICBUZXh0QnJlYWtJdGVyYXRvciogaXQgPSBjaGFyYWN0ZXJCcmVha0l0
ZXJhdG9yKHRleHQuY2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgpKTsKLSAgICBpZiAoZW5kIDwg
dGV4dC5sZW5ndGgoKSAmJiAhaXNUZXh0QnJlYWsoaXQsIGVuZCkpCisgICAgVGV4dEJyZWFrSXRl
cmF0b3IqIGl0ID0gY2hhcmFjdGVyQnJlYWtJdGVyYXRvcihkYXRhLmNoYXJhY3RlcnMoKSwgZGF0
YS5sZW5ndGgoKSk7CisgICAgaWYgKGVuZCA8IGRhdGEubGVuZ3RoKCkgJiYgIWlzVGV4dEJyZWFr
KGl0LCBlbmQpKQogICAgICAgICBlbmQgPSB0ZXh0QnJlYWtQcmVjZWRpbmcoaXQsIGVuZCk7CiAg
ICAgICAgIAogICAgIC8vIG1heENoYXJzIG9mIHVuYnJlYWthYmxlIGNoYXJhY3RlcnMgY291bGQg
bGVhZCB0byBpbmZpbml0ZSBsb29wCiAgICAgaWYgKGVuZCA8PSBzdGFydCkKLSAgICAgICAgZW5k
ID0gdGV4dC5sZW5ndGgoKTsKKyAgICAgICAgZW5kID0gZGF0YS5sZW5ndGgoKTsKICAgICAKLSAg
ICBTdHJpbmcgbm9kZVRleHQgPSB0ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpOwot
ICAgIGNoYXJzTGVmdCA9IHRleHQubGVuZ3RoKCkgLSBlbmQ7CisgICAgU3RyaW5nIGxpbWl0ZWRE
YXRhID0gZGF0YS5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKKyAgICBjaGFyc0xlZnQg
PSBsaW1pdGVkRGF0YS5sZW5ndGgoKSAtIGVuZDsKICAgICAgICAgCi0gICAgcmV0dXJuIG5ldyBU
ZXh0KGRvYywgbm9kZVRleHQpOworICAgIHJldHVybiBjcmVhdGUoZG9jdW1lbnQsIGxpbWl0ZWRE
YXRhKTsKIH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTM0Myw3ICszMzYsNyBAQCB2b2lkIFRleHQ6
OmZvcm1hdEZvckRlYnVnZ2VyKGNoYXIgKmJ1ZmZlCiAgICAgICAgIHJlc3VsdCArPSBzOwogICAg
IH0KICAgICAgICAgICAKLSAgICBzID0gbm9kZVZhbHVlKCk7CisgICAgcyA9IGRhdGEoKTsKICAg
ICBpZiAocy5sZW5ndGgoKSA+IDApIHsKICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSA+IDAp
CiAgICAgICAgICAgICByZXN1bHQgKz0gIjsgIjsKSW5kZXg6IFdlYkNvcmUvZG9tL1RleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9UZXh0LmgJKHJldmlzaW9uIDQ2Njc5KQorKysgV2Vi
Q29yZS9kb20vVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAg
IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI3LDQ0ICsyNywzOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgCi1jb25zdCB1bnNpZ25lZCBjVGV4dE5vZGVMZW5ndGhMaW1pdCA9IDEgPDwgMTY7Ci0KIGNs
YXNzIFRleHQgOiBwdWJsaWMgQ2hhcmFjdGVyRGF0YSB7CiBwdWJsaWM6Ci0gICAgVGV4dChEb2N1
bWVudCAqaW1wbCwgY29uc3QgU3RyaW5nICZfdGV4dCk7Ci0gICAgVGV4dChEb2N1bWVudCAqaW1w
bCk7Ci0gICAgdmlydHVhbCB+VGV4dCgpOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZh
dWx0TGVuZ3RoTGltaXQgPSAxIDw8IDE2OwogCi0gICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1
dGVzIGZvciBDaGFyYWN0ZXJEYXRhCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dD4gY3JlYXRl
KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dD4g
Y3JlYXRlV2l0aExlbmd0aExpbWl0KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQm
IGNoYXJzTGVmdCwgdW5zaWduZWQgbGVuZ3RoTGltaXQgPSBkZWZhdWx0TGVuZ3RoTGltaXQpOwog
CiAgICAgUGFzc1JlZlB0cjxUZXh0PiBzcGxpdFRleHQodW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRp
b25Db2RlJik7CiAKICAgICAvLyBET00gTGV2ZWwgMzogaHR0cDovL3d3dy53My5vcmcvVFIvRE9N
LUxldmVsLTMtQ29yZS9jb3JlLmh0bWwjSUQtMTMxMjI5NTc3MgorCiAgICAgU3RyaW5nIHdob2xl
VGV4dCgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8VGV4dD4gcmVwbGFjZVdob2xlVGV4dChjb25z
dCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICAvLyBET00gbWV0aG9kcyBvdmVycmlk
ZGVuIGZyb20gcGFyZW50IGNsYXNzZXMKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CisKK3By
b3RlY3RlZDoKKyAgICBUZXh0KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJik7CiAKK3ByaXZhdGU6
CiAgICAgdmlydHVhbCBTdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIE5vZGVU
eXBlIG5vZGVUeXBlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IGNsb25l
Tm9kZShib29sIGRlZXApOwotCi0gICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9N
KQotCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJl
cklzTmVlZGVkKFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0
ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0dWFsIHZvaWQg
cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgPSBOb0NoYW5nZSk7CiAgICAgdmlydHVhbCBib29sIGNo
aWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dD4g
Y3JlYXRlV2l0aExlbmd0aExpbWl0KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQm
IGNoYXJzTGVmdCwgdW5zaWduZWQgbWF4Q2hhcnMgPSBjVGV4dE5vZGVMZW5ndGhMaW1pdCk7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFRleHQ+IHZpcnR1YWxDcmVhdGUoY29uc3QgU3RyaW5nJik7
CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCB2b2lkIGZvcm1hdEZvckRlYnVnZ2VyKGNo
YXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKICNlbmRpZgotCi1wcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRleHQ+IGNyZWF0ZU5ldyhQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9t
L1hNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vWE1MVG9rZW5pemVy
LmNwcAkocmV2aXNpb24gNDY2NzkpCisrKyBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzYsNyArMTM2LDcgQEAgYm9vbCBYTUxUb2tlbml6ZXI6OmVudGVy
VGV4dCgpCiAjaWYgIVVTRShRWE1MU1RSRUFNKQogICAgIEFTU0VSVChtX2J1ZmZlcmVkVGV4dC5z
aXplKCkgPT0gMCk7CiAjZW5kaWYKLSAgICBSZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9IG5ldyBUZXh0
KG1fZG9jLCAiIik7CisgICAgUmVmUHRyPE5vZGU+IG5ld05vZGUgPSBUZXh0OjpjcmVhdGUobV9k
b2MsICIiKTsKICAgICBpZiAoIW1fY3VycmVudE5vZGUtPmFkZENoaWxkKG5ld05vZGUuZ2V0KCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgc2V0Q3VycmVudE5vZGUobmV3Tm9kZS5nZXQo
KSk7CkluZGV4OiBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcAkocmV2aXNpb24gNDY2Nzkp
CisrKyBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTUxLDcgKzk1MSw3IEBAIHZvaWQgWE1MVG9rZW5pemVyOjpjZGF0YUJsb2NrKGNvbnN0IHht
bEMKICAgICAKICAgICBleGl0VGV4dCgpOwogCi0gICAgUmVmUHRyPE5vZGU+IG5ld05vZGUgPSBu
ZXcgQ0RBVEFTZWN0aW9uKG1fZG9jLCB0b1N0cmluZyhzLCBsZW4pKTsKKyAgICBSZWZQdHI8Tm9k
ZT4gbmV3Tm9kZSA9IENEQVRBU2VjdGlvbjo6Y3JlYXRlKG1fZG9jLCB0b1N0cmluZyhzLCBsZW4p
KTsKICAgICBpZiAoIW1fY3VycmVudE5vZGUtPmFkZENoaWxkKG5ld05vZGUuZ2V0KCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgaWYgKG1fdmlldyAmJiAhbmV3Tm9kZS0+YXR0YWNoZWQoKSkKQEAg
LTk3MCw3ICs5NzAsNyBAQCB2b2lkIFhNTFRva2VuaXplcjo6Y29tbWVudChjb25zdCB4bWxDaGFy
CiAgICAgCiAgICAgZXhpdFRleHQoKTsKIAotICAgIFJlZlB0cjxOb2RlPiBuZXdOb2RlID0gbmV3
IENvbW1lbnQobV9kb2MsIHRvU3RyaW5nKHMpKTsKKyAgICBSZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9
IENvbW1lbnQ6OmNyZWF0ZShtX2RvYywgdG9TdHJpbmcocykpOwogICAgIG1fY3VycmVudE5vZGUt
PmFkZENoaWxkKG5ld05vZGUuZ2V0KCkpOwogICAgIGlmIChtX3ZpZXcgJiYgIW5ld05vZGUtPmF0
dGFjaGVkKCkpCiAgICAgICAgIG5ld05vZGUtPmF0dGFjaCgpOwpJbmRleDogV2ViQ29yZS9lZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRp
bmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiA0NjY3OSkKKysrIFdlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxOSw3
ICs1MTksNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNpZ25pCiAgICAg
ICAgICAgICBnYXBTdGFydCA9IG1heChnYXBTdGFydCwgc3RhcnQpOwogICAgICAgICAgICAgZ2Fw
RW5kID0gbWluKGdhcEVuZCwgZW5kKTsKICAgICAgICAgICAgIGlmIChzdHIuaXNOdWxsKCkpCi0g
ICAgICAgICAgICAgICAgc3RyID0gdGV4dE5vZGUtPnN0cmluZygpLT5zdWJzdHJpbmcoc3RhcnQs
IGVuZCAtIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICBzdHIgPSB0ZXh0Tm9kZS0+ZGF0YSgpLnN1
YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpOwogICAgICAgICAgICAgLy8gcmVtb3ZlIHRleHQg
aW4gdGhlIGdhcAogICAgICAgICAgICAgc3RyLnJlbW92ZShnYXBTdGFydCAtIHN0YXJ0IC0gcmVt
b3ZlZCwgZ2FwTGVuKTsKICAgICAgICAgICAgIHJlbW92ZWQgKz0gZ2FwTGVuOwpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL0NyZWF0ZUxpbmtDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2VkaXRpbmcvQ3JlYXRlTGlua0NvbW1hbmQuY3BwCShyZXZpc2lvbiA0NjY3OSkKKysrIFdlYkNv
cmUvZWRpdGluZy9DcmVhdGVMaW5rQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcg
KzUxLDcgQEAgdm9pZCBDcmVhdGVMaW5rQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIGFwcGx5
U3R5bGVkRWxlbWVudChhbmNob3JFbGVtZW50LmdldCgpKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBpbnNlcnROb2RlQXQoYW5jaG9yRWxlbWVudC5nZXQoKSwgZW5kaW5nU2VsZWN0aW9uKCkuc3Rh
cnQoKSk7Ci0gICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0Tm9kZSA9IG5ldyBUZXh0KGRvY3VtZW50
KCksIG1fdXJsKTsKKyAgICAgICAgUmVmUHRyPFRleHQ+IHRleHROb2RlID0gVGV4dDo6Y3JlYXRl
KGRvY3VtZW50KCksIG1fdXJsKTsKICAgICAgICAgYXBwZW5kTm9kZSh0ZXh0Tm9kZS5nZXQoKSwg
YW5jaG9yRWxlbWVudC5nZXQoKSk7CiAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxl
U2VsZWN0aW9uKHBvc2l0aW9uQmVmb3JlTm9kZShhbmNob3JFbGVtZW50LmdldCgpKSwgcG9zaXRp
b25BZnRlck5vZGUoYW5jaG9yRWxlbWVudC5nZXQoKSksIERPV05TVFJFQU0pKTsKICAgICB9Cklu
ZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCShyZXZpc2lvbiA0NjY3OSkKKysrIFdlYkNv
cmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4
NCw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVJbnNlcnRGcmFnbWVudChGcmFtZSoKIAogc3RhdGlj
IGJvb2wgZXhlY3V0ZUluc2VydE5vZGUoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPE5vZGU+IGNv
bnRlbnQpCiB7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gbmV3IERv
Y3VtZW50RnJhZ21lbnQoZnJhbWUtPmRvY3VtZW50KCkpOworICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShmcmFtZS0+ZG9jdW1l
bnQoKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgZnJhZ21lbnQtPmFwcGVuZENo
aWxkKGNvbnRlbnQsIGVjKTsKICAgICBpZiAoZWMpCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvU3Bs
aXRUZXh0Tm9kZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9TcGxp
dFRleHROb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDQ2Njc5KQorKysgV2ViQ29yZS9lZGl0aW5n
L1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBA
QCB2b2lkIFNwbGl0VGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAocHJlZml4VGV4
dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxUZXh0PiBwcmVmaXhU
ZXh0Tm9kZSA9IG5ldyBUZXh0KGRvY3VtZW50KCksIHByZWZpeFRleHQpOworICAgIFJlZlB0cjxU
ZXh0PiBwcmVmaXhUZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCBwcmVmaXhUZXh0
KTsKICAgICBBU1NFUlQocHJlZml4VGV4dE5vZGUpOwogICAgIGRvY3VtZW50KCktPmNvcHlNYXJr
ZXJzKG1fdGV4dDIuZ2V0KCksIDAsIG1fb2Zmc2V0LCBwcmVmaXhUZXh0Tm9kZS5nZXQoKSwgMCk7
CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiA0NjY3OSkKKysrIFdlYkNvcmUvZWRpdGlu
Zy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjMsNyArNDIzLDcgQEAgc3RhdGljIHZv
aWQgYXBwZW5kU3RhcnRNYXJrdXAoVmVjdG9yPFVDaAogICAgICAgICBjYXNlIE5vZGU6OkNPTU1F
TlRfTk9ERToKICAgICAgICAgICAgIC8vIEZJWE1FOiBDb21tZW50IGNvbnRlbnQgaXMgbm90IGVz
Y2FwZWQsIGJ1dCBYTUxTZXJpYWxpemVyIChhbmQgcG9zc2libHkgb3RoZXIgY2FsbGVycykgc2hv
dWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBpbmNsdWRlcyAiLS0+Ii4KICAgICAgICAgICAg
IGFwcGVuZChyZXN1bHQsICI8IS0tIik7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBzdGF0
aWNfY2FzdDxjb25zdCBDb21tZW50Kj4obm9kZSktPm5vZGVWYWx1ZSgpKTsKKyAgICAgICAgICAg
IGFwcGVuZChyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IENvbW1lbnQqPihub2RlKS0+ZGF0YSgp
KTsKICAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsICItLT4iKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX05PREU6CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTERvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5o
CShyZXZpc2lvbiA0NjY3OSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBIVE1MRG9jdW1lbnQgOiBwdWJsaWMgRG9j
dW1lbnQsIHB1CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTERvY3VtZW50PiBj
cmVhdGUoRnJhbWUqIGZyYW1lKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRG9jdW1l
bnQoZnJhbWUpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxEb2N1bWVudChmcmFt
ZSkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5IVE1MRG9jdW1lbnQoKTsKIApAQCAtNzEsMTAgKzcx
LDYgQEAgcHVibGljOgogICAgIHZvaWQgY2FwdHVyZUV2ZW50cygpOwogICAgIHZvaWQgcmVsZWFz
ZUV2ZW50cygpOwogCi0gICAgdmlydHVhbCBib29sIGNoaWxkQWxsb3dlZChOb2RlKik7Ci0KLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlRWxlbWVudChjb25zdCBBdG9taWNT
dHJpbmcmIHRhZ05hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLQogICAgIHZvaWQgYWRkTmFtZWRJdGVt
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSk7CiAgICAgdm9pZCByZW1vdmVOYW1lZEl0ZW0oY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lKTsKICAgICBib29sIGhhc05hbWVkSXRlbShBdG9taWNTdHJp
bmdJbXBsKiBuYW1lKTsKQEAgLTg3LDYgKzgzLDEwIEBAIHByb3RlY3RlZDoKICAgICBIVE1MRG9j
dW1lbnQoRnJhbWUqKTsKIAogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgY2hpbGRBbGxvd2Vk
KE5vZGUqKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVFbGVtZW50
KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRXhjZXB0aW9uQ29kZSYpOworCiAgICAgdmly
dHVhbCBib29sIGlzSFRNTERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc0ZyYW1lU2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBUb2tlbml6ZXIqIGNy
ZWF0ZVRva2VuaXplcigpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0NjY3OSkK
KysrIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Nyw3
ICsyNDcsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEhUTUxFbGVtZW50CiAgICAg
ICAgIGhhc0xvY2FsTmFtZShoZWFkVGFnKSB8fCBoYXNMb2NhbE5hbWUoc3R5bGVUYWcpIHx8IGhh
c0xvY2FsTmFtZSh0aXRsZVRhZykpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gbmV3IERvY3VtZW50RnJhZ21lbnQoZG9jdW1lbnQo
KSk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1lbnRGcmFn
bWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwogICAgIAogICAgIGlmIChkb2N1bWVudCgpLT5pc0hU
TUxEb2N1bWVudCgpKQogICAgICAgICAgcGFyc2VIVE1MRG9jdW1lbnRGcmFnbWVudChodG1sLCBm
cmFnbWVudC5nZXQoKSk7CkBAIC0zMDksNyArMzA5LDcgQEAgc3RhdGljIHZvaWQgcmVwbGFjZUNo
aWxkcmVuV2l0aEZyYWdtZW50KAogICAgIH0KIAogICAgIGlmIChoYXNPbmVUZXh0Q2hpbGQoZWxl
bWVudCkgJiYgaGFzT25lVGV4dENoaWxkKGZyYWdtZW50LmdldCgpKSkgewotICAgICAgICBzdGF0
aWNfY2FzdDxUZXh0Kj4oZWxlbWVudC0+Zmlyc3RDaGlsZCgpKS0+c2V0RGF0YShzdGF0aWNfY2Fz
dDxUZXh0Kj4oZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKSktPnN0cmluZygpLCBlYyk7CisgICAgICAg
IHN0YXRpY19jYXN0PFRleHQqPihlbGVtZW50LT5maXJzdENoaWxkKCkpLT5zZXREYXRhKHN0YXRp
Y19jYXN0PFRleHQqPihmcmFnbWVudC0+Zmlyc3RDaGlsZCgpKS0+ZGF0YSgpLCBlYyk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMyOSw3ICszMjksNyBAQCBzdGF0aWMgdm9pZCByZXBs
YWNlQ2hpbGRyZW5XaXRoVGV4dChIVE1MCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBS
ZWZQdHI8VGV4dD4gdGV4dE5vZGUgPSBuZXcgVGV4dChlbGVtZW50LT5kb2N1bWVudCgpLCB0ZXh0
KTsKKyAgICBSZWZQdHI8VGV4dD4gdGV4dE5vZGUgPSBUZXh0OjpjcmVhdGUoZWxlbWVudC0+ZG9j
dW1lbnQoKSwgdGV4dCk7CiAKICAgICBpZiAoaGFzT25lQ2hpbGQoZWxlbWVudCkpIHsKICAgICAg
ICAgZWxlbWVudC0+cmVwbGFjZUNoaWxkKHRleHROb2RlLnJlbGVhc2UoKSwgZWxlbWVudC0+Zmly
c3RDaGlsZCgpLCBlYyk7CkBAIC00MTUsNyArNDE1LDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6c2V0
SW5uZXJUZXh0KGNvbnN0IFN0cgogCiAgICAgLy8gQWRkIHRleHQgbm9kZXMgYW5kIDxicj4gZWxl
bWVudHMuCiAgICAgZWMgPSAwOwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVu
dCA9IG5ldyBEb2N1bWVudEZyYWdtZW50KGRvY3VtZW50KCkpOworICAgIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVudCgp
KTsKICAgICBpbnQgbGluZVN0YXJ0ID0gMDsKICAgICBVQ2hhciBwcmV2ID0gMDsKICAgICBpbnQg
bGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKQEAgLTQyMyw3ICs0MjMsNyBAQCB2b2lkIEhUTUxFbGVt
ZW50OjpzZXRJbm5lclRleHQoY29uc3QgU3RyCiAgICAgICAgIFVDaGFyIGMgPSB0ZXh0W2ldOwog
ICAgICAgICBpZiAoYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJykgewogICAgICAgICAgICAgaWYgKGkg
PiBsaW5lU3RhcnQpIHsKLSAgICAgICAgICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQobmV3
IFRleHQoZG9jdW1lbnQoKSwgdGV4dC5zdWJzdHJpbmcobGluZVN0YXJ0LCBpIC0gbGluZVN0YXJ0
KSksIGVjKTsKKyAgICAgICAgICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3Jl
YXRlKGRvY3VtZW50KCksIHRleHQuc3Vic3RyaW5nKGxpbmVTdGFydCwgaSAtIGxpbmVTdGFydCkp
LCBlYyk7CiAgICAgICAgICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CkBAIC00MzcsNyArNDM3LDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6
c2V0SW5uZXJUZXh0KGNvbnN0IFN0cgogICAgICAgICBwcmV2ID0gYzsKICAgICB9CiAgICAgaWYg
KGxlbmd0aCA+IGxpbmVTdGFydCkKLSAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKG5ldyBU
ZXh0KGRvY3VtZW50KCksIHRleHQuc3Vic3RyaW5nKGxpbmVTdGFydCwgbGVuZ3RoIC0gbGluZVN0
YXJ0KSksIGVjKTsKKyAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShk
b2N1bWVudCgpLCB0ZXh0LnN1YnN0cmluZyhsaW5lU3RhcnQsIGxlbmd0aCAtIGxpbmVTdGFydCkp
LCBlYyk7CiAgICAgcmVwbGFjZUNoaWxkcmVuV2l0aEZyYWdtZW50KHRoaXMsIGZyYWdtZW50LnJl
bGVhc2UoKSwgZWMpOwogfQogCkBAIC00NjUsNyArNDY1LDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6
c2V0T3V0ZXJUZXh0KGNvbnN0IFN0cgogICAgIC8vIEZJWE1FOiBUaGlzIGNyZWF0ZXMgYSBuZXcg
dGV4dCBub2RlIGV2ZW4gd2hlbiB0aGUgdGV4dCBpcyBlbXB0eS4KICAgICAvLyBGSVhNRTogVGhp
cyBjcmVhdGVzIGEgc2luZ2xlIHRleHQgbm9kZSBldmVuIHdoZW4gdGhlIHRleHQgaGFzIENSIGFu
ZCBMRgogICAgIC8vIGNoYXJhY3RlcnMgaW4gaXQuIEluc3RlYWQgaXQgc2hvdWxkIGNyZWF0ZSA8
YnI+IGVsZW1lbnRzLgotICAgIFJlZlB0cjxUZXh0PiB0ID0gbmV3IFRleHQoZG9jdW1lbnQoKSwg
dGV4dCk7CisgICAgUmVmUHRyPFRleHQ+IHQgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgdGV4
dCk7CiAgICAgZWMgPSAwOwogICAgIHBhcmVudC0+cmVwbGFjZUNoaWxkKHQsIHRoaXMsIGVjKTsK
ICAgICBpZiAoZWMpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAJKHJldmlzaW9u
IDQ2Njc5KQorKysgV2ViQ29yZS9odG1sL0hUTUxLZXlnZW5FbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTEsNyArNTEsNyBAQCBIVE1MS2V5Z2VuRWxlbWVudDo6SFRNTEtleWdlbkVsZW1l
bnQoY29uCiAgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBrZXlz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCog
byA9IG5ldyBIVE1MT3B0aW9uRWxlbWVudChvcHRpb25UYWcsIGRvYywgZm9ybSgpKTsKICAgICAg
ICAgYWRkQ2hpbGQobyk7Ci0gICAgICAgIG8tPmFkZENoaWxkKG5ldyBUZXh0KGRvYywgKml0KSk7
CisgICAgICAgIG8tPmFkZENoaWxkKFRleHQ6OmNyZWF0ZShkb2MsICppdCkpOwogICAgIH0KIH0K
IApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA0NjY3OSkKKysr
IFdlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTky
LDcgKzkyLDcgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0VGV4dChjb25zdCBTdAogICAg
IH0KIAogICAgIHJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgYXBwZW5kQ2hpbGQobmV3IFRleHQoZG9j
dW1lbnQoKSwgdGV4dCksIGVjKTsKKyAgICBhcHBlbmRDaGlsZChUZXh0OjpjcmVhdGUoZG9jdW1l
bnQoKSwgdGV4dCksIGVjKTsKIH0KIAogdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6YWNjZXNzS2V5
QWN0aW9uKGJvb2wpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3BwCShyZXZpc2lvbiA0NjY3OSkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkyLDEzICs2OTIs
MTMgQEAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBDcmVhdAogCiBib29sIEhU
TUxQYXJzZXI6OnRleHRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJl
c3VsdCkKIHsKLSAgICByZXN1bHQgPSBuZXcgVGV4dChtX2RvY3VtZW50LCB0LT50ZXh0LmdldCgp
KTsKKyAgICByZXN1bHQgPSBUZXh0OjpjcmVhdGUobV9kb2N1bWVudCwgdC0+dGV4dC5nZXQoKSk7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEhUTUxQYXJzZXI6OmNvbW1lbnRDcmVhdGVF
cnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKIHsKLSAgICByZXN1bHQg
PSBuZXcgQ29tbWVudChtX2RvY3VtZW50LCB0LT50ZXh0LmdldCgpKTsKKyAgICByZXN1bHQgPSBD
b21tZW50OjpjcmVhdGUobV9kb2N1bWVudCwgdC0+dGV4dC5nZXQoKSk7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCkBAIC0xNTk4LDcgKzE1OTgsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IEhUTUxQYXJz
ZXI6OmhhbmRsZUlzaW5kCiAgICAgfQogCiAgICAgbi0+YWRkQ2hpbGQobmV3IEhUTUxIUkVsZW1l
bnQoaHJUYWcsIG1fZG9jdW1lbnQpKTsKLSAgICBuLT5hZGRDaGlsZChuZXcgVGV4dChtX2RvY3Vt
ZW50LCB0ZXh0KSk7CisgICAgbi0+YWRkQ2hpbGQoVGV4dDo6Y3JlYXRlKG1fZG9jdW1lbnQsIHRl
eHQpKTsKICAgICBuLT5hZGRDaGlsZChpc0luZGV4LnJlbGVhc2UoKSk7CiAgICAgbi0+YWRkQ2hp
bGQobmV3IEhUTUxIUkVsZW1lbnQoaHJUYWcsIG1fZG9jdW1lbnQpKTsKIApJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcAkocmV2aXNpb24gNDY2NzkpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
Nyw3ICsyNzcsNyBAQCB2b2lkIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmFkZFRleHQoY29uCiAg
ICAgICAgIH0KICAgICAgICAgaWYgKG1fY3VycmVudCA9PSBtX3Rib2R5KQogICAgICAgICAgICAg
YWRkTGluZShjbGFzc05hbWUpOwotICAgICAgICBSZWZQdHI8VGV4dD4gdCA9IG5ldyBUZXh0KHRo
aXMsIHN1YnN0cmluZyk7CisgICAgICAgIFJlZlB0cjxUZXh0PiB0ID0gVGV4dDo6Y3JlYXRlKHRo
aXMsIHN1YnN0cmluZyk7CiAgICAgICAgIG1fY3VycmVudC0+YWRkQ2hpbGQodCk7CiAgICAgICAg
IHQtPmF0dGFjaCgpOwogICAgICAgICBpZiAoaSA8IHNpemUgLSAxKQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTFZpZXdTb3VyY2VEb2N1bWVudC5oCShyZXZpc2lvbiA0NjY3OSkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2
LDEyICszNiw5IEBAIGNsYXNzIEhUTUxWaWV3U291cmNlRG9jdW1lbnQgOiBwdWJsaWMgSFQKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MVmlld1NvdXJjZURvY3VtZW50PiBjcmVh
dGUoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIG5ldyBIVE1MVmlld1NvdXJjZURvY3VtZW50KGZyYW1lLCBtaW1lVHlwZSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFZpZXdTb3VyY2VEb2N1bWVudChmcmFtZSwgbWlt
ZVR5cGUpKTsKICAgICB9CiAKLSAgICAvLyBSZXR1cm5zIEhUTUxUb2tlbml6ZXIgb3IgVGV4dFRv
a2VuaXplciBiYXNlZCBvbiBtX3R5cGUuCi0gICAgdmlydHVhbCBUb2tlbml6ZXIqIGNyZWF0ZVRv
a2VuaXplcigpOwotCiAgICAgdm9pZCBhZGRWaWV3U291cmNlVG9rZW4oVG9rZW4qKTsgLy8gVXNl
ZCBieSB0aGUgSFRNTCB0b2tlbml6ZXIuCiAgICAgdm9pZCBhZGRWaWV3U291cmNlVGV4dChjb25z
dCBTdHJpbmcmKTsgLy8gVXNlZCBieSB0aGUgcGxhaW50ZXh0IHRva2VuaXplci4KICAgICB2b2lk
IGFkZFZpZXdTb3VyY2VEb2N0eXBlVG9rZW4oRG9jdHlwZVRva2VuKik7CkBAIC00OSw2ICs0Niw5
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSFRNTFZpZXdTb3VyY2VEb2N1bWVudChGcmFtZSos
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwogCisgICAgLy8gUmV0dXJucyBIVE1MVG9rZW5pemVy
IG9yIFRleHRUb2tlbml6ZXIgYmFzZWQgb24gbV90eXBlLgorICAgIHZpcnR1YWwgVG9rZW5pemVy
KiBjcmVhdGVUb2tlbml6ZXIoKTsKKwogICAgIHZvaWQgY3JlYXRlQ29udGFpbmluZ1RhYmxlKCk7
CiAgICAgRWxlbWVudCogYWRkU3BhbldpdGhDbGFzc05hbWUoY29uc3QgU3RyaW5nJik7CiAgICAg
dm9pZCBhZGRMaW5lKGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lKTsKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAJKHJldmlzaW9uIDQ2Njc5KQorKysgV2ViQ29yZS9s
b2FkZXIvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyAr
MTE4LDcgQEAgdm9pZCBGVFBEaXJlY3RvcnlUb2tlbml6ZXI6OmFwcGVuZEVudHJ5KAogICAgIHJv
d0VsZW1lbnQtPnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAiZnRwRGlyZWN0b3J5RW50cnlSb3ciLCBl
Yyk7CiAgICAKICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG1fZG9jLT5jcmVhdGVFbGVt
ZW50KHRkVGFnLCBmYWxzZSk7Ci0gICAgZWxlbWVudC0+YXBwZW5kQ2hpbGQobmV3IFRleHQobV9k
b2MsIFN0cmluZygmbm9CcmVha1NwYWNlLCAxKSksIGVjKTsKKyAgICBlbGVtZW50LT5hcHBlbmRD
aGlsZChUZXh0OjpjcmVhdGUobV9kb2MsIFN0cmluZygmbm9CcmVha1NwYWNlLCAxKSksIGVjKTsK
ICAgICBpZiAoaXNEaXJlY3RvcnkpCiAgICAgICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZSgiY2xh
c3MiLCAiZnRwRGlyZWN0b3J5SWNvbiBmdHBEaXJlY3RvcnlUeXBlRGlyZWN0b3J5IiwgZWMpOwog
ICAgIGVsc2UKQEAgLTEzMCwxMiArMTMwLDEyIEBAIHZvaWQgRlRQRGlyZWN0b3J5VG9rZW5pemVy
OjphcHBlbmRFbnRyeSgKICAgICByb3dFbGVtZW50LT5hcHBlbmRDaGlsZChlbGVtZW50LCBlYyk7
CiAgICAgCiAgICAgZWxlbWVudCA9IG1fZG9jLT5jcmVhdGVFbGVtZW50KHRkVGFnLCBmYWxzZSk7
Ci0gICAgZWxlbWVudC0+YXBwZW5kQ2hpbGQobmV3IFRleHQobV9kb2MsIGRhdGUpLCBlYyk7Cisg
ICAgZWxlbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKG1fZG9jLCBkYXRlKSwgZWMpOwog
ICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAiZnRwRGlyZWN0b3J5RmlsZURhdGUi
LCBlYyk7CiAgICAgcm93RWxlbWVudC0+YXBwZW5kQ2hpbGQoZWxlbWVudCwgZWMpOwogICAgIAog
ICAgIGVsZW1lbnQgPSBtX2RvYy0+Y3JlYXRlRWxlbWVudCh0ZFRhZywgZmFsc2UpOwotICAgIGVs
ZW1lbnQtPmFwcGVuZENoaWxkKG5ldyBUZXh0KG1fZG9jLCBzaXplKSwgZWMpOworICAgIGVsZW1l
bnQtPmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShtX2RvYywgc2l6ZSksIGVjKTsKICAgICBlbGVt
ZW50LT5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgImZ0cERpcmVjdG9yeUZpbGVTaXplIiwgZWMpOwog
ICAgIHJvd0VsZW1lbnQtPmFwcGVuZENoaWxkKGVsZW1lbnQsIGVjKTsKIH0KQEAgLTE1Miw3ICsx
NTIsNyBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEZUUERpcmVjdG9yeVRva2VuaXplCiAKICAgICBS
ZWZQdHI8RWxlbWVudD4gYW5jaG9yRWxlbWVudCA9IG1fZG9jLT5jcmVhdGVFbGVtZW50KGFUYWcs
IGZhbHNlKTsKICAgICBhbmNob3JFbGVtZW50LT5zZXRBdHRyaWJ1dGUoImhyZWYiLCBmdWxsVVJM
LCBlYyk7Ci0gICAgYW5jaG9yRWxlbWVudC0+YXBwZW5kQ2hpbGQobmV3IFRleHQobV9kb2MsIGZp
bGVuYW1lKSwgZWMpOworICAgIGFuY2hvckVsZW1lbnQtPmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0
ZShtX2RvYywgZmlsZW5hbWUpLCBlYyk7CiAgICAgCiAgICAgUmVmUHRyPEVsZW1lbnQ+IHRkRWxl
bWVudCA9IG1fZG9jLT5jcmVhdGVFbGVtZW50KHRkVGFnLCBmYWxzZSk7CiAgICAgdGRFbGVtZW50
LT5hcHBlbmRDaGlsZChhbmNob3JFbGVtZW50LCBlYyk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9G
VFBEaXJlY3RvcnlEb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZUUERp
cmVjdG9yeURvY3VtZW50LmgJKHJldmlzaW9uIDQ2Njc5KQorKysgV2ViQ29yZS9sb2FkZXIvRlRQ
RGlyZWN0b3J5RG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUs
NyBAQCBjbGFzcyBGVFBEaXJlY3RvcnlEb2N1bWVudCA6IHB1YmxpYyBIVE1MCiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8RlRQRGlyZWN0b3J5RG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSog
ZnJhbWUpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IEZUUERpcmVjdG9yeURvY3VtZW50KGZy
YW1lKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGVFBEaXJlY3RvcnlEb2N1bWVudChm
cmFtZSkpOwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ltYWdlRG9j
dW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9JbWFnZURvY3VtZW50LmgJKHJl
dmlzaW9uIDQ2Njc5KQorKysgV2ViQ29yZS9sb2FkZXIvSW1hZ2VEb2N1bWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIGNsYXNzIEltYWdl
RG9jdW1lbnQgOiBwdWJsaWMgSFRNTERvY3VtZW4KIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbWFnZURvY3VtZW50PiBjcmVhdGUoRnJhbWUqIGZyYW1lKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIG5ldyBJbWFnZURvY3VtZW50KGZyYW1lKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJbWFnZURvY3VtZW50KGZyYW1lKSk7CiAgICAgfQogCiAgICAgQ2FjaGVkSW1hZ2UqIGNh
Y2hlZEltYWdlKCk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9NZWRpYURvY3VtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvTWVkaWFEb2N1bWVudC5oCShyZXZpc2lvbiA0NjY3OSkK
KysrIFdlYkNvcmUvbG9hZGVyL01lZGlhRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LDIwMDkgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwyMiAr
MzYsMjMgQEAgY2xhc3MgTWVkaWFEb2N1bWVudCA6IHB1YmxpYyBIVE1MRG9jdW1lbgogcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhRG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSogZnJh
bWUpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IE1lZGlhRG9jdW1lbnQoZnJhbWUpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhRG9jdW1lbnQoZnJhbWUpKTsKICAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworICAgIHZpcnR1
YWwgfk1lZGlhRG9jdW1lbnQoKTsKIAogICAgIHZvaWQgbWVkaWFFbGVtZW50U2F3VW5zdXBwb3J0
ZWRUcmFja3MoKTsKIAogcHJpdmF0ZToKICAgICBNZWRpYURvY3VtZW50KEZyYW1lKik7Ci0gICAg
dmlydHVhbCB+TWVkaWFEb2N1bWVudCgpOwotICAgIFRpbWVyPE1lZGlhRG9jdW1lbnQ+IG1fcmVw
bGFjZU1lZGlhRWxlbWVudFRpbWVyOwogCiAgICAgdmlydHVhbCBib29sIGlzTWVkaWFEb2N1bWVu
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0gICAgICAgIAogICAgIHZpcnR1YWwgVG9rZW5pemVy
KiBjcmVhdGVUb2tlbml6ZXIoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50Kik7CisKICAgICB2b2lkIHJlcGxhY2VNZWRpYUVsZW1lbnRUaW1lckZpcmVkKFRp
bWVyPE1lZGlhRG9jdW1lbnQ+Kik7CisKKyAgICBUaW1lcjxNZWRpYURvY3VtZW50PiBtX3JlcGxh
Y2VNZWRpYUVsZW1lbnRUaW1lcjsKIH07CiAgICAgCiB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Q
bGFjZWhvbGRlckRvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUGxhY2Vo
b2xkZXJEb2N1bWVudC5oCShyZXZpc2lvbiA0NjY3OSkKKysrIFdlYkNvcmUvbG9hZGVyL1BsYWNl
aG9sZGVyRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBQ
bGFjZWhvbGRlckRvY3VtZW50IDogcHVibGljIERvY3VtCiBwdWJsaWM6CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8UGxhY2Vob2xkZXJEb2N1bWVudD4gY3JlYXRlKEZyYW1lKiBmcmFtZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBuZXcgUGxhY2Vob2xkZXJEb2N1bWVudChmcmFtZSk7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgUGxhY2Vob2xkZXJEb2N1bWVudChmcmFtZSkpOwogICAgIH0K
IAogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1BsdWdp
bkRvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQu
aAkocmV2aXNpb24gNDY2NzkpCisrKyBXZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDgsIDIwMDlBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMzLDcgQEAgY2xhc3MgUGx1Z2luRG9jdW1l
bnQgOiBwdWJsaWMgSFRNTERvY3VtZQogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBs
dWdpbkRvY3VtZW50PiBjcmVhdGUoRnJhbWUqIGZyYW1lKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IG5ldyBQbHVnaW5Eb2N1bWVudChmcmFtZSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
UGx1Z2luRG9jdW1lbnQoZnJhbWUpKTsKICAgICB9CiAKIHByaXZhdGU6CkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9UZXh0RG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UZXh0
RG9jdW1lbnQuaAkocmV2aXNpb24gNDY2NzkpCisrKyBXZWJDb3JlL2xvYWRlci9UZXh0RG9jdW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBjbGFzcyBUZXh0
RG9jdW1lbnQgOiBwdWJsaWMgSFRNTERvY3VtZW50CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8VGV4dERvY3VtZW50PiBjcmVhdGUoRnJhbWUqIGZyYW1lKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIG5ldyBUZXh0RG9jdW1lbnQoZnJhbWUpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFRleHREb2N1bWVudChmcmFtZSkpOwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL2xvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbG9hZGVy
LmNwcAkocmV2aXNpb24gNDY2NzkpCisrKyBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNTMsNyArMzUzLDcgQEAgdm9pZCBMb2FkZXI6Okhvc3Q6OmRpZEZpbmlz
aExvYWRpbmcoU3VicgogICAgIERvY0xvYWRlciogZG9jTG9hZGVyID0gcmVxdWVzdC0+ZG9jTG9h
ZGVyKCk7CiAgICAgLy8gUHJldmVudCB0aGUgZG9jdW1lbnQgZnJvbSBiZWluZyBkZXN0cm95ZWQg
YmVmb3JlIHdlIGFyZSBkb25lIHdpdGgKICAgICAvLyB0aGUgZG9jTG9hZGVyIHRoYXQgaXQgd2ls
bCBkZWxldGUgd2hlbiB0aGUgZG9jdW1lbnQgZ2V0cyBkZWxldGVkLgotICAgIERvY1B0cjxEb2N1
bWVudD4gcHJvdGVjdG9yKGRvY0xvYWRlci0+ZG9jKCkpOworICAgIFJlZlB0cjxEb2N1bWVudD4g
cHJvdGVjdG9yKGRvY0xvYWRlci0+ZG9jKCkpOwogICAgIGlmICghcmVxdWVzdC0+aXNNdWx0aXBh
cnQoKSkKICAgICAgICAgZG9jTG9hZGVyLT5kZWNyZW1lbnRSZXF1ZXN0Q291bnQoKTsKIApAQCAt
NDAxLDcgKzQwMSw3IEBAIHZvaWQgTG9hZGVyOjpIb3N0OjpkaWRGYWlsKFN1YnJlc291cmNlTG8K
ICAgICBEb2NMb2FkZXIqIGRvY0xvYWRlciA9IHJlcXVlc3QtPmRvY0xvYWRlcigpOwogICAgIC8v
IFByZXZlbnQgdGhlIGRvY3VtZW50IGZyb20gYmVpbmcgZGVzdHJveWVkIGJlZm9yZSB3ZSBhcmUg
ZG9uZSB3aXRoCiAgICAgLy8gdGhlIGRvY0xvYWRlciB0aGF0IGl0IHdpbGwgZGVsZXRlIHdoZW4g
dGhlIGRvY3VtZW50IGdldHMgZGVsZXRlZC4KLSAgICBEb2NQdHI8RG9jdW1lbnQ+IHByb3RlY3Rv
cihkb2NMb2FkZXItPmRvYygpKTsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IHByb3RlY3Rvcihkb2NM
b2FkZXItPmRvYygpKTsKICAgICBpZiAoIXJlcXVlc3QtPmlzTXVsdGlwYXJ0KCkpCiAgICAgICAg
IGRvY0xvYWRlci0+ZGVjcmVtZW50UmVxdWVzdENvdW50KCk7CiAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vVHJlZVNoYXJlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vVHJlZVNo
YXJlZC5oCShyZXZpc2lvbiA0NjY3OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vVHJlZVNoYXJlZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yOCwxNyArMjgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHRl
bXBsYXRlPGNsYXNzIFQ+IGNsYXNzIFRyZWVTaGFyZWQgOiBwdWJsaWMgTm9uY29weWFibGUgewog
cHVibGljOgotICAgIFRyZWVTaGFyZWQoKQotICAgICAgICA6IG1fcmVmQ291bnQoMCkKLSAgICAg
ICAgLCBtX3BhcmVudCgwKQotICAgIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIG1fZGVsZXRp
b25IYXNCZWd1biA9IGZhbHNlOwotICAgICAgICBtX2luUmVtb3ZlZExhc3RSZWZGdW5jdGlvbiA9
IGZhbHNlOwotI2VuZGlmCi0gICAgfQotICAgIFRyZWVTaGFyZWQoVCogcGFyZW50KQotICAgICAg
ICA6IG1fcmVmQ291bnQoMCkKKyAgICBUcmVlU2hhcmVkKGludCBpbml0aWFsUmVmQ291bnQgPSAx
KQorICAgICAgICA6IG1fcmVmQ291bnQoaW5pdGlhbFJlZkNvdW50KQogICAgICAgICAsIG1fcGFy
ZW50KDApCiAgICAgewogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQu
Y3BwCShyZXZpc2lvbiA0NjY3OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNyArMjA3LDcgQEAgdm9pZCBSZW5kZXJUZXh0OjpkZWxl
dGVUZXh0Qm94ZXMoKQogUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBSZW5kZXJUZXh0OjpvcmlnaW5h
bFRleHQoKSBjb25zdAogewogICAgIE5vZGUqIGUgPSBub2RlKCk7Ci0gICAgcmV0dXJuIGUgPyBz
dGF0aWNfY2FzdDxUZXh0Kj4oZSktPnN0cmluZygpIDogMDsKKyAgICByZXR1cm4gZSA/IHN0YXRp
Y19jYXN0PFRleHQqPihlKS0+ZGF0YUltcGwoKSA6IDA7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6
YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcAkocmV2aXNpb24gNDY2
NzkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIFJlbmRlclRleHRGcmFnbWVudDo6UmVuZGVyVGV4dEZy
YWdtZW50KE4KIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gUmVuZGVyVGV4dEZyYWdtZW50Ojpvcmln
aW5hbFRleHQoKSBjb25zdAogewogICAgIE5vZGUqIGUgPSBub2RlKCk7Ci0gICAgUmVmUHRyPFN0
cmluZ0ltcGw+IHJlc3VsdCA9IChlID8gc3RhdGljX2Nhc3Q8VGV4dCo+KGUpLT5zdHJpbmcoKSA6
IGNvbnRlbnRTdHJpbmcoKSk7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdCA9IChlID8g
c3RhdGljX2Nhc3Q8VGV4dCo+KGUpLT5kYXRhSW1wbCgpIDogY29udGVudFN0cmluZygpKTsKICAg
ICBpZiAocmVzdWx0ICYmIChzdGFydCgpID4gMCB8fCBzdGFydCgpIDwgcmVzdWx0LT5sZW5ndGgo
KSkpCiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+c3Vic3RyaW5nKHN0YXJ0KCksIGVuZCgpKTsK
ICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKQEAgLTc2LDcgKzc2LDcgQEAgVUNoYXIgUmVu
ZGVyVGV4dEZyYWdtZW50OjpwcmV2aW91c0NoYXJhYwogewogICAgIGlmIChzdGFydCgpKSB7CiAg
ICAgICAgIE5vZGUqIGUgPSBub2RlKCk7Ci0gICAgICAgIFN0cmluZ0ltcGwqICBvcmlnaW5hbCA9
IChlID8gc3RhdGljX2Nhc3Q8VGV4dCo+KGUpLT5zdHJpbmcoKSA6IGNvbnRlbnRTdHJpbmcoKSk7
CisgICAgICAgIFN0cmluZ0ltcGwqICBvcmlnaW5hbCA9IChlID8gc3RhdGljX2Nhc3Q8VGV4dCo+
KGUpLT5kYXRhSW1wbCgpIDogY29udGVudFN0cmluZygpKTsKICAgICAgICAgaWYgKG9yaWdpbmFs
KQogICAgICAgICAgICAgcmV0dXJuICgqb3JpZ2luYWwpW3N0YXJ0KCkgLSAxXTsKICAgICB9Cklu
ZGV4OiBXZWJDb3JlL3N2Zy9TVkdEb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Zn
L1NWR0RvY3VtZW50LmgJKHJldmlzaW9uIDQ2Njc5KQorKysgV2ViQ29yZS9zdmcvU1ZHRG9jdW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDExIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR0RvY3VtZW50PiBj
cmVhdGUoRnJhbWUqIGZyYW1lKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFNW
R0RvY3VtZW50KGZyYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRG9j
dW1lbnQoZnJhbWUpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgflNWR0RvY3VtZW50
KCk7CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdEb2N1bWVudCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KLQogICAgICAgICBTVkdTVkdFbGVtZW50KiByb290RWxlbWVudCgp
IGNvbnN0OwogICAgICAgICAKICAgICAgICAgdm9pZCBkaXNwYXRjaFpvb21FdmVudChmbG9hdCBw
cmV2U2NhbGUsIGZsb2F0IG5ld1NjYWxlKTsKQEAgLTUyLDExICs1MCwxMyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc3RhcnRQYW4oY29uc3QgRmxvYXRQb2ludCYgc3RhcnQp
OwogICAgICAgICB2b2lkIHVwZGF0ZVBhbihjb25zdCBGbG9hdFBvaW50JiBwb3MpIGNvbnN0Owog
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUqKSBj
b25zdDsKLQogICAgIHByaXZhdGU6CiAgICAgICAgIFNWR0RvY3VtZW50KEZyYW1lKik7CiAKKyAg
ICAgICAgdmlydHVhbCBib29sIGlzU1ZHRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisKKyAgICAgICAgdmlydHVhbCBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSop
IGNvbnN0OworCiAgICAgICAgIEZsb2F0UG9pbnQgbV90cmFuc2xhdGU7CiAgICAgfTsKIApJbmRl
eDogV2ViQ29yZS9zdmcvU1ZHRWxlbWVudEluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3BwCShyZXZpc2lvbiA0NjY3OSkKKysrIFdlYkNv
cmUvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw2
IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KIAotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
cHJvamVjdAotCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCiAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCkBAIC0yNSw3ICsyMyw2IEBACiAj
aW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAKICNpbmNsdWRlICJDb250YWluZXJOb2Rl
QWxnb3JpdGhtcy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIK
ICNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIK
QEAgLTQ2LDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIFdURjo6UmVmQ291
bnRlZExlYWtDb3VudGVyIGluc3RhbmNlQ291bnRlcigiV2ViQ29yZVNWR0VsZW1lbnRJbnN0YW5j
ZSIpOwogI2VuZGlmCiAKLVNWR0VsZW1lbnRJbnN0YW5jZTo6U1ZHRWxlbWVudEluc3RhbmNlKFNW
R1VzZUVsZW1lbnQqIHVzZUVsZW1lbnQsIFNWR0VsZW1lbnQqIG9yaWdpbmFsRWxlbWVudCkKK1NW
R0VsZW1lbnRJbnN0YW5jZTo6U1ZHRWxlbWVudEluc3RhbmNlKFNWR1VzZUVsZW1lbnQqIHVzZUVs
ZW1lbnQsIFBhc3NSZWZQdHI8U1ZHRWxlbWVudD4gb3JpZ2luYWxFbGVtZW50KQogICAgIDogbV9u
ZWVkc1VwZGF0ZShmYWxzZSkKICAgICAsIG1fdXNlRWxlbWVudCh1c2VFbGVtZW50KQogICAgICwg
bV9lbGVtZW50KG9yaWdpbmFsRWxlbWVudCkKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJ
bnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5o
CShyZXZpc2lvbiA0NjY3OSkKKysrIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAKLSAgICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQogICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwogICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgpAQCAtMjcsMTggKzI1LDE1IEBACiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1
ZGUgIlRyZWVTaGFyZWQuaCIKIAotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICAvLyBGSVhNRTog
VGhpcyBjbGFzcyBpcyBuZXZlciBpbnN0YW50aWF0ZWQuIFNob3VsZCBpdCBiZSByZW1vdmVkPwor
CiAgICAgbmFtZXNwYWNlIFByaXZhdGUgeyAKICAgICAgICAgdGVtcGxhdGU8Y2xhc3MgR2VuZXJp
Y05vZGUsIGNsYXNzIEdlbmVyaWNOb2RlQ29udGFpbmVyPgogICAgICAgICB2b2lkIGFkZENoaWxk
Tm9kZXNUb0RlbGV0aW9uUXVldWUoR2VuZXJpY05vZGUqJiBoZWFkLCBHZW5lcmljTm9kZSomIHRh
aWwsIEdlbmVyaWNOb2RlQ29udGFpbmVyKiBjb250YWluZXIpOwogICAgIH07CiAKLSAgICBjbGFz
cyBFdmVudExpc3RlbmVyOwotICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIFNWR1VzZUVsZW1l
bnQ7CiAgICAgY2xhc3MgU1ZHRWxlbWVudEluc3RhbmNlTGlzdDsKIApAQCAtNDYsNyArNDEsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgU1ZHRWxlbWVudEluc3RhbmNlIDogcHVi
bGljIFRyZWVTaGFyZWQ8U1ZHRWxlbWVudEluc3RhbmNlPiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdWJsaWMgRXZlbnRUYXJnZXQgewogICAgIHB1YmxpYzoKLSAgICAgICAgU1ZH
RWxlbWVudEluc3RhbmNlKFNWR1VzZUVsZW1lbnQqLCBTVkdFbGVtZW50KiBvcmlnaW5hbEVsZW1l
bnQpOwogICAgICAgICB2aXJ0dWFsIH5TVkdFbGVtZW50SW5zdGFuY2UoKTsKIAogICAgICAgICBi
b29sIG5lZWRzVXBkYXRlKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc1VwZGF0ZTsgfQpAQCAtNTQs
OSArNDgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAKLSAgICAg
ICAgdmlydHVhbCBOb2RlKiB0b05vZGUoKSB7IHJldHVybiBzaGFkb3dUcmVlRWxlbWVudCgpOyB9
Ci0gICAgICAgIHZpcnR1YWwgU1ZHRWxlbWVudEluc3RhbmNlKiB0b1NWR0VsZW1lbnRJbnN0YW5j
ZSgpIHsgcmV0dXJuIHRoaXM7IH0KLQogICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0
ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3Rl
bmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50
TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBi
b29sIHVzZUNhcHR1cmUpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtMTY3LDYgKzE1OCwxMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIFNWR1Vz
ZUVsZW1lbnQ7CiAKKyAgICAgICAgU1ZHRWxlbWVudEluc3RhbmNlKFNWR1VzZUVsZW1lbnQqLCBQ
YXNzUmVmUHRyPFNWR0VsZW1lbnQ+IG9yaWdpbmFsRWxlbWVudCk7CisKKyAgICAgICAgdmlydHVh
bCBOb2RlKiB0b05vZGUoKSB7IHJldHVybiBzaGFkb3dUcmVlRWxlbWVudCgpOyB9CisgICAgICAg
IHZpcnR1YWwgU1ZHRWxlbWVudEluc3RhbmNlKiB0b1NWR0VsZW1lbnRJbnN0YW5jZSgpIHsgcmV0
dXJuIHRoaXM7IH0KKwogICAgICAgICB2b2lkIGFwcGVuZENoaWxkKFBhc3NSZWZQdHI8U1ZHRWxl
bWVudEluc3RhbmNlPiBjaGlsZCk7CiAgICAgICAgIHZvaWQgc2V0U2hhZG93VHJlZUVsZW1lbnQo
U1ZHRWxlbWVudCopOwogICAgICAgICB2b2lkIGZvcmdldFdyYXBwZXIoKTsKQEAgLTE5MSw3ICsx
ODcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWZFdmVu
dFRhcmdldCgpIHsgcmVmKCk7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJn
ZXQoKSB7IGRlcmVmKCk7IH0KIAotICAgIHByaXZhdGU6CiAgICAgICAgIGJvb2wgbV9uZWVkc1Vw
ZGF0ZSA6IDE7CiAKICAgICAgICAgU1ZHVXNlRWxlbWVudCogbV91c2VFbGVtZW50OwpJbmRleDog
V2ViQ29yZS93bWwvV01MRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxE
b2N1bWVudC5oCShyZXZpc2lvbiA0NjY3OSkKKysrIFdlYkNvcmUvd21sL1dNTERvY3VtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgY2xhc3MgV01MRG9jdW1lbnQgOiBwdWJs
aWMgRG9jdW1lbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdNTERvY3VtZW50
PiBjcmVhdGUoRnJhbWUqIGZyYW1lKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXTUxEb2N1
bWVudChmcmFtZSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV01MRG9jdW1lbnQoZnJh
bWUpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5XTUxEb2N1bWVudCgpOwpJbmRleDogV2ViQ29y
ZS94bWwvWFBhdGhOYW1lc3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hQYXRo
TmFtZXNwYWNlLmNwcAkocmV2aXNpb24gNDY2NzkpCisrKyBXZWJDb3JlL3htbC9YUGF0aE5hbWVz
cGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzMsMTggKzMzLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotWFBhdGhOYW1l
c3BhY2U6OlhQYXRoTmFtZXNwYWNlKFBhc3NSZWZQdHI8RWxlbWVudD4gb3duZXJFbGVtZW50LCBj
b25zdCBTdHJpbmcmIHByZWZpeCwgY29uc3QgU3RyaW5nJiB1cmkpCi0gICAgOiBOb2RlKG93bmVy
RWxlbWVudC0+ZG9jdW1lbnQoKSkKK1hQYXRoTmFtZXNwYWNlOjpYUGF0aE5hbWVzcGFjZShQYXNz
UmVmUHRyPEVsZW1lbnQ+IG93bmVyRWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgs
IGNvbnN0IEF0b21pY1N0cmluZyYgdXJpKQorICAgIDogTm9kZShvd25lckVsZW1lbnQtPmRvY3Vt
ZW50KCksIENyZWF0ZU90aGVyKQogICAgICwgbV9vd25lckVsZW1lbnQob3duZXJFbGVtZW50KQog
ICAgICwgbV9wcmVmaXgocHJlZml4KQogICAgICwgbV91cmkodXJpKQogewogfQogCi1YUGF0aE5h
bWVzcGFjZTo6flhQYXRoTmFtZXNwYWNlKCkKLXsKLX0KLQogRG9jdW1lbnQqIFhQYXRoTmFtZXNw
YWNlOjpvd25lckRvY3VtZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9vd25lckVsZW1lbnQt
Pm93bmVyRG9jdW1lbnQoKTsKSW5kZXg6IFdlYkNvcmUveG1sL1hQYXRoTmFtZXNwYWNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFBhdGhOYW1lc3BhY2UuaAkocmV2aXNpb24gNDY2Nzkp
CisrKyBXZWJDb3JlL3htbC9YUGF0aE5hbWVzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDEzICszNCwxMSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBEb2N1bWVudDsKLSAgICBjbGFzcyBFbGVtZW50Owor
ICAgIC8vIEZJWE1FOiBUaGlzIGNsYXNzIGlzIG5ldmVyIGluc3RhbnRpYXRlZC4gTWF5YmUgaXQg
c2hvdWxkIGJlIHJlbW92ZWQuCiAKICAgICBjbGFzcyBYUGF0aE5hbWVzcGFjZSA6IHB1YmxpYyBO
b2RlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFhQYXRoTmFtZXNwYWNlKFBhc3NSZWZQdHI8RWxl
bWVudD4gb3duZXJFbGVtZW50LCBjb25zdCBTdHJpbmcmIHByZWZpeCwgY29uc3QgU3RyaW5nJiB1
cmkpOwotICAgICAgICB2aXJ0dWFsIH5YUGF0aE5hbWVzcGFjZSgpOworICAgIHByaXZhdGU6Cisg
ICAgICAgIFhQYXRoTmFtZXNwYWNlKFBhc3NSZWZQdHI8RWxlbWVudD4gb3duZXJFbGVtZW50LCBj
b25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkpOwogCiAg
ICAgICAgIHZpcnR1YWwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdDsKICAgICAgICAg
dmlydHVhbCBFbGVtZW50KiBvd25lckVsZW1lbnQoKSBjb25zdDsKQEAgLTUwLDkgKzQ4LDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIFN0cmluZyBub2RlVmFsdWUoKSBj
b25zdDsKICAgICAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSgp
IGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgTm9kZTo6Tm9kZVR5cGUgbm9kZVR5cGUoKSBjb25z
dDsKKyAgICAgICAgdmlydHVhbCBOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0OwogCi0gICAgcHJp
dmF0ZToKICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fb3duZXJFbGVtZW50OwogICAgICAgICBB
dG9taWNTdHJpbmcgbV9wcmVmaXg7CiAgICAgICAgIEF0b21pY1N0cmluZyBtX3VyaTsKSW5kZXg6
IFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1s
L1hTTFRQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiA0NjY3OSkKKysrIFdlYkNvcmUveG1sL1hTTFRQ
cm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODUsMTIgKzI4NSwxMiBAQCBQYXNzUmVm
UHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29yOjpjcmVhCiAKIHN0YXRpYyBpbmxpbmUgUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVNvdXJjZShjb25zdCBTdHJpbmcm
IHNvdXJjZVN0cmluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1FVHlwZSwgRG9jdW1lbnQqIG91
dHB1dERvYykKIHsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBuZXcg
RG9jdW1lbnRGcmFnbWVudChvdXRwdXREb2MpOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShvdXRwdXREb2MpOwogICAgIAog
ICAgIGlmIChzb3VyY2VNSU1FVHlwZSA9PSAidGV4dC9odG1sIikKICAgICAgICAgcGFyc2VIVE1M
RG9jdW1lbnRGcmFnbWVudChzb3VyY2VTdHJpbmcsIGZyYWdtZW50LmdldCgpKTsKICAgICBlbHNl
IGlmIChzb3VyY2VNSU1FVHlwZSA9PSAidGV4dC9wbGFpbiIpCi0gICAgICAgIGZyYWdtZW50LT5h
ZGRDaGlsZChuZXcgVGV4dChvdXRwdXREb2MsIHNvdXJjZVN0cmluZykpOworICAgICAgICBmcmFn
bWVudC0+YWRkQ2hpbGQoVGV4dDo6Y3JlYXRlKG91dHB1dERvYywgc291cmNlU3RyaW5nKSk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIGJvb2wgc3VjY2Vzc2Z1bFBhcnNlID0gcGFyc2VYTUxEb2N1bWVu
dEZyYWdtZW50KHNvdXJjZVN0cmluZywgZnJhZ21lbnQuZ2V0KCksIG91dHB1dERvYy0+ZG9jdW1l
bnRFbGVtZW50KCkpOwogICAgICAgICBpZiAoIXN1Y2Nlc3NmdWxQYXJzZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34532</attachid>
            <date>2009-08-10 18:03:11 -0700</date>
            <delta_ts>2009-08-14 23:26:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>DOMRefCountPatch1.txt</filename>
            <type>text/plain</type>
            <size>125183</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzAwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUyIEBACisyMDA5LTA4LTEwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtl
IERPTSBjbGFzc2VzIHN0YXJ0IHdpdGggYSByZWZlcmVuY2UgY291bnQgb2YgMSwgbGlrZSBhbGwg
b3RoZXIgUmVmQ291bnRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjgwNjgKKworICAgICAgICBGaXJzdCBoYWxmLCBldmVyeXRoaW5nIGV4Y2VwdCBm
b3IgZWxlbWVudCBjbGFzc2VzLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IFJlbW92ZWQg
RG9jUHRyLmguCisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0by4KKyAgICAgICAgKiBXZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKworICAgICAgICAqIGRvbS9BdHRyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkF0dHI6OkF0dHIpOiBBZGRlZCBhIGNhbGwgdG8gY3JlYXRlVGV4
dENoaWxkIGhlcmUgc28gY2FsbGVycyBkb24ndAorICAgICAgICBoYXZlIHRvIGNhbGwgaXQgZXhw
bGljaXRseS4KKyAgICAgICAgKFdlYkNvcmU6OkF0dHI6OmNyZWF0ZSk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QXR0cjo6c2V0VmFsdWUpOiBDaGFuZ2VkIHRvIHRha2UgQXRvbWljU3RyaW5n
LgorICAgICAgICAoV2ViQ29yZTo6QXR0cjo6Y2xvbmVOb2RlKTogVXNlIGNyZWF0ZS4KKworICAg
ICAgICAqIGRvbS9BdHRyLmg6IEFkZGVkIGEgY3JlYXRlIGZ1bmN0aW9uLiBNYWRlIHRoZSBjb25z
dHJ1Y3RvciBwcml2YXRlLAorICAgICAgICBhbmQgYSBsb3Qgb2Ygb3RoZXIgZnVuY3Rpb25zIHBy
aXZhdGUgYXMgd2VsbC4KKworICAgICAgICAqIGRvbS9BdHRyaWJ1dGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QXR0cmlidXRlOjpjcmVhdGVBdHRySWZOZWVkZWQpOiBVc2UgQXR0cjo6Y3JlYXRl
LgorCisgICAgICAgICogZG9tL0NEQVRBU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
REFUQVNlY3Rpb246OmNyZWF0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0RBVEFTZWN0
aW9uOjpjbG9uZU5vZGUpOiBVc2UgY3JlYXRlLgorICAgICAgICAoV2ViQ29yZTo6Q0RBVEFTZWN0
aW9uOjp2aXJ0dWFsQ3JlYXRlKTogRGl0dG8uCisKKyAgICAgICAgKiBkb20vQ0RBVEFTZWN0aW9u
Lmg6IEFkZGVkIGEgY3JlYXRlIGZ1bmN0aW9uLiBNYWRlIGV2ZXJ5dGhpbmcgcHJpdmF0ZS4KKyAg
ICAgICAgUmVtb3ZlZCB1bm5lZWRlZCBkZXN0cnVjdG9yIGRlY2xhcmF0aW9uLgorCisgICAgICAg
ICogZG9tL0NoYXJhY3RlckRhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0
YTo6Q2hhcmFjdGVyRGF0YSk6IFJlcGxhY2VkIHRoZSBtdWx0aXBsZSBjb25zdHJ1Y3RvcnMKKyAg
ICAgICAgd2l0aCBhIHNpbmdsZSBvbmUgdGhhdCB0YWtlcyBDb25zdHJ1Y3Rpb25UeXBlLgorCisg
ICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuaDogTWFkZSBtb3JlIGZ1bmN0aW9ucyBiZSBwcm90
ZWN0ZWQgYW5kIHByaXZhdGUuCisgICAgICAgIE1hZGUgbV9kYXRhIGJlIHByaXZhdGUuCisKKyAg
ICAgICAgKiBkb20vQ29tbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21tZW50OjpDb21t
ZW50KTogR290IHJpZCBvZiBhbiBleHRyYSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbW1lbnQ6OmNyZWF0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29tbWVudDo6Y2xv
bmVOb2RlKTogQ2FsbCBjcmVhdGUuCisKKyAgICAgICAgKiBkb20vQ29tbWVudC5oOiBBZGRlZCBh
IGNyZWF0ZSBmdW5jdGlvbi4gTWFkZSBldmVyeXRoaW5nIHByaXZhdGUuCisKKyAgICAgICAgKiBk
b20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkaXNwYXRjaENoaWxkSW5z
ZXJ0aW9uRXZlbnRzKTogVXNlIFJlZlB0ciBpbnN0ZWFkIG9mIERvY1B0ci4KKyAgICAgICAgKFdl
YkNvcmU6OmRpc3BhdGNoQ2hpbGRSZW1vdmFsRXZlbnRzKTogRGl0dG8uCisKKyAgICAgICAgKiBk
b20vQ29udGFpbmVyTm9kZS5oOiBNYWRlIHRoZSBjb25zdHJ1Y3RvciBwcm90ZWN0ZWQgYW5kIHBh
c3NlZAorICAgICAgICBDb25zdHJ1Y3Rpb25UeXBlIGluc3RlYWQgb2YgYW4gaXNFbGVtZW50IGJv
b2xlYW4uCisKKyAgICAgICAgKiBkb20vRG9jUHRyLmg6IFJlbW92ZWQuCisKKyAgICAgICAgKiBk
b20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KTog
U2ltcGxpZmllZCB0aGUgY29kZSB0aGF0IHNldHMgbV9kb2N1bWVudAorICAgICAgICBzaW5jZSBp
dCdzIG5vIGxvbmdlciBhIHNtYXJ0IHBvaW50ZXIuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6cmVtb3ZlZExhc3RSZWYpOiBVc2UgZXhwbGljaXQgY2FsbHMgdG8gc2VsZk9ubHlSZWYKKyAg
ICAgICAgYW5kIHNlbGZPbmx5RGVyZWYgaW5zdGVhZCBvZiBhIERvY1B0ciBpbiBoZXJlLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6On5Eb2N1bWVudCk6IFNpbXBsaWZpZWQgdGhlIGNvZGUg
dGhhdCBzZXRzIG1fZG9jdW1lbnQKKyAgICAgICAgc2luY2UgaXQncyBubyBsb25nZXIgYSBzbWFy
dCBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNyZWF0ZURvY3VtZW50RnJh
Z21lbnQpOiBDYWxsIGNyZWF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjcmVhdGVU
ZXh0Tm9kZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNyZWF0ZUNvbW1l
bnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjcmVhdGVDREFUQVNlY3Rp
b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjcmVhdGVQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjcmVhdGVF
bnRpdHlSZWZlcmVuY2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjcmVh
dGVFZGl0aW5nVGV4dE5vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpp
bXBvcnROb2RlKTogQ2FsbCBBdHRyOjpjcmVhdGUuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6Y3JlYXRlQXR0cmlidXRlTlMpOiBEaXR0by4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5o
OiBDYWxsIGFkb3B0UmVmLiBNYWRlIGEgbG90IG9mIGZ1bmN0aW9ucyBwcml2YXRlIGFuZAorICAg
ICAgICBwcm90ZWN0ZWQgYW5kIHNvcnRlZCB0aGVtIHNvIHB1YmxpYyBmdW5jdGlvbnMgY29tZSBm
aXJzdC4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudEZyYWdtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRGcmFnbWVudDo6Y2xvbmVOb2RlKTogQ2FsbCBjcmVhdGUuCisgICAgICAgICog
ZG9tL0RvY3VtZW50RnJhZ21lbnQuaDogQWRkZWQgY3JlYXRlLgorCisgICAgICAgICogZG9tL0Rv
Y3VtZW50VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFR5cGU6OkRvY3VtZW50
VHlwZSk6IFBhc3MgdHlwZSB0byBOb2RlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRUeXBlOjpjbG9uZU5vZGUpOiBVc2UgY3JlYXRlLgorICAgICAgICAqIGRvbS9Eb2N1
bWVudFR5cGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VHlwZTo6Y3JlYXRlKTogQ2Fs
bCBhZG9wdFJlZi4KKworICAgICAgICAqIGRvbS9FZGl0aW5nVGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0aW5nVGV4dDo6Y3JlYXRlKTogQWRkZWQuCisgICAgICAgICogZG9tL0VkaXRp
bmdUZXh0Lmg6IEFkZGVkIGEgY3JlYXRlIGZ1bmN0aW9uLiBNYWRlIGV2ZXJ5dGhpbmcgcHJpdmF0
ZS4KKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OkVsZW1lbnQpOiBQYXNzIENyZWF0ZUVsZW1lbnRaZXJvUmVmQ291bnQgdG8gcHJlc2VydmUK
KyAgICAgICAgdGhlIHplcm8gcmVmZXJlbmNlIGNvdW50IGJlaGF2aW9yIGZvciBjbGFzc2VzIGRl
cml2ZWQgZnJvbSBFbGVtZW50LgorCisgICAgICAgICogZG9tL0VudGl0eVJlZmVyZW5jZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFbnRpdHlSZWZlcmVuY2U6OmNyZWF0ZSk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RW50aXR5UmVmZXJlbmNlOjpjbG9uZU5vZGUpOiBDYWxsIGNyZWF0ZS4K
KyAgICAgICAgKiBkb20vRW50aXR5UmVmZXJlbmNlLmg6IEFkZGVkIGNyZWF0ZS4gTWFkZSBldmVy
eXRoaW5nIHByaXZhdGUuCisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjppbml0aWFsUmVmQ291bnQpOiBBZGRlZC4gSW5saW5lIGhlbHBlciBmdW5jdGlv
biBmb3IKKyAgICAgICAgdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
aXNDb250YWluZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzRWxlbWVudCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNUZXh0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjpOb2RlKTogQ2hhbmdlZCB0byB0YWtlIGEgY29uc3RydWN0aW9uIHR5
cGUgYXJndW1lbnQuCisgICAgICAgIFNpbmNlIG1fZG9jdW1lbnQgaXMgbm93IGEgbm9ybWFsIHBv
aW50ZXIsIGFkZGVkIGEgY2FsbCB0byBzZWxmT25seVJlZi4KKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6On5Ob2RlKTogRGl0dG8sIGJ1dCBzZWxmT25seURlcmVmLgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6c2V0RG9jdW1lbnQpOiBBZGRlZCBzZWxmT25seVJlZi9EZXJlZiBjYWxscy4KKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGU6OmFwcGVuZFRleHRDb250ZW50KTogVXNlIHRoZSBkYXRhIGZ1bmN0
aW9uIGluc3RlYWQgb2YKKyAgICAgICAgY2FsbGluZyBub2RlVmFsdWUgZnVuY3Rpb25zLCB3aGlj
aCBkbyB0aGUgc2FtZSB0aGluZyBpbiBhIHJvdW5kYWJvdXQgd2F5LgorCisgICAgICAgICogZG9t
L05vZGUuaDogTWFkZSB0aGUgY29uc3RydWN0b3IgcHJvdGVjdGVkIGFuZCByZXBsYWNlZCB0aGUg
bXVsdGlwbGUKKyAgICAgICAgYXJndW1lbnRzIGl3dGggYSBzaW5nbGUgQ29uc3RydWN0aW9uVHlw
ZSBhcmd1bWVudC4gU29ydGVkIHRoZSBwdWJsaWMKKyAgICAgICAgdGhpbmdzIGZpcnN0LgorCisg
ICAgICAgICogZG9tL05vdGF0aW9uLmg6IE1hZGUgbW9zdCB0aGluZ3MgcHJpdmF0ZS4KKyAgICAg
ICAgKiBkb20vTm90YXRpb24uY3BwOiBSZW1vdmVkIGV4dHJhIGNvbnN0cnVjdG9yLgorCisgICAg
ICAgICogZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNyZWF0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjbG9uZU5vZGUpOiBDYWxsIGNyZWF0ZS4KKyAgICAgICAg
KiBkb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmg6IEFkZGVkIGNyZWF0ZSBmdW5jdGlvbi4gTWFk
ZSBtYW55IG90aGVyCisgICAgICAgIG1lbWJlcnMgcHJpdmF0ZS4KKworICAgICAgICAqIGRvbS9S
YW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6cHJvY2Vzc0NvbnRlbnRzKTogVXNl
IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZS4KKworICAgICAgICAqIGRvbS9UZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHQ6OlRleHQpOiBVcGRhdGVkIGZvciBiYXNlIGNsYXNzIGNoYW5n
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHQ6OmNyZWF0ZSk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dDo6c3BsaXRUZXh0KTogQ2hhbmdlZCB0byBub3QgcmVxdWlyZSBhY2Nlc3MgdG8g
bV9kYXRhLgorICAgICAgICAoV2ViQ29yZTo6VGV4dDo6Y2xvbmVOb2RlKTogQ2FsbCBjcmVhdGUu
CisgICAgICAgIChXZWJDb3JlOjpUZXh0OjpjcmVhdGVSZW5kZXJlcik6IENhbGwgZGF0YUltcGwu
CisgICAgICAgIChXZWJDb3JlOjpUZXh0OjphdHRhY2gpOiBDYWxsIGRhdGEuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0OjpyZWNhbGNTdHlsZSk6IENhbGwgZGF0YUltcGwuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0Ojp2aXJ0dWFsQ3JlYXRlKTogQ2FsbCBjcmVhdGUuCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0OjpjcmVhdGVXaXRoTGVuZ3RoTGltaXQpOiBDYWxsIGNyZWF0ZS4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHQ6OmZvcm1hdEZvckRlYnVnZ2VyKTogQ2FsbCBkYXRhLgorCisgICAgICAgICog
ZG9tL1RleHQuaDogQWRkZWQgYSBjcmVhdGUgZnVuY3Rpb24uIE1hZGUgbWFueSBvdGhlciBtZW1i
ZXJzIHByaXZhdGUuCisgICAgICAgIFJlbmFtZWQgY3JlYXRlTmV3IHRvIHZpcnR1YWxDcmVhdGUu
CisKKyAgICAgICAgKiBkb20vWE1MVG9rZW5pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhN
TFRva2VuaXplcjo6ZW50ZXJUZXh0KTogQ2FsbCBUZXh0OjpjcmVhdGUuCisKKyAgICAgICAgKiBk
b20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6
ZXI6OmNkYXRhQmxvY2spOiBDYWxsIENEQVRBU2VjdGlvbjo6Y3JlYXRlLgorICAgICAgICAoV2Vi
Q29yZTo6WE1MVG9rZW5pemVyOjpjb21tZW50KTogQ2FsbCBDb21tZW50OjpjcmVhdGUuCisKKyAg
ICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNpZ25pZmljYW50VGV4dCk6CisgICAg
ICAgIENhbGwgZGF0YSBpbnN0ZWFkIG9mIHN0cmluZy4KKworICAgICAgICAqIGVkaXRpbmcvQ3Jl
YXRlTGlua0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3JlYXRlTGlua0NvbW1hbmQ6
OmRvQXBwbHkpOiBDYWxsIFRleHQ6OmNyZWF0ZS4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9y
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlSW5zZXJ0Tm9kZSk6IENhbGwg
RG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlLgorCisgICAgICAgICogZWRpdGluZy9TcGxpdFRleHRO
b2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdFRleHROb2RlQ29tbWFuZDo6
ZG9BcHBseSk6IENhbGwgVGV4dDo6Y3JlYXRlLgorCisgICAgICAgICogZWRpdGluZy9tYXJrdXAu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kU3RhcnRNYXJrdXApOiBDYWxsIGRhdGEgaW5z
dGVhZCBvZiBub2RlVmFsdWUuCisKKyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5oOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50OjpjcmVhdGUpOiBDYWxsIGFkb3B0UmVmLgorCisg
ICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxl
bWVudDo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KTogQ2FsbCBEb2N1bWVudEZyYWdtZW50Ojpj
cmVhdGUuCisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQpOiBD
YWxsIGRhdGEgaW5zdGVhZCBvZiBzdHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlQ2hp
bGRyZW5XaXRoVGV4dCk6IENhbGwgVGV4dDo6Y3JlYXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEVsZW1lbnQ6OnNldElubmVyVGV4dCk6IENhbGwgRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlIGFu
ZAorICAgICAgICBUZXh0OjpjcmVhdGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6
c2V0T3V0ZXJUZXh0KTogQ2FsbCBUZXh0OjpjcmVhdGUuCisKKyAgICAgICAgKiBodG1sL0hUTUxL
ZXlnZW5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50OjpI
VE1MS2V5Z2VuRWxlbWVudCk6IENhbGwgVGV4dDo6Y3JlYXRlLgorCisgICAgICAgICogaHRtbC9I
VE1MT3B0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVu
dDo6c2V0VGV4dCk6IENhbGwgVGV4dDo6Y3JlYXRlLgorCisgICAgICAgICogaHRtbC9IVE1MUGFy
c2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OnRleHRDcmVhdGVFcnJvckNo
ZWNrKTogQ2FsbCBUZXh0OjpjcmVhdGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjpj
b21tZW50Q3JlYXRlRXJyb3JDaGVjayk6IENhbGwgQ29tbWVudDo6Y3JlYXRlLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFBhcnNlcjo6aGFuZGxlSXNpbmRleCk6IENhbGwgVGV4dDo6Y3JlYXRlLgor
CisgICAgICAgICogaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmFkZFRleHQpOiBDYWxsIFRleHQ6OmNyZWF0
ZS4KKworICAgICAgICAqIGh0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6Y3JlYXRlKTogQ2FsbCBhZG9wdFJlZi4K
KworICAgICAgICAqIGxvYWRlci9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGVFBEaXJlY3RvcnlUb2tlbml6ZXI6OmFwcGVuZEVudHJ5KTogQ2FsbCBUZXh0Ojpj
cmVhdGUuCisgICAgICAgIChXZWJDb3JlOjpGVFBEaXJlY3RvcnlUb2tlbml6ZXI6OmNyZWF0ZVRE
Rm9yRmlsZW5hbWUpOiBDYWxsIFRleHQ6OmNyZWF0ZS4KKworICAgICAgICAqIGxvYWRlci9GVFBE
aXJlY3RvcnlEb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RlRQRGlyZWN0b3J5RG9jdW1l
bnQ6OmNyZWF0ZSk6IENhbGwgYWRvcHRSZWYuCisgICAgICAgICogbG9hZGVyL0ltYWdlRG9jdW1l
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRG9jdW1lbnQ6OmNyZWF0ZSk6IERpdHRvLgor
ICAgICAgICAqIGxvYWRlci9NZWRpYURvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YURvY3VtZW50OjpjcmVhdGUpOiBEaXR0by4KKyAgICAgICAgKiBsb2FkZXIvUGxhY2Vob2xkZXJE
b2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhY2Vob2xkZXJEb2N1bWVudDo6Y3JlYXRl
KTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL1BsdWdpbkRvY3VtZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5Eb2N1bWVudDo6Y3JlYXRlKTogRGl0dG8uCisgICAgICAgICogbG9hZGVy
L1RleHREb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dERvY3VtZW50OjpjcmVhdGUp
OiBEaXR0by4KKworICAgICAgICAqIGxvYWRlci9sb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TG9hZGVyOjpIb3N0OjpkaWRGaW5pc2hMb2FkaW5nKTogVXNlIFJlZlB0ciBpbnN0ZWFkIG9m
IERvY1B0ci4KKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlcjo6SG9zdDo6ZGlkRmFpbCk6IERpdHRv
LgorCisgICAgICAgICogcGxhdGZvcm0vVHJlZVNoYXJlZC5oOgorICAgICAgICAoV2ViQ29yZTo6
VHJlZVNoYXJlZDo6VHJlZVNoYXJlZCk6IEFkZGVkIGFuIGluaXRpYWxSZWZDb3VudCBhcmd1bWVu
dCwKKyAgICAgICAgZGVmYXVsdGluZyB0byAxLiBOb2RlIHN0aWxsIHNvbWV0aW1lcyBpbml0aWFs
aXplcyBpdCB0byAwIGluc3RlYWQgZm9yIG5vdy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6Om9yaWdpbmFsVGV4dCk6
IFVzZSBkYXRhSW1wbCBpbnN0ZWFkIG9mIHN0cmluZy4KKworICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUZXh0RnJhZ21lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dEZyYWdt
ZW50OjpvcmlnaW5hbFRleHQpOiBVc2UgZGF0YUltcGwgaW5zdGVhZCBvZiBzdHJpbmcuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0RnJhZ21lbnQ6OnByZXZpb3VzQ2hhcmFjdGVyKTogRGl0
dG8uCisKKyAgICAgICAgKiBzdmcvU1ZHRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0RvY3VtZW50OjpjcmVhdGUpOiBVc2UgYWRvcHRSZWYuCisKKyAgICAgICAgKiBzdmcvU1ZHRWxl
bWVudEluc3RhbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRJbnN0YW5jZTo6
U1ZHRWxlbWVudEluc3RhbmNlKTogVXBkYXRlZCB0byB0YWtlIGEKKyAgICAgICAgUGFzc1JlZlB0
ci4KKworICAgICAgICAqIHN2Zy9TVkdFbGVtZW50SW5zdGFuY2UuaDogTWFkZSBldmVyeXRoaW5n
IHByaXZhdGUuCisKKyAgICAgICAgKiB3bWwvV01MRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OldNTERvY3VtZW50OjpjcmVhdGUpOiBDYWxsZWQgYWRvcHRSZWYuCisKKyAgICAgICAgKiB4
bWwvWFBhdGhOYW1lc3BhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhOYW1lc3BhY2U6
OlhQYXRoTmFtZXNwYWNlKTogVGFrZSBBdG9taWNTdHJpbmcgYXJndW1lbnRzLgorICAgICAgICAq
IHhtbC9YUGF0aE5hbWVzcGFjZS5oOiBNYWRlIGV2ZXJ5dGhpbmcgcHJpdmF0ZS4KKworICAgICAg
ICAqIHhtbC9YU0xUUHJvY2Vzc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZyYWdt
ZW50RnJvbVNvdXJjZSk6IFVzZSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUgYW5kCisgICAgICAg
IFRleHQ6OmNyZWF0ZS4KKwogMjAwOS0wOC0xMCAgSmVyZW15IE9ybG93ICA8am9ybG93QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0J
KHJldmlzaW9uIDQ2OTk4KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5
KQpAQCAtNjU0LDcgKzY1NCw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9kb20v
RE9NQ29yZUV4Y2VwdGlvbi5oIFwKIAlXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAg
XAogCVdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmggXAotCVdlYkNvcmUvZG9tL0RvY1B0
ci5oIFwKIAlXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgXAogCVdlYkNvcmUvZG9tL0RvY3VtZW50
LmggXAogCVdlYkNvcmUvZG9tL0RvY3VtZW50RnJhZ21lbnQuY3BwIFwKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lv
biA0Njk5OCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC05NDcs
NyArOTQ3LDYgQEAKICAgICAgICAgICAgICdkb20vRE9NQ29yZUV4Y2VwdGlvbi5oJywKICAgICAg
ICAgICAgICdkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwJywKICAgICAgICAgICAgICdkb20vRE9N
SW1wbGVtZW50YXRpb24uaCcsCi0gICAgICAgICAgICAnZG9tL0RvY1B0ci5oJywKICAgICAgICAg
ICAgICdkb20vRG9jdW1lbnQuY3BwJywKICAgICAgICAgICAgICdkb20vRG9jdW1lbnQuaCcsCiAg
ICAgICAgICAgICAnZG9tL0RvY3VtZW50RnJhZ21lbnQuY3BwJywKSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNDY5OTgpCisrKyBXZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYzMiwxMCArMjM2
MzIsNiBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxkb21cRG9jUHRyLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCiAJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxkb21cRG9jdW1lbnQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0K
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA0Njk5OCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTM2LDcgKzIxMzYsNiBAQAogCQk5M0VCMTY5NTA5Rjg4MEIwMDA5
MUY4RkYgLyogV2ViQ29yZVN5c3RlbUludGVyZmFjZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRUIxNjk0MDlGODgwQjAwMDkxRjhGRiAvKiBXZWJD
b3JlU3lzdGVtSW50ZXJmYWNlLm1tICovOyB9OwogCQk5M0VCMTY5NzA5Rjg4MEMwMDA5MUY4RkYg
LyogV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTNFQjE2OTYwOUY4ODBDMDAwOTFGOEZGIC8qIFdlYkNvcmVTeXN0
ZW1JbnRlcmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk5M0VCMzU1RjA5RTM3RkQ2MDBGNDM3OTkgLyogTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0VCMzU1RTA5RTM3RkQ2MDBGNDM3OTkgLyogTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0
cy5jcHAgKi87IH07Ci0JCTkzRUVDMUZBMDlDMjg3NzcwMEM1MTVEMSAvKiBEb2NQdHIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRUVDMUU3MDlDMjg3
NzcwMEM1MTVEMSAvKiBEb2NQdHIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTERvY3VtZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIz
QzAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTERvY3VtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk4RTYwODI0NUU1OTAwMUU5QUJDIC8q
IEhUTUxFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNTIzRDIzRjAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOThFRjA4MjQ1RTU5
MDAxRTlBQkMgLyogSFRNTFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjUyM0QyNTEwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxQYXJzZXIuaCAq
LzsgfTsKQEAgLTcxNTYsNyArNzE1NSw2IEBACiAJCTkzRUIzNTVFMDlFMzdGRDYwMEY0Mzc5OSAv
KiBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5M0VFQzFFNTA5QzI4Nzc3MDBDNTE1RDEgLyogQXR0ci5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQXR0ci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzRUVDMUU2MDlDMjg3NzcwMEM1MTVEMSAvKiBDaGFyYWN0ZXJEYXRhLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBDaGFyYWN0ZXJEYXRhLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJOTNFRUMxRTcwOUMyODc3NzAwQzUxNUQxIC8qIERvY1B0ci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEb2NQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTNFRUMxRTgwOUMyODc3NzAwQzUxNUQxIC8qIERvY3VtZW50VHlwZS5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRG9jdW1lbnRUeXBlLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTNFRUMxRTkwOUMyODc3NzAwQzUxNUQxIC8qIERPTUltcGxlbWVudGF0
aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBET01JbXBsZW1lbnRhdGlvbi5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRUVDMUVBMDlDMjg3NzcwMEM1MTVEMSAvKiBF
bGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFbGVtZW50LmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NzAyLDcgKzE0NzAwLDYgQEAKIAkJCQlBODE4NzIxMTA5
NzdEM0MwMDA1ODI2RDkgLyogQ29udGFpbmVyTm9kZS5oICovLAogCQkJCUE4QzRBN0Y4MDlENTYz
MjcwMDAzQUM4RCAvKiBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbi5jcHAgKi8sCiAJCQkJ
QThDNEE3RjcwOUQ1NjMyNzAwMDNBQzhEIC8qIENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9u
LmggKi8sCi0JCQkJOTNFRUMxRTcwOUMyODc3NzAwQzUxNUQxIC8qIERvY1B0ci5oICovLAogCQkJ
CUE4MTg1RjM0MDk3NjU3NjUwMDU4MjZEOSAvKiBEb2N1bWVudC5jcHAgKi8sCiAJCQkJQTgxODVG
MzgwOTc2NTc2NTAwNTgyNkQ5IC8qIERvY3VtZW50LmggKi8sCiAJCQkJNjU0OEUyNDgwOUUxRTA0
RDAwQUY4MDIwIC8qIERvY3VtZW50LmlkbCAqLywKQEAgLTE1MTAzLDcgKzE1MTAwLDYgQEAKIAkJ
CQk5M0YxOTk2RDA4MjQ1RTU5MDAxRTlBQkMgLyogRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMkYzNEZFNjBFODJGODE0MDBGNjI3Q0QgLyogRE5TLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQ0IxNkMyQTA5NzlDM0JEMDA0Njc3NDEgLyogRG9jTG9hZGVyLmggaW4g
SGVhZGVycyAqLywKLQkJCQk5M0VFQzFGQTA5QzI4Nzc3MDBDNTE1RDEgLyogRG9jUHRyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBODE4NUY0MDA5NzY1NzY2MDA1ODI2RDkgLyogRG9jdW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4MTg1RjNEMDk3NjU3NjYwMDU4MjZEOSAvKiBEb2N1bWVudEZy
YWdtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTZEMzczNjBBREJBNURFMDBBNDU1NEQgLyog
RG9jdW1lbnRMb2FkZXIuaCBpbiBIZWFkZXJzICovLApJbmRleDogV2ViQ29yZS9kb20vQXR0ci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQXR0ci5jcHAJKHJldmlzaW9uIDQ2OTk4KQor
KysgV2ViQ29yZS9kb20vQXR0ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAg
KiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqICAgICAg
ICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMCwxMCAr
MzAsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1BdHRyOjpBdHRyKEVsZW1lbnQqIGVs
ZW1lbnQsIERvY3VtZW50KiBkb2NQdHIsIFBhc3NSZWZQdHI8QXR0cmlidXRlPiBhKQotICAgIDog
Q29udGFpbmVyTm9kZShkb2NQdHIpCitpbmxpbmUgQXR0cjo6QXR0cihFbGVtZW50KiBlbGVtZW50
LCBEb2N1bWVudCogZG9jdW1lbnQsIFBhc3NSZWZQdHI8QXR0cmlidXRlPiBhdHRyaWJ1dGUpCisg
ICAgOiBDb250YWluZXJOb2RlKGRvY3VtZW50KQogICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCi0g
ICAgLCBtX2F0dHJpYnV0ZShhKQorICAgICwgbV9hdHRyaWJ1dGUoYXR0cmlidXRlKQogICAgICwg
bV9pZ25vcmVDaGlsZHJlbkNoYW5nZWQoMCkKICAgICAsIG1fc3BlY2lmaWVkKHRydWUpICAKIHsK
QEAgLTQxLDYgKzQxLDEzIEBAIEF0dHI6OkF0dHIoRWxlbWVudCogZWxlbWVudCwgRG9jdW1lbnQq
IGQKICAgICBtX2F0dHJpYnV0ZS0+bV9pbXBsID0gdGhpczsKIH0KIAorUGFzc1JlZlB0cjxBdHRy
PiBBdHRyOjpjcmVhdGUoRWxlbWVudCogZWxlbWVudCwgRG9jdW1lbnQqIGRvY3VtZW50LCBQYXNz
UmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlKQoreworICAgIFJlZlB0cjxBdHRyPiBhdHRyID0g
YWRvcHRSZWYobmV3IEF0dHIoZWxlbWVudCwgZG9jdW1lbnQsIGF0dHJpYnV0ZSkpOworICAgIGF0
dHItPmNyZWF0ZVRleHRDaGlsZCgpOworICAgIHJldHVybiBhdHRyLnJlbGVhc2UoKTsKK30KKwog
QXR0cjo6fkF0dHIoKQogewogICAgIEFTU0VSVChtX2F0dHJpYnV0ZS0+YXR0cigpID09IHRoaXMp
OwpAQCAtODYsMTQgKzkzLDE0IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgQXR0cjo6cHJlZml4KCkg
Y29uc3QKICAgICByZXR1cm4gbV9hdHRyaWJ1dGUtPnByZWZpeCgpOwogfQogCi12b2lkIEF0dHI6
OnNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9wcmVmaXgsIEV4Y2VwdGlvbkNvZGUmIGVj
KQordm9pZCBBdHRyOjpzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKLSAgICBjaGVja1NldFByZWZpeChfcHJlZml4
LCBlYyk7CisgICAgY2hlY2tTZXRQcmVmaXgocHJlZml4LCBlYyk7CiAgICAgaWYgKGVjKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX2F0dHJpYnV0ZS0+c2V0UHJlZml4KF9wcmVmaXgpOworICAg
IG1fYXR0cmlidXRlLT5zZXRQcmVmaXgocHJlZml4KTsKIH0KIAogU3RyaW5nIEF0dHI6Om5vZGVW
YWx1ZSgpIGNvbnN0CkBAIC0xMDEsMTEgKzEwOCwxMSBAQCBTdHJpbmcgQXR0cjo6bm9kZVZhbHVl
KCkgY29uc3QKICAgICByZXR1cm4gdmFsdWUoKTsKIH0KIAotdm9pZCBBdHRyOjpzZXRWYWx1ZShj
b25zdCBTdHJpbmcmIHYsIEV4Y2VwdGlvbkNvZGUmKQordm9pZCBBdHRyOjpzZXRWYWx1ZShjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJikKIHsKICAgICBtX2lnbm9yZUNo
aWxkcmVuQ2hhbmdlZCsrOwogICAgIHJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgbV9hdHRyaWJ1dGUt
PnNldFZhbHVlKHYuaW1wbCgpKTsKKyAgICBtX2F0dHJpYnV0ZS0+c2V0VmFsdWUodmFsdWUpOwog
ICAgIGNyZWF0ZVRleHRDaGlsZCgpOwogICAgIG1faWdub3JlQ2hpbGRyZW5DaGFuZ2VkLS07CiAK
QEAgLTEyMCw3ICsxMjcsNyBAQCB2b2lkIEF0dHI6OnNldE5vZGVWYWx1ZShjb25zdCBTdHJpbmcm
IHYsCiAKIFBhc3NSZWZQdHI8Tm9kZT4gQXR0cjo6Y2xvbmVOb2RlKGJvb2wgLypkZWVwKi8pCiB7
Ci0gICAgUmVmUHRyPEF0dHI+IGNsb25lID0gbmV3IEF0dHIoMCwgZG9jdW1lbnQoKSwgbV9hdHRy
aWJ1dGUtPmNsb25lKCkpOworICAgIFJlZlB0cjxBdHRyPiBjbG9uZSA9IGFkb3B0UmVmKG5ldyBB
dHRyKDAsIGRvY3VtZW50KCksIG1fYXR0cmlidXRlLT5jbG9uZSgpKSk7CiAgICAgY2xvbmVDaGls
ZE5vZGVzKGNsb25lLmdldCgpKTsKICAgICByZXR1cm4gY2xvbmUucmVsZWFzZSgpOwogfQpJbmRl
eDogV2ViQ29yZS9kb20vQXR0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0F0dHIuaAko
cmV2aXNpb24gNDY5OTgpCisrKyBXZWJDb3JlL2RvbS9BdHRyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZp
c3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0
LmNvbSkKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9y
ZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zOSw0OCArMzksNDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgQXR0ciA6IHB1YmxpYyBDb250YWluZXJOb2RlIHsKICAgICBmcmll
bmQgY2xhc3MgTmFtZWROb2RlTWFwOwogcHVibGljOgotICAgIEF0dHIoRWxlbWVudCosIERvY3Vt
ZW50KiwgUGFzc1JlZlB0cjxBdHRyaWJ1dGU+KTsKLSAgICB+QXR0cigpOworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEF0dHI+IGNyZWF0ZShFbGVtZW50KiwgRG9jdW1lbnQqLCBQYXNzUmVmUHRyPEF0
dHJpYnV0ZT4pOworICAgIHZpcnR1YWwgfkF0dHIoKTsKIAotICAgIC8vIENhbGwgdGhpcyBhZnRl
ciBjYWxsaW5nIHRoZSBjb25zdHJ1Y3RvciBzbyB0aGUKLSAgICAvLyBBdHRyIG5vZGUgaXNuJ3Qg
ZmxvYXRpbmcgd2hlbiB3ZSBhcHBlbmQgdGhlIHRleHQgbm9kZS4KLSAgICB2b2lkIGNyZWF0ZVRl
eHRDaGlsZCgpOwotICAgIAotICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3IgQXR0
cgogICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gcXVhbGlmaWVkTmFtZSgpLnRvU3Ry
aW5nKCk7IH0KICAgICBib29sIHNwZWNpZmllZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWVk
OyB9CiAgICAgRWxlbWVudCogb3duZXJFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50
OyB9CiAKLSAgICBTdHJpbmcgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZS0+dmFs
dWUoKTsgfQotICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJp
YnV0ZS0+dmFsdWUoKTsgfQorICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiwg
RXhjZXB0aW9uQ29kZSYpOworCisgICAgQXR0cmlidXRlKiBhdHRyKCkgY29uc3QgeyByZXR1cm4g
bV9hdHRyaWJ1dGUuZ2V0KCk7IH0KKyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBxdWFsaWZpZWRO
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGUtPm5hbWUoKTsgfQorCisgICAgLy8gQW4g
ZXh0ZW5zaW9uIHRvIGdldCBwcmVzZW50YXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgYXR0cmlidXRl
cy4KKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIHsgcmV0dXJuIG1fYXR0cmlidXRl
LT5zdHlsZSgpOyB9CisKKyAgICB2b2lkIHNldFNwZWNpZmllZChib29sIHNwZWNpZmllZCkgeyBt
X3NwZWNpZmllZCA9IHNwZWNpZmllZDsgfQorCitwcml2YXRlOgorICAgIEF0dHIoRWxlbWVudCos
IERvY3VtZW50KiwgUGFzc1JlZlB0cjxBdHRyaWJ1dGU+KTsKKworICAgIHZvaWQgY3JlYXRlVGV4
dENoaWxkKCk7CiAKLSAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZyb20gcGFyZW50IGNs
YXNzZXMKICAgICB2aXJ0dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Tm9kZVR5cGUgbm9kZVR5cGUoKSBjb25zdDsKKwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9j
YWxOYW1lKCkgY29uc3Q7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkoKSBj
b25zdDsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCgpIGNvbnN0OworCiAgICAgdmly
dHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7
CiAKICAgICB2aXJ0dWFsIFN0cmluZyBub2RlVmFsdWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0Tm9kZVZhbHVlKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Tm9kZT4gY2xvbmVOb2RlKGJvb2wgZGVlcCk7CiAKLSAgICAvLyBPdGhl
ciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCiAgICAgdmlydHVhbCBib29sIGlzQXR0cmlidXRl
Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBl
QWxsb3dlZChOb2RlVHlwZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJv
b2wgY2hhbmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUq
IGFmdGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0YSA9IDApOwogCi0gICAgQXR0cmli
dXRlKiBhdHRyKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGUuZ2V0KCk7IH0KLSAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiBxdWFsaWZpZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGUtPm5hbWUoKTsgfQotCi0gICAgLy8gQW4gZXh0ZW5zaW9uIHRvIGdldCBwcmVzZW50YXRpb25h
bCBpbmZvcm1hdGlvbiBmb3IgYXR0cmlidXRlcy4KLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSgpIHsgcmV0dXJuIG1fYXR0cmlidXRlLT5zdHlsZSgpOyB9Ci0KLSAgICB2b2lkIHNldFNw
ZWNpZmllZChib29sIHNwZWNpZmllZCkgeyBtX3NwZWNpZmllZCA9IHNwZWNpZmllZDsgfQotCi1w
cml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiB2aXJ0dWFsUHJlZml4KCkg
Y29uc3QgeyByZXR1cm4gcHJlZml4KCk7IH0KICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmlydHVhbExvY2FsTmFtZSgpIGNvbnN0IHsgcmV0dXJuIGxvY2FsTmFtZSgpOyB9CiAgICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHZpcnR1YWxOYW1lc3BhY2VVUkkoKSBjb25zdCB7
IHJldHVybiBuYW1lc3BhY2VVUkkoKTsgfQpJbmRleDogV2ViQ29yZS9kb20vQXR0cmlidXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9BdHRyaWJ1dGUuY3BwCShyZXZpc2lvbiA0Njk5
OCkKKysrIFdlYkNvcmUvZG9tL0F0dHJpYnV0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEw
ICszNyw4IEBAIFBhc3NSZWZQdHI8QXR0cmlidXRlPiBBdHRyaWJ1dGU6OmNsb25lKCkKIFBhc3NS
ZWZQdHI8QXR0cj4gQXR0cmlidXRlOjpjcmVhdGVBdHRySWZOZWVkZWQoRWxlbWVudCogZSkKIHsK
ICAgICBSZWZQdHI8QXR0cj4gciA9IG1faW1wbDsKLSAgICBpZiAoIXIpIHsKLSAgICAgICAgciA9
IG5ldyBBdHRyKGUsIGUtPmRvY3VtZW50KCksIHRoaXMpOwotICAgICAgICByLT5jcmVhdGVUZXh0
Q2hpbGQoKTsKLSAgICB9CisgICAgaWYgKCFyKQorICAgICAgICByID0gQXR0cjo6Y3JlYXRlKGUs
IGUtPmRvY3VtZW50KCksIHRoaXMpOwogICAgIHJldHVybiByLnJlbGVhc2UoKTsKIH0KIApJbmRl
eDogV2ViQ29yZS9kb20vQ0RBVEFTZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9DREFUQVNlY3Rpb24uY3BwCShyZXZpc2lvbiA0Njk5OCkKKysrIFdlYkNvcmUvZG9tL0NEQVRB
U2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsMTMgKzI2LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotQ0RBVEFTZWN0aW9uOjpDREFUQVNlY3Rpb24oRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBTdHJpbmcmIHRleHQpCi0gICAgOiBUZXh0KGRvY3VtZW50LCB0ZXh0KQoraW5saW5lIENEQVRB
U2VjdGlvbjo6Q0RBVEFTZWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBk
YXRhKQorICAgIDogVGV4dChkb2N1bWVudCwgZGF0YSkKIHsKIH0KIAotQ0RBVEFTZWN0aW9uOjp+
Q0RBVEFTZWN0aW9uKCkKK1Bhc3NSZWZQdHI8Q0RBVEFTZWN0aW9uPiBDREFUQVNlY3Rpb246OmNy
ZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgZGF0YSkKIHsKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENEQVRBU2VjdGlvbihkb2N1bWVudCwgZGF0YSkpOwogfQogCiBTdHJp
bmcgQ0RBVEFTZWN0aW9uOjpub2RlTmFtZSgpIGNvbnN0CkBAIC00NywxOSArNDgsMTcgQEAgTm9k
ZTo6Tm9kZVR5cGUgQ0RBVEFTZWN0aW9uOjpub2RlVHlwZSgpIAogCiBQYXNzUmVmUHRyPE5vZGU+
IENEQVRBU2VjdGlvbjo6Y2xvbmVOb2RlKGJvb2wgLypkZWVwKi8pCiB7Ci0gICAgcmV0dXJuIG5l
dyBDREFUQVNlY3Rpb24oZG9jdW1lbnQoKSwgbV9kYXRhKTsKKyAgICByZXR1cm4gY3JlYXRlKGRv
Y3VtZW50KCksIGRhdGEoKSk7CiB9CiAKLS8vIERPTSBTZWN0aW9uIDEuMS4xCiBib29sIENEQVRB
U2VjdGlvbjo6Y2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSkKIHsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVBhc3NSZWZQdHI8VGV4dD4gQ0RBVEFTZWN0aW9uOjpjcmVhdGVOZXcoUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBzdHJpbmcpCitQYXNzUmVmUHRyPFRleHQ+IENEQVRBU2VjdGlvbjo6dmly
dHVhbENyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIG5ldyBDREFUQVNl
Y3Rpb24oZG9jdW1lbnQoKSwgc3RyaW5nKTsKKyAgICByZXR1cm4gY3JlYXRlKGRvY3VtZW50KCks
IGRhdGEpOwogfQogCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9t
L0NEQVRBU2VjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NEQVRBU2VjdGlvbi5o
CShyZXZpc2lvbiA0Njk5OCkKKysrIFdlYkNvcmUvZG9tL0NEQVRBU2VjdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDkgKzEsNyBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBE
T00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21w
dXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzEsMTYgKzI5LDE2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0RBVEFTZWN0aW9uIDogcHVibGljIFRleHQgewog
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENEQVRBU2VjdGlvbj4gY3JlYXRlKERvY3Vt
ZW50KiwgY29uc3QgU3RyaW5nJik7CisKK3ByaXZhdGU6CiAgICAgQ0RBVEFTZWN0aW9uKERvY3Vt
ZW50KiwgY29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVhbCB+Q0RBVEFTZWN0aW9uKCk7CiAKICAg
ICB2aXJ0dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgTm9kZVR5cGUg
bm9kZVR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZT4gY2xvbmVOb2Rl
KGJvb2wgZGVlcCk7CiAgICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUp
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRleHQ+IGNyZWF0ZU5ldyhQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+KTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGV4dD4gdmly
dHVhbENyZWF0ZShjb25zdCBTdHJpbmcmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCShyZXZpc2lvbiA0Njk5OCkKKysrIFdlYkNvcmUvZG9t
L0NoYXJhY3RlckRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTMwLDIwICszMCwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUNoYXJhY3RlckRhdGE6OkNoYXJhY3RlckRhdGEoRG9jdW1lbnQgKmRvYywgYm9vbCBpc1Rl
eHQpCi0gICAgOiBOb2RlKGRvYywgZmFsc2UsIGZhbHNlLCBpc1RleHQpCi0gICAgLCBtX2RhdGEo
U3RyaW5nSW1wbDo6ZW1wdHkoKSkKLXsKLX0KLQotQ2hhcmFjdGVyRGF0YTo6Q2hhcmFjdGVyRGF0
YShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBpc1RleHQpCi0g
ICAgOiBOb2RlKGRvY3VtZW50LCBmYWxzZSwgZmFsc2UsIGlzVGV4dCkKLXsKLSAgICBtX2RhdGEg
PSB0ZXh0LmltcGwoKSA/IHRleHQuaW1wbCgpIDogU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLX0KLQot
Q2hhcmFjdGVyRGF0YTo6fkNoYXJhY3RlckRhdGEoKQorQ2hhcmFjdGVyRGF0YTo6Q2hhcmFjdGVy
RGF0YShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgQ29uc3RydWN0aW9u
VHlwZSB0eXBlKQorICAgIDogTm9kZShkb2N1bWVudCwgdHlwZSkKKyAgICAsIG1fZGF0YSh0ZXh0
LmltcGwoKSA/IHRleHQuaW1wbCgpIDogU3RyaW5nSW1wbDo6ZW1wdHkoKSkKIHsKKyAgICBBU1NF
UlQodHlwZSA9PSBDcmVhdGVPdGhlciB8fCB0eXBlID09IENyZWF0ZVRleHQpOwogfQogCiB2b2lk
IENoYXJhY3RlckRhdGE6OnNldERhdGEoY29uc3QgU3RyaW5nJiBkYXRhLCBFeGNlcHRpb25Db2Rl
JikKSW5kZXg6IFdlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgJKHJldmlzaW9uIDQ2OTk4KQorKysgV2ViQ29yZS9kb20v
Q2hhcmFjdGVyRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAg
IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI5LDEyICsyOSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2hhcmFjdGVy
RGF0YSA6IHB1YmxpYyBOb2RlIHsKIHB1YmxpYzoKLSAgICBDaGFyYWN0ZXJEYXRhKERvY3VtZW50
KiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIGlzVGV4dCA9IGZhbHNlKTsKLSAgICBDaGFyYWN0
ZXJEYXRhKERvY3VtZW50KiwgYm9vbCBpc1RleHQgPSBmYWxzZSk7Ci0gICAgdmlydHVhbCB+Q2hh
cmFjdGVyRGF0YSgpOwotCi0gICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBDaGFy
YWN0ZXJEYXRhCi0KICAgICBTdHJpbmcgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQog
ICAgIHZvaWQgc2V0RGF0YShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLT5sZW5ndGgoKTsgfQpAQCAtNDIs
MzEgKzM2LDMwIEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZERhdGEoY29uc3QgU3RyaW5nJiwg
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgaW5zZXJ0RGF0YSh1bnNpZ25lZCBvZmZzZXQsIGNv
bnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGRlbGV0ZURhdGEodW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgcmVw
bGFjZURhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nICZh
cmcsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlcGxhY2VEYXRhKHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgY291bnQsIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAg
IGJvb2wgY29udGFpbnNPbmx5V2hpdGVzcGFjZSgpIGNvbnN0OwogCi0gICAgLy8gRE9NIG1ldGhv
ZHMgb3ZlcnJpZGRlbiBmcm9tIHBhcmVudCBjbGFzc2VzCi0KLSAgICB2aXJ0dWFsIFN0cmluZyBu
b2RlVmFsdWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9kZVZhbHVlKGNvbnN0IFN0
cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICAKLSAgICAvLyBPdGhlciBtZXRob2RzIChub3Qg
cGFydCBvZiBET00pCisgICAgU3RyaW5nSW1wbCogZGF0YUltcGwoKSB7IHJldHVybiBtX2RhdGEu
Z2V0KCk7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc0NoYXJhY3RlckRhdGFOb2RlKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgaW50IG1heENoYXJhY3Rlck9mZnNldCgpIGNv
bnN0OwotICAgIFN0cmluZ0ltcGwqIHN0cmluZygpIHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQor
cHJvdGVjdGVkOgorICAgIENoYXJhY3RlckRhdGEoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmLCBD
b25zdHJ1Y3Rpb25UeXBlKTsKIAotICAgIHZpcnR1YWwgYm9vbCBvZmZzZXRJbkNoYXJhY3RlcnMo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSop
OwogCi1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fZGF0YTsKLQorICAgIHZv
aWQgc2V0RGF0YUltcGwoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBpbXBsKSB7IG1fZGF0YSA9IGlt
cGw7IH0KICAgICB2b2lkIGRpc3BhdGNoTW9kaWZpZWRFdmVudChTdHJpbmdJbXBsKiBvbGRWYWx1
ZSk7CiAKIHByaXZhdGU6CisgICAgdmlydHVhbCBTdHJpbmcgbm9kZVZhbHVlKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIHNldE5vZGVWYWx1ZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdmlydHVhbCBib29sIGlzQ2hhcmFjdGVyRGF0YU5vZGUoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CisgICAgdmlydHVhbCBpbnQgbWF4Q2hhcmFjdGVyT2Zmc2V0KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIG9mZnNldEluQ2hhcmFjdGVycygpIGNvbnN0OworCiAgICAgdm9pZCBj
aGVja0NoYXJEYXRhT3BlcmF0aW9uKHVuc2lnbmVkIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwor
CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL0NvbW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0NvbW1lbnQuY3BwCShyZXZpc2lvbiA0Njk5OCkKKysrIFdlYkNvcmUvZG9tL0NvbW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEsNyBAQAotLyoqCi0gKiBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgorLyoKICAqIENv
cHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAg
IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yNCwyMiArMjIsMTYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDb21tZW50
LmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNv
bW1lbnQ6OkNvbW1lbnQoRG9jdW1lbnQqIGRvYywgY29uc3QgU3RyaW5nJiB0ZXh0KQotICAgIDog
Q2hhcmFjdGVyRGF0YShkb2MsIHRleHQpCi17Ci19Ci0KLUNvbW1lbnQ6OkNvbW1lbnQoRG9jdW1l
bnQqIGRvYykKLSAgICA6IENoYXJhY3RlckRhdGEoZG9jKQoraW5saW5lIENvbW1lbnQ6OkNvbW1l
bnQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQpCisgICAgOiBDaGFyYWN0
ZXJEYXRhKGRvY3VtZW50LCB0ZXh0LCBDcmVhdGVPdGhlcikKIHsKIH0KIAotQ29tbWVudDo6fkNv
bW1lbnQoKQorUGFzc1JlZlB0cjxDb21tZW50PiBDb21tZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
b21tZW50KGRvY3VtZW50LCB0ZXh0KSk7CiB9CiAKIFN0cmluZyBDb21tZW50Ojpub2RlTmFtZSgp
IGNvbnN0CkBAIC01NCwxMCArNDYsOSBAQCBOb2RlOjpOb2RlVHlwZSBDb21tZW50Ojpub2RlVHlw
ZSgpIGNvbnN0CiAKIFBhc3NSZWZQdHI8Tm9kZT4gQ29tbWVudDo6Y2xvbmVOb2RlKGJvb2wgLypk
ZWVwKi8pCiB7Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmNyZWF0ZUNvbW1lbnQobV9kYXRhKTsK
KyAgICByZXR1cm4gY3JlYXRlKGRvY3VtZW50KCksIGRhdGEoKSk7CiB9CiAKLS8vIERPTSBTZWN0
aW9uIDEuMS4xCiBib29sIENvbW1lbnQ6OmNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUpCiB7CiAg
ICAgcmV0dXJuIGZhbHNlOwpJbmRleDogV2ViQ29yZS9kb20vQ29tbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0NvbW1lbnQuaAkocmV2aXNpb24gNDY5OTgpCisrKyBXZWJDb3JlL2Rv
bS9Db21tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSw3IEBACiAvKgotICogVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENv
cHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAg
IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0zMSwxNiArMjksMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb21tZW50IDog
cHVibGljIENoYXJhY3RlckRhdGEgewogcHVibGljOgotICAgIENvbW1lbnQoRG9jdW1lbnQqLCBj
b25zdCBTdHJpbmcgJl90ZXh0KTsKLSAgICBDb21tZW50KERvY3VtZW50Kik7Ci0gICAgdmlydHVh
bCB+Q29tbWVudCgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvbW1lbnQ+IGNyZWF0ZShEb2N1
bWVudCosIGNvbnN0IFN0cmluZyYpOworCitwcml2YXRlOgorICAgIENvbW1lbnQoRG9jdW1lbnQq
LCBjb25zdCBTdHJpbmcmKTsKIAotICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAg
cGFyZW50IGNsYXNzZXMKICAgICB2aXJ0dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgTm9kZVR5cGUgbm9kZVR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8Tm9kZT4gY2xvbmVOb2RlKGJvb2wgZGVlcCk7Ci0KLSAgICAvLyBPdGhlciBtZXRob2RzIChu
b3QgcGFydCBvZiBET00pCiAgICAgdmlydHVhbCBib29sIGlzQ29tbWVudE5vZGUoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5
cGUpOwogfTsKSW5kZXg6IFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiA0Njk5OCkKKysrIFdl
YkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjksMTYgKzg2
OSwxNiBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaENoaWxkSW5zZXJ0aW9uRXZlbnRzCiAgICAgQVNT
RVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwogCiAgICAgUmVmUHRyPE5vZGU+IGMgPSBj
aGlsZDsKLSAgICBEb2NQdHI8RG9jdW1lbnQ+IGRvYyA9IGNoaWxkLT5kb2N1bWVudCgpOworICAg
IFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBjaGlsZC0+ZG9jdW1lbnQoKTsKIAogICAgIGlm
IChjLT5wYXJlbnROb2RlKCkgJiYgYy0+cGFyZW50Tm9kZSgpLT5pbkRvY3VtZW50KCkpCiAgICAg
ICAgIGMtPmluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgZWxzZQogICAgICAgICBjLT5pbnNl
cnRlZEludG9UcmVlKHRydWUpOwogCi0gICAgZG9jLT5pbmNET01UcmVlVmVyc2lvbigpOworICAg
IGRvY3VtZW50LT5pbmNET01UcmVlVmVyc2lvbigpOwogCi0gICAgaWYgKGMtPnBhcmVudE5vZGUo
KSAmJiBkb2MtPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9NTk9ERUlOU0VSVEVEX0xJU1RF
TkVSKSkgeworICAgIGlmIChjLT5wYXJlbnROb2RlKCkgJiYgZG9jdW1lbnQtPmhhc0xpc3RlbmVy
VHlwZShEb2N1bWVudDo6RE9NTk9ERUlOU0VSVEVEX0xJU1RFTkVSKSkgewogICAgICAgICBlYyA9
IDA7CiAgICAgICAgIGMtPmRpc3BhdGNoTXV0YXRpb25FdmVudChldmVudE5hbWVzKCkuRE9NTm9k
ZUluc2VydGVkRXZlbnQsIHRydWUsIGMtPnBhcmVudE5vZGUoKSwgU3RyaW5nKCksIFN0cmluZygp
LCBlYyk7IAogICAgICAgICBpZiAoZWMpCkBAIC04ODYsMjcgKzg4NiwyOCBAQCBzdGF0aWMgdm9p
ZCBkaXNwYXRjaENoaWxkSW5zZXJ0aW9uRXZlbnRzCiAgICAgfQogCiAgICAgLy8gZGlzcGF0Y2gg
dGhlIERPTU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudCBldmVudCB0byBhbGwgZGVzY2VuZGFudHMK
LSAgICBpZiAoYy0+aW5Eb2N1bWVudCgpICYmIGRvYy0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50
OjpET01OT0RFSU5TRVJURURJTlRPRE9DVU1FTlRfTElTVEVORVIpKQorICAgIGlmIChjLT5pbkRv
Y3VtZW50KCkgJiYgZG9jdW1lbnQtPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9NTk9ERUlO
U0VSVEVESU5UT0RPQ1VNRU5UX0xJU1RFTkVSKSkgewogICAgICAgICBmb3IgKDsgYzsgYyA9IGMt
PnRyYXZlcnNlTmV4dE5vZGUoY2hpbGQpKSB7CiAgICAgICAgICAgICBlYyA9IDA7CiAgICAgICAg
ICAgICBjLT5kaXNwYXRjaE11dGF0aW9uRXZlbnQoZXZlbnROYW1lcygpLkRPTU5vZGVJbnNlcnRl
ZEludG9Eb2N1bWVudEV2ZW50LCBmYWxzZSwgMCwgU3RyaW5nKCksIFN0cmluZygpLCBlYyk7IAog
ICAgICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQor
ICAgIH0KIH0KIAogc3RhdGljIHZvaWQgZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMoTm9kZSog
Y2hpbGQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFJlZlB0cjxOb2RlPiBjID0gY2hpbGQ7
Ci0gICAgRG9jUHRyPERvY3VtZW50PiBkb2MgPSBjaGlsZC0+ZG9jdW1lbnQoKTsKKyAgICBSZWZQ
dHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gY2hpbGQtPmRvY3VtZW50KCk7CiAKICAgICAvLyB1cGRh
dGUgYXV4aWxpYXJ5IGRvYyBpbmZvIChlLmcuIGl0ZXJhdG9ycykgdG8gbm90ZSB0aGF0IG5vZGUg
aXMgYmVpbmcgcmVtb3ZlZAotICAgIGRvYy0+bm9kZVdpbGxCZVJlbW92ZWQoY2hpbGQpOworICAg
IGRvY3VtZW50LT5ub2RlV2lsbEJlUmVtb3ZlZChjaGlsZCk7CiAKLSAgICBkb2MtPmluY0RPTVRy
ZWVWZXJzaW9uKCk7CisgICAgZG9jdW1lbnQtPmluY0RPTVRyZWVWZXJzaW9uKCk7CiAKICAgICAv
LyBkaXNwYXRjaCBwcmUtcmVtb3ZhbCBtdXRhdGlvbiBldmVudHMKLSAgICBpZiAoYy0+cGFyZW50
Tm9kZSgpICYmIGRvYy0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01OT0RFUkVNT1ZFRF9M
SVNURU5FUikpIHsKKyAgICBpZiAoYy0+cGFyZW50Tm9kZSgpICYmIGRvY3VtZW50LT5oYXNMaXN0
ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTU5PREVSRU1PVkVEX0xJU1RFTkVSKSkgewogICAgICAgICBl
YyA9IDA7CiAgICAgICAgIGMtPmRpc3BhdGNoTXV0YXRpb25FdmVudChldmVudE5hbWVzKCkuRE9N
Tm9kZVJlbW92ZWRFdmVudCwgdHJ1ZSwgYy0+cGFyZW50Tm9kZSgpLCBTdHJpbmcoKSwgU3RyaW5n
KCksIGVjKTsgCiAgICAgICAgIGlmIChlYykKQEAgLTkxNCw3ICs5MTUsNyBAQCBzdGF0aWMgdm9p
ZCBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhOCiAgICAgfQogCiAgICAgLy8gZGlzcGF0Y2gg
dGhlIERPTU5vZGVSZW1vdmVkRnJvbURvY3VtZW50IGV2ZW50IHRvIGFsbCBkZXNjZW5kYW50cwot
ICAgIGlmIChjLT5pbkRvY3VtZW50KCkgJiYgZG9jLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6
OkRPTU5PREVSRU1PVkVERlJPTURPQ1VNRU5UX0xJU1RFTkVSKSkKKyAgICBpZiAoYy0+aW5Eb2N1
bWVudCgpICYmIGRvY3VtZW50LT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTU5PREVSRU1P
VkVERlJPTURPQ1VNRU5UX0xJU1RFTkVSKSkKICAgICAgICAgZm9yICg7IGM7IGMgPSBjLT50cmF2
ZXJzZU5leHROb2RlKGNoaWxkKSkgewogICAgICAgICAgICAgZWMgPSAwOwogICAgICAgICAgICAg
Yy0+ZGlzcGF0Y2hNdXRhdGlvbkV2ZW50KGV2ZW50TmFtZXMoKS5ET01Ob2RlUmVtb3ZlZEZyb21E
b2N1bWVudEV2ZW50LCBmYWxzZSwgMCwgU3RyaW5nKCksIFN0cmluZygpLCBlYyk7IApJbmRleDog
V2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuaAkocmV2aXNpb24gNDY5OTgpCisrKyBXZWJDb3JlL2RvbS9Db250YWluZXJO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5
OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0
aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJr
IE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zOCw3ICszOCw2IEBAIG5hbWVzcGFjZSBQ
cml2YXRlIHsgCiAKIGNsYXNzIENvbnRhaW5lck5vZGUgOiBwdWJsaWMgTm9kZSB7CiBwdWJsaWM6
Ci0gICAgQ29udGFpbmVyTm9kZShEb2N1bWVudCosIGJvb2wgaXNFbGVtZW50ID0gZmFsc2UpOwog
ICAgIHZpcnR1YWwgfkNvbnRhaW5lck5vZGUoKTsKIAogICAgIE5vZGUqIGZpcnN0Q2hpbGQoKSBj
b25zdCB7IHJldHVybiBtX2ZpcnN0Q2hpbGQ7IH0KQEAgLTc0LDYgKzczLDggQEAgcHVibGljOgog
ICAgIHZvaWQgY2xvbmVDaGlsZE5vZGVzKENvbnRhaW5lck5vZGUqIGNsb25lKTsKIAogcHJvdGVj
dGVkOgorICAgIENvbnRhaW5lck5vZGUoRG9jdW1lbnQqLCBDb25zdHJ1Y3Rpb25UeXBlID0gQ3Jl
YXRlQ29udGFpbmVyKTsKKwogICAgIHN0YXRpYyB2b2lkIHF1ZXVlUG9zdEF0dGFjaENhbGxiYWNr
KE5vZGVDYWxsYmFjaywgTm9kZSopOwogICAgIHZvaWQgc3VzcGVuZFBvc3RBdHRhY2hDYWxsYmFj
a3MoKTsKICAgICB2b2lkIHJlc3VtZVBvc3RBdHRhY2hDYWxsYmFja3MoKTsKQEAgLTk3LDggKzk4
LDggQEAgcHJpdmF0ZToKICAgICBOb2RlKiBtX2xhc3RDaGlsZDsKIH07CiAKLWlubGluZSBDb250
YWluZXJOb2RlOjpDb250YWluZXJOb2RlKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBpc0VsZW1l
bnQpCi0gICAgOiBOb2RlKGRvY3VtZW50LCBpc0VsZW1lbnQsIHRydWUpCitpbmxpbmUgQ29udGFp
bmVyTm9kZTo6Q29udGFpbmVyTm9kZShEb2N1bWVudCogZG9jdW1lbnQsIENvbnN0cnVjdGlvblR5
cGUgdHlwZSkKKyAgICA6IE5vZGUoZG9jdW1lbnQsIHR5cGUpCiAgICAgLCBtX2ZpcnN0Q2hpbGQo
MCkKICAgICAsIG1fbGFzdENoaWxkKDApCiB7CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2NQdHIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2NQdHIuaAkocmV2aXNpb24gNDY5OTgpCisrKyBX
ZWJDb3JlL2RvbS9Eb2NQdHIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTQgKzAsMCBAQAotLyoK
LSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4K
LSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lm
bmRlZiBEb2NQdHJfaAotI2RlZmluZSBEb2NQdHJfaAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LXRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBEb2NQdHIgewotcHVibGljOgotICAgIERvY1B0cigp
IDogbV9wdHIoMCkge30KLSAgICBEb2NQdHIoVCAqcHRyKSA6IG1fcHRyKHB0cikgeyBpZiAocHRy
KSBwdHItPnNlbGZPbmx5UmVmKCk7IH0KLSAgICBEb2NQdHIoY29uc3QgRG9jUHRyICZvKSA6IG1f
cHRyKG8ubV9wdHIpIHsgaWYgKFQgKnB0ciA9IG1fcHRyKSBwdHItPnNlbGZPbmx5UmVmKCk7IH0K
LSAgICB+RG9jUHRyKCkgeyBpZiAoVCAqcHRyID0gbV9wdHIpIHB0ci0+c2VsZk9ubHlEZXJlZigp
OyB9Ci0gICAgCi0gICAgdGVtcGxhdGUgPGNsYXNzIFU+IERvY1B0cihjb25zdCBEb2NQdHI8VT4g
Jm8pIDogbV9wdHIoby5nZXQoKSkgeyBpZiAoVCAqcHRyID0gbV9wdHIpIHB0ci0+c2VsZk9ubHlS
ZWYoKTsgfQotICAgIAotICAgIHZvaWQgcmVzZXRTa2lwcGluZ1JlZihUICpvKSB7IG1fcHRyID0g
bzsgfQotICAgIAotICAgIFQgKmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9Ci0gICAgCi0g
ICAgVCAmb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fcHRyOyB9Ci0gICAgVCAqb3BlcmF0
b3ItPigpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiAhbV9wdHI7IH0KLQotICAgIC8vIHRoaXMgdHlwZSBjb252ZXJzaW9u
IG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvCi0gICAgLy8gYm9vbCBidXQg
bm90IHRvIG90aGVyIGludGVnZXIgdHlwZXMKLSAgICAKLSAgICB0eXBlZGVmIFQgKiAoRG9jUHRy
OjoqVW5zcGVjaWZpZWRCb29sVHlwZSkoKSBjb25zdDsKLSAgICBvcGVyYXRvciBVbnNwZWNpZmll
ZEJvb2xUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3B0ciA/ICZEb2NQdHI6
OmdldCA6IDA7Ci0gICAgfQotICAgIAotICAgIERvY1B0ciAmb3BlcmF0b3I9KGNvbnN0IERvY1B0
ciAmKTsKLSAgICBEb2NQdHIgJm9wZXJhdG9yPShUICopOwotICAgIAotIHByaXZhdGU6Ci0gICAg
VCAqbV9wdHI7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gRG9jUHRyPFQ+ICZEb2NQdHI8VD46
Om9wZXJhdG9yPShjb25zdCBEb2NQdHI8VD4gJm8pIAotewotICAgIFQgKm9wdHIgPSBvLm1fcHRy
OwotICAgIGlmIChvcHRyKQotICAgICAgICBvcHRyLT5zZWxmT25seVJlZigpOwotICAgIGlmIChU
ICpwdHIgPSBtX3B0cikKLSAgICAgICAgcHRyLT5zZWxmT25seURlcmVmKCk7Ci0gICAgbV9wdHIg
PSBvcHRyOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBp
bmxpbmUgRG9jUHRyPFQ+ICZEb2NQdHI8VD46Om9wZXJhdG9yPShUICpvcHRyKQotewotICAgIGlm
IChvcHRyKQotICAgICAgICBvcHRyLT5zZWxmT25seVJlZigpOwotICAgIGlmIChUICpwdHIgPSBt
X3B0cikKLSAgICAgICAgcHRyLT5zZWxmT25seURlcmVmKCk7Ci0gICAgbV9wdHIgPSBvcHRyOwot
ICAgIHJldHVybiAqdGhpczsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRG9jUHRyPFQ+ICZhLCBjb25zdCBEb2NQdHI8VD4gJmIpIAoteyAKLSAg
ICByZXR1cm4gYS5nZXQoKSA9PSBiLmdldCgpOyAKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRG9jUHRyPFQ+ICZhLCBjb25zdCBUICpiKSAKLXsg
Ci0gICAgcmV0dXJuIGEuZ2V0KCkgPT0gYjsgCi19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFQgKmEsIGNvbnN0IERvY1B0cjxUPiAmYikgCi17Ci0g
ICAgcmV0dXJuIGEgPT0gYi5nZXQoKTsgCi19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IERvY1B0cjxUPiAmYSwgY29uc3QgRG9jUHRyPFQ+ICZiKSAK
LXsgCi0gICAgcmV0dXJuIGEuZ2V0KCkgIT0gYi5nZXQoKTsgCi19Ci0KLXRlbXBsYXRlIDxjbGFz
cyBUPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IERvY1B0cjxUPiAmYSwgY29uc3QgVCAq
YikKLXsKLSAgICByZXR1cm4gYS5nZXQoKSAhPSBiOyAKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+
IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVCAqYSwgY29uc3QgRG9jUHRyPFQ+ICZiKSAK
LXsgCi0gICAgcmV0dXJuIGEgIT0gYi5nZXQoKTsgCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIERvY1B0cl9oCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA0Njk5OCkK
KysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM5LDcgKzMz
OSw3IEBAIERvY3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGJvb2wgaXMKICAgICAsIG1f
Y29udGFpbnNXTUxDb250ZW50KGZhbHNlKQogI2VuZGlmCiB7Ci0gICAgbV9kb2N1bWVudC5yZXNl
dFNraXBwaW5nUmVmKHRoaXMpOworICAgIG1fZG9jdW1lbnQgPSB0aGlzOwogCiAgICAgbV9wcmlu
dGluZyA9IGZhbHNlOwogICAgIApAQCAtNDA5LDggKzQwOSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJl
bW92ZWRMYXN0UmVmKCkKICAgICAgICAgLy8gd2FudCB0aGUgZG9jdW1lbnQgdG8gYmUgZGVzdHJ1
Y3RlZCB1bnRpbCBhZnRlcgogICAgICAgICAvLyByZW1vdmVBbGxDaGlsZHJlbiByZXR1cm5zLCBz
byB3ZSBndWFyZCBvdXJzZWx2ZXMgd2l0aCBhbgogICAgICAgICAvLyBleHRyYSBzZWxmLW9ubHkg
cmVmLgotCi0gICAgICAgIERvY1B0cjxEb2N1bWVudD4gZ3VhcmQodGhpcyk7CisgICAgICAgIHNl
bGZPbmx5UmVmKCk7CiAKICAgICAgICAgLy8gV2UgbXVzdCBtYWtlIHN1cmUgbm90IHRvIGJlIHJl
dGFpbmluZyBhbnkgb2Ygb3VyIGNoaWxkcmVuIHRocm91Z2gKICAgICAgICAgLy8gdGhlc2UgZXh0
cmEgcG9pbnRlcnMgb3Igd2Ugd2lsbCBjcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUuCkBAIC00MzQs
NiArNDMzLDggQEAgdm9pZCBEb2N1bWVudDo6cmVtb3ZlZExhc3RSZWYoKQogI2lmbmRlZiBOREVC
VUcKICAgICAgICAgbV9pblJlbW92ZWRMYXN0UmVmRnVuY3Rpb24gPSBmYWxzZTsKICNlbmRpZgor
CisgICAgICAgIHNlbGZPbmx5RGVyZWYoKTsKICAgICB9IGVsc2UgewogI2lmbmRlZiBOREVCVUcK
ICAgICAgICAgbV9kZWxldGlvbkhhc0JlZ3VuID0gdHJ1ZTsKQEAgLTQ2MCw3ICs0NjEsNyBAQCBE
b2N1bWVudDo6fkRvY3VtZW50KCkKICNlbmRpZgogCiAgICAgZGVsZXRlIG1fdG9rZW5pemVyOwot
ICAgIG1fZG9jdW1lbnQucmVzZXRTa2lwcGluZ1JlZigwKTsKKyAgICBtX2RvY3VtZW50ID0gMDsK
ICAgICBkZWxldGUgbV9zdHlsZVNlbGVjdG9yOwogICAgIGRlbGV0ZSBtX2RvY0xvYWRlcjsKICAg
ICAKQEAgLTQ5Niw4ICs0OTcsNiBAQCBEb2N1bWVudDo6fkRvY3VtZW50KCkKIAogICAgIGlmICht
X3N0eWxlU2hlZXRzKQogICAgICAgICBtX3N0eWxlU2hlZXRzLT5kb2N1bWVudERlc3Ryb3llZCgp
OwotCi0gICAgbV9kb2N1bWVudCA9IDA7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnJlc2V0TGlua0Nv
bG9yKCkKQEAgLTU2NywxNyArNTY2LDE3IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gRG9jdW1lbnQ6
OmNyZWF0ZUVsZW0KIAogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEb2N1bWVudDo6Y3Jl
YXRlRG9jdW1lbnRGcmFnbWVudCgpCiB7Ci0gICAgcmV0dXJuIG5ldyBEb2N1bWVudEZyYWdtZW50
KGRvY3VtZW50KCkpOworICAgIHJldHVybiBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoZG9jdW1l
bnQoKSk7CiB9CiAKIFBhc3NSZWZQdHI8VGV4dD4gRG9jdW1lbnQ6OmNyZWF0ZVRleHROb2RlKGNv
bnN0IFN0cmluZyYgZGF0YSkKIHsKLSAgICByZXR1cm4gbmV3IFRleHQodGhpcywgZGF0YSk7Cisg
ICAgcmV0dXJuIFRleHQ6OmNyZWF0ZSh0aGlzLCBkYXRhKTsKIH0KIAogUGFzc1JlZlB0cjxDb21t
ZW50PiBEb2N1bWVudDo6Y3JlYXRlQ29tbWVudChjb25zdCBTdHJpbmcmIGRhdGEpCiB7Ci0gICAg
cmV0dXJuIG5ldyBDb21tZW50KHRoaXMsIGRhdGEpOworICAgIHJldHVybiBDb21tZW50OjpjcmVh
dGUodGhpcywgZGF0YSk7CiB9CiAKIFBhc3NSZWZQdHI8Q0RBVEFTZWN0aW9uPiBEb2N1bWVudDo6
Y3JlYXRlQ0RBVEFTZWN0aW9uKGNvbnN0IFN0cmluZyYgZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMp
CkBAIC01ODYsNyArNTg1LDcgQEAgUGFzc1JlZlB0cjxDREFUQVNlY3Rpb24+IERvY3VtZW50Ojpj
cmVhdAogICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9Ci0gICAgcmV0dXJuIG5ldyBDREFUQVNlY3Rpb24odGhpcywgZGF0YSk7CisgICAgcmV0
dXJuIENEQVRBU2VjdGlvbjo6Y3JlYXRlKHRoaXMsIGRhdGEpOwogfQogCiBQYXNzUmVmUHRyPFBy
b2Nlc3NpbmdJbnN0cnVjdGlvbj4gRG9jdW1lbnQ6OmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlv
bihjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBkYXRhLCBFeGNlcHRpb25Db2Rl
JiBlYykKQEAgLTU5OSw3ICs1OTgsNyBAQCBQYXNzUmVmUHRyPFByb2Nlc3NpbmdJbnN0cnVjdGlv
bj4gRG9jdW1lCiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KLSAgICByZXR1cm4gbmV3IFByb2Nlc3NpbmdJbnN0cnVjdGlvbih0aGlzLCB0
YXJnZXQsIGRhdGEpOworICAgIHJldHVybiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNyZWF0ZSh0
aGlzLCB0YXJnZXQsIGRhdGEpOwogfQogCiBQYXNzUmVmUHRyPEVudGl0eVJlZmVyZW5jZT4gRG9j
dW1lbnQ6OmNyZWF0ZUVudGl0eVJlZmVyZW5jZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQpAQCAtNjEyLDEyICs2MTEsMTIgQEAgUGFzc1JlZlB0cjxFbnRpdHlSZWZlcmVu
Y2U+IERvY3VtZW50OjpjcgogICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJuIG5ldyBFbnRpdHlSZWZlcmVuY2UodGhpcywg
bmFtZSk7CisgICAgcmV0dXJuIEVudGl0eVJlZmVyZW5jZTo6Y3JlYXRlKHRoaXMsIG5hbWUpOwog
fQogCiBQYXNzUmVmUHRyPEVkaXRpbmdUZXh0PiBEb2N1bWVudDo6Y3JlYXRlRWRpdGluZ1RleHRO
b2RlKGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICByZXR1cm4gbmV3IEVkaXRpbmdUZXh0KHRo
aXMsIHRleHQpOworICAgIHJldHVybiBFZGl0aW5nVGV4dDo6Y3JlYXRlKHRoaXMsIHRleHQpOwog
fQogCiBQYXNzUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IERvY3VtZW50OjpjcmVhdGVDU1NT
dHlsZURlY2xhcmF0aW9uKCkKQEAgLTY4MiwxMSArNjgxLDggQEAgUGFzc1JlZlB0cjxOb2RlPiBE
b2N1bWVudDo6aW1wb3J0Tm9kZShObwogCiAgICAgICAgICAgICByZXR1cm4gbmV3RWxlbWVudC5y
ZWxlYXNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBBVFRSSUJVVEVfTk9ERTogewotICAg
ICAgICAgICAgUmVmUHRyPEF0dHI+IG5ld0F0dHIgPSBuZXcgQXR0cigwLCB0aGlzLCBzdGF0aWNf
Y2FzdDxBdHRyKj4oaW1wb3J0ZWROb2RlKS0+YXR0cigpLT5jbG9uZSgpKTsKLSAgICAgICAgICAg
IG5ld0F0dHItPmNyZWF0ZVRleHRDaGlsZCgpOwotICAgICAgICAgICAgcmV0dXJuIG5ld0F0dHIu
cmVsZWFzZSgpOwotICAgICAgICB9CisgICAgICAgIGNhc2UgQVRUUklCVVRFX05PREU6CisgICAg
ICAgICAgICByZXR1cm4gQXR0cjo6Y3JlYXRlKDAsIHRoaXMsIHN0YXRpY19jYXN0PEF0dHIqPihp
bXBvcnRlZE5vZGUpLT5hdHRyKCktPmNsb25lKCkpOwogICAgICAgICBjYXNlIERPQ1VNRU5UX0ZS
QUdNRU5UX05PREU6IHsKICAgICAgICAgICAgIERvY3VtZW50RnJhZ21lbnQqIG9sZEZyYWdtZW50
ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnRGcmFnbWVudCo+KGltcG9ydGVkTm9kZSk7CiAgICAgICAg
ICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gbmV3RnJhZ21lbnQgPSBjcmVhdGVEb2N1bWVu
dEZyYWdtZW50KCk7CkBAIC0zODI0LDcgKzM4MjAsNyBAQCBQYXNzUmVmUHRyPEF0dHI+IERvY3Vt
ZW50OjpjcmVhdGVBdHRyaWJ1CiAKICAgICAvLyBGSVhNRTogQXNzdW1lIHRoaXMgaXMgYSBtYXBw
ZWQgYXR0cmlidXRlLCBzaW5jZSBjcmVhdGVBdHRyaWJ1dGUgaXNuJ3QgbmFtZXNwYWNlLWF3YXJl
LiAgVGhlcmUncyBubyBoYXJtIHRvIFhNTAogICAgIC8vIGRvY3VtZW50cyBpZiB3ZSdyZSB3cm9u
Zy4KLSAgICByZXR1cm4gbmV3IEF0dHIoMCwgdGhpcywgTWFwcGVkQXR0cmlidXRlOjpjcmVhdGUo
cU5hbWUsIFN0cmluZ0ltcGw6OmVtcHR5KCkpKTsKKyAgICByZXR1cm4gQXR0cjo6Y3JlYXRlKDAs
IHRoaXMsIE1hcHBlZEF0dHJpYnV0ZTo6Y3JlYXRlKHFOYW1lLCBTdHJpbmdJbXBsOjplbXB0eSgp
KSk7CiB9CiAKICNpZiBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA0Njk5OCkKKysr
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MiwxOSArMTcyLDE2
IEBAIGNsYXNzIERvY3VtZW50IDogcHVibGljIENvbnRhaW5lck5vZGUsIHAKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRlKEZyYW1lKiBmcmFtZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBuZXcgRG9jdW1lbnQoZnJhbWUsIGZhbHNlKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBEb2N1bWVudChmcmFtZSwgZmFsc2UpKTsKICAgICB9CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNyZWF0ZVhIVE1MKEZyYW1lKiBmcmFtZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBuZXcgRG9jdW1lbnQoZnJhbWUsIHRydWUpOworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IERvY3VtZW50KGZyYW1lLCB0cnVlKSk7CiAgICAgfQogICAgIHZpcnR1
YWwgfkRvY3VtZW50KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNEb2N1bWVudCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KLQogICAgIHVzaW5nIENvbnRhaW5lck5vZGU6OnJlZjsKICAgICB1c2lu
ZyBDb250YWluZXJOb2RlOjpkZXJlZjsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZExhc3RSZWYo
KTsKIAogICAgIC8vIE5vZGVzIGJlbG9uZ2luZyB0byB0aGlzIGRvY3VtZW50IGhvbGQgInNlbGYt
b25seSIgcmVmZXJlbmNlcyAtCiAgICAgLy8gdGhlc2UgYXJlIGVub3VnaCB0byBrZWVwIHRoZSBk
b2N1bWVudCBmcm9tIGJlaW5nIGRlc3Ryb3llZCwgYnV0CkBAIC0yMTQsNyArMjExLDYgQEAgcHVi
bGljOgogICAgIERvY3VtZW50VHlwZSogZG9jdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jVHlw
ZS5nZXQoKTsgfQogCiAgICAgRE9NSW1wbGVtZW50YXRpb24qIGltcGxlbWVudGF0aW9uKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNl
ciA9IGZhbHNlLCBOb2RlKiBiZWZvcmVDaGFuZ2UgPSAwLCBOb2RlKiBhZnRlckNoYW5nZSA9IDAs
IGludCBjaGlsZENvdW50RGVsdGEgPSAwKTsKICAgICAKICAgICBFbGVtZW50KiBkb2N1bWVudEVs
ZW1lbnQoKSBjb25zdAogICAgIHsKQEAgLTI5OSwxMSArMjk1LDYgQEAgcHVibGljOgogCiAgICAg
Q29sbGVjdGlvbkNhY2hlKiBuYW1lQ29sbGVjdGlvbkluZm8oQ29sbGVjdGlvblR5cGUsIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSk7CiAKLSAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZy
b20gIHBhcmVudCBjbGFzc2VzCi0KLSAgICB2aXJ0dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0
OwotICAgIHZpcnR1YWwgTm9kZVR5cGUgbm9kZVR5cGUoKSBjb25zdDsKLQogICAgIC8vIE90aGVy
IG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKICAgICB2aXJ0dWFsIGJvb2wgaXNIVE1MRG9jdW1l
bnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdlRG9j
dW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtNDU1LDkgKzQ0Niw2IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIHVzZXJBZ2VudChjb25zdCBLVVJMJikgY29uc3Q7CiAK
LSAgICAvLyBmcm9tIGNhY2hlZE9iamVjdENsaWVudAotICAgIHZpcnR1YWwgdm9pZCBzZXRDU1NT
dHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIGNvbnN0
IENhY2hlZENTU1N0eWxlU2hlZXQqKTsKLQogI2lmIEZSQU1FX0xPQURTX1VTRVJfU1RZTEVTSEVF
VAogICAgIHZvaWQgc2V0VXNlclN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBzaGVldCk7CiAjZW5k
aWYKQEAgLTQ3NCwxMCArNDYyLDYgQEAgcHVibGljOgogCiAgICAgZW51bSBQYXJzZU1vZGUgeyBD
b21wYXQsIEFsbW9zdFN0cmljdCwgU3RyaWN0IH07CiAKLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2
b2lkIGRldGVybWluZVBhcnNlTW9kZSgpIHt9Ci0gICAgCi1wdWJsaWM6CiAgICAgdm9pZCBzZXRQ
YXJzZU1vZGUoUGFyc2VNb2RlIG0pIHsgbV9wYXJzZU1vZGUgPSBtOyB9CiAgICAgUGFyc2VNb2Rl
IHBhcnNlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2VNb2RlOyB9CiAKQEAgLTUwNiwxMSAr
NDkwLDYgQEAgcHVibGljOgogICAgIAogICAgIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMg
cHJlcGFyZU1vdXNlRXZlbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBJbnRQb2ludCYs
IGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwogCi0gICAgdmlydHVhbCBib29sIGNoaWxkVHlw
ZUFsbG93ZWQoTm9kZVR5cGUpOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlPiBjbG9uZU5v
ZGUoYm9vbCBkZWVwKTsKLQotICAgIHZpcnR1YWwgYm9vbCBjYW5SZXBsYWNlQ2hpbGQoTm9kZSog
bmV3Q2hpbGQsIE5vZGUqIG9sZENoaWxkKTsKLSAgICAKICAgICBTdHlsZVNoZWV0TGlzdCogc3R5
bGVTaGVldHMoKTsKIAogICAgIC8qIE5ld2x5IHByb3Bvc2VkIENTUzMgbWVjaGFuaXNtIGZvciBz
ZWxlY3RpbmcgYWx0ZXJuYXRlCkBAIC03NDMsOCArNzIyLDYgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBzZXREb2NUeXBlKFBhc3NSZWZQdHI8RG9jdW1lbnRUeXBlPik7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgZmluaXNoZWRQYXJzaW5nKCk7Ci0KICNpZiBFTkFCTEUoWFBBVEgpCiAgICAgLy8gWFBhdGhF
dmFsdWF0b3IgbWV0aG9kcwogICAgIFBhc3NSZWZQdHI8WFBhdGhFeHByZXNzaW9uPiBjcmVhdGVF
eHByZXNzaW9uKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKQEAgLTc4Niw3ICs3NjMsNiBAQCBw
dWJsaWM6CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGdldENTU0NhbnZhc0VsZW1lbnQoY29uc3Qg
U3RyaW5nJiBuYW1lKTsKIAogICAgIGJvb2wgaXNETlNQcmVmZXRjaEVuYWJsZWQoKSBjb25zdCB7
IHJldHVybiBtX2lzRE5TUHJlZmV0Y2hFbmFibGVkOyB9Ci0gICAgdm9pZCBpbml0RE5TUHJlZmV0
Y2goKTsKICAgICB2b2lkIHBhcnNlRE5TUHJlZmV0Y2hDb250cm9sSGVhZGVyKGNvbnN0IFN0cmlu
ZyYpOwogCiAgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKQEAg
LTc5NSwyMiArNzcxLDEyOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNjcmlwdEltcG9y
dGVkKHVuc2lnbmVkIGxvbmcsIGNvbnN0IFN0cmluZyYpOwogICAgIHZpcnR1YWwgdm9pZCBwb3N0
VGFzayhQYXNzUmVmUHRyPFRhc2s+KTsgLy8gRXhlY3V0ZXMgdGhlIHRhc2sgb24gY29udGV4dCdz
IHRocmVhZCBhc3luY2hyb25vdXNseS4KIAorICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJDb3JlOjpO
b2RlKiwgSlNOb2RlKj4gSlNXcmFwcGVyQ2FjaGU7CisgICAgSlNXcmFwcGVyQ2FjaGUmIHdyYXBw
ZXJDYWNoZSgpIHsgcmV0dXJuIG1fd3JhcHBlckNhY2hlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZmluaXNoZWRQYXJzaW5nKCk7CisKKyAgICBib29sIGluUGFnZUNhY2hlKCkgY29uc3QgeyByZXR1
cm4gbV9pblBhZ2VDYWNoZTsgfQorICAgIHZvaWQgc2V0SW5QYWdlQ2FjaGUoYm9vbCBmbGFnKTsK
KyAgICAKKyAgICAvLyBFbGVtZW50cyBjYW4gcmVnaXN0ZXIgdGhlbXNlbHZlcyBmb3IgdGhlICJk
b2N1bWVudFdpbGxCZWNvbWVJbmFjdGl2ZSgpIiBhbmQgIAorICAgIC8vICJkb2N1bWVudERpZEJl
Y29tZUFjdGl2ZSgpIiBjYWxsYmFja3MKKyAgICB2b2lkIHJlZ2lzdGVyRm9yRG9jdW1lbnRBY3Rp
dmF0aW9uQ2FsbGJhY2tzKEVsZW1lbnQqKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJGb3JEb2N1bWVu
dEFjdGl2YXRpb25DYWxsYmFja3MoRWxlbWVudCopOworICAgIHZvaWQgZG9jdW1lbnRXaWxsQmVj
b21lSW5hY3RpdmUoKTsKKyAgICB2b2lkIGRvY3VtZW50RGlkQmVjb21lQWN0aXZlKCk7CisKKyAg
ICB2b2lkIHJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCopOworICAgIHZv
aWQgdW5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQqKTsKKyAgICB2b2lk
IG1lZGlhVm9sdW1lRGlkQ2hhbmdlKCk7CisKKyAgICB2b2lkIHNldFNob3VsZENyZWF0ZVJlbmRl
cmVycyhib29sKTsKKyAgICBib29sIHNob3VsZENyZWF0ZVJlbmRlcmVycygpOworCisgICAgdm9p
ZCBzZXREZWNvZGVyKFBhc3NSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4pOworICAgIFRleHRS
ZXNvdXJjZURlY29kZXIqIGRlY29kZXIoKSBjb25zdCB7IHJldHVybiBtX2RlY29kZXIuZ2V0KCk7
IH0KKworICAgIFN0cmluZyBkaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKGNvbnN0IFN0
cmluZyYpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gZGlzcGxheVN0cmluZ01v
ZGlmaWVkQnlFbmNvZGluZyhQYXNzUmVmUHRyPFN0cmluZ0ltcGw+KSBjb25zdDsKKyAgICB2b2lk
IGRpc3BsYXlCdWZmZXJNb2RpZmllZEJ5RW5jb2RpbmcoVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQg
bGVuKSBjb25zdDsKKworICAgIC8vIFF1aXJrIGZvciB0aGUgYmVuZWZpdCBvZiBBcHBsZSdzIERp
Y3Rpb25hcnkgYXBwbGljYXRpb24uCisgICAgdm9pZCBzZXRGcmFtZUVsZW1lbnRzU2hvdWxkSWdu
b3JlU2Nyb2xsaW5nKGJvb2wgaWdub3JlKSB7IG1fZnJhbWVFbGVtZW50c1Nob3VsZElnbm9yZVNj
cm9sbGluZyA9IGlnbm9yZTsgfQorICAgIGJvb2wgZnJhbWVFbGVtZW50c1Nob3VsZElnbm9yZVNj
cm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVFbGVtZW50c1Nob3VsZElnbm9yZVNjcm9s
bGluZzsgfQorCisjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQorICAgIHZvaWQgc2V0RGFz
aGJvYXJkUmVnaW9uc0RpcnR5KGJvb2wgZikgeyBtX2Rhc2hib2FyZFJlZ2lvbnNEaXJ0eSA9IGY7
IH0KKyAgICBib29sIGRhc2hib2FyZFJlZ2lvbnNEaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZGFz
aGJvYXJkUmVnaW9uc0RpcnR5OyB9CisgICAgYm9vbCBoYXNEYXNoYm9hcmRSZWdpb25zICgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzRGFzaGJvYXJkUmVnaW9uczsgfQorICAgIHZvaWQgc2V0SGFzRGFz
aGJvYXJkUmVnaW9ucyhib29sIGYpIHsgbV9oYXNEYXNoYm9hcmRSZWdpb25zID0gZjsgfQorICAg
IGNvbnN0IFZlY3RvcjxEYXNoYm9hcmRSZWdpb25WYWx1ZT4mIGRhc2hib2FyZFJlZ2lvbnMoKSBj
b25zdDsKKyAgICB2b2lkIHNldERhc2hib2FyZFJlZ2lvbnMoY29uc3QgVmVjdG9yPERhc2hib2Fy
ZFJlZ2lvblZhbHVlPiYpOworI2VuZGlmCisKKyAgICB2b2lkIHJlbW92ZUFsbEV2ZW50TGlzdGVu
ZXJzKCk7CisKKyAgICB2b2lkIHJlZ2lzdGVyRGlzY29ubmVjdGVkTm9kZVdpdGhFdmVudExpc3Rl
bmVycyhOb2RlKik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRGlzY29ubmVjdGVkTm9kZVdpdGhFdmVu
dExpc3RlbmVycyhOb2RlKik7CisgICAgCisgICAgQ2hlY2tlZFJhZGlvQnV0dG9ucyYgY2hlY2tl
ZFJhZGlvQnV0dG9ucygpIHsgcmV0dXJuIG1fY2hlY2tlZFJhZGlvQnV0dG9uczsgfQorICAgIAor
I2lmIEVOQUJMRShTVkcpCisgICAgY29uc3QgU1ZHRG9jdW1lbnRFeHRlbnNpb25zKiBzdmdFeHRl
bnNpb25zKCk7CisgICAgU1ZHRG9jdW1lbnRFeHRlbnNpb25zKiBhY2Nlc3NTVkdFeHRlbnNpb25z
KCk7CisjZW5kaWYKKworICAgIHZvaWQgaW5pdFNlY3VyaXR5Q29udGV4dCgpOworCisgICAgLy8g
RXhwbGljaXRseSBvdmVycmlkZSB0aGUgc2VjdXJpdHkgb3JpZ2luIGZvciB0aGlzIGRvY3VtZW50
LgorICAgIC8vIE5vdGU6IEl0IGlzIGRhbmdlcm91cyB0byBjaGFuZ2UgdGhlIHNlY3VyaXR5IG9y
aWdpbiBvZiBhIGRvY3VtZW50CisgICAgLy8gICAgICAgdGhhdCBhbHJlYWR5IGNvbnRhaW5zIGNv
bnRlbnQuCisgICAgdm9pZCBzZXRTZWN1cml0eU9yaWdpbihTZWN1cml0eU9yaWdpbiopOworCisg
ICAgYm9vbCBwcm9jZXNzaW5nTG9hZEV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzaW5n
TG9hZEV2ZW50OyB9CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgdm9pZCBhZGRPcGVuRGF0
YWJhc2UoRGF0YWJhc2UqKTsKKyAgICB2b2lkIHJlbW92ZU9wZW5EYXRhYmFzZShEYXRhYmFzZSop
OworICAgIERhdGFiYXNlVGhyZWFkKiBkYXRhYmFzZVRocmVhZCgpOyAgIC8vIENyZWF0ZXMgdGhl
IHRocmVhZCBhcyBuZWVkZWQsIGJ1dCBub3QgaWYgaXQgaGFzIGJlZW4gYWxyZWFkeSB0ZXJtaW5h
dGVkLgorICAgIHZvaWQgc2V0SGFzT3BlbkRhdGFiYXNlcygpIHsgbV9oYXNPcGVuRGF0YWJhc2Vz
ID0gdHJ1ZTsgfQorICAgIGJvb2wgaGFzT3BlbkRhdGFiYXNlcygpIHsgcmV0dXJuIG1faGFzT3Bl
bkRhdGFiYXNlczsgfQorICAgIHZvaWQgc3RvcERhdGFiYXNlcygpOworI2VuZGlmCisKKyAgICB2
b2lkIHNldFVzaW5nR2VvbG9jYXRpb24oYm9vbCBmKSB7IG1fdXNpbmdHZW9sb2NhdGlvbiA9IGY7
IH0KKyAgICBib29sIHVzaW5nR2VvbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3VzaW5nR2Vv
bG9jYXRpb247IH07CisKKyNpZiBFTkFCTEUoV01MKQorICAgIHZvaWQgc2V0Q29udGFpbnNXTUxD
b250ZW50KGJvb2wgdmFsdWUpIHsgbV9jb250YWluc1dNTENvbnRlbnQgPSB2YWx1ZTsgfQorICAg
IGJvb2wgY29udGFpbnNXTUxDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc1dNTENv
bnRlbnQ7IH0KKworICAgIHZvaWQgcmVzZXRXTUxQYWdlU3RhdGUoKTsKKyAgICB2b2lkIGluaXRp
YWxpemVXTUxQYWdlU3RhdGUoKTsKKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgRG9jdW1lbnQo
RnJhbWUqLCBib29sIGlzWEhUTUwpOwogCi0gICAgdm9pZCBzZXRTdHlsZVNlbGVjdG9yKENTU1N0
eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IpIHsgIG1fc3R5bGVTZWxlY3RvciA9IHN0eWxlU2Vs
ZWN0b3I7IH0KKyAgICB2b2lkIHNldFN0eWxlU2VsZWN0b3IoQ1NTU3R5bGVTZWxlY3Rvciogc3R5
bGVTZWxlY3RvcikgeyBtX3N0eWxlU2VsZWN0b3IgPSBzdHlsZVNlbGVjdG9yOyB9CisKKyAgICB2
b2lkIGNsZWFyWE1MVmVyc2lvbigpIHsgbV94bWxWZXJzaW9uID0gU3RyaW5nKCk7IH0KIAogcHJp
dmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgaXNEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZExhc3RSZWYoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGV0ZXJtaW5lUGFyc2VNb2RlKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFu
Z2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAs
IE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0YSA9IDApOworCisgICAg
dmlydHVhbCBTdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIE5vZGVUeXBlIG5v
ZGVUeXBlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldENTU1N0eWxlU2hlZXQoY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgY29uc3QgQ2FjaGVkQ1NTU3R5bGVT
aGVldCopOworICAgIHZpcnR1YWwgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKE5vZGVUeXBlKTsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZT4gY2xvbmVOb2RlKGJvb2wgZGVlcCk7CisgICAgdmly
dHVhbCBib29sIGNhblJlcGxhY2VDaGlsZChOb2RlKiBuZXdDaGlsZCwgTm9kZSogb2xkQ2hpbGQp
OworCiAgICAgdmlydHVhbCB2b2lkIHJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB7IHJlZigp
OyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIHsgZGVy
ZWYoKTsgfQogCiAgICAgdmlydHVhbCBjb25zdCBLVVJMJiB2aXJ0dWFsVVJMKCkgY29uc3Q7IC8v
IFNhbWUgYXMgdXJsKCksIGJ1dCBuZWVkZWQgZm9yIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgdG8g
aW1wbGVtZW50IGl0IHdpdGhvdXQgYSBwZXJmb3JtYW5jZSBsb3NzIGZvciBkaXJlY3QgY2FsbHMu
CiAgICAgdmlydHVhbCBLVVJMIHZpcnR1YWxDb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmKSBjb25z
dDsgLy8gU2FtZSBhcyBjb21wbGV0ZVVSTCgpIGZvciB0aGUgc2FtZSByZWFzb24gYXMgYWJvdmUu
CiAKKyAgICB2b2lkIGluaXRETlNQcmVmZXRjaCgpOworCiAgICAgU3RyaW5nIGVuY29kaW5nKCkg
Y29uc3Q7CiAKICAgICB2b2lkIGV4ZWN1dGVTY3JpcHRTb29uVGltZXJGaXJlZChUaW1lcjxEb2N1
bWVudD4qKTsKIAorICAgIHZvaWQgdXBkYXRlVGl0bGUoKTsKKyAgICB2b2lkIHJlbW92ZUFsbERp
c2Nvbm5lY3RlZE5vZGVFdmVudExpc3RlbmVycygpOworICAgIHZvaWQgdXBkYXRlRm9jdXNBcHBl
YXJhbmNlVGltZXJGaXJlZChUaW1lcjxEb2N1bWVudD4qKTsKKyAgICB2b2lkIHVwZGF0ZUJhc2VV
UkwoKTsKKworICAgIHZvaWQgY2FjaGVEb2N1bWVudEVsZW1lbnQoKSBjb25zdDsKKwogICAgIENT
U1N0eWxlU2VsZWN0b3IqIG1fc3R5bGVTZWxlY3RvcjsKICAgICBib29sIG1fZGlkQ2FsY3VsYXRl
U3R5bGVTZWxlY3RvcjsKIApAQCAtOTYzLDk2ICsxMDQ2LDYgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fc2hvdWxkUHJvY2Vzc05vU2NyaXB0RWxlbWVudDsKICNlbmRpZgogCi1wdWJsaWM6Ci0gICAg
Ym9vbCBpblBhZ2VDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5QYWdlQ2FjaGU7IH0KLSAgICB2
b2lkIHNldEluUGFnZUNhY2hlKGJvb2wgZmxhZyk7Ci0gICAgCi0gICAgLy8gRWxlbWVudHMgY2Fu
IHJlZ2lzdGVyIHRoZW1zZWx2ZXMgZm9yIHRoZSAiZG9jdW1lbnRXaWxsQmVjb21lSW5hY3RpdmUo
KSIgYW5kICAKLSAgICAvLyAiZG9jdW1lbnREaWRCZWNvbWVBY3RpdmUoKSIgY2FsbGJhY2tzCi0g
ICAgdm9pZCByZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyhFbGVtZW50Kik7
Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKEVsZW1l
bnQqKTsKLSAgICB2b2lkIGRvY3VtZW50V2lsbEJlY29tZUluYWN0aXZlKCk7Ci0gICAgdm9pZCBk
b2N1bWVudERpZEJlY29tZUFjdGl2ZSgpOwotCi0gICAgdm9pZCByZWdpc3RlckZvck1lZGlhVm9s
dW1lQ2FsbGJhY2tzKEVsZW1lbnQqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJGb3JNZWRpYVZvbHVt
ZUNhbGxiYWNrcyhFbGVtZW50Kik7Ci0gICAgdm9pZCBtZWRpYVZvbHVtZURpZENoYW5nZSgpOwot
Ci0gICAgdm9pZCBzZXRTaG91bGRDcmVhdGVSZW5kZXJlcnMoYm9vbCk7Ci0gICAgYm9vbCBzaG91
bGRDcmVhdGVSZW5kZXJlcnMoKTsKLSAgICAKLSAgICB2b2lkIHNldERlY29kZXIoUGFzc1JlZlB0
cjxUZXh0UmVzb3VyY2VEZWNvZGVyPik7Ci0gICAgVGV4dFJlc291cmNlRGVjb2RlciogZGVjb2Rl
cigpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2Rlci5nZXQoKTsgfQotCi0gICAgU3RyaW5nIGRpc3Bs
YXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBkaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4pIGNvbnN0OwotICAgIHZvaWQgZGlzcGxheUJ1ZmZlck1vZGlmaWVk
QnlFbmNvZGluZyhVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW4pIGNvbnN0OwotCi0gICAgLy8g
UXVpcmsgZm9yIHRoZSBiZW5lZml0IG9mIEFwcGxlJ3MgRGljdGlvbmFyeSBhcHBsaWNhdGlvbi4K
LSAgICB2b2lkIHNldEZyYW1lRWxlbWVudHNTaG91bGRJZ25vcmVTY3JvbGxpbmcoYm9vbCBpZ25v
cmUpIHsgbV9mcmFtZUVsZW1lbnRzU2hvdWxkSWdub3JlU2Nyb2xsaW5nID0gaWdub3JlOyB9Ci0g
ICAgYm9vbCBmcmFtZUVsZW1lbnRzU2hvdWxkSWdub3JlU2Nyb2xsaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9mcmFtZUVsZW1lbnRzU2hvdWxkSWdub3JlU2Nyb2xsaW5nOyB9Ci0KLSNpZiBFTkFCTEUo
REFTSEJPQVJEX1NVUFBPUlQpCi0gICAgdm9pZCBzZXREYXNoYm9hcmRSZWdpb25zRGlydHkoYm9v
bCBmKSB7IG1fZGFzaGJvYXJkUmVnaW9uc0RpcnR5ID0gZjsgfQotICAgIGJvb2wgZGFzaGJvYXJk
UmVnaW9uc0RpcnR5KCkgY29uc3QgeyByZXR1cm4gbV9kYXNoYm9hcmRSZWdpb25zRGlydHk7IH0K
LSAgICBib29sIGhhc0Rhc2hib2FyZFJlZ2lvbnMgKCkgY29uc3QgeyByZXR1cm4gbV9oYXNEYXNo
Ym9hcmRSZWdpb25zOyB9Ci0gICAgdm9pZCBzZXRIYXNEYXNoYm9hcmRSZWdpb25zKGJvb2wgZikg
eyBtX2hhc0Rhc2hib2FyZFJlZ2lvbnMgPSBmOyB9Ci0gICAgY29uc3QgVmVjdG9yPERhc2hib2Fy
ZFJlZ2lvblZhbHVlPiYgZGFzaGJvYXJkUmVnaW9ucygpIGNvbnN0OwotICAgIHZvaWQgc2V0RGFz
aGJvYXJkUmVnaW9ucyhjb25zdCBWZWN0b3I8RGFzaGJvYXJkUmVnaW9uVmFsdWU+Jik7Ci0jZW5k
aWYKLQotICAgIHZvaWQgcmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKLQotICAgIHZvaWQgcmVn
aXN0ZXJEaXNjb25uZWN0ZWROb2RlV2l0aEV2ZW50TGlzdGVuZXJzKE5vZGUqKTsKLSAgICB2b2lk
IHVucmVnaXN0ZXJEaXNjb25uZWN0ZWROb2RlV2l0aEV2ZW50TGlzdGVuZXJzKE5vZGUqKTsKLSAg
ICAKLSAgICBDaGVja2VkUmFkaW9CdXR0b25zJiBjaGVja2VkUmFkaW9CdXR0b25zKCkgeyByZXR1
cm4gbV9jaGVja2VkUmFkaW9CdXR0b25zOyB9Ci0gICAgCi0jaWYgRU5BQkxFKFNWRykKLSAgICBj
b25zdCBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIHN2Z0V4dGVuc2lvbnMoKTsKLSAgICBTVkdEb2N1
bWVudEV4dGVuc2lvbnMqIGFjY2Vzc1NWR0V4dGVuc2lvbnMoKTsKLSNlbmRpZgotCi0gICAgdm9p
ZCBpbml0U2VjdXJpdHlDb250ZXh0KCk7Ci0KLSAgICAvLyBFeHBsaWNpdGx5IG92ZXJyaWRlIHRo
ZSBzZWN1cml0eSBvcmlnaW4gZm9yIHRoaXMgZG9jdW1lbnQuCi0gICAgLy8gTm90ZTogSXQgaXMg
ZGFuZ2Vyb3VzIHRvIGNoYW5nZSB0aGUgc2VjdXJpdHkgb3JpZ2luIG9mIGEgZG9jdW1lbnQKLSAg
ICAvLyAgICAgICB0aGF0IGFscmVhZHkgY29udGFpbnMgY29udGVudC4KLSAgICB2b2lkIHNldFNl
Y3VyaXR5T3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7Ci0KLSAgICBib29sIHByb2Nlc3NpbmdMb2Fk
RXZlbnQoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3NpbmdMb2FkRXZlbnQ7IH0KLQotI2lmIEVO
QUJMRShEQVRBQkFTRSkKLSAgICB2b2lkIGFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZSopOwotICAg
IHZvaWQgcmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlKik7Ci0gICAgRGF0YWJhc2VUaHJlYWQq
IGRhdGFiYXNlVGhyZWFkKCk7ICAgLy8gQ3JlYXRlcyB0aGUgdGhyZWFkIGFzIG5lZWRlZCwgYnV0
IG5vdCBpZiBpdCBoYXMgYmVlbiBhbHJlYWR5IHRlcm1pbmF0ZWQuCi0gICAgdm9pZCBzZXRIYXNP
cGVuRGF0YWJhc2VzKCkgeyBtX2hhc09wZW5EYXRhYmFzZXMgPSB0cnVlOyB9Ci0gICAgYm9vbCBo
YXNPcGVuRGF0YWJhc2VzKCkgeyByZXR1cm4gbV9oYXNPcGVuRGF0YWJhc2VzOyB9Ci0gICAgdm9p
ZCBzdG9wRGF0YWJhc2VzKCk7Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIHNldFVzaW5nR2VvbG9j
YXRpb24oYm9vbCBmKSB7IG1fdXNpbmdHZW9sb2NhdGlvbiA9IGY7IH0KLSAgICBib29sIHVzaW5n
R2VvbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3VzaW5nR2VvbG9jYXRpb247IH07Ci0KLSNp
ZiBFTkFCTEUoV01MKQotICAgIHZvaWQgc2V0Q29udGFpbnNXTUxDb250ZW50KGJvb2wgdmFsdWUp
IHsgbV9jb250YWluc1dNTENvbnRlbnQgPSB2YWx1ZTsgfQotICAgIGJvb2wgY29udGFpbnNXTUxD
b250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc1dNTENvbnRlbnQ7IH0KLQotICAgIHZv
aWQgcmVzZXRXTUxQYWdlU3RhdGUoKTsKLSAgICB2b2lkIGluaXRpYWxpemVXTUxQYWdlU3RhdGUo
KTsKLSNlbmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBjbGVhclhNTFZlcnNpb24oKSB7IG1f
eG1sVmVyc2lvbiA9IFN0cmluZygpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCB1cGRhdGVUaXRs
ZSgpOwotICAgIHZvaWQgcmVtb3ZlQWxsRGlzY29ubmVjdGVkTm9kZUV2ZW50TGlzdGVuZXJzKCk7
Ci0gICAgdm9pZCB1cGRhdGVGb2N1c0FwcGVhcmFuY2VUaW1lckZpcmVkKFRpbWVyPERvY3VtZW50
PiopOwotICAgIHZvaWQgdXBkYXRlQmFzZVVSTCgpOwotCi0gICAgdm9pZCBjYWNoZURvY3VtZW50
RWxlbWVudCgpIGNvbnN0OwotCiAgICAgUmVuZGVyT2JqZWN0KiBtX3NhdmVkUmVuZGVyZXI7CiAg
ICAgaW50IG1fc2VjdXJlRm9ybXM7CiAgICAgCkBAIC0xMTA2LDEwICsxMDk5LDYgQEAgcHJpdmF0
ZToKIAogICAgIHVuc2lnbmVkIG1fbnVtTm9kZUxpc3RDYWNoZXM7CiAKLXB1YmxpYzoKLSAgICB0
eXBlZGVmIEhhc2hNYXA8V2ViQ29yZTo6Tm9kZSosIEpTTm9kZSo+IEpTV3JhcHBlckNhY2hlOwot
ICAgIEpTV3JhcHBlckNhY2hlJiB3cmFwcGVyQ2FjaGUoKSB7IHJldHVybiBtX3dyYXBwZXJDYWNo
ZTsgfQotcHJpdmF0ZToKICAgICBKU1dyYXBwZXJDYWNoZSBtX3dyYXBwZXJDYWNoZTsKIAogI2lm
IEVOQUJMRShEQVRBQkFTRSkKQEAgLTExMzQsNyArMTEyMyw3IEBAIGlubGluZSBib29sIERvY3Vt
ZW50OjpoYXNFbGVtZW50V2l0aElkKEEKICAgICAKIGlubGluZSBib29sIE5vZGU6OmlzRG9jdW1l
bnROb2RlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGhpcyA9PSBtX2RvY3VtZW50LmdldCgpOwor
ICAgIHJldHVybiB0aGlzID09IG1fZG9jdW1lbnQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50RnJhZ21lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL0RvY3VtZW50RnJhZ21lbnQuY3BwCShyZXZpc2lvbiA0Njk5OCkKKysrIFdl
YkNvcmUvZG9tL0RvY3VtZW50RnJhZ21lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsx
LDggQEAKLS8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlv
biBmb3IgS0RFLgotICoKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlz
dG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJA
a2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsMTMgKzIx
LDE4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotCiAjaW5jbHVkZSAiRG9jdW1lbnRG
cmFnbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURvY3VtZW50RnJhZ21lbnQ6OkRv
Y3VtZW50RnJhZ21lbnQoRG9jdW1lbnQgKmRvYykgOiBDb250YWluZXJOb2RlKGRvYykKK2lubGlu
ZSBEb2N1bWVudEZyYWdtZW50OjpEb2N1bWVudEZyYWdtZW50KERvY3VtZW50KiBkb2N1bWVudCkK
KyAgICA6IENvbnRhaW5lck5vZGUoZG9jdW1lbnQpCit7Cit9CisKK1Bhc3NSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkK
IHsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IERvY3VtZW50RnJhZ21lbnQoZG9jdW1lbnQpKTsK
IH0KIAogU3RyaW5nIERvY3VtZW50RnJhZ21lbnQ6Om5vZGVOYW1lKCkgY29uc3QKQEAgLTQyLDcg
KzQ1LDYgQEAgTm9kZTo6Tm9kZVR5cGUgRG9jdW1lbnRGcmFnbWVudDo6bm9kZVR5cAogICAgIHJl
dHVybiBET0NVTUVOVF9GUkFHTUVOVF9OT0RFOwogfQogCi0vLyBET00gU2VjdGlvbiAxLjEuMQog
Ym9vbCBEb2N1bWVudEZyYWdtZW50OjpjaGlsZFR5cGVBbGxvd2VkKE5vZGVUeXBlIHR5cGUpCiB7
CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC02MCw3ICs2Miw3IEBAIGJvb2wgRG9jdW1lbnRGcmFn
bWVudDo6Y2hpbGRUeXBlQWxsb3dlZCgKIAogUGFzc1JlZlB0cjxOb2RlPiBEb2N1bWVudEZyYWdt
ZW50OjpjbG9uZU5vZGUoYm9vbCBkZWVwKQogewotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBjbG9uZSA9IG5ldyBEb2N1bWVudEZyYWdtZW50KGRvY3VtZW50KCkpOworICAgIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBjbG9uZSA9IGNyZWF0ZShkb2N1bWVudCgpKTsKICAgICBpZiAoZGVl
cCkKICAgICAgICAgY2xvbmVDaGlsZE5vZGVzKGNsb25lLmdldCgpKTsKICAgICByZXR1cm4gY2xv
bmUucmVsZWFzZSgpOwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnRGcmFnbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50RnJhZ21lbnQuaAkocmV2aXNpb24gNDY5OTgp
CisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudEZyYWdtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTAgKzEsOCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50
YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlz
dG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJA
a2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsNiArMzAs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50RnJhZ21lbnQgOiBwdWJs
aWMgQ29udGFpbmVyTm9kZSB7CiBwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gY3JlYXRlKERvY3VtZW50Kik7CisKK3ByaXZhdGU6CiAgICAgRG9jdW1lbnRG
cmFnbWVudChEb2N1bWVudCopOwogCiAgICAgdmlydHVhbCBTdHJpbmcgbm9kZU5hbWUoKSBjb25z
dDsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vRG9jdW1lbnRUeXBlLmNwcAkocmV2aXNpb24gNDY5OTgpCisrKyBXZWJDb3JlL2Rv
bS9Eb2N1bWVudFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjksMTEgKzI5LDEx
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRG9jdW1lbnRUeXBlOjpEb2N1bWVudFR5cGUo
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIG4sIGNvbnN0IFN0cmluZyYgcCwgY29u
c3QgU3RyaW5nJiBzKQotICAgIDogTm9kZShkb2N1bWVudCkKLSAgICAsIG1fbmFtZShuKQotICAg
ICwgbV9wdWJsaWNJZChwKQotICAgICwgbV9zeXN0ZW1JZChzKQorRG9jdW1lbnRUeXBlOjpEb2N1
bWVudFR5cGUoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgcHVibGljSWQsIGNvbnN0IFN0cmluZyYgc3lzdGVtSWQpCisgICAgOiBOb2RlKGRvY3Vt
ZW50LCBDcmVhdGVPdGhlcikKKyAgICAsIG1fbmFtZShuYW1lKQorICAgICwgbV9wdWJsaWNJZChw
dWJsaWNJZCkKKyAgICAsIG1fc3lzdGVtSWQoc3lzdGVtSWQpCiB7CiB9CiAKQEAgLTU0LDcgKzU0
LDcgQEAgTm9kZTo6Tm9kZVR5cGUgRG9jdW1lbnRUeXBlOjpub2RlVHlwZSgpIAogCiBQYXNzUmVm
UHRyPE5vZGU+IERvY3VtZW50VHlwZTo6Y2xvbmVOb2RlKGJvb2wgLypkZWVwKi8pCiB7Ci0gICAg
cmV0dXJuIG5ldyBEb2N1bWVudFR5cGUoZG9jdW1lbnQoKSwgbV9uYW1lLCBtX3B1YmxpY0lkLCBt
X3N5c3RlbUlkKTsKKyAgICByZXR1cm4gY3JlYXRlKGRvY3VtZW50KCksIG1fbmFtZSwgbV9wdWJs
aWNJZCwgbV9zeXN0ZW1JZCk7CiB9CiAKIHZvaWQgRG9jdW1lbnRUeXBlOjppbnNlcnRlZEludG9E
b2N1bWVudCgpCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudFR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Eb2N1bWVudFR5cGUuaAkocmV2aXNpb24gNDY5OTgpCisrKyBXZWJDb3Jl
L2RvbS9Eb2N1bWVudFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENv
cHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAg
IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAg
IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM0LDcgKzM0LDcg
QEAgY2xhc3MgRG9jdW1lbnRUeXBlIDogcHVibGljIE5vZGUgewogcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERvY3VtZW50VHlwZT4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHB1YmxpY0lkLCBjb25zdCBTdHJpbmcmIHN5
c3RlbUlkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBEb2N1bWVudFR5cGUoZG9jdW1lbnQs
IG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
RG9jdW1lbnRUeXBlKGRvY3VtZW50LCBuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpKTsKICAgICB9
CiAKICAgICBOYW1lZE5vZGVNYXAqIGVudGl0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9lbnRpdGll
cy5nZXQoKTsgfQpJbmRleDogV2ViQ29yZS9kb20vRWRpdGluZ1RleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0VkaXRpbmdUZXh0LmNwcAkocmV2aXNpb24gNDY5OTgpCisrKyBXZWJD
b3JlL2RvbS9FZGl0aW5nVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSw1IEBACi0v
KioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtE
RS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
LSAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykK
LSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLgorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwMywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI0LDI0ICsyMCwxOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkVkaXRpbmdUZXh0LmgiCiAKLS8vIEZJWE1FOiBkb2VzIHRoaXMgcmVhbGx5IHJl
cXVpcmUgYSBjbGFzcz8gUGVyaGFwcyBhbnkgVGV4dCBub2RlCi0vLyBpbnNpZGUgYW4gZWRpdGFi
bGUgZWxlbWVudCBzaG91bGQgaGF2ZSB0aGUgImFsd2F5cyBjcmVhdGUgYSByZW5kZXJlciIKLS8v
IGJlaGF2aW9yLgorLy8gRklYTUU6IERvZXMgdGhpcyByZWFsbHkgcmVxdWlyZSBhIGNsYXNzPyBQ
ZXJoYXBzIGluc3RlYWQgYW55IHRleHQgbm9kZQorLy8gaW5zaWRlIGFuIGVkaXRhYmxlIGVsZW1l
bnQgY291bGQgaGF2ZSB0aGUgImFsd2F5cyBjcmVhdGUgYSByZW5kZXJlciIgYmVoYXZpb3IuCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRWRpdGluZ1RleHQ6OkVkaXRpbmdUZXh0KERvY3VtZW50
ICppbXBsLCBjb25zdCBTdHJpbmcgJnRleHQpCi0gICAgOiBUZXh0KGltcGwsIHRleHQpCi17Ci19
Ci0KLUVkaXRpbmdUZXh0OjpFZGl0aW5nVGV4dChEb2N1bWVudCAqaW1wbCkKLSAgICA6IFRleHQo
aW1wbCkKK2lubGluZSBFZGl0aW5nVGV4dDo6RWRpdGluZ1RleHQoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBTdHJpbmcmIGRhdGEpCisgICAgOiBUZXh0KGRvY3VtZW50LCBkYXRhKQogewogfQog
Ci1FZGl0aW5nVGV4dDo6fkVkaXRpbmdUZXh0KCkKK1Bhc3NSZWZQdHI8RWRpdGluZ1RleHQ+IEVk
aXRpbmdUZXh0OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGRhdGEp
CiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFZGl0aW5nVGV4dChkb2N1bWVudCwgZGF0YSkp
OwogfQogCiBib29sIEVkaXRpbmdUZXh0OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKikK
SW5kZXg6IFdlYkNvcmUvZG9tL0VkaXRpbmdUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vRWRpdGluZ1RleHQuaAkocmV2aXNpb24gNDY5OTgpCisrKyBXZWJDb3JlL2RvbS9FZGl0aW5n
VGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEsNSBAQAogLyoKLSAqIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCi0gKiBDb3B5cmln
aHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykg
MTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzEs
MTEgKzI3LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRWRpdGluZ1RleHQgOiBw
dWJsaWMgVGV4dCB7CiBwdWJsaWM6Ci0gICAgRWRpdGluZ1RleHQoRG9jdW1lbnQgKmltcGwsIGNv
bnN0IFN0cmluZyAmdGV4dCk7Ci0gICAgRWRpdGluZ1RleHQoRG9jdW1lbnQgKmltcGwpOwotICAg
IHZpcnR1YWwgfkVkaXRpbmdUZXh0KCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RWRpdGluZ1Rl
eHQ+IGNyZWF0ZShEb2N1bWVudCosIGNvbnN0IFN0cmluZyYpOwogCitwcml2YXRlOgogICAgIHZp
cnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICopOworCisgICAgRWRpdGlu
Z1RleHQoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA0Njk5OCkKKysrIFdlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgWE1MTmFtZXM7
CiAgICAgCi1FbGVtZW50OjpFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiBkb2MpCi0gICAgOiBDb250YWluZXJOb2RlKGRvYywgdHJ1ZSkKK0VsZW1lbnQ6OkVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQor
ICAgIDogQ29udGFpbmVyTm9kZShkb2N1bWVudCwgQ3JlYXRlRWxlbWVudFplcm9SZWZDb3VudCkK
ICAgICAsIG1fdGFnTmFtZSh0YWdOYW1lKQogewogfQpJbmRleDogV2ViQ29yZS9kb20vRW50aXR5
UmVmZXJlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbnRpdHlSZWZlcmVuY2Uu
Y3BwCShyZXZpc2lvbiA0Njk5OCkKKysrIFdlYkNvcmUvZG9tL0VudGl0eVJlZmVyZW5jZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAw
IFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjMsMTIgKzIzLDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRW50aXR5
UmVmZXJlbmNlOjpFbnRpdHlSZWZlcmVuY2UoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJp
bmcmIGVudGl0eU5hbWUpCitpbmxpbmUgRW50aXR5UmVmZXJlbmNlOjpFbnRpdHlSZWZlcmVuY2Uo
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGVudGl0eU5hbWUpCiAgICAgOiBDb250
YWluZXJOb2RlKGRvY3VtZW50KQogICAgICwgbV9lbnRpdHlOYW1lKGVudGl0eU5hbWUpCiB7CiB9
CiAKK1Bhc3NSZWZQdHI8RW50aXR5UmVmZXJlbmNlPiBFbnRpdHlSZWZlcmVuY2U6OmNyZWF0ZShE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgZW50aXR5TmFtZSkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEVudGl0eVJlZmVyZW5jZShkb2N1bWVudCwgZW50aXR5TmFtZSkpOwor
fQorCiBTdHJpbmcgRW50aXR5UmVmZXJlbmNlOjpub2RlTmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fZW50aXR5TmFtZTsKQEAgLTQxLDcgKzQ2LDcgQEAgTm9kZTo6Tm9kZVR5cGUgRW50aXR5
UmVmZXJlbmNlOjpub2RlVHlwZQogCiBQYXNzUmVmUHRyPE5vZGU+IEVudGl0eVJlZmVyZW5jZTo6
Y2xvbmVOb2RlKGJvb2wpCiB7Ci0gICAgcmV0dXJuIG5ldyBFbnRpdHlSZWZlcmVuY2UoZG9jdW1l
bnQoKSwgbV9lbnRpdHlOYW1lKTsKKyAgICByZXR1cm4gY3JlYXRlKGRvY3VtZW50KCksIG1fZW50
aXR5TmFtZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2RvbS9FbnRpdHlS
ZWZlcmVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbnRpdHlSZWZlcmVuY2UuaAko
cmV2aXNpb24gNDY5OTgpCisrKyBXZWJDb3JlL2RvbS9FbnRpdHlSZWZlcmVuY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMTMgKzI4LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
RW50aXR5UmVmZXJlbmNlIDogcHVibGljIENvbnRhaW5lck5vZGUgewogcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEVudGl0eVJlZmVyZW5jZT4gY3JlYXRlKERvY3VtZW50KiwgY29uc3Qg
U3RyaW5nJiBlbnRpdHlOYW1lKTsKKworcHJpdmF0ZToKICAgICBFbnRpdHlSZWZlcmVuY2UoRG9j
dW1lbnQqLCBjb25zdCBTdHJpbmcmIGVudGl0eU5hbWUpOwogCiAgICAgdmlydHVhbCBTdHJpbmcg
bm9kZU5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIE5vZGVUeXBlIG5vZGVUeXBlKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IGNsb25lTm9kZShib29sIGRlZXApOwogCi1w
cml2YXRlOgogICAgIFN0cmluZyBtX2VudGl0eU5hbWU7CiB9OwogCkluZGV4OiBXZWJDb3JlL2Rv
bS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24g
NDY5OTgpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMyLDgg
KzMzMiw2OSBAQCBOb2RlOjpTdHlsZUNoYW5nZSBOb2RlOjpkaWZmKGNvbnN0IFJlbmRlCiAgICAg
cmV0dXJuIGNoOwogfQogCi1Ob2RlOjpOb2RlKERvY3VtZW50KiBkb2MsIGJvb2wgaXNFbGVtZW50
LCBib29sIGlzQ29udGFpbmVyLCBib29sIGlzVGV4dCkKLSAgICA6IG1fZG9jdW1lbnQoZG9jKQor
aW5saW5lIGJvb2wgTm9kZTo6aW5pdGlhbFJlZkNvdW50KENvbnN0cnVjdGlvblR5cGUgdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBDcmVhdGVDb250YWluZXI6Cisg
ICAgICAgIGNhc2UgQ3JlYXRlRWxlbWVudDoKKyAgICAgICAgY2FzZSBDcmVhdGVPdGhlcjoKKyAg
ICAgICAgY2FzZSBDcmVhdGVUZXh0OgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNh
c2UgQ3JlYXRlRWxlbWVudFplcm9SZWZDb3VudDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMTsKK30KKworaW5saW5l
IGJvb2wgTm9kZTo6aXNDb250YWluZXIoQ29uc3RydWN0aW9uVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIENyZWF0ZUNvbnRhaW5lcjoKKyAgICAgICAgY2Fz
ZSBDcmVhdGVFbGVtZW50OgorICAgICAgICBjYXNlIENyZWF0ZUVsZW1lbnRaZXJvUmVmQ291bnQ6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBDcmVhdGVPdGhlcjoKKyAg
ICAgICAgY2FzZSBDcmVhdGVUZXh0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGlu
ZSBib29sIE5vZGU6OmlzRWxlbWVudChDb25zdHJ1Y3Rpb25UeXBlIHR5cGUpCit7CisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgQ3JlYXRlQ29udGFpbmVyOgorICAgICAgICBjYXNl
IENyZWF0ZU90aGVyOgorICAgICAgICBjYXNlIENyZWF0ZVRleHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGNhc2UgQ3JlYXRlRWxlbWVudDoKKyAgICAgICAgY2FzZSBDcmVh
dGVFbGVtZW50WmVyb1JlZkNvdW50OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5l
IGJvb2wgTm9kZTo6aXNUZXh0KENvbnN0cnVjdGlvblR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgY2FzZSBDcmVhdGVDb250YWluZXI6CisgICAgICAgIGNhc2UgQ3Jl
YXRlRWxlbWVudDoKKyAgICAgICAgY2FzZSBDcmVhdGVFbGVtZW50WmVyb1JlZkNvdW50OgorICAg
ICAgICBjYXNlIENyZWF0ZU90aGVyOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBjYXNlIENyZWF0ZVRleHQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitOb2RlOjpOb2Rl
KERvY3VtZW50KiBkb2N1bWVudCwgQ29uc3RydWN0aW9uVHlwZSB0eXBlKQorICAgIDogVHJlZVNo
YXJlZDxOb2RlPihpbml0aWFsUmVmQ291bnQodHlwZSkpCisgICAgLCBtX2RvY3VtZW50KGRvY3Vt
ZW50KQogICAgICwgbV9wcmV2aW91cygwKQogICAgICwgbV9uZXh0KDApCiAgICAgLCBtX3JlbmRl
cmVyKDApCkBAIC0zNTAsMjUgKzQxMSwyNyBAQCBOb2RlOjpOb2RlKERvY3VtZW50KiBkb2MsIGJv
b2wgaXNFbGVtZW50CiAgICAgLCBtX2luRGV0YWNoKGZhbHNlKQogICAgICwgbV9pblN1YnRyZWVN
YXJrKGZhbHNlKQogICAgICwgbV9oYXNSYXJlRGF0YShmYWxzZSkKLSAgICAsIG1faXNFbGVtZW50
KGlzRWxlbWVudCkKLSAgICAsIG1faXNDb250YWluZXIoaXNDb250YWluZXIpCi0gICAgLCBtX2lz
VGV4dChpc1RleHQpCisgICAgLCBtX2lzRWxlbWVudChpc0VsZW1lbnQodHlwZSkpCisgICAgLCBt
X2lzQ29udGFpbmVyKGlzQ29udGFpbmVyKHR5cGUpKQorICAgICwgbV9pc1RleHQoaXNUZXh0KHR5
cGUpKQogICAgICwgbV9wYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZCh0cnVlKQotI2lmIEVOQUJMRShT
VkcpCi0gICAgLCBtX2FyZVNWR0F0dHJpYnV0ZXNWYWxpZCh0cnVlKQotI2VuZGlmCiAgICAgLCBt
X2lzU3R5bGVBdHRyaWJ1dGVWYWxpZCh0cnVlKQogICAgICwgbV9zeW5jaHJvbml6aW5nU3R5bGVB
dHRyaWJ1dGUoZmFsc2UpCiAjaWYgRU5BQkxFKFNWRykKKyAgICAsIG1fYXJlU1ZHQXR0cmlidXRl
c1ZhbGlkKHRydWUpCiAgICAgLCBtX3N5bmNocm9uaXppbmdTVkdBdHRyaWJ1dGVzKGZhbHNlKQog
I2VuZGlmCiB7CisgICAgaWYgKG1fZG9jdW1lbnQpCisgICAgICAgIG1fZG9jdW1lbnQtPnNlbGZP
bmx5UmVmKCk7CisKICNpZm5kZWYgTkRFQlVHCiAgICAgaWYgKHNob3VsZElnbm9yZUxlYWtzKQog
ICAgICAgICBpZ25vcmVTZXQuYWRkKHRoaXMpOwogICAgIGVsc2UKICAgICAgICAgbm9kZUNvdW50
ZXIuaW5jcmVtZW50KCk7CiAjZW5kaWYKKwogI2lmIERVTVBfTk9ERV9TVEFUSVNUSUNTCiAgICAg
bGl2ZU5vZGVTZXQuYWRkKHRoaXMpOwogI2VuZGlmCkBAIC00MTEsNiArNDc0LDkgQEAgTm9kZTo6
fk5vZGUoKQogICAgICAgICBtX3ByZXZpb3VzLT5zZXROZXh0U2libGluZygwKTsKICAgICBpZiAo
bV9uZXh0KQogICAgICAgICBtX25leHQtPnNldFByZXZpb3VzU2libGluZygwKTsKKworICAgIGlm
IChtX2RvY3VtZW50KQorICAgICAgICBtX2RvY3VtZW50LT5zZWxmT25seURlcmVmKCk7CiB9CiAK
ICNpZmRlZiBOREVCVUcKQEAgLTQ0NSwxNCArNTExLDE5IEBAIHZvaWQgTm9kZTo6c2V0RG9jdW1l
bnQoRG9jdW1lbnQqIGRvY3VtZW4KICAgICBpZiAoaW5Eb2N1bWVudCgpIHx8IG1fZG9jdW1lbnQg
PT0gZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAorICAgIGRvY3VtZW50LT5zZWxmT25seVJl
ZigpOworCiAgICAgc2V0V2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnRXYXNDYWxsZWQoZmFsc2Up
OwogICAgIHdpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiAgICAgQVNTRVJUKHdpbGxNb3Zl
VG9OZXdPd25lckRvY3VtZW50V2FzQ2FsbGVkKTsKIAogI2lmIFVTRShKU0MpCi0gICAgdXBkYXRl
RE9NTm9kZURvY3VtZW50KHRoaXMsIG1fZG9jdW1lbnQuZ2V0KCksIGRvY3VtZW50KTsKKyAgICB1
cGRhdGVET01Ob2RlRG9jdW1lbnQodGhpcywgbV9kb2N1bWVudCwgZG9jdW1lbnQpOwogI2VuZGlm
CiAKKyAgICBpZiAobV9kb2N1bWVudCkKKyAgICAgICAgbV9kb2N1bWVudC0+c2VsZk9ubHlEZXJl
ZigpOworCiAgICAgbV9kb2N1bWVudCA9IGRvY3VtZW50OwogCiAgICAgc2V0RGlkTW92ZVRvTmV3
T3duZXJEb2N1bWVudFdhc0NhbGxlZChmYWxzZSk7CkBAIC0xODk1LDExICsxOTY2LDExIEBAIHZv
aWQgTm9kZTo6YXBwZW5kVGV4dENvbnRlbnQoYm9vbCBjb252ZXIKICAgICAgICAgY2FzZSBURVhU
X05PREU6CiAgICAgICAgIGNhc2UgQ0RBVEFfU0VDVElPTl9OT0RFOgogICAgICAgICBjYXNlIENP
TU1FTlRfTk9ERToKLSAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0
IENoYXJhY3RlckRhdGEqPih0aGlzKS0+Q2hhcmFjdGVyRGF0YTo6bm9kZVZhbHVlKCkpOworICAg
ICAgICAgICAgY29udGVudC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgQ2hhcmFjdGVyRGF0YSo+
KHRoaXMpLT5kYXRhKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQUk9D
RVNTSU5HX0lOU1RSVUNUSU9OX05PREU6Ci0gICAgICAgICAgICBjb250ZW50LmFwcGVuZChzdGF0
aWNfY2FzdDxjb25zdCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qPih0aGlzKS0+UHJvY2Vzc2luZ0lu
c3RydWN0aW9uOjpub2RlVmFsdWUoKSk7CisgICAgICAgICAgICBjb250ZW50LmFwcGVuZChzdGF0
aWNfY2FzdDxjb25zdCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qPih0aGlzKS0+ZGF0YSgpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICAgICAgY2FzZSBFTEVNRU5UX05PREU6Cklu
ZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5o
CShyZXZpc2lvbiA0Njk5OCkKKysrIFdlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNyArMjUsNiBAQAogI2lmbmRlZiBOb2RlX2gKICNkZWZpbmUgTm9kZV9oCiAKLSNpbmNs
dWRlICJEb2NQdHIuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIktVUkxI
YXNoLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAgLTEwOCw3ICsxMDcsNiBAQCBw
dWJsaWM6CiAgICAgZW51bSBTdHlsZUNoYW5nZSB7IE5vQ2hhbmdlLCBOb0luaGVyaXQsIEluaGVy
aXQsIERldGFjaCwgRm9yY2UgfTsgICAgCiAgICAgc3RhdGljIFN0eWxlQ2hhbmdlIGRpZmYoY29u
c3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSopOwogCi0gICAgTm9kZShEb2N1bWVu
dCosIGJvb2wgaXNFbGVtZW50ID0gZmFsc2UsIGJvb2wgaXNDb250YWluZXIgPSBmYWxzZSwgYm9v
bCBpc1RleHQgPSBmYWxzZSk7CiAgICAgdmlydHVhbCB+Tm9kZSgpOwogCiAgICAgLy8gRE9NIG1l
dGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBOb2RlCkBAIC0zMTYsNyArMzE0LDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgQVNTRVJUKHRoaXMpOwogICAgICAgICBBU1NFUlQobV9kb2N1bWVudCB8
fCAobm9kZVR5cGUoKSA9PSBET0NVTUVOVF9UWVBFX05PREUgJiYgIWluRG9jdW1lbnQoKSkpOwot
ICAgICAgICByZXR1cm4gbV9kb2N1bWVudC5nZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fZG9jdW1l
bnQ7CiAgICAgfQogICAgIHZvaWQgc2V0RG9jdW1lbnQoRG9jdW1lbnQqKTsKIApAQCAtNDk5LDE5
ICs0OTcsNiBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBzaG9ydCBjb21wYXJlRG9jdW1lbnRQ
b3NpdGlvbihOb2RlKik7CiAKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVU
b05ld093bmVyRG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvTmV3T3duZXJE
b2N1bWVudCgpOwotICAgIAotICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNvdXJjZUF0dHJpYnV0
ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdCB7IH0KLSAgICB2b2lkIHNldFRhYkluZGV4
RXhwbGljaXRseShzaG9ydCk7Ci0gICAgCi0gICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1faGFzUmFyZURhdGE7IH0KLSAgICAKLSAgICBOb2RlUmFyZURhdGEqIHJhcmVEYXRh
KCkgY29uc3Q7Ci0gICAgTm9kZVJhcmVEYXRhKiBlbnN1cmVSYXJlRGF0YSgpOwotCi1wdWJsaWM6
CiAgICAgdmlydHVhbCBOb2RlKiB0b05vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAKICAgICB2aXJ0
dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25z
dDsKQEAgLTY1MSwxNCArNjM2LDM1IEBAIHB1YmxpYzoKIAogICAgIHVzaW5nIFRyZWVTaGFyZWQ8
Tm9kZT46OnJlZjsKICAgICB1c2luZyBUcmVlU2hhcmVkPE5vZGU+OjpkZXJlZjsKLSAKKworcHJv
dGVjdGVkOgorICAgIC8vIENyZWF0ZUVsZW1lbnRaZXJvUmVmQ291bnQgaXMgZGVwcmVjYXRlZCBh
bmQgY2FuIGJlIHJlbW92ZWQgb25jZSB3ZSBjb252ZXJ0IGFsbCBlbGVtZW50CisgICAgLy8gY2xh
c3NlcyB0byBzdGFydCB3aXRoIGEgcmVmZXJlbmNlIGNvdW50IG9mIDEuCisgICAgZW51bSBDb25z
dHJ1Y3Rpb25UeXBlIHsgQ3JlYXRlQ29udGFpbmVyLCBDcmVhdGVFbGVtZW50LCBDcmVhdGVPdGhl
ciwgQ3JlYXRlVGV4dCwgQ3JlYXRlRWxlbWVudFplcm9SZWZDb3VudCB9OworICAgIE5vZGUoRG9j
dW1lbnQqLCBDb25zdHJ1Y3Rpb25UeXBlKTsKKworICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRv
TmV3T3duZXJEb2N1bWVudCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9OZXdPd25lckRv
Y3VtZW50KCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmlidXRl
VVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0IHsgfQorICAgIHZvaWQgc2V0VGFiSW5kZXhF
eHBsaWNpdGx5KHNob3J0KTsKKyAgICAKKyAgICBib29sIGhhc1JhcmVEYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNSYXJlRGF0YTsgfQorICAgIAorICAgIE5vZGVSYXJlRGF0YSogcmFyZURhdGEo
KSBjb25zdDsKKyAgICBOb2RlUmFyZURhdGEqIGVuc3VyZVJhcmVEYXRhKCk7CisKIHByaXZhdGU6
CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbFJlZkNvdW50KENvbnN0cnVjdGlvblR5cGUpOworICAg
IHN0YXRpYyBib29sIGlzQ29udGFpbmVyKENvbnN0cnVjdGlvblR5cGUpOworICAgIHN0YXRpYyBi
b29sIGlzRWxlbWVudChDb25zdHJ1Y3Rpb25UeXBlKTsKKyAgICBzdGF0aWMgYm9vbCBpc1RleHQo
Q29uc3RydWN0aW9uVHlwZSk7CisKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7
IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7
IH0KIAogICAgIHZvaWQgcmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnNTbG93Q2FzZSgpOwogCi1wcml2
YXRlOgogICAgIHZpcnR1YWwgTm9kZVJhcmVEYXRhKiBjcmVhdGVSYXJlRGF0YSgpOwogICAgIE5v
ZGUqIGNvbnRhaW5lckNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAgICAgdW5zaWdu
ZWQgY29udGFpbmVyQ2hpbGROb2RlQ291bnQoKSBjb25zdDsKQEAgLTY3Niw3ICs2ODIsNyBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCBhcHBlbmRUZXh0Q29udGVudChib29sIGNvbnZlcnRCUnNUb05l
d2xpbmVzLCBTdHJpbmdCdWlsZGVyJikgY29uc3Q7CiAKLSAgICBEb2NQdHI8RG9jdW1lbnQ+IG1f
ZG9jdW1lbnQ7CisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAgTm9kZSogbV9wcmV2aW91
czsKICAgICBOb2RlKiBtX25leHQ7CiAgICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRlcmVyOwpAQCAt
Njk5LDIyICs3MDUsMTYgQEAgcHJpdmF0ZToKICAgICBjb25zdCBib29sIG1faXNUZXh0IDogMTsK
IAogcHJvdGVjdGVkOgotICAgIC8vIFRoZXNlIGJpdHMgYXJlIHVzZWQgYnkgdGhlIEVsZW1lbnQg
ZGVyaXZlZCBjbGFzcywgcHVsbGVkIHVwIGhlcmUgc28gdGhleSBjYW4KKyAgICAvLyBUaGVzZSBi
aXRzIGFyZSB1c2VkIGJ5IGRlcml2ZWQgY2xhc3NlcywgcHVsbGVkIHVwIGhlcmUgc28gdGhleSBj
YW4KICAgICAvLyBiZSBzdG9yZWQgaW4gdGhlIHNhbWUgbWVtb3J5IHdvcmQgYXMgdGhlIE5vZGUg
Yml0cyBhYm92ZS4KLSAgICBib29sIG1fcGFyc2luZ0NoaWxkcmVuRmluaXNoZWQgOiAxOwotI2lm
IEVOQUJMRShTVkcpCi0gICAgbXV0YWJsZSBib29sIG1fYXJlU1ZHQXR0cmlidXRlc1ZhbGlkIDog
MTsKLSNlbmRpZgogCi0gICAgLy8gVGhlc2UgYml0cyBhcmUgdXNlZCBieSB0aGUgU3R5bGVkRWxl
bWVudCBkZXJpdmVkIGNsYXNzLCBhbmQgbGl2ZSBoZXJlIGZvciB0aGUKLSAgICAvLyBzYW1lIHJl
YXNvbiBhcyBhYm92ZS4KLSAgICBtdXRhYmxlIGJvb2wgbV9pc1N0eWxlQXR0cmlidXRlVmFsaWQg
OiAxOwotICAgIG11dGFibGUgYm9vbCBtX3N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSA6IDE7
CisgICAgYm9vbCBtX3BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkIDogMTsgLy8gRWxlbWVudAorICAg
IG11dGFibGUgYm9vbCBtX2lzU3R5bGVBdHRyaWJ1dGVWYWxpZCA6IDE7IC8vIFN0eWxlZEVsZW1l
bnQKKyAgICBtdXRhYmxlIGJvb2wgbV9zeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUgOiAxOyAv
LyBTdHlsZWRFbGVtZW50CiAKICNpZiBFTkFCTEUoU1ZHKQotICAgIC8vIFRoaXMgYml0IGlzIHVz
ZWQgYnkgdGhlIFNWR0VsZW1lbnQgZGVyaXZlZCBjbGFzcywgYW5kIGxpdmVzIGhlcmUgZm9yIHRo
ZSBzYW1lCi0gICAgLy8gcmVhc29uIGFzIGFib3ZlLgotICAgIG11dGFibGUgYm9vbCBtX3N5bmNo
cm9uaXppbmdTVkdBdHRyaWJ1dGVzIDogMTsKKyAgICBtdXRhYmxlIGJvb2wgbV9hcmVTVkdBdHRy
aWJ1dGVzVmFsaWQgOiAxOyAvLyBFbGVtZW50CisgICAgbXV0YWJsZSBib29sIG1fc3luY2hyb25p
emluZ1NWR0F0dHJpYnV0ZXMgOiAxOyAvLyBTVkdFbGVtZW50CiAjZW5kaWYKIAogICAgIC8vIDEx
IGJpdHMgcmVtYWluaW5nCkluZGV4OiBXZWJDb3JlL2RvbS9Ob3RhdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vTm90YXRpb24uY3BwCShyZXZpc2lvbiA0Njk5OCkKKysrIFdlYkNv
cmUvZG9tL05vdGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDYgQEAKLS8qKgot
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgot
ICoKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkK
LSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMTksMTcgKzE3LDE0IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAogICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KKwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIk5vdGF0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTm90YXRpb246Ok5vdGF0
aW9uKERvY3VtZW50KiBkb2MpIDogQ29udGFpbmVyTm9kZShkb2MpCi17Ci19Ci0KLU5vdGF0aW9u
OjpOb3RhdGlvbihEb2N1bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgcHVibGljSWQsIGNvbnN0IFN0cmluZyYgc3lzdGVtSWQpCi0gICAgOiBDb250YWluZXJOb2Rl
KGRvYykKK05vdGF0aW9uOjpOb3RhdGlvbihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBwdWJsaWNJZCwgY29uc3QgU3RyaW5nJiBzeXN0ZW1JZCkK
KyAgICA6IENvbnRhaW5lck5vZGUoZG9jdW1lbnQpCiAgICAgLCBtX25hbWUobmFtZSkKICAgICAs
IG1fcHVibGljSWQocHVibGljSWQpCiAgICAgLCBtX3N5c3RlbUlkKHN5c3RlbUlkKQpAQCAtNTIs
NyArNDcsNiBAQCBQYXNzUmVmUHRyPE5vZGU+IE5vdGF0aW9uOjpjbG9uZU5vZGUoYm9vCiAgICAg
cmV0dXJuIDA7CiB9CiAKLS8vIERPTSBTZWN0aW9uIDEuMS4xCiBib29sIE5vdGF0aW9uOjpjaGls
ZFR5cGVBbGxvd2VkKE5vZGVUeXBlKQogewogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFdlYkNv
cmUvZG9tL05vdGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm90YXRpb24uaAko
cmV2aXNpb24gNDY5OTgpCisrKyBXZWJDb3JlL2RvbS9Ob3RhdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDggKzEsNiBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1w
bGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgUGV0ZXIgS2Vs
bHkgKHBta0Bwb3N0LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMjYgKzIyLDI1IEBACiAjaWZuZGVm
IE5vdGF0aW9uX2gKICNkZWZpbmUgTm90YXRpb25faAogCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQuaCIKICNpbmNsdWRlICJDb250YWluZXJOb2RlLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorLy8gRklYTUU6IFRoaXMgY2xhc3MgaXMgbmV2ZXIgaW5zdGFudGlhdGVkLiBNYXli
ZSBpdCBzaG91bGQgYmUgcmVtb3ZlZC4KKwogY2xhc3MgTm90YXRpb24gOiBwdWJsaWMgQ29udGFp
bmVyTm9kZSB7CiBwdWJsaWM6Ci0gICAgTm90YXRpb24oRG9jdW1lbnQqKTsKLSAgICBOb3RhdGlv
bihEb2N1bWVudCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBwdWJsaWNJZCwg
Y29uc3QgU3RyaW5nJiBzeXN0ZW1JZCk7CisgICAgY29uc3QgU3RyaW5nJiBwdWJsaWNJZCgpIGNv
bnN0IHsgcmV0dXJuIG1fcHVibGljSWQ7IH0KKyAgICBjb25zdCBTdHJpbmcmIHN5c3RlbUlkKCkg
Y29uc3QgeyByZXR1cm4gbV9zeXN0ZW1JZDsgfQogCi0gICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRy
aWJ1dGVzIGZvciBOb3RhdGlvbgotICAgIFN0cmluZyBwdWJsaWNJZCgpIGNvbnN0IHsgcmV0dXJu
IG1fcHVibGljSWQ7IH0KLSAgICBTdHJpbmcgc3lzdGVtSWQoKSBjb25zdCB7IHJldHVybiBtX3N5
c3RlbUlkOyB9Citwcml2YXRlOgorICAgIE5vdGF0aW9uKERvY3VtZW50KiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHB1YmxpY0lkLCBjb25zdCBTdHJpbmcmIHN5c3RlbUlkKTsK
IAogICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCBOb2Rl
VHlwZSBub2RlVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlPiBjbG9u
ZU5vZGUoYm9vbCBkZWVwKTsKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZChOb2Rl
VHlwZSk7CiAKLXByaXZhdGU6CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBTdHJpbmcgbV9wdWJs
aWNJZDsKICAgICBTdHJpbmcgbV9zeXN0ZW1JZDsKSW5kZXg6IFdlYkNvcmUvZG9tL1Byb2Nlc3Np
bmdJbnN0cnVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLmNwcAkocmV2aXNpb24gNDY5OTgpCisrKyBXZWJDb3JlL2RvbS9Qcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM1LDggKzM1LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oRG9j
dW1lbnQqIGRvYykKLSAgICA6IENvbnRhaW5lck5vZGUoZG9jKQoraW5saW5lIFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbjo6UHJvY2Vzc2luZ0luc3RydWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkKKyAgICA6IENvbnRhaW5lck5v
ZGUoZG9jdW1lbnQpCisgICAgLCBtX3RhcmdldCh0YXJnZXQpCisgICAgLCBtX2RhdGEoZGF0YSkK
ICAgICAsIG1fY2FjaGVkU2hlZXQoMCkKICAgICAsIG1fbG9hZGluZyhmYWxzZSkKICAgICAsIG1f
YWx0ZXJuYXRlKGZhbHNlKQpAQCAtNDYsMTcgKzQ4LDkgQEAgUHJvY2Vzc2luZ0luc3RydWN0aW9u
OjpQcm9jZXNzaW5nSW5zdHJ1YwogewogfQogCi1Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OlByb2Nl
c3NpbmdJbnN0cnVjdGlvbihEb2N1bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29u
c3QgU3RyaW5nJiBkYXRhKQotICAgIDogQ29udGFpbmVyTm9kZShkb2MpCi0gICAgLCBtX3Rhcmdl
dCh0YXJnZXQpCi0gICAgLCBtX2RhdGEoZGF0YSkKLSAgICAsIG1fY2FjaGVkU2hlZXQoMCkKLSAg
ICAsIG1fbG9hZGluZyhmYWxzZSkKLSAgICAsIG1fYWx0ZXJuYXRlKGZhbHNlKQotI2lmIEVOQUJM
RShYU0xUKQotICAgICwgbV9pc1hTTChmYWxzZSkKLSNlbmRpZgorUGFzc1JlZlB0cjxQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24+IFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Y3JlYXRlKERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkKIHsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFByb2Nlc3NpbmdJbnN0cnVjdGlvbihkb2N1bWVudCwgdGFy
Z2V0LCBkYXRhKSk7CiB9CiAKIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6flByb2Nlc3NpbmdJbnN0
cnVjdGlvbigpCkBAIC05NSw4ICs4OSw5IEBAIHZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpz
ZXROb2RlVmFsdWUKIAogUGFzc1JlZlB0cjxOb2RlPiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNs
b25lTm9kZShib29sIC8qZGVlcCovKQogewotICAgIC8vICMjIyBjb3B5IG1fbG9jYWxIcmVmCi0g
ICAgcmV0dXJuIG5ldyBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oZG9jdW1lbnQoKSwgbV90YXJnZXQs
IG1fZGF0YSk7CisgICAgLy8gRklYTUU6IElzIGl0IGEgcHJvYmxlbSB0aGF0IHRoaXMgZG9lcyBu
b3QgY29weSBtX2xvY2FsSHJlZj8KKyAgICAvLyBXaGF0IGFib3V0IG90aGVyIGRhdGEgbWVtYmVy
cz8KKyAgICByZXR1cm4gY3JlYXRlKGRvY3VtZW50KCksIG1fdGFyZ2V0LCBtX2RhdGEpOwogfQog
CiAvLyBET00gU2VjdGlvbiAxLjEuMQpJbmRleDogV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9u
LmgJKHJldmlzaW9uIDQ2OTk4KQorKysgV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw2IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAo
QykgMjAwMCBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNSwxNSArMzMsMjgg
QEAgY2xhc3MgQ1NTU3R5bGVTaGVldDsKIAogY2xhc3MgUHJvY2Vzc2luZ0luc3RydWN0aW9uIDog
cHVibGljIENvbnRhaW5lck5vZGUsIHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewogcHVi
bGljOgotICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbihEb2N1bWVudCopOwotICAgIFByb2Nlc3Np
bmdJbnN0cnVjdGlvbihEb2N1bWVudCosIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJp
bmcmIGRhdGEpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4g
Y3JlYXRlKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0
YSk7CiAgICAgdmlydHVhbCB+UHJvY2Vzc2luZ0luc3RydWN0aW9uKCk7CiAKLSAgICAvLyBET00g
bWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9yIE5vdGF0aW9uCi0gICAgU3RyaW5nIHRhcmdldCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGFyZ2V0OyB9Ci0gICAgU3RyaW5nIGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2RhdGE7IH0KKyAgICBjb25zdCBTdHJpbmcmIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1f
dGFyZ2V0OyB9CisgICAgY29uc3QgU3RyaW5nJiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
OyB9CiAgICAgdm9pZCBzZXREYXRhKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIAor
ICAgIHZvaWQgc2V0Q3JlYXRlZEJ5UGFyc2VyKGJvb2wgY3JlYXRlZEJ5UGFyc2VyKSB7IG1fY3Jl
YXRlZEJ5UGFyc2VyID0gY3JlYXRlZEJ5UGFyc2VyOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZmlu
aXNoUGFyc2luZ0NoaWxkcmVuKCk7CisKKyAgICBjb25zdCBTdHJpbmcmIGxvY2FsSHJlZigpIGNv
bnN0IHsgcmV0dXJuIG1fbG9jYWxIcmVmOyB9CisgICAgU3R5bGVTaGVldCogc2hlZXQoKSBjb25z
dCB7IHJldHVybiBtX3NoZWV0LmdldCgpOyB9CisgICAgdm9pZCBzZXRDU1NTdHlsZVNoZWV0KFBh
c3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4pOworCisjaWYgRU5BQkxFKFhTTFQpCisgICAgYm9vbCBp
c1hTTCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYU0w7IH0KKyNlbmRpZgorCitwcml2YXRlOgorICAg
IFByb2Nlc3NpbmdJbnN0cnVjdGlvbihEb2N1bWVudCosIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBj
b25zdCBTdHJpbmcmIGRhdGEpOworCiAgICAgdmlydHVhbCBTdHJpbmcgbm9kZU5hbWUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIE5vZGVUeXBlIG5vZGVUeXBlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBT
dHJpbmcgbm9kZVZhbHVlKCkgY29uc3Q7CkBAIC01NSwyOCArNjYsMTggQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lk
IHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICB2b2lkIHNldENyZWF0ZWRCeVBhcnNlcihib29s
IGNyZWF0ZWRCeVBhcnNlcikgeyBtX2NyZWF0ZWRCeVBhcnNlciA9IGNyZWF0ZWRCeVBhcnNlcjsg
fQotICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKIAotICAgIC8vIE90
aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKLSAgICBTdHJpbmcgbG9jYWxIcmVmKCkgY29u
c3QgeyByZXR1cm4gbV9sb2NhbEhyZWY7IH0KLSAgICBTdHlsZVNoZWV0KiBzaGVldCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hlZXQuZ2V0KCk7IH0KICAgICB2b2lkIGNoZWNrU3R5bGVTaGVldCgpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRDU1NTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25z
dCBTdHJpbmcmIGNoYXJzZXQsIGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqKTsKICNpZiBFTkFC
TEUoWFNMVCkKICAgICB2aXJ0dWFsIHZvaWQgc2V0WFNMU3R5bGVTaGVldChjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgU3RyaW5nJiBzaGVldCk7CiAjZW5kaWYKLSAgICB2b2lkIHNldENTU1N0eWxl
U2hlZXQoUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0Pik7CisKICAgICBib29sIGlzTG9hZGluZygp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzaGVldExvYWRlZCgpOwogCi0jaWYgRU5BQkxFKFhT
TFQpCi0gICAgYm9vbCBpc1hTTCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYU0w7IH0KLSNlbmRpZgot
CiAgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNl
dDxLVVJMPiYpIGNvbnN0OwogCi1wcml2YXRlOgogICAgIHZvaWQgcGFyc2VTdHlsZVNoZWV0KGNv
bnN0IFN0cmluZyYgc2hlZXQpOwogCiAgICAgU3RyaW5nIG1fdGFyZ2V0OwpJbmRleDogV2ViQ29y
ZS9kb20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1JhbmdlLmNwcAkocmV2
aXNpb24gNDY5OTgpCisrKyBXZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU4Niw3ICs1ODYsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFJhbmdlOjpwcm9j
CiAKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQ7CiAgICAgaWYgKGFjdGlv
biA9PSBFWFRSQUNUX0NPTlRFTlRTIHx8IGFjdGlvbiA9PSBDTE9ORV9DT05URU5UUykKLSAgICAg
ICAgZnJhZ21lbnQgPSBuZXcgRG9jdW1lbnRGcmFnbWVudChtX293bmVyRG9jdW1lbnQuZ2V0KCkp
OworICAgICAgICBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShtX293bmVyRG9j
dW1lbnQuZ2V0KCkpOwogICAgIAogICAgIGVjID0gMDsKICAgICBpZiAoY29sbGFwc2VkKGVjKSkK
SW5kZXg6IFdlYkNvcmUvZG9tL1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1Rl
eHQuY3BwCShyZXZpc2lvbiA0Njk5OCkKKysrIFdlYkNvcmUvZG9tL1RleHQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM5LDIwICsz
OSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIERPTSBTZWN0aW9uIDEuMS4xCi0K
LVRleHQ6OlRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQpCi0gICAg
OiBDaGFyYWN0ZXJEYXRhKGRvY3VtZW50LCB0ZXh0LCB0cnVlKQotewotfQotCi1UZXh0OjpUZXh0
KERvY3VtZW50KiBkb2N1bWVudCkKLSAgICA6IENoYXJhY3RlckRhdGEoZG9jdW1lbnQsIHRydWUp
CitUZXh0OjpUZXh0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBkYXRhKQorICAg
IDogQ2hhcmFjdGVyRGF0YShkb2N1bWVudCwgZGF0YSwgQ3JlYXRlVGV4dCkKIHsKIH0KIAotVGV4
dDo6flRleHQoKQorUGFzc1JlZlB0cjxUZXh0PiBUZXh0OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zdCBTdHJpbmcmIGRhdGEpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0
KGRvY3VtZW50LCBkYXRhKSk7CiB9CiAKIFBhc3NSZWZQdHI8VGV4dD4gVGV4dDo6c3BsaXRUZXh0
KHVuc2lnbmVkIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC02MSwxNCArNTUsMTQgQEAg
UGFzc1JlZlB0cjxUZXh0PiBUZXh0OjpzcGxpdFRleHQodW5zaWduZQogCiAgICAgLy8gSU5ERVhf
U0laRV9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIG9mZnNldCBpcyBuZWdhdGl2ZSBvciBn
cmVhdGVyIHRoYW4KICAgICAvLyB0aGUgbnVtYmVyIG9mIDE2LWJpdCB1bml0cyBpbiBkYXRhLgot
ICAgIGlmIChvZmZzZXQgPiBtX2RhdGEtPmxlbmd0aCgpKSB7CisgICAgaWYgKG9mZnNldCA+IGxl
bmd0aCgpKSB7CiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvbGRTdHIgPSBtX2RhdGE7Ci0gICAg
UmVmUHRyPFRleHQ+IG5ld1RleHQgPSBjcmVhdGVOZXcob2xkU3RyLT5zdWJzdHJpbmcob2Zmc2V0
KSk7Ci0gICAgbV9kYXRhID0gb2xkU3RyLT5zdWJzdHJpbmcoMCwgb2Zmc2V0KTsKKyAgICBSZWZQ
dHI8U3RyaW5nSW1wbD4gb2xkU3RyID0gZGF0YUltcGwoKTsKKyAgICBSZWZQdHI8VGV4dD4gbmV3
VGV4dCA9IHZpcnR1YWxDcmVhdGUob2xkU3RyLT5zdWJzdHJpbmcob2Zmc2V0KSk7CisgICAgc2V0
RGF0YUltcGwob2xkU3RyLT5zdWJzdHJpbmcoMCwgb2Zmc2V0KSk7CiAKICAgICBkaXNwYXRjaE1v
ZGlmaWVkRXZlbnQob2xkU3RyLmdldCgpKTsKIApAQCAtODEsNyArNzUsNyBAQCBQYXNzUmVmUHRy
PFRleHQ+IFRleHQ6OnNwbGl0VGV4dCh1bnNpZ25lCiAgICAgICAgIGRvY3VtZW50KCktPnRleHRO
b2RlU3BsaXQodGhpcyk7CiAKICAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgdG9SZW5kZXJU
ZXh0KHJlbmRlcmVyKCkpLT5zZXRUZXh0KG1fZGF0YSk7CisgICAgICAgIHRvUmVuZGVyVGV4dChy
ZW5kZXJlcigpKS0+c2V0VGV4dChkYXRhSW1wbCgpKTsKIAogICAgIHJldHVybiBuZXdUZXh0LnJl
bGVhc2UoKTsKIH0KQEAgLTE5OSw3ICsxOTMsNyBAQCBOb2RlOjpOb2RlVHlwZSBUZXh0Ojpub2Rl
VHlwZSgpIGNvbnN0CiAKIFBhc3NSZWZQdHI8Tm9kZT4gVGV4dDo6Y2xvbmVOb2RlKGJvb2wgLypk
ZWVwKi8pCiB7Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmNyZWF0ZVRleHROb2RlKG1fZGF0YSk7
CisgICAgcmV0dXJuIGNyZWF0ZShkb2N1bWVudCgpLCBkYXRhKCkpOwogfQogCiBib29sIFRleHQ6
OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKQpAQCAtMjQ0LDcgKzIzOCw3IEBA
IGJvb2wgVGV4dDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotUmVuZGVyT2JqZWN0ICpUZXh0OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSog
YXJlbmEsIFJlbmRlclN0eWxlKikKK1JlbmRlck9iamVjdCogVGV4dDo6Y3JlYXRlUmVuZGVyZXIo
UmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCiB7CiAjaWYgRU5BQkxFKFNWRykKICAg
ICBpZiAocGFyZW50Tm9kZSgpLT5pc1NWR0VsZW1lbnQoKQpAQCAtMjUyLDE3ICsyNDYsMTcgQEAg
UmVuZGVyT2JqZWN0ICpUZXh0OjpjcmVhdGVSZW5kZXJlcihSZW5kZQogICAgICAgICAmJiAhcGFy
ZW50Tm9kZSgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmb3JlaWduT2JqZWN0VGFnKQogI2VuZGlm
CiAgICAgKQotICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHSW5saW5lVGV4dCh0
aGlzLCBtX2RhdGEpOworICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHSW5saW5l
VGV4dCh0aGlzLCBkYXRhSW1wbCgpKTsKICNlbmRpZgogICAgIAotICAgIHJldHVybiBuZXcgKGFy
ZW5hKSBSZW5kZXJUZXh0KHRoaXMsIG1fZGF0YSk7CisgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJl
bmRlclRleHQodGhpcywgZGF0YUltcGwoKSk7CiB9CiAKIHZvaWQgVGV4dDo6YXR0YWNoKCkKIHsK
ICNpZiBFTkFCTEUoV01MKQogICAgIGlmIChkb2N1bWVudCgpLT5pc1dNTERvY3VtZW50KCkgJiYg
IWNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkgewotICAgICAgICBTdHJpbmcgdGV4dCA9IG1fZGF0
YTsKKyAgICAgICAgU3RyaW5nIHRleHQgPSBkYXRhKCk7CiAgICAgICAgIEFTU0VSVCghdGV4dC5p
c0VtcHR5KCkpOwogCiAgICAgICAgIHRleHQgPSBzdWJzdGl0dXRlVmFyaWFibGVSZWZlcmVuY2Vz
KHRleHQsIGRvY3VtZW50KCkpOwpAQCAtMjg2LDcgKzI4MCw3IEBAIHZvaWQgVGV4dDo6cmVjYWxj
U3R5bGUoU3R5bGVDaGFuZ2UgY2hhbmcKICAgICBpZiAobmVlZHNTdHlsZVJlY2FsYygpKSB7CiAg
ICAgICAgIGlmIChyZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIoKS0+aXNU
ZXh0KCkpCi0gICAgICAgICAgICAgICAgdG9SZW5kZXJUZXh0KHJlbmRlcmVyKCkpLT5zZXRUZXh0
KG1fZGF0YSk7CisgICAgICAgICAgICAgICAgdG9SZW5kZXJUZXh0KHJlbmRlcmVyKCkpLT5zZXRU
ZXh0KGRhdGFJbXBsKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGF0dGFj
aGVkKCkpCiAgICAgICAgICAgICAgICAgZGV0YWNoKCk7CkBAIC0yOTYsNDAgKzI5MCw0MSBAQCB2
b2lkIFRleHQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nCiAgICAgc2V0TmVlZHNTdHls
ZVJlY2FsYyhOb1N0eWxlQ2hhbmdlKTsKIH0KIAotLy8gRE9NIFNlY3Rpb24gMS4xLjEKIGJvb2wg
VGV4dDo6Y2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLVBhc3NSZWZQdHI8VGV4dD4gVGV4dDo6Y3JlYXRlTmV3KFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gc3RyaW5nKQorUGFzc1JlZlB0cjxUZXh0PiBUZXh0Ojp2aXJ0dWFsQ3JlYXRlKGNvbnN0IFN0
cmluZyYgZGF0YSkKIHsKLSAgICByZXR1cm4gbmV3IFRleHQoZG9jdW1lbnQoKSwgc3RyaW5nKTsK
KyAgICByZXR1cm4gY3JlYXRlKGRvY3VtZW50KCksIGRhdGEpOwogfQogCi1QYXNzUmVmUHRyPFRl
eHQ+IFRleHQ6OmNyZWF0ZVdpdGhMZW5ndGhMaW1pdChEb2N1bWVudCogZG9jLCBjb25zdCBTdHJp
bmcmIHRleHQsIHVuc2lnbmVkJiBjaGFyc0xlZnQsIHVuc2lnbmVkIG1heENoYXJzKQorUGFzc1Jl
ZlB0cjxUZXh0PiBUZXh0OjpjcmVhdGVXaXRoTGVuZ3RoTGltaXQoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBTdHJpbmcmIGRhdGEsIHVuc2lnbmVkJiBjaGFyc0xlZnQsIHVuc2lnbmVkIG1heENo
YXJzKQogewotICAgIGlmIChjaGFyc0xlZnQgPT0gdGV4dC5sZW5ndGgoKSAmJiBjaGFyc0xlZnQg
PD0gbWF4Q2hhcnMpIHsKKyAgICB1bnNpZ25lZCBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgoKTsK
KworICAgIGlmIChjaGFyc0xlZnQgPT0gZGF0YUxlbmd0aCAmJiBjaGFyc0xlZnQgPD0gbWF4Q2hh
cnMpIHsKICAgICAgICAgY2hhcnNMZWZ0ID0gMDsKLSAgICAgICAgcmV0dXJuIG5ldyBUZXh0KGRv
YywgdGV4dCk7CisgICAgICAgIHJldHVybiBjcmVhdGUoZG9jdW1lbnQsIGRhdGEpOwogICAgIH0K
LSAgICAKLSAgICB1bnNpZ25lZCBzdGFydCA9IHRleHQubGVuZ3RoKCkgLSBjaGFyc0xlZnQ7CisK
KyAgICB1bnNpZ25lZCBzdGFydCA9IGRhdGFMZW5ndGggLSBjaGFyc0xlZnQ7CiAgICAgdW5zaWdu
ZWQgZW5kID0gc3RhcnQgKyBzdGQ6Om1pbihjaGFyc0xlZnQsIG1heENoYXJzKTsKICAgICAKICAg
ICAvLyBjaGVjayB3ZSBhcmUgbm90IG9uIGFuIHVuYnJlYWthYmxlIGJvdW5kYXJ5Ci0gICAgVGV4
dEJyZWFrSXRlcmF0b3IqIGl0ID0gY2hhcmFjdGVyQnJlYWtJdGVyYXRvcih0ZXh0LmNoYXJhY3Rl
cnMoKSwgdGV4dC5sZW5ndGgoKSk7Ci0gICAgaWYgKGVuZCA8IHRleHQubGVuZ3RoKCkgJiYgIWlz
VGV4dEJyZWFrKGl0LCBlbmQpKQorICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdCA9IGNoYXJhY3Rl
ckJyZWFrSXRlcmF0b3IoZGF0YS5jaGFyYWN0ZXJzKCksIGRhdGFMZW5ndGgpOworICAgIGlmIChl
bmQgPCBkYXRhTGVuZ3RoICYmICFpc1RleHRCcmVhayhpdCwgZW5kKSkKICAgICAgICAgZW5kID0g
dGV4dEJyZWFrUHJlY2VkaW5nKGl0LCBlbmQpOwogICAgICAgICAKICAgICAvLyBtYXhDaGFycyBv
ZiB1bmJyZWFrYWJsZSBjaGFyYWN0ZXJzIGNvdWxkIGxlYWQgdG8gaW5maW5pdGUgbG9vcAogICAg
IGlmIChlbmQgPD0gc3RhcnQpCi0gICAgICAgIGVuZCA9IHRleHQubGVuZ3RoKCk7CisgICAgICAg
IGVuZCA9IGRhdGFMZW5ndGg7CiAgICAgCi0gICAgU3RyaW5nIG5vZGVUZXh0ID0gdGV4dC5zdWJz
dHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLSAgICBjaGFyc0xlZnQgPSB0ZXh0Lmxlbmd0aCgp
IC0gZW5kOworICAgIFN0cmluZyBsaW1pdGVkRGF0YSA9IGRhdGEuc3Vic3RyaW5nKHN0YXJ0LCBl
bmQgLSBzdGFydCk7CisgICAgY2hhcnNMZWZ0ID0gZGF0YUxlbmd0aCAtIGVuZDsKICAgICAgICAg
Ci0gICAgcmV0dXJuIG5ldyBUZXh0KGRvYywgbm9kZVRleHQpOworICAgIHJldHVybiBjcmVhdGUo
ZG9jdW1lbnQsIGxpbWl0ZWREYXRhKTsKIH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTM0Myw3ICsz
MzgsNyBAQCB2b2lkIFRleHQ6OmZvcm1hdEZvckRlYnVnZ2VyKGNoYXIgKmJ1ZmZlCiAgICAgICAg
IHJlc3VsdCArPSBzOwogICAgIH0KICAgICAgICAgICAKLSAgICBzID0gbm9kZVZhbHVlKCk7Cisg
ICAgcyA9IGRhdGEoKTsKICAgICBpZiAocy5sZW5ndGgoKSA+IDApIHsKICAgICAgICAgaWYgKHJl
c3VsdC5sZW5ndGgoKSA+IDApCiAgICAgICAgICAgICByZXN1bHQgKz0gIjsgIjsKSW5kZXg6IFdl
YkNvcmUvZG9tL1RleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9UZXh0LmgJKHJldmlz
aW9uIDQ2OTk4KQorKysgV2ViQ29yZS9kb20vVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcg
KzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3LDQ0ICsyNywzOSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgCi1jb25zdCB1bnNpZ25lZCBjVGV4dE5vZGVMZW5ndGhMaW1p
dCA9IDEgPDwgMTY7Ci0KIGNsYXNzIFRleHQgOiBwdWJsaWMgQ2hhcmFjdGVyRGF0YSB7CiBwdWJs
aWM6Ci0gICAgVGV4dChEb2N1bWVudCAqaW1wbCwgY29uc3QgU3RyaW5nICZfdGV4dCk7Ci0gICAg
VGV4dChEb2N1bWVudCAqaW1wbCk7Ci0gICAgdmlydHVhbCB+VGV4dCgpOworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBkZWZhdWx0TGVuZ3RoTGltaXQgPSAxIDw8IDE2OwogCi0gICAgLy8gRE9N
IG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBDaGFyYWN0ZXJEYXRhCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8VGV4dD4gY3JlYXRlKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGV4dD4gY3JlYXRlV2l0aExlbmd0aExpbWl0KERvY3VtZW50KiwgY29uc3Qg
U3RyaW5nJiwgdW5zaWduZWQmIGNoYXJzTGVmdCwgdW5zaWduZWQgbGVuZ3RoTGltaXQgPSBkZWZh
dWx0TGVuZ3RoTGltaXQpOwogCiAgICAgUGFzc1JlZlB0cjxUZXh0PiBzcGxpdFRleHQodW5zaWdu
ZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICAvLyBET00gTGV2ZWwgMzogaHR0cDov
L3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtQ29yZS9jb3JlLmh0bWwjSUQtMTMxMjI5NTc3Mgor
CiAgICAgU3RyaW5nIHdob2xlVGV4dCgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8VGV4dD4gcmVw
bGFjZVdob2xlVGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICAvLyBE
T00gbWV0aG9kcyBvdmVycmlkZGVuIGZyb20gcGFyZW50IGNsYXNzZXMKKyAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoKCk7CisKK3Byb3RlY3RlZDoKKyAgICBUZXh0KERvY3VtZW50KiwgY29uc3QgU3Ry
aW5nJik7CiAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCBTdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIE5vZGVUeXBlIG5vZGVUeXBlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPE5vZGU+IGNsb25lTm9kZShib29sIGRlZXApOwotCi0gICAgLy8gT3RoZXIgbWV0aG9k
cyAobm90IHBhcnQgb2YgRE9NKQotCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZp
cnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCBS
ZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgPSBOb0NoYW5nZSk7CiAg
ICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUpOwogCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGV4dD4gY3JlYXRlV2l0aExlbmd0aExpbWl0KERvY3VtZW50KiwgY29uc3Qg
U3RyaW5nJiwgdW5zaWduZWQmIGNoYXJzTGVmdCwgdW5zaWduZWQgbWF4Q2hhcnMgPSBjVGV4dE5v
ZGVMZW5ndGhMaW1pdCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRleHQ+IHZpcnR1YWxDcmVh
dGUoY29uc3QgU3RyaW5nJik7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCB2b2lkIGZv
cm1hdEZvckRlYnVnZ2VyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKICNl
bmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRleHQ+IGNyZWF0ZU5l
dyhQYXNzUmVmUHRyPFN0cmluZ0ltcGw+KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vWE1MVG9rZW5pemVyLmNwcAkocmV2aXNpb24gNDY5OTgpCisrKyBXZWJDb3JlL2RvbS9Y
TUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNyArMTM2LDcgQEAgYm9vbCBY
TUxUb2tlbml6ZXI6OmVudGVyVGV4dCgpCiAjaWYgIVVTRShRWE1MU1RSRUFNKQogICAgIEFTU0VS
VChtX2J1ZmZlcmVkVGV4dC5zaXplKCkgPT0gMCk7CiAjZW5kaWYKLSAgICBSZWZQdHI8Tm9kZT4g
bmV3Tm9kZSA9IG5ldyBUZXh0KG1fZG9jLCAiIik7CisgICAgUmVmUHRyPE5vZGU+IG5ld05vZGUg
PSBUZXh0OjpjcmVhdGUobV9kb2MsICIiKTsKICAgICBpZiAoIW1fY3VycmVudE5vZGUtPmFkZENo
aWxkKG5ld05vZGUuZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgc2V0Q3VycmVu
dE5vZGUobmV3Tm9kZS5nZXQoKSk7CkluZGV4OiBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJMaWJ4
bWwyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNw
cAkocmV2aXNpb24gNDY5OTgpCisrKyBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTUxLDcgKzk1MSw3IEBAIHZvaWQgWE1MVG9rZW5pemVyOjpj
ZGF0YUJsb2NrKGNvbnN0IHhtbEMKICAgICAKICAgICBleGl0VGV4dCgpOwogCi0gICAgUmVmUHRy
PE5vZGU+IG5ld05vZGUgPSBuZXcgQ0RBVEFTZWN0aW9uKG1fZG9jLCB0b1N0cmluZyhzLCBsZW4p
KTsKKyAgICBSZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9IENEQVRBU2VjdGlvbjo6Y3JlYXRlKG1fZG9j
LCB0b1N0cmluZyhzLCBsZW4pKTsKICAgICBpZiAoIW1fY3VycmVudE5vZGUtPmFkZENoaWxkKG5l
d05vZGUuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG1fdmlldyAmJiAhbmV3Tm9k
ZS0+YXR0YWNoZWQoKSkKQEAgLTk3MCw3ICs5NzAsNyBAQCB2b2lkIFhNTFRva2VuaXplcjo6Y29t
bWVudChjb25zdCB4bWxDaGFyCiAgICAgCiAgICAgZXhpdFRleHQoKTsKIAotICAgIFJlZlB0cjxO
b2RlPiBuZXdOb2RlID0gbmV3IENvbW1lbnQobV9kb2MsIHRvU3RyaW5nKHMpKTsKKyAgICBSZWZQ
dHI8Tm9kZT4gbmV3Tm9kZSA9IENvbW1lbnQ6OmNyZWF0ZShtX2RvYywgdG9TdHJpbmcocykpOwog
ICAgIG1fY3VycmVudE5vZGUtPmFkZENoaWxkKG5ld05vZGUuZ2V0KCkpOwogICAgIGlmIChtX3Zp
ZXcgJiYgIW5ld05vZGUtPmF0dGFjaGVkKCkpCiAgICAgICAgIG5ld05vZGUtPmF0dGFjaCgpOwpJ
bmRleDogV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiA0
Njk5OCkKKysrIFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxOSw3ICs1MTksNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpk
ZWxldGVJbnNpZ25pCiAgICAgICAgICAgICBnYXBTdGFydCA9IG1heChnYXBTdGFydCwgc3RhcnQp
OwogICAgICAgICAgICAgZ2FwRW5kID0gbWluKGdhcEVuZCwgZW5kKTsKICAgICAgICAgICAgIGlm
IChzdHIuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgc3RyID0gdGV4dE5vZGUtPnN0cmluZygp
LT5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICBzdHIgPSB0
ZXh0Tm9kZS0+ZGF0YSgpLnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpOwogICAgICAgICAg
ICAgLy8gcmVtb3ZlIHRleHQgaW4gdGhlIGdhcAogICAgICAgICAgICAgc3RyLnJlbW92ZShnYXBT
dGFydCAtIHN0YXJ0IC0gcmVtb3ZlZCwgZ2FwTGVuKTsKICAgICAgICAgICAgIHJlbW92ZWQgKz0g
Z2FwTGVuOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0NyZWF0ZUxpbmtDb21tYW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQ3JlYXRlTGlua0NvbW1hbmQuY3BwCShyZXZpc2lv
biA0Njk5OCkKKysrIFdlYkNvcmUvZWRpdGluZy9DcmVhdGVMaW5rQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgdm9pZCBDcmVhdGVMaW5rQ29tbWFuZDo6ZG9BcHBs
eSgpCiAgICAgICAgIGFwcGx5U3R5bGVkRWxlbWVudChhbmNob3JFbGVtZW50LmdldCgpKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBpbnNlcnROb2RlQXQoYW5jaG9yRWxlbWVudC5nZXQoKSwgZW5k
aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSk7Ci0gICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0Tm9kZSA9
IG5ldyBUZXh0KGRvY3VtZW50KCksIG1fdXJsKTsKKyAgICAgICAgUmVmUHRyPFRleHQ+IHRleHRO
b2RlID0gVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIG1fdXJsKTsKICAgICAgICAgYXBwZW5kTm9k
ZSh0ZXh0Tm9kZS5nZXQoKSwgYW5jaG9yRWxlbWVudC5nZXQoKSk7CiAgICAgICAgIHNldEVuZGlu
Z1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvc2l0aW9uQmVmb3JlTm9kZShhbmNob3JFbGVt
ZW50LmdldCgpKSwgcG9zaXRpb25BZnRlck5vZGUoYW5jaG9yRWxlbWVudC5nZXQoKSksIERPV05T
VFJFQU0pKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCShyZXZpc2lv
biA0Njk5OCkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTk4LDcgKzE5OCw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVJbnNlcnRGcmFnbWVu
dChGcmFtZSoKIAogc3RhdGljIGJvb2wgZXhlY3V0ZUluc2VydE5vZGUoRnJhbWUqIGZyYW1lLCBQ
YXNzUmVmUHRyPE5vZGU+IGNvbnRlbnQpCiB7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGZyYWdtZW50ID0gbmV3IERvY3VtZW50RnJhZ21lbnQoZnJhbWUtPmRvY3VtZW50KCkpOworICAg
IFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNy
ZWF0ZShmcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
ZnJhZ21lbnQtPmFwcGVuZENoaWxkKGNvbnRlbnQsIGVjKTsKICAgICBpZiAoZWMpCkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDQ2OTk4KQor
KysgV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTUsNyArNTUsNyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KCkK
ICAgICBpZiAocHJlZml4VGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJl
ZlB0cjxUZXh0PiBwcmVmaXhUZXh0Tm9kZSA9IG5ldyBUZXh0KGRvY3VtZW50KCksIHByZWZpeFRl
eHQpOworICAgIFJlZlB0cjxUZXh0PiBwcmVmaXhUZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZShkb2N1
bWVudCgpLCBwcmVmaXhUZXh0KTsKICAgICBBU1NFUlQocHJlZml4VGV4dE5vZGUpOwogICAgIGRv
Y3VtZW50KCktPmNvcHlNYXJrZXJzKG1fdGV4dDIuZ2V0KCksIDAsIG1fb2Zmc2V0LCBwcmVmaXhU
ZXh0Tm9kZS5nZXQoKSwgMCk7CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiA0Njk5OCkK
KysrIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjAsNyAr
NDIwLDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RhcnRNYXJrdXAoVmVjdG9yPFVDaAogICAgICAg
ICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKICAgICAgICAgICAgIC8vIEZJWE1FOiBDb21tZW50
IGNvbnRlbnQgaXMgbm90IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxpemVyIChhbmQgcG9zc2libHkg
b3RoZXIgY2FsbGVycykgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBpbmNsdWRlcyAi
LS0+Ii4KICAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsICI8IS0tIik7Ci0gICAgICAgICAgICBh
cHBlbmQocmVzdWx0LCBzdGF0aWNfY2FzdDxjb25zdCBDb21tZW50Kj4obm9kZSktPm5vZGVWYWx1
ZSgpKTsKKyAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IENvbW1l
bnQqPihub2RlKS0+ZGF0YSgpKTsKICAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsICItLT4iKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX05PREU6Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxEb2N1bWVudC5oCShyZXZpc2lvbiA0Njk5OCkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
RG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBIVE1MRG9j
dW1lbnQgOiBwdWJsaWMgRG9jdW1lbnQsIHB1CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SFRNTERvY3VtZW50PiBjcmVhdGUoRnJhbWUqIGZyYW1lKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIG5ldyBIVE1MRG9jdW1lbnQoZnJhbWUpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEhUTUxEb2N1bWVudChmcmFtZSkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5IVE1MRG9jdW1lbnQo
KTsKIApAQCAtNzEsMTAgKzcxLDYgQEAgcHVibGljOgogICAgIHZvaWQgY2FwdHVyZUV2ZW50cygp
OwogICAgIHZvaWQgcmVsZWFzZUV2ZW50cygpOwogCi0gICAgdmlydHVhbCBib29sIGNoaWxkQWxs
b3dlZChOb2RlKik7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlRWxl
bWVudChjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLQogICAg
IHZvaWQgYWRkTmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSk7CiAgICAgdm9pZCBy
ZW1vdmVOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKTsKICAgICBib29sIGhhc05h
bWVkSXRlbShBdG9taWNTdHJpbmdJbXBsKiBuYW1lKTsKQEAgLTg3LDYgKzgzLDEwIEBAIHByb3Rl
Y3RlZDoKICAgICBIVE1MRG9jdW1lbnQoRnJhbWUqKTsKIAogcHJpdmF0ZToKKyAgICB2aXJ0dWFs
IGJvb2wgY2hpbGRBbGxvd2VkKE5vZGUqKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxFbGVt
ZW50PiBjcmVhdGVFbGVtZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRXhjZXB0aW9u
Q29kZSYpOworCiAgICAgdmlydHVhbCBib29sIGlzSFRNTERvY3VtZW50KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0ZyYW1lU2V0KCkgY29uc3Q7CiAgICAgdmly
dHVhbCBUb2tlbml6ZXIqIGNyZWF0ZVRva2VuaXplcigpOwpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA0Njk5OCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0Nyw3ICsyNDcsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IEhUTUxFbGVtZW50CiAgICAgICAgIGhhc0xvY2FsTmFtZShoZWFkVGFnKSB8fCBoYXNMb2NhbE5h
bWUoc3R5bGVUYWcpIHx8IGhhc0xvY2FsTmFtZSh0aXRsZVRhZykpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gbmV3IERvY3VtZW50
RnJhZ21lbnQoZG9jdW1lbnQoKSk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwogICAgIAogICAgIGlm
IChkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQogICAgICAgICAgcGFyc2VIVE1MRG9jdW1l
bnRGcmFnbWVudChodG1sLCBmcmFnbWVudC5nZXQoKSk7CkBAIC0zMDksNyArMzA5LDcgQEAgc3Rh
dGljIHZvaWQgcmVwbGFjZUNoaWxkcmVuV2l0aEZyYWdtZW50KAogICAgIH0KIAogICAgIGlmICho
YXNPbmVUZXh0Q2hpbGQoZWxlbWVudCkgJiYgaGFzT25lVGV4dENoaWxkKGZyYWdtZW50LmdldCgp
KSkgewotICAgICAgICBzdGF0aWNfY2FzdDxUZXh0Kj4oZWxlbWVudC0+Zmlyc3RDaGlsZCgpKS0+
c2V0RGF0YShzdGF0aWNfY2FzdDxUZXh0Kj4oZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKSktPnN0cmlu
ZygpLCBlYyk7CisgICAgICAgIHN0YXRpY19jYXN0PFRleHQqPihlbGVtZW50LT5maXJzdENoaWxk
KCkpLT5zZXREYXRhKHN0YXRpY19jYXN0PFRleHQqPihmcmFnbWVudC0+Zmlyc3RDaGlsZCgpKS0+
ZGF0YSgpLCBlYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMyOSw3ICszMjksNyBA
QCBzdGF0aWMgdm9pZCByZXBsYWNlQ2hpbGRyZW5XaXRoVGV4dChIVE1MCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBSZWZQdHI8VGV4dD4gdGV4dE5vZGUgPSBuZXcgVGV4dChlbGVtZW50
LT5kb2N1bWVudCgpLCB0ZXh0KTsKKyAgICBSZWZQdHI8VGV4dD4gdGV4dE5vZGUgPSBUZXh0Ojpj
cmVhdGUoZWxlbWVudC0+ZG9jdW1lbnQoKSwgdGV4dCk7CiAKICAgICBpZiAoaGFzT25lQ2hpbGQo
ZWxlbWVudCkpIHsKICAgICAgICAgZWxlbWVudC0+cmVwbGFjZUNoaWxkKHRleHROb2RlLnJlbGVh
c2UoKSwgZWxlbWVudC0+Zmlyc3RDaGlsZCgpLCBlYyk7CkBAIC00MTUsNyArNDE1LDcgQEAgdm9p
ZCBIVE1MRWxlbWVudDo6c2V0SW5uZXJUZXh0KGNvbnN0IFN0cgogCiAgICAgLy8gQWRkIHRleHQg
bm9kZXMgYW5kIDxicj4gZWxlbWVudHMuCiAgICAgZWMgPSAwOwotICAgIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBmcmFnbWVudCA9IG5ldyBEb2N1bWVudEZyYWdtZW50KGRvY3VtZW50KCkpOwor
ICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6
OmNyZWF0ZShkb2N1bWVudCgpKTsKICAgICBpbnQgbGluZVN0YXJ0ID0gMDsKICAgICBVQ2hhciBw
cmV2ID0gMDsKICAgICBpbnQgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKQEAgLTQyMyw3ICs0MjMs
NyBAQCB2b2lkIEhUTUxFbGVtZW50OjpzZXRJbm5lclRleHQoY29uc3QgU3RyCiAgICAgICAgIFVD
aGFyIGMgPSB0ZXh0W2ldOwogICAgICAgICBpZiAoYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJykgewog
ICAgICAgICAgICAgaWYgKGkgPiBsaW5lU3RhcnQpIHsKLSAgICAgICAgICAgICAgICBmcmFnbWVu
dC0+YXBwZW5kQ2hpbGQobmV3IFRleHQoZG9jdW1lbnQoKSwgdGV4dC5zdWJzdHJpbmcobGluZVN0
YXJ0LCBpIC0gbGluZVN0YXJ0KSksIGVjKTsKKyAgICAgICAgICAgICAgICBmcmFnbWVudC0+YXBw
ZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIHRleHQuc3Vic3RyaW5nKGxpbmVTdGFy
dCwgaSAtIGxpbmVTdGFydCkpLCBlYyk7CiAgICAgICAgICAgICAgICAgaWYgKGVjKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC00MzcsNyArNDM3LDcgQEAg
dm9pZCBIVE1MRWxlbWVudDo6c2V0SW5uZXJUZXh0KGNvbnN0IFN0cgogICAgICAgICBwcmV2ID0g
YzsKICAgICB9CiAgICAgaWYgKGxlbmd0aCA+IGxpbmVTdGFydCkKLSAgICAgICAgZnJhZ21lbnQt
PmFwcGVuZENoaWxkKG5ldyBUZXh0KGRvY3VtZW50KCksIHRleHQuc3Vic3RyaW5nKGxpbmVTdGFy
dCwgbGVuZ3RoIC0gbGluZVN0YXJ0KSksIGVjKTsKKyAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENo
aWxkKFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0ZXh0LnN1YnN0cmluZyhsaW5lU3RhcnQsIGxl
bmd0aCAtIGxpbmVTdGFydCkpLCBlYyk7CiAgICAgcmVwbGFjZUNoaWxkcmVuV2l0aEZyYWdtZW50
KHRoaXMsIGZyYWdtZW50LnJlbGVhc2UoKSwgZWMpOwogfQogCkBAIC00NjUsNyArNDY1LDcgQEAg
dm9pZCBIVE1MRWxlbWVudDo6c2V0T3V0ZXJUZXh0KGNvbnN0IFN0cgogICAgIC8vIEZJWE1FOiBU
aGlzIGNyZWF0ZXMgYSBuZXcgdGV4dCBub2RlIGV2ZW4gd2hlbiB0aGUgdGV4dCBpcyBlbXB0eS4K
ICAgICAvLyBGSVhNRTogVGhpcyBjcmVhdGVzIGEgc2luZ2xlIHRleHQgbm9kZSBldmVuIHdoZW4g
dGhlIHRleHQgaGFzIENSIGFuZCBMRgogICAgIC8vIGNoYXJhY3RlcnMgaW4gaXQuIEluc3RlYWQg
aXQgc2hvdWxkIGNyZWF0ZSA8YnI+IGVsZW1lbnRzLgotICAgIFJlZlB0cjxUZXh0PiB0ID0gbmV3
IFRleHQoZG9jdW1lbnQoKSwgdGV4dCk7CisgICAgUmVmUHRyPFRleHQ+IHQgPSBUZXh0OjpjcmVh
dGUoZG9jdW1lbnQoKSwgdGV4dCk7CiAgICAgZWMgPSAwOwogICAgIHBhcmVudC0+cmVwbGFjZUNo
aWxkKHQsIHRoaXMsIGVjKTsKICAgICBpZiAoZWMpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEtl
eWdlbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MS2V5Z2VuRWxl
bWVudC5jcHAJKHJldmlzaW9uIDQ2OTk4KQorKysgV2ViQ29yZS9odG1sL0hUTUxLZXlnZW5FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBIVE1MS2V5Z2VuRWxlbWVu
dDo6SFRNTEtleWdlbkVsZW1lbnQoY29uCiAgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBrZXlzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBI
VE1MT3B0aW9uRWxlbWVudCogbyA9IG5ldyBIVE1MT3B0aW9uRWxlbWVudChvcHRpb25UYWcsIGRv
YywgZm9ybSgpKTsKICAgICAgICAgYWRkQ2hpbGQobyk7Ci0gICAgICAgIG8tPmFkZENoaWxkKG5l
dyBUZXh0KGRvYywgKml0KSk7CisgICAgICAgIG8tPmFkZENoaWxkKFRleHQ6OmNyZWF0ZShkb2Ms
ICppdCkpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA0Njk5OCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0
VGV4dChjb25zdCBTdAogICAgIH0KIAogICAgIHJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgYXBwZW5k
Q2hpbGQobmV3IFRleHQoZG9jdW1lbnQoKSwgdGV4dCksIGVjKTsKKyAgICBhcHBlbmRDaGlsZChU
ZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgdGV4dCksIGVjKTsKIH0KIAogdm9pZCBIVE1MT3B0aW9u
RWxlbWVudDo6YWNjZXNzS2V5QWN0aW9uKGJvb2wpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3BwCShyZXZp
c2lvbiA0Njk5OCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjkyLDEzICs2OTIsMTMgQEAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwq
LCBDcmVhdAogCiBib29sIEhUTUxQYXJzZXI6OnRleHRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0
LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKIHsKLSAgICByZXN1bHQgPSBuZXcgVGV4dChtX2RvY3Vt
ZW50LCB0LT50ZXh0LmdldCgpKTsKKyAgICByZXN1bHQgPSBUZXh0OjpjcmVhdGUobV9kb2N1bWVu
dCwgdC0+dGV4dC5nZXQoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEhUTUxQYXJz
ZXI6OmNvbW1lbnRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3Vs
dCkKIHsKLSAgICByZXN1bHQgPSBuZXcgQ29tbWVudChtX2RvY3VtZW50LCB0LT50ZXh0LmdldCgp
KTsKKyAgICByZXN1bHQgPSBDb21tZW50OjpjcmVhdGUobV9kb2N1bWVudCwgdC0+dGV4dC5nZXQo
KSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNTk4LDcgKzE1OTgsNyBAQCBQYXNzUmVm
UHRyPE5vZGU+IEhUTUxQYXJzZXI6OmhhbmRsZUlzaW5kCiAgICAgfQogCiAgICAgbi0+YWRkQ2hp
bGQobmV3IEhUTUxIUkVsZW1lbnQoaHJUYWcsIG1fZG9jdW1lbnQpKTsKLSAgICBuLT5hZGRDaGls
ZChuZXcgVGV4dChtX2RvY3VtZW50LCB0ZXh0KSk7CisgICAgbi0+YWRkQ2hpbGQoVGV4dDo6Y3Jl
YXRlKG1fZG9jdW1lbnQsIHRleHQpKTsKICAgICBuLT5hZGRDaGlsZChpc0luZGV4LnJlbGVhc2Uo
KSk7CiAgICAgbi0+YWRkQ2hpbGQobmV3IEhUTUxIUkVsZW1lbnQoaHJUYWcsIG1fZG9jdW1lbnQp
KTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcAkocmV2aXNp
b24gNDY5OTgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0Niw3ICsyNDYsNyBAQCB2b2lkIEhUTUxWaWV3U291cmNlRG9jdW1l
bnQ6OmFkZExpbmUoY29uCiAgICAgbV9jdXJyZW50ID0gbV90ZCA9IHRkOwogCiAjaWZkZWYgREVC
VUdfTElORV9OVU1CRVJTCi0gICAgUmVmUHRyPFRleHQ+IGxpbmVOdW1iZXJUZXh0ID0gbmV3IFRl
eHQodGhpcywgU3RyaW5nOjpudW1iZXIodG9rZW5pemVyKCktPmxpbmVOdW1iZXIoKSArIDEpICsg
IiAiKTsKKyAgICBSZWZQdHI8VGV4dD4gbGluZU51bWJlclRleHQgPSBUZXh0OjpjcmVhdGUodGhp
cywgU3RyaW5nOjpudW1iZXIodG9rZW5pemVyKCktPmxpbmVOdW1iZXIoKSArIDEpICsgIiAiKTsK
ICAgICB0ZC0+YWRkQ2hpbGQobGluZU51bWJlclRleHQpOwogICAgIGxpbmVOdW1iZXJUZXh0LT5h
dHRhY2goKTsKICNlbmRpZgpAQCAtMjc3LDcgKzI3Nyw3IEBAIHZvaWQgSFRNTFZpZXdTb3VyY2VE
b2N1bWVudDo6YWRkVGV4dChjb24KICAgICAgICAgfQogICAgICAgICBpZiAobV9jdXJyZW50ID09
IG1fdGJvZHkpCiAgICAgICAgICAgICBhZGRMaW5lKGNsYXNzTmFtZSk7Ci0gICAgICAgIFJlZlB0
cjxUZXh0PiB0ID0gbmV3IFRleHQodGhpcywgc3Vic3RyaW5nKTsKKyAgICAgICAgUmVmUHRyPFRl
eHQ+IHQgPSBUZXh0OjpjcmVhdGUodGhpcywgc3Vic3RyaW5nKTsKICAgICAgICAgbV9jdXJyZW50
LT5hZGRDaGlsZCh0KTsKICAgICAgICAgdC0+YXR0YWNoKCk7CiAgICAgICAgIGlmIChpIDwgc2l6
ZSAtIDEpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmgJKHJldmlzaW9u
IDQ2OTk4KQorKysgV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTIgKzM2LDkgQEAgY2xhc3MgSFRNTFZpZXdTb3VyY2VE
b2N1bWVudCA6IHB1YmxpYyBIVAogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxW
aWV3U291cmNlRG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IEhUTUxWaWV3U291cmNlRG9jdW1lbnQo
ZnJhbWUsIG1pbWVUeXBlKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MVmlld1Nv
dXJjZURvY3VtZW50KGZyYW1lLCBtaW1lVHlwZSkpOwogICAgIH0KIAotICAgIC8vIFJldHVybnMg
SFRNTFRva2VuaXplciBvciBUZXh0VG9rZW5pemVyIGJhc2VkIG9uIG1fdHlwZS4KLSAgICB2aXJ0
dWFsIFRva2VuaXplciogY3JlYXRlVG9rZW5pemVyKCk7Ci0KICAgICB2b2lkIGFkZFZpZXdTb3Vy
Y2VUb2tlbihUb2tlbiopOyAvLyBVc2VkIGJ5IHRoZSBIVE1MIHRva2VuaXplci4KICAgICB2b2lk
IGFkZFZpZXdTb3VyY2VUZXh0KGNvbnN0IFN0cmluZyYpOyAvLyBVc2VkIGJ5IHRoZSBwbGFpbnRl
eHQgdG9rZW5pemVyLgogICAgIHZvaWQgYWRkVmlld1NvdXJjZURvY3R5cGVUb2tlbihEb2N0eXBl
VG9rZW4qKTsKQEAgLTQ5LDYgKzQ2LDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVE1MVmll
d1NvdXJjZURvY3VtZW50KEZyYW1lKiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CiAKKyAgICAv
LyBSZXR1cm5zIEhUTUxUb2tlbml6ZXIgb3IgVGV4dFRva2VuaXplciBiYXNlZCBvbiBtX3R5cGUu
CisgICAgdmlydHVhbCBUb2tlbml6ZXIqIGNyZWF0ZVRva2VuaXplcigpOworCiAgICAgdm9pZCBj
cmVhdGVDb250YWluaW5nVGFibGUoKTsKICAgICBFbGVtZW50KiBhZGRTcGFuV2l0aENsYXNzTmFt
ZShjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGFkZExpbmUoY29uc3QgU3RyaW5nJiBjbGFzc05h
bWUpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcAkocmV2aXNp
b24gNDY5OTgpCisrKyBXZWJDb3JlL2xvYWRlci9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIEZUUERpcmVjdG9yeVRva2VuaXpl
cjo6YXBwZW5kRW50cnkoCiAgICAgcm93RWxlbWVudC0+c2V0QXR0cmlidXRlKCJjbGFzcyIsICJm
dHBEaXJlY3RvcnlFbnRyeVJvdyIsIGVjKTsKICAgIAogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVt
ZW50ID0gbV9kb2MtPmNyZWF0ZUVsZW1lbnQodGRUYWcsIGZhbHNlKTsKLSAgICBlbGVtZW50LT5h
cHBlbmRDaGlsZChuZXcgVGV4dChtX2RvYywgU3RyaW5nKCZub0JyZWFrU3BhY2UsIDEpKSwgZWMp
OworICAgIGVsZW1lbnQtPmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShtX2RvYywgU3RyaW5nKCZu
b0JyZWFrU3BhY2UsIDEpKSwgZWMpOwogICAgIGlmIChpc0RpcmVjdG9yeSkKICAgICAgICAgZWxl
bWVudC0+c2V0QXR0cmlidXRlKCJjbGFzcyIsICJmdHBEaXJlY3RvcnlJY29uIGZ0cERpcmVjdG9y
eVR5cGVEaXJlY3RvcnkiLCBlYyk7CiAgICAgZWxzZQpAQCAtMTMwLDEyICsxMzAsMTIgQEAgdm9p
ZCBGVFBEaXJlY3RvcnlUb2tlbml6ZXI6OmFwcGVuZEVudHJ5KAogICAgIHJvd0VsZW1lbnQtPmFw
cGVuZENoaWxkKGVsZW1lbnQsIGVjKTsKICAgICAKICAgICBlbGVtZW50ID0gbV9kb2MtPmNyZWF0
ZUVsZW1lbnQodGRUYWcsIGZhbHNlKTsKLSAgICBlbGVtZW50LT5hcHBlbmRDaGlsZChuZXcgVGV4
dChtX2RvYywgZGF0ZSksIGVjKTsKKyAgICBlbGVtZW50LT5hcHBlbmRDaGlsZChUZXh0OjpjcmVh
dGUobV9kb2MsIGRhdGUpLCBlYyk7CiAgICAgZWxlbWVudC0+c2V0QXR0cmlidXRlKCJjbGFzcyIs
ICJmdHBEaXJlY3RvcnlGaWxlRGF0ZSIsIGVjKTsKICAgICByb3dFbGVtZW50LT5hcHBlbmRDaGls
ZChlbGVtZW50LCBlYyk7CiAgICAgCiAgICAgZWxlbWVudCA9IG1fZG9jLT5jcmVhdGVFbGVtZW50
KHRkVGFnLCBmYWxzZSk7Ci0gICAgZWxlbWVudC0+YXBwZW5kQ2hpbGQobmV3IFRleHQobV9kb2Ms
IHNpemUpLCBlYyk7CisgICAgZWxlbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKG1fZG9j
LCBzaXplKSwgZWMpOwogICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAiZnRwRGly
ZWN0b3J5RmlsZVNpemUiLCBlYyk7CiAgICAgcm93RWxlbWVudC0+YXBwZW5kQ2hpbGQoZWxlbWVu
dCwgZWMpOwogfQpAQCAtMTUyLDcgKzE1Miw3IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gRlRQRGly
ZWN0b3J5VG9rZW5pemUKIAogICAgIFJlZlB0cjxFbGVtZW50PiBhbmNob3JFbGVtZW50ID0gbV9k
b2MtPmNyZWF0ZUVsZW1lbnQoYVRhZywgZmFsc2UpOwogICAgIGFuY2hvckVsZW1lbnQtPnNldEF0
dHJpYnV0ZSgiaHJlZiIsIGZ1bGxVUkwsIGVjKTsKLSAgICBhbmNob3JFbGVtZW50LT5hcHBlbmRD
aGlsZChuZXcgVGV4dChtX2RvYywgZmlsZW5hbWUpLCBlYyk7CisgICAgYW5jaG9yRWxlbWVudC0+
YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKG1fZG9jLCBmaWxlbmFtZSksIGVjKTsKICAgICAKICAg
ICBSZWZQdHI8RWxlbWVudD4gdGRFbGVtZW50ID0gbV9kb2MtPmNyZWF0ZUVsZW1lbnQodGRUYWcs
IGZhbHNlKTsKICAgICB0ZEVsZW1lbnQtPmFwcGVuZENoaWxkKGFuY2hvckVsZW1lbnQsIGVjKTsK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZUUERpcmVjdG9yeURvY3VtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvRlRQRGlyZWN0b3J5RG9jdW1lbnQuaAkocmV2aXNpb24gNDY5OTgp
CisrKyBXZWJDb3JlL2xvYWRlci9GVFBEaXJlY3RvcnlEb2N1bWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIGNsYXNzIEZUUERpcmVjdG9yeURvY3VtZW50IDog
cHVibGljIEhUTUwKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGVFBEaXJlY3RvcnlE
b2N1bWVudD4gY3JlYXRlKEZyYW1lKiBmcmFtZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcg
RlRQRGlyZWN0b3J5RG9jdW1lbnQoZnJhbWUpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEZUUERpcmVjdG9yeURvY3VtZW50KGZyYW1lKSk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDog
V2ViQ29yZS9sb2FkZXIvSW1hZ2VEb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0ltYWdlRG9jdW1lbnQuaAkocmV2aXNpb24gNDY5OTgpCisrKyBXZWJDb3JlL2xvYWRlci9J
bWFnZURvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1
LDcgKzM1LDcgQEAgY2xhc3MgSW1hZ2VEb2N1bWVudCA6IHB1YmxpYyBIVE1MRG9jdW1lbgogcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlRG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSog
ZnJhbWUpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IEltYWdlRG9jdW1lbnQoZnJhbWUpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlRG9jdW1lbnQoZnJhbWUpKTsKICAgICB9
CiAKICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L01lZGlhRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9NZWRpYURvY3Vt
ZW50LmgJKHJldmlzaW9uIDQ2OTk4KQorKysgV2ViQ29yZS9sb2FkZXIvTWVkaWFEb2N1bWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgs
MjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM2LDIyICszNiwyMyBAQCBjbGFzcyBNZWRpYURvY3VtZW50IDogcHVi
bGljIEhUTUxEb2N1bWVuCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFEb2N1
bWVudD4gY3JlYXRlKEZyYW1lKiBmcmFtZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgTWVk
aWFEb2N1bWVudChmcmFtZSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFEb2N1
bWVudChmcmFtZSkpOwogICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50Kik7CisgICAgdmlydHVhbCB+TWVkaWFEb2N1bWVudCgpOwogCiAgICAgdm9pZCBt
ZWRpYUVsZW1lbnRTYXdVbnN1cHBvcnRlZFRyYWNrcygpOwogCiBwcml2YXRlOgogICAgIE1lZGlh
RG9jdW1lbnQoRnJhbWUqKTsKLSAgICB2aXJ0dWFsIH5NZWRpYURvY3VtZW50KCk7Ci0gICAgVGlt
ZXI8TWVkaWFEb2N1bWVudD4gbV9yZXBsYWNlTWVkaWFFbGVtZW50VGltZXI7CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNNZWRpYURvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfSAgICAgICAg
CiAgICAgdmlydHVhbCBUb2tlbml6ZXIqIGNyZWF0ZVRva2VuaXplcigpOwogCisgICAgdmlydHVh
bCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKwogICAgIHZvaWQgcmVwbGFjZU1l
ZGlhRWxlbWVudFRpbWVyRmlyZWQoVGltZXI8TWVkaWFEb2N1bWVudD4qKTsKKworICAgIFRpbWVy
PE1lZGlhRG9jdW1lbnQ+IG1fcmVwbGFjZU1lZGlhRWxlbWVudFRpbWVyOwogfTsKICAgICAKIH0K
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL1BsYWNlaG9sZGVyRG9jdW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9QbGFjZWhvbGRlckRvY3VtZW50LmgJKHJldmlzaW9uIDQ2OTk4KQor
KysgV2ViQ29yZS9sb2FkZXIvUGxhY2Vob2xkZXJEb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw3ICszNCw3IEBAIGNsYXNzIFBsYWNlaG9sZGVyRG9jdW1lbnQgOiBwdWJsaWMgRG9jdW0K
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGFjZWhvbGRlckRvY3VtZW50PiBjcmVh
dGUoRnJhbWUqIGZyYW1lKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBQbGFjZWhvbGRlckRv
Y3VtZW50KGZyYW1lKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGFjZWhvbGRlckRv
Y3VtZW50KGZyYW1lKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2xvYWRlci9QbHVnaW5Eb2N1bWVudC5oCShyZXZpc2lvbiA0Njk5OCkKKysrIFdlYkNvcmUvbG9h
ZGVyL1BsdWdpbkRvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAwOUFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyArMzMs
NyBAQCBjbGFzcyBQbHVnaW5Eb2N1bWVudCA6IHB1YmxpYyBIVE1MRG9jdW1lCiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luRG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSogZnJhbWUp
CiAgICAgewotICAgICAgICByZXR1cm4gbmV3IFBsdWdpbkRvY3VtZW50KGZyYW1lKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbHVnaW5Eb2N1bWVudChmcmFtZSkpOwogICAgIH0KIAog
cHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1RleHREb2N1bWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL1RleHREb2N1bWVudC5oCShyZXZpc2lvbiA0Njk5OCkKKysrIFdl
YkNvcmUvbG9hZGVyL1RleHREb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NSw3ICszNSw3IEBAIGNsYXNzIFRleHREb2N1bWVudCA6IHB1YmxpYyBIVE1MRG9jdW1lbnQKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0RG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSog
ZnJhbWUpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IFRleHREb2N1bWVudChmcmFtZSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dERvY3VtZW50KGZyYW1lKSk7CiAgICAgfQog
CiBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCShyZXZpc2lvbiA0Njk5OCkKKysrIFdlYkNvcmUv
bG9hZGVyL2xvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw3ICszNTMsNyBAQCB2b2lk
IExvYWRlcjo6SG9zdDo6ZGlkRmluaXNoTG9hZGluZyhTdWJyCiAgICAgRG9jTG9hZGVyKiBkb2NM
b2FkZXIgPSByZXF1ZXN0LT5kb2NMb2FkZXIoKTsKICAgICAvLyBQcmV2ZW50IHRoZSBkb2N1bWVu
dCBmcm9tIGJlaW5nIGRlc3Ryb3llZCBiZWZvcmUgd2UgYXJlIGRvbmUgd2l0aAogICAgIC8vIHRo
ZSBkb2NMb2FkZXIgdGhhdCBpdCB3aWxsIGRlbGV0ZSB3aGVuIHRoZSBkb2N1bWVudCBnZXRzIGRl
bGV0ZWQuCi0gICAgRG9jUHRyPERvY3VtZW50PiBwcm90ZWN0b3IoZG9jTG9hZGVyLT5kb2MoKSk7
CisgICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0b3IoZG9jTG9hZGVyLT5kb2MoKSk7CiAgICAg
aWYgKCFyZXF1ZXN0LT5pc011bHRpcGFydCgpKQogICAgICAgICBkb2NMb2FkZXItPmRlY3JlbWVu
dFJlcXVlc3RDb3VudCgpOwogCkBAIC00MDEsNyArNDAxLDcgQEAgdm9pZCBMb2FkZXI6Okhvc3Q6
OmRpZEZhaWwoU3VicmVzb3VyY2VMbwogICAgIERvY0xvYWRlciogZG9jTG9hZGVyID0gcmVxdWVz
dC0+ZG9jTG9hZGVyKCk7CiAgICAgLy8gUHJldmVudCB0aGUgZG9jdW1lbnQgZnJvbSBiZWluZyBk
ZXN0cm95ZWQgYmVmb3JlIHdlIGFyZSBkb25lIHdpdGgKICAgICAvLyB0aGUgZG9jTG9hZGVyIHRo
YXQgaXQgd2lsbCBkZWxldGUgd2hlbiB0aGUgZG9jdW1lbnQgZ2V0cyBkZWxldGVkLgotICAgIERv
Y1B0cjxEb2N1bWVudD4gcHJvdGVjdG9yKGRvY0xvYWRlci0+ZG9jKCkpOworICAgIFJlZlB0cjxE
b2N1bWVudD4gcHJvdGVjdG9yKGRvY0xvYWRlci0+ZG9jKCkpOwogICAgIGlmICghcmVxdWVzdC0+
aXNNdWx0aXBhcnQoKSkKICAgICAgICAgZG9jTG9hZGVyLT5kZWNyZW1lbnRSZXF1ZXN0Q291bnQo
KTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9UcmVlU2hhcmVkLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9UcmVlU2hhcmVkLmgJKHJldmlzaW9uIDQ2OTk4KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9UcmVlU2hhcmVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDE3ICsyOCw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgVHJlZVNoYXJlZCA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgVHJlZVNoYXJlZCgpCi0gICAgICAg
IDogbV9yZWZDb3VudCgwKQotICAgICAgICAsIG1fcGFyZW50KDApCi0gICAgewotI2lmbmRlZiBO
REVCVUcKLSAgICAgICAgbV9kZWxldGlvbkhhc0JlZ3VuID0gZmFsc2U7Ci0gICAgICAgIG1faW5S
ZW1vdmVkTGFzdFJlZkZ1bmN0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICB9Ci0gICAgVHJlZVNo
YXJlZChUKiBwYXJlbnQpCi0gICAgICAgIDogbV9yZWZDb3VudCgwKQorICAgIFRyZWVTaGFyZWQo
aW50IGluaXRpYWxSZWZDb3VudCA9IDEpCisgICAgICAgIDogbV9yZWZDb3VudChpbml0aWFsUmVm
Q291bnQpCiAgICAgICAgICwgbV9wYXJlbnQoMCkKICAgICB7CiAjaWZuZGVmIE5ERUJVRwpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDQ2OTk4KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw3ICsyMDcsNyBA
QCB2b2lkIFJlbmRlclRleHQ6OmRlbGV0ZVRleHRCb3hlcygpCiBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IFJlbmRlclRleHQ6Om9yaWdpbmFsVGV4dCgpIGNvbnN0CiB7CiAgICAgTm9kZSogZSA9IG5v
ZGUoKTsKLSAgICByZXR1cm4gZSA/IHN0YXRpY19jYXN0PFRleHQqPihlKS0+c3RyaW5nKCkgOiAw
OworICAgIHJldHVybiBlID8gc3RhdGljX2Nhc3Q8VGV4dCo+KGUpLT5kYXRhSW1wbCgpIDogMDsK
IH0KIAogdm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVj
dHMsIGludCB0eCwgaW50IHR5KQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZy
YWdtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RnJh
Z21lbnQuY3BwCShyZXZpc2lvbiA0Njk5OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRGcmFnbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgUmVuZGVyVGV4
dEZyYWdtZW50OjpSZW5kZXJUZXh0RnJhZ21lbnQoTgogUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBS
ZW5kZXJUZXh0RnJhZ21lbnQ6Om9yaWdpbmFsVGV4dCgpIGNvbnN0CiB7CiAgICAgTm9kZSogZSA9
IG5vZGUoKTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0ID0gKGUgPyBzdGF0aWNfY2Fz
dDxUZXh0Kj4oZSktPnN0cmluZygpIDogY29udGVudFN0cmluZygpKTsKKyAgICBSZWZQdHI8U3Ry
aW5nSW1wbD4gcmVzdWx0ID0gKGUgPyBzdGF0aWNfY2FzdDxUZXh0Kj4oZSktPmRhdGFJbXBsKCkg
OiBjb250ZW50U3RyaW5nKCkpOwogICAgIGlmIChyZXN1bHQgJiYgKHN0YXJ0KCkgPiAwIHx8IHN0
YXJ0KCkgPCByZXN1bHQtPmxlbmd0aCgpKSkKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5zdWJz
dHJpbmcoc3RhcnQoKSwgZW5kKCkpOwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwpAQCAt
NzYsNyArNzYsNyBAQCBVQ2hhciBSZW5kZXJUZXh0RnJhZ21lbnQ6OnByZXZpb3VzQ2hhcmFjCiB7
CiAgICAgaWYgKHN0YXJ0KCkpIHsKICAgICAgICAgTm9kZSogZSA9IG5vZGUoKTsKLSAgICAgICAg
U3RyaW5nSW1wbCogIG9yaWdpbmFsID0gKGUgPyBzdGF0aWNfY2FzdDxUZXh0Kj4oZSktPnN0cmlu
ZygpIDogY29udGVudFN0cmluZygpKTsKKyAgICAgICAgU3RyaW5nSW1wbCogIG9yaWdpbmFsID0g
KGUgPyBzdGF0aWNfY2FzdDxUZXh0Kj4oZSktPmRhdGFJbXBsKCkgOiBjb250ZW50U3RyaW5nKCkp
OwogICAgICAgICBpZiAob3JpZ2luYWwpCiAgICAgICAgICAgICByZXR1cm4gKCpvcmlnaW5hbClb
c3RhcnQoKSAtIDFdOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0RvY3VtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQuaAkocmV2aXNpb24gNDY5OTgpCisr
KyBXZWJDb3JlL3N2Zy9TVkdEb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUs
MTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U1ZHRG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSogZnJhbWUpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBuZXcgU1ZHRG9jdW1lbnQoZnJhbWUpOworICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTVkdEb2N1bWVudChmcmFtZSkpOwogICAgICAgICB9CiAKICAgICAg
ICAgdmlydHVhbCB+U1ZHRG9jdW1lbnQoKTsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9v
bCBpc1NWR0RvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCiAgICAgICAgIFNWR1NW
R0VsZW1lbnQqIHJvb3RFbGVtZW50KCkgY29uc3Q7CiAgICAgICAgIAogICAgICAgICB2b2lkIGRp
c3BhdGNoWm9vbUV2ZW50KGZsb2F0IHByZXZTY2FsZSwgZmxvYXQgbmV3U2NhbGUpOwpAQCAtNTIs
MTEgKzUwLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzdGFydFBhbihj
b25zdCBGbG9hdFBvaW50JiBzdGFydCk7CiAgICAgICAgIHZvaWQgdXBkYXRlUGFuKGNvbnN0IEZs
b2F0UG9pbnQmIHBvcykgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCBib29sIGNoaWxkU2hvdWxk
Q3JlYXRlUmVuZGVyZXIoTm9kZSopIGNvbnN0OwotCiAgICAgcHJpdmF0ZToKICAgICAgICAgU1ZH
RG9jdW1lbnQoRnJhbWUqKTsKIAorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdEb2N1bWVudCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRTaG91
bGRDcmVhdGVSZW5kZXJlcihOb2RlKikgY29uc3Q7CisKICAgICAgICAgRmxvYXRQb2ludCBtX3Ry
YW5zbGF0ZTsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHAJKHJl
dmlzaW9uIDQ2OTk4KQorKysgV2ViQ29yZS9zdmcvU1ZHRWxlbWVudEluc3RhbmNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw4ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogCi0gICAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0Ci0KICAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKICAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKQEAgLTI1LDcgKzIzLDYgQEAKICNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKIAog
I2luY2x1ZGUgIkNvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCiAjaW5j
bHVkZSAiRXZlbnRMaXN0ZW5lci5oIgpAQCAtNDYsNyArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBzdGF0aWMgV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIgaW5zdGFuY2VDb3VudGVyKCJX
ZWJDb3JlU1ZHRWxlbWVudEluc3RhbmNlIik7CiAjZW5kaWYKIAotU1ZHRWxlbWVudEluc3RhbmNl
OjpTVkdFbGVtZW50SW5zdGFuY2UoU1ZHVXNlRWxlbWVudCogdXNlRWxlbWVudCwgU1ZHRWxlbWVu
dCogb3JpZ2luYWxFbGVtZW50KQorU1ZHRWxlbWVudEluc3RhbmNlOjpTVkdFbGVtZW50SW5zdGFu
Y2UoU1ZHVXNlRWxlbWVudCogdXNlRWxlbWVudCwgUGFzc1JlZlB0cjxTVkdFbGVtZW50PiBvcmln
aW5hbEVsZW1lbnQpCiAgICAgOiBtX25lZWRzVXBkYXRlKGZhbHNlKQogICAgICwgbV91c2VFbGVt
ZW50KHVzZUVsZW1lbnQpCiAgICAgLCBtX2VsZW1lbnQob3JpZ2luYWxFbGVtZW50KQpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHRWxlbWVudEluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvU1ZHRWxlbWVudEluc3RhbmNlLmgJKHJldmlzaW9uIDQ2OTk4KQorKysgV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudEluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw2IEBACiAvKgog
ICAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KIAotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAot
CiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCiAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCkBAIC0yNywxOCArMjUsMTUgQEAKICNpbmNsdWRl
ICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiVHJlZVNoYXJlZC5oIgogCi0jaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorICAgIC8vIEZJWE1FOiBUaGlzIGNsYXNzIGlzIG5ldmVyIGluc3RhbnRpYXRlZC4g
U2hvdWxkIGl0IGJlIHJlbW92ZWQ/CisKICAgICBuYW1lc3BhY2UgUHJpdmF0ZSB7IAogICAgICAg
ICB0ZW1wbGF0ZTxjbGFzcyBHZW5lcmljTm9kZSwgY2xhc3MgR2VuZXJpY05vZGVDb250YWluZXI+
CiAgICAgICAgIHZvaWQgYWRkQ2hpbGROb2Rlc1RvRGVsZXRpb25RdWV1ZShHZW5lcmljTm9kZSom
IGhlYWQsIEdlbmVyaWNOb2RlKiYgdGFpbCwgR2VuZXJpY05vZGVDb250YWluZXIqIGNvbnRhaW5l
cik7CiAgICAgfTsKIAotICAgIGNsYXNzIEV2ZW50TGlzdGVuZXI7Ci0gICAgY2xhc3MgRnJhbWU7
CiAgICAgY2xhc3MgU1ZHVXNlRWxlbWVudDsKICAgICBjbGFzcyBTVkdFbGVtZW50SW5zdGFuY2VM
aXN0OwogCkBAIC00Niw3ICs0MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBT
VkdFbGVtZW50SW5zdGFuY2UgOiBwdWJsaWMgVHJlZVNoYXJlZDxTVkdFbGVtZW50SW5zdGFuY2U+
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBFdmVudFRhcmdldCB7CiAg
ICAgcHVibGljOgotICAgICAgICBTVkdFbGVtZW50SW5zdGFuY2UoU1ZHVXNlRWxlbWVudCosIFNW
R0VsZW1lbnQqIG9yaWdpbmFsRWxlbWVudCk7CiAgICAgICAgIHZpcnR1YWwgflNWR0VsZW1lbnRJ
bnN0YW5jZSgpOwogCiAgICAgICAgIGJvb2wgbmVlZHNVcGRhdGUoKSBjb25zdCB7IHJldHVybiBt
X25lZWRzVXBkYXRlOyB9CkBAIC01NCw5ICs0OCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdDsKIAotICAgICAgICB2aXJ0dWFsIE5vZGUqIHRvTm9kZSgpIHsgcmV0dXJu
IHNoYWRvd1RyZWVFbGVtZW50KCk7IH0KLSAgICAgICAgdmlydHVhbCBTVkdFbGVtZW50SW5zdGFu
Y2UqIHRvU1ZHRWxlbWVudEluc3RhbmNlKCkgeyByZXR1cm4gdGhpczsgfQotCiAgICAgICAgIHZp
cnR1YWwgdm9pZCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2RlJik7CkBA
IC0xNjcsNiArMTU4LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRlOgogICAg
ICAgICBmcmllbmQgY2xhc3MgU1ZHVXNlRWxlbWVudDsKIAorICAgICAgICBTVkdFbGVtZW50SW5z
dGFuY2UoU1ZHVXNlRWxlbWVudCosIFBhc3NSZWZQdHI8U1ZHRWxlbWVudD4gb3JpZ2luYWxFbGVt
ZW50KTsKKworICAgICAgICB2aXJ0dWFsIE5vZGUqIHRvTm9kZSgpIHsgcmV0dXJuIHNoYWRvd1Ry
ZWVFbGVtZW50KCk7IH0KKyAgICAgICAgdmlydHVhbCBTVkdFbGVtZW50SW5zdGFuY2UqIHRvU1ZH
RWxlbWVudEluc3RhbmNlKCkgeyByZXR1cm4gdGhpczsgfQorCiAgICAgICAgIHZvaWQgYXBwZW5k
Q2hpbGQoUGFzc1JlZlB0cjxTVkdFbGVtZW50SW5zdGFuY2U+IGNoaWxkKTsKICAgICAgICAgdm9p
ZCBzZXRTaGFkb3dUcmVlRWxlbWVudChTVkdFbGVtZW50Kik7CiAgICAgICAgIHZvaWQgZm9yZ2V0
V3JhcHBlcigpOwpAQCAtMTkxLDcgKzE4Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQogICAgICAgICB2aXJ0
dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQogCi0gICAgcHJpdmF0ZToK
ICAgICAgICAgYm9vbCBtX25lZWRzVXBkYXRlIDogMTsKIAogICAgICAgICBTVkdVc2VFbGVtZW50
KiBtX3VzZUVsZW1lbnQ7CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxEb2N1bWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvd21sL1dNTERvY3VtZW50LmgJKHJldmlzaW9uIDQ2OTk4KQorKysgV2Vi
Q29yZS93bWwvV01MRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBj
bGFzcyBXTUxEb2N1bWVudCA6IHB1YmxpYyBEb2N1bWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8V01MRG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSogZnJhbWUpCiAgICAgewotICAg
ICAgICByZXR1cm4gbmV3IFdNTERvY3VtZW50KGZyYW1lKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBXTUxEb2N1bWVudChmcmFtZSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfldNTERv
Y3VtZW50KCk7CkluZGV4OiBXZWJDb3JlL3htbC9YUGF0aE5hbWVzcGFjZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS94bWwvWFBhdGhOYW1lc3BhY2UuY3BwCShyZXZpc2lvbiA0Njk5OCkKKysr
IFdlYkNvcmUveG1sL1hQYXRoTmFtZXNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3Jn
PgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxOCArMzMsMTQgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1YUGF0aE5hbWVzcGFjZTo6WFBhdGhOYW1lc3BhY2UoUGFzc1JlZlB0cjxF
bGVtZW50PiBvd25lckVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHJlZml4LCBjb25zdCBTdHJpbmcm
IHVyaSkKLSAgICA6IE5vZGUob3duZXJFbGVtZW50LT5kb2N1bWVudCgpKQorWFBhdGhOYW1lc3Bh
Y2U6OlhQYXRoTmFtZXNwYWNlKFBhc3NSZWZQdHI8RWxlbWVudD4gb3duZXJFbGVtZW50LCBjb25z
dCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkpCisgICAgOiBO
b2RlKG93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKSwgQ3JlYXRlT3RoZXIpCiAgICAgLCBtX293bmVy
RWxlbWVudChvd25lckVsZW1lbnQpCiAgICAgLCBtX3ByZWZpeChwcmVmaXgpCiAgICAgLCBtX3Vy
aSh1cmkpCiB7CiB9CiAKLVhQYXRoTmFtZXNwYWNlOjp+WFBhdGhOYW1lc3BhY2UoKQotewotfQot
CiBEb2N1bWVudCogWFBhdGhOYW1lc3BhY2U6Om93bmVyRG9jdW1lbnQoKSBjb25zdAogewogICAg
IHJldHVybiBtX293bmVyRWxlbWVudC0+b3duZXJEb2N1bWVudCgpOwpJbmRleDogV2ViQ29yZS94
bWwvWFBhdGhOYW1lc3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aE5hbWVz
cGFjZS5oCShyZXZpc2lvbiA0Njk5OCkKKysrIFdlYkNvcmUveG1sL1hQYXRoTmFtZXNwYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IDIwMDUgRnJl
cmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQs
MTMgKzM0LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIERvY3VtZW50
OwotICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgLy8gRklYTUU6IFRoaXMgY2xhc3MgaXMgbmV2ZXIg
aW5zdGFudGlhdGVkLiBNYXliZSBpdCBzaG91bGQgYmUgcmVtb3ZlZC4KIAogICAgIGNsYXNzIFhQ
YXRoTmFtZXNwYWNlIDogcHVibGljIE5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgWFBhdGhO
YW1lc3BhY2UoUGFzc1JlZlB0cjxFbGVtZW50PiBvd25lckVsZW1lbnQsIGNvbnN0IFN0cmluZyYg
cHJlZml4LCBjb25zdCBTdHJpbmcmIHVyaSk7Ci0gICAgICAgIHZpcnR1YWwgflhQYXRoTmFtZXNw
YWNlKCk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgWFBhdGhOYW1lc3BhY2UoUGFzc1JlZlB0cjxF
bGVtZW50PiBvd25lckVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBB
dG9taWNTdHJpbmcmIHVyaSk7CiAKICAgICAgICAgdmlydHVhbCBEb2N1bWVudCogb3duZXJEb2N1
bWVudCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIEVsZW1lbnQqIG93bmVyRWxlbWVudCgpIGNv
bnN0OwpAQCAtNTAsOSArNDgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1
YWwgU3RyaW5nIG5vZGVWYWx1ZSgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZXNwYWNlVVJJKCkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCBOb2RlOjpO
b2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIE5vZGVUeXBlIG5vZGVU
eXBlKCkgY29uc3Q7CiAKLSAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8RWxlbWVudD4gbV9v
d25lckVsZW1lbnQ7CiAgICAgICAgIEF0b21pY1N0cmluZyBtX3ByZWZpeDsKICAgICAgICAgQXRv
bWljU3RyaW5nIG1fdXJpOwpJbmRleDogV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHJldmlzaW9uIDQ2OTk4
KQorKysgV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
NSwxMiArMjg1LDEyIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IFhTTFRQcm9jZXNzb3I6OmNyZWEK
IAogc3RhdGljIGlubGluZSBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRG
cm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZU1JTUVUeXBlLCBEb2N1bWVudCogb3V0cHV0RG9jKQogewotICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudCA9IG5ldyBEb2N1bWVudEZyYWdtZW50KG91dHB1dERvYyk7CisgICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3Jl
YXRlKG91dHB1dERvYyk7CiAgICAgCiAgICAgaWYgKHNvdXJjZU1JTUVUeXBlID09ICJ0ZXh0L2h0
bWwiKQogICAgICAgICBwYXJzZUhUTUxEb2N1bWVudEZyYWdtZW50KHNvdXJjZVN0cmluZywgZnJh
Z21lbnQuZ2V0KCkpOwogICAgIGVsc2UgaWYgKHNvdXJjZU1JTUVUeXBlID09ICJ0ZXh0L3BsYWlu
IikKLSAgICAgICAgZnJhZ21lbnQtPmFkZENoaWxkKG5ldyBUZXh0KG91dHB1dERvYywgc291cmNl
U3RyaW5nKSk7CisgICAgICAgIGZyYWdtZW50LT5hZGRDaGlsZChUZXh0OjpjcmVhdGUob3V0cHV0
RG9jLCBzb3VyY2VTdHJpbmcpKTsKICAgICBlbHNlIHsKICAgICAgICAgYm9vbCBzdWNjZXNzZnVs
UGFyc2UgPSBwYXJzZVhNTERvY3VtZW50RnJhZ21lbnQoc291cmNlU3RyaW5nLCBmcmFnbWVudC5n
ZXQoKSwgb3V0cHV0RG9jLT5kb2N1bWVudEVsZW1lbnQoKSk7CiAgICAgICAgIGlmICghc3VjY2Vz
c2Z1bFBhcnNlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34964</attachid>
            <date>2009-08-17 01:34:48 -0700</date>
            <delta_ts>2009-08-18 10:32:27 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>MoreRefCount1Patch.txt</filename>
            <type>text/plain</type>
            <size>85752</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDQ3MzU3KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTUsNiArMzk1LDcgQEAgX19aTjdXZWJDb3JlMTZpc0Vu
ZE9mUGFyYWdyYXBoRVJLTlNfMTVWaQogX19aTjdXZWJDb3JlMTZ0aHJlYWRHbG9iYWxEYXRhRXYK
IF9fWk43V2ViQ29yZTE3RE9NSW1wbGVtZW50YXRpb24xNGlzVGV4dE1JTUVUeXBlRVJLTlNfNlN0
cmluZ0UKIF9fWk43V2ViQ29yZTE3R2x5cGhQYWdlVHJlZU5vZGUxOHRyZWVHbHlwaFBhZ2VDb3Vu
dEV2CitfX1pON1dlYkNvcmUxN0hUTUxQbHVnSW5FbGVtZW50MTFnZXROUE9iamVjdEV2CiBfX1pO
N1dlYkNvcmUxN2VxdWFsSWdub3JpbmdDYXNlRVBOU18xMFN0cmluZ0ltcGxFUzFfCiBfX1pON1dl
YkNvcmUxOGRlcHJlY2F0ZWRQYXJzZVVSTEVSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUxOGlz
U3RhcnRPZlBhcmFncmFwaEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRQpAQCAtNDQzLDggKzQ0NCw4
IEBAIF9fWk43V2ViQ29yZTIyYXBwbGljYXRpb25Jc0FwcGxlTWFpbEV2CiBfX1pON1dlYkNvcmUy
MmNyZWF0ZUZyYWdtZW50RnJvbVRleHRFUE5TXzVSYW5nZUVSS05TXzZTdHJpbmdFCiBfX1pON1dl
YkNvcmUyMmV4dGVybmFsUmVwcmVzZW50YXRpb25FUE5TXzEyUmVuZGVyT2JqZWN0RQogX19aTjdX
ZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTE0c2V0TWF4aW11bVNpemVFeAotX19aTjdX
ZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTE3c2V0Q2FjaGVEaXJlY3RvcnlFUktOU182
U3RyaW5nRQogX19aTjdXZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTE2c3RvcmVDb3B5
T2ZDYWNoZUVSS05TXzZTdHJpbmdFUE5TXzIwQXBwbGljYXRpb25DYWNoZUhvc3RFCitfX1pON1dl
YkNvcmUyM0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlMTdzZXRDYWNoZURpcmVjdG9yeUVSS05TXzZT
dHJpbmdFCiBfX1pON1dlYkNvcmUyM0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlMTh2YWN1dW1EYXRh
YmFzZUZpbGVFdgogX19aTjdXZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTVlbXB0eUV2
CiBfX1pON1dlYkNvcmUyM1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kQzFFUE5TXzhEb2N1bWVudEVO
M1dURjEwUGFzc1JlZlB0cklOU18xNkRvY3VtZW50RnJhZ21lbnRFRUViYmJiYk5TXzEwRWRpdEFj
dGlvbkUKQEAgLTY5Nyw5ICs2OTgsOSBAQCBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTZhZGp1c3RQ
YWdlSGVpZ2h0CiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTh1cGRhdGVDb250cm9sVGludHNFdgog
X19aTjdXZWJDb3JlOUZyYW1lVmlldzIyc2V0QmFzZUJhY2tncm91bmRDb2xvckVOU181Q29sb3JF
CiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MjNsYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZUV2Ci1fX1pO
N1dlYkNvcmU5RnJhbWVWaWV3MjlzeW5jQ29tcG9zaXRpbmdTdGF0ZVJlY3Vyc2l2ZUV2CiBfX1pO
N1dlYkNvcmU5RnJhbWVWaWV3Mjlmb3JjZUxheW91dFdpdGhQYWdlV2lkdGhSYW5nZUVmZmIKIF9f
Wk43V2ViQ29yZTlGcmFtZVZpZXcyOXNldFNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuRWIKK19f
Wk43V2ViQ29yZTlGcmFtZVZpZXcyOXN5bmNDb21wb3NpdGluZ1N0YXRlUmVjdXJzaXZlRXYKIF9f
Wk43V2ViQ29yZTlGcmFtZVZpZXc2Y3JlYXRlRVBOU181RnJhbWVFCiBfX1pON1dlYkNvcmU5RnJh
bWVWaWV3NmNyZWF0ZUVQTlNfNUZyYW1lRVJLTlNfN0ludFNpemVFCiBfX1pON1dlYkNvcmU5SFRN
TE5hbWVzMTBsaXN0aW5nVGFnRQpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNDczNTcpCisrKyBXZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMTgsNyArMTAxOCw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjphY2Nlc3MKICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxlID0g
c3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEJhc2UqPihvd25lciktPmdldEF0dHJpYnV0ZSh0
aXRsZUF0dHIpOwogICAgICAgICAgICAgICAgIGlmICghdGl0bGUuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGl0bGU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNlKj4ob3duZXIpLT5uYW1lKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNlKj4ob3duZXIpLT5n
ZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG93
bmVyLT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxFbGVtZW50Kj4ob3duZXIpLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gNDczNTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lRWxlbWVudEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEyICszMiwxNSBAQAogI2luY2x1ZGUgIkNT
U0hlbHBlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lRWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3VzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvd1NldHRpbmdK
YXZhc2NyaXB0VVJMKEV4ZWNTdGF0ZSogZXhlYywgSFRNTEZyYW1lRWxlbWVudCogaW1wLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQogewogICAgIGlmIChwcm90b2NvbElzSmF2YVNjcmlwdChkZXByZWNh
dGVkUGFyc2VVUkwodmFsdWUpKSkgewpAQCAtNTUsNyArNTgsNyBAQCB2b2lkIEpTSFRNTEZyYW1l
RWxlbWVudDo6c2V0U3JjKEV4ZWNTdGF0CiAgICAgaWYgKCFhbGxvd1NldHRpbmdKYXZhc2NyaXB0
VVJMKGV4ZWMsIGltcCwgc3JjVmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbXAtPnNl
dFNyYyhzcmNWYWx1ZSk7CisgICAgaW1wLT5zZXRBdHRyaWJ1dGUoc3JjQXR0ciwgc3JjVmFsdWUp
OwogICAgIHJldHVybjsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJRnJh
bWVFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA0NzM1NykKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MSUZyYW1lRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDEyICszMiwxNSBAQAogI2luY2x1ZGUgIkNTU0hlbHBlci5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwor
CiB2b2lkIEpTSFRNTElGcmFtZUVsZW1lbnQ6OnNldFNyYyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgSFRNTElGcmFtZUVsZW1lbnQqIGltcCA9IHN0YXRpY19jYXN0PEhU
TUxJRnJhbWVFbGVtZW50Kj4oaW1wbCgpKTsKQEAgLTQ5LDcgKzUyLDcgQEAgdm9pZCBKU0hUTUxJ
RnJhbWVFbGVtZW50OjpzZXRTcmMoRXhlY1N0YQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGltcC0+c2V0U3JjKHNyY1ZhbHVlKTsKKyAgICBpbXAtPnNldEF0dHJpYnV0ZShzcmNB
dHRyLCBzcmNWYWx1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9v
YmpjL0RPTS5tbQkocmV2aXNpb24gNDczNTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9N
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwyMSArMjksMjIgQEAKICNpbXBvcnQgIkRPTUludGVy
bmFsLmgiIC8vIGltcG9ydCBmaXJzdCB0byBtYWtlIHRoZSBwcml2YXRlL3B1YmxpYyB0cmljayB3
b3JrCiAjaW1wb3J0ICJET00uaCIKIAotI2ltcG9ydCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgogI2lt
cG9ydCAiRE9NRWxlbWVudEludGVybmFsLmgiCi0jaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIK
ICNpbXBvcnQgIkRPTUhUTUxDYW52YXNFbGVtZW50LmgiCisjaW1wb3J0ICJET01Ob2RlSW50ZXJu
YWwuaCIKKyNpbXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkZyYW1lLmgiCi0j
aW1wb3J0ICJIVE1MTmFtZXMuaCIKICNpbXBvcnQgIkhUTUxFbGVtZW50LmgiCi0jaW1wb3J0ICJS
ZW5kZXJJbWFnZS5oIgorI2ltcG9ydCAiSFRNTE5hbWVzLmgiCiAjaW1wb3J0ICJOb2RlRmlsdGVy
LmgiCisjaW1wb3J0ICJSZW5kZXJJbWFnZS5oIgogI2ltcG9ydCAiV2ViU2NyaXB0T2JqZWN0UHJp
dmF0ZS5oIgogI2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4KIAogI2lmIEVOQUJMRShTVkdfRE9NX09C
SkNfQklORElOR1MpCiAjaW1wb3J0ICJET01TVkcuaCIKICNpbXBvcnQgIlNWR0VsZW1lbnRJbnN0
YW5jZS5oIgorI2ltcG9ydCAiU1ZHTmFtZXMuaCIKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gNDczNTcpCisrKyBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDYgQEAKICNpbmNsdWRlICJIaXRU
ZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW1hZ2VMb2FkZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0
b3JDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1
ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWFw
cGVkQXR0cmlidXRlLmgiCkBAIC0xMDIsOCArMTAxLDEwIEBACiAjaW5jbHVkZSAiUmVuZGVyVGV4
dENvbnRyb2wuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lk
Z2V0LmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5oIgorI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlz
dGVuZXIuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlZ21lbnRl
ZFN0cmluZy5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKQEAgLTc5NSw3ICs3
OTYsNyBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IERvY3VtZW50OjpjcmVhdGVFbGVtCiAjZW5kaWYK
ICAgICAKICAgICBpZiAoIWUpCi0gICAgICAgIGUgPSBuZXcgRWxlbWVudChxTmFtZSwgZG9jdW1l
bnQoKSk7CisgICAgICAgIGUgPSBFbGVtZW50OjpjcmVhdGUocU5hbWUsIGRvY3VtZW50KCkpOwog
CiAgICAgLy8gPGltYWdlPiB1c2VzIGltZ1RhZyBzbyB3ZSBuZWVkIGEgc3BlY2lhbCBydWxlLgog
I2lmIEVOQUJMRShXTUwpCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gNDczNTcpCisrKyBXZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTIgKzU3LDE3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3Bh
Y2UgWE1MTmFtZXM7CiAgICAgCi1FbGVtZW50OjpFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKLSAgICA6IENvbnRhaW5lck5vZGUoZG9jdW1l
bnQsIENyZWF0ZUVsZW1lbnRaZXJvUmVmQ291bnQpCitFbGVtZW50OjpFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgQ29uc3RydWN0aW9uVHlw
ZSB0eXBlKQorICAgIDogQ29udGFpbmVyTm9kZShkb2N1bWVudCwgdHlwZSkKICAgICAsIG1fdGFn
TmFtZSh0YWdOYW1lKQogewogfQogCitQYXNzUmVmUHRyPEVsZW1lbnQ+IEVsZW1lbnQ6OmNyZWF0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBDcmVhdGVF
bGVtZW50KSk7Cit9CisKIEVsZW1lbnQ6On5FbGVtZW50KCkKIHsKICAgICBpZiAobmFtZWRBdHRy
TWFwKQpJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0VsZW1lbnQuaAkocmV2aXNpb24gNDczNTcpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgSW50U2l6ZTsKIAogY2xhc3Mg
RWxlbWVudCA6IHB1YmxpYyBDb250YWluZXJOb2RlIHsKIHB1YmxpYzoKLSAgICBFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVs
ZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICB2aXJ0
dWFsIH5FbGVtZW50KCk7CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGdldElEQXR0cmlidXRl
KCkgY29uc3Q7CkBAIC0yMDYsNiArMjA2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKSB7IH0KIAogcHJvdGVjdGVkOgorICAgIEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgQ29uc3RydWN0aW9uVHlwZSk7
CisKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNo
YW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIgPSBmYWxzZSwgTm9kZSogYmVmb3JlQ2hhbmdlID0g
MCwgTm9kZSogYWZ0ZXJDaGFuZ2UgPSAwLCBpbnQgY2hpbGRDb3VudERlbHRhID0gMCk7CkluZGV4
OiBXZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9TdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gNDczNTcpCisrKyBXZWJDb3JlL2RvbS9TdHls
ZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDExICsxMDEsNiBAQCB2b2lkIFN0
eWxlZEVsZW1lbnQ6OnJlbW92ZU1hcHBlZEF0dHJpYnV0CiAgICAgbWFwcGVkQXR0cmlidXRlRGVj
bHMtPnJlbW92ZShNYXBwZWRBdHRyaWJ1dGVLZXkoZW50cnlUeXBlLCBhdHRyTmFtZS5sb2NhbE5h
bWUoKS5pbXBsKCksIGF0dHJWYWx1ZS5pbXBsKCkpKTsKIH0KIAotdm9pZCBTdHlsZWRFbGVtZW50
OjppbnZhbGlkYXRlU3R5bGVBdHRyaWJ1dGUoKQotewotICAgIG1faXNTdHlsZUF0dHJpYnV0ZVZh
bGlkID0gZmFsc2U7Ci19Ci0KIHZvaWQgU3R5bGVkRWxlbWVudDo6dXBkYXRlU3R5bGVBdHRyaWJ1
dGUoKSBjb25zdAogewogICAgIEFTU0VSVCghbV9pc1N0eWxlQXR0cmlidXRlVmFsaWQpOwpAQCAt
MTE2LDggKzExMSw4IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6dXBkYXRlU3R5bGVBdHRyaWJ1dGUK
ICAgICBtX3N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSA9IGZhbHNlOwogfQogCi1TdHlsZWRF
bGVtZW50OjpTdHlsZWRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIERvY3VtZW50
ICpkb2MpCi0gICAgOiBFbGVtZW50KG5hbWUsIGRvYykKK1N0eWxlZEVsZW1lbnQ6OlN0eWxlZEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBDb25z
dHJ1Y3Rpb25UeXBlIHR5cGUpCisgICAgOiBFbGVtZW50KG5hbWUsIGRvY3VtZW50LCB0eXBlKQog
ewogfQogCkBAIC0yOTIsMTIgKzI4Nyw2IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkQ1NTUHJv
cGVydHkoTWFwcGUKICAgICBhdHRyLT5kZWNsKCktPnNldFByb3BlcnR5KGlkLCB2YWx1ZSwgZmFs
c2UpOwogfQogCi12b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZENTU1N0cmluZ1Byb3BlcnR5KE1hcHBl
ZEF0dHJpYnV0ZSogYXR0ciwgaW50IGlkLCBjb25zdCBTdHJpbmcgJnZhbHVlLCBDU1NQcmltaXRp
dmVWYWx1ZTo6VW5pdFR5cGVzIHR5cGUpCi17Ci0gICAgaWYgKCFhdHRyLT5kZWNsKCkpIGNyZWF0
ZU1hcHBlZERlY2woYXR0cik7Ci0gICAgYXR0ci0+ZGVjbCgpLT5zZXRTdHJpbmdQcm9wZXJ0eShp
ZCwgdmFsdWUsIHR5cGUsIGZhbHNlKTsKLX0KLQogdm9pZCBTdHlsZWRFbGVtZW50OjphZGRDU1NJ
bWFnZVByb3BlcnR5KE1hcHBlZEF0dHJpYnV0ZSogYXR0ciwgaW50IGlkLCBjb25zdCBTdHJpbmcm
IHVybCkKIHsKICAgICBpZiAoIWF0dHItPmRlY2woKSkgY3JlYXRlTWFwcGVkRGVjbChhdHRyKTsK
SW5kZXg6IFdlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9TdHlsZWRFbGVtZW50LmgJKHJldmlzaW9uIDQ3MzU3KQorKysgV2ViQ29yZS9kb20vU3R5
bGVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw1NCArMzgsNTAgQEAgY2xhc3MgTWFw
cGVkQXR0cmlidXRlOwogCiBjbGFzcyBTdHlsZWRFbGVtZW50IDogcHVibGljIEVsZW1lbnQgewog
cHVibGljOgotICAgIFN0eWxlZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CiAgICAgdmlydHVhbCB+U3R5bGVkRWxlbWVudCgpOwogCi0gICAgdmlydHVhbCBib29sIGlz
U3R5bGVkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQogICAgIE5hbWVkTWFwcGVk
QXR0ck1hcCogbWFwcGVkQXR0cmlidXRlcygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PE5hbWVkTWFw
cGVkQXR0ck1hcCo+KG5hbWVkQXR0ck1hcC5nZXQoKSk7IH0KLSAgICBjb25zdCBOYW1lZE1hcHBl
ZEF0dHJNYXAqIG1hcHBlZEF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxO
YW1lZE1hcHBlZEF0dHJNYXAqPihuYW1lZEF0dHJNYXAuZ2V0KCkpOyB9CisgICAgY29uc3QgTmFt
ZWRNYXBwZWRBdHRyTWFwKiBtYXBwZWRBdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgTmFtZWRNYXBwZWRBdHRyTWFwKj4obmFtZWRBdHRyTWFwLmdldCgpKTsgfQor
CiAgICAgYm9vbCBoYXNNYXBwZWRBdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbmFtZWRBdHRy
TWFwICYmIG1hcHBlZEF0dHJpYnV0ZXMoKS0+aGFzTWFwcGVkQXR0cmlidXRlcygpOyB9CiAgICAg
Ym9vbCBpc01hcHBlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdCB7
IE1hcHBlZEF0dHJpYnV0ZUVudHJ5IHJlcyA9IGVOb25lOyBtYXBUb0VudHJ5KG5hbWUsIHJlcyk7
IHJldHVybiByZXMgIT0gZU5vbmU7IH0KIAotICAgIHZvaWQgYWRkQ1NTTGVuZ3RoKE1hcHBlZEF0
dHJpYnV0ZSogYXR0ciwgaW50IGlkLCBjb25zdCBTdHJpbmcgJnZhbHVlKTsKLSAgICB2b2lkIGFk
ZENTU1Byb3BlcnR5KE1hcHBlZEF0dHJpYnV0ZSogYXR0ciwgaW50IGlkLCBjb25zdCBTdHJpbmcg
JnZhbHVlKTsKLSAgICB2b2lkIGFkZENTU1Byb3BlcnR5KE1hcHBlZEF0dHJpYnV0ZSogYXR0ciwg
aW50IGlkLCBpbnQgdmFsdWUpOwotICAgIHZvaWQgYWRkQ1NTU3RyaW5nUHJvcGVydHkoTWFwcGVk
QXR0cmlidXRlKiBhdHRyLCBpbnQgaWQsIGNvbnN0IFN0cmluZyAmdmFsdWUsIENTU1ByaW1pdGl2
ZVZhbHVlOjpVbml0VHlwZXMgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CisgICAg
dm9pZCBhZGRDU1NMZW5ndGgoTWFwcGVkQXR0cmlidXRlKiwgaW50IGlkLCBjb25zdCBTdHJpbmcm
IHZhbHVlKTsKKyAgICB2b2lkIGFkZENTU1Byb3BlcnR5KE1hcHBlZEF0dHJpYnV0ZSosIGludCBp
ZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgdm9pZCBhZGRDU1NQcm9wZXJ0eShNYXBwZWRB
dHRyaWJ1dGUqLCBpbnQgaWQsIGludCB2YWx1ZSk7CiAgICAgdm9pZCBhZGRDU1NJbWFnZVByb3Bl
cnR5KE1hcHBlZEF0dHJpYnV0ZSosIGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHVybCk7
Ci0gICAgdm9pZCBhZGRDU1NDb2xvcihNYXBwZWRBdHRyaWJ1dGUqIGF0dHIsIGludCBpZCwgY29u
c3QgU3RyaW5nICZjKTsKLSAgICB2b2lkIGNyZWF0ZU1hcHBlZERlY2woTWFwcGVkQXR0cmlidXRl
KiBhdHRyKTsKLSAgICAKLSAgICBzdGF0aWMgQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24q
IGdldE1hcHBlZEF0dHJpYnV0ZURlY2woTWFwcGVkQXR0cmlidXRlRW50cnkgdHlwZSwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CisgICAgdm9p
ZCBhZGRDU1NDb2xvcihNYXBwZWRBdHRyaWJ1dGUqLCBpbnQgaWQsIGNvbnN0IFN0cmluZyYgY29s
b3IpOworCisgICAgc3RhdGljIENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKiBnZXRNYXBw
ZWRBdHRyaWJ1dGVEZWNsKE1hcHBlZEF0dHJpYnV0ZUVudHJ5LCBjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKICAgICBzdGF0aWMgdm9pZCBzZXRN
YXBwZWRBdHRyaWJ1dGVEZWNsKE1hcHBlZEF0dHJpYnV0ZUVudHJ5LCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBDU1NNYXBwZWRBdHRyaWJ1dGVE
ZWNsYXJhdGlvbiopOwotICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1hcHBlZEF0dHJpYnV0ZURlY2wo
TWFwcGVkQXR0cmlidXRlRW50cnkgdHlwZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29u
c3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CisgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWFwcGVkQXR0
cmlidXRlRGVjbChNYXBwZWRBdHRyaWJ1dGVFbnRyeSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CiAKICAgICBzdGF0aWMgQ1NTTWFwcGVkQXR0
cmlidXRlRGVjbGFyYXRpb24qIGdldE1hcHBlZEF0dHJpYnV0ZURlY2woTWFwcGVkQXR0cmlidXRl
RW50cnksIEF0dHJpYnV0ZSopOwogICAgIHN0YXRpYyB2b2lkIHNldE1hcHBlZEF0dHJpYnV0ZURl
Y2woTWFwcGVkQXR0cmlidXRlRW50cnksIEF0dHJpYnV0ZSosIENTU01hcHBlZEF0dHJpYnV0ZURl
Y2xhcmF0aW9uKik7CiAgICAgCisKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogaW5s
aW5lU3R5bGVEZWNsKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVTdHlsZURlY2wuZ2V0KCk7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgYWRkaXRpb25hbEF0dHJp
YnV0ZVN0eWxlRGVjbHMoVmVjdG9yPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4mKSB7fTsK
ICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZ2V0SW5saW5lU3R5bGVEZWNsKCk7CiAg
ICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKTsKLSAgICB2b2lkIGNyZWF0ZUlubGluZVN0
eWxlRGVjbCgpOwotICAgIHZvaWQgZGVzdHJveUlubGluZVN0eWxlRGVjbCgpOwogICAgIHZvaWQg
aW52YWxpZGF0ZVN0eWxlQXR0cmlidXRlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0eWxl
QXR0cmlidXRlKCkgY29uc3Q7Ci0gICAgCisKICAgICBjb25zdCBDbGFzc05hbWVzJiBjbGFzc05h
bWVzKCkgY29uc3QgeyBBU1NFUlQoaGFzQ2xhc3MoKSk7IEFTU0VSVChtYXBwZWRBdHRyaWJ1dGVz
KCkpOyByZXR1cm4gbWFwcGVkQXR0cmlidXRlcygpLT5jbGFzc05hbWVzKCk7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSosIGJvb2wgcHJlc2VydmVEZWNs
cyA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlKik7CiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVBdHRyaWJ1dGVNYXAoKSBjb25zdDsKKwogICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxBdHRyaWJ1dGU+IGNyZWF0ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CiAKK3Byb3RlY3RlZDoKKyAgICBTdHlsZWRF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIENvbnN0cnVjdGlvblR5cGUp
OworCisgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwgYm9vbCBw
cmVzZXJ2ZURlY2xzID0gZmFsc2UpOworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgY29weU5vbkF0dHJpYnV0
ZVByb3BlcnRpZXMoY29uc3QgRWxlbWVudCopOwogCiAgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJl
c291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0OwogCi1wcm90ZWN0
ZWQ6CiAgICAgLy8gY2xhc3NBdHRyaWJ1dGVDaGFuZ2VkKCkgZXhpc3RzIHRvIHNoYXJlIGNvZGUg
YmV0d2VlbgogICAgIC8vIHBhcnNlTWFwcGVkQXR0cmlidXRlIChjYWxsZWQgdmlhIHNldEF0dHJp
YnV0ZSgpKSBhbmQKICAgICAvLyBzdmdBdHRyaWJ1dGVDaGFuZ2VkIChjYWxsZWQgd2hlbiBlbGVt
ZW50LmNsYXNzTmFtZS5iYXNlVmFsdWUgaXMgc2V0KQpAQCAtOTMsOSArODksMjUgQEAgcHJvdGVj
dGVkOgogICAgIAogICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7
CiAKK3ByaXZhdGU6CisgICAgdmlydHVhbCBib29sIGlzU3R5bGVkRWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KKworICAgIHZvaWQgY3JlYXRlTWFwcGVkRGVjbChNYXBwZWRBdHRyaWJ1
dGUqKTsKKworICAgIHZvaWQgY3JlYXRlSW5saW5lU3R5bGVEZWNsKCk7CisgICAgdm9pZCBkZXN0
cm95SW5saW5lU3R5bGVEZWNsKCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0eWxlQXR0cmli
dXRlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQXR0cmlidXRlTWFwKCkgY29u
c3Q7CisKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1faW5saW5lU3R5
bGVEZWNsOwogfTsKIAoraW5saW5lIHZvaWQgU3R5bGVkRWxlbWVudDo6aW52YWxpZGF0ZVN0eWxl
QXR0cmlidXRlKCkKK3sKKyAgICBtX2lzU3R5bGVBdHRyaWJ1dGVWYWxpZCA9IGZhbHNlOworfQor
CiB9IC8vbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5w
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCShyZXZpc2lvbiA0NzM1
NykKKysrIFdlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcg
KzkzLDcgQEAgc3ViIGRlZmF1bHRUYWdQcm9wZXJ0eUhhc2gKICAgICByZXR1cm4gKAogICAgICAg
ICAnY29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNlcicgPT4gMCwKICAgICAgICAgJ2NvbnN0
cnVjdG9yTmVlZHNGb3JtRWxlbWVudCcgPT4gMCwKLSAgICAgICAgJ2NyZWF0ZVdpdGhOZXcnID0+
IDEsCisgICAgICAgICdjcmVhdGVXaXRoTmV3JyA9PiAwLAogICAgICAgICAnZXhwb3J0U3RyaW5n
JyA9PiAwLAogICAgICAgICAnaW50ZXJmYWNlTmFtZScgPT4gZGVmYXVsdEludGVyZmFjZU5hbWUo
JF9bMF0pLAogICAgICAgICAjIEJ5IGRlZmF1bHQsIHRoZSBKU0ludGVyZmFjZU5hbWUgaXMgdGhl
IHNhbWUgYXMgdGhlIGludGVyZmFjZU5hbWUuCkBAIC0yODIsNyArMjgyLDcgQEAgc3ViIHByaW50
Q29uc3RydWN0b3JJbnRlcmlvcgogICAgIGlmICgkdGFnc3skdGFnTmFtZX17d3JhcHBlck9ubHlJ
Zk1lZGlhSXNBdmFpbGFibGV9KSB7CiAgICAgICAgIHByaW50IEYgPDxFTkQKICAgICBpZiAoIU1l
ZGlhUGxheWVyOjppc0F2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gbmV3IEhUTUxFbGVtZW50
KCRjb25zdHJ1Y3RvclRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICAgICAgcmV0dXJuIEhUTUxFbGVt
ZW50OjpjcmVhdGUoJGNvbnN0cnVjdG9yVGFnTmFtZSwgZG9jdW1lbnQpOwogRU5ECiA7CiAgICAg
fQpAQCAtNzU2LDcgKzc1Niw3IEBAIGlmICgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9IGVxICJIVE1M
IikgewogICAgIHByaW50IEYgIiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHFOYW1lLCBkb2N1bWVu
dCwgY3JlYXRlZEJ5UGFyc2VyKTtcbiI7CiB9CiAKLXByaW50IEYgIiAgICByZXR1cm4gbmV3ICRw
YXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50KHFOYW1lLCBkb2N1bWVudCk7XG4iOworcHJpbnQg
RiAiICAgIHJldHVybiAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudDo6Y3JlYXRlKHFOYW1l
LCBkb2N1bWVudCk7XG4iOwogCiBpZiAoJHBhcmFtZXRlcnN7Z3VhcmRGYWN0b3J5V2l0aH0pIHsK
IApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0NyZWF0ZUxpbmtDb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQ3JlYXRlTGlua0NvbW1hbmQuY3BwCShyZXZpc2lvbiA0NzM1
NykKKysrIFdlYkNvcmUvZWRpdGluZy9DcmVhdGVMaW5rQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBDcmVhdGVMaW5rQ29tbWFuZDo6ZG9BcHBseSgpCiAg
ICAgaWYgKGVuZGluZ1NlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAotICAgIFJlZlB0cjxIVE1MQW5jaG9yRWxlbWVudD4gYW5jaG9yRWxlbWVudCA9IG5ldyBI
VE1MQW5jaG9yRWxlbWVudChkb2N1bWVudCgpKTsKKyAgICBSZWZQdHI8SFRNTEFuY2hvckVsZW1l
bnQ+IGFuY2hvckVsZW1lbnQgPSBIVE1MQW5jaG9yRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkp
OwogICAgIGFuY2hvckVsZW1lbnQtPnNldEhyZWYobV91cmwpOwogICAgIAogICAgIGlmIChlbmRp
bmdTZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9VbmxpbmtD
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvVW5saW5rQ29tbWFuZC5j
cHAJKHJldmlzaW9uIDQ3MzU3KQorKysgV2ViQ29yZS9lZGl0aW5nL1VubGlua0NvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNCArMzcsMTMgQEAgVW5saW5rQ29tbWFuZDo6VW5saW5r
Q29tbWFuZChEb2N1bWVudCogZAogCiB2b2lkIFVubGlua0NvbW1hbmQ6OmRvQXBwbHkoKQogewot
ICAgIC8vIEZJWE1FOiBJZiBhIGNhcmV0IGlzIGluc2lkZSBhIGxpbmssIHJlbW92ZSBpdC4KKyAg
ICAvLyBGSVhNRTogSWYgYSBjYXJldCBpcyBpbnNpZGUgYSBsaW5rLCB3ZSBzaG91bGQgcmVtb3Zl
IGl0LCBidXQgY3VycmVudGx5IHdlIGRvbid0LgogICAgIGlmICghZW5kaW5nU2VsZWN0aW9uKCku
aXNSYW5nZSgpKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIHB1c2hQYXJ0aWFsbHlT
ZWxlY3RlZEFuY2hvckVsZW1lbnRzRG93bigpOwogCi0gICAgSFRNTEFuY2hvckVsZW1lbnQqIGFu
Y2hvckVsZW1lbnQgPSBuZXcgSFRNTEFuY2hvckVsZW1lbnQoZG9jdW1lbnQoKSk7Ci0gICAgcmVt
b3ZlU3R5bGVkRWxlbWVudChhbmNob3JFbGVtZW50KTsKKyAgICByZW1vdmVTdHlsZWRFbGVtZW50
KEhUTUxBbmNob3JFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSkpOwogfQogCiB9CkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3MzU3KQorKysgV2ViQ29yZS9o
dG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTggKzQwLDIw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAot
SFRNTEFuY2hvckVsZW1lbnQ6OkhUTUxBbmNob3JFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCkK
LSAgICA6IEhUTUxFbGVtZW50KGFUYWcsIGRvY3VtZW50KQotICAgICwgbV9yb290RWRpdGFibGVF
bGVtZW50Rm9yU2VsZWN0aW9uT25Nb3VzZURvd24oMCkKK0hUTUxBbmNob3JFbGVtZW50OjpIVE1M
QW5jaG9yRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
dW1lbnQpCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgQ3JlYXRlRWxlbWVu
dCkKICAgICAsIG1fd2FzU2hpZnRLZXlEb3duT25Nb3VzZURvd24oZmFsc2UpCiB7CiB9CiAKLUhU
TUxBbmNob3JFbGVtZW50OjpIVE1MQW5jaG9yRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCi0gICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBk
b2N1bWVudCkKLSAgICAsIG1fcm9vdEVkaXRhYmxlRWxlbWVudEZvclNlbGVjdGlvbk9uTW91c2VE
b3duKDApCi0gICAgLCBtX3dhc1NoaWZ0S2V5RG93bk9uTW91c2VEb3duKGZhbHNlKQorUGFzc1Jl
ZlB0cjxIVE1MQW5jaG9yRWxlbWVudD4gSFRNTEFuY2hvckVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVu
dCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MQW5jaG9yRWxlbWVu
dChhVGFnLCBkb2N1bWVudCkpOworfQorCitQYXNzUmVmUHRyPEhUTUxBbmNob3JFbGVtZW50PiBI
VE1MQW5jaG9yRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiBkb2N1bWVudCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxBbmNob3JF
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIGJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6
OnN1cHBvcnRzRm9jdXMoKSBjb25zdApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgJKHJl
dmlzaW9uIDQ3MzU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBI
VE1MQW5jaG9yRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgSFRN
TEFuY2hvckVsZW1lbnQoRG9jdW1lbnQqKTsKLSAgICBIVE1MQW5jaG9yRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MQW5j
aG9yRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRN
TEFuY2hvckVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
IAogICAgIEtVUkwgaHJlZigpIGNvbnN0OwogICAgIHZvaWQgc2V0SHJlZihjb25zdCBBdG9taWNT
dHJpbmcmKTsKQEAgLTUyLDYgKzUyLDggQEAgcHVibGljOgogICAgIGJvb2wgaXNMaXZlTGluaygp
IGNvbnN0OwogCiBwcm90ZWN0ZWQ6CisgICAgSFRNTEFuY2hvckVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7CisKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAKIHByaXZhdGU6CkBAIC03MCw3ICs3Miw3IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBzaG9ydCB0YWJJbmRleCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBkcmFnZ2FibGUoKSBjb25zdDsKIAotICAgIEVsZW1lbnQqIG1fcm9vdEVkaXRhYmxlRWxl
bWVudEZvclNlbGVjdGlvbk9uTW91c2VEb3duOworICAgIFJlZlB0cjxFbGVtZW50PiBtX3Jvb3RF
ZGl0YWJsZUVsZW1lbnRGb3JTZWxlY3Rpb25Pbk1vdXNlRG93bjsKICAgICBib29sIG1fd2FzU2hp
ZnRLZXlEb3duT25Nb3VzZURvd247CiB9OwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEFwcGxl
dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDQ3MzU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTIgKzM0LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTEFwcGxldEVsZW1lbnQ6OkhU
TUxBcHBsZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBk
b2MpCi0gICAgOiBIVE1MUGx1Z0luRWxlbWVudCh0YWdOYW1lLCBkb2MpCitpbmxpbmUgSFRNTEFw
cGxldEVsZW1lbnQ6OkhUTUxBcHBsZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxQbHVnSW5FbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGFwcGxldFRhZykpOwogfQogCitQ
YXNzUmVmUHRyPEhUTUxBcHBsZXRFbGVtZW50PiBIVE1MQXBwbGV0RWxlbWVudDo6Y3JlYXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxBcHBsZXRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7
Cit9CisKIHZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IGFsdEF0dHIgfHwK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5oCShyZXZpc2lvbiA0NzM1NykKKysrIFdlYkNv
cmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMiArMjcs
OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxGb3JtRWxlbWVudDsKLWNs
YXNzIEhUTUxJbWFnZUxvYWRlcjsKLQogY2xhc3MgSFRNTEFwcGxldEVsZW1lbnQgOiBwdWJsaWMg
SFRNTFBsdWdJbkVsZW1lbnQgewogcHVibGljOgotICAgIEhUTUxBcHBsZXRFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxB
cHBsZXRFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAK
ICAgICBTdHJpbmcgaHNwYWNlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRIc3BhY2UoY29uc3QgU3Ry
aW5nJik7CkBAIC00MSw2ICszOCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZzcGFjZShjb25z
dCBTdHJpbmcmKTsKIAogcHJpdmF0ZToKKyAgICBIVE1MQXBwbGV0RWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKwogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gMTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSopOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDQ3MzU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MQXJlYUVsZW1lbnQ6OkhUTUxBcmVhRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCitpbmxpbmUg
SFRNTEFyZWFFbGVtZW50OjpIVE1MQXJlYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDogSFRNTEFuY2hvckVsZW1lbnQodGFnTmFt
ZSwgZG9jdW1lbnQpCiAgICAgLCBtX2Nvb3Jkc0xlbigwKQogICAgICwgbV9sYXN0U2l6ZSgtMSwg
LTEpCkBAIC00Myw4ICs0Myw5IEBAIEhUTUxBcmVhRWxlbWVudDo6SFRNTEFyZWFFbGVtZW50KGNv
bnN0IFEKICAgICBBU1NFUlQoaGFzVGFnTmFtZShhcmVhVGFnKSk7CiB9CiAKLUhUTUxBcmVhRWxl
bWVudDo6fkhUTUxBcmVhRWxlbWVudCgpCitQYXNzUmVmUHRyPEhUTUxBcmVhRWxlbWVudD4gSFRN
TEFyZWFFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvY3VtZW50KQogeworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTEFyZWFFbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIHZvaWQgSFRNTEFyZWFFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTEFyZWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxl
bWVudC5oCShyZXZpc2lvbiA0NzM1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsNyBAQCBjbGFzcyBQYXRoOwogCiBjbGFzcyBI
VE1MQXJlYUVsZW1lbnQgOiBwdWJsaWMgSFRNTEFuY2hvckVsZW1lbnQgewogcHVibGljOgotICAg
IEhUTUxBcmVhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLSAgICB2
aXJ0dWFsIH5IVE1MQXJlYUVsZW1lbnQoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MQXJl
YUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAg
IGJvb2wgaXNEZWZhdWx0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZSA9PSBEZWZhdWx0OyB9CiAK
QEAgLTQ5LDYgKzQ4LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Tm9IcmVmKGJvb2wpOwogCiBw
cml2YXRlOgorICAgIEhUTUxBcmVhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqKTsKKwogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQogICAgIHZpcnR1YWwgaW50IHRhZ1By
aW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2
aXNpb24gNDczNTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NiwxMyArNTYsOSBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcg
c3RkOjptaW47CiB1c2luZyBzdGQ6Om1heDsKIAotSFRNTEVsZW1lbnQ6OkhUTUxFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCi0gICAgOiBTdHlsZWRF
bGVtZW50KHRhZ05hbWUsIGRvYykKLXsKLX0KLQotSFRNTEVsZW1lbnQ6On5IVE1MRWxlbWVudCgp
CitQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBIVE1MRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBDcmVhdGVFbGVtZW50KSk7
CiB9CiAKIFN0cmluZyBIVE1MRWxlbWVudDo6bm9kZU5hbWUoKSBjb25zdApAQCAtNzI3LDEyICs3
MjMsMTIgQEAgdm9pZCBIVE1MRWxlbWVudDo6YWNjZXNzS2V5QWN0aW9uKGJvb2wgcwogICAgICAg
ICBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKDAsIHRydWUpOwogfQogCi1TdHJpbmcgSFRNTEVsZW1l
bnQ6OmlkKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTEVsZW1lbnQ6OmlkKCkgY29u
c3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGlkQXR0cik7CiB9CiAKLXZvaWQgSFRNTEVs
ZW1lbnQ6OnNldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIEhUTUxFbGVtZW50OjpzZXRJ
ZChjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShpZEF0dHIs
IHZhbHVlKTsKIH0KQEAgLTc0Miw0MSArNzM4LDE2IEBAIFN0cmluZyBIVE1MRWxlbWVudDo6dGl0
bGUoKSBjb25zdAogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKIH0KIAotdm9p
ZCBIVE1MRWxlbWVudDo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRB
dHRyaWJ1dGUodGl0bGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MRWxlbWVudDo6bGFu
ZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShsYW5nQXR0cik7Ci19Ci0KLXZv
aWQgSFRNTEVsZW1lbnQ6OnNldExhbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRB
dHRyaWJ1dGUobGFuZ0F0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxFbGVtZW50OjpkaXIo
KSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRWxlbWVudDo6ZGlyKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGRpckF0dHIpOwogfQogCi12b2lkIEhUTUxFbGVtZW50
OjpzZXREaXIoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTEVsZW1lbnQ6OnNldERpcihj
b25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShkaXJBdHRyLCB2
YWx1ZSk7CiB9CiAKLVN0cmluZyBIVE1MRWxlbWVudDo6Y2xhc3NOYW1lKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZ2V0QXR0cmlidXRlKGNsYXNzQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEVsZW1lbnQ6
OnNldENsYXNzTmFtZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShj
bGFzc0F0dHIsIHZhbHVlKTsKLX0KLQogc2hvcnQgSFRNTEVsZW1lbnQ6OnRhYkluZGV4KCkgY29u
c3QKIHsKICAgICBpZiAoc3VwcG9ydHNGb2N1cygpKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgJKHJldmlz
aW9uIDQ3MzU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZp
c3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMzUsMjggKzM1LDE1IEBAIGVudW0gSFRNTFRhZ1N0YXR1cyB7IFRh
Z1N0YXR1c09wdGlvbmFsLCAKICAgICAgICAgICAgICAgICAgICAgICAgCiBjbGFzcyBIVE1MRWxl
bWVudCA6IHB1YmxpYyBTdHlsZWRFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwotICAgIHZpcnR1YWwgfkhU
TUxFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNIVE1MRWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQqKTsKIAogICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGNoaWxkcmVuKCk7
CiAgICAgCi0gICAgU3RyaW5nIGlkKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRJZChjb25zdCBTdHJp
bmcmKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRJ
ZChjb25zdCBBdG9taWNTdHJpbmcmKTsKICAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0
OwotICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJik7Ci0gICAgU3RyaW5nIGxhbmcoKSBj
b25zdDsKLSAgICB2b2lkIHNldExhbmcoY29uc3QgU3RyaW5nJik7Ci0gICAgU3RyaW5nIGRpcigp
IGNvbnN0OwotICAgIHZvaWQgc2V0RGlyKGNvbnN0IFN0cmluZyYpOwotICAgIFN0cmluZyBjbGFz
c05hbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldENsYXNzTmFtZShjb25zdCBTdHJpbmcmKTsKKyAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGRpcigpIGNvbnN0OworICAgIHZvaWQgc2V0RGlyKGNvbnN0
IEF0b21pY1N0cmluZyYpOwogICAgIHZpcnR1YWwgc2hvcnQgdGFiSW5kZXgoKSBjb25zdDsKICAg
ICB2b2lkIHNldFRhYkluZGV4KGludCk7CiAKQEAgLTcyLDEyICs1OSwxMSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBpbnNlcnRBZGphY2VudEhUTUwoY29uc3QgU3RyaW5nJiB3aGVyZSwgY29uc3QgU3Ry
aW5nJiBodG1sLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBpbnNlcnRBZGphY2VudFRleHQo
Y29uc3QgU3RyaW5nJiB3aGVyZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJik7
CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50
UmljaGx5RWRpdGFibGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBjb250ZW50RWRpdGFi
bGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudEVkaXRhYmxlKE1hcHBlZEF0
dHJpYnV0ZSopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50RWRpdGFibGUoY29uc3QgU3Ry
aW5nJik7CisKKyAgICBTdHJpbmcgY29udGVudEVkaXRhYmxlKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRDb250ZW50RWRpdGFibGUoY29uc3QgU3RyaW5nJik7CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJh
Z2dhYmxlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXREcmFnZ2FibGUoYm9vbCk7CkBAIC04OCwzMSAr
NzQsNTMgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVp
cmVtZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7CisgICAgdmly
dHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5
bGUqKTsKKworICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1
YWxGb3JtKCk7IH0KKworICAgIHN0YXRpYyB2b2lkIGFkZEhUTUxBbGlnbm1lbnRUb1N0eWxlZEVs
ZW1lbnQoU3R5bGVkRWxlbWVudCosIE1hcHBlZEF0dHJpYnV0ZSopOworCitwcm90ZWN0ZWQ6Cisg
ICAgSFRNTEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqLCBD
b25zdHJ1Y3Rpb25UeXBlID0gQ3JlYXRlRWxlbWVudFplcm9SZWZDb3VudCk7CisKKyAgICB2b2lk
IGFkZEhUTUxBbGlnbm1lbnQoTWFwcGVkQXR0cmlidXRlKik7CisKKyAgICB2aXJ0dWFsIGJvb2wg
bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRl
RW50cnkmIHJlc3VsdCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSopOworCisgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkg
Y29uc3Q7CisKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRBbGxvd2VkKE5vZGUqIG5ld0NoaWxkKTsg
Ly8gRXJyb3ItY2hlY2tpbmcgZHVyaW5nIHBhcnNpbmcgdGhhdCBjaGVja3MgdGhlIERURAogCiAg
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBEVEQgZm9yIGEgZ2l2ZW4gY2hpbGQg
bm9kZS4KICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSopOworCiAgICAgc3Rh
dGljIGJvb2wgaW5FaXRoZXJUYWdMaXN0KGNvbnN0IE5vZGUqKTsKICAgICBzdGF0aWMgYm9vbCBp
bklubGluZVRhZ0xpc3QoY29uc3QgTm9kZSopOwogICAgIHN0YXRpYyBib29sIGluQmxvY2tUYWdM
aXN0KGNvbnN0IE5vZGUqKTsKICAgICBzdGF0aWMgYm9vbCBpc1JlY29nbml6ZWRUYWdOYW1lKGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKIAotICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVk
KFJlbmRlclN0eWxlKik7Ci0gICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVy
KFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKLQotICAgIEhUTUxGb3JtRWxlbWVudCogZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxGb3JtKCk7IH0KICAgICBIVE1MRm9ybUVsZW1lbnQq
IGZpbmRGb3JtQW5jZXN0b3IoKSBjb25zdDsKIAotICAgIHN0YXRpYyB2b2lkIGFkZEhUTUxBbGln
bm1lbnRUb1N0eWxlZEVsZW1lbnQoU3R5bGVkRWxlbWVudCosIE1hcHBlZEF0dHJpYnV0ZSopOwor
cHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgaXNIVE1MRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KIAotcHJvdGVjdGVkOgotICAgIHZvaWQgYWRkSFRNTEFsaWdubWVudChNYXBwZWRB
dHRyaWJ1dGUqKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0OworCisgICAg
dm9pZCBzZXRDb250ZW50RWRpdGFibGUoTWFwcGVkQXR0cmlidXRlKik7CiAKLXByaXZhdGU6CiAg
ICAgdmlydHVhbCBIVE1MRm9ybUVsZW1lbnQqIHZpcnR1YWxGb3JtKCkgY29uc3Q7CisKICAgICBO
b2RlKiBpbnNlcnRBZGphY2VudChjb25zdCBTdHJpbmcmIHdoZXJlLCBOb2RlKiBuZXdDaGlsZCwg
RXhjZXB0aW9uQ29kZSYpOwogfTsKIAoraW5saW5lIEhUTUxFbGVtZW50OjpIVE1MRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIENvbnN0cnVj
dGlvblR5cGUgdHlwZSkKKyAgICA6IFN0eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIHR5
cGUpCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEhUTUxFbGVt
ZW50X2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3MzU3KQor
KysgV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
LDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgKDFTdGVpbkBnbXgu
ZGUpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCkBAIC00MiwxNSArNDIsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MRW1iZWRFbGVtZW50OjpIVE1MRW1iZWRFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCi0gICAgOiBI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50KHRhZ05hbWUsIGRvYykKK2lubGluZSBIVE1MRW1iZWRFbGVt
ZW50OjpIVE1MRW1iZWRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQodGFnTmFtZSwgZG9j
dW1lbnQpCiAgICAgLCBtX25lZWRXaWRnZXRVcGRhdGUoZmFsc2UpCiB7CiAgICAgQVNTRVJUKGhh
c1RhZ05hbWUoZW1iZWRUYWcpKTsKIH0KIAotSFRNTEVtYmVkRWxlbWVudDo6fkhUTUxFbWJlZEVs
ZW1lbnQoKQorUGFzc1JlZlB0cjxIVE1MRW1iZWRFbGVtZW50PiBIVE1MRW1iZWRFbGVtZW50Ojpj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQog
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTEVtYmVkRWxlbWVudCh0YWdOYW1lLCBkb2N1
bWVudCkpOwogfQogCiBzdGF0aWMgaW5saW5lIFJlbmRlcldpZGdldCogZmluZFdpZGdldFJlbmRl
cmVyKGNvbnN0IE5vZGUqIG4pIApAQCAtMjM4LDMxICsyMzksMTEgQEAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTEVtYmVkRWxlbWVudDo6aQogICAgIHJldHVybiBzcmNBdHRyOwogfQogCi1TdHJp
bmcgSFRNTEVtYmVkRWxlbWVudDo6c3JjKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKHNyY0F0dHIpOwotfQotCi12b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OnNldFNyYyhjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShzcmNBdHRyLCB2YWx1ZSk7Ci19Ci0K
LVN0cmluZyBIVE1MRW1iZWRFbGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKHR5cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MRW1iZWRFbGVtZW50OjpzZXRUeXBl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB2YWx1
ZSk7Ci19Ci0KIHZvaWQgSFRNTEVtYmVkRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVV
UkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdAogewogICAgIEhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyh1cmxzKTsKIAotICAgIGFkZFN1
YnJlc291cmNlVVJMKHVybHMsIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHNyYygpKSk7CisgICAg
YWRkU3VicmVzb3VyY2VVUkwodXJscywgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmli
dXRlKHNyY0F0dHIpKSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaAkocmV2
aXNpb24gNDczNTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI5LDggKzI5LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
SFRNTEVtYmVkRWxlbWVudCA6IHB1YmxpYyBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50IHsKIHB1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRW1iZWRFbGVtZW50PiBjcmVhdGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisKKyAgICB2b2lkIHNldE5lZWRXaWRnZXRVcGRh
dGUoYm9vbCBuZWVkV2lkZ2V0VXBkYXRlKSB7IG1fbmVlZFdpZGdldFVwZGF0ZSA9IG5lZWRXaWRn
ZXRVcGRhdGU7IH0KKworcHJpdmF0ZToKICAgICBIVE1MRW1iZWRFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCopOwotICAgIH5IVE1MRW1iZWRFbGVtZW50KCk7CiAKICAgICB2
aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBU
YWdTdGF0dXNGb3JiaWRkZW47IH0KICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KQEAgLTUwLDE5ICs1NCwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBj
b25zdCBRdWFsaWZpZWROYW1lJiBpbWFnZVNvdXJjZUF0dHJpYnV0ZU5hbWUoKSBjb25zdDsKIAog
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVXaWRnZXQoKTsKLSAgICB2b2lkIHNldE5lZWRXaWRnZXRV
cGRhdGUoYm9vbCBuZWVkV2lkZ2V0VXBkYXRlKSB7IG1fbmVlZFdpZGdldFVwZGF0ZSA9IG5lZWRX
aWRnZXRVcGRhdGU7IH0KIAogICAgIHZpcnR1YWwgUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXRG
b3JKU0JpbmRpbmdzKCkgY29uc3Q7CiAKLSAgICBTdHJpbmcgc3JjKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRTcmMoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwotICAg
IHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcmKTsKLQogICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJy
ZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdDsKIAotcHJpdmF0
ZToKICAgICBib29sIG1fbmVlZFdpZGdldFVwZGF0ZTsKIH07CiAKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MRnJhbWVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZy
YW1lRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3MzU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxGcmFt
ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTEZyYW1lRWxlbWVu
dDo6SFRNTEZyYW1lRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jdW1lbnQpCitpbmxpbmUgSFRNTEZyYW1lRWxlbWVudDo6SFRNTEZyYW1lRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBI
VE1MRnJhbWVFbGVtZW50QmFzZSh0YWdOYW1lLCBkb2N1bWVudCkKICAgICAsIG1fZnJhbWVCb3Jk
ZXIodHJ1ZSkKICAgICAsIG1fZnJhbWVCb3JkZXJTZXQoZmFsc2UpCkBAIC00Myw2ICs0MywxMSBA
QCBIVE1MRnJhbWVFbGVtZW50OjpIVE1MRnJhbWVFbGVtZW50KGNvbnN0CiAgICAgQVNTRVJUKGhh
c1RhZ05hbWUoZnJhbWVUYWcpKTsKIH0KIAorUGFzc1JlZlB0cjxIVE1MRnJhbWVFbGVtZW50PiBI
VE1MRnJhbWVFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvY3VtZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTEZyYW1lRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOworfQorCiBib29sIEhUTUxGcmFtZUVsZW1lbnQ6OnJl
bmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKQogewogICAgIC8vIEZvciBjb21wYXRpYmlsaXR5
LCBmcmFtZXMgcmVuZGVyIGV2ZW4gd2hlbiBkaXNwbGF5OiBub25lIGlzIHNldC4KQEAgLTU2LDkg
KzYxLDEwIEBAIFJlbmRlck9iamVjdCogSFRNTEZyYW1lRWxlbWVudDo6Y3JlYXRlUmUKIAogc3Rh
dGljIGlubGluZSBIVE1MRnJhbWVTZXRFbGVtZW50KiBjb250YWluaW5nRnJhbWVTZXRFbGVtZW50
KE5vZGUqIG5vZGUpCiB7Ci0gICAgd2hpbGUgKChub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSkK
KyAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpKSB7CiAgICAgICAgIGlmIChu
b2RlLT5oYXNUYWdOYW1lKGZyYW1lc2V0VGFnKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxIVE1MRnJhbWVTZXRFbGVtZW50Kj4obm9kZSk7CisgICAgfQogICAgIHJldHVybiAwOwog
fQogCkBAIC03NCw3ICs4MCw3IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudDo6YXR0YWNoKCkKICAg
ICB9CiB9CiAKLXZvaWQgSFRNTEZyYW1lRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKQordm9pZCBIVE1MRnJhbWVFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBmcmFtZWJvcmRlckF0dHIpIHsKICAgICAgICAgbV9mcmFtZUJvcmRlciA9IGF0dHItPnZhbHVl
KCkudG9JbnQoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnQuaAkocmV2aXNpb24gNDczNTcp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCwxMyArMjgsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1bWVudDsK
LWNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFJlbmRlckFyZW5hOwotY2xhc3MgUmVuZGVyU3R5
bGU7Ci0KIGNsYXNzIEhUTUxGcmFtZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEZyYW1lRWxlbWVudEJh
c2UgewogcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxGcmFtZUVsZW1lbnQ+IGNy
ZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKworICAgIGJvb2wgaGFzRnJh
bWVCb3JkZXIoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lQm9yZGVyOyB9CisKKyAgICBib29sIG5v
UmVzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub1Jlc2l6ZTsgfQorICAgIHZvaWQgc2V0Tm9SZXNp
emUoYm9vbCk7CisKK3ByaXZhdGU6CiAgICAgSFRNTEZyYW1lRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQpAQCAtNDcs
MTIgKzUwLDYgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKIAotICAgIGJvb2wgaGFzRnJhbWVCb3JkZXIoKSBj
b25zdCB7IHJldHVybiBtX2ZyYW1lQm9yZGVyOyB9Ci0KLSAgICBib29sIG5vUmVzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9ub1Jlc2l6ZTsgfQotICAgIHZvaWQgc2V0Tm9SZXNpemUoYm9vbCk7Ci0K
LXByaXZhdGU6CiAgICAgYm9vbCBtX2ZyYW1lQm9yZGVyOwogICAgIGJvb2wgbV9mcmFtZUJvcmRl
clNldDsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCShyZXZpc2lv
biA0NzM1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjph
dHRhY2goKQogCiBLVVJMIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpsb2NhdGlvbigpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHNyYygpOworICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChn
ZXRBdHRyaWJ1dGUoc3JjQXR0cikpOwogfQogCiB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpz
ZXRMb2NhdGlvbihjb25zdCBTdHJpbmcmIHN0cikKQEAgLTIyOSw3NiArMjI5LDYgQEAgYm9vbCBI
VE1MRnJhbWVFbGVtZW50QmFzZTo6aXNVUkxBdHRyaWJ1dAogICAgIHJldHVybiBhdHRyLT5uYW1l
KCkgPT0gc3JjQXR0cjsKIH0KIAotU3RyaW5nIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpmcmFtZUJv
cmRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShmcmFtZWJvcmRlckF0dHIp
OwotfQotCi12b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpzZXRGcmFtZUJvcmRlcihjb25zdCBT
dHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShmcmFtZWJvcmRlckF0dHIsIHZhbHVl
KTsKLX0KLQotU3RyaW5nIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpsb25nRGVzYygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShsb25nZGVzY0F0dHIpOwotfQotCi12b2lkIEhUTUxG
cmFtZUVsZW1lbnRCYXNlOjpzZXRMb25nRGVzYyhjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAg
IHNldEF0dHJpYnV0ZShsb25nZGVzY0F0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxGcmFt
ZUVsZW1lbnRCYXNlOjptYXJnaW5IZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUobWFyZ2luaGVpZ2h0QXR0cik7Ci19Ci0KLXZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6
OnNldE1hcmdpbkhlaWdodChjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0
ZShtYXJnaW5oZWlnaHRBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MRnJhbWVFbGVtZW50
QmFzZTo6bWFyZ2luV2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobWFy
Z2lud2lkdGhBdHRyKTsKLX0KLQotdm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0TWFyZ2lu
V2lkdGgoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobWFyZ2lud2lk
dGhBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MRnJhbWVFbGVtZW50QmFzZTo6bmFtZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShuYW1lQXR0cik7Ci19Ci0KLXZvaWQg
SFRNTEZyYW1lRWxlbWVudEJhc2U6OnNldE5hbWUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAg
ICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxGcmFtZUVs
ZW1lbnRCYXNlOjpzY3JvbGxpbmcoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUo
c2Nyb2xsaW5nQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OnNldFNjcm9s
bGluZyhjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShzY3JvbGxpbmdB
dHRyLCB2YWx1ZSk7Ci19Ci0KLUtVUkwgSFRNTEZyYW1lRWxlbWVudEJhc2U6OnNyYygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShzcmNB
dHRyKSk7Ci19Ci0KLXZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OnNldFNyYyhjb25zdCBTdHJp
bmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShzcmNBdHRyLCB2YWx1ZSk7Ci19Ci0KIGlu
dCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6d2lkdGgoKSBjb25zdAogewogICAgIGlmICghcmVuZGVy
ZXIoKSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCShyZXZpc2lvbiA0NzM1
NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw1NyArMzEsMzkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MRnJh
bWVFbGVtZW50QmFzZSA6IHB1YmxpYyBIVE1MRnJhbWVPd25lckVsZW1lbnQgewogcHVibGljOgot
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsK
LQotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7
Ci0gICAgdmlydHVhbCBib29sIGNhbkxhenlBdHRhY2goKSB7IHJldHVybiBmYWxzZTsgfQotCiAg
ICAgS1VSTCBsb2NhdGlvbigpIGNvbnN0OwogICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgU3Ry
aW5nJik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCk7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlzVVJMQXR0
cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwotCiAgICAgdmlydHVhbCBTY3JvbGxiYXJNb2RlIHNj
cm9sbGluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGluZzsgfQogICAgIAogICAgIGlu
dCBnZXRNYXJnaW5XaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2luV2lkdGg7IH0KICAgICBp
bnQgZ2V0TWFyZ2luSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW5IZWlnaHQ7IH0KIAot
ICAgIFN0cmluZyBmcmFtZUJvcmRlcigpIGNvbnN0OwotICAgIHZvaWQgc2V0RnJhbWVCb3JkZXIo
Y29uc3QgU3RyaW5nJik7CisgICAgaW50IHdpZHRoKCkgY29uc3Q7CisgICAgaW50IGhlaWdodCgp
IGNvbnN0OwogCi0gICAgU3RyaW5nIGxvbmdEZXNjKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRMb25n
RGVzYyhjb25zdCBTdHJpbmcmKTsKK3Byb3RlY3RlZDoKKyAgICBIVE1MRnJhbWVFbGVtZW50QmFz
ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAotICAgIFN0cmluZyBtYXJnaW5I
ZWlnaHQoKSBjb25zdDsKLSAgICB2b2lkIHNldE1hcmdpbkhlaWdodChjb25zdCBTdHJpbmcmKTsK
KyAgICBib29sIGlzVVJMQWxsb3dlZCgpIGNvbnN0OwogCi0gICAgU3RyaW5nIG1hcmdpbldpZHRo
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRNYXJnaW5XaWR0aChjb25zdCBTdHJpbmcmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAKLSAg
ICBTdHJpbmcgbmFtZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogCi0gICAgU3RyaW5nIHNjcm9sbGluZygpIGNvbnN0
OwotICAgIHZvaWQgc2V0U2Nyb2xsaW5nKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9p
ZCBhdHRhY2goKTsKIAotICAgIEtVUkwgc3JjKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTcmMoY29u
c3QgU3RyaW5nJik7Citwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBjYW5MYXp5QXR0YWNoKCkg
eyByZXR1cm4gZmFsc2U7IH0KIAotICAgIGludCB3aWR0aCgpIGNvbnN0OwotICAgIGludCBoZWln
aHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCk7CisgICAgCisgICAgdmlydHVhbCBib29sIGlzVVJM
QXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwogCiAgICAgYm9vbCB2aWV3U291cmNlTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlld1NvdXJjZTsgfQogCi1wcm90ZWN0ZWQ6Ci0gICAgSFRNTEZy
YW1lRWxlbWVudEJhc2UoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7Ci0KLSAgICBi
b29sIGlzVVJMQWxsb3dlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0TmFtZUFuZE9wZW5VUkwoKTsK
ICAgICB2b2lkIG9wZW5VUkwoKTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVy
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxl
bWVudC5jcHAJKHJldmlzaW9uIDQ3MzU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVy
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMzLDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogSFRNTEZyYW1lT3duZXJFbGVtZW50OjpIVE1MRnJhbWVPd25lckVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQotICAgIDogSFRN
TEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBk
b2N1bWVudCwgQ3JlYXRlRWxlbWVudCkKICAgICAsIG1fY29udGVudEZyYW1lKDApCiB7CiB9Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCShyZXZpc2lvbiA0NzM1NykKKysr
IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcs
MzYgKzI3LDM2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRE9NV2luZG93OwogY2xh
c3MgRnJhbWU7Ci1jbGFzcyBLZXlib2FyZEV2ZW50OwogCiAjaWYgRU5BQkxFKFNWRykKIGNsYXNz
IFNWR0RvY3VtZW50OwogI2VuZGlmCiAKIGNsYXNzIEhUTUxGcmFtZU93bmVyRWxlbWVudCA6IHB1
YmxpYyBIVE1MRWxlbWVudCB7Ci1wcm90ZWN0ZWQ6Ci0gICAgSFRNTEZyYW1lT3duZXJFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7Ci0KIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5IVE1MRnJhbWVPd25lckVsZW1lbnQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCB3
aWxsUmVtb3ZlKCk7Ci0KICAgICBGcmFtZSogY29udGVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZW50RnJhbWU7IH0KICAgICBET01XaW5kb3cqIGNvbnRlbnRXaW5kb3coKSBjb25zdDsK
ICAgICBEb2N1bWVudCogY29udGVudERvY3VtZW50KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgaXNGcmFtZU93bmVyRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3QgeyByZXR1
cm4gbV9jb250ZW50RnJhbWU7IH0KLSAgICAKLSAgICB2aXJ0dWFsIFNjcm9sbGJhck1vZGUgc2Ny
b2xsaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFNjcm9sbGJhckF1dG87IH0KLQogI2lmIEVOQUJM
RShTVkcpCiAgICAgU1ZHRG9jdW1lbnQqIGdldFNWR0RvY3VtZW50KEV4Y2VwdGlvbkNvZGUmKSBj
b25zdDsKICNlbmRpZgogCisgICAgdmlydHVhbCBTY3JvbGxiYXJNb2RlIHNjcm9sbGluZ01vZGUo
KSBjb25zdCB7IHJldHVybiBTY3JvbGxiYXJBdXRvOyB9CisKK3Byb3RlY3RlZDoKKyAgICBIVE1M
RnJhbWVPd25lckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQq
KTsKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgRnJhbWU7CisKKyAgICB2aXJ0dWFsIGJv
b2wgaXNGcmFtZU93bmVyRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3QgeyByZXR1
cm4gbV9jb250ZW50RnJhbWU7IH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZSgp
OworCiAgICAgRnJhbWUqIG1fY29udGVudEZyYW1lOwogfTsKIApJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxJRnJhbWVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElG
cmFtZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA0NzM1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MSUZy
YW1lRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxJRnJhbWVF
bGVtZW50OjpIVE1MSUZyYW1lRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jdW1lbnQpCitpbmxpbmUgSFRNTElGcmFtZUVsZW1lbnQ6OkhUTUxJRnJhbWVF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkK
ICAgICA6IEhUTUxGcmFtZUVsZW1lbnRCYXNlKHRhZ05hbWUsIGRvY3VtZW50KQogewogICAgIEFT
U0VSVChoYXNUYWdOYW1lKGlmcmFtZVRhZykpOwogfQogCitQYXNzUmVmUHRyPEhUTUxJRnJhbWVF
bGVtZW50PiBIVE1MSUZyYW1lRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhU
TUxJRnJhbWVFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7Cit9CisKIGJvb2wgSFRNTElGcmFt
ZUVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBl
ZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgaWYgKGF0dHJOYW1lID09IHdp
ZHRoQXR0ciB8fCBhdHRyTmFtZSA9PSBoZWlnaHRBdHRyKSB7CkBAIC0xMjYsMzQgKzEzMSw0IEBA
IGJvb2wgSFRNTElGcmFtZUVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEEKICAgICByZXR1cm4gYXR0
ci0+bmFtZSgpID09IHNyY0F0dHI7CiB9CiAKLVN0cmluZyBIVE1MSUZyYW1lRWxlbWVudDo6YWxp
Z24oKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsKLX0KLQot
dm9pZCBIVE1MSUZyYW1lRWxlbWVudDo6c2V0QWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsK
LSAgICBzZXRBdHRyaWJ1dGUoYWxpZ25BdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MSUZy
YW1lRWxlbWVudDo6aGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGhl
aWdodEF0dHIpOwotfQotCi12b2lkIEhUTUxJRnJhbWVFbGVtZW50OjpzZXRIZWlnaHQoY29uc3Qg
U3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgdmFsdWUpOwot
fQotCi1TdHJpbmcgSFRNTElGcmFtZUVsZW1lbnQ6OndpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZ2V0QXR0cmlidXRlKHdpZHRoQXR0cik7Ci19Ci0KLXZvaWQgSFRNTElGcmFtZUVsZW1lbnQ6
OnNldFdpZHRoKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHdpZHRo
QXR0ciwgdmFsdWUpOwotfQotCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuaAkocmV2
aXNpb24gNDczNTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChr
b2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAwIFNpbW9uIEhhdXNtYW5uIDxo
YXVzbWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTMwLDYgKzMwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1M
SUZyYW1lRWxlbWVudCA6IHB1YmxpYyBIVE1MRnJhbWVFbGVtZW50QmFzZSB7CiBwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTElGcmFtZUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKworcHJpdmF0ZToKICAgICBIVE1MSUZyYW1lRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1YWwgSFRNTFRh
Z1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVp
cmVkOyB9CkBAIC00OCwxNiArNTEsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBib29s
IGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwogCi0gICAgU3RyaW5nIGFsaWduKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBo
ZWlnaHQoKSBjb25zdDsKLSAgICB2b2lkIHNldEhlaWdodChjb25zdCBTdHJpbmcmKTsKLQotICAg
IFN0cmluZyB3aWR0aCgpIGNvbnN0OwotICAgIHZvaWQgc2V0V2lkdGgoY29uc3QgU3RyaW5nJik7
Ci0KLXByaXZhdGU6CiAgICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKIH07CiAKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxPYmplY3RFbGVtZW50LmNwcAkocmV2aXNpb24gNDczNTcpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTE9iamVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgKDFTdGVpbkBnbXguZGUpCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCkBAIC00NSw4ICs0NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTE9iamVjdEVsZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MsIGJvb2wgY3JlYXRl
ZEJ5UGFyc2VyKSAKLSAgICA6IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQodGFnTmFtZSwgZG9jKQor
aW5saW5lIEhUTUxPYmplY3RFbGVtZW50OjpIVE1MT2JqZWN0RWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2Vy
KSAKKyAgICA6IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCiAgICAg
LCBtX2RvY05hbWVkSXRlbSh0cnVlKQogICAgICwgbV9uZWVkV2lkZ2V0VXBkYXRlKCFjcmVhdGVk
QnlQYXJzZXIpCiAgICAgLCBtX3VzZUZhbGxiYWNrQ29udGVudChmYWxzZSkKQEAgLTU0LDggKzU0
LDkgQEAgSFRNTE9iamVjdEVsZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50KGNvbgogICAgIEFTU0VS
VChoYXNUYWdOYW1lKG9iamVjdFRhZykpOwogfQogCi1IVE1MT2JqZWN0RWxlbWVudDo6fkhUTUxP
YmplY3RFbGVtZW50KCkKK1Bhc3NSZWZQdHI8SFRNTE9iamVjdEVsZW1lbnQ+IEhUTUxPYmplY3RF
bGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
Y3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEhUTUxPYmplY3RFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIpKTsK
IH0KIAogUmVuZGVyV2lkZ2V0KiBIVE1MT2JqZWN0RWxlbWVudDo6cmVuZGVyV2lkZ2V0Rm9ySlNC
aW5kaW5ncygpIGNvbnN0CkBAIC0yOTcsNjYgKzI5OCw2IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1l
bnQ6OnVwZGF0ZURvY05hbWVkSXQKICAgICBtX2RvY05hbWVkSXRlbSA9IGlzTmFtZWRJdGVtOwog
fQogCi1TdHJpbmcgSFRNTE9iamVjdEVsZW1lbnQ6OmNvZGUoKSBjb25zdAotewotICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUoY29kZUF0dHIpOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50Ojpz
ZXRDb2RlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNvZGVBdHRy
LCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6YXJjaGl2ZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhcmNoaXZlQXR0cik7Ci19Ci0KLXZvaWQgSFRN
TE9iamVjdEVsZW1lbnQ6OnNldEFyY2hpdmUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBz
ZXRBdHRyaWJ1dGUoYXJjaGl2ZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxPYmplY3RF
bGVtZW50Ojpib3JkZXIoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYm9yZGVy
QXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldEJvcmRlcihjb25zdCBTdHJp
bmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShib3JkZXJBdHRyLCB2YWx1ZSk7Ci19Ci0K
LVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6Y29kZUJhc2UoKSBjb25zdAotewotICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUoY29kZWJhc2VBdHRyKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVu
dDo6c2V0Q29kZUJhc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUo
Y29kZWJhc2VBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6Y29k
ZVR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY29kZXR5cGVBdHRyKTsK
LX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0Q29kZVR5cGUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29kZXR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLUtV
UkwgSFRNTE9iamVjdEVsZW1lbnQ6OmRhdGEoKSBjb25zdAotewotICAgIHJldHVybiBkb2N1bWVu
dCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoZGF0YUF0dHIpKTsKLX0KLQotdm9pZCBIVE1M
T2JqZWN0RWxlbWVudDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0
dHJpYnV0ZShkYXRhQXR0ciwgdmFsdWUpOwotfQotCiBib29sIEhUTUxPYmplY3RFbGVtZW50Ojpk
ZWNsYXJlKCkgY29uc3QKIHsKICAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShkZWNsYXJlQXR0ciku
aXNOdWxsKCk7CkBAIC0zNzcsMzYgKzMxOCw2IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNl
dEhzcGFjZShpbnQgdmEKICAgICBzZXRBdHRyaWJ1dGUoaHNwYWNlQXR0ciwgU3RyaW5nOjpudW1i
ZXIodmFsdWUpKTsKIH0KIAotU3RyaW5nIEhUTUxPYmplY3RFbGVtZW50OjpzdGFuZGJ5KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHN0YW5kYnlBdHRyKTsKLX0KLQotdm9pZCBI
VE1MT2JqZWN0RWxlbWVudDo6c2V0U3RhbmRieShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAg
IHNldEF0dHJpYnV0ZShzdGFuZGJ5QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTE9iamVj
dEVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0
dHIpOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmlu
ZyBIVE1MT2JqZWN0RWxlbWVudDo6dXNlTWFwKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKHVzZW1hcEF0dHIpOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRVc2VN
YXAoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodXNlbWFwQXR0ciwg
dmFsdWUpOwotfQotCiBpbnQgSFRNTE9iamVjdEVsZW1lbnQ6OnZzcGFjZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh2c3BhY2VBdHRyKS50b0ludCgpOwpAQCAtNDE5LDIxICsz
MzAsMTkgQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0VnNwYWNlKGludCB2YQogCiBib29s
IEhUTUxPYmplY3RFbGVtZW50Ojpjb250YWluc0phdmFBcHBsZXQoKSBjb25zdAogewotICAgIGlm
IChNSU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlwZSh0eXBlKCkpKQorICAgIGlm
IChNSU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlwZShnZXRBdHRyaWJ1dGUodHlw
ZUF0dHIpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAotICAgIE5vZGUqIGNoaWxk
ID0gZmlyc3RDaGlsZCgpOwotICAgIHdoaWxlIChjaGlsZCkgewotICAgICAgICBpZiAoY2hpbGQt
PmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgRWxlbWVudCogZSA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihjaGlsZCk7Ci0gICAgICAgICAgICBpZiAoZS0+aGFzVGFnTmFtZShwYXJhbVRh
ZykgJiYgZXF1YWxJZ25vcmluZ0Nhc2UoZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSwgInR5cGUi
KSAmJiBNSU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlwZShlLT5nZXRBdHRyaWJ1
dGUodmFsdWVBdHRyKS5zdHJpbmcoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICBlbHNlIGlmIChlLT5oYXNUYWdOYW1lKG9iamVjdFRhZykgJiYgc3RhdGljX2Nh
c3Q8SFRNTE9iamVjdEVsZW1lbnQqPihlKS0+Y29udGFpbnNKYXZhQXBwbGV0KCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBlbHNlIGlmIChlLT5oYXNUYWdOYW1l
KGFwcGxldFRhZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICBmb3IgKEVsZW1lbnQqIGNo
aWxkID0gZmlyc3RFbGVtZW50Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRFbGVt
ZW50U2libGluZygpKSB7CisgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShwYXJhbVRhZykK
KyAgICAgICAgICAgICAgICAmJiBlcXVhbElnbm9yaW5nQ2FzZShjaGlsZC0+Z2V0QXR0cmlidXRl
KG5hbWVBdHRyKSwgInR5cGUiKQorICAgICAgICAgICAgICAgICYmIE1JTUVUeXBlUmVnaXN0cnk6
OmlzSmF2YUFwcGxldE1JTUVUeXBlKGNoaWxkLT5nZXRBdHRyaWJ1dGUodmFsdWVBdHRyKS5zdHJp
bmcoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGNoaWxkLT5oYXNU
YWdOYW1lKG9iamVjdFRhZykKKyAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MT2Jq
ZWN0RWxlbWVudCo+KGNoaWxkKS0+Y29udGFpbnNKYXZhQXBwbGV0KCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKGFwcGxldFRhZykpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNDQzLDkgKzM1MiwxMCBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50OjphZGRTdWJyZXNvdXJj
ZUF0CiB7CiAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1
dGVVUkxzKHVybHMpOwogCi0gICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgZGF0YSgpKTsKLSAg
ICBpZiAodXNlTWFwKCkuc3RhcnRzV2l0aCgiIyIpKQotICAgICAgICBhZGRTdWJyZXNvdXJjZVVS
TCh1cmxzLCBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1c2VNYXAoKSkpOworICAgIGFkZFN1YnJl
c291cmNlVVJMKHVybHMsIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShkYXRh
QXR0cikpKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHVzZW1hcCA9IGdldEF0dHJpYnV0ZSh1
c2VtYXBBdHRyKTsKKyAgICBpZiAodXNlbWFwLnN0YXJ0c1dpdGgoIiMiKSkKKyAgICAgICAgYWRk
U3VicmVzb3VyY2VVUkwodXJscywgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXNlbWFwKSk7CiB9
CiAKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oCShyZXZpc2lvbiA0NzM1NykKKysr
IFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcg
KzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTMxLDggKzMxLDI5IEBAIGNsYXNzIEtVUkw7CiAKIGNsYXNzIEhUTUxPYmplY3RF
bGVtZW50IDogcHVibGljIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQgewogcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEhUTUxPYmplY3RFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOworCisgICAgdm9pZCBzZXRO
ZWVkV2lkZ2V0VXBkYXRlKGJvb2wgbmVlZFdpZGdldFVwZGF0ZSkgeyBtX25lZWRXaWRnZXRVcGRh
dGUgPSBuZWVkV2lkZ2V0VXBkYXRlOyB9CisKKyAgICB2b2lkIHJlbmRlckZhbGxiYWNrQ29udGVu
dCgpOworCisgICAgYm9vbCBkZWNsYXJlKCkgY29uc3Q7CisgICAgdm9pZCBzZXREZWNsYXJlKGJv
b2wpOworCisgICAgaW50IGhzcGFjZSgpIGNvbnN0OworICAgIHZvaWQgc2V0SHNwYWNlKGludCk7
CisKKyAgICBpbnQgdnNwYWNlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRWc3BhY2UoaW50KTsKKwor
ICAgIGJvb2wgaXNEb2NOYW1lZEl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2RvY05hbWVkSXRlbTsg
fQorCisgICAgY29uc3QgU3RyaW5nJiBjbGFzc0lkKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc0lk
OyB9CisKKyAgICBib29sIGNvbnRhaW5zSmF2YUFwcGxldCgpIGNvbnN0OworCitwcml2YXRlOgog
ICAgIEhUTUxPYmplY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJv
b2wgY3JlYXRlZEJ5UGFyc2VyKTsKLSAgICB+SFRNTE9iamVjdEVsZW1lbnQoKTsKIAogICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCkBAIC01NCw1NyAr
NzUsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgY29uc3QgUXVhbGlmaWVkTmFtZSYgaW1hZ2VT
b3VyY2VBdHRyaWJ1dGVOYW1lKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlV2lk
Z2V0KCk7Ci0gICAgdm9pZCBzZXROZWVkV2lkZ2V0VXBkYXRlKGJvb2wgbmVlZFdpZGdldFVwZGF0
ZSkgeyBtX25lZWRXaWRnZXRVcGRhdGUgPSBuZWVkV2lkZ2V0VXBkYXRlOyB9Ci0KLSAgICB2b2lk
IHJlbmRlckZhbGxiYWNrQ29udGVudCgpOwogCiAgICAgdmlydHVhbCBSZW5kZXJXaWRnZXQqIHJl
bmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBjb25zdDsKIAotICAgIFN0cmluZyBhcmNoaXZlKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRBcmNoaXZlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5n
IGJvcmRlcigpIGNvbnN0OwotICAgIHZvaWQgc2V0Qm9yZGVyKGNvbnN0IFN0cmluZyYpOwotCi0g
ICAgU3RyaW5nIGNvZGUoKSBjb25zdDsKLSAgICB2b2lkIHNldENvZGUoY29uc3QgU3RyaW5nJik7
Ci0gICAgCi0gICAgU3RyaW5nIGNvZGVCYXNlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb2RlQmFz
ZShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBjb2RlVHlwZSgpIGNvbnN0OwotICAgIHZv
aWQgc2V0Q29kZVR5cGUoY29uc3QgU3RyaW5nJik7Ci0gICAgCi0gICAgS1VSTCBkYXRhKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXREYXRhKGNvbnN0IFN0cmluZyYpOwotCi0gICAgYm9vbCBkZWNsYXJl
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREZWNsYXJlKGJvb2wpOwotCi0gICAgaW50IGhzcGFjZSgp
IGNvbnN0OwotICAgIHZvaWQgc2V0SHNwYWNlKGludCk7Ci0KLSAgICBTdHJpbmcgc3RhbmRieSgp
IGNvbnN0OwotICAgIHZvaWQgc2V0U3RhbmRieShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmlu
ZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOwotCi0gICAg
U3RyaW5nIHVzZU1hcCgpIGNvbnN0OwotICAgIHZvaWQgc2V0VXNlTWFwKGNvbnN0IFN0cmluZyYp
OwotCi0gICAgaW50IHZzcGFjZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VnNwYWNlKGludCk7Ci0K
LSAgICBib29sIGlzRG9jTmFtZWRJdGVtKCkgY29uc3QgeyByZXR1cm4gbV9kb2NOYW1lZEl0ZW07
IH0KLQotICAgIGNvbnN0IFN0cmluZyYgY2xhc3NJZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3NJ
ZDsgfQotCi0gICAgYm9vbCBjb250YWluc0phdmFBcHBsZXQoKSBjb25zdDsKLQogICAgIHZpcnR1
YWwgdm9pZCBhZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBj
b25zdDsKIAotcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZURvY05hbWVkSXRlbSgpOwogCiAgICAg
QXRvbWljU3RyaW5nIG1faWQ7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDQ3MzU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTEsMTYgKzkxLDYgQEAgUGFzc1NjcmlwdEluc3RhbmNlIEhUTUxQbHVn
SW5FbGVtZW50OjpnZQogICAgIHJldHVybiBtX2luc3RhbmNlOwogfQogCi1TdHJpbmcgSFRNTFBs
dWdJbkVsZW1lbnQ6OmFsaWduKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFs
aWduQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OnNldEFsaWduKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFsdWUpOwotfQot
CiBTdHJpbmcgSFRNTFBsdWdJbkVsZW1lbnQ6OmhlaWdodCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShoZWlnaHRBdHRyKTsKQEAgLTExMSwxNiArMTAxLDYgQEAgdm9pZCBIVE1M
UGx1Z0luRWxlbWVudDo6c2V0SGVpZ2h0KGNvbnN0IAogICAgIHNldEF0dHJpYnV0ZShoZWlnaHRB
dHRyLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBIVE1MUGx1Z0luRWxlbWVudDo6bmFtZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShuYW1lQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFBs
dWdJbkVsZW1lbnQ6OnNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRy
aWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsKLX0KLQogU3RyaW5nIEhUTUxQbHVnSW5FbGVtZW50Ojp3
aWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOwpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmgJKHJldmlzaW9uIDQ3MzU3KQorKysgV2ViQ29yZS9o
dG1sL0hUTUxQbHVnSW5FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAg
ICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MzYsNDMgKzM2LDQ0IEBAIGNsYXNzIFJlbmRlcldpZGdldDsKIAogY2xhc3MgSFRNTFBsdWdJbkVs
ZW1lbnQgOiBwdWJsaWMgSFRNTEZyYW1lT3duZXJFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1M
UGx1Z0luRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwog
ICAgIHZpcnR1YWwgfkhUTUxQbHVnSW5FbGVtZW50KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgbWFw
VG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50
cnkmIHJlc3VsdCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSopOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpOwotCi0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVdpZGdldCgpIHsgfQotCi0gICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsKLSAgICAKICAgICBTdHJpbmcgaGVpZ2h0KCkg
Y29uc3Q7CiAgICAgdm9pZCBzZXRIZWlnaHQoY29uc3QgU3RyaW5nJik7CiAgICAgCi0gICAgU3Ry
aW5nIG5hbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJik7Ci0gICAg
CiAgICAgU3RyaW5nIHdpZHRoKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRXaWR0aChjb25zdCBTdHJp
bmcmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7Ci0K
LSAgICB2aXJ0dWFsIFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CiAgICAgUGFzc1NjcmlwdEluc3Rh
bmNlIGdldEluc3RhbmNlKCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLSAgICB2aXJ0dWFsIE5QT2JqZWN0KiBnZXROUE9iamVjdCgpOworICAgIE5QT2JqZWN0KiBn
ZXROUE9iamVjdCgpOwogI2VuZGlmCiAKIHByb3RlY3RlZDoKKyAgICBIVE1MUGx1Z0luRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOworCisgICAgdmlydHVh
bCB2b2lkIGRldGFjaCgpOworCiAgICAgc3RhdGljIHZvaWQgdXBkYXRlV2lkZ2V0Q2FsbGJhY2so
Tm9kZSopOwogCisgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKworcHJp
dmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworCisg
ICAgdmlydHVhbCBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBjb25z
dCA9IDA7CisKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgYm9vbCBjaGVj
a0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlV2lk
Z2V0KCkgeyB9CisKK3Byb3RlY3RlZDoKICAgICBBdG9taWNTdHJpbmcgbV9uYW1lOworCitwcml2
YXRlOgogICAgIG11dGFibGUgU2NyaXB0SW5zdGFuY2UgbV9pbnN0YW5jZTsKICNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBOUE9iamVjdCogbV9OUE9iamVjdDsKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gNDczNTcpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMCwxNSArMzAsMTYgQEAgY2xh
c3MgSFRNTEltYWdlTG9hZGVyOwogCiBjbGFzcyBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50IDogcHVi
bGljIEhUTUxQbHVnSW5FbGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7CiAgICAgdmlydHVh
bCB+SFRNTFBsdWdJbkltYWdlRWxlbWVudCgpOwogCi0gICAgYm9vbCBpc0ltYWdlVHlwZSgpOwot
CiAgICAgY29uc3QgU3RyaW5nJiBzZXJ2aWNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vydmlj
ZVR5cGU7IH0KICAgICBjb25zdCBTdHJpbmcmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9
CiAKIHByb3RlY3RlZDoKKyAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7CisKKyAgICBib29sIGlzSW1hZ2VUeXBlKCk7CisK
ICAgICBPd25QdHI8SFRNTEltYWdlTG9hZGVyPiBtX2ltYWdlTG9hZGVyOwogICAgIFN0cmluZyBt
X3NlcnZpY2VUeXBlOwogICAgIFN0cmluZyBtX3VybDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
VGFnTmFtZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWdOYW1lcy5pbgko
cmV2aXNpb24gNDczNTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhZ05hbWVzLmluCSh3b3JraW5n
IGNvcHkpCkBAIC04LDExNSArOCwxMTYgQEAgYWNyb255bSBpbnRlcmZhY2VOYW1lPUhUTUxFbGVt
ZW50CiBhZGRyZXNzIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKIGFwcGxldAogYXJlYQotYXVk
aW8gd3JhcHBlck9ubHlJZk1lZGlhSXNBdmFpbGFibGUsY29uZGl0aW9uYWw9VklERU8KK2F1ZGlv
IHdyYXBwZXJPbmx5SWZNZWRpYUlzQXZhaWxhYmxlLCBjb25kaXRpb25hbD1WSURFTywgY3JlYXRl
V2l0aE5ldwogYiBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci1iYXNlCi1iYXNlZm9udCBpbnRl
cmZhY2VOYW1lPUhUTUxCYXNlRm9udEVsZW1lbnQKLWJkbyBpbnRlcmZhY2VOYW1lPUhUTUxFbGVt
ZW50Ci1iaWcgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAotYmxvY2txdW90ZQotYm9keQotYnIg
aW50ZXJmYWNlTmFtZT1IVE1MQlJFbGVtZW50Ci1idXR0b24gY29uc3RydWN0b3JOZWVkc0Zvcm1F
bGVtZW50Ci1jYW52YXMKLWNhcHRpb24gaW50ZXJmYWNlTmFtZT1IVE1MVGFibGVDYXB0aW9uRWxl
bWVudAotY2VudGVyIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLWNpdGUgaW50ZXJmYWNlTmFt
ZT1IVE1MRWxlbWVudAotY29kZSBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci1jb2wgaW50ZXJm
YWNlTmFtZT1IVE1MVGFibGVDb2xFbGVtZW50Ci1jb2xncm91cCBpbnRlcmZhY2VOYW1lPUhUTUxU
YWJsZUNvbEVsZW1lbnQKLWRhdGFncmlkIGludGVyZmFjZU5hbWU9SFRNTERhdGFHcmlkRWxlbWVu
dCxjb25kaXRpb25hbD1EQVRBR1JJRAotZGNlbGwgaW50ZXJmYWNlTmFtZT1IVE1MRGF0YUdyaWRD
ZWxsRWxlbWVudCxjb25kaXRpb25hbD1EQVRBR1JJRAotZGNvbCBpbnRlcmZhY2VOYW1lPUhUTUxE
YXRhR3JpZENvbEVsZW1lbnQsY29uZGl0aW9uYWw9REFUQUdSSUQKLWRyb3cgaW50ZXJmYWNlTmFt
ZT1IVE1MRGF0YUdyaWRSb3dFbGVtZW50LGNvbmRpdGlvbmFsPURBVEFHUklECi1kZCBpbnRlcmZh
Y2VOYW1lPUhUTUxFbGVtZW50Ci1kZWwgaW50ZXJmYWNlTmFtZT1IVE1MTW9kRWxlbWVudAotZGZu
IGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLWRpciBpbnRlcmZhY2VOYW1lPUhUTUxEaXJlY3Rv
cnlFbGVtZW50Ci1kaXYKLWRsIGludGVyZmFjZU5hbWU9SFRNTERMaXN0RWxlbWVudAorYmFzZSBj
cmVhdGVXaXRoTmV3CitiYXNlZm9udCBpbnRlcmZhY2VOYW1lPUhUTUxCYXNlRm9udEVsZW1lbnQs
IGNyZWF0ZVdpdGhOZXcKK2JkbyBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50LCBjcmVhdGVXaXRo
TmV3CitiaWcgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldworYmxvY2tx
dW90ZSBjcmVhdGVXaXRoTmV3Citib2R5IGNyZWF0ZVdpdGhOZXcKK2JyIGludGVyZmFjZU5hbWU9
SFRNTEJSRWxlbWVudCwgY3JlYXRlV2l0aE5ldworYnV0dG9uIGNvbnN0cnVjdG9yTmVlZHNGb3Jt
RWxlbWVudCwgY3JlYXRlV2l0aE5ldworY2FudmFzIGNyZWF0ZVdpdGhOZXcKK2NhcHRpb24gaW50
ZXJmYWNlTmFtZT1IVE1MVGFibGVDYXB0aW9uRWxlbWVudCwgY3JlYXRlV2l0aE5ldworY2VudGVy
IGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2NpdGUgaW50ZXJmYWNl
TmFtZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldworY29kZSBpbnRlcmZhY2VOYW1lPUhUTUxF
bGVtZW50LCBjcmVhdGVXaXRoTmV3Citjb2wgaW50ZXJmYWNlTmFtZT1IVE1MVGFibGVDb2xFbGVt
ZW50LCBjcmVhdGVXaXRoTmV3Citjb2xncm91cCBpbnRlcmZhY2VOYW1lPUhUTUxUYWJsZUNvbEVs
ZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2RhdGFncmlkIGludGVyZmFjZU5hbWU9SFRNTERhdGFHcmlk
RWxlbWVudCwgY29uZGl0aW9uYWw9REFUQUdSSUQsIGNyZWF0ZVdpdGhOZXcKK2RjZWxsIGludGVy
ZmFjZU5hbWU9SFRNTERhdGFHcmlkQ2VsbEVsZW1lbnQsIGNvbmRpdGlvbmFsPURBVEFHUklELCBj
cmVhdGVXaXRoTmV3CitkY29sIGludGVyZmFjZU5hbWU9SFRNTERhdGFHcmlkQ29sRWxlbWVudCwg
Y29uZGl0aW9uYWw9REFUQUdSSUQsIGNyZWF0ZVdpdGhOZXcKK2RkIGludGVyZmFjZU5hbWU9SFRN
TEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2RlbCBpbnRlcmZhY2VOYW1lPUhUTUxNb2RFbGVtZW50
LCBjcmVhdGVXaXRoTmV3CitkZm4gaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0
aE5ldworZGlyIGludGVyZmFjZU5hbWU9SFRNTERpcmVjdG9yeUVsZW1lbnQsIGNyZWF0ZVdpdGhO
ZXcKK2RpdiBjcmVhdGVXaXRoTmV3CitkbCBpbnRlcmZhY2VOYW1lPUhUTUxETGlzdEVsZW1lbnQs
IGNyZWF0ZVdpdGhOZXcKK2Ryb3cgaW50ZXJmYWNlTmFtZT1IVE1MRGF0YUdyaWRSb3dFbGVtZW50
LCBjb25kaXRpb25hbD1EQVRBR1JJRCwgY3JlYXRlV2l0aE5ldwogZHQgaW50ZXJmYWNlTmFtZT1I
VE1MRWxlbWVudAogZW0gaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogZW1iZWQKLWZpZWxkc2V0
IGludGVyZmFjZU5hbWU9SFRNTEZpZWxkU2V0RWxlbWVudCwgY29uc3RydWN0b3JOZWVkc0Zvcm1F
bGVtZW50Ci1mb250Ci1mb3JtCitmaWVsZHNldCBpbnRlcmZhY2VOYW1lPUhUTUxGaWVsZFNldEVs
ZW1lbnQsIGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudCwgY3JlYXRlV2l0aE5ldworZm9udCBj
cmVhdGVXaXRoTmV3Citmb3JtIGNyZWF0ZVdpdGhOZXcKIGZyYW1lCi1mcmFtZXNldCBpbnRlcmZh
Y2VOYW1lPUhUTUxGcmFtZVNldEVsZW1lbnQKLWhlYWQKLWgxIGludGVyZmFjZU5hbWU9SFRNTEhl
YWRpbmdFbGVtZW50Ci1oMiBpbnRlcmZhY2VOYW1lPUhUTUxIZWFkaW5nRWxlbWVudAotaDMgaW50
ZXJmYWNlTmFtZT1IVE1MSGVhZGluZ0VsZW1lbnQKLWg0IGludGVyZmFjZU5hbWU9SFRNTEhlYWRp
bmdFbGVtZW50Ci1oNSBpbnRlcmZhY2VOYW1lPUhUTUxIZWFkaW5nRWxlbWVudAotaDYgaW50ZXJm
YWNlTmFtZT1IVE1MSGVhZGluZ0VsZW1lbnQKLWhyIGludGVyZmFjZU5hbWU9SFRNTEhSRWxlbWVu
dAotaHRtbAorZnJhbWVzZXQgaW50ZXJmYWNlTmFtZT1IVE1MRnJhbWVTZXRFbGVtZW50LCBjcmVh
dGVXaXRoTmV3CitoMSBpbnRlcmZhY2VOYW1lPUhUTUxIZWFkaW5nRWxlbWVudCwgY3JlYXRlV2l0
aE5ldworaDIgaW50ZXJmYWNlTmFtZT1IVE1MSGVhZGluZ0VsZW1lbnQsIGNyZWF0ZVdpdGhOZXcK
K2gzIGludGVyZmFjZU5hbWU9SFRNTEhlYWRpbmdFbGVtZW50LCBjcmVhdGVXaXRoTmV3CitoNCBp
bnRlcmZhY2VOYW1lPUhUTUxIZWFkaW5nRWxlbWVudCwgY3JlYXRlV2l0aE5ldworaDUgaW50ZXJm
YWNlTmFtZT1IVE1MSGVhZGluZ0VsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2g2IGludGVyZmFjZU5h
bWU9SFRNTEhlYWRpbmdFbGVtZW50LCBjcmVhdGVXaXRoTmV3CitoZWFkIGNyZWF0ZVdpdGhOZXcK
K2hyIGludGVyZmFjZU5hbWU9SFRNTEhSRWxlbWVudCwgY3JlYXRlV2l0aE5ldworaHRtbCBjcmVh
dGVXaXRoTmV3CiBpIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKIGlmcmFtZSBpbnRlcmZhY2VO
YW1lPUhUTUxJRnJhbWVFbGVtZW50Ci1pbWFnZSBtYXBUb1RhZ05hbWU9aW1nCi1pbWcgaW50ZXJm
YWNlTmFtZT1IVE1MSW1hZ2VFbGVtZW50LCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQKLWlu
cHV0IGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudAotaW5zIGludGVyZmFjZU5hbWU9SFRNTE1v
ZEVsZW1lbnQKLWlzaW5kZXggaW50ZXJmYWNlTmFtZT1IVE1MSXNJbmRleEVsZW1lbnQsIGNvbnN0
cnVjdG9yTmVlZHNGb3JtRWxlbWVudAoraW1hZ2UgbWFwVG9UYWdOYW1lPWltZywgY3JlYXRlV2l0
aE5ldworaW1nIGludGVyZmFjZU5hbWU9SFRNTEltYWdlRWxlbWVudCwgY29uc3RydWN0b3JOZWVk
c0Zvcm1FbGVtZW50LCBjcmVhdGVXaXRoTmV3CitpbnB1dCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVs
ZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2lucyBpbnRlcmZhY2VOYW1lPUhUTUxNb2RFbGVtZW50LCBj
cmVhdGVXaXRoTmV3Citpc2luZGV4IGludGVyZmFjZU5hbWU9SFRNTElzSW5kZXhFbGVtZW50LCBj
b25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKIGtiZCBpbnRlcmZhY2VO
YW1lPUhUTUxFbGVtZW50Ci1rZXlnZW4gSlNJbnRlcmZhY2VOYW1lPUhUTUxTZWxlY3RFbGVtZW50
LCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQKLWxhYmVsCitrZXlnZW4gSlNJbnRlcmZhY2VO
YW1lPUhUTUxTZWxlY3RFbGVtZW50LCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQsIGNyZWF0
ZVdpdGhOZXcKK2xhYmVsIGNyZWF0ZVdpdGhOZXcKIGxheWVyIGludGVyZmFjZU5hbWU9SFRNTEVs
ZW1lbnQKLWxlZ2VuZCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQKLWxpIGludGVyZmFjZU5h
bWU9SFRNTExJRWxlbWVudAotbGluayBjb25zdHJ1Y3Rvck5lZWRzQ3JlYXRlZEJ5UGFyc2VyCi1s
aXN0aW5nIGludGVyZmFjZU5hbWU9SFRNTFByZUVsZW1lbnQKLW1hcAotbWFycXVlZQotbWVudQot
bWV0YQorbGVnZW5kIGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudCwgY3JlYXRlV2l0aE5ldwor
bGkgaW50ZXJmYWNlTmFtZT1IVE1MTElFbGVtZW50LCBjcmVhdGVXaXRoTmV3CitsaW5rIGNvbnN0
cnVjdG9yTmVlZHNDcmVhdGVkQnlQYXJzZXIsIGNyZWF0ZVdpdGhOZXcKK2xpc3RpbmcgaW50ZXJm
YWNlTmFtZT1IVE1MUHJlRWxlbWVudCwgY3JlYXRlV2l0aE5ldworbWFwIGNyZWF0ZVdpdGhOZXcK
K21hcnF1ZWUgY3JlYXRlV2l0aE5ldworbWVudSBjcmVhdGVXaXRoTmV3CittZXRhIGNyZWF0ZVdp
dGhOZXcKIG5vYnIgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogbm9lbWJlZCBpbnRlcmZhY2VO
YW1lPUhUTUxFbGVtZW50CiBub2ZyYW1lcyBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBub2xh
eWVyIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLSNpZiBFTkFCTEVfWEhUTUxNUAotbm9zY3Jp
cHQgaW50ZXJmYWNlTmFtZT1IVE1MTm9TY3JpcHRFbGVtZW50Ci0jZWxzZQotbm9zY3JpcHQgaW50
ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAotI2VuZGlmCiBvYmplY3QgY29uc3RydWN0b3JOZWVkc0Ny
ZWF0ZWRCeVBhcnNlcgotb2wgaW50ZXJmYWNlTmFtZT1IVE1MT0xpc3RFbGVtZW50Ci1vcHRncm91
cCBpbnRlcmZhY2VOYW1lPUhUTUxPcHRHcm91cEVsZW1lbnQsIGNvbnN0cnVjdG9yTmVlZHNGb3Jt
RWxlbWVudAotb3B0aW9uIGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudAotcCBpbnRlcmZhY2VO
YW1lPUhUTUxQYXJhZ3JhcGhFbGVtZW50Ci1wYXJhbQorb2wgaW50ZXJmYWNlTmFtZT1IVE1MT0xp
c3RFbGVtZW50LCBjcmVhdGVXaXRoTmV3CitvcHRncm91cCBpbnRlcmZhY2VOYW1lPUhUTUxPcHRH
cm91cEVsZW1lbnQsIGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudCwgY3JlYXRlV2l0aE5ldwor
b3B0aW9uIGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudCwgY3JlYXRlV2l0aE5ldworcCBpbnRl
cmZhY2VOYW1lPUhUTUxQYXJhZ3JhcGhFbGVtZW50LCBjcmVhdGVXaXRoTmV3CitwYXJhbSBjcmVh
dGVXaXRoTmV3CiBwbGFpbnRleHQgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAotcHJlCi1xIGlu
dGVyZmFjZU5hbWU9SFRNTFF1b3RlRWxlbWVudAorcHJlIGNyZWF0ZVdpdGhOZXcKK3EgaW50ZXJm
YWNlTmFtZT1IVE1MUXVvdGVFbGVtZW50LCBjcmVhdGVXaXRoTmV3CiBycCBpbnRlcmZhY2VOYW1l
PUhUTUxFbGVtZW50CiBydCBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBydWJ5IGludGVyZmFj
ZU5hbWU9SFRNTEVsZW1lbnQKIHMgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogc2FtcCBpbnRl
cmZhY2VOYW1lPUhUTUxFbGVtZW50Ci1zY3JpcHQgY29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBh
cnNlcgotc2VsZWN0IGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudAorc2NyaXB0IGNvbnN0cnVj
dG9yTmVlZHNDcmVhdGVkQnlQYXJzZXIsIGNyZWF0ZVdpdGhOZXcKK3NlbGVjdCBjb25zdHJ1Y3Rv
ck5lZWRzRm9ybUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKIHNtYWxsIGludGVyZmFjZU5hbWU9SFRN
TEVsZW1lbnQKLXNvdXJjZSB3cmFwcGVyT25seUlmTWVkaWFJc0F2YWlsYWJsZSxjb25kaXRpb25h
bD1WSURFTworc291cmNlIHdyYXBwZXJPbmx5SWZNZWRpYUlzQXZhaWxhYmxlLCBjb25kaXRpb25h
bD1WSURFTywgY3JlYXRlV2l0aE5ldwogc3BhbiBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBz
dHJpa2UgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogc3Ryb25nIGludGVyZmFjZU5hbWU9SFRN
TEVsZW1lbnQKLXN0eWxlIGNvbnN0cnVjdG9yTmVlZHNDcmVhdGVkQnlQYXJzZXIKK3N0eWxlIGNv
bnN0cnVjdG9yTmVlZHNDcmVhdGVkQnlQYXJzZXIsIGNyZWF0ZVdpdGhOZXcKIHN1YiBpbnRlcmZh
Y2VOYW1lPUhUTUxFbGVtZW50CiBzdXAgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAotdGFibGUK
LXRib2R5IGludGVyZmFjZU5hbWU9SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKLXRkIGludGVyZmFj
ZU5hbWU9SFRNTFRhYmxlQ2VsbEVsZW1lbnQKLXRleHRhcmVhIGludGVyZmFjZU5hbWU9SFRNTFRl
eHRBcmVhRWxlbWVudCwgY29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50Ci10Zm9vdCBpbnRlcmZh
Y2VOYW1lPUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Ci10aCBpbnRlcmZhY2VOYW1lPUhUTUxUYWJs
ZUNlbGxFbGVtZW50Ci10aGVhZCBpbnRlcmZhY2VOYW1lPUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
Ci10aXRsZQotdHIgaW50ZXJmYWNlTmFtZT1IVE1MVGFibGVSb3dFbGVtZW50Cit0YWJsZSBjcmVh
dGVXaXRoTmV3Cit0Ym9keSBpbnRlcmZhY2VOYW1lPUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LCBj
cmVhdGVXaXRoTmV3Cit0ZCBpbnRlcmZhY2VOYW1lPUhUTUxUYWJsZUNlbGxFbGVtZW50LCBjcmVh
dGVXaXRoTmV3Cit0ZXh0YXJlYSBpbnRlcmZhY2VOYW1lPUhUTUxUZXh0QXJlYUVsZW1lbnQsIGNv
bnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudCwgY3JlYXRlV2l0aE5ldwordGZvb3QgaW50ZXJmYWNl
TmFtZT1IVE1MVGFibGVTZWN0aW9uRWxlbWVudCwgY3JlYXRlV2l0aE5ldwordGggaW50ZXJmYWNl
TmFtZT1IVE1MVGFibGVDZWxsRWxlbWVudCwgY3JlYXRlV2l0aE5ldwordGhlYWQgaW50ZXJmYWNl
TmFtZT1IVE1MVGFibGVTZWN0aW9uRWxlbWVudCwgY3JlYXRlV2l0aE5ldwordGl0bGUgY3JlYXRl
V2l0aE5ldwordHIgaW50ZXJmYWNlTmFtZT1IVE1MVGFibGVSb3dFbGVtZW50LCBjcmVhdGVXaXRo
TmV3CiB0dCBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiB1IGludGVyZmFjZU5hbWU9SFRNTEVs
ZW1lbnQKLXVsIGludGVyZmFjZU5hbWU9SFRNTFVMaXN0RWxlbWVudAordWwgaW50ZXJmYWNlTmFt
ZT1IVE1MVUxpc3RFbGVtZW50LCBjcmVhdGVXaXRoTmV3CiB2YXIgaW50ZXJmYWNlTmFtZT1IVE1M
RWxlbWVudAotdmlkZW8gd3JhcHBlck9ubHlJZk1lZGlhSXNBdmFpbGFibGUsY29uZGl0aW9uYWw9
VklERU8KK3ZpZGVvIHdyYXBwZXJPbmx5SWZNZWRpYUlzQXZhaWxhYmxlLCBjb25kaXRpb25hbD1W
SURFTywgY3JlYXRlV2l0aE5ldwogd2JyIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLXhtcCBp
bnRlcmZhY2VOYW1lPUhUTUxQcmVFbGVtZW50Cit4bXAgaW50ZXJmYWNlTmFtZT1IVE1MUHJlRWxl
bWVudCwgY3JlYXRlV2l0aE5ldworCisjaWYgRU5BQkxFX1hIVE1MTVAKK25vc2NyaXB0IGludGVy
ZmFjZU5hbWU9SFRNTE5vU2NyaXB0RWxlbWVudCwgY3JlYXRlV2l0aE5ldworI2Vsc2UKK25vc2Ny
aXB0IGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MVmlld1NvdXJjZURvY3VtZW50LmNwcAkocmV2aXNpb24gNDczNTcpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw3ICsy
MDksNyBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxWaWV3U291cmNlRG9jdW1lCiAgICAgICAg
IHJldHVybiBtX2N1cnJlbnQ7CiAgICAgfQogCi0gICAgUmVmUHRyPEhUTUxFbGVtZW50PiBzcGFu
ID0gbmV3IEhUTUxFbGVtZW50KHNwYW5UYWcsIHRoaXMpOworICAgIFJlZlB0cjxIVE1MRWxlbWVu
dD4gc3BhbiA9IEhUTUxFbGVtZW50OjpjcmVhdGUoc3BhblRhZywgdGhpcyk7CiAgICAgUmVmUHRy
PE5hbWVkTWFwcGVkQXR0ck1hcD4gYXR0cnMgPSBOYW1lZE1hcHBlZEF0dHJNYXA6OmNyZWF0ZSgp
OwogICAgIGF0dHJzLT5hZGRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlOjpjcmVhdGUoY2xhc3NB
dHRyLCBjbGFzc05hbWUpKTsKICAgICBzcGFuLT5zZXRBdHRyaWJ1dGVNYXAoYXR0cnMucmVsZWFz
ZSgpKTsKQEAgLTI5Miw3ICsyOTIsNyBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxWaWV3U291
cmNlRG9jdW1lCiAgICAgICAgIGFkZExpbmUoIndlYmtpdC1odG1sLXRhZyIpOwogICAgIAogICAg
IC8vIE5vdyBjcmVhdGUgYSBsaW5rIGZvciB0aGUgYXR0cmlidXRlIHZhbHVlIGluc3RlYWQgb2Yg
YSBzcGFuLgotICAgIFJlZlB0cjxIVE1MQW5jaG9yRWxlbWVudD4gYW5jaG9yID0gbmV3IEhUTUxB
bmNob3JFbGVtZW50KHRoaXMpOworICAgIFJlZlB0cjxIVE1MQW5jaG9yRWxlbWVudD4gYW5jaG9y
ID0gSFRNTEFuY2hvckVsZW1lbnQ6OmNyZWF0ZSh0aGlzKTsKICAgICBSZWZQdHI8TmFtZWRNYXBw
ZWRBdHRyTWFwPiBhdHRycyA9IE5hbWVkTWFwcGVkQXR0ck1hcDo6Y3JlYXRlKCk7CiAgICAgY29u
c3QgY2hhciogY2xhc3NWYWx1ZTsKICAgICBpZiAoaXNBbmNob3IpCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9NZWRpYURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9NZWRp
YURvY3VtZW50LmNwcAkocmV2aXNpb24gNDczNTcpCisrKyBXZWJDb3JlL2xvYWRlci9NZWRpYURv
Y3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDggKzIyNiw4IEBAIHZvaWQgTWVkaWFE
b2N1bWVudDo6cmVwbGFjZU1lZGlhRWxlbWVudFQKICAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRB
dHRyaWJ1dGUod2lkdGhBdHRyLCAiMTAwJSIpOwogICAgICAgICBlbWJlZEVsZW1lbnQtPnNldEF0
dHJpYnV0ZShoZWlnaHRBdHRyLCAiMTAwJSIpOwogICAgICAgICBlbWJlZEVsZW1lbnQtPnNldEF0
dHJpYnV0ZShuYW1lQXR0ciwgInBsdWdpbiIpOwotICAgICAgICBlbWJlZEVsZW1lbnQtPnNldFNy
Yyh1cmwoKS5zdHJpbmcoKSk7Ci0gICAgICAgIGVtYmVkRWxlbWVudC0+c2V0VHlwZShmcmFtZSgp
LT5sb2FkZXIoKS0+cmVzcG9uc2VNSU1FVHlwZSgpKTsKKyAgICAgICAgZW1iZWRFbGVtZW50LT5z
ZXRBdHRyaWJ1dGUoc3JjQXR0ciwgdXJsKCkuc3RyaW5nKCkpOworICAgICAgICBlbWJlZEVsZW1l
bnQtPnNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgZnJhbWUoKS0+bG9hZGVyKCktPnJlc3BvbnNlTUlN
RVR5cGUoKSk7CiAKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICAgICAgdmlkZW9FbGVt
ZW50LT5wYXJlbnQoKS0+cmVwbGFjZUNoaWxkKGVtYmVkRWxlbWVudCwgdmlkZW9FbGVtZW50LCBl
Yyk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA0NzM1NykKKysr
IFdlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgs
OCArODgsOCBAQCB2b2lkIFBsdWdpblRva2VuaXplcjo6Y3JlYXRlRG9jdW1lbnRTdHJ1CiAgICAg
bV9lbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCAiMTAwJSIpOwogICAgIAog
ICAgIG1fZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUobmFtZUF0dHIsICJwbHVnaW4iKTsKLSAg
ICBtX2VtYmVkRWxlbWVudC0+c2V0U3JjKG1fZG9jLT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgbV9l
bWJlZEVsZW1lbnQtPnNldFR5cGUobV9kb2MtPmZyYW1lKCktPmxvYWRlcigpLT5yZXNwb25zZU1J
TUVUeXBlKCkpOworICAgIG1fZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3JjQXR0ciwgbV9k
b2MtPnVybCgpLnN0cmluZygpKTsKKyAgICBtX2VtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKHR5
cGVBdHRyLCBtX2RvYy0+ZnJhbWUoKS0+bG9hZGVyKCktPnJlc3BvbnNlTUlNRVR5cGUoKSk7CiAg
ICAgCiAgICAgYm9keS0+YXBwZW5kQ2hpbGQoZW1iZWRFbGVtZW50LCBlYyk7ICAgIAogfQpJbmRl
eDogV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA0NzM1NykKKysrIFdlYkNvcmUvcGFn
ZS9EcmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBz
dGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1CiAgICAgICAgICAgICBTdHJp
bmcgdGl0bGU7CiAgICAgICAgICAgICBTdHJpbmcgdXJsID0gZHJhZ0RhdGEtPmFzVVJMKCZ0aXRs
ZSk7CiAgICAgICAgICAgICBpZiAoIXVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBS
ZWZQdHI8SFRNTEFuY2hvckVsZW1lbnQ+IGFuY2hvciA9IG5ldyBIVE1MQW5jaG9yRWxlbWVudChk
b2N1bWVudCk7CisgICAgICAgICAgICAgICAgUmVmUHRyPEhUTUxBbmNob3JFbGVtZW50PiBhbmNo
b3IgPSBIVE1MQW5jaG9yRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKICAgICAgICAgICAgICAg
ICBhbmNob3ItPnNldEhyZWYodXJsKTsKICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVj
OwogICAgICAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBhbmNob3JUZXh0ID0gZG9jdW1lbnQtPmNy
ZWF0ZVRleHROb2RlKHRpdGxlKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnRP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnRPYmpl
Y3QuY3BwCShyZXZpc2lvbiA0NzM1NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnRP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODIsNyArMjgyLDcgQEAgdm9pZCBSZW5kZXJQ
YXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQoYm9vbAogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCi0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGZyYW1lLT5sb2FkZXIoKS0+cmVxdWVz
dE9iamVjdCh0aGlzLCB1cmwsIEF0b21pY1N0cmluZyhvLT5uYW1lKCkpLCBzZXJ2aWNlVHlwZSwg
cGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOworICAgICAgICBib29sIHN1Y2Nlc3MgPSBmcmFtZS0+
bG9hZGVyKCktPnJlcXVlc3RPYmplY3QodGhpcywgdXJsLCBvLT5nZXRBdHRyaWJ1dGUobmFtZUF0
dHIpLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOwogICAgICAgICBpZiAo
IXN1Y2Nlc3MgJiYgbV9oYXNGYWxsYmFja0NvbnRlbnQpCiAgICAgICAgICAgICBvLT5yZW5kZXJG
YWxsYmFja0NvbnRlbnQoKTsKICAgICB9IGVsc2UgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShlbWJl
ZFRhZykpIHsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiA0NzM1NykKKysrIFdlYkNvcmUv
c3ZnL1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNCArNTEsMTkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1TVkdFbGVt
ZW50OjpTVkdFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBk
b2MpCi0gICAgOiBTdHlsZWRFbGVtZW50KHRhZ05hbWUsIGRvYykKK1NWR0VsZW1lbnQ6OlNWR0Vs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQor
ICAgIDogU3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgQ3JlYXRlRWxlbWVudFplcm9S
ZWZDb3VudCkKICAgICAsIG1fc2hhZG93UGFyZW50KDApCiAgICAgLCBtX2N1cnNvckVsZW1lbnQo
MCkKICAgICAsIG1fY3Vyc29ySW1hZ2VWYWx1ZSgwKQogewogfQogCitQYXNzUmVmUHRyPFNWR0Vs
ZW1lbnQ+IFNWR0VsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIG5ldyBTVkdFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KTsKK30KKwogU1ZHRWxlbWVudDo6flNWR0VsZW1lbnQoKQogewogICAgIGlmICht
X2N1cnNvckVsZW1lbnQpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCShyZXZpc2lvbiA0NzM1NykKKysrIFdlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDcgQEAKIC8qCiAg
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgogICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CisgICAgQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsMjUgKzI1LDIyIEBACiAjaWYg
RU5BQkxFKFNWRykKICNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHQW5p
bWF0ZWRQcm9wZXJ0eS5oIgotI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotICAgIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwogICAgIGNsYXNzIENTU0N1
cnNvckltYWdlVmFsdWU7CiAgICAgY2xhc3MgRG9jdW1lbnQ7CiAgICAgY2xhc3MgU1ZHQ3Vyc29y
RWxlbWVudDsKICAgICBjbGFzcyBTVkdEb2N1bWVudEV4dGVuc2lvbnM7CiAgICAgY2xhc3MgU1ZH
RWxlbWVudEluc3RhbmNlOwogICAgIGNsYXNzIFNWR1NWR0VsZW1lbnQ7CisgICAgY2xhc3MgVHJh
bnNmb3JtYXRpb25NYXRyaXg7CiAKICAgICBjbGFzcyBTVkdFbGVtZW50IDogcHVibGljIFN0eWxl
ZEVsZW1lbnQgewogICAgIHB1YmxpYzoKLSAgICAgICAgU1ZHRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHRWxlbWVu
dD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgICAgICB2aXJ0
dWFsIH5TVkdFbGVtZW50KCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1NWR0VsZW1lbnQoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1N1cHBvcnRlZChT
dHJpbmdJbXBsKiBmZWF0dXJlLCBTdHJpbmdJbXBsKiB2ZXJzaW9uKSBjb25zdDsKLSAgICAgICAg
CisKICAgICAgICAgU3RyaW5nIGlkKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0SWQoY29uc3Qg
U3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgICAgICBTdHJpbmcgeG1sYmFzZSgpIGNvbnN0
OwpAQCAtNTIsNiArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgU1ZHU1ZH
RWxlbWVudCogb3duZXJTVkdFbGVtZW50KCkgY29uc3Q7CiAgICAgICAgIFNWR0VsZW1lbnQqIHZp
ZXdwb3J0RWxlbWVudCgpIGNvbnN0OworCiAgICAgICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyog
YWNjZXNzRG9jdW1lbnRTVkdFeHRlbnNpb25zKCkgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwpAQCAtNjQsMzMgKzYx
LDUzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzR3JhZGll
bnRTdG9wKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlz
VGV4dENvbnRlbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgICAgIHZpcnR1YWwg
Ym9vbCBpc1NoYWRvd05vZGUoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd1BhcmVudDsgfQotICAg
ICAgICB2aXJ0dWFsIE5vZGUqIHNoYWRvd1BhcmVudE5vZGUoKSB7IHJldHVybiBtX3NoYWRvd1Bh
cmVudDsgfQogICAgICAgICB2b2lkIHNldFNoYWRvd1BhcmVudE5vZGUoQ29udGFpbmVyTm9kZSog
bm9kZSkgeyBtX3NoYWRvd1BhcmVudCA9IG5vZGU7IH0KLSAgICAgICAgdmlydHVhbCBDb250YWlu
ZXJOb2RlKiBldmVudFBhcmVudE5vZGUoKTsKIAogICAgICAgICAvLyBGb3IgU1ZHVGVzdHMKICAg
ICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gIAot
ICAgICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisKICAgICAgICAg
dmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKSB7IHJldHVybiBmYWxz
ZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2Rl
KikgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBidWlsZFBlbmRpbmdSZXNvdXJjZSgpIHsgfQotCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
KSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwg
Ym9vbCBwcmVzZXJ2ZURlY2xzID0gZmFsc2UpOwogCiAgICAgICAgIHZvaWQgc2VuZFNWR0xvYWRF
dmVudElmUG9zc2libGUoYm9vbCBzZW5kUGFyZW50TG9hZEV2ZW50cyA9IGZhbHNlKTsKICAgICAg
ICAgCiAgICAgICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXgqIHN1cHBsZW1lbnRhbFRy
YW5zZm9ybSgpIHsgcmV0dXJuIDA7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5p
bWF0ZWRTVkdBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBzZXRTeW5jaHJvbml6ZWRTVkdBdHRyaWJ1dGVzKGJvb2wpIGNvbnN0OwogCiAgICAgICAg
IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4gaW5zdGFuY2VzRm9yRWxlbWVudCgpIGNvbnN0
OwotIAorCisgICAgICAgIHZvaWQgYWRkU1ZHUHJvcGVydHlTeW5jaHJvbml6ZXIoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUsIGNvbnN0IFNWR0FuaW1hdGVkUHJvcGVydHlCYXNlJiBiYXNl
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBtX3N2Z1Byb3BlcnR5TWFwLnNldChhdHRy
TmFtZS5sb2NhbE5hbWUoKSwgJmJhc2UpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRD
dXJzb3JFbGVtZW50KFNWR0N1cnNvckVsZW1lbnQqIGN1cnNvckVsZW1lbnQpIHsgbV9jdXJzb3JF
bGVtZW50ID0gY3Vyc29yRWxlbWVudDsgfQorICAgICAgICB2b2lkIHNldEN1cnNvckltYWdlVmFs
dWUoQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSogY3Vyc29ySW1hZ2VWYWx1ZSkgeyBtX2N1cnNvckltYWdl
VmFsdWUgPSBjdXJzb3JJbWFnZVZhbHVlOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFNW
R0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisKKyAgICAgICAgdmly
dHVhbCB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNo
YW5nZWQoQXR0cmlidXRlKiwgYm9vbCBwcmVzZXJ2ZURlY2xzID0gZmFsc2UpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0ZWRTVkdBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJikgY29u
c3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgU1ZHRWxlbWVudEluc3Rh
bmNlOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NWR0VsZW1lbnQoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzU3VwcG9ydGVkKFN0cmluZ0ltcGwq
IGZlYXR1cmUsIFN0cmluZ0ltcGwqIHZlcnNpb24pIGNvbnN0OworICAgICAgICAKKyAgICAgICAg
dmlydHVhbCBib29sIGlzU2hhZG93Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93UGFyZW50
OyB9CisgICAgICAgIHZpcnR1YWwgTm9kZSogc2hhZG93UGFyZW50Tm9kZSgpIHsgcmV0dXJuIG1f
c2hhZG93UGFyZW50OyB9CisgICAgICAgIHZpcnR1YWwgQ29udGFpbmVyTm9kZSogZXZlbnRQYXJl
bnROb2RlKCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCkg
eyB9CisKICAgICAgICAgLy8gSW5saW5lZCBtZXRob2RzIGhhbmRsaW5nIFNWRyBwcm9wZXJ0eSBz
eW5jaHJvbml6YXRpb24KICAgICAgICAgdm9pZCBpbnZva2VTVkdQcm9wZXJ0eVN5bmNocm9uaXpl
cihjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiAgICAgICAgIHsKQEAgLTExNCwxNyArMTMxLDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAg
ICAgdm9pZCBhZGRTVkdQcm9wZXJ0eVN5bmNocm9uaXplcihjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSwgY29uc3QgU1ZHQW5pbWF0ZWRQcm9wZXJ0eUJhc2UmIGJhc2UpIGNvbnN0Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1fc3ZnUHJvcGVydHlNYXAuc2V0KGF0dHJOYW1lLmxvY2FsTmFt
ZSgpLCAmYmFzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldEN1cnNvckVsZW1lbnQo
U1ZHQ3Vyc29yRWxlbWVudCogY3Vyc29yRWxlbWVudCkgeyBtX2N1cnNvckVsZW1lbnQgPSBjdXJz
b3JFbGVtZW50OyB9Ci0gICAgICAgIHZvaWQgc2V0Q3Vyc29ySW1hZ2VWYWx1ZShDU1NDdXJzb3JJ
bWFnZVZhbHVlKiBjdXJzb3JJbWFnZVZhbHVlKSB7IG1fY3Vyc29ySW1hZ2VWYWx1ZSA9IGN1cnNv
ckltYWdlVmFsdWU7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTVkdF
bGVtZW50SW5zdGFuY2U7Ci0KICAgICAgICAgdm9pZCBtYXBJbnN0YW5jZVRvRWxlbWVudChTVkdF
bGVtZW50SW5zdGFuY2UqKTsKICAgICAgICAgdm9pZCByZW1vdmVJbnN0YW5jZU1hcHBpbmcoU1ZH
RWxlbWVudEluc3RhbmNlKik7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkLmgJKHJldmlzaW9uIDQ3MzU3KQorKysgV2ViQ29yZS9zdmcvU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAK
ICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdO
YW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1N0
b3BFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuaAko
cmV2aXNpb24gNDczNTcpCisrKyBXZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yLDggKzIsNiBAQAogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAgICAgICAg
ICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAotICAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAotCiAgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CiAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCkBAIC0yNCw2ICsyMiw3IEBACiAjZGVmaW5lIFNWR1N0b3BFbGVtZW50X2gKIAog
I2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdTdHls
ZWRFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMzLDEzICszMiwxMyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNWR1N0b3BFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCopOwogICAgICAgICB2aXJ0dWFsIH5TVkdTdG9wRWxlbWVudCgpOwog
CisgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBib29sIGlzR3JhZGllbnRTdG9wKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKIAogICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVj
dCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwogCi0gICAgcHJp
dmF0ZToKICAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR1N0b3BFbGVt
ZW50LCBTVkdOYW1lczo6c3RvcFRhZ1N0cmluZywgU1ZHTmFtZXM6Om9mZnNldEF0dHJTdHJpbmcs
IGZsb2F0LCBPZmZzZXQsIG9mZnNldCkKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL3N2Zy9zdmd0
YWdzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL3N2Z3RhZ3MuaW4JKHJldmlzaW9uIDQ3
MzU3KQorKysgV2ViQ29yZS9zdmcvc3ZndGFncy5pbgkod29ya2luZyBjb3B5KQpAQCAtMywxMTQg
KzMsOTkgQEAgbmFtZXNwYWNlVVJJPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZwogZ3VhcmRG
YWN0b3J5V2l0aD0iRU5BQkxFKFNWRykiCiBleHBvcnRTdHJpbmdzCiAKLWEKLSNpZiBFTkFCTEVf
U1ZHX0ZPTlRTCi1hbHRHbHlwaAotI2VuZGlmCi0jaWYgMAotYWx0R2x5cGhEZWYKLWFsdEdseXBo
SXRlbQotI2VuZGlmCithIGNyZWF0ZVdpdGhOZXcKK2NpcmNsZSBjcmVhdGVXaXRoTmV3CitjbGlw
UGF0aCBjcmVhdGVXaXRoTmV3CitjdXJzb3IgY3JlYXRlV2l0aE5ldworZGVmcyBjcmVhdGVXaXRo
TmV3CitkZXNjIGNyZWF0ZVdpdGhOZXcKK2cgY3JlYXRlV2l0aE5ldworaW1hZ2UgY3JlYXRlV2l0
aE5ldworbGluZSBjcmVhdGVXaXRoTmV3CitsaW5lYXJHcmFkaWVudCBjcmVhdGVXaXRoTmV3Citt
YXJrZXIgY3JlYXRlV2l0aE5ldworbWFzayBjcmVhdGVXaXRoTmV3CittZXRhZGF0YSBjcmVhdGVX
aXRoTmV3CittcGF0aCBpbnRlcmZhY2VOYW1lPVNWR01QYXRoRWxlbWVudCwgSlNJbnRlcmZhY2VO
YW1lPVNWR0VsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK3BhdGggY3JlYXRlV2l0aE5ldworcGF0dGVy
biBjcmVhdGVXaXRoTmV3Citwb2x5Z29uIGNyZWF0ZVdpdGhOZXcKK3BvbHlsaW5lIGNyZWF0ZVdp
dGhOZXcKK3JhZGlhbEdyYWRpZW50IGNyZWF0ZVdpdGhOZXcKK3JlY3QgY3JlYXRlV2l0aE5ldwor
c2NyaXB0IGNvbnN0cnVjdG9yTmVlZHNDcmVhdGVkQnlQYXJzZXIsIGNyZWF0ZVdpdGhOZXcKK3N0
b3AgY3JlYXRlV2l0aE5ldworc3R5bGUgY29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNlciwg
Y3JlYXRlV2l0aE5ldworc3ZnIGludGVyZmFjZU5hbWU9U1ZHU1ZHRWxlbWVudCwgY3JlYXRlV2l0
aE5ldworc3dpdGNoIGNyZWF0ZVdpdGhOZXcKK3N5bWJvbCBjcmVhdGVXaXRoTmV3Cit0ZXh0IGNy
ZWF0ZVdpdGhOZXcKK3RleHRQYXRoIGNyZWF0ZVdpdGhOZXcKK3RpdGxlIGNyZWF0ZVdpdGhOZXcK
K3RyZWYgaW50ZXJmYWNlTmFtZT1TVkdUUmVmRWxlbWVudCwgY3JlYXRlV2l0aE5ldwordHNwYW4g
aW50ZXJmYWNlTmFtZT1TVkdUU3BhbkVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK3VzZSBjcmVhdGVX
aXRoTmV3Cit2aWV3IGNyZWF0ZVdpdGhOZXcKKwogI2lmIEVOQUJMRV9TVkdfQU5JTUFUSU9OCi1h
bmltYXRlCi1hbmltYXRlQ29sb3IKLWFuaW1hdGVNb3Rpb24gSlNJbnRlcmZhY2VOYW1lPVNWR0Vs
ZW1lbnQKLWFuaW1hdGVUcmFuc2Zvcm0KLXNldAotI2VuZGlmCi1jaXJjbGUKLWNsaXBQYXRoCi0j
aWYgMAotY29sb3JfcHJvZmlsZQotI2VuZGlmCi1jdXJzb3IKLSNpZiBFTkFCTEVfU1ZHX0ZPTlRT
Ci1kZWZpbml0aW9uX3NyYwotI2VuZGlmCi1kZWZzCi1kZXNjCi1lbGxpcHNlCi0jaWYgRU5BQkxF
X0ZJTFRFUlMKLWZlQmxlbmQKLWZlQ29sb3JNYXRyaXgKLWZlQ29tcG9uZW50VHJhbnNmZXIKLWZl
Q29tcG9zaXRlCi0jaWYgMAotZmVDb252b2x2ZU1hdHJpeAotI2VuZGlmCi1mZURpZmZ1c2VMaWdo
dGluZwotZmVEaXNwbGFjZW1lbnRNYXAKLWZlRGlzdGFudExpZ2h0Ci1mZUZsb29kCi1mZUZ1bmNB
Ci1mZUZ1bmNCCi1mZUZ1bmNHCi1mZUZ1bmNSCi1mZUdhdXNzaWFuQmx1cgotZmVJbWFnZQotZmVN
ZXJnZQotZmVNZXJnZU5vZGUKLSNpZiAwCi1mZU1vcnBob2xvZ3kKLSNlbmRpZgotZmVPZmZzZXQK
LWZlUG9pbnRMaWdodAotZmVTcGVjdWxhckxpZ2h0aW5nCi1mZVNwb3RMaWdodAotZmVUaWxlCi1m
ZVR1cmJ1bGVuY2UKLWZpbHRlcgorYW5pbWF0ZSBjcmVhdGVXaXRoTmV3CithbmltYXRlQ29sb3Ig
Y3JlYXRlV2l0aE5ldworYW5pbWF0ZU1vdGlvbiBKU0ludGVyZmFjZU5hbWU9U1ZHRWxlbWVudCwg
Y3JlYXRlV2l0aE5ldworYW5pbWF0ZVRyYW5zZm9ybSBjcmVhdGVXaXRoTmV3CitzZXQgY3JlYXRl
V2l0aE5ldwogI2VuZGlmCisKICNpZiBFTkFCTEVfU1ZHX0ZPTlRTCi1mb250Ci1mb250X2ZhY2UK
LWZvbnRfZmFjZV9mb3JtYXQKLWZvbnRfZmFjZV9uYW1lCi1mb250X2ZhY2Vfc3JjCi1mb250X2Zh
Y2VfdXJpCithbHRHbHlwaCBjcmVhdGVXaXRoTmV3CitkZWZpbml0aW9uX3NyYyBjcmVhdGVXaXRo
TmV3CitlbGxpcHNlIGNyZWF0ZVdpdGhOZXcKK2ZvbnQgY3JlYXRlV2l0aE5ldworZm9udF9mYWNl
IGNyZWF0ZVdpdGhOZXcKK2ZvbnRfZmFjZV9mb3JtYXQgY3JlYXRlV2l0aE5ldworZm9udF9mYWNl
X25hbWUgY3JlYXRlV2l0aE5ldworZm9udF9mYWNlX3NyYyBjcmVhdGVXaXRoTmV3Citmb250X2Zh
Y2VfdXJpIGNyZWF0ZVdpdGhOZXcKK2dseXBoIGNyZWF0ZVdpdGhOZXcKK2hrZXJuIGludGVyZmFj
ZU5hbWU9U1ZHSEtlcm5FbGVtZW50LCBKU0ludGVyZmFjZU5hbWU9U1ZHRWxlbWVudCwgY3JlYXRl
V2l0aE5ldworbWlzc2luZ19nbHlwaCBjcmVhdGVXaXRoTmV3CiAjZW5kaWYKKwogI2lmIEVOQUJM
RV9TVkdfRk9SRUlHTl9PQkpFQ1QKLWZvcmVpZ25PYmplY3QKLSNlbmRpZgotZwotI2lmIEVOQUJM
RV9TVkdfRk9OVFMKLWdseXBoCi0jZW5kaWYKLSNpZiAwCi1nbHlwaFJlZgorZm9yZWlnbk9iamVj
dCBjcmVhdGVXaXRoTmV3CiAjZW5kaWYKLSNpZiBFTkFCTEVfU1ZHX0ZPTlRTCi1oa2VybiBpbnRl
cmZhY2VOYW1lPVNWR0hLZXJuRWxlbWVudCwgSlNJbnRlcmZhY2VOYW1lPVNWR0VsZW1lbnQKLSNl
bmRpZgotaW1hZ2UKLWxpbmUKLWxpbmVhckdyYWRpZW50Ci1tYXJrZXIKLW1hc2sKLW1ldGFkYXRh
Ci0jaWYgRU5BQkxFX1NWR19GT05UUwotbWlzc2luZ19nbHlwaAorCisjaWYgRU5BQkxFX0ZJTFRF
UlMKK2ZlQmxlbmQgY3JlYXRlV2l0aE5ldworZmVDb2xvck1hdHJpeCBjcmVhdGVXaXRoTmV3Citm
ZUNvbXBvbmVudFRyYW5zZmVyIGNyZWF0ZVdpdGhOZXcKK2ZlQ29tcG9zaXRlIGNyZWF0ZVdpdGhO
ZXcKK2ZlRGlmZnVzZUxpZ2h0aW5nIGNyZWF0ZVdpdGhOZXcKK2ZlRGlzcGxhY2VtZW50TWFwIGNy
ZWF0ZVdpdGhOZXcKK2ZlRGlzdGFudExpZ2h0IGNyZWF0ZVdpdGhOZXcKK2ZlRmxvb2QgY3JlYXRl
V2l0aE5ldworZmVGdW5jQSBjcmVhdGVXaXRoTmV3CitmZUZ1bmNCIGNyZWF0ZVdpdGhOZXcKK2Zl
RnVuY0cgY3JlYXRlV2l0aE5ldworZmVGdW5jUiBjcmVhdGVXaXRoTmV3CitmZUdhdXNzaWFuQmx1
ciBjcmVhdGVXaXRoTmV3CitmZUltYWdlIGNyZWF0ZVdpdGhOZXcKK2ZlTWVyZ2UgY3JlYXRlV2l0
aE5ldworZmVNZXJnZU5vZGUgY3JlYXRlV2l0aE5ldworZmVPZmZzZXQgY3JlYXRlV2l0aE5ldwor
ZmVQb2ludExpZ2h0IGNyZWF0ZVdpdGhOZXcKK2ZlU3BlY3VsYXJMaWdodGluZyBjcmVhdGVXaXRo
TmV3CitmZVNwb3RMaWdodCBjcmVhdGVXaXRoTmV3CitmZVRpbGUgY3JlYXRlV2l0aE5ldworZmVU
dXJidWxlbmNlIGNyZWF0ZVdpdGhOZXcKK2ZpbHRlciBjcmVhdGVXaXRoTmV3CiAjZW5kaWYKLW1w
YXRoIGludGVyZmFjZU5hbWU9U1ZHTVBhdGhFbGVtZW50LCBKU0ludGVyZmFjZU5hbWU9U1ZHRWxl
bWVudAotcGF0aAotcGF0dGVybgotcG9seWdvbgotcG9seWxpbmUKLXJhZGlhbEdyYWRpZW50Ci1y
ZWN0Ci1zY3JpcHQgY29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNlcgotc3RvcAotc3R5bGUg
Y29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNlcgotc3ZnIGludGVyZmFjZU5hbWU9U1ZHU1ZH
RWxlbWVudAotc3dpdGNoCi1zeW1ib2wKLXRleHQKLXRleHRQYXRoCi10aXRsZQotdHJlZiBpbnRl
cmZhY2VOYW1lPVNWR1RSZWZFbGVtZW50Ci10c3BhbiBpbnRlcmZhY2VOYW1lPVNWR1RTcGFuRWxl
bWVudAotdXNlCi12aWV3CisKICNpZiAwCi12a2VybiBpbnRlcmZhY2VOYW1lPVNWR1ZLZXJuRWxl
bWVudAorYWx0R2x5cGhEZWYgY3JlYXRlV2l0aE5ldworYWx0R2x5cGhJdGVtIGNyZWF0ZVdpdGhO
ZXcKK2NvbG9yX3Byb2ZpbGUgY3JlYXRlV2l0aE5ldworZmVDb252b2x2ZU1hdHJpeCBjcmVhdGVX
aXRoTmV3CitmZU1vcnBob2xvZ3kgY3JlYXRlV2l0aE5ldworZ2x5cGhSZWYgY3JlYXRlV2l0aE5l
dwordmtlcm4gaW50ZXJmYWNlTmFtZT1TVkdWS2VybkVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKICNl
bmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01MRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS93bWwvV01MRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3MzU3KQorKysgV2ViQ29yZS93bWwv
V01MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKIAotV01MRWxlbWVudDo6
V01MRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQot
ICAgIDogU3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2MpCitXTUxFbGVtZW50OjpXTUxFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6
IFN0eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIENyZWF0ZUVsZW1lbnRaZXJvUmVmQ291
bnQpCiB7CiB9CiAKK3N0YXRpYyBQYXNzUmVmUHRyPFdNTEVsZW1lbnQ+IFdNTEVsZW1lbnQ6OmNy
ZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCit7
CisgICAgcmV0dXJuIG5ldyBXTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKK30KKwogYm9v
bCBXTUxFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBN
YXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIGlmIChhdHRyTmFtZSA9
PSBIVE1MTmFtZXM6OmFsaWduQXR0cikgewpJbmRleDogV2ViQ29yZS93bWwvV01MRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEVsZW1lbnQuaAkocmV2aXNpb24gNDczNTcp
CisrKyBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBXTUxFbGVtZW50IDogcHVibGljIFN0
eWxlZEVsZW1lbnQgewogcHVibGljOgotICAgIFdNTEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXTUxFbGVtZW50
PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKIAogICAg
IHZpcnR1YWwgYm9vbCBpc1dNTEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzV01MVGFza0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpA
QCAtNDMsNiArNDMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0
ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKIAogcHJvdGVjdGVkOgorICAg
IFdNTEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKKwog
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgZGVyaXZlZCBjbGFzc2VzCiAgICAgU3RyaW5nIHBh
cnNlVmFsdWVTdWJzdGl0dXRpbmdWYXJpYWJsZVJlZmVyZW5jZXMoY29uc3QgQXRvbWljU3RyaW5n
JiwgV01MRXJyb3JDb2RlIGRlZmF1bHRFcnJvckNvZGUgPSBXTUxFcnJvckludmFsaWRWYXJpYWJs
ZVJlZmVyZW5jZSkgY29uc3Q7CiAgICAgU3RyaW5nIHBhcnNlVmFsdWVGb3JiaWRkaW5nVmFyaWFi
bGVSZWZlcmVuY2VzKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwpJbmRleDogV2ViQ29yZS93
bWwvV01MVGFnTmFtZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGFnTmFtZXMu
aW4JKHJldmlzaW9uIDQ3MzU3KQorKysgV2ViQ29yZS93bWwvV01MVGFnTmFtZXMuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTIsMzQgKzIsMzQgQEAgbmFtZXNwYWNlPSJXTUwiCiBuYW1lc3BhY2VVUkk9
Imh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCIKIGd1YXJkRmFjdG9yeVdp
dGg9IkVOQUJMRShXTUwpIgogCi1hCi1hY2Nlc3MKLWFuY2hvcgotYnIgaW50ZXJmYWNlTmFtZT1X
TUxCUkVsZW1lbnQKLWNhcmQKLWRvCi1maWVsZHNldCBpbnRlcmZhY2VOYW1lPVdNTEZpZWxkU2V0
RWxlbWVudAotZ28KLWhlYWQgaW50ZXJmYWNlTmFtZT1XTUxFbGVtZW50Ci1pbWcgaW50ZXJmYWNl
TmFtZT1XTUxJbWFnZUVsZW1lbnQKLWlucHV0CithIGNyZWF0ZVdpdGhOZXcKK2FjY2VzcyBjcmVh
dGVXaXRoTmV3CithbmNob3IgY3JlYXRlV2l0aE5ldworYnIgaW50ZXJmYWNlTmFtZT1XTUxCUkVs
ZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2NhcmQgY3JlYXRlV2l0aE5ldworZG8gY3JlYXRlV2l0aE5l
dworZmllbGRzZXQgaW50ZXJmYWNlTmFtZT1XTUxGaWVsZFNldEVsZW1lbnQsIGNyZWF0ZVdpdGhO
ZXcKK2dvIGNyZWF0ZVdpdGhOZXcKK2hlYWQgaW50ZXJmYWNlTmFtZT1XTUxFbGVtZW50LCBjcmVh
dGVXaXRoTmV3CitpbWcgaW50ZXJmYWNlTmFtZT1XTUxJbWFnZUVsZW1lbnQsIGNyZWF0ZVdpdGhO
ZXcKK2lucHV0IGNyZWF0ZVdpdGhOZXcKICNpZiAwCiAjIE5vdGU6ICdpbnNlcnRlZExlZ2VuZCcg
aXMgbm90IGFuIG9mZmljaWFsIFdNTCBlbGVtZW50IC0gaW50ZXJuYWwgcHVycG9zZSBvbmx5IQog
I2VuZGlmCi1pbnNlcnRlZExlZ2VuZCBpbnRlcmZhY2VOYW1lPVdNTEluc2VydGVkTGVnZW5kRWxl
bWVudAotbWV0YQotbm9vcAotb25ldmVudCBpbnRlcmZhY2VOYW1lPVdNTE9uRXZlbnRFbGVtZW50
Ci1vcHRncm91cCBpbnRlcmZhY2VOYW1lPVdNTE9wdEdyb3VwRWxlbWVudAotb3B0aW9uCi1wCi1w
b3N0ZmllbGQKLXByZXYKLXJlZnJlc2gKLXNlbGVjdAotc2V0dmFyCi10YWJsZQotdGQgaW50ZXJm
YWNlTmFtZT1XTUxFbGVtZW50Ci10ZW1wbGF0ZQotdGltZXIKLXRyIGludGVyZmFjZU5hbWU9V01M
RWxlbWVudAoraW5zZXJ0ZWRMZWdlbmQgaW50ZXJmYWNlTmFtZT1XTUxJbnNlcnRlZExlZ2VuZEVs
ZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK21ldGEgY3JlYXRlV2l0aE5ldworbm9vcCBjcmVhdGVXaXRo
TmV3CitvbmV2ZW50IGludGVyZmFjZU5hbWU9V01MT25FdmVudEVsZW1lbnQsIGNyZWF0ZVdpdGhO
ZXcKK29wdGdyb3VwIGludGVyZmFjZU5hbWU9V01MT3B0R3JvdXBFbGVtZW50LCBjcmVhdGVXaXRo
TmV3CitvcHRpb24gY3JlYXRlV2l0aE5ldworcCBjcmVhdGVXaXRoTmV3Citwb3N0ZmllbGQgY3Jl
YXRlV2l0aE5ldworcHJldiBjcmVhdGVXaXRoTmV3CityZWZyZXNoIGNyZWF0ZVdpdGhOZXcKK3Nl
bGVjdCBjcmVhdGVXaXRoTmV3CitzZXR2YXIgY3JlYXRlV2l0aE5ldwordGFibGUgY3JlYXRlV2l0
aE5ldwordGQgaW50ZXJmYWNlTmFtZT1XTUxFbGVtZW50LCBjcmVhdGVXaXRoTmV3Cit0ZW1wbGF0
ZSBjcmVhdGVXaXRoTmV3Cit0aW1lciBjcmVhdGVXaXRoTmV3Cit0ciBpbnRlcmZhY2VOYW1lPVdN
TEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>35049</attachid>
            <date>2009-08-18 10:32:27 -0700</date>
            <delta_ts>2009-08-19 02:22:40 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>MoreRefCount1Patch.txt</filename>
            <type>text/plain</type>
            <size>83916</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDQ3NDI4KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTUsNiArMzk1LDcgQEAgX19aTjdXZWJDb3JlMTZpc0Vu
ZE9mUGFyYWdyYXBoRVJLTlNfMTVWaQogX19aTjdXZWJDb3JlMTZ0aHJlYWRHbG9iYWxEYXRhRXYK
IF9fWk43V2ViQ29yZTE3RE9NSW1wbGVtZW50YXRpb24xNGlzVGV4dE1JTUVUeXBlRVJLTlNfNlN0
cmluZ0UKIF9fWk43V2ViQ29yZTE3R2x5cGhQYWdlVHJlZU5vZGUxOHRyZWVHbHlwaFBhZ2VDb3Vu
dEV2CitfX1pON1dlYkNvcmUxN0hUTUxQbHVnSW5FbGVtZW50MTFnZXROUE9iamVjdEV2CiBfX1pO
N1dlYkNvcmUxN2VxdWFsSWdub3JpbmdDYXNlRVBOU18xMFN0cmluZ0ltcGxFUzFfCiBfX1pON1dl
YkNvcmUxOGRlcHJlY2F0ZWRQYXJzZVVSTEVSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUxOGlz
U3RhcnRPZlBhcmFncmFwaEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRQpAQCAtNDQzLDggKzQ0NCw4
IEBAIF9fWk43V2ViQ29yZTIyYXBwbGljYXRpb25Jc0FwcGxlTWFpbEV2CiBfX1pON1dlYkNvcmUy
MmNyZWF0ZUZyYWdtZW50RnJvbVRleHRFUE5TXzVSYW5nZUVSS05TXzZTdHJpbmdFCiBfX1pON1dl
YkNvcmUyMmV4dGVybmFsUmVwcmVzZW50YXRpb25FUE5TXzEyUmVuZGVyT2JqZWN0RQogX19aTjdX
ZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTE0c2V0TWF4aW11bVNpemVFeAotX19aTjdX
ZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTE3c2V0Q2FjaGVEaXJlY3RvcnlFUktOU182
U3RyaW5nRQogX19aTjdXZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTE2c3RvcmVDb3B5
T2ZDYWNoZUVSS05TXzZTdHJpbmdFUE5TXzIwQXBwbGljYXRpb25DYWNoZUhvc3RFCitfX1pON1dl
YkNvcmUyM0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlMTdzZXRDYWNoZURpcmVjdG9yeUVSS05TXzZT
dHJpbmdFCiBfX1pON1dlYkNvcmUyM0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlMTh2YWN1dW1EYXRh
YmFzZUZpbGVFdgogX19aTjdXZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTVlbXB0eUV2
CiBfX1pON1dlYkNvcmUyM1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kQzFFUE5TXzhEb2N1bWVudEVO
M1dURjEwUGFzc1JlZlB0cklOU18xNkRvY3VtZW50RnJhZ21lbnRFRUViYmJiYk5TXzEwRWRpdEFj
dGlvbkUKQEAgLTY5Nyw5ICs2OTgsOSBAQCBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTZhZGp1c3RQ
YWdlSGVpZ2h0CiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTh1cGRhdGVDb250cm9sVGludHNFdgog
X19aTjdXZWJDb3JlOUZyYW1lVmlldzIyc2V0QmFzZUJhY2tncm91bmRDb2xvckVOU181Q29sb3JF
CiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MjNsYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZUV2Ci1fX1pO
N1dlYkNvcmU5RnJhbWVWaWV3MjlzeW5jQ29tcG9zaXRpbmdTdGF0ZVJlY3Vyc2l2ZUV2CiBfX1pO
N1dlYkNvcmU5RnJhbWVWaWV3Mjlmb3JjZUxheW91dFdpdGhQYWdlV2lkdGhSYW5nZUVmZmIKIF9f
Wk43V2ViQ29yZTlGcmFtZVZpZXcyOXNldFNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuRWIKK19f
Wk43V2ViQ29yZTlGcmFtZVZpZXcyOXN5bmNDb21wb3NpdGluZ1N0YXRlUmVjdXJzaXZlRXYKIF9f
Wk43V2ViQ29yZTlGcmFtZVZpZXc2Y3JlYXRlRVBOU181RnJhbWVFCiBfX1pON1dlYkNvcmU5RnJh
bWVWaWV3NmNyZWF0ZUVQTlNfNUZyYW1lRVJLTlNfN0ludFNpemVFCiBfX1pON1dlYkNvcmU5SFRN
TE5hbWVzMTBsaXN0aW5nVGFnRQpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNDc0MjgpCisrKyBXZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMTgsNyArMTAxOCw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjphY2Nlc3MKICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxlID0g
c3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEJhc2UqPihvd25lciktPmdldEF0dHJpYnV0ZSh0
aXRsZUF0dHIpOwogICAgICAgICAgICAgICAgIGlmICghdGl0bGUuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGl0bGU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNlKj4ob3duZXIpLT5uYW1lKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNlKj4ob3duZXIpLT5n
ZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG93
bmVyLT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxFbGVtZW50Kj4ob3duZXIpLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gNDc0MjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lRWxlbWVudEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEyICszMiwxNSBAQAogI2luY2x1ZGUgIkNT
U0hlbHBlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lRWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3VzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvd1NldHRpbmdK
YXZhc2NyaXB0VVJMKEV4ZWNTdGF0ZSogZXhlYywgSFRNTEZyYW1lRWxlbWVudCogaW1wLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQogewogICAgIGlmIChwcm90b2NvbElzSmF2YVNjcmlwdChkZXByZWNh
dGVkUGFyc2VVUkwodmFsdWUpKSkgewpAQCAtNTUsNyArNTgsNyBAQCB2b2lkIEpTSFRNTEZyYW1l
RWxlbWVudDo6c2V0U3JjKEV4ZWNTdGF0CiAgICAgaWYgKCFhbGxvd1NldHRpbmdKYXZhc2NyaXB0
VVJMKGV4ZWMsIGltcCwgc3JjVmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbXAtPnNl
dFNyYyhzcmNWYWx1ZSk7CisgICAgaW1wLT5zZXRBdHRyaWJ1dGUoc3JjQXR0ciwgc3JjVmFsdWUp
OwogICAgIHJldHVybjsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJRnJh
bWVFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA0NzQyOCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MSUZyYW1lRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDEyICszMiwxNSBAQAogI2luY2x1ZGUgIkNTU0hlbHBlci5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwor
CiB2b2lkIEpTSFRNTElGcmFtZUVsZW1lbnQ6OnNldFNyYyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgSFRNTElGcmFtZUVsZW1lbnQqIGltcCA9IHN0YXRpY19jYXN0PEhU
TUxJRnJhbWVFbGVtZW50Kj4oaW1wbCgpKTsKQEAgLTQ5LDcgKzUyLDcgQEAgdm9pZCBKU0hUTUxJ
RnJhbWVFbGVtZW50OjpzZXRTcmMoRXhlY1N0YQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGltcC0+c2V0U3JjKHNyY1ZhbHVlKTsKKyAgICBpbXAtPnNldEF0dHJpYnV0ZShzcmNB
dHRyLCBzcmNWYWx1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9v
YmpjL0RPTS5tbQkocmV2aXNpb24gNDc0MjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9N
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwyMSArMjksMjIgQEAKICNpbXBvcnQgIkRPTUludGVy
bmFsLmgiIC8vIGltcG9ydCBmaXJzdCB0byBtYWtlIHRoZSBwcml2YXRlL3B1YmxpYyB0cmljayB3
b3JrCiAjaW1wb3J0ICJET00uaCIKIAotI2ltcG9ydCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgogI2lt
cG9ydCAiRE9NRWxlbWVudEludGVybmFsLmgiCi0jaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIK
ICNpbXBvcnQgIkRPTUhUTUxDYW52YXNFbGVtZW50LmgiCisjaW1wb3J0ICJET01Ob2RlSW50ZXJu
YWwuaCIKKyNpbXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkZyYW1lLmgiCi0j
aW1wb3J0ICJIVE1MTmFtZXMuaCIKICNpbXBvcnQgIkhUTUxFbGVtZW50LmgiCi0jaW1wb3J0ICJS
ZW5kZXJJbWFnZS5oIgorI2ltcG9ydCAiSFRNTE5hbWVzLmgiCiAjaW1wb3J0ICJOb2RlRmlsdGVy
LmgiCisjaW1wb3J0ICJSZW5kZXJJbWFnZS5oIgogI2ltcG9ydCAiV2ViU2NyaXB0T2JqZWN0UHJp
dmF0ZS5oIgogI2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4KIAogI2lmIEVOQUJMRShTVkdfRE9NX09C
SkNfQklORElOR1MpCiAjaW1wb3J0ICJET01TVkcuaCIKICNpbXBvcnQgIlNWR0VsZW1lbnRJbnN0
YW5jZS5oIgorI2ltcG9ydCAiU1ZHTmFtZXMuaCIKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gNDc0MjgpCisrKyBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDYgQEAKICNpbmNsdWRlICJIaXRU
ZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW1hZ2VMb2FkZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0
b3JDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1
ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWFw
cGVkQXR0cmlidXRlLmgiCkBAIC0xMDIsOCArMTAxLDEwIEBACiAjaW5jbHVkZSAiUmVuZGVyVGV4
dENvbnRyb2wuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lk
Z2V0LmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5oIgorI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlz
dGVuZXIuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlZ21lbnRl
ZFN0cmluZy5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKQEAgLTc5NSw3ICs3
OTYsNyBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IERvY3VtZW50OjpjcmVhdGVFbGVtCiAjZW5kaWYK
ICAgICAKICAgICBpZiAoIWUpCi0gICAgICAgIGUgPSBuZXcgRWxlbWVudChxTmFtZSwgZG9jdW1l
bnQoKSk7CisgICAgICAgIGUgPSBFbGVtZW50OjpjcmVhdGUocU5hbWUsIGRvY3VtZW50KCkpOwog
CiAgICAgLy8gPGltYWdlPiB1c2VzIGltZ1RhZyBzbyB3ZSBuZWVkIGEgc3BlY2lhbCBydWxlLgog
I2lmIEVOQUJMRShXTUwpCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gNDc0MjgpCisrKyBXZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTIgKzU3LDE3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3Bh
Y2UgWE1MTmFtZXM7CiAgICAgCi1FbGVtZW50OjpFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKLSAgICA6IENvbnRhaW5lck5vZGUoZG9jdW1l
bnQsIENyZWF0ZUVsZW1lbnRaZXJvUmVmQ291bnQpCitFbGVtZW50OjpFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgQ29uc3RydWN0aW9uVHlw
ZSB0eXBlKQorICAgIDogQ29udGFpbmVyTm9kZShkb2N1bWVudCwgdHlwZSkKICAgICAsIG1fdGFn
TmFtZSh0YWdOYW1lKQogewogfQogCitQYXNzUmVmUHRyPEVsZW1lbnQ+IEVsZW1lbnQ6OmNyZWF0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBDcmVhdGVF
bGVtZW50KSk7Cit9CisKIEVsZW1lbnQ6On5FbGVtZW50KCkKIHsKICAgICBpZiAobmFtZWRBdHRy
TWFwKQpJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0VsZW1lbnQuaAkocmV2aXNpb24gNDc0MjgpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgSW50U2l6ZTsKIAogY2xhc3Mg
RWxlbWVudCA6IHB1YmxpYyBDb250YWluZXJOb2RlIHsKIHB1YmxpYzoKLSAgICBFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVs
ZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICB2aXJ0
dWFsIH5FbGVtZW50KCk7CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGdldElEQXR0cmlidXRl
KCkgY29uc3Q7CkBAIC0yMDYsNiArMjA2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKSB7IH0KIAogcHJvdGVjdGVkOgorICAgIEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgQ29uc3RydWN0aW9uVHlwZSk7
CisKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNo
YW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIgPSBmYWxzZSwgTm9kZSogYmVmb3JlQ2hhbmdlID0g
MCwgTm9kZSogYWZ0ZXJDaGFuZ2UgPSAwLCBpbnQgY2hpbGRDb3VudERlbHRhID0gMCk7CkluZGV4
OiBXZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9TdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gNDc0MjgpCisrKyBXZWJDb3JlL2RvbS9TdHls
ZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDExICsxMDEsNiBAQCB2b2lkIFN0
eWxlZEVsZW1lbnQ6OnJlbW92ZU1hcHBlZEF0dHJpYnV0CiAgICAgbWFwcGVkQXR0cmlidXRlRGVj
bHMtPnJlbW92ZShNYXBwZWRBdHRyaWJ1dGVLZXkoZW50cnlUeXBlLCBhdHRyTmFtZS5sb2NhbE5h
bWUoKS5pbXBsKCksIGF0dHJWYWx1ZS5pbXBsKCkpKTsKIH0KIAotdm9pZCBTdHlsZWRFbGVtZW50
OjppbnZhbGlkYXRlU3R5bGVBdHRyaWJ1dGUoKQotewotICAgIG1faXNTdHlsZUF0dHJpYnV0ZVZh
bGlkID0gZmFsc2U7Ci19Ci0KIHZvaWQgU3R5bGVkRWxlbWVudDo6dXBkYXRlU3R5bGVBdHRyaWJ1
dGUoKSBjb25zdAogewogICAgIEFTU0VSVCghbV9pc1N0eWxlQXR0cmlidXRlVmFsaWQpOwpAQCAt
MTE2LDggKzExMSw4IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6dXBkYXRlU3R5bGVBdHRyaWJ1dGUK
ICAgICBtX3N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSA9IGZhbHNlOwogfQogCi1TdHlsZWRF
bGVtZW50OjpTdHlsZWRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIERvY3VtZW50
ICpkb2MpCi0gICAgOiBFbGVtZW50KG5hbWUsIGRvYykKK1N0eWxlZEVsZW1lbnQ6OlN0eWxlZEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBDb25z
dHJ1Y3Rpb25UeXBlIHR5cGUpCisgICAgOiBFbGVtZW50KG5hbWUsIGRvY3VtZW50LCB0eXBlKQog
ewogfQogCkBAIC0yOTIsMTIgKzI4Nyw2IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkQ1NTUHJv
cGVydHkoTWFwcGUKICAgICBhdHRyLT5kZWNsKCktPnNldFByb3BlcnR5KGlkLCB2YWx1ZSwgZmFs
c2UpOwogfQogCi12b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZENTU1N0cmluZ1Byb3BlcnR5KE1hcHBl
ZEF0dHJpYnV0ZSogYXR0ciwgaW50IGlkLCBjb25zdCBTdHJpbmcgJnZhbHVlLCBDU1NQcmltaXRp
dmVWYWx1ZTo6VW5pdFR5cGVzIHR5cGUpCi17Ci0gICAgaWYgKCFhdHRyLT5kZWNsKCkpIGNyZWF0
ZU1hcHBlZERlY2woYXR0cik7Ci0gICAgYXR0ci0+ZGVjbCgpLT5zZXRTdHJpbmdQcm9wZXJ0eShp
ZCwgdmFsdWUsIHR5cGUsIGZhbHNlKTsKLX0KLQogdm9pZCBTdHlsZWRFbGVtZW50OjphZGRDU1NJ
bWFnZVByb3BlcnR5KE1hcHBlZEF0dHJpYnV0ZSogYXR0ciwgaW50IGlkLCBjb25zdCBTdHJpbmcm
IHVybCkKIHsKICAgICBpZiAoIWF0dHItPmRlY2woKSkgY3JlYXRlTWFwcGVkRGVjbChhdHRyKTsK
SW5kZXg6IFdlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9TdHlsZWRFbGVtZW50LmgJKHJldmlzaW9uIDQ3NDI4KQorKysgV2ViQ29yZS9kb20vU3R5
bGVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw1NCArMzgsNTAgQEAgY2xhc3MgTWFw
cGVkQXR0cmlidXRlOwogCiBjbGFzcyBTdHlsZWRFbGVtZW50IDogcHVibGljIEVsZW1lbnQgewog
cHVibGljOgotICAgIFN0eWxlZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CiAgICAgdmlydHVhbCB+U3R5bGVkRWxlbWVudCgpOwogCi0gICAgdmlydHVhbCBib29sIGlz
U3R5bGVkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQogICAgIE5hbWVkTWFwcGVk
QXR0ck1hcCogbWFwcGVkQXR0cmlidXRlcygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PE5hbWVkTWFw
cGVkQXR0ck1hcCo+KG5hbWVkQXR0ck1hcC5nZXQoKSk7IH0KLSAgICBjb25zdCBOYW1lZE1hcHBl
ZEF0dHJNYXAqIG1hcHBlZEF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxO
YW1lZE1hcHBlZEF0dHJNYXAqPihuYW1lZEF0dHJNYXAuZ2V0KCkpOyB9CisgICAgY29uc3QgTmFt
ZWRNYXBwZWRBdHRyTWFwKiBtYXBwZWRBdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgTmFtZWRNYXBwZWRBdHRyTWFwKj4obmFtZWRBdHRyTWFwLmdldCgpKTsgfQor
CiAgICAgYm9vbCBoYXNNYXBwZWRBdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbmFtZWRBdHRy
TWFwICYmIG1hcHBlZEF0dHJpYnV0ZXMoKS0+aGFzTWFwcGVkQXR0cmlidXRlcygpOyB9CiAgICAg
Ym9vbCBpc01hcHBlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdCB7
IE1hcHBlZEF0dHJpYnV0ZUVudHJ5IHJlcyA9IGVOb25lOyBtYXBUb0VudHJ5KG5hbWUsIHJlcyk7
IHJldHVybiByZXMgIT0gZU5vbmU7IH0KIAotICAgIHZvaWQgYWRkQ1NTTGVuZ3RoKE1hcHBlZEF0
dHJpYnV0ZSogYXR0ciwgaW50IGlkLCBjb25zdCBTdHJpbmcgJnZhbHVlKTsKLSAgICB2b2lkIGFk
ZENTU1Byb3BlcnR5KE1hcHBlZEF0dHJpYnV0ZSogYXR0ciwgaW50IGlkLCBjb25zdCBTdHJpbmcg
JnZhbHVlKTsKLSAgICB2b2lkIGFkZENTU1Byb3BlcnR5KE1hcHBlZEF0dHJpYnV0ZSogYXR0ciwg
aW50IGlkLCBpbnQgdmFsdWUpOwotICAgIHZvaWQgYWRkQ1NTU3RyaW5nUHJvcGVydHkoTWFwcGVk
QXR0cmlidXRlKiBhdHRyLCBpbnQgaWQsIGNvbnN0IFN0cmluZyAmdmFsdWUsIENTU1ByaW1pdGl2
ZVZhbHVlOjpVbml0VHlwZXMgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CisgICAg
dm9pZCBhZGRDU1NMZW5ndGgoTWFwcGVkQXR0cmlidXRlKiwgaW50IGlkLCBjb25zdCBTdHJpbmcm
IHZhbHVlKTsKKyAgICB2b2lkIGFkZENTU1Byb3BlcnR5KE1hcHBlZEF0dHJpYnV0ZSosIGludCBp
ZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgdm9pZCBhZGRDU1NQcm9wZXJ0eShNYXBwZWRB
dHRyaWJ1dGUqLCBpbnQgaWQsIGludCB2YWx1ZSk7CiAgICAgdm9pZCBhZGRDU1NJbWFnZVByb3Bl
cnR5KE1hcHBlZEF0dHJpYnV0ZSosIGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHVybCk7
Ci0gICAgdm9pZCBhZGRDU1NDb2xvcihNYXBwZWRBdHRyaWJ1dGUqIGF0dHIsIGludCBpZCwgY29u
c3QgU3RyaW5nICZjKTsKLSAgICB2b2lkIGNyZWF0ZU1hcHBlZERlY2woTWFwcGVkQXR0cmlidXRl
KiBhdHRyKTsKLSAgICAKLSAgICBzdGF0aWMgQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24q
IGdldE1hcHBlZEF0dHJpYnV0ZURlY2woTWFwcGVkQXR0cmlidXRlRW50cnkgdHlwZSwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CisgICAgdm9p
ZCBhZGRDU1NDb2xvcihNYXBwZWRBdHRyaWJ1dGUqLCBpbnQgaWQsIGNvbnN0IFN0cmluZyYgY29s
b3IpOworCisgICAgc3RhdGljIENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKiBnZXRNYXBw
ZWRBdHRyaWJ1dGVEZWNsKE1hcHBlZEF0dHJpYnV0ZUVudHJ5LCBjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKICAgICBzdGF0aWMgdm9pZCBzZXRN
YXBwZWRBdHRyaWJ1dGVEZWNsKE1hcHBlZEF0dHJpYnV0ZUVudHJ5LCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBDU1NNYXBwZWRBdHRyaWJ1dGVE
ZWNsYXJhdGlvbiopOwotICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1hcHBlZEF0dHJpYnV0ZURlY2wo
TWFwcGVkQXR0cmlidXRlRW50cnkgdHlwZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29u
c3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CisgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWFwcGVkQXR0
cmlidXRlRGVjbChNYXBwZWRBdHRyaWJ1dGVFbnRyeSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CiAKICAgICBzdGF0aWMgQ1NTTWFwcGVkQXR0
cmlidXRlRGVjbGFyYXRpb24qIGdldE1hcHBlZEF0dHJpYnV0ZURlY2woTWFwcGVkQXR0cmlidXRl
RW50cnksIEF0dHJpYnV0ZSopOwogICAgIHN0YXRpYyB2b2lkIHNldE1hcHBlZEF0dHJpYnV0ZURl
Y2woTWFwcGVkQXR0cmlidXRlRW50cnksIEF0dHJpYnV0ZSosIENTU01hcHBlZEF0dHJpYnV0ZURl
Y2xhcmF0aW9uKik7CiAgICAgCisKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogaW5s
aW5lU3R5bGVEZWNsKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVTdHlsZURlY2wuZ2V0KCk7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgYWRkaXRpb25hbEF0dHJp
YnV0ZVN0eWxlRGVjbHMoVmVjdG9yPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4mKSB7fTsK
ICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZ2V0SW5saW5lU3R5bGVEZWNsKCk7CiAg
ICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKTsKLSAgICB2b2lkIGNyZWF0ZUlubGluZVN0
eWxlRGVjbCgpOwotICAgIHZvaWQgZGVzdHJveUlubGluZVN0eWxlRGVjbCgpOwogICAgIHZvaWQg
aW52YWxpZGF0ZVN0eWxlQXR0cmlidXRlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0eWxl
QXR0cmlidXRlKCkgY29uc3Q7Ci0gICAgCisKICAgICBjb25zdCBDbGFzc05hbWVzJiBjbGFzc05h
bWVzKCkgY29uc3QgeyBBU1NFUlQoaGFzQ2xhc3MoKSk7IEFTU0VSVChtYXBwZWRBdHRyaWJ1dGVz
KCkpOyByZXR1cm4gbWFwcGVkQXR0cmlidXRlcygpLT5jbGFzc05hbWVzKCk7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSosIGJvb2wgcHJlc2VydmVEZWNs
cyA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlKik7CiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVBdHRyaWJ1dGVNYXAoKSBjb25zdDsKKwogICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxBdHRyaWJ1dGU+IGNyZWF0ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CiAKK3Byb3RlY3RlZDoKKyAgICBTdHlsZWRF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIENvbnN0cnVjdGlvblR5cGUp
OworCisgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwgYm9vbCBw
cmVzZXJ2ZURlY2xzID0gZmFsc2UpOworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgY29weU5vbkF0dHJpYnV0
ZVByb3BlcnRpZXMoY29uc3QgRWxlbWVudCopOwogCiAgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJl
c291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0OwogCi1wcm90ZWN0
ZWQ6CiAgICAgLy8gY2xhc3NBdHRyaWJ1dGVDaGFuZ2VkKCkgZXhpc3RzIHRvIHNoYXJlIGNvZGUg
YmV0d2VlbgogICAgIC8vIHBhcnNlTWFwcGVkQXR0cmlidXRlIChjYWxsZWQgdmlhIHNldEF0dHJp
YnV0ZSgpKSBhbmQKICAgICAvLyBzdmdBdHRyaWJ1dGVDaGFuZ2VkIChjYWxsZWQgd2hlbiBlbGVt
ZW50LmNsYXNzTmFtZS5iYXNlVmFsdWUgaXMgc2V0KQpAQCAtOTMsOSArODksMjUgQEAgcHJvdGVj
dGVkOgogICAgIAogICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7
CiAKK3ByaXZhdGU6CisgICAgdmlydHVhbCBib29sIGlzU3R5bGVkRWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KKworICAgIHZvaWQgY3JlYXRlTWFwcGVkRGVjbChNYXBwZWRBdHRyaWJ1
dGUqKTsKKworICAgIHZvaWQgY3JlYXRlSW5saW5lU3R5bGVEZWNsKCk7CisgICAgdm9pZCBkZXN0
cm95SW5saW5lU3R5bGVEZWNsKCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0eWxlQXR0cmli
dXRlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQXR0cmlidXRlTWFwKCkgY29u
c3Q7CisKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1faW5saW5lU3R5
bGVEZWNsOwogfTsKIAoraW5saW5lIHZvaWQgU3R5bGVkRWxlbWVudDo6aW52YWxpZGF0ZVN0eWxl
QXR0cmlidXRlKCkKK3sKKyAgICBtX2lzU3R5bGVBdHRyaWJ1dGVWYWxpZCA9IGZhbHNlOworfQor
CiB9IC8vbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5w
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCShyZXZpc2lvbiA0NzQy
OCkKKysrIFdlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcg
KzkzLDcgQEAgc3ViIGRlZmF1bHRUYWdQcm9wZXJ0eUhhc2gKICAgICByZXR1cm4gKAogICAgICAg
ICAnY29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNlcicgPT4gMCwKICAgICAgICAgJ2NvbnN0
cnVjdG9yTmVlZHNGb3JtRWxlbWVudCcgPT4gMCwKLSAgICAgICAgJ2NyZWF0ZVdpdGhOZXcnID0+
IDEsCisgICAgICAgICdjcmVhdGVXaXRoTmV3JyA9PiAwLAogICAgICAgICAnZXhwb3J0U3RyaW5n
JyA9PiAwLAogICAgICAgICAnaW50ZXJmYWNlTmFtZScgPT4gZGVmYXVsdEludGVyZmFjZU5hbWUo
JF9bMF0pLAogICAgICAgICAjIEJ5IGRlZmF1bHQsIHRoZSBKU0ludGVyZmFjZU5hbWUgaXMgdGhl
IHNhbWUgYXMgdGhlIGludGVyZmFjZU5hbWUuCkBAIC0yODIsNyArMjgyLDcgQEAgc3ViIHByaW50
Q29uc3RydWN0b3JJbnRlcmlvcgogICAgIGlmICgkdGFnc3skdGFnTmFtZX17d3JhcHBlck9ubHlJ
Zk1lZGlhSXNBdmFpbGFibGV9KSB7CiAgICAgICAgIHByaW50IEYgPDxFTkQKICAgICBpZiAoIU1l
ZGlhUGxheWVyOjppc0F2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gbmV3IEhUTUxFbGVtZW50
KCRjb25zdHJ1Y3RvclRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICAgICAgcmV0dXJuIEhUTUxFbGVt
ZW50OjpjcmVhdGUoJGNvbnN0cnVjdG9yVGFnTmFtZSwgZG9jdW1lbnQpOwogRU5ECiA7CiAgICAg
fQpAQCAtNzU2LDcgKzc1Niw3IEBAIGlmICgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9IGVxICJIVE1M
IikgewogICAgIHByaW50IEYgIiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHFOYW1lLCBkb2N1bWVu
dCwgY3JlYXRlZEJ5UGFyc2VyKTtcbiI7CiB9CiAKLXByaW50IEYgIiAgICByZXR1cm4gbmV3ICRw
YXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50KHFOYW1lLCBkb2N1bWVudCk7XG4iOworcHJpbnQg
RiAiICAgIHJldHVybiAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudDo6Y3JlYXRlKHFOYW1l
LCBkb2N1bWVudCk7XG4iOwogCiBpZiAoJHBhcmFtZXRlcnN7Z3VhcmRGYWN0b3J5V2l0aH0pIHsK
IApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0NyZWF0ZUxpbmtDb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQ3JlYXRlTGlua0NvbW1hbmQuY3BwCShyZXZpc2lvbiA0NzQy
OCkKKysrIFdlYkNvcmUvZWRpdGluZy9DcmVhdGVMaW5rQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBDcmVhdGVMaW5rQ29tbWFuZDo6ZG9BcHBseSgpCiAg
ICAgaWYgKGVuZGluZ1NlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAotICAgIFJlZlB0cjxIVE1MQW5jaG9yRWxlbWVudD4gYW5jaG9yRWxlbWVudCA9IG5ldyBI
VE1MQW5jaG9yRWxlbWVudChkb2N1bWVudCgpKTsKKyAgICBSZWZQdHI8SFRNTEFuY2hvckVsZW1l
bnQ+IGFuY2hvckVsZW1lbnQgPSBIVE1MQW5jaG9yRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkp
OwogICAgIGFuY2hvckVsZW1lbnQtPnNldEhyZWYobV91cmwpOwogICAgIAogICAgIGlmIChlbmRp
bmdTZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9VbmxpbmtD
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvVW5saW5rQ29tbWFuZC5j
cHAJKHJldmlzaW9uIDQ3NDI4KQorKysgV2ViQ29yZS9lZGl0aW5nL1VubGlua0NvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNCArMzcsMTMgQEAgVW5saW5rQ29tbWFuZDo6VW5saW5r
Q29tbWFuZChEb2N1bWVudCogZAogCiB2b2lkIFVubGlua0NvbW1hbmQ6OmRvQXBwbHkoKQogewot
ICAgIC8vIEZJWE1FOiBJZiBhIGNhcmV0IGlzIGluc2lkZSBhIGxpbmssIHJlbW92ZSBpdC4KKyAg
ICAvLyBGSVhNRTogSWYgYSBjYXJldCBpcyBpbnNpZGUgYSBsaW5rLCB3ZSBzaG91bGQgcmVtb3Zl
IGl0LCBidXQgY3VycmVudGx5IHdlIGRvbid0LgogICAgIGlmICghZW5kaW5nU2VsZWN0aW9uKCku
aXNSYW5nZSgpKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIHB1c2hQYXJ0aWFsbHlT
ZWxlY3RlZEFuY2hvckVsZW1lbnRzRG93bigpOwogCi0gICAgSFRNTEFuY2hvckVsZW1lbnQqIGFu
Y2hvckVsZW1lbnQgPSBuZXcgSFRNTEFuY2hvckVsZW1lbnQoZG9jdW1lbnQoKSk7Ci0gICAgcmVt
b3ZlU3R5bGVkRWxlbWVudChhbmNob3JFbGVtZW50KTsKKyAgICByZW1vdmVTdHlsZWRFbGVtZW50
KEhUTUxBbmNob3JFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSkpOwogfQogCiB9CkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NDI4KQorKysgV2ViQ29yZS9o
dG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTggKzQwLDIw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAot
SFRNTEFuY2hvckVsZW1lbnQ6OkhUTUxBbmNob3JFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCkK
LSAgICA6IEhUTUxFbGVtZW50KGFUYWcsIGRvY3VtZW50KQotICAgICwgbV9yb290RWRpdGFibGVF
bGVtZW50Rm9yU2VsZWN0aW9uT25Nb3VzZURvd24oMCkKK0hUTUxBbmNob3JFbGVtZW50OjpIVE1M
QW5jaG9yRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
dW1lbnQpCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgQ3JlYXRlRWxlbWVu
dCkKICAgICAsIG1fd2FzU2hpZnRLZXlEb3duT25Nb3VzZURvd24oZmFsc2UpCiB7CiB9CiAKLUhU
TUxBbmNob3JFbGVtZW50OjpIVE1MQW5jaG9yRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCi0gICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBk
b2N1bWVudCkKLSAgICAsIG1fcm9vdEVkaXRhYmxlRWxlbWVudEZvclNlbGVjdGlvbk9uTW91c2VE
b3duKDApCi0gICAgLCBtX3dhc1NoaWZ0S2V5RG93bk9uTW91c2VEb3duKGZhbHNlKQorUGFzc1Jl
ZlB0cjxIVE1MQW5jaG9yRWxlbWVudD4gSFRNTEFuY2hvckVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVu
dCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MQW5jaG9yRWxlbWVu
dChhVGFnLCBkb2N1bWVudCkpOworfQorCitQYXNzUmVmUHRyPEhUTUxBbmNob3JFbGVtZW50PiBI
VE1MQW5jaG9yRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiBkb2N1bWVudCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxBbmNob3JF
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIGJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6
OnN1cHBvcnRzRm9jdXMoKSBjb25zdApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgJKHJl
dmlzaW9uIDQ3NDI4KQorKysgV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBI
VE1MQW5jaG9yRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgSFRN
TEFuY2hvckVsZW1lbnQoRG9jdW1lbnQqKTsKLSAgICBIVE1MQW5jaG9yRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MQW5j
aG9yRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRN
TEFuY2hvckVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
IAogICAgIEtVUkwgaHJlZigpIGNvbnN0OwogICAgIHZvaWQgc2V0SHJlZihjb25zdCBBdG9taWNT
dHJpbmcmKTsKQEAgLTUyLDYgKzUyLDggQEAgcHVibGljOgogICAgIGJvb2wgaXNMaXZlTGluaygp
IGNvbnN0OwogCiBwcm90ZWN0ZWQ6CisgICAgSFRNTEFuY2hvckVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7CisKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAKIHByaXZhdGU6CkBAIC03MCw3ICs3Miw3IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBzaG9ydCB0YWJJbmRleCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBkcmFnZ2FibGUoKSBjb25zdDsKIAotICAgIEVsZW1lbnQqIG1fcm9vdEVkaXRhYmxlRWxl
bWVudEZvclNlbGVjdGlvbk9uTW91c2VEb3duOworICAgIFJlZlB0cjxFbGVtZW50PiBtX3Jvb3RF
ZGl0YWJsZUVsZW1lbnRGb3JTZWxlY3Rpb25Pbk1vdXNlRG93bjsKICAgICBib29sIG1fd2FzU2hp
ZnRLZXlEb3duT25Nb3VzZURvd247CiB9OwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEFwcGxl
dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDQ3NDI4KQorKysgV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTIgKzM0LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTEFwcGxldEVsZW1lbnQ6OkhU
TUxBcHBsZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBk
b2MpCi0gICAgOiBIVE1MUGx1Z0luRWxlbWVudCh0YWdOYW1lLCBkb2MpCitpbmxpbmUgSFRNTEFw
cGxldEVsZW1lbnQ6OkhUTUxBcHBsZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxQbHVnSW5FbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGFwcGxldFRhZykpOwogfQogCitQ
YXNzUmVmUHRyPEhUTUxBcHBsZXRFbGVtZW50PiBIVE1MQXBwbGV0RWxlbWVudDo6Y3JlYXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxBcHBsZXRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7
Cit9CisKIHZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IGFsdEF0dHIgfHwK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5oCShyZXZpc2lvbiA0NzQyOCkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMiArMjcs
OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxGb3JtRWxlbWVudDsKLWNs
YXNzIEhUTUxJbWFnZUxvYWRlcjsKLQogY2xhc3MgSFRNTEFwcGxldEVsZW1lbnQgOiBwdWJsaWMg
SFRNTFBsdWdJbkVsZW1lbnQgewogcHVibGljOgotICAgIEhUTUxBcHBsZXRFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxB
cHBsZXRFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAK
ICAgICBTdHJpbmcgaHNwYWNlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRIc3BhY2UoY29uc3QgU3Ry
aW5nJik7CkBAIC00MSw2ICszOCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZzcGFjZShjb25z
dCBTdHJpbmcmKTsKIAogcHJpdmF0ZToKKyAgICBIVE1MQXBwbGV0RWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKwogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gMTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSopOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDQ3NDI4KQorKysgV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MQXJlYUVsZW1lbnQ6OkhUTUxBcmVhRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCitpbmxpbmUg
SFRNTEFyZWFFbGVtZW50OjpIVE1MQXJlYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDogSFRNTEFuY2hvckVsZW1lbnQodGFnTmFt
ZSwgZG9jdW1lbnQpCiAgICAgLCBtX2Nvb3Jkc0xlbigwKQogICAgICwgbV9sYXN0U2l6ZSgtMSwg
LTEpCkBAIC00Myw4ICs0Myw5IEBAIEhUTUxBcmVhRWxlbWVudDo6SFRNTEFyZWFFbGVtZW50KGNv
bnN0IFEKICAgICBBU1NFUlQoaGFzVGFnTmFtZShhcmVhVGFnKSk7CiB9CiAKLUhUTUxBcmVhRWxl
bWVudDo6fkhUTUxBcmVhRWxlbWVudCgpCitQYXNzUmVmUHRyPEhUTUxBcmVhRWxlbWVudD4gSFRN
TEFyZWFFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvY3VtZW50KQogeworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTEFyZWFFbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIHZvaWQgSFRNTEFyZWFFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTEFyZWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxl
bWVudC5oCShyZXZpc2lvbiA0NzQyOCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsNyBAQCBjbGFzcyBQYXRoOwogCiBjbGFzcyBI
VE1MQXJlYUVsZW1lbnQgOiBwdWJsaWMgSFRNTEFuY2hvckVsZW1lbnQgewogcHVibGljOgotICAg
IEhUTUxBcmVhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLSAgICB2
aXJ0dWFsIH5IVE1MQXJlYUVsZW1lbnQoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MQXJl
YUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAg
IGJvb2wgaXNEZWZhdWx0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZSA9PSBEZWZhdWx0OyB9CiAK
QEAgLTQ5LDYgKzQ4LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Tm9IcmVmKGJvb2wpOwogCiBw
cml2YXRlOgorICAgIEhUTUxBcmVhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqKTsKKwogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQogICAgIHZpcnR1YWwgaW50IHRhZ1By
aW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2
aXNpb24gNDc0MjgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NiwxMyArNTYsOSBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcg
c3RkOjptaW47CiB1c2luZyBzdGQ6Om1heDsKIAotSFRNTEVsZW1lbnQ6OkhUTUxFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCi0gICAgOiBTdHlsZWRF
bGVtZW50KHRhZ05hbWUsIGRvYykKLXsKLX0KLQotSFRNTEVsZW1lbnQ6On5IVE1MRWxlbWVudCgp
CitQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBIVE1MRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBDcmVhdGVFbGVtZW50KSk7
CiB9CiAKIFN0cmluZyBIVE1MRWxlbWVudDo6bm9kZU5hbWUoKSBjb25zdApJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbGVt
ZW50LmgJKHJldmlzaW9uIDQ3NDI4KQorKysgV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzUsMTkgKzM1LDEyIEBAIGVudW0gSFRNTFRh
Z1N0YXR1cyB7IFRhZ1N0YXR1c09wdGlvbmFsLCAKICAgICAgICAgICAgICAgICAgICAgICAgCiBj
bGFzcyBIVE1MRWxlbWVudCA6IHB1YmxpYyBTdHlsZWRFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBI
VE1MRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwotICAg
IHZpcnR1YWwgfkhUTUxFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNIVE1MRWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1l
KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7Ci0gICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKIAogICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+
IGNoaWxkcmVuKCk7CiAgICAgCiAgICAgdmlydHVhbCBTdHJpbmcgdGl0bGUoKSBjb25zdDsKKwog
ICAgIHZpcnR1YWwgc2hvcnQgdGFiSW5kZXgoKSBjb25zdDsKICAgICB2b2lkIHNldFRhYkluZGV4
KGludCk7CiAKQEAgLTYzLDEyICs1NiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNlcnRBZGph
Y2VudEhUTUwoY29uc3QgU3RyaW5nJiB3aGVyZSwgY29uc3QgU3RyaW5nJiBodG1sLCBFeGNlcHRp
b25Db2RlJik7CiAgICAgdm9pZCBpbnNlcnRBZGphY2VudFRleHQoY29uc3QgU3RyaW5nJiB3aGVy
ZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgaXNGb2N1c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50RWRpdGFi
bGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBjb250ZW50RWRpdGFibGUoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0Q29udGVudEVkaXRhYmxlKE1hcHBlZEF0dHJpYnV0ZSopOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRDb250ZW50RWRpdGFibGUoY29uc3QgU3RyaW5nJik7CisKKyAgICBTdHJp
bmcgY29udGVudEVkaXRhYmxlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb250ZW50RWRpdGFibGUo
Y29uc3QgU3RyaW5nJik7CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJhZ2dhYmxlKCkgY29uc3Q7CiAg
ICAgdm9pZCBzZXREcmFnZ2FibGUoYm9vbCk7CkBAIC03OSwzMSArNzEsNTMgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBy
ZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3Qq
IGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKworICAgIEhUTUxG
b3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxGb3JtKCk7IH0KKworICAg
IHN0YXRpYyB2b2lkIGFkZEhUTUxBbGlnbm1lbnRUb1N0eWxlZEVsZW1lbnQoU3R5bGVkRWxlbWVu
dCosIE1hcHBlZEF0dHJpYnV0ZSopOworCitwcm90ZWN0ZWQ6CisgICAgSFRNTEVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqLCBDb25zdHJ1Y3Rpb25UeXBlID0g
Q3JlYXRlRWxlbWVudFplcm9SZWZDb3VudCk7CisKKyAgICB2b2lkIGFkZEhUTUxBbGlnbm1lbnQo
TWFwcGVkQXR0cmlidXRlKik7CisKKyAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSopOworCisgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CisKICAgICB2aXJ0
dWFsIGJvb2wgY2hpbGRBbGxvd2VkKE5vZGUqIG5ld0NoaWxkKTsgLy8gRXJyb3ItY2hlY2tpbmcg
ZHVyaW5nIHBhcnNpbmcgdGhhdCBjaGVja3MgdGhlIERURAogCiAgICAgLy8gSGVscGVyIGZ1bmN0
aW9uIHRvIGNoZWNrIHRoZSBEVEQgZm9yIGEgZ2l2ZW4gY2hpbGQgbm9kZS4KICAgICB2aXJ0dWFs
IGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSopOworCiAgICAgc3RhdGljIGJvb2wgaW5FaXRoZXJU
YWdMaXN0KGNvbnN0IE5vZGUqKTsKICAgICBzdGF0aWMgYm9vbCBpbklubGluZVRhZ0xpc3QoY29u
c3QgTm9kZSopOwogICAgIHN0YXRpYyBib29sIGluQmxvY2tUYWdMaXN0KGNvbnN0IE5vZGUqKTsK
ICAgICBzdGF0aWMgYm9vbCBpc1JlY29nbml6ZWRUYWdOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUm
KTsKIAotICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7Ci0g
ICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVu
ZGVyU3R5bGUqKTsKLQotICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IHZpcnR1YWxGb3JtKCk7IH0KICAgICBIVE1MRm9ybUVsZW1lbnQqIGZpbmRGb3JtQW5jZXN0b3Io
KSBjb25zdDsKIAotICAgIHN0YXRpYyB2b2lkIGFkZEhUTUxBbGlnbm1lbnRUb1N0eWxlZEVsZW1l
bnQoU3R5bGVkRWxlbWVudCosIE1hcHBlZEF0dHJpYnV0ZSopOworcHJpdmF0ZToKKyAgICB2aXJ0
dWFsIGJvb2wgaXNIVE1MRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotcHJvdGVj
dGVkOgotICAgIHZvaWQgYWRkSFRNTEFsaWdubWVudChNYXBwZWRBdHRyaWJ1dGUqKTsKKyAgICB2
aXJ0dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0OworCisgICAgdm9pZCBzZXRDb250ZW50RWRp
dGFibGUoTWFwcGVkQXR0cmlidXRlKik7CiAKLXByaXZhdGU6CiAgICAgdmlydHVhbCBIVE1MRm9y
bUVsZW1lbnQqIHZpcnR1YWxGb3JtKCkgY29uc3Q7CisKICAgICBOb2RlKiBpbnNlcnRBZGphY2Vu
dChjb25zdCBTdHJpbmcmIHdoZXJlLCBOb2RlKiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYpOwog
fTsKIAoraW5saW5lIEhUTUxFbGVtZW50OjpIVE1MRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIENvbnN0cnVjdGlvblR5cGUgdHlwZSkKKyAg
ICA6IFN0eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIHR5cGUpCit7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEhUTUxFbGVtZW50X2gKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTEVtYmVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NDI4KQorKysgV2ViQ29yZS9odG1sL0hU
TUxFbWJlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgKDFTdGVpbkBnbXguZGUpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC00Miwx
NSArNDIsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwogCi1IVE1MRW1iZWRFbGVtZW50OjpIVE1MRW1iZWRFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCi0gICAgOiBIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50KHRhZ05hbWUsIGRvYykKK2lubGluZSBIVE1MRW1iZWRFbGVtZW50OjpIVE1MRW1iZWRFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKKyAg
ICA6IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCiAgICAgLCBtX25l
ZWRXaWRnZXRVcGRhdGUoZmFsc2UpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoZW1iZWRUYWcp
KTsKIH0KIAotSFRNTEVtYmVkRWxlbWVudDo6fkhUTUxFbWJlZEVsZW1lbnQoKQorUGFzc1JlZlB0
cjxIVE1MRW1iZWRFbGVtZW50PiBIVE1MRW1iZWRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogeworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSFRNTEVtYmVkRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiBzdGF0
aWMgaW5saW5lIFJlbmRlcldpZGdldCogZmluZFdpZGdldFJlbmRlcmVyKGNvbnN0IE5vZGUqIG4p
IApAQCAtMjM4LDMxICsyMzksMTEgQEAgY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTEVtYmVkRWxl
bWVudDo6aQogICAgIHJldHVybiBzcmNBdHRyOwogfQogCi1TdHJpbmcgSFRNTEVtYmVkRWxlbWVu
dDo6c3JjKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHNyY0F0dHIpOwotfQot
Ci12b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OnNldFNyYyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewot
ICAgIHNldEF0dHJpYnV0ZShzcmNBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MRW1iZWRF
bGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHR5cGVBdHRy
KTsKLX0KLQotdm9pZCBIVE1MRW1iZWRFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFs
dWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0KIHZvaWQgSFRN
TEVtYmVkRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtV
Ukw+JiB1cmxzKSBjb25zdAogewogICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmFkZFN1YnJl
c291cmNlQXR0cmlidXRlVVJMcyh1cmxzKTsKIAotICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMs
IGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHNyYygpKSk7CisgICAgYWRkU3VicmVzb3VyY2VVUkwo
dXJscywgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKHNyY0F0dHIpKSk7CiB9
CiAKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaAkocmV2aXNpb24gNDc0MjgpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3Jn
KQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5LDgg
KzI5LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTEVtYmVkRWxlbWVudCA6
IHB1YmxpYyBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxIVE1MRW1iZWRFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50Kik7CisKKyAgICB2b2lkIHNldE5lZWRXaWRnZXRVcGRhdGUoYm9vbCBuZWVkV2lkZ2V0
VXBkYXRlKSB7IG1fbmVlZFdpZGdldFVwZGF0ZSA9IG5lZWRXaWRnZXRVcGRhdGU7IH0KKworcHJp
dmF0ZToKICAgICBIVE1MRW1iZWRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCopOwotICAgIH5IVE1MRW1iZWRFbGVtZW50KCk7CiAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0
dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47
IH0KICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KQEAg
LTUwLDE5ICs1NCwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBRdWFsaWZpZWROYW1l
JiBpbWFnZVNvdXJjZUF0dHJpYnV0ZU5hbWUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVXaWRnZXQoKTsKLSAgICB2b2lkIHNldE5lZWRXaWRnZXRVcGRhdGUoYm9vbCBuZWVkV2lk
Z2V0VXBkYXRlKSB7IG1fbmVlZFdpZGdldFVwZGF0ZSA9IG5lZWRXaWRnZXRVcGRhdGU7IH0KIAog
ICAgIHZpcnR1YWwgUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29u
c3Q7CiAKLSAgICBTdHJpbmcgc3JjKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTcmMoY29uc3QgU3Ry
aW5nJik7Ci0KLSAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShjb25z
dCBTdHJpbmcmKTsKLQogICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVS
THMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdDsKIAotcHJpdmF0ZToKICAgICBib29sIG1fbmVl
ZFdpZGdldFVwZGF0ZTsKIH07CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDQ3NDI4KQorKysgV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTEZyYW1lRWxlbWVudDo6SFRNTEZyYW1lRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCitpbmxp
bmUgSFRNTEZyYW1lRWxlbWVudDo6SFRNTEZyYW1lRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBIVE1MRnJhbWVFbGVtZW50QmFz
ZSh0YWdOYW1lLCBkb2N1bWVudCkKICAgICAsIG1fZnJhbWVCb3JkZXIodHJ1ZSkKICAgICAsIG1f
ZnJhbWVCb3JkZXJTZXQoZmFsc2UpCkBAIC00Myw2ICs0MywxMSBAQCBIVE1MRnJhbWVFbGVtZW50
OjpIVE1MRnJhbWVFbGVtZW50KGNvbnN0CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoZnJhbWVUYWcp
KTsKIH0KIAorUGFzc1JlZlB0cjxIVE1MRnJhbWVFbGVtZW50PiBIVE1MRnJhbWVFbGVtZW50Ojpj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTEZyYW1lRWxlbWVudCh0YWdOYW1lLCBkb2N1
bWVudCkpOworfQorCiBib29sIEhUTUxGcmFtZUVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVu
ZGVyU3R5bGUqKQogewogICAgIC8vIEZvciBjb21wYXRpYmlsaXR5LCBmcmFtZXMgcmVuZGVyIGV2
ZW4gd2hlbiBkaXNwbGF5OiBub25lIGlzIHNldC4KQEAgLTU2LDkgKzYxLDEwIEBAIFJlbmRlck9i
amVjdCogSFRNTEZyYW1lRWxlbWVudDo6Y3JlYXRlUmUKIAogc3RhdGljIGlubGluZSBIVE1MRnJh
bWVTZXRFbGVtZW50KiBjb250YWluaW5nRnJhbWVTZXRFbGVtZW50KE5vZGUqIG5vZGUpCiB7Ci0g
ICAgd2hpbGUgKChub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSkKKyAgICB3aGlsZSAoKG5vZGUg
PSBub2RlLT5wYXJlbnROb2RlKCkpKSB7CiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGZy
YW1lc2V0VGFnKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRnJhbWVTZXRF
bGVtZW50Kj4obm9kZSk7CisgICAgfQogICAgIHJldHVybiAwOwogfQogCkBAIC03NCw3ICs4MCw3
IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudDo6YXR0YWNoKCkKICAgICB9CiB9CiAKLXZvaWQgSFRN
TEZyYW1lRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRy
KQordm9pZCBIVE1MRnJhbWVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUqIGF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBmcmFtZWJvcmRlckF0dHIp
IHsKICAgICAgICAgbV9mcmFtZUJvcmRlciA9IGF0dHItPnZhbHVlKCkudG9JbnQoKTsKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxGcmFtZUVsZW1lbnQuaAkocmV2aXNpb24gNDc0MjgpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTEZyYW1lRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMyArMjgsMTYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIFJlbmRlck9iamVj
dDsKLWNsYXNzIFJlbmRlckFyZW5hOwotY2xhc3MgUmVuZGVyU3R5bGU7Ci0KIGNsYXNzIEhUTUxG
cmFtZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEZyYW1lRWxlbWVudEJhc2UgewogcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxGcmFtZUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKKworICAgIGJvb2wgaGFzRnJhbWVCb3JkZXIoKSBjb25zdCB7
IHJldHVybiBtX2ZyYW1lQm9yZGVyOyB9CisKKyAgICBib29sIG5vUmVzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9ub1Jlc2l6ZTsgfQorICAgIHZvaWQgc2V0Tm9SZXNpemUoYm9vbCk7CisKK3ByaXZh
dGU6CiAgICAgSFRNTEZyYW1lRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
KTsKIAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQpAQCAtNDcsMTIgKzUwLDYgQEAgcHVibGlj
OgogICAgIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUqKTsKIAotICAgIGJvb2wgaGFzRnJhbWVCb3JkZXIoKSBjb25zdCB7IHJldHVybiBtX2Zy
YW1lQm9yZGVyOyB9Ci0KLSAgICBib29sIG5vUmVzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub1Jl
c2l6ZTsgfQotICAgIHZvaWQgc2V0Tm9SZXNpemUoYm9vbCk7Ci0KLXByaXZhdGU6CiAgICAgYm9v
bCBtX2ZyYW1lQm9yZGVyOwogICAgIGJvb2wgbV9mcmFtZUJvcmRlclNldDsKIApJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCShyZXZpc2lvbiA0NzQyOCkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3
ICsxOTcsNyBAQCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjphdHRhY2goKQogCiBLVVJMIEhU
TUxGcmFtZUVsZW1lbnRCYXNlOjpsb2NhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHNyYygp
OworICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoc3JjQXR0
cikpOwogfQogCiB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpzZXRMb2NhdGlvbihjb25zdCBT
dHJpbmcmIHN0cikKQEAgLTIyOSw3NiArMjI5LDYgQEAgYm9vbCBIVE1MRnJhbWVFbGVtZW50QmFz
ZTo6aXNVUkxBdHRyaWJ1dAogICAgIHJldHVybiBhdHRyLT5uYW1lKCkgPT0gc3JjQXR0cjsKIH0K
IAotU3RyaW5nIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpmcmFtZUJvcmRlcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZShmcmFtZWJvcmRlckF0dHIpOwotfQotCi12b2lkIEhUTUxG
cmFtZUVsZW1lbnRCYXNlOjpzZXRGcmFtZUJvcmRlcihjb25zdCBTdHJpbmcgJnZhbHVlKQotewot
ICAgIHNldEF0dHJpYnV0ZShmcmFtZWJvcmRlckF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhU
TUxGcmFtZUVsZW1lbnRCYXNlOjpsb25nRGVzYygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0
dHJpYnV0ZShsb25nZGVzY0F0dHIpOwotfQotCi12b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpz
ZXRMb25nRGVzYyhjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShsb25n
ZGVzY0F0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjptYXJn
aW5IZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobWFyZ2luaGVpZ2h0
QXR0cik7Ci19Ci0KLXZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OnNldE1hcmdpbkhlaWdodChj
b25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShtYXJnaW5oZWlnaHRBdHRy
LCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MRnJhbWVFbGVtZW50QmFzZTo6bWFyZ2luV2lkdGgo
KSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobWFyZ2lud2lkdGhBdHRyKTsKLX0K
LQotdm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0TWFyZ2luV2lkdGgoY29uc3QgU3RyaW5n
ICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobWFyZ2lud2lkdGhBdHRyLCB2YWx1ZSk7Ci19
Ci0KLVN0cmluZyBIVE1MRnJhbWVFbGVtZW50QmFzZTo6bmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZShuYW1lQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEZyYW1lRWxlbWVudEJh
c2U6OnNldE5hbWUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobmFt
ZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpzY3JvbGxp
bmcoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoc2Nyb2xsaW5nQXR0cik7Ci19
Ci0KLXZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OnNldFNjcm9sbGluZyhjb25zdCBTdHJpbmcg
JnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShzY3JvbGxpbmdBdHRyLCB2YWx1ZSk7Ci19Ci0K
LUtVUkwgSFRNTEZyYW1lRWxlbWVudEJhc2U6OnNyYygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShzcmNBdHRyKSk7Ci19Ci0KLXZvaWQg
SFRNTEZyYW1lRWxlbWVudEJhc2U6OnNldFNyYyhjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAg
IHNldEF0dHJpYnV0ZShzcmNBdHRyLCB2YWx1ZSk7Ci19Ci0KIGludCBIVE1MRnJhbWVFbGVtZW50
QmFzZTo6d2lkdGgoKSBjb25zdAogewogICAgIGlmICghcmVuZGVyZXIoKSkKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCShyZXZpc2lvbiA0NzQyOCkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw1NyArMzEsMzkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MRnJhbWVFbGVtZW50QmFzZSA6IHB1
YmxpYyBIVE1MRnJhbWVPd25lckVsZW1lbnQgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURv
Y3VtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0gICAgdmlydHVhbCBib29s
IGNhbkxhenlBdHRhY2goKSB7IHJldHVybiBmYWxzZTsgfQotCiAgICAgS1VSTCBsb2NhdGlvbigp
IGNvbnN0OwogICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgU3RyaW5nJik7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMo
Ym9vbCk7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSop
IGNvbnN0OwotCiAgICAgdmlydHVhbCBTY3JvbGxiYXJNb2RlIHNjcm9sbGluZ01vZGUoKSBjb25z
dCB7IHJldHVybiBtX3Njcm9sbGluZzsgfQogICAgIAogICAgIGludCBnZXRNYXJnaW5XaWR0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2luV2lkdGg7IH0KICAgICBpbnQgZ2V0TWFyZ2luSGVpZ2h0
KCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW5IZWlnaHQ7IH0KIAotICAgIFN0cmluZyBmcmFtZUJv
cmRlcigpIGNvbnN0OwotICAgIHZvaWQgc2V0RnJhbWVCb3JkZXIoY29uc3QgU3RyaW5nJik7Cisg
ICAgaW50IHdpZHRoKCkgY29uc3Q7CisgICAgaW50IGhlaWdodCgpIGNvbnN0OwogCi0gICAgU3Ry
aW5nIGxvbmdEZXNjKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRMb25nRGVzYyhjb25zdCBTdHJpbmcm
KTsKK3Byb3RlY3RlZDoKKyAgICBIVE1MRnJhbWVFbGVtZW50QmFzZShjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqKTsKIAotICAgIFN0cmluZyBtYXJnaW5IZWlnaHQoKSBjb25zdDsKLSAg
ICB2b2lkIHNldE1hcmdpbkhlaWdodChjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIGlzVVJMQWxs
b3dlZCgpIGNvbnN0OwogCi0gICAgU3RyaW5nIG1hcmdpbldpZHRoKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRNYXJnaW5XaWR0aChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAKLSAgICBTdHJpbmcgbmFtZSgpIGNv
bnN0OwotICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1
bWVudCgpOwogCi0gICAgU3RyaW5nIHNjcm9sbGluZygpIGNvbnN0OwotICAgIHZvaWQgc2V0U2Ny
b2xsaW5nKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKIAotICAg
IEtVUkwgc3JjKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTcmMoY29uc3QgU3RyaW5nJik7Citwcml2
YXRlOgorICAgIHZpcnR1YWwgYm9vbCBjYW5MYXp5QXR0YWNoKCkgeyByZXR1cm4gZmFsc2U7IH0K
IAotICAgIGludCB3aWR0aCgpIGNvbnN0OwotICAgIGludCBoZWlnaHQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9j
dXMoYm9vbCk7CisgICAgCisgICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0
ZSopIGNvbnN0OwogCiAgICAgYm9vbCB2aWV3U291cmNlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmlld1NvdXJjZTsgfQogCi1wcm90ZWN0ZWQ6Ci0gICAgSFRNTEZyYW1lRWxlbWVudEJhc2UoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7Ci0KLSAgICBib29sIGlzVVJMQWxsb3dlZCgp
IGNvbnN0OwogICAgIHZvaWQgc2V0TmFtZUFuZE9wZW5VUkwoKTsKICAgICB2b2lkIG9wZW5VUkwo
KTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAJKHJldmlzaW9u
IDQ3NDI4KQorKysgV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTMzLDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSFRNTEZyYW1l
T3duZXJFbGVtZW50OjpIVE1MRnJhbWVPd25lckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQotICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwg
ZG9jdW1lbnQpCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgQ3JlYXRlRWxl
bWVudCkKICAgICAsIG1fY29udGVudEZyYW1lKDApCiB7CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTEZyYW1lT3duZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxG
cmFtZU93bmVyRWxlbWVudC5oCShyZXZpc2lvbiA0NzQyOCkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
RnJhbWVPd25lckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcsMzYgKzI3LDM2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRE9NV2luZG93OwogY2xhc3MgRnJhbWU7Ci1jbGFzcyBL
ZXlib2FyZEV2ZW50OwogCiAjaWYgRU5BQkxFKFNWRykKIGNsYXNzIFNWR0RvY3VtZW50OwogI2Vu
ZGlmCiAKIGNsYXNzIEhUTUxGcmFtZU93bmVyRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7
Ci1wcm90ZWN0ZWQ6Ci0gICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50Kik7Ci0KIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5IVE1MRnJh
bWVPd25lckVsZW1lbnQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlKCk7Ci0KICAg
ICBGcmFtZSogY29udGVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50RnJhbWU7IH0K
ICAgICBET01XaW5kb3cqIGNvbnRlbnRXaW5kb3coKSBjb25zdDsKICAgICBEb2N1bWVudCogY29u
dGVudERvY3VtZW50KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNGcmFtZU93bmVyRWxl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2Fy
ZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3QgeyByZXR1cm4gbV9jb250ZW50RnJhbWU7
IH0KLSAgICAKLSAgICB2aXJ0dWFsIFNjcm9sbGJhck1vZGUgc2Nyb2xsaW5nTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIFNjcm9sbGJhckF1dG87IH0KLQogI2lmIEVOQUJMRShTVkcpCiAgICAgU1ZHRG9j
dW1lbnQqIGdldFNWR0RvY3VtZW50KEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICNlbmRpZgogCisg
ICAgdmlydHVhbCBTY3JvbGxiYXJNb2RlIHNjcm9sbGluZ01vZGUoKSBjb25zdCB7IHJldHVybiBT
Y3JvbGxiYXJBdXRvOyB9CisKK3Byb3RlY3RlZDoKKyAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKKwogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgRnJhbWU7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNGcmFtZU93bmVyRWxl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2Fy
ZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3QgeyByZXR1cm4gbV9jb250ZW50RnJhbWU7
IH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZSgpOworCiAgICAgRnJhbWUqIG1f
Y29udGVudEZyYW1lOwogfTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA0NzQyOCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxJRnJhbWVFbGVtZW50OjpIVE1MSUZyYW1l
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQp
CitpbmxpbmUgSFRNTElGcmFtZUVsZW1lbnQ6OkhUTUxJRnJhbWVFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKICAgICA6IEhUTUxGcmFtZUVs
ZW1lbnRCYXNlKHRhZ05hbWUsIGRvY3VtZW50KQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGlm
cmFtZVRhZykpOwogfQogCitQYXNzUmVmUHRyPEhUTUxJRnJhbWVFbGVtZW50PiBIVE1MSUZyYW1l
RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBk
b2N1bWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxJRnJhbWVFbGVtZW50KHRh
Z05hbWUsIGRvY3VtZW50KSk7Cit9CisKIGJvb2wgSFRNTElGcmFtZUVsZW1lbnQ6Om1hcFRvRW50
cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiBy
ZXN1bHQpIGNvbnN0CiB7CiAgICAgaWYgKGF0dHJOYW1lID09IHdpZHRoQXR0ciB8fCBhdHRyTmFt
ZSA9PSBoZWlnaHRBdHRyKSB7CkBAIC0xMjYsMzQgKzEzMSw0IEBAIGJvb2wgSFRNTElGcmFtZUVs
ZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEEKICAgICByZXR1cm4gYXR0ci0+bmFtZSgpID09IHNyY0F0
dHI7CiB9CiAKLVN0cmluZyBIVE1MSUZyYW1lRWxlbWVudDo6YWxpZ24oKSBjb25zdAotewotICAg
IHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsKLX0KLQotdm9pZCBIVE1MSUZyYW1lRWxl
bWVudDo6c2V0QWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUo
YWxpZ25BdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MSUZyYW1lRWxlbWVudDo6aGVpZ2h0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGhlaWdodEF0dHIpOwotfQotCi12
b2lkIEhUTUxJRnJhbWVFbGVtZW50OjpzZXRIZWlnaHQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsK
LSAgICBzZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTElG
cmFtZUVsZW1lbnQ6OndpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHdp
ZHRoQXR0cik7Ci19Ci0KLXZvaWQgSFRNTElGcmFtZUVsZW1lbnQ6OnNldFdpZHRoKGNvbnN0IFN0
cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgdmFsdWUpOwotfQot
CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuaAkocmV2aXNpb24gNDc0MjgpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsy
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQog
ICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQog
ICogICAgICAgICAgIChDKSAyMDAwIFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMwLDYgKzMw
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MSUZyYW1lRWxlbWVudCA6IHB1
YmxpYyBIVE1MRnJhbWVFbGVtZW50QmFzZSB7CiBwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SFRNTElGcmFtZUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqKTsKKworcHJpdmF0ZToKICAgICBIVE1MSUZyYW1lRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1
aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CkBAIC00OCwxNiAr
NTEsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0
dHJpYnV0ZSopIGNvbnN0OwogCi0gICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRBbGlnbihjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBoZWlnaHQoKSBjb25zdDsKLSAg
ICB2b2lkIHNldEhlaWdodChjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyB3aWR0aCgpIGNv
bnN0OwotICAgIHZvaWQgc2V0V2lkdGgoY29uc3QgU3RyaW5nJik7Ci0KLXByaXZhdGU6CiAgICAg
QXRvbWljU3RyaW5nIG1fbmFtZTsKIH07CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50
LmNwcAkocmV2aXNpb24gNDc0MjgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU3RlZmFu
IFNjaGltYW5za2kgKDFTdGVpbkBnbXguZGUpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC00NSw4ICs0
NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IAotSFRNTE9iamVjdEVsZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKSAKLSAgICA6
IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQodGFnTmFtZSwgZG9jKQoraW5saW5lIEhUTUxPYmplY3RF
bGVtZW50OjpIVE1MT2JqZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKSAKKyAgICA6IEhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCiAgICAgLCBtX2RvY05hbWVkSXRlbSh0
cnVlKQogICAgICwgbV9uZWVkV2lkZ2V0VXBkYXRlKCFjcmVhdGVkQnlQYXJzZXIpCiAgICAgLCBt
X3VzZUZhbGxiYWNrQ29udGVudChmYWxzZSkKQEAgLTU0LDggKzU0LDkgQEAgSFRNTE9iamVjdEVs
ZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50KGNvbgogICAgIEFTU0VSVChoYXNUYWdOYW1lKG9iamVj
dFRhZykpOwogfQogCi1IVE1MT2JqZWN0RWxlbWVudDo6fkhUTUxPYmplY3RFbGVtZW50KCkKK1Bh
c3NSZWZQdHI8SFRNTE9iamVjdEVsZW1lbnQ+IEhUTUxPYmplY3RFbGVtZW50OjpjcmVhdGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGNyZWF0
ZWRCeVBhcnNlcikKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxPYmplY3RFbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIpKTsKIH0KIAogUmVuZGVyV2lkZ2V0
KiBIVE1MT2JqZWN0RWxlbWVudDo6cmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygpIGNvbnN0CkBA
IC0yOTcsNjYgKzI5OCw2IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVk
SXQKICAgICBtX2RvY05hbWVkSXRlbSA9IGlzTmFtZWRJdGVtOwogfQogCi1TdHJpbmcgSFRNTE9i
amVjdEVsZW1lbnQ6OmNvZGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY29k
ZUF0dHIpOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRDb2RlKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNvZGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0
cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6YXJjaGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShhcmNoaXZlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNl
dEFyY2hpdmUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYXJjaGl2
ZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxPYmplY3RFbGVtZW50Ojpib3JkZXIoKSBj
b25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYm9yZGVyQXR0cik7Ci19Ci0KLXZvaWQg
SFRNTE9iamVjdEVsZW1lbnQ6OnNldEJvcmRlcihjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAg
IHNldEF0dHJpYnV0ZShib3JkZXJBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MT2JqZWN0
RWxlbWVudDo6Y29kZUJhc2UoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY29k
ZWJhc2VBdHRyKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0Q29kZUJhc2UoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29kZWJhc2VBdHRyLCB2YWx1
ZSk7Ci19Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6Y29kZVR5cGUoKSBjb25zdAotewot
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY29kZXR5cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MT2Jq
ZWN0RWxlbWVudDo6c2V0Q29kZVR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRB
dHRyaWJ1dGUoY29kZXR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLUtVUkwgSFRNTE9iamVjdEVsZW1l
bnQ6OmRhdGEoKSBjb25zdAotewotICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChn
ZXRBdHRyaWJ1dGUoZGF0YUF0dHIpKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0
RGF0YShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShkYXRhQXR0ciwg
dmFsdWUpOwotfQotCiBib29sIEhUTUxPYmplY3RFbGVtZW50OjpkZWNsYXJlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShkZWNsYXJlQXR0cikuaXNOdWxsKCk7CkBAIC0zNzcs
MzYgKzMxOCw2IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldEhzcGFjZShpbnQgdmEKICAg
ICBzZXRBdHRyaWJ1dGUoaHNwYWNlQXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKIH0KIAot
U3RyaW5nIEhUTUxPYmplY3RFbGVtZW50OjpzdGFuZGJ5KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKHN0YW5kYnlBdHRyKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6
c2V0U3RhbmRieShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShzdGFu
ZGJ5QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTE9iamVjdEVsZW1lbnQ6OnR5cGUoKSBj
b25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwotfQotCi12b2lkIEhU
TUxPYmplY3RFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0
QXR0cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVu
dDo6dXNlTWFwKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHVzZW1hcEF0dHIp
OwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRVc2VNYXAoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodXNlbWFwQXR0ciwgdmFsdWUpOwotfQotCiBpbnQg
SFRNTE9iamVjdEVsZW1lbnQ6OnZzcGFjZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJp
YnV0ZSh2c3BhY2VBdHRyKS50b0ludCgpOwpAQCAtNDE5LDIxICszMzAsMTkgQEAgdm9pZCBIVE1M
T2JqZWN0RWxlbWVudDo6c2V0VnNwYWNlKGludCB2YQogCiBib29sIEhUTUxPYmplY3RFbGVtZW50
Ojpjb250YWluc0phdmFBcHBsZXQoKSBjb25zdAogewotICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5
Ojppc0phdmFBcHBsZXRNSU1FVHlwZSh0eXBlKCkpKQorICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5
Ojppc0phdmFBcHBsZXRNSU1FVHlwZShnZXRBdHRyaWJ1dGUodHlwZUF0dHIpKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIAotICAgIE5vZGUqIGNoaWxkID0gZmlyc3RDaGlsZCgpOwot
ICAgIHdoaWxlIChjaGlsZCkgewotICAgICAgICBpZiAoY2hpbGQtPmlzRWxlbWVudE5vZGUoKSkg
ewotICAgICAgICAgICAgRWxlbWVudCogZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihjaGlsZCk7
Ci0gICAgICAgICAgICBpZiAoZS0+aGFzVGFnTmFtZShwYXJhbVRhZykgJiYgZXF1YWxJZ25vcmlu
Z0Nhc2UoZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSwgInR5cGUiKSAmJiBNSU1FVHlwZVJlZ2lz
dHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlwZShlLT5nZXRBdHRyaWJ1dGUodmFsdWVBdHRyKS5zdHJp
bmcoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBlbHNlIGlm
IChlLT5oYXNUYWdOYW1lKG9iamVjdFRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1l
bnQqPihlKS0+Y29udGFpbnNKYXZhQXBwbGV0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICBlbHNlIGlmIChlLT5oYXNUYWdOYW1lKGFwcGxldFRhZykpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKTsKKyAgICBmb3IgKEVsZW1lbnQqIGNoaWxkID0gZmlyc3RFbGVtZW50
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRFbGVtZW50U2libGluZygpKSB7Cisg
ICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShwYXJhbVRhZykKKyAgICAgICAgICAgICAgICAm
JiBlcXVhbElnbm9yaW5nQ2FzZShjaGlsZC0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSwgInR5cGUi
KQorICAgICAgICAgICAgICAgICYmIE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2YUFwcGxldE1JTUVU
eXBlKGNoaWxkLT5nZXRBdHRyaWJ1dGUodmFsdWVBdHRyKS5zdHJpbmcoKSkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKG9iamVjdFRhZykK
KyAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudCo+KGNoaWxk
KS0+Y29udGFpbnNKYXZhQXBwbGV0KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKGFwcGxldFRhZykpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDQzLDkgKzM1MiwxMCBA
QCB2b2lkIEhUTUxPYmplY3RFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0CiB7CiAgICAgSFRNTFBs
dWdJbkltYWdlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKHVybHMpOwogCi0g
ICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgZGF0YSgpKTsKLSAgICBpZiAodXNlTWFwKCkuc3Rh
cnRzV2l0aCgiIyIpKQotICAgICAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBkb2N1bWVudCgp
LT5jb21wbGV0ZVVSTCh1c2VNYXAoKSkpOworICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMsIGRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShkYXRhQXR0cikpKTsKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHVzZW1hcCA9IGdldEF0dHJpYnV0ZSh1c2VtYXBBdHRyKTsKKyAgICBp
ZiAodXNlbWFwLnN0YXJ0c1dpdGgoIiMiKSkKKyAgICAgICAgYWRkU3VicmVzb3VyY2VVUkwodXJs
cywgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXNlbWFwKSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MT2JqZWN0RWxlbWVudC5oCShyZXZpc2lvbiA0NzQyOCkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
T2JqZWN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAg
IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMxLDggKzMx
LDI5IEBAIGNsYXNzIEtVUkw7CiAKIGNsYXNzIEhUTUxPYmplY3RFbGVtZW50IDogcHVibGljIEhU
TUxQbHVnSW5JbWFnZUVsZW1lbnQgewogcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhU
TUxPYmplY3RFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kiwg
Ym9vbCBjcmVhdGVkQnlQYXJzZXIpOworCisgICAgdm9pZCBzZXROZWVkV2lkZ2V0VXBkYXRlKGJv
b2wgbmVlZFdpZGdldFVwZGF0ZSkgeyBtX25lZWRXaWRnZXRVcGRhdGUgPSBuZWVkV2lkZ2V0VXBk
YXRlOyB9CisKKyAgICB2b2lkIHJlbmRlckZhbGxiYWNrQ29udGVudCgpOworCisgICAgYm9vbCBk
ZWNsYXJlKCkgY29uc3Q7CisgICAgdm9pZCBzZXREZWNsYXJlKGJvb2wpOworCisgICAgaW50IGhz
cGFjZSgpIGNvbnN0OworICAgIHZvaWQgc2V0SHNwYWNlKGludCk7CisKKyAgICBpbnQgdnNwYWNl
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRWc3BhY2UoaW50KTsKKworICAgIGJvb2wgaXNEb2NOYW1l
ZEl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2RvY05hbWVkSXRlbTsgfQorCisgICAgY29uc3QgU3Ry
aW5nJiBjbGFzc0lkKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc0lkOyB9CisKKyAgICBib29sIGNv
bnRhaW5zSmF2YUFwcGxldCgpIGNvbnN0OworCitwcml2YXRlOgogICAgIEhUTUxPYmplY3RFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2Vy
KTsKLSAgICB+SFRNTE9iamVjdEVsZW1lbnQoKTsKIAogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9y
aXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCkBAIC01NCw1NyArNzUsMTEgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgY29uc3QgUXVhbGlmaWVkTmFtZSYgaW1hZ2VTb3VyY2VBdHRyaWJ1dGVOYW1l
KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlV2lkZ2V0KCk7Ci0gICAgdm9pZCBz
ZXROZWVkV2lkZ2V0VXBkYXRlKGJvb2wgbmVlZFdpZGdldFVwZGF0ZSkgeyBtX25lZWRXaWRnZXRV
cGRhdGUgPSBuZWVkV2lkZ2V0VXBkYXRlOyB9Ci0KLSAgICB2b2lkIHJlbmRlckZhbGxiYWNrQ29u
dGVudCgpOwogCiAgICAgdmlydHVhbCBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldEZvckpTQmlu
ZGluZ3MoKSBjb25zdDsKIAotICAgIFN0cmluZyBhcmNoaXZlKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRBcmNoaXZlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGJvcmRlcigpIGNvbnN0Owot
ICAgIHZvaWQgc2V0Qm9yZGVyKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGNvZGUoKSBj
b25zdDsKLSAgICB2b2lkIHNldENvZGUoY29uc3QgU3RyaW5nJik7Ci0gICAgCi0gICAgU3RyaW5n
IGNvZGVCYXNlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb2RlQmFzZShjb25zdCBTdHJpbmcmKTsK
LQotICAgIFN0cmluZyBjb2RlVHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29kZVR5cGUoY29u
c3QgU3RyaW5nJik7Ci0gICAgCi0gICAgS1VSTCBkYXRhKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRE
YXRhKGNvbnN0IFN0cmluZyYpOwotCi0gICAgYm9vbCBkZWNsYXJlKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXREZWNsYXJlKGJvb2wpOwotCi0gICAgaW50IGhzcGFjZSgpIGNvbnN0OwotICAgIHZvaWQg
c2V0SHNwYWNlKGludCk7Ci0KLSAgICBTdHJpbmcgc3RhbmRieSgpIGNvbnN0OwotICAgIHZvaWQg
c2V0U3RhbmRieShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIHVzZU1hcCgpIGNv
bnN0OwotICAgIHZvaWQgc2V0VXNlTWFwKGNvbnN0IFN0cmluZyYpOwotCi0gICAgaW50IHZzcGFj
ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VnNwYWNlKGludCk7Ci0KLSAgICBib29sIGlzRG9jTmFt
ZWRJdGVtKCkgY29uc3QgeyByZXR1cm4gbV9kb2NOYW1lZEl0ZW07IH0KLQotICAgIGNvbnN0IFN0
cmluZyYgY2xhc3NJZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3NJZDsgfQotCi0gICAgYm9vbCBj
b250YWluc0phdmFBcHBsZXQoKSBjb25zdDsKLQogICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNv
dXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdDsKIAotcHJpdmF0ZToK
ICAgICB2b2lkIHVwZGF0ZURvY05hbWVkSXRlbSgpOwogCiAgICAgQXRvbWljU3RyaW5nIG1faWQ7
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NDI4KQorKysg
V2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEs
MTYgKzkxLDYgQEAgUGFzc1NjcmlwdEluc3RhbmNlIEhUTUxQbHVnSW5FbGVtZW50OjpnZQogICAg
IHJldHVybiBtX2luc3RhbmNlOwogfQogCi1TdHJpbmcgSFRNTFBsdWdJbkVsZW1lbnQ6OmFsaWdu
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsaWduQXR0cik7Ci19Ci0KLXZv
aWQgSFRNTFBsdWdJbkVsZW1lbnQ6OnNldEFsaWduKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0g
ICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFsdWUpOwotfQotCiBTdHJpbmcgSFRNTFBsdWdJ
bkVsZW1lbnQ6OmhlaWdodCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShoZWln
aHRBdHRyKTsKQEAgLTExMSwxNiArMTAxLDYgQEAgdm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6c2V0
SGVpZ2h0KGNvbnN0IAogICAgIHNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCB2YWx1ZSk7CiB9CiAK
LVN0cmluZyBIVE1MUGx1Z0luRWxlbWVudDo6bmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShuYW1lQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OnNldE5h
bWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZh
bHVlKTsKLX0KLQogU3RyaW5nIEhUTUxQbHVnSW5FbGVtZW50Ojp3aWR0aCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOwpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxQbHVnSW5FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5F
bGVtZW50LmgJKHJldmlzaW9uIDQ3NDI4KQorKysgV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkg
QW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzYsNDMgKzM2LDQ0IEBAIGNs
YXNzIFJlbmRlcldpZGdldDsKIAogY2xhc3MgSFRNTFBsdWdJbkVsZW1lbnQgOiBwdWJsaWMgSFRN
TEZyYW1lT3duZXJFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MUGx1Z0luRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwogICAgIHZpcnR1YWwgfkhUTUxQ
bHVnSW5FbGVtZW50KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7
Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSop
OwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3Qg
eyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQo
Y29uc3QgTm9kZSogbmV3Q2hpbGQpOwotCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVdpZGdldCgp
IHsgfQotCi0gICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbGlnbihjb25z
dCBTdHJpbmcmKTsKLSAgICAKICAgICBTdHJpbmcgaGVpZ2h0KCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRIZWlnaHQoY29uc3QgU3RyaW5nJik7CiAgICAgCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdDsK
LSAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJik7Ci0gICAgCiAgICAgU3RyaW5nIHdpZHRo
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRXaWR0aChjb25zdCBTdHJpbmcmKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7Ci0KLSAgICB2aXJ0dWFsIFJlbmRl
cldpZGdldCogcmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZGV0YWNoKCk7CiAgICAgUGFzc1NjcmlwdEluc3RhbmNlIGdldEluc3RhbmNlKCkg
Y29uc3Q7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICB2aXJ0dWFsIE5Q
T2JqZWN0KiBnZXROUE9iamVjdCgpOworICAgIE5QT2JqZWN0KiBnZXROUE9iamVjdCgpOwogI2Vu
ZGlmCiAKIHByb3RlY3RlZDoKKyAgICBIVE1MUGx1Z0luRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOworCisgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwor
CiAgICAgc3RhdGljIHZvaWQgdXBkYXRlV2lkZ2V0Q2FsbGJhY2soTm9kZSopOwogCisgICAgdmly
dHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBl
ZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFs
IHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworCisgICAgdmlydHVhbCBSZW5kZXJX
aWRnZXQqIHJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0
dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdT
dGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKiBu
ZXdDaGlsZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlV2lkZ2V0KCkgeyB9CisKK3Byb3Rl
Y3RlZDoKICAgICBBdG9taWNTdHJpbmcgbV9uYW1lOworCitwcml2YXRlOgogICAgIG11dGFibGUg
U2NyaXB0SW5zdGFuY2UgbV9pbnN0YW5jZTsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKICAgICBOUE9iamVjdCogbV9OUE9iamVjdDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGx1
Z0luSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5J
bWFnZUVsZW1lbnQuaAkocmV2aXNpb24gNDc0MjgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFBsdWdJ
bkltYWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0zMCwxNSArMzAsMTYgQEAgY2xhc3MgSFRNTEltYWdlTG9hZGVy
OwogCiBjbGFzcyBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50IDogcHVibGljIEhUTUxQbHVnSW5FbGVt
ZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7CiAgICAgdmlydHVhbCB+SFRNTFBsdWdJbkltYWdl
RWxlbWVudCgpOwogCi0gICAgYm9vbCBpc0ltYWdlVHlwZSgpOwotCiAgICAgY29uc3QgU3RyaW5n
JiBzZXJ2aWNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VydmljZVR5cGU7IH0KICAgICBjb25z
dCBTdHJpbmcmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CiAKIHByb3RlY3RlZDoKKyAg
ICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50Kik7CisKKyAgICBib29sIGlzSW1hZ2VUeXBlKCk7CisKICAgICBPd25QdHI8SFRNTElt
YWdlTG9hZGVyPiBtX2ltYWdlTG9hZGVyOwogICAgIFN0cmluZyBtX3NlcnZpY2VUeXBlOwogICAg
IFN0cmluZyBtX3VybDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFnTmFtZXMuaW4KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWdOYW1lcy5pbgkocmV2aXNpb24gNDc0MjgpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTFRhZ05hbWVzLmluCSh3b3JraW5nIGNvcHkpCkBAIC04LDExNiAr
OCwxMTcgQEAgYWNyb255bSBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBhZGRyZXNzIGludGVy
ZmFjZU5hbWU9SFRNTEVsZW1lbnQKIGFwcGxldAogYXJlYQotYXVkaW8gd3JhcHBlck9ubHlJZk1l
ZGlhSXNBdmFpbGFibGUsY29uZGl0aW9uYWw9VklERU8KK2F1ZGlvIHdyYXBwZXJPbmx5SWZNZWRp
YUlzQXZhaWxhYmxlLCBjb25kaXRpb25hbD1WSURFTywgY3JlYXRlV2l0aE5ldwogYiBpbnRlcmZh
Y2VOYW1lPUhUTUxFbGVtZW50Ci1iYXNlCi1iYXNlZm9udCBpbnRlcmZhY2VOYW1lPUhUTUxCYXNl
Rm9udEVsZW1lbnQKK2Jhc2UgY3JlYXRlV2l0aE5ldworYmFzZWZvbnQgaW50ZXJmYWNlTmFtZT1I
VE1MQmFzZUZvbnRFbGVtZW50LCBjcmVhdGVXaXRoTmV3CiBiZG8gaW50ZXJmYWNlTmFtZT1IVE1M
RWxlbWVudAogYmlnIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLWJsb2NrcXVvdGUKLWJvZHkK
LWJyIGludGVyZmFjZU5hbWU9SFRNTEJSRWxlbWVudAotYnV0dG9uIGNvbnN0cnVjdG9yTmVlZHNG
b3JtRWxlbWVudAotY2FudmFzCi1jYXB0aW9uIGludGVyZmFjZU5hbWU9SFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnQKK2Jsb2NrcXVvdGUgY3JlYXRlV2l0aE5ldworYm9keSBjcmVhdGVXaXRoTmV3Citi
ciBpbnRlcmZhY2VOYW1lPUhUTUxCUkVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2J1dHRvbiBjb25z
dHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2NhbnZhcyBjcmVhdGVXaXRo
TmV3CitjYXB0aW9uIGludGVyZmFjZU5hbWU9SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQsIGNyZWF0
ZVdpdGhOZXcKIGNlbnRlciBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBjaXRlIGludGVyZmFj
ZU5hbWU9SFRNTEVsZW1lbnQKIGNvZGUgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAotY29sIGlu
dGVyZmFjZU5hbWU9SFRNTFRhYmxlQ29sRWxlbWVudAotY29sZ3JvdXAgaW50ZXJmYWNlTmFtZT1I
VE1MVGFibGVDb2xFbGVtZW50Ci1kYXRhZ3JpZCBpbnRlcmZhY2VOYW1lPUhUTUxEYXRhR3JpZEVs
ZW1lbnQsY29uZGl0aW9uYWw9REFUQUdSSUQKLWRhdGFsaXN0IGludGVyZmFjZU5hbWU9SFRNTERh
dGFMaXN0RWxlbWVudCxjb25kaXRpb25hbD1EQVRBTElTVAotZGNlbGwgaW50ZXJmYWNlTmFtZT1I
VE1MRGF0YUdyaWRDZWxsRWxlbWVudCxjb25kaXRpb25hbD1EQVRBR1JJRAotZGNvbCBpbnRlcmZh
Y2VOYW1lPUhUTUxEYXRhR3JpZENvbEVsZW1lbnQsY29uZGl0aW9uYWw9REFUQUdSSUQKLWRyb3cg
aW50ZXJmYWNlTmFtZT1IVE1MRGF0YUdyaWRSb3dFbGVtZW50LGNvbmRpdGlvbmFsPURBVEFHUklE
Citjb2wgaW50ZXJmYWNlTmFtZT1IVE1MVGFibGVDb2xFbGVtZW50LCBjcmVhdGVXaXRoTmV3Citj
b2xncm91cCBpbnRlcmZhY2VOYW1lPUhUTUxUYWJsZUNvbEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcK
K2RhdGFncmlkIGludGVyZmFjZU5hbWU9SFRNTERhdGFHcmlkRWxlbWVudCwgY29uZGl0aW9uYWw9
REFUQUdSSUQsIGNyZWF0ZVdpdGhOZXcKK2RhdGFsaXN0IGludGVyZmFjZU5hbWU9SFRNTERhdGFM
aXN0RWxlbWVudCwgY29uZGl0aW9uYWw9REFUQUxJU1QsIGNyZWF0ZVdpdGhOZXcKK2RjZWxsIGlu
dGVyZmFjZU5hbWU9SFRNTERhdGFHcmlkQ2VsbEVsZW1lbnQsIGNvbmRpdGlvbmFsPURBVEFHUklE
LCBjcmVhdGVXaXRoTmV3CitkY29sIGludGVyZmFjZU5hbWU9SFRNTERhdGFHcmlkQ29sRWxlbWVu
dCwgY29uZGl0aW9uYWw9REFUQUdSSUQsIGNyZWF0ZVdpdGhOZXcKK2Ryb3cgaW50ZXJmYWNlTmFt
ZT1IVE1MRGF0YUdyaWRSb3dFbGVtZW50LCBjb25kaXRpb25hbD1EQVRBR1JJRCwgY3JlYXRlV2l0
aE5ldwogZGQgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAotZGVsIGludGVyZmFjZU5hbWU9SFRN
TE1vZEVsZW1lbnQKK2RlbCBpbnRlcmZhY2VOYW1lPUhUTUxNb2RFbGVtZW50LCBjcmVhdGVXaXRo
TmV3CiBkZm4gaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAotZGlyIGludGVyZmFjZU5hbWU9SFRN
TERpcmVjdG9yeUVsZW1lbnQKLWRpdgotZGwgaW50ZXJmYWNlTmFtZT1IVE1MRExpc3RFbGVtZW50
CitkaXIgaW50ZXJmYWNlTmFtZT1IVE1MRGlyZWN0b3J5RWxlbWVudCwgY3JlYXRlV2l0aE5ldwor
ZGl2IGNyZWF0ZVdpdGhOZXcKK2RsIGludGVyZmFjZU5hbWU9SFRNTERMaXN0RWxlbWVudCwgY3Jl
YXRlV2l0aE5ldywgY3JlYXRlV2l0aE5ldwogZHQgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAog
ZW0gaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogZW1iZWQKLWZpZWxkc2V0IGludGVyZmFjZU5h
bWU9SFRNTEZpZWxkU2V0RWxlbWVudCwgY29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50Ci1mb250
Ci1mb3JtCitmaWVsZHNldCBpbnRlcmZhY2VOYW1lPUhUTUxGaWVsZFNldEVsZW1lbnQsIGNvbnN0
cnVjdG9yTmVlZHNGb3JtRWxlbWVudCwgY3JlYXRlV2l0aE5ldworZm9udCBjcmVhdGVXaXRoTmV3
Citmb3JtIGNyZWF0ZVdpdGhOZXcKIGZyYW1lCi1mcmFtZXNldCBpbnRlcmZhY2VOYW1lPUhUTUxG
cmFtZVNldEVsZW1lbnQKLWhlYWQKLWgxIGludGVyZmFjZU5hbWU9SFRNTEhlYWRpbmdFbGVtZW50
Ci1oMiBpbnRlcmZhY2VOYW1lPUhUTUxIZWFkaW5nRWxlbWVudAotaDMgaW50ZXJmYWNlTmFtZT1I
VE1MSGVhZGluZ0VsZW1lbnQKLWg0IGludGVyZmFjZU5hbWU9SFRNTEhlYWRpbmdFbGVtZW50Ci1o
NSBpbnRlcmZhY2VOYW1lPUhUTUxIZWFkaW5nRWxlbWVudAotaDYgaW50ZXJmYWNlTmFtZT1IVE1M
SGVhZGluZ0VsZW1lbnQKLWhyIGludGVyZmFjZU5hbWU9SFRNTEhSRWxlbWVudAotaHRtbAorZnJh
bWVzZXQgaW50ZXJmYWNlTmFtZT1IVE1MRnJhbWVTZXRFbGVtZW50LCBjcmVhdGVXaXRoTmV3Cito
MSBpbnRlcmZhY2VOYW1lPUhUTUxIZWFkaW5nRWxlbWVudCwgY3JlYXRlV2l0aE5ldworaDIgaW50
ZXJmYWNlTmFtZT1IVE1MSGVhZGluZ0VsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2gzIGludGVyZmFj
ZU5hbWU9SFRNTEhlYWRpbmdFbGVtZW50LCBjcmVhdGVXaXRoTmV3CitoNCBpbnRlcmZhY2VOYW1l
PUhUTUxIZWFkaW5nRWxlbWVudCwgY3JlYXRlV2l0aE5ldworaDUgaW50ZXJmYWNlTmFtZT1IVE1M
SGVhZGluZ0VsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2g2IGludGVyZmFjZU5hbWU9SFRNTEhlYWRp
bmdFbGVtZW50LCBjcmVhdGVXaXRoTmV3CitoZWFkIGNyZWF0ZVdpdGhOZXcKK2hyIGludGVyZmFj
ZU5hbWU9SFRNTEhSRWxlbWVudCwgY3JlYXRlV2l0aE5ldworaHRtbCBjcmVhdGVXaXRoTmV3CiBp
IGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKIGlmcmFtZSBpbnRlcmZhY2VOYW1lPUhUTUxJRnJh
bWVFbGVtZW50Ci1pbWFnZSBtYXBUb1RhZ05hbWU9aW1nCi1pbWcgaW50ZXJmYWNlTmFtZT1IVE1M
SW1hZ2VFbGVtZW50LCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQKLWlucHV0IGNvbnN0cnVj
dG9yTmVlZHNGb3JtRWxlbWVudAotaW5zIGludGVyZmFjZU5hbWU9SFRNTE1vZEVsZW1lbnQKLWlz
aW5kZXggaW50ZXJmYWNlTmFtZT1IVE1MSXNJbmRleEVsZW1lbnQsIGNvbnN0cnVjdG9yTmVlZHNG
b3JtRWxlbWVudAoraW1hZ2UgbWFwVG9UYWdOYW1lPWltZywgY3JlYXRlV2l0aE5ldworaW1nIGlu
dGVyZmFjZU5hbWU9SFRNTEltYWdlRWxlbWVudCwgY29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50
LCBjcmVhdGVXaXRoTmV3CitpbnB1dCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQsIGNyZWF0
ZVdpdGhOZXcKK2lucyBpbnRlcmZhY2VOYW1lPUhUTUxNb2RFbGVtZW50LCBjcmVhdGVXaXRoTmV3
Citpc2luZGV4IGludGVyZmFjZU5hbWU9SFRNTElzSW5kZXhFbGVtZW50LCBjb25zdHJ1Y3Rvck5l
ZWRzRm9ybUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKIGtiZCBpbnRlcmZhY2VOYW1lPUhUTUxFbGVt
ZW50Ci1rZXlnZW4gSlNJbnRlcmZhY2VOYW1lPUhUTUxTZWxlY3RFbGVtZW50LCBjb25zdHJ1Y3Rv
ck5lZWRzRm9ybUVsZW1lbnQKLWxhYmVsCitrZXlnZW4gSlNJbnRlcmZhY2VOYW1lPUhUTUxTZWxl
Y3RFbGVtZW50LCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2xh
YmVsIGNyZWF0ZVdpdGhOZXcKIGxheWVyIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLWxlZ2Vu
ZCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQKLWxpIGludGVyZmFjZU5hbWU9SFRNTExJRWxl
bWVudAotbGluayBjb25zdHJ1Y3Rvck5lZWRzQ3JlYXRlZEJ5UGFyc2VyCi1saXN0aW5nIGludGVy
ZmFjZU5hbWU9SFRNTFByZUVsZW1lbnQKLW1hcAotbWFycXVlZQotbWVudQotbWV0YQorbGVnZW5k
IGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudCwgY3JlYXRlV2l0aE5ldworbGkgaW50ZXJmYWNl
TmFtZT1IVE1MTElFbGVtZW50LCBjcmVhdGVXaXRoTmV3CitsaW5rIGNvbnN0cnVjdG9yTmVlZHND
cmVhdGVkQnlQYXJzZXIsIGNyZWF0ZVdpdGhOZXcKK2xpc3RpbmcgaW50ZXJmYWNlTmFtZT1IVE1M
UHJlRWxlbWVudCwgY3JlYXRlV2l0aE5ldworbWFwIGNyZWF0ZVdpdGhOZXcKK21hcnF1ZWUgY3Jl
YXRlV2l0aE5ldworbWVudSBjcmVhdGVXaXRoTmV3CittZXRhIGNyZWF0ZVdpdGhOZXcKIG5vYnIg
aW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogbm9lbWJlZCBpbnRlcmZhY2VOYW1lPUhUTUxFbGVt
ZW50CiBub2ZyYW1lcyBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBub2xheWVyIGludGVyZmFj
ZU5hbWU9SFRNTEVsZW1lbnQKLSNpZiBFTkFCTEVfWEhUTUxNUAotbm9zY3JpcHQgaW50ZXJmYWNl
TmFtZT1IVE1MTm9TY3JpcHRFbGVtZW50Ci0jZWxzZQotbm9zY3JpcHQgaW50ZXJmYWNlTmFtZT1I
VE1MRWxlbWVudAotI2VuZGlmCiBvYmplY3QgY29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNl
cgotb2wgaW50ZXJmYWNlTmFtZT1IVE1MT0xpc3RFbGVtZW50Ci1vcHRncm91cCBpbnRlcmZhY2VO
YW1lPUhUTUxPcHRHcm91cEVsZW1lbnQsIGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudAotb3B0
aW9uIGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudAotcCBpbnRlcmZhY2VOYW1lPUhUTUxQYXJh
Z3JhcGhFbGVtZW50Ci1wYXJhbQorb2wgaW50ZXJmYWNlTmFtZT1IVE1MT0xpc3RFbGVtZW50LCBj
cmVhdGVXaXRoTmV3CitvcHRncm91cCBpbnRlcmZhY2VOYW1lPUhUTUxPcHRHcm91cEVsZW1lbnQs
IGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudCwgY3JlYXRlV2l0aE5ldworb3B0aW9uIGNvbnN0
cnVjdG9yTmVlZHNGb3JtRWxlbWVudCwgY3JlYXRlV2l0aE5ldworcCBpbnRlcmZhY2VOYW1lPUhU
TUxQYXJhZ3JhcGhFbGVtZW50LCBjcmVhdGVXaXRoTmV3CitwYXJhbSBjcmVhdGVXaXRoTmV3CiBw
bGFpbnRleHQgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAotcHJlCi1xIGludGVyZmFjZU5hbWU9
SFRNTFF1b3RlRWxlbWVudAorcHJlIGNyZWF0ZVdpdGhOZXcKK3EgaW50ZXJmYWNlTmFtZT1IVE1M
UXVvdGVFbGVtZW50LCBjcmVhdGVXaXRoTmV3CiBycCBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50
CiBydCBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBydWJ5IGludGVyZmFjZU5hbWU9SFRNTEVs
ZW1lbnQKIHMgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogc2FtcCBpbnRlcmZhY2VOYW1lPUhU
TUxFbGVtZW50Ci1zY3JpcHQgY29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNlcgotc2VsZWN0
IGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudAorc2NyaXB0IGNvbnN0cnVjdG9yTmVlZHNDcmVh
dGVkQnlQYXJzZXIsIGNyZWF0ZVdpdGhOZXcKK3NlbGVjdCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVs
ZW1lbnQsIGNyZWF0ZVdpdGhOZXcKIHNtYWxsIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLXNv
dXJjZSB3cmFwcGVyT25seUlmTWVkaWFJc0F2YWlsYWJsZSxjb25kaXRpb25hbD1WSURFTworc291
cmNlIHdyYXBwZXJPbmx5SWZNZWRpYUlzQXZhaWxhYmxlLCBjb25kaXRpb25hbD1WSURFTywgY3Jl
YXRlV2l0aE5ldwogc3BhbiBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBzdHJpa2UgaW50ZXJm
YWNlTmFtZT1IVE1MRWxlbWVudAogc3Ryb25nIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLXN0
eWxlIGNvbnN0cnVjdG9yTmVlZHNDcmVhdGVkQnlQYXJzZXIKK3N0eWxlIGNvbnN0cnVjdG9yTmVl
ZHNDcmVhdGVkQnlQYXJzZXIsIGNyZWF0ZVdpdGhOZXcKIHN1YiBpbnRlcmZhY2VOYW1lPUhUTUxF
bGVtZW50CiBzdXAgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAotdGFibGUKLXRib2R5IGludGVy
ZmFjZU5hbWU9SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKLXRkIGludGVyZmFjZU5hbWU9SFRNTFRh
YmxlQ2VsbEVsZW1lbnQKLXRleHRhcmVhIGludGVyZmFjZU5hbWU9SFRNTFRleHRBcmVhRWxlbWVu
dCwgY29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50Ci10Zm9vdCBpbnRlcmZhY2VOYW1lPUhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50Ci10aCBpbnRlcmZhY2VOYW1lPUhUTUxUYWJsZUNlbGxFbGVtZW50
Ci10aGVhZCBpbnRlcmZhY2VOYW1lPUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Ci10aXRsZQotdHIg
aW50ZXJmYWNlTmFtZT1IVE1MVGFibGVSb3dFbGVtZW50Cit0YWJsZSBjcmVhdGVXaXRoTmV3Cit0
Ym9keSBpbnRlcmZhY2VOYW1lPUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LCBjcmVhdGVXaXRoTmV3
Cit0ZCBpbnRlcmZhY2VOYW1lPUhUTUxUYWJsZUNlbGxFbGVtZW50LCBjcmVhdGVXaXRoTmV3Cit0
ZXh0YXJlYSBpbnRlcmZhY2VOYW1lPUhUTUxUZXh0QXJlYUVsZW1lbnQsIGNvbnN0cnVjdG9yTmVl
ZHNGb3JtRWxlbWVudCwgY3JlYXRlV2l0aE5ldwordGZvb3QgaW50ZXJmYWNlTmFtZT1IVE1MVGFi
bGVTZWN0aW9uRWxlbWVudCwgY3JlYXRlV2l0aE5ldwordGggaW50ZXJmYWNlTmFtZT1IVE1MVGFi
bGVDZWxsRWxlbWVudCwgY3JlYXRlV2l0aE5ldwordGhlYWQgaW50ZXJmYWNlTmFtZT1IVE1MVGFi
bGVTZWN0aW9uRWxlbWVudCwgY3JlYXRlV2l0aE5ldwordGl0bGUgY3JlYXRlV2l0aE5ldwordHIg
aW50ZXJmYWNlTmFtZT1IVE1MVGFibGVSb3dFbGVtZW50LCBjcmVhdGVXaXRoTmV3CiB0dCBpbnRl
cmZhY2VOYW1lPUhUTUxFbGVtZW50CiB1IGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLXVsIGlu
dGVyZmFjZU5hbWU9SFRNTFVMaXN0RWxlbWVudAordWwgaW50ZXJmYWNlTmFtZT1IVE1MVUxpc3RF
bGVtZW50LCBjcmVhdGVXaXRoTmV3CiB2YXIgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAotdmlk
ZW8gd3JhcHBlck9ubHlJZk1lZGlhSXNBdmFpbGFibGUsY29uZGl0aW9uYWw9VklERU8KK3ZpZGVv
IHdyYXBwZXJPbmx5SWZNZWRpYUlzQXZhaWxhYmxlLCBjb25kaXRpb25hbD1WSURFTywgY3JlYXRl
V2l0aE5ldwogd2JyIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLXhtcCBpbnRlcmZhY2VOYW1l
PUhUTUxQcmVFbGVtZW50Cit4bXAgaW50ZXJmYWNlTmFtZT1IVE1MUHJlRWxlbWVudCwgY3JlYXRl
V2l0aE5ldworCisjaWYgRU5BQkxFX1hIVE1MTVAKK25vc2NyaXB0IGludGVyZmFjZU5hbWU9SFRN
TE5vU2NyaXB0RWxlbWVudCwgY3JlYXRlV2l0aE5ldworI2Vsc2UKK25vc2NyaXB0IGludGVyZmFj
ZU5hbWU9SFRNTEVsZW1lbnQKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxWaWV3U291
cmNlRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJj
ZURvY3VtZW50LmNwcAkocmV2aXNpb24gNDc0MjgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFZpZXdT
b3VyY2VEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw3ICsyMDksNyBAQCBQYXNz
UmVmUHRyPEVsZW1lbnQ+IEhUTUxWaWV3U291cmNlRG9jdW1lCiAgICAgICAgIHJldHVybiBtX2N1
cnJlbnQ7CiAgICAgfQogCi0gICAgUmVmUHRyPEhUTUxFbGVtZW50PiBzcGFuID0gbmV3IEhUTUxF
bGVtZW50KHNwYW5UYWcsIHRoaXMpOworICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gc3BhbiA9IEhU
TUxFbGVtZW50OjpjcmVhdGUoc3BhblRhZywgdGhpcyk7CiAgICAgUmVmUHRyPE5hbWVkTWFwcGVk
QXR0ck1hcD4gYXR0cnMgPSBOYW1lZE1hcHBlZEF0dHJNYXA6OmNyZWF0ZSgpOwogICAgIGF0dHJz
LT5hZGRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlOjpjcmVhdGUoY2xhc3NBdHRyLCBjbGFzc05h
bWUpKTsKICAgICBzcGFuLT5zZXRBdHRyaWJ1dGVNYXAoYXR0cnMucmVsZWFzZSgpKTsKQEAgLTI5
Miw3ICsyOTIsNyBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxWaWV3U291cmNlRG9jdW1lCiAg
ICAgICAgIGFkZExpbmUoIndlYmtpdC1odG1sLXRhZyIpOwogICAgIAogICAgIC8vIE5vdyBjcmVh
dGUgYSBsaW5rIGZvciB0aGUgYXR0cmlidXRlIHZhbHVlIGluc3RlYWQgb2YgYSBzcGFuLgotICAg
IFJlZlB0cjxIVE1MQW5jaG9yRWxlbWVudD4gYW5jaG9yID0gbmV3IEhUTUxBbmNob3JFbGVtZW50
KHRoaXMpOworICAgIFJlZlB0cjxIVE1MQW5jaG9yRWxlbWVudD4gYW5jaG9yID0gSFRNTEFuY2hv
ckVsZW1lbnQ6OmNyZWF0ZSh0aGlzKTsKICAgICBSZWZQdHI8TmFtZWRNYXBwZWRBdHRyTWFwPiBh
dHRycyA9IE5hbWVkTWFwcGVkQXR0ck1hcDo6Y3JlYXRlKCk7CiAgICAgY29uc3QgY2hhciogY2xh
c3NWYWx1ZTsKICAgICBpZiAoaXNBbmNob3IpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9NZWRpYURv
Y3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9NZWRpYURvY3VtZW50LmNw
cAkocmV2aXNpb24gNDc0MjgpCisrKyBXZWJDb3JlL2xvYWRlci9NZWRpYURvY3VtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjI2LDggKzIyNiw4IEBAIHZvaWQgTWVkaWFEb2N1bWVudDo6cmVw
bGFjZU1lZGlhRWxlbWVudFQKICAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUod2lk
dGhBdHRyLCAiMTAwJSIpOwogICAgICAgICBlbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZShoZWln
aHRBdHRyLCAiMTAwJSIpOwogICAgICAgICBlbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZShuYW1l
QXR0ciwgInBsdWdpbiIpOwotICAgICAgICBlbWJlZEVsZW1lbnQtPnNldFNyYyh1cmwoKS5zdHJp
bmcoKSk7Ci0gICAgICAgIGVtYmVkRWxlbWVudC0+c2V0VHlwZShmcmFtZSgpLT5sb2FkZXIoKS0+
cmVzcG9uc2VNSU1FVHlwZSgpKTsKKyAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUo
c3JjQXR0ciwgdXJsKCkuc3RyaW5nKCkpOworICAgICAgICBlbWJlZEVsZW1lbnQtPnNldEF0dHJp
YnV0ZSh0eXBlQXR0ciwgZnJhbWUoKS0+bG9hZGVyKCktPnJlc3BvbnNlTUlNRVR5cGUoKSk7CiAK
ICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICAgICAgdmlkZW9FbGVtZW50LT5wYXJlbnQo
KS0+cmVwbGFjZUNoaWxkKGVtYmVkRWxlbWVudCwgdmlkZW9FbGVtZW50LCBlYyk7CkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA0NzQyOCkKKysrIFdlYkNvcmUvbG9h
ZGVyL1BsdWdpbkRvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsOCArODgsOCBAQCB2
b2lkIFBsdWdpblRva2VuaXplcjo6Y3JlYXRlRG9jdW1lbnRTdHJ1CiAgICAgbV9lbWJlZEVsZW1l
bnQtPnNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCAiMTAwJSIpOwogICAgIAogICAgIG1fZW1iZWRF
bGVtZW50LT5zZXRBdHRyaWJ1dGUobmFtZUF0dHIsICJwbHVnaW4iKTsKLSAgICBtX2VtYmVkRWxl
bWVudC0+c2V0U3JjKG1fZG9jLT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgbV9lbWJlZEVsZW1lbnQt
PnNldFR5cGUobV9kb2MtPmZyYW1lKCktPmxvYWRlcigpLT5yZXNwb25zZU1JTUVUeXBlKCkpOwor
ICAgIG1fZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3JjQXR0ciwgbV9kb2MtPnVybCgpLnN0
cmluZygpKTsKKyAgICBtX2VtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKHR5cGVBdHRyLCBtX2Rv
Yy0+ZnJhbWUoKS0+bG9hZGVyKCktPnJlc3BvbnNlTUlNRVR5cGUoKSk7CiAgICAgCiAgICAgYm9k
eS0+YXBwZW5kQ2hpbGQoZW1iZWRFbGVtZW50LCBlYyk7ICAgIAogfQpJbmRleDogV2ViQ29yZS9w
YWdlL0RyYWdDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiA0NzQyOCkKKysrIFdlYkNvcmUvcGFnZS9EcmFnQ29udHJv
bGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBzdGF0aWMgUGFzc1Jl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1CiAgICAgICAgICAgICBTdHJpbmcgdGl0bGU7CiAg
ICAgICAgICAgICBTdHJpbmcgdXJsID0gZHJhZ0RhdGEtPmFzVVJMKCZ0aXRsZSk7CiAgICAgICAg
ICAgICBpZiAoIXVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SFRNTEFu
Y2hvckVsZW1lbnQ+IGFuY2hvciA9IG5ldyBIVE1MQW5jaG9yRWxlbWVudChkb2N1bWVudCk7Cisg
ICAgICAgICAgICAgICAgUmVmUHRyPEhUTUxBbmNob3JFbGVtZW50PiBhbmNob3IgPSBIVE1MQW5j
aG9yRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKICAgICAgICAgICAgICAgICBhbmNob3ItPnNl
dEhyZWYodXJsKTsKICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgICAgICAg
ICAgICAgIFJlZlB0cjxOb2RlPiBhbmNob3JUZXh0ID0gZG9jdW1lbnQtPmNyZWF0ZVRleHROb2Rl
KHRpdGxlKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwCShyZXZp
c2lvbiA0NzQyOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yODIsNyArMjgyLDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1
cGRhdGVXaWRnZXQoYm9vbAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIGJvb2wgc3VjY2VzcyA9IGZyYW1lLT5sb2FkZXIoKS0+cmVxdWVzdE9iamVjdCh0aGlz
LCB1cmwsIEF0b21pY1N0cmluZyhvLT5uYW1lKCkpLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywg
cGFyYW1WYWx1ZXMpOworICAgICAgICBib29sIHN1Y2Nlc3MgPSBmcmFtZS0+bG9hZGVyKCktPnJl
cXVlc3RPYmplY3QodGhpcywgdXJsLCBvLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpLCBzZXJ2aWNl
VHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOwogICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYg
bV9oYXNGYWxsYmFja0NvbnRlbnQpCiAgICAgICAgICAgICBvLT5yZW5kZXJGYWxsYmFja0NvbnRl
bnQoKTsKICAgICB9IGVsc2UgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShlbWJlZFRhZykpIHsKSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Zn
L1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiA0NzQyOCkKKysrIFdlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNCArNTEsMTkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1TVkdFbGVtZW50OjpTVkdFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCi0gICAgOiBT
dHlsZWRFbGVtZW50KHRhZ05hbWUsIGRvYykKK1NWR0VsZW1lbnQ6OlNWR0VsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogU3R5bGVk
RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgQ3JlYXRlRWxlbWVudFplcm9SZWZDb3VudCkKICAg
ICAsIG1fc2hhZG93UGFyZW50KDApCiAgICAgLCBtX2N1cnNvckVsZW1lbnQoMCkKICAgICAsIG1f
Y3Vyc29ySW1hZ2VWYWx1ZSgwKQogewogfQogCitQYXNzUmVmUHRyPFNWR0VsZW1lbnQ+IFNWR0Vs
ZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
dW1lbnQpCit7CisgICAgcmV0dXJuIG5ldyBTVkdFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsK
K30KKwogU1ZHRWxlbWVudDo6flNWR0VsZW1lbnQoKQogewogICAgIGlmIChtX2N1cnNvckVsZW1l
bnQpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5oCShyZXZpc2lvbiA0NzQyOCkKKysrIFdlYkNvcmUvc3ZnL1NWR0Vs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDcgQEAKIC8qCiAgICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgogICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0
CisgICAgQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsMjUgKzI1LDIyIEBACiAjaWYgRU5BQkxFKFNWRykK
ICNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0
eS5oIgotI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAg
IGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwogICAgIGNsYXNzIENTU0N1cnNvckltYWdlVmFs
dWU7CiAgICAgY2xhc3MgRG9jdW1lbnQ7CiAgICAgY2xhc3MgU1ZHQ3Vyc29yRWxlbWVudDsKICAg
ICBjbGFzcyBTVkdEb2N1bWVudEV4dGVuc2lvbnM7CiAgICAgY2xhc3MgU1ZHRWxlbWVudEluc3Rh
bmNlOwogICAgIGNsYXNzIFNWR1NWR0VsZW1lbnQ7CisgICAgY2xhc3MgVHJhbnNmb3JtYXRpb25N
YXRyaXg7CiAKICAgICBjbGFzcyBTVkdFbGVtZW50IDogcHVibGljIFN0eWxlZEVsZW1lbnQgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgU1ZHRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHRWxlbWVudD4gY3JlYXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgICAgICB2aXJ0dWFsIH5TVkdFbGVt
ZW50KCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1NWR0VsZW1lbnQoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1N1cHBvcnRlZChTdHJpbmdJbXBsKiBm
ZWF0dXJlLCBTdHJpbmdJbXBsKiB2ZXJzaW9uKSBjb25zdDsKLSAgICAgICAgCisKICAgICAgICAg
U3RyaW5nIGlkKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0SWQoY29uc3QgU3RyaW5nJiwgRXhj
ZXB0aW9uQ29kZSYpOwogICAgICAgICBTdHJpbmcgeG1sYmFzZSgpIGNvbnN0OwpAQCAtNTIsNiAr
NDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgU1ZHU1ZHRWxlbWVudCogb3du
ZXJTVkdFbGVtZW50KCkgY29uc3Q7CiAgICAgICAgIFNWR0VsZW1lbnQqIHZpZXdwb3J0RWxlbWVu
dCgpIGNvbnN0OworCiAgICAgICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogYWNjZXNzRG9jdW1l
bnRTVkdFeHRlbnNpb25zKCkgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwpAQCAtNjQsMzMgKzYxLDUzIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzR3JhZGllbnRTdG9wKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzVGV4dENvbnRlbnQo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1NoYWRv
d05vZGUoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd1BhcmVudDsgfQotICAgICAgICB2aXJ0dWFs
IE5vZGUqIHNoYWRvd1BhcmVudE5vZGUoKSB7IHJldHVybiBtX3NoYWRvd1BhcmVudDsgfQogICAg
ICAgICB2b2lkIHNldFNoYWRvd1BhcmVudE5vZGUoQ29udGFpbmVyTm9kZSogbm9kZSkgeyBtX3No
YWRvd1BhcmVudCA9IG5vZGU7IH0KLSAgICAgICAgdmlydHVhbCBDb250YWluZXJOb2RlKiBldmVu
dFBhcmVudE5vZGUoKTsKIAogICAgICAgICAvLyBGb3IgU1ZHVGVzdHMKICAgICAgICAgdmlydHVh
bCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisKICAgICAgICAgdmlydHVhbCBib29s
IHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAg
ICB2aXJ0dWFsIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlKikgY29uc3Q7CiAK
LSAgICAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBidWlsZFBlbmRpbmdSZXNvdXJjZSgpIHsgfQotCiAgICAgICAgIHZpcnR1YWwg
dm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSB7IH0KLSAgICAg
ICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwgYm9vbCBwcmVzZXJ2
ZURlY2xzID0gZmFsc2UpOwogCiAgICAgICAgIHZvaWQgc2VuZFNWR0xvYWRFdmVudElmUG9zc2li
bGUoYm9vbCBzZW5kUGFyZW50TG9hZEV2ZW50cyA9IGZhbHNlKTsKICAgICAgICAgCiAgICAgICAg
IHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXgqIHN1cHBsZW1lbnRhbFRyYW5zZm9ybSgpIHsg
cmV0dXJuIDA7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0ZWRTVkdBdHRy
aWJ1dGUoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRTeW5j
aHJvbml6ZWRTVkdBdHRyaWJ1dGVzKGJvb2wpIGNvbnN0OwogCiAgICAgICAgIEhhc2hTZXQ8U1ZH
RWxlbWVudEluc3RhbmNlKj4gaW5zdGFuY2VzRm9yRWxlbWVudCgpIGNvbnN0OwotIAorCisgICAg
ICAgIHZvaWQgYWRkU1ZHUHJvcGVydHlTeW5jaHJvbml6ZXIoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUsIGNvbnN0IFNWR0FuaW1hdGVkUHJvcGVydHlCYXNlJiBiYXNlKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICBtX3N2Z1Byb3BlcnR5TWFwLnNldChhdHRyTmFtZS5sb2NhbE5h
bWUoKSwgJmJhc2UpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRDdXJzb3JFbGVtZW50
KFNWR0N1cnNvckVsZW1lbnQqIGN1cnNvckVsZW1lbnQpIHsgbV9jdXJzb3JFbGVtZW50ID0gY3Vy
c29yRWxlbWVudDsgfQorICAgICAgICB2b2lkIHNldEN1cnNvckltYWdlVmFsdWUoQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZSogY3Vyc29ySW1hZ2VWYWx1ZSkgeyBtX2N1cnNvckltYWdlVmFsdWUgPSBjdXJz
b3JJbWFnZVZhbHVlOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFNWR0VsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGZp
bmlzaFBhcnNpbmdDaGlsZHJlbigpOworICAgICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRv
RG9jdW1lbnQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmli
dXRlKiwgYm9vbCBwcmVzZXJ2ZURlY2xzID0gZmFsc2UpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQW5pbWF0ZWRTVkdBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJikgY29uc3Q7CisKKyAgICBw
cml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgU1ZHRWxlbWVudEluc3RhbmNlOworCisgICAg
ICAgIHZpcnR1YWwgYm9vbCBpc1NWR0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisK
KyAgICAgICAgdmlydHVhbCBib29sIGlzU3VwcG9ydGVkKFN0cmluZ0ltcGwqIGZlYXR1cmUsIFN0
cmluZ0ltcGwqIHZlcnNpb24pIGNvbnN0OworICAgICAgICAKKyAgICAgICAgdmlydHVhbCBib29s
IGlzU2hhZG93Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93UGFyZW50OyB9CisgICAgICAg
IHZpcnR1YWwgTm9kZSogc2hhZG93UGFyZW50Tm9kZSgpIHsgcmV0dXJuIG1fc2hhZG93UGFyZW50
OyB9CisgICAgICAgIHZpcnR1YWwgQ29udGFpbmVyTm9kZSogZXZlbnRQYXJlbnROb2RlKCk7CisK
KyAgICAgICAgdmlydHVhbCB2b2lkIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCkgeyB9CisKICAgICAg
ICAgLy8gSW5saW5lZCBtZXRob2RzIGhhbmRsaW5nIFNWRyBwcm9wZXJ0eSBzeW5jaHJvbml6YXRp
b24KICAgICAgICAgdm9pZCBpbnZva2VTVkdQcm9wZXJ0eVN5bmNocm9uaXplcihjb25zdCBTdHJp
bmcmIG5hbWUpIGNvbnN0CiAgICAgICAgIHsKQEAgLTExNCwxNyArMTMxLDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBhZGRT
VkdQcm9wZXJ0eVN5bmNocm9uaXplcihjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgY29u
c3QgU1ZHQW5pbWF0ZWRQcm9wZXJ0eUJhc2UmIGJhc2UpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1fc3ZnUHJvcGVydHlNYXAuc2V0KGF0dHJOYW1lLmxvY2FsTmFtZSgpLCAmYmFzZSk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldEN1cnNvckVsZW1lbnQoU1ZHQ3Vyc29yRWxl
bWVudCogY3Vyc29yRWxlbWVudCkgeyBtX2N1cnNvckVsZW1lbnQgPSBjdXJzb3JFbGVtZW50OyB9
Ci0gICAgICAgIHZvaWQgc2V0Q3Vyc29ySW1hZ2VWYWx1ZShDU1NDdXJzb3JJbWFnZVZhbHVlKiBj
dXJzb3JJbWFnZVZhbHVlKSB7IG1fY3Vyc29ySW1hZ2VWYWx1ZSA9IGN1cnNvckltYWdlVmFsdWU7
IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTVkdFbGVtZW50SW5zdGFu
Y2U7Ci0KICAgICAgICAgdm9pZCBtYXBJbnN0YW5jZVRvRWxlbWVudChTVkdFbGVtZW50SW5zdGFu
Y2UqKTsKICAgICAgICAgdm9pZCByZW1vdmVJbnN0YW5jZU1hcHBpbmcoU1ZHRWxlbWVudEluc3Rh
bmNlKik7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
LmgJKHJldmlzaW9uIDQ3NDI4KQorKysgV2ViQ29yZS9zdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpZiBFTkFCTEUo
U1ZHKQogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuaAkocmV2aXNpb24gNDc0
MjgpCisrKyBXZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
LDggKzIsNiBAQAogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAgICAgICAgICAgICAgICAgIDIw
MDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAotICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAotCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCiAgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCkBA
IC0yNCw2ICsyMiw3IEBACiAjZGVmaW5lIFNWR1N0b3BFbGVtZW50X2gKIAogI2lmIEVOQUJMRShT
VkcpCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMzLDEzICszMiwxMyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIFNWR1N0b3BFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCopOwogICAgICAgICB2aXJ0dWFsIH5TVkdTdG9wRWxlbWVudCgpOwogCisgICAgcHJpdmF0
ZToKICAgICAgICAgdmlydHVhbCBib29sIGlzR3JhZGllbnRTdG9wKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUqKTsKIAogICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVu
ZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwogCi0gICAgcHJpdmF0ZToKICAgICAg
ICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR1N0b3BFbGVtZW50LCBTVkdOYW1l
czo6c3RvcFRhZ1N0cmluZywgU1ZHTmFtZXM6Om9mZnNldEF0dHJTdHJpbmcsIGZsb2F0LCBPZmZz
ZXQsIG9mZnNldCkKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL3N2Zy9zdmd0YWdzLmluCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL3N2Z3RhZ3MuaW4JKHJldmlzaW9uIDQ3NDI4KQorKysgV2Vi
Q29yZS9zdmcvc3ZndGFncy5pbgkod29ya2luZyBjb3B5KQpAQCAtMywxMTQgKzMsOTkgQEAgbmFt
ZXNwYWNlVVJJPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZwogZ3VhcmRGYWN0b3J5V2l0aD0i
RU5BQkxFKFNWRykiCiBleHBvcnRTdHJpbmdzCiAKLWEKLSNpZiBFTkFCTEVfU1ZHX0ZPTlRTCi1h
bHRHbHlwaAotI2VuZGlmCi0jaWYgMAotYWx0R2x5cGhEZWYKLWFsdEdseXBoSXRlbQotI2VuZGlm
CithIGNyZWF0ZVdpdGhOZXcKK2NpcmNsZSBjcmVhdGVXaXRoTmV3CitjbGlwUGF0aCBjcmVhdGVX
aXRoTmV3CitjdXJzb3IgY3JlYXRlV2l0aE5ldworZGVmcyBjcmVhdGVXaXRoTmV3CitkZXNjIGNy
ZWF0ZVdpdGhOZXcKK2cgY3JlYXRlV2l0aE5ldworaW1hZ2UgY3JlYXRlV2l0aE5ldworbGluZSBj
cmVhdGVXaXRoTmV3CitsaW5lYXJHcmFkaWVudCBjcmVhdGVXaXRoTmV3CittYXJrZXIgY3JlYXRl
V2l0aE5ldworbWFzayBjcmVhdGVXaXRoTmV3CittZXRhZGF0YSBjcmVhdGVXaXRoTmV3CittcGF0
aCBpbnRlcmZhY2VOYW1lPVNWR01QYXRoRWxlbWVudCwgSlNJbnRlcmZhY2VOYW1lPVNWR0VsZW1l
bnQsIGNyZWF0ZVdpdGhOZXcKK3BhdGggY3JlYXRlV2l0aE5ldworcGF0dGVybiBjcmVhdGVXaXRo
TmV3Citwb2x5Z29uIGNyZWF0ZVdpdGhOZXcKK3BvbHlsaW5lIGNyZWF0ZVdpdGhOZXcKK3JhZGlh
bEdyYWRpZW50IGNyZWF0ZVdpdGhOZXcKK3JlY3QgY3JlYXRlV2l0aE5ldworc2NyaXB0IGNvbnN0
cnVjdG9yTmVlZHNDcmVhdGVkQnlQYXJzZXIsIGNyZWF0ZVdpdGhOZXcKK3N0b3AgY3JlYXRlV2l0
aE5ldworc3R5bGUgY29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNlciwgY3JlYXRlV2l0aE5l
dworc3ZnIGludGVyZmFjZU5hbWU9U1ZHU1ZHRWxlbWVudCwgY3JlYXRlV2l0aE5ldworc3dpdGNo
IGNyZWF0ZVdpdGhOZXcKK3N5bWJvbCBjcmVhdGVXaXRoTmV3Cit0ZXh0IGNyZWF0ZVdpdGhOZXcK
K3RleHRQYXRoIGNyZWF0ZVdpdGhOZXcKK3RpdGxlIGNyZWF0ZVdpdGhOZXcKK3RyZWYgaW50ZXJm
YWNlTmFtZT1TVkdUUmVmRWxlbWVudCwgY3JlYXRlV2l0aE5ldwordHNwYW4gaW50ZXJmYWNlTmFt
ZT1TVkdUU3BhbkVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK3VzZSBjcmVhdGVXaXRoTmV3Cit2aWV3
IGNyZWF0ZVdpdGhOZXcKKwogI2lmIEVOQUJMRV9TVkdfQU5JTUFUSU9OCi1hbmltYXRlCi1hbmlt
YXRlQ29sb3IKLWFuaW1hdGVNb3Rpb24gSlNJbnRlcmZhY2VOYW1lPVNWR0VsZW1lbnQKLWFuaW1h
dGVUcmFuc2Zvcm0KLXNldAotI2VuZGlmCi1jaXJjbGUKLWNsaXBQYXRoCi0jaWYgMAotY29sb3Jf
cHJvZmlsZQotI2VuZGlmCi1jdXJzb3IKLSNpZiBFTkFCTEVfU1ZHX0ZPTlRTCi1kZWZpbml0aW9u
X3NyYwotI2VuZGlmCi1kZWZzCi1kZXNjCi1lbGxpcHNlCi0jaWYgRU5BQkxFX0ZJTFRFUlMKLWZl
QmxlbmQKLWZlQ29sb3JNYXRyaXgKLWZlQ29tcG9uZW50VHJhbnNmZXIKLWZlQ29tcG9zaXRlCi0j
aWYgMAotZmVDb252b2x2ZU1hdHJpeAotI2VuZGlmCi1mZURpZmZ1c2VMaWdodGluZwotZmVEaXNw
bGFjZW1lbnRNYXAKLWZlRGlzdGFudExpZ2h0Ci1mZUZsb29kCi1mZUZ1bmNBCi1mZUZ1bmNCCi1m
ZUZ1bmNHCi1mZUZ1bmNSCi1mZUdhdXNzaWFuQmx1cgotZmVJbWFnZQotZmVNZXJnZQotZmVNZXJn
ZU5vZGUKLSNpZiAwCi1mZU1vcnBob2xvZ3kKLSNlbmRpZgotZmVPZmZzZXQKLWZlUG9pbnRMaWdo
dAotZmVTcGVjdWxhckxpZ2h0aW5nCi1mZVNwb3RMaWdodAotZmVUaWxlCi1mZVR1cmJ1bGVuY2UK
LWZpbHRlcgorYW5pbWF0ZSBjcmVhdGVXaXRoTmV3CithbmltYXRlQ29sb3IgY3JlYXRlV2l0aE5l
dworYW5pbWF0ZU1vdGlvbiBKU0ludGVyZmFjZU5hbWU9U1ZHRWxlbWVudCwgY3JlYXRlV2l0aE5l
dworYW5pbWF0ZVRyYW5zZm9ybSBjcmVhdGVXaXRoTmV3CitzZXQgY3JlYXRlV2l0aE5ldwogI2Vu
ZGlmCisKICNpZiBFTkFCTEVfU1ZHX0ZPTlRTCi1mb250Ci1mb250X2ZhY2UKLWZvbnRfZmFjZV9m
b3JtYXQKLWZvbnRfZmFjZV9uYW1lCi1mb250X2ZhY2Vfc3JjCi1mb250X2ZhY2VfdXJpCithbHRH
bHlwaCBjcmVhdGVXaXRoTmV3CitkZWZpbml0aW9uX3NyYyBjcmVhdGVXaXRoTmV3CitlbGxpcHNl
IGNyZWF0ZVdpdGhOZXcKK2ZvbnQgY3JlYXRlV2l0aE5ldworZm9udF9mYWNlIGNyZWF0ZVdpdGhO
ZXcKK2ZvbnRfZmFjZV9mb3JtYXQgY3JlYXRlV2l0aE5ldworZm9udF9mYWNlX25hbWUgY3JlYXRl
V2l0aE5ldworZm9udF9mYWNlX3NyYyBjcmVhdGVXaXRoTmV3Citmb250X2ZhY2VfdXJpIGNyZWF0
ZVdpdGhOZXcKK2dseXBoIGNyZWF0ZVdpdGhOZXcKK2hrZXJuIGludGVyZmFjZU5hbWU9U1ZHSEtl
cm5FbGVtZW50LCBKU0ludGVyZmFjZU5hbWU9U1ZHRWxlbWVudCwgY3JlYXRlV2l0aE5ldworbWlz
c2luZ19nbHlwaCBjcmVhdGVXaXRoTmV3CiAjZW5kaWYKKwogI2lmIEVOQUJMRV9TVkdfRk9SRUlH
Tl9PQkpFQ1QKLWZvcmVpZ25PYmplY3QKLSNlbmRpZgotZwotI2lmIEVOQUJMRV9TVkdfRk9OVFMK
LWdseXBoCi0jZW5kaWYKLSNpZiAwCi1nbHlwaFJlZgorZm9yZWlnbk9iamVjdCBjcmVhdGVXaXRo
TmV3CiAjZW5kaWYKLSNpZiBFTkFCTEVfU1ZHX0ZPTlRTCi1oa2VybiBpbnRlcmZhY2VOYW1lPVNW
R0hLZXJuRWxlbWVudCwgSlNJbnRlcmZhY2VOYW1lPVNWR0VsZW1lbnQKLSNlbmRpZgotaW1hZ2UK
LWxpbmUKLWxpbmVhckdyYWRpZW50Ci1tYXJrZXIKLW1hc2sKLW1ldGFkYXRhCi0jaWYgRU5BQkxF
X1NWR19GT05UUwotbWlzc2luZ19nbHlwaAorCisjaWYgRU5BQkxFX0ZJTFRFUlMKK2ZlQmxlbmQg
Y3JlYXRlV2l0aE5ldworZmVDb2xvck1hdHJpeCBjcmVhdGVXaXRoTmV3CitmZUNvbXBvbmVudFRy
YW5zZmVyIGNyZWF0ZVdpdGhOZXcKK2ZlQ29tcG9zaXRlIGNyZWF0ZVdpdGhOZXcKK2ZlRGlmZnVz
ZUxpZ2h0aW5nIGNyZWF0ZVdpdGhOZXcKK2ZlRGlzcGxhY2VtZW50TWFwIGNyZWF0ZVdpdGhOZXcK
K2ZlRGlzdGFudExpZ2h0IGNyZWF0ZVdpdGhOZXcKK2ZlRmxvb2QgY3JlYXRlV2l0aE5ldworZmVG
dW5jQSBjcmVhdGVXaXRoTmV3CitmZUZ1bmNCIGNyZWF0ZVdpdGhOZXcKK2ZlRnVuY0cgY3JlYXRl
V2l0aE5ldworZmVGdW5jUiBjcmVhdGVXaXRoTmV3CitmZUdhdXNzaWFuQmx1ciBjcmVhdGVXaXRo
TmV3CitmZUltYWdlIGNyZWF0ZVdpdGhOZXcKK2ZlTWVyZ2UgY3JlYXRlV2l0aE5ldworZmVNZXJn
ZU5vZGUgY3JlYXRlV2l0aE5ldworZmVPZmZzZXQgY3JlYXRlV2l0aE5ldworZmVQb2ludExpZ2h0
IGNyZWF0ZVdpdGhOZXcKK2ZlU3BlY3VsYXJMaWdodGluZyBjcmVhdGVXaXRoTmV3CitmZVNwb3RM
aWdodCBjcmVhdGVXaXRoTmV3CitmZVRpbGUgY3JlYXRlV2l0aE5ldworZmVUdXJidWxlbmNlIGNy
ZWF0ZVdpdGhOZXcKK2ZpbHRlciBjcmVhdGVXaXRoTmV3CiAjZW5kaWYKLW1wYXRoIGludGVyZmFj
ZU5hbWU9U1ZHTVBhdGhFbGVtZW50LCBKU0ludGVyZmFjZU5hbWU9U1ZHRWxlbWVudAotcGF0aAot
cGF0dGVybgotcG9seWdvbgotcG9seWxpbmUKLXJhZGlhbEdyYWRpZW50Ci1yZWN0Ci1zY3JpcHQg
Y29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNlcgotc3RvcAotc3R5bGUgY29uc3RydWN0b3JO
ZWVkc0NyZWF0ZWRCeVBhcnNlcgotc3ZnIGludGVyZmFjZU5hbWU9U1ZHU1ZHRWxlbWVudAotc3dp
dGNoCi1zeW1ib2wKLXRleHQKLXRleHRQYXRoCi10aXRsZQotdHJlZiBpbnRlcmZhY2VOYW1lPVNW
R1RSZWZFbGVtZW50Ci10c3BhbiBpbnRlcmZhY2VOYW1lPVNWR1RTcGFuRWxlbWVudAotdXNlCi12
aWV3CisKICNpZiAwCi12a2VybiBpbnRlcmZhY2VOYW1lPVNWR1ZLZXJuRWxlbWVudAorYWx0R2x5
cGhEZWYgY3JlYXRlV2l0aE5ldworYWx0R2x5cGhJdGVtIGNyZWF0ZVdpdGhOZXcKK2NvbG9yX3By
b2ZpbGUgY3JlYXRlV2l0aE5ldworZmVDb252b2x2ZU1hdHJpeCBjcmVhdGVXaXRoTmV3CitmZU1v
cnBob2xvZ3kgY3JlYXRlV2l0aE5ldworZ2x5cGhSZWYgY3JlYXRlV2l0aE5ldwordmtlcm4gaW50
ZXJmYWNlTmFtZT1TVkdWS2VybkVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKICNlbmRpZgpJbmRleDog
V2ViQ29yZS93bWwvV01MRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01M
RWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NDI4KQorKysgV2ViQ29yZS93bWwvV01MRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKIAotV01MRWxlbWVudDo6V01MRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQotICAgIDogU3R5bGVk
RWxlbWVudCh0YWdOYW1lLCBkb2MpCitXTUxFbGVtZW50OjpXTUxFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IFN0eWxlZEVsZW1l
bnQodGFnTmFtZSwgZG9jdW1lbnQsIENyZWF0ZUVsZW1lbnRaZXJvUmVmQ291bnQpCiB7CiB9CiAK
K3N0YXRpYyBQYXNzUmVmUHRyPFdNTEVsZW1lbnQ+IFdNTEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJu
IG5ldyBXTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKK30KKwogYm9vbCBXTUxFbGVtZW50
OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1
dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIGlmIChhdHRyTmFtZSA9PSBIVE1MTmFtZXM6
OmFsaWduQXR0cikgewpJbmRleDogV2ViQ29yZS93bWwvV01MRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvd21sL1dNTEVsZW1lbnQuaAkocmV2aXNpb24gNDc0MjgpCisrKyBXZWJDb3Jl
L3dtbC9XTUxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBXTUxFbGVtZW50IDogcHVibGljIFN0eWxlZEVsZW1lbnQg
ewogcHVibGljOgotICAgIFdNTEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXTUxFbGVtZW50PiBjcmVhdGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1YWwgYm9v
bCBpc1dNTEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29s
IGlzV01MVGFza0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtNDMsNiArNDMs
OCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJl
bmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKIAogcHJvdGVjdGVkOgorICAgIFdNTEVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKKwogICAgIC8vIEhlbHBl
ciBmdW5jdGlvbiBmb3IgZGVyaXZlZCBjbGFzc2VzCiAgICAgU3RyaW5nIHBhcnNlVmFsdWVTdWJz
dGl0dXRpbmdWYXJpYWJsZVJlZmVyZW5jZXMoY29uc3QgQXRvbWljU3RyaW5nJiwgV01MRXJyb3JD
b2RlIGRlZmF1bHRFcnJvckNvZGUgPSBXTUxFcnJvckludmFsaWRWYXJpYWJsZVJlZmVyZW5jZSkg
Y29uc3Q7CiAgICAgU3RyaW5nIHBhcnNlVmFsdWVGb3JiaWRkaW5nVmFyaWFibGVSZWZlcmVuY2Vz
KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwpJbmRleDogV2ViQ29yZS93bWwvV01MVGFnTmFt
ZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGFnTmFtZXMuaW4JKHJldmlzaW9u
IDQ3NDI4KQorKysgV2ViQ29yZS93bWwvV01MVGFnTmFtZXMuaW4JKHdvcmtpbmcgY29weSkKQEAg
LTIsMzQgKzIsMzQgQEAgbmFtZXNwYWNlPSJXTUwiCiBuYW1lc3BhY2VVUkk9Imh0dHA6Ly93d3cu
d2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCIKIGd1YXJkRmFjdG9yeVdpdGg9IkVOQUJMRShX
TUwpIgogCi1hCi1hY2Nlc3MKLWFuY2hvcgotYnIgaW50ZXJmYWNlTmFtZT1XTUxCUkVsZW1lbnQK
LWNhcmQKLWRvCi1maWVsZHNldCBpbnRlcmZhY2VOYW1lPVdNTEZpZWxkU2V0RWxlbWVudAotZ28K
LWhlYWQgaW50ZXJmYWNlTmFtZT1XTUxFbGVtZW50Ci1pbWcgaW50ZXJmYWNlTmFtZT1XTUxJbWFn
ZUVsZW1lbnQKLWlucHV0CithIGNyZWF0ZVdpdGhOZXcKK2FjY2VzcyBjcmVhdGVXaXRoTmV3Cith
bmNob3IgY3JlYXRlV2l0aE5ldworYnIgaW50ZXJmYWNlTmFtZT1XTUxCUkVsZW1lbnQsIGNyZWF0
ZVdpdGhOZXcKK2NhcmQgY3JlYXRlV2l0aE5ldworZG8gY3JlYXRlV2l0aE5ldworZmllbGRzZXQg
aW50ZXJmYWNlTmFtZT1XTUxGaWVsZFNldEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2dvIGNyZWF0
ZVdpdGhOZXcKK2hlYWQgaW50ZXJmYWNlTmFtZT1XTUxFbGVtZW50LCBjcmVhdGVXaXRoTmV3Citp
bWcgaW50ZXJmYWNlTmFtZT1XTUxJbWFnZUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2lucHV0IGNy
ZWF0ZVdpdGhOZXcKICNpZiAwCiAjIE5vdGU6ICdpbnNlcnRlZExlZ2VuZCcgaXMgbm90IGFuIG9m
ZmljaWFsIFdNTCBlbGVtZW50IC0gaW50ZXJuYWwgcHVycG9zZSBvbmx5IQogI2VuZGlmCi1pbnNl
cnRlZExlZ2VuZCBpbnRlcmZhY2VOYW1lPVdNTEluc2VydGVkTGVnZW5kRWxlbWVudAotbWV0YQot
bm9vcAotb25ldmVudCBpbnRlcmZhY2VOYW1lPVdNTE9uRXZlbnRFbGVtZW50Ci1vcHRncm91cCBp
bnRlcmZhY2VOYW1lPVdNTE9wdEdyb3VwRWxlbWVudAotb3B0aW9uCi1wCi1wb3N0ZmllbGQKLXBy
ZXYKLXJlZnJlc2gKLXNlbGVjdAotc2V0dmFyCi10YWJsZQotdGQgaW50ZXJmYWNlTmFtZT1XTUxF
bGVtZW50Ci10ZW1wbGF0ZQotdGltZXIKLXRyIGludGVyZmFjZU5hbWU9V01MRWxlbWVudAoraW5z
ZXJ0ZWRMZWdlbmQgaW50ZXJmYWNlTmFtZT1XTUxJbnNlcnRlZExlZ2VuZEVsZW1lbnQsIGNyZWF0
ZVdpdGhOZXcKK21ldGEgY3JlYXRlV2l0aE5ldworbm9vcCBjcmVhdGVXaXRoTmV3CitvbmV2ZW50
IGludGVyZmFjZU5hbWU9V01MT25FdmVudEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK29wdGdyb3Vw
IGludGVyZmFjZU5hbWU9V01MT3B0R3JvdXBFbGVtZW50LCBjcmVhdGVXaXRoTmV3CitvcHRpb24g
Y3JlYXRlV2l0aE5ldworcCBjcmVhdGVXaXRoTmV3Citwb3N0ZmllbGQgY3JlYXRlV2l0aE5ldwor
cHJldiBjcmVhdGVXaXRoTmV3CityZWZyZXNoIGNyZWF0ZVdpdGhOZXcKK3NlbGVjdCBjcmVhdGVX
aXRoTmV3CitzZXR2YXIgY3JlYXRlV2l0aE5ldwordGFibGUgY3JlYXRlV2l0aE5ldwordGQgaW50
ZXJmYWNlTmFtZT1XTUxFbGVtZW50LCBjcmVhdGVXaXRoTmV3Cit0ZW1wbGF0ZSBjcmVhdGVXaXRo
TmV3Cit0aW1lciBjcmVhdGVXaXRoTmV3Cit0ciBpbnRlcmZhY2VOYW1lPVdNTEVsZW1lbnQsIGNy
ZWF0ZVdpdGhOZXcK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>35050</attachid>
            <date>2009-08-18 10:34:19 -0700</date>
            <delta_ts>2009-08-18 22:57:01 -0700</delta_ts>
            <desc>Factored-out preparation piece</desc>
            <filename>MorePrepPatch.txt</filename>
            <type>text/plain</type>
            <size>39618</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDQ3NDI4KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCSh3b3JraW5nIGNvcHkpCkBAIC00NDMsOCArNDQzLDggQEAgX19aTjdXZWJDb3JlMjJhcHBs
aWNhdGlvbklzQXBwbGVNYWlsRXYKIF9fWk43V2ViQ29yZTIyY3JlYXRlRnJhZ21lbnRGcm9tVGV4
dEVQTlNfNVJhbmdlRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTIyZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbkVQTlNfMTJSZW5kZXJPYmplY3RFCiBfX1pON1dlYkNvcmUyM0FwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlMTRzZXRNYXhpbXVtU2l6ZUV4Ci1fX1pON1dlYkNvcmUyM0FwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlMTdzZXRDYWNoZURpcmVjdG9yeUVSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUy
M0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlMTZzdG9yZUNvcHlPZkNhY2hlRVJLTlNfNlN0cmluZ0VQ
TlNfMjBBcHBsaWNhdGlvbkNhY2hlSG9zdEUKK19fWk43V2ViQ29yZTIzQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2UxN3NldENhY2hlRGlyZWN0b3J5RVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTIz
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2UxOHZhY3V1bURhdGFiYXNlRmlsZUV2CiBfX1pON1dlYkNv
cmUyM0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlNWVtcHR5RXYKIF9fWk43V2ViQ29yZTIzUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmRDMUVQTlNfOERvY3VtZW50RU4zV1RGMTBQYXNzUmVmUHRySU5TXzE2
RG9jdW1lbnRGcmFnbWVudEVFRWJiYmJiTlNfMTBFZGl0QWN0aW9uRQpAQCAtNjk3LDkgKzY5Nyw5
IEBAIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcxNmFkanVzdFBhZ2VIZWlnaHQKIF9fWk43V2ViQ29y
ZTlGcmFtZVZpZXcxOHVwZGF0ZUNvbnRyb2xUaW50c0V2CiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3
MjJzZXRCYXNlQmFja2dyb3VuZENvbG9yRU5TXzVDb2xvckUKIF9fWk43V2ViQ29yZTlGcmFtZVZp
ZXcyM2xheW91dElmTmVlZGVkUmVjdXJzaXZlRXYKLV9fWk43V2ViQ29yZTlGcmFtZVZpZXcyOXN5
bmNDb21wb3NpdGluZ1N0YXRlUmVjdXJzaXZlRXYKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyOWZv
cmNlTGF5b3V0V2l0aFBhZ2VXaWR0aFJhbmdlRWZmYgogX19aTjdXZWJDb3JlOUZyYW1lVmlldzI5
c2V0U2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW5FYgorX19aTjdXZWJDb3JlOUZyYW1lVmlldzI5
c3luY0NvbXBvc2l0aW5nU3RhdGVSZWN1cnNpdmVFdgogX19aTjdXZWJDb3JlOUZyYW1lVmlldzZj
cmVhdGVFUE5TXzVGcmFtZUUKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXc2Y3JlYXRlRVBOU181RnJh
bWVFUktOU183SW50U2l6ZUUKIF9fWk43V2ViQ29yZTlIVE1MTmFtZXMxMGxpc3RpbmdUYWdFCklu
ZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwCShyZXZpc2lvbiA0NzQyOCkKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxOCw3ICsxMDE4
LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2VzcwogICAgICAgICAg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGl0bGUgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVF
bGVtZW50QmFzZSo+KG93bmVyKS0+Z2V0QXR0cmlidXRlKHRpdGxlQXR0cik7CiAgICAgICAgICAg
ICAgICAgaWYgKCF0aXRsZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aXRsZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVu
dEJhc2UqPihvd25lciktPm5hbWUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SFRNTEZyYW1lRWxlbWVudEJhc2UqPihvd25lciktPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob3duZXItPmlzSFRNTEVsZW1lbnQoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihvd25lcikt
PmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TEZyYW1lRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA0NzQyOCkKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsMTIgKzMyLDE1IEBACiAjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
Kwogc3RhdGljIGlubGluZSBib29sIGFsbG93U2V0dGluZ0phdmFzY3JpcHRVUkwoRXhlY1N0YXRl
KiBleGVjLCBIVE1MRnJhbWVFbGVtZW50KiBpbXAsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAg
ICAgaWYgKHByb3RvY29sSXNKYXZhU2NyaXB0KGRlcHJlY2F0ZWRQYXJzZVVSTCh2YWx1ZSkpKSB7
CkBAIC01NSw3ICs1OCw3IEBAIHZvaWQgSlNIVE1MRnJhbWVFbGVtZW50OjpzZXRTcmMoRXhlY1N0
YXQKICAgICBpZiAoIWFsbG93U2V0dGluZ0phdmFzY3JpcHRVUkwoZXhlYywgaW1wLCBzcmNWYWx1
ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGltcC0+c2V0U3JjKHNyY1ZhbHVlKTsKKyAgICBp
bXAtPnNldEF0dHJpYnV0ZShzcmNBdHRyLCBzcmNWYWx1ZSk7CiAgICAgcmV0dXJuOwogfQogCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSUZyYW1lRWxlbWVudEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDQ3NDI4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJRnJh
bWVFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTIgKzMyLDE1IEBACiAj
aW5jbHVkZSAiQ1NTSGVscGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MSUZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKIHZvaWQgSlNIVE1MSUZyYW1lRWxl
bWVudDo6c2V0U3JjKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBIVE1M
SUZyYW1lRWxlbWVudCogaW1wID0gc3RhdGljX2Nhc3Q8SFRNTElGcmFtZUVsZW1lbnQqPihpbXBs
KCkpOwpAQCAtNDksNyArNTIsNyBAQCB2b2lkIEpTSFRNTElGcmFtZUVsZW1lbnQ6OnNldFNyYyhF
eGVjU3RhCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW1wLT5zZXRTcmMoc3Jj
VmFsdWUpOworICAgIGltcC0+c2V0QXR0cmlidXRlKHNyY0F0dHIsIHNyY1ZhbHVlKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCShyZXZpc2lvbiA0
NzQyOCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI5LDE1ICsyOSwxNSBAQAogI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIgLy8gaW1wb3J0IGZpcnN0
IHRvIG1ha2UgdGhlIHByaXZhdGUvcHVibGljIHRyaWNrIHdvcmsKICNpbXBvcnQgIkRPTS5oIgog
Ci0jaW1wb3J0ICJET01SYW5nZUludGVybmFsLmgiCiAjaW1wb3J0ICJET01FbGVtZW50SW50ZXJu
YWwuaCIKLSNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NSFRNTENhbnZh
c0VsZW1lbnQuaCIKKyNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NUmFu
Z2VJbnRlcm5hbC5oIgogI2ltcG9ydCAiRnJhbWUuaCIKLSNpbXBvcnQgIkhUTUxOYW1lcy5oIgog
I2ltcG9ydCAiSFRNTEVsZW1lbnQuaCIKLSNpbXBvcnQgIlJlbmRlckltYWdlLmgiCisjaW1wb3J0
ICJIVE1MTmFtZXMuaCIKICNpbXBvcnQgIk5vZGVGaWx0ZXIuaCIKKyNpbXBvcnQgIlJlbmRlcklt
YWdlLmgiCiAjaW1wb3J0ICJXZWJTY3JpcHRPYmplY3RQcml2YXRlLmgiCiAjaW1wb3J0IDx3dGYv
SGFzaE1hcC5oPgogCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA0NzQyOCkKKysrIFdlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNiBAQAogI2luY2x1
ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbWFnZUxvYWRlci5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvckNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgi
CiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJNYXBwZWRBdHRyaWJ1dGUuaCIKQEAgLTEwNCw2ICsxMDMsNyBAQAogI2luY2x1ZGUgIlJl
bmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJT
Y3JpcHRFbGVtZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCiAjaW5j
bHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgpJbmRleDogV2ViQ29yZS9kb20vU3R5bGVkRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDQ3NDI4KQorKysgV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMSwxMSArMTAxLDYgQEAgdm9pZCBTdHlsZWRFbGVtZW50OjpyZW1vdmVNYXBw
ZWRBdHRyaWJ1dAogICAgIG1hcHBlZEF0dHJpYnV0ZURlY2xzLT5yZW1vdmUoTWFwcGVkQXR0cmli
dXRlS2V5KGVudHJ5VHlwZSwgYXR0ck5hbWUubG9jYWxOYW1lKCkuaW1wbCgpLCBhdHRyVmFsdWUu
aW1wbCgpKSk7CiB9CiAKLXZvaWQgU3R5bGVkRWxlbWVudDo6aW52YWxpZGF0ZVN0eWxlQXR0cmli
dXRlKCkKLXsKLSAgICBtX2lzU3R5bGVBdHRyaWJ1dGVWYWxpZCA9IGZhbHNlOwotfQotCiB2b2lk
IFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZVN0eWxlQXR0cmlidXRlKCkgY29uc3QKIHsKICAgICBBU1NF
UlQoIW1faXNTdHlsZUF0dHJpYnV0ZVZhbGlkKTsKSW5kZXg6IFdlYkNvcmUvZG9tL1N0eWxlZEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmgJKHJldmlz
aW9uIDQ3NDI4KQorKysgV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCwxNyArNDgsMTYgQEAgcHVibGljOgogICAgIGJvb2wgaGFzTWFwcGVkQXR0cmlidXRl
cygpIGNvbnN0IHsgcmV0dXJuIG5hbWVkQXR0ck1hcCAmJiBtYXBwZWRBdHRyaWJ1dGVzKCktPmhh
c01hcHBlZEF0dHJpYnV0ZXMoKTsgfQogICAgIGJvb2wgaXNNYXBwZWRBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QgeyBNYXBwZWRBdHRyaWJ1dGVFbnRyeSByZXMgPSBl
Tm9uZTsgbWFwVG9FbnRyeShuYW1lLCByZXMpOyByZXR1cm4gcmVzICE9IGVOb25lOyB9CiAKLSAg
ICB2b2lkIGFkZENTU0xlbmd0aChNYXBwZWRBdHRyaWJ1dGUqIGF0dHIsIGludCBpZCwgY29uc3Qg
U3RyaW5nICZ2YWx1ZSk7Ci0gICAgdm9pZCBhZGRDU1NQcm9wZXJ0eShNYXBwZWRBdHRyaWJ1dGUq
IGF0dHIsIGludCBpZCwgY29uc3QgU3RyaW5nICZ2YWx1ZSk7Ci0gICAgdm9pZCBhZGRDU1NQcm9w
ZXJ0eShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIsIGludCBpZCwgaW50IHZhbHVlKTsKLSAgICB2b2lk
IGFkZENTU1N0cmluZ1Byb3BlcnR5KE1hcHBlZEF0dHJpYnV0ZSogYXR0ciwgaW50IGlkLCBjb25z
dCBTdHJpbmcgJnZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19TVFJJTkcpOworICAgIHZvaWQgYWRkQ1NTTGVuZ3RoKE1hcHBlZEF0dHJp
YnV0ZSosIGludCBpZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgdm9pZCBhZGRDU1NQcm9w
ZXJ0eShNYXBwZWRBdHRyaWJ1dGUqLCBpbnQgaWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAg
IHZvaWQgYWRkQ1NTUHJvcGVydHkoTWFwcGVkQXR0cmlidXRlKiwgaW50IGlkLCBpbnQgdmFsdWUp
OwogICAgIHZvaWQgYWRkQ1NTSW1hZ2VQcm9wZXJ0eShNYXBwZWRBdHRyaWJ1dGUqLCBpbnQgcHJv
cGVydHlJRCwgY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZvaWQgYWRkQ1NTQ29sb3IoTWFwcGVk
QXR0cmlidXRlKiBhdHRyLCBpbnQgaWQsIGNvbnN0IFN0cmluZyAmYyk7Ci0gICAgdm9pZCBjcmVh
dGVNYXBwZWREZWNsKE1hcHBlZEF0dHJpYnV0ZSogYXR0cik7CisgICAgdm9pZCBhZGRDU1NDb2xv
cihNYXBwZWRBdHRyaWJ1dGUqLCBpbnQgaWQsIGNvbnN0IFN0cmluZyYgY29sb3IpOworICAgIHZv
aWQgY3JlYXRlTWFwcGVkRGVjbChNYXBwZWRBdHRyaWJ1dGUqKTsKICAgICAKLSAgICBzdGF0aWMg
Q1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24qIGdldE1hcHBlZEF0dHJpYnV0ZURlY2woTWFw
cGVkQXR0cmlidXRlRW50cnkgdHlwZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSk7CisgICAgc3RhdGljIENTU01hcHBlZEF0dHJpYnV0ZURlY2xh
cmF0aW9uKiBnZXRNYXBwZWRBdHRyaWJ1dGVEZWNsKE1hcHBlZEF0dHJpYnV0ZUVudHJ5LCBjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKICAgICBz
dGF0aWMgdm9pZCBzZXRNYXBwZWRBdHRyaWJ1dGVEZWNsKE1hcHBlZEF0dHJpYnV0ZUVudHJ5LCBj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBDU1NN
YXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiopOwotICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1hcHBl
ZEF0dHJpYnV0ZURlY2woTWFwcGVkQXR0cmlidXRlRW50cnkgdHlwZSwgY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CisgICAgc3RhdGljIHZvaWQg
cmVtb3ZlTWFwcGVkQXR0cmlidXRlRGVjbChNYXBwZWRBdHRyaWJ1dGVFbnRyeSwgY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CiAKICAgICBzdGF0
aWMgQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24qIGdldE1hcHBlZEF0dHJpYnV0ZURlY2wo
TWFwcGVkQXR0cmlidXRlRW50cnksIEF0dHJpYnV0ZSopOwogICAgIHN0YXRpYyB2b2lkIHNldE1h
cHBlZEF0dHJpYnV0ZURlY2woTWFwcGVkQXR0cmlidXRlRW50cnksIEF0dHJpYnV0ZSosIENTU01h
cHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKik7CkBAIC05Niw2ICs5NSwxMSBAQCBwcm90ZWN0ZWQ6
CiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX2lubGluZVN0eWxlRGVj
bDsKIH07CiAKK2lubGluZSB2b2lkIFN0eWxlZEVsZW1lbnQ6OmludmFsaWRhdGVTdHlsZUF0dHJp
YnV0ZSgpCit7CisgICAgbV9pc1N0eWxlQXR0cmlidXRlVmFsaWQgPSBmYWxzZTsKK30KKwogfSAv
L25hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbAkocmV2aXNpb24gNDc0MjgpCisr
KyBXZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3
IEBAIHN1YiBkZWZhdWx0VGFnUHJvcGVydHlIYXNoCiAgICAgcmV0dXJuICgKICAgICAgICAgJ2Nv
bnN0cnVjdG9yTmVlZHNDcmVhdGVkQnlQYXJzZXInID0+IDAsCiAgICAgICAgICdjb25zdHJ1Y3Rv
ck5lZWRzRm9ybUVsZW1lbnQnID0+IDAsCi0gICAgICAgICdjcmVhdGVXaXRoTmV3JyA9PiAxLAor
ICAgICAgICAnY3JlYXRlV2l0aE5ldycgPT4gMCwKICAgICAgICAgJ2V4cG9ydFN0cmluZycgPT4g
MCwKICAgICAgICAgJ2ludGVyZmFjZU5hbWUnID0+IGRlZmF1bHRJbnRlcmZhY2VOYW1lKCRfWzBd
KSwKICAgICAgICAgIyBCeSBkZWZhdWx0LCB0aGUgSlNJbnRlcmZhY2VOYW1lIGlzIHRoZSBzYW1l
IGFzIHRoZSBpbnRlcmZhY2VOYW1lLgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmgJKHJl
dmlzaW9uIDQ3NDI4KQorKysgV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDkgKzI3LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBIVE1MRm9ybUVsZW1lbnQ7Ci1jbGFzcyBIVE1MSW1hZ2VMb2FkZXI7Ci0KIGNsYXNzIEhUTUxB
cHBsZXRFbGVtZW50IDogcHVibGljIEhUTUxQbHVnSW5FbGVtZW50IHsKIHB1YmxpYzoKICAgICBI
VE1MQXBwbGV0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NDI4KQorKysgV2ViQ29yZS9o
dG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsMjYgKzIzOCw2
IEBAIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxFbWJlZEVsZW1lbnQ6OmkKICAgICByZXR1cm4g
c3JjQXR0cjsKIH0KIAotU3RyaW5nIEhUTUxFbWJlZEVsZW1lbnQ6OnNyYygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZShzcmNBdHRyKTsKLX0KLQotdm9pZCBIVE1MRW1iZWRFbGVt
ZW50OjpzZXRTcmMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoc3Jj
QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEVtYmVkRWxlbWVudDo6dHlwZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0eXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEVt
YmVkRWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJp
YnV0ZSh0eXBlQXR0ciwgdmFsdWUpOwotfQotCiB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OmFkZFN1
YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykgY29uc3QKIHsK
ICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMo
dXJscyk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmgJKHJldmlzaW9uIDQ3NDI4KQorKysg
V2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBIVE1MRW1iZWRFbGVtZW50IDogcHVi
bGljIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQgewogcHVibGljOgogICAgIEhUTUxFbWJlZEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7Ci0gICAgfkhUTUxFbWJlZEVsZW1l
bnQoKTsKIAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQogICAgIHZpcnR1YWwgaW50IHRhZ1By
aW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQpAQCAtNTQsMTIgKzUzLDYgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBj
b25zdDsKIAotICAgIFN0cmluZyBzcmMoKSBjb25zdDsKLSAgICB2b2lkIHNldFNyYyhjb25zdCBT
dHJpbmcmKTsKLQotICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNv
bnN0IFN0cmluZyYpOwotCiAgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmlidXRl
VVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0OwogCiBwcml2YXRlOgpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxGcmFtZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TEZyYW1lRWxlbWVudC5oCShyZXZpc2lvbiA0NzQyOCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJh
bWVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCw2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBSZW5kZXJPYmplY3Q7Ci1jbGFz
cyBSZW5kZXJBcmVuYTsKLWNsYXNzIFJlbmRlclN0eWxlOwotCiBjbGFzcyBIVE1MRnJhbWVFbGVt
ZW50IDogcHVibGljIEhUTUxGcmFtZUVsZW1lbnRCYXNlIHsKIHB1YmxpYzoKICAgICBIVE1MRnJh
bWVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCShyZXZpc2lvbiA0NzQyOCkKKysrIFdlYkNvcmUv
aHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3ICsx
OTcsNyBAQCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjphdHRhY2goKQogCiBLVVJMIEhUTUxG
cmFtZUVsZW1lbnRCYXNlOjpsb2NhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHNyYygpOwor
ICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoc3JjQXR0cikp
OwogfQogCiB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpzZXRMb2NhdGlvbihjb25zdCBTdHJp
bmcmIHN0cikKQEAgLTIyOSw3NiArMjI5LDYgQEAgYm9vbCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6
aXNVUkxBdHRyaWJ1dAogICAgIHJldHVybiBhdHRyLT5uYW1lKCkgPT0gc3JjQXR0cjsKIH0KIAot
U3RyaW5nIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpmcmFtZUJvcmRlcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShmcmFtZWJvcmRlckF0dHIpOwotfQotCi12b2lkIEhUTUxGcmFt
ZUVsZW1lbnRCYXNlOjpzZXRGcmFtZUJvcmRlcihjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAg
IHNldEF0dHJpYnV0ZShmcmFtZWJvcmRlckF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxG
cmFtZUVsZW1lbnRCYXNlOjpsb25nRGVzYygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJp
YnV0ZShsb25nZGVzY0F0dHIpOwotfQotCi12b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpzZXRM
b25nRGVzYyhjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShsb25nZGVz
Y0F0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjptYXJnaW5I
ZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobWFyZ2luaGVpZ2h0QXR0
cik7Ci19Ci0KLXZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OnNldE1hcmdpbkhlaWdodChjb25z
dCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShtYXJnaW5oZWlnaHRBdHRyLCB2
YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MRnJhbWVFbGVtZW50QmFzZTo6bWFyZ2luV2lkdGgoKSBj
b25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobWFyZ2lud2lkdGhBdHRyKTsKLX0KLQot
dm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0TWFyZ2luV2lkdGgoY29uc3QgU3RyaW5nICZ2
YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobWFyZ2lud2lkdGhBdHRyLCB2YWx1ZSk7Ci19Ci0K
LVN0cmluZyBIVE1MRnJhbWVFbGVtZW50QmFzZTo6bmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShuYW1lQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6
OnNldE5hbWUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobmFtZUF0
dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpzY3JvbGxpbmco
KSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoc2Nyb2xsaW5nQXR0cik7Ci19Ci0K
LXZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OnNldFNjcm9sbGluZyhjb25zdCBTdHJpbmcgJnZh
bHVlKQotewotICAgIHNldEF0dHJpYnV0ZShzY3JvbGxpbmdBdHRyLCB2YWx1ZSk7Ci19Ci0KLUtV
UkwgSFRNTEZyYW1lRWxlbWVudEJhc2U6OnNyYygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3Vt
ZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShzcmNBdHRyKSk7Ci19Ci0KLXZvaWQgSFRN
TEZyYW1lRWxlbWVudEJhc2U6OnNldFNyYyhjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNl
dEF0dHJpYnV0ZShzcmNBdHRyLCB2YWx1ZSk7Ci19Ci0KIGludCBIVE1MRnJhbWVFbGVtZW50QmFz
ZTo6d2lkdGgoKSBjb25zdAogewogICAgIGlmICghcmVuZGVyZXIoKSkKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MRnJhbWVFbGVtZW50QmFzZS5oCShyZXZpc2lvbiA0NzQyOCkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MRnJhbWVFbGVtZW50QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MiwyNyArNTIsNiBAQCBw
dWJsaWM6CiAgICAgaW50IGdldE1hcmdpbldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW5X
aWR0aDsgfQogICAgIGludCBnZXRNYXJnaW5IZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX21hcmdp
bkhlaWdodDsgfQogCi0gICAgU3RyaW5nIGZyYW1lQm9yZGVyKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRGcmFtZUJvcmRlcihjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBsb25nRGVzYygpIGNv
bnN0OwotICAgIHZvaWQgc2V0TG9uZ0Rlc2MoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcg
bWFyZ2luSGVpZ2h0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRNYXJnaW5IZWlnaHQoY29uc3QgU3Ry
aW5nJik7Ci0KLSAgICBTdHJpbmcgbWFyZ2luV2lkdGgoKSBjb25zdDsKLSAgICB2b2lkIHNldE1h
cmdpbldpZHRoKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKLSAg
ICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgc2Nyb2xsaW5nKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRTY3JvbGxpbmcoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBLVVJM
IHNyYygpIGNvbnN0OwotICAgIHZvaWQgc2V0U3JjKGNvbnN0IFN0cmluZyYpOwotCiAgICAgaW50
IHdpZHRoKCkgY29uc3Q7CiAgICAgaW50IGhlaWdodCgpIGNvbnN0OwogCkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MSUZyYW1lRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NDI4KQorKysgV2ViQ29yZS9odG1sL0hU
TUxJRnJhbWVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDM0ICsxMjYsNCBAQCBi
b29sIEhUTUxJRnJhbWVFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBCiAgICAgcmV0dXJuIGF0dHIt
Pm5hbWUoKSA9PSBzcmNBdHRyOwogfQogCi1TdHJpbmcgSFRNTElGcmFtZUVsZW1lbnQ6OmFsaWdu
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsaWduQXR0cik7Ci19Ci0KLXZv
aWQgSFRNTElGcmFtZUVsZW1lbnQ6OnNldEFsaWduKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0g
ICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTElGcmFt
ZUVsZW1lbnQ6OmhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShoZWln
aHRBdHRyKTsKLX0KLQotdm9pZCBIVE1MSUZyYW1lRWxlbWVudDo6c2V0SGVpZ2h0KGNvbnN0IFN0
cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGhlaWdodEF0dHIsIHZhbHVlKTsKLX0K
LQotU3RyaW5nIEhUTUxJRnJhbWVFbGVtZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOwotfQotCi12b2lkIEhUTUxJRnJhbWVFbGVtZW50Ojpz
ZXRXaWR0aChjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh3aWR0aEF0
dHIsIHZhbHVlKTsKLX0KLQogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmgJKHJldmlz
aW9uIDQ3NDI4KQorKysgV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDE1ICs0OCw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIGJvb2wg
aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7CiAKLSAgICBTdHJpbmcgYWxpZ24oKSBj
b25zdDsKLSAgICB2b2lkIHNldEFsaWduKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGhl
aWdodCgpIGNvbnN0OwotICAgIHZvaWQgc2V0SGVpZ2h0KGNvbnN0IFN0cmluZyYpOwotCi0gICAg
U3RyaW5nIHdpZHRoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRXaWR0aChjb25zdCBTdHJpbmcmKTsK
LQogcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV9uYW1lOwogfTsKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxPYmplY3RFbGVtZW50LmNwcAkocmV2aXNpb24gNDc0MjgpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TE9iamVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMCArNTQsNiBAQCBIVE1M
T2JqZWN0RWxlbWVudDo6SFRNTE9iamVjdEVsZW1lbnQoY29uCiAgICAgQVNTRVJUKGhhc1RhZ05h
bWUob2JqZWN0VGFnKSk7CiB9CiAKLUhUTUxPYmplY3RFbGVtZW50Ojp+SFRNTE9iamVjdEVsZW1l
bnQoKQotewotfQotCiBSZW5kZXJXaWRnZXQqIEhUTUxPYmplY3RFbGVtZW50OjpyZW5kZXJXaWRn
ZXRGb3JKU0JpbmRpbmdzKCkgY29uc3QKIHsKICAgICBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdl
dCA9IChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzV2lkZ2V0KCkpID8gdG9SZW5kZXJXaWRn
ZXQocmVuZGVyZXIoKSkgOiAwOwpAQCAtMjk3LDY2ICsyOTMsNiBAQCB2b2lkIEhUTUxPYmplY3RF
bGVtZW50Ojp1cGRhdGVEb2NOYW1lZEl0CiAgICAgbV9kb2NOYW1lZEl0ZW0gPSBpc05hbWVkSXRl
bTsKIH0KIAotU3RyaW5nIEhUTUxPYmplY3RFbGVtZW50Ojpjb2RlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZ2V0QXR0cmlidXRlKGNvZGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVu
dDo6c2V0Q29kZShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShjb2Rl
QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTE9iamVjdEVsZW1lbnQ6OmFyY2hpdmUoKSBj
b25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYXJjaGl2ZUF0dHIpOwotfQotCi12b2lk
IEhUTUxPYmplY3RFbGVtZW50OjpzZXRBcmNoaXZlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0g
ICAgc2V0QXR0cmlidXRlKGFyY2hpdmVBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MT2Jq
ZWN0RWxlbWVudDo6Ym9yZGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGJv
cmRlckF0dHIpOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRCb3JkZXIoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYm9yZGVyQXR0ciwgdmFsdWUpOwot
fQotCi1TdHJpbmcgSFRNTE9iamVjdEVsZW1lbnQ6OmNvZGVCYXNlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZ2V0QXR0cmlidXRlKGNvZGViYXNlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVs
ZW1lbnQ6OnNldENvZGVCYXNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmli
dXRlKGNvZGViYXNlQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTE9iamVjdEVsZW1lbnQ6
OmNvZGVUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNvZGV0eXBlQXR0
cik7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldENvZGVUeXBlKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNvZGV0eXBlQXR0ciwgdmFsdWUpOwotfQot
Ci1LVVJMIEhUTUxPYmplY3RFbGVtZW50OjpkYXRhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKGRhdGFBdHRyKSk7Ci19Ci0KLXZvaWQg
SFRNTE9iamVjdEVsZW1lbnQ6OnNldERhdGEoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBz
ZXRBdHRyaWJ1dGUoZGF0YUF0dHIsIHZhbHVlKTsKLX0KLQogYm9vbCBIVE1MT2JqZWN0RWxlbWVu
dDo6ZGVjbGFyZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoZGVjbGFyZUF0
dHIpLmlzTnVsbCgpOwpAQCAtMzc3LDM2ICszMTMsNiBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50
OjpzZXRIc3BhY2UoaW50IHZhCiAgICAgc2V0QXR0cmlidXRlKGhzcGFjZUF0dHIsIFN0cmluZzo6
bnVtYmVyKHZhbHVlKSk7CiB9CiAKLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6c3RhbmRieSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShzdGFuZGJ5QXR0cik7Ci19Ci0KLXZv
aWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldFN0YW5kYnkoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBzZXRBdHRyaWJ1dGUoc3RhbmRieUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxP
YmplY3RFbGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHR5
cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHJp
bmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUpOwotfQotCi1T
dHJpbmcgSFRNTE9iamVjdEVsZW1lbnQ6OnVzZU1hcCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZSh1c2VtYXBBdHRyKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0
VXNlTWFwKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHVzZW1hcEF0
dHIsIHZhbHVlKTsKLX0KLQogaW50IEhUTUxPYmplY3RFbGVtZW50Ojp2c3BhY2UoKSBjb25zdAog
ewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodnNwYWNlQXR0cikudG9JbnQoKTsKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MT2JqZWN0RWxlbWVudC5oCShyZXZpc2lvbiA0NzQyOCkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MT2JqZWN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBAIGNsYXNz
IEtVUkw7CiBjbGFzcyBIVE1MT2JqZWN0RWxlbWVudCA6IHB1YmxpYyBIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50IHsKIHB1YmxpYzoKICAgICBIVE1MT2JqZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7Ci0gICAgfkhUTUxPYmplY3RF
bGVtZW50KCk7CiAKICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJu
IDU7IH0KIApAQCAtNjAsMzkgKzU5LDEyIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUmVuZGVy
V2lkZ2V0KiByZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29uc3Q7CiAKLSAgICBTdHJpbmcg
YXJjaGl2ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0QXJjaGl2ZShjb25zdCBTdHJpbmcmKTsKLQot
ICAgIFN0cmluZyBib3JkZXIoKSBjb25zdDsKLSAgICB2b2lkIHNldEJvcmRlcihjb25zdCBTdHJp
bmcmKTsKLQotICAgIFN0cmluZyBjb2RlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb2RlKGNvbnN0
IFN0cmluZyYpOwotICAgIAotICAgIFN0cmluZyBjb2RlQmFzZSgpIGNvbnN0OwotICAgIHZvaWQg
c2V0Q29kZUJhc2UoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgY29kZVR5cGUoKSBjb25z
dDsKLSAgICB2b2lkIHNldENvZGVUeXBlKGNvbnN0IFN0cmluZyYpOwotICAgIAotICAgIEtVUkwg
ZGF0YSgpIGNvbnN0OwotICAgIHZvaWQgc2V0RGF0YShjb25zdCBTdHJpbmcmKTsKLQogICAgIGJv
b2wgZGVjbGFyZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0RGVjbGFyZShib29sKTsKIAogICAgIGlu
dCBoc3BhY2UoKSBjb25zdDsKICAgICB2b2lkIHNldEhzcGFjZShpbnQpOwogCi0gICAgU3RyaW5n
IHN0YW5kYnkoKSBjb25zdDsKLSAgICB2b2lkIHNldFN0YW5kYnkoY29uc3QgU3RyaW5nJik7Ci0K
LSAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcm
KTsKLQotICAgIFN0cmluZyB1c2VNYXAoKSBjb25zdDsKLSAgICB2b2lkIHNldFVzZU1hcChjb25z
dCBTdHJpbmcmKTsKLQogICAgIGludCB2c3BhY2UoKSBjb25zdDsKICAgICB2b2lkIHNldFZzcGFj
ZShpbnQpOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3
NDI4KQorKysgV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTEsMTYgKzkxLDYgQEAgUGFzc1NjcmlwdEluc3RhbmNlIEhUTUxQbHVnSW5FbGVtZW50
OjpnZQogICAgIHJldHVybiBtX2luc3RhbmNlOwogfQogCi1TdHJpbmcgSFRNTFBsdWdJbkVsZW1l
bnQ6OmFsaWduKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsaWduQXR0cik7
Ci19Ci0KLXZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OnNldEFsaWduKGNvbnN0IFN0cmluZyYgdmFs
dWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFsdWUpOwotfQotCiBTdHJpbmcg
SFRNTFBsdWdJbkVsZW1lbnQ6OmhlaWdodCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJp
YnV0ZShoZWlnaHRBdHRyKTsKQEAgLTExMSwxNiArMTAxLDYgQEAgdm9pZCBIVE1MUGx1Z0luRWxl
bWVudDo6c2V0SGVpZ2h0KGNvbnN0IAogICAgIHNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCB2YWx1
ZSk7CiB9CiAKLVN0cmluZyBIVE1MUGx1Z0luRWxlbWVudDo6bmFtZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShuYW1lQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFBsdWdJbkVsZW1l
bnQ6OnNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobmFt
ZUF0dHIsIHZhbHVlKTsKLX0KLQogU3RyaW5nIEhUTUxQbHVnSW5FbGVtZW50Ojp3aWR0aCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOwpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxQbHVnSW5FbGVtZW50LmgJKHJldmlzaW9uIDQ3NDI4KQorKysgV2ViQ29yZS9odG1sL0hUTUxQ
bHVnSW5FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDE1ICs0Nyw5IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVXaWRnZXQoKSB7IH0KIAotICAgIFN0cmluZyBhbGln
bigpIGNvbnN0OwotICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5nJik7Ci0gICAgCiAgICAg
U3RyaW5nIGhlaWdodCgpIGNvbnN0OwogICAgIHZvaWQgc2V0SGVpZ2h0KGNvbnN0IFN0cmluZyYp
OwogICAgIAotICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXROYW1lKGNvbnN0
IFN0cmluZyYpOwotICAgIAogICAgIFN0cmluZyB3aWR0aCgpIGNvbnN0OwogICAgIHZvaWQgc2V0
V2lkdGgoY29uc3QgU3RyaW5nJik7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFnTmFtZXMu
aW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWdOYW1lcy5pbgkocmV2aXNpb24g
NDc0MjgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhZ05hbWVzLmluCSh3b3JraW5nIGNvcHkpCkBA
IC0yLDEyMiArMiwxMjIgQEAgbmFtZXNwYWNlPSJIVE1MIgogbmFtZXNwYWNlUHJlZml4PSJ4aHRt
bCIKIG5hbWVzcGFjZVVSST0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKIAotYSBpbnRl
cmZhY2VOYW1lPUhUTUxBbmNob3JFbGVtZW50Ci1hYmJyIGludGVyZmFjZU5hbWU9SFRNTEVsZW1l
bnQKLWFjcm9ueW0gaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAotYWRkcmVzcyBpbnRlcmZhY2VO
YW1lPUhUTUxFbGVtZW50Ci1hcHBsZXQKLWFyZWEKLWF1ZGlvIHdyYXBwZXJPbmx5SWZNZWRpYUlz
QXZhaWxhYmxlLGNvbmRpdGlvbmFsPVZJREVPCi1iIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQK
LWJhc2UKLWJhc2Vmb250IGludGVyZmFjZU5hbWU9SFRNTEJhc2VGb250RWxlbWVudAotYmRvIGlu
dGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLWJpZyBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci1i
bG9ja3F1b3RlCi1ib2R5Ci1iciBpbnRlcmZhY2VOYW1lPUhUTUxCUkVsZW1lbnQKLWJ1dHRvbiBj
b25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQKLWNhbnZhcwotY2FwdGlvbiBpbnRlcmZhY2VOYW1l
PUhUTUxUYWJsZUNhcHRpb25FbGVtZW50Ci1jZW50ZXIgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVu
dAotY2l0ZSBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci1jb2RlIGludGVyZmFjZU5hbWU9SFRN
TEVsZW1lbnQKLWNvbCBpbnRlcmZhY2VOYW1lPUhUTUxUYWJsZUNvbEVsZW1lbnQKLWNvbGdyb3Vw
IGludGVyZmFjZU5hbWU9SFRNTFRhYmxlQ29sRWxlbWVudAotZGF0YWdyaWQgaW50ZXJmYWNlTmFt
ZT1IVE1MRGF0YUdyaWRFbGVtZW50LGNvbmRpdGlvbmFsPURBVEFHUklECi1kYXRhbGlzdCBpbnRl
cmZhY2VOYW1lPUhUTUxEYXRhTGlzdEVsZW1lbnQsY29uZGl0aW9uYWw9REFUQUxJU1QKLWRjZWxs
IGludGVyZmFjZU5hbWU9SFRNTERhdGFHcmlkQ2VsbEVsZW1lbnQsY29uZGl0aW9uYWw9REFUQUdS
SUQKLWRjb2wgaW50ZXJmYWNlTmFtZT1IVE1MRGF0YUdyaWRDb2xFbGVtZW50LGNvbmRpdGlvbmFs
PURBVEFHUklECi1kcm93IGludGVyZmFjZU5hbWU9SFRNTERhdGFHcmlkUm93RWxlbWVudCxjb25k
aXRpb25hbD1EQVRBR1JJRAotZGQgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAotZGVsIGludGVy
ZmFjZU5hbWU9SFRNTE1vZEVsZW1lbnQKLWRmbiBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci1k
aXIgaW50ZXJmYWNlTmFtZT1IVE1MRGlyZWN0b3J5RWxlbWVudAotZGl2Ci1kbCBpbnRlcmZhY2VO
YW1lPUhUTUxETGlzdEVsZW1lbnQKLWR0IGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLWVtIGlu
dGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLWVtYmVkCi1maWVsZHNldCBpbnRlcmZhY2VOYW1lPUhU
TUxGaWVsZFNldEVsZW1lbnQsIGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudAotZm9udAotZm9y
bQotZnJhbWUKLWZyYW1lc2V0IGludGVyZmFjZU5hbWU9SFRNTEZyYW1lU2V0RWxlbWVudAotaGVh
ZAotaDEgaW50ZXJmYWNlTmFtZT1IVE1MSGVhZGluZ0VsZW1lbnQKLWgyIGludGVyZmFjZU5hbWU9
SFRNTEhlYWRpbmdFbGVtZW50Ci1oMyBpbnRlcmZhY2VOYW1lPUhUTUxIZWFkaW5nRWxlbWVudAot
aDQgaW50ZXJmYWNlTmFtZT1IVE1MSGVhZGluZ0VsZW1lbnQKLWg1IGludGVyZmFjZU5hbWU9SFRN
TEhlYWRpbmdFbGVtZW50Ci1oNiBpbnRlcmZhY2VOYW1lPUhUTUxIZWFkaW5nRWxlbWVudAotaHIg
aW50ZXJmYWNlTmFtZT1IVE1MSFJFbGVtZW50Ci1odG1sCi1pIGludGVyZmFjZU5hbWU9SFRNTEVs
ZW1lbnQKLWlmcmFtZSBpbnRlcmZhY2VOYW1lPUhUTUxJRnJhbWVFbGVtZW50Ci1pbWFnZSBtYXBU
b1RhZ05hbWU9aW1nCi1pbWcgaW50ZXJmYWNlTmFtZT1IVE1MSW1hZ2VFbGVtZW50LCBjb25zdHJ1
Y3Rvck5lZWRzRm9ybUVsZW1lbnQKLWlucHV0IGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudAot
aW5zIGludGVyZmFjZU5hbWU9SFRNTE1vZEVsZW1lbnQKLWlzaW5kZXggaW50ZXJmYWNlTmFtZT1I
VE1MSXNJbmRleEVsZW1lbnQsIGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudAota2JkIGludGVy
ZmFjZU5hbWU9SFRNTEVsZW1lbnQKLWtleWdlbiBKU0ludGVyZmFjZU5hbWU9SFRNTFNlbGVjdEVs
ZW1lbnQsIGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudAotbGFiZWwKLWxheWVyIGludGVyZmFj
ZU5hbWU9SFRNTEVsZW1lbnQKLWxlZ2VuZCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQKLWxp
IGludGVyZmFjZU5hbWU9SFRNTExJRWxlbWVudAotbGluayBjb25zdHJ1Y3Rvck5lZWRzQ3JlYXRl
ZEJ5UGFyc2VyCi1saXN0aW5nIGludGVyZmFjZU5hbWU9SFRNTFByZUVsZW1lbnQKLW1hcAotbWFy
cXVlZQotbWVudQotbWV0YQotbm9iciBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci1ub2VtYmVk
IGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLW5vZnJhbWVzIGludGVyZmFjZU5hbWU9SFRNTEVs
ZW1lbnQKLW5vbGF5ZXIgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAorYSBpbnRlcmZhY2VOYW1l
PUhUTUxBbmNob3JFbGVtZW50LCBjcmVhdGVXaXRoTmV3CithYmJyIGludGVyZmFjZU5hbWU9SFRN
TEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2Fjcm9ueW0gaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVu
dCwgY3JlYXRlV2l0aE5ldworYWRkcmVzcyBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50LCBjcmVh
dGVXaXRoTmV3CithcHBsZXQgY3JlYXRlV2l0aE5ldworYXJlYSBjcmVhdGVXaXRoTmV3CithdWRp
byB3cmFwcGVyT25seUlmTWVkaWFJc0F2YWlsYWJsZSwgY29uZGl0aW9uYWw9VklERU8sIGNyZWF0
ZVdpdGhOZXcKK2IgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldworYmFz
ZSBjcmVhdGVXaXRoTmV3CitiYXNlZm9udCBpbnRlcmZhY2VOYW1lPUhUTUxCYXNlRm9udEVsZW1l
bnQsIGNyZWF0ZVdpdGhOZXcKK2JkbyBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50LCBjcmVhdGVX
aXRoTmV3CitiaWcgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldworYmxv
Y2txdW90ZSBjcmVhdGVXaXRoTmV3Citib2R5IGNyZWF0ZVdpdGhOZXcKK2JyIGludGVyZmFjZU5h
bWU9SFRNTEJSRWxlbWVudCwgY3JlYXRlV2l0aE5ldworYnV0dG9uIGNvbnN0cnVjdG9yTmVlZHNG
b3JtRWxlbWVudCwgY3JlYXRlV2l0aE5ldworY2FudmFzIGNyZWF0ZVdpdGhOZXcKK2NhcHRpb24g
aW50ZXJmYWNlTmFtZT1IVE1MVGFibGVDYXB0aW9uRWxlbWVudCwgY3JlYXRlV2l0aE5ldworY2Vu
dGVyIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2NpdGUgaW50ZXJm
YWNlTmFtZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldworY29kZSBpbnRlcmZhY2VOYW1lPUhU
TUxFbGVtZW50LCBjcmVhdGVXaXRoTmV3Citjb2wgaW50ZXJmYWNlTmFtZT1IVE1MVGFibGVDb2xF
bGVtZW50LCBjcmVhdGVXaXRoTmV3Citjb2xncm91cCBpbnRlcmZhY2VOYW1lPUhUTUxUYWJsZUNv
bEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2RhdGFncmlkIGludGVyZmFjZU5hbWU9SFRNTERhdGFH
cmlkRWxlbWVudCwgY29uZGl0aW9uYWw9REFUQUdSSUQsIGNyZWF0ZVdpdGhOZXcKK2RhdGFsaXN0
IGludGVyZmFjZU5hbWU9SFRNTERhdGFMaXN0RWxlbWVudCwgY29uZGl0aW9uYWw9REFUQUxJU1Qs
IGNyZWF0ZVdpdGhOZXcKK2RjZWxsIGludGVyZmFjZU5hbWU9SFRNTERhdGFHcmlkQ2VsbEVsZW1l
bnQsIGNvbmRpdGlvbmFsPURBVEFHUklELCBjcmVhdGVXaXRoTmV3CitkY29sIGludGVyZmFjZU5h
bWU9SFRNTERhdGFHcmlkQ29sRWxlbWVudCwgY29uZGl0aW9uYWw9REFUQUdSSUQsIGNyZWF0ZVdp
dGhOZXcKK2Ryb3cgaW50ZXJmYWNlTmFtZT1IVE1MRGF0YUdyaWRSb3dFbGVtZW50LCBjb25kaXRp
b25hbD1EQVRBR1JJRCwgY3JlYXRlV2l0aE5ldworZGQgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVu
dCwgY3JlYXRlV2l0aE5ldworZGVsIGludGVyZmFjZU5hbWU9SFRNTE1vZEVsZW1lbnQsIGNyZWF0
ZVdpdGhOZXcKK2RmbiBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50LCBjcmVhdGVXaXRoTmV3Citk
aXIgaW50ZXJmYWNlTmFtZT1IVE1MRGlyZWN0b3J5RWxlbWVudCwgY3JlYXRlV2l0aE5ldworZGl2
IGNyZWF0ZVdpdGhOZXcKK2RsIGludGVyZmFjZU5hbWU9SFRNTERMaXN0RWxlbWVudCwgY3JlYXRl
V2l0aE5ldworZHQgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldworZW0g
aW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldworZW1iZWQgY3JlYXRlV2l0
aE5ldworZmllbGRzZXQgaW50ZXJmYWNlTmFtZT1IVE1MRmllbGRTZXRFbGVtZW50LCBjb25zdHJ1
Y3Rvck5lZWRzRm9ybUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2ZvbnQgY3JlYXRlV2l0aE5ldwor
Zm9ybSBjcmVhdGVXaXRoTmV3CitmcmFtZSBjcmVhdGVXaXRoTmV3CitmcmFtZXNldCBpbnRlcmZh
Y2VOYW1lPUhUTUxGcmFtZVNldEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2hlYWQgY3JlYXRlV2l0
aE5ldworaDEgaW50ZXJmYWNlTmFtZT1IVE1MSGVhZGluZ0VsZW1lbnQsIGNyZWF0ZVdpdGhOZXcK
K2gyIGludGVyZmFjZU5hbWU9SFRNTEhlYWRpbmdFbGVtZW50LCBjcmVhdGVXaXRoTmV3CitoMyBp
bnRlcmZhY2VOYW1lPUhUTUxIZWFkaW5nRWxlbWVudCwgY3JlYXRlV2l0aE5ldworaDQgaW50ZXJm
YWNlTmFtZT1IVE1MSGVhZGluZ0VsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2g1IGludGVyZmFjZU5h
bWU9SFRNTEhlYWRpbmdFbGVtZW50LCBjcmVhdGVXaXRoTmV3CitoNiBpbnRlcmZhY2VOYW1lPUhU
TUxIZWFkaW5nRWxlbWVudCwgY3JlYXRlV2l0aE5ldworaHIgaW50ZXJmYWNlTmFtZT1IVE1MSFJF
bGVtZW50LCBjcmVhdGVXaXRoTmV3CitodG1sIGNyZWF0ZVdpdGhOZXcKK2kgaW50ZXJmYWNlTmFt
ZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldworaWZyYW1lIGludGVyZmFjZU5hbWU9SFRNTElG
cmFtZUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2ltYWdlIG1hcFRvVGFnTmFtZT1pbWcsIGNyZWF0
ZVdpdGhOZXcKK2ltZyBpbnRlcmZhY2VOYW1lPUhUTUxJbWFnZUVsZW1lbnQsIGNvbnN0cnVjdG9y
TmVlZHNGb3JtRWxlbWVudCwgY3JlYXRlV2l0aE5ldworaW5wdXQgY29uc3RydWN0b3JOZWVkc0Zv
cm1FbGVtZW50LCBjcmVhdGVXaXRoTmV3CitpbnMgaW50ZXJmYWNlTmFtZT1IVE1MTW9kRWxlbWVu
dCwgY3JlYXRlV2l0aE5ldworaXNpbmRleCBpbnRlcmZhY2VOYW1lPUhUTUxJc0luZGV4RWxlbWVu
dCwgY29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50LCBjcmVhdGVXaXRoTmV3CitrYmQgaW50ZXJm
YWNlTmFtZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldwora2V5Z2VuIEpTSW50ZXJmYWNlTmFt
ZT1IVE1MU2VsZWN0RWxlbWVudCwgY29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50LCBjcmVhdGVX
aXRoTmV3CitsYWJlbCBjcmVhdGVXaXRoTmV3CitsYXllciBpbnRlcmZhY2VOYW1lPUhUTUxFbGVt
ZW50LCBjcmVhdGVXaXRoTmV3CitsZWdlbmQgY29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50LCBj
cmVhdGVXaXRoTmV3CitsaSBpbnRlcmZhY2VOYW1lPUhUTUxMSUVsZW1lbnQsIGNyZWF0ZVdpdGhO
ZXcKK2xpbmsgY29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNlciwgY3JlYXRlV2l0aE5ldwor
bGlzdGluZyBpbnRlcmZhY2VOYW1lPUhUTUxQcmVFbGVtZW50LCBjcmVhdGVXaXRoTmV3CittYXAg
Y3JlYXRlV2l0aE5ldworbWFycXVlZSBjcmVhdGVXaXRoTmV3CittZW51IGNyZWF0ZVdpdGhOZXcK
K21ldGEgY3JlYXRlV2l0aE5ldworbm9iciBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50LCBjcmVh
dGVXaXRoTmV3Citub2VtYmVkIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQsIGNyZWF0ZVdpdGhO
ZXcKK25vZnJhbWVzIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK25v
bGF5ZXIgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldwogI2lmIEVOQUJM
RV9YSFRNTE1QCi1ub3NjcmlwdCBpbnRlcmZhY2VOYW1lPUhUTUxOb1NjcmlwdEVsZW1lbnQKK25v
c2NyaXB0IGludGVyZmFjZU5hbWU9SFRNTE5vU2NyaXB0RWxlbWVudCwgY3JlYXRlV2l0aE5ldwog
I2Vsc2UKLW5vc2NyaXB0IGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKK25vc2NyaXB0IGludGVy
ZmFjZU5hbWU9SFRNTEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKICNlbmRpZgotb2JqZWN0IGNvbnN0
cnVjdG9yTmVlZHNDcmVhdGVkQnlQYXJzZXIKLW9sIGludGVyZmFjZU5hbWU9SFRNTE9MaXN0RWxl
bWVudAotb3B0Z3JvdXAgaW50ZXJmYWNlTmFtZT1IVE1MT3B0R3JvdXBFbGVtZW50LCBjb25zdHJ1
Y3Rvck5lZWRzRm9ybUVsZW1lbnQKLW9wdGlvbiBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQK
LXAgaW50ZXJmYWNlTmFtZT1IVE1MUGFyYWdyYXBoRWxlbWVudAotcGFyYW0KLXBsYWludGV4dCBp
bnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci1wcmUKLXEgaW50ZXJmYWNlTmFtZT1IVE1MUXVvdGVF
bGVtZW50Ci1ycCBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci1ydCBpbnRlcmZhY2VOYW1lPUhU
TUxFbGVtZW50Ci1ydWJ5IGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLXMgaW50ZXJmYWNlTmFt
ZT1IVE1MRWxlbWVudAotc2FtcCBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci1zY3JpcHQgY29u
c3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNlcgotc2VsZWN0IGNvbnN0cnVjdG9yTmVlZHNGb3Jt
RWxlbWVudAotc21hbGwgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAotc291cmNlIHdyYXBwZXJP
bmx5SWZNZWRpYUlzQXZhaWxhYmxlLGNvbmRpdGlvbmFsPVZJREVPCi1zcGFuIGludGVyZmFjZU5h
bWU9SFRNTEVsZW1lbnQKLXN0cmlrZSBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci1zdHJvbmcg
aW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAotc3R5bGUgY29uc3RydWN0b3JOZWVkc0NyZWF0ZWRC
eVBhcnNlcgotc3ViIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLXN1cCBpbnRlcmZhY2VOYW1l
PUhUTUxFbGVtZW50Ci10YWJsZQotdGJvZHkgaW50ZXJmYWNlTmFtZT1IVE1MVGFibGVTZWN0aW9u
RWxlbWVudAotdGQgaW50ZXJmYWNlTmFtZT1IVE1MVGFibGVDZWxsRWxlbWVudAotdGV4dGFyZWEg
aW50ZXJmYWNlTmFtZT1IVE1MVGV4dEFyZWFFbGVtZW50LCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVs
ZW1lbnQKLXRmb290IGludGVyZmFjZU5hbWU9SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKLXRoIGlu
dGVyZmFjZU5hbWU9SFRNTFRhYmxlQ2VsbEVsZW1lbnQKLXRoZWFkIGludGVyZmFjZU5hbWU9SFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQKLXRpdGxlCi10ciBpbnRlcmZhY2VOYW1lPUhUTUxUYWJsZVJv
d0VsZW1lbnQKLXR0IGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLXUgaW50ZXJmYWNlTmFtZT1I
VE1MRWxlbWVudAotdWwgaW50ZXJmYWNlTmFtZT1IVE1MVUxpc3RFbGVtZW50Ci12YXIgaW50ZXJm
YWNlTmFtZT1IVE1MRWxlbWVudAotdmlkZW8gd3JhcHBlck9ubHlJZk1lZGlhSXNBdmFpbGFibGUs
Y29uZGl0aW9uYWw9VklERU8KLXdiciBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci14bXAgaW50
ZXJmYWNlTmFtZT1IVE1MUHJlRWxlbWVudAorb2JqZWN0IGNvbnN0cnVjdG9yTmVlZHNDcmVhdGVk
QnlQYXJzZXIsIGNyZWF0ZVdpdGhOZXcKK29sIGludGVyZmFjZU5hbWU9SFRNTE9MaXN0RWxlbWVu
dCwgY3JlYXRlV2l0aE5ldworb3B0Z3JvdXAgaW50ZXJmYWNlTmFtZT1IVE1MT3B0R3JvdXBFbGVt
ZW50LCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK29wdGlvbiBj
b25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK3AgaW50ZXJmYWNlTmFt
ZT1IVE1MUGFyYWdyYXBoRWxlbWVudCwgY3JlYXRlV2l0aE5ldworcGFyYW0gY3JlYXRlV2l0aE5l
dworcGxhaW50ZXh0IGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK3By
ZSBjcmVhdGVXaXRoTmV3CitxIGludGVyZmFjZU5hbWU9SFRNTFF1b3RlRWxlbWVudCwgY3JlYXRl
V2l0aE5ldworcnAgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldworcnQg
aW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldworcnVieSBpbnRlcmZhY2VO
YW1lPUhUTUxFbGVtZW50LCBjcmVhdGVXaXRoTmV3CitzIGludGVyZmFjZU5hbWU9SFRNTEVsZW1l
bnQsIGNyZWF0ZVdpdGhOZXcKK3NhbXAgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudCwgY3JlYXRl
V2l0aE5ldworc2NyaXB0IGNvbnN0cnVjdG9yTmVlZHNDcmVhdGVkQnlQYXJzZXIsIGNyZWF0ZVdp
dGhOZXcKK3NlbGVjdCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcK
K3NtYWxsIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK3NvdXJjZSB3
cmFwcGVyT25seUlmTWVkaWFJc0F2YWlsYWJsZSwgY29uZGl0aW9uYWw9VklERU8sIGNyZWF0ZVdp
dGhOZXcKK3NwYW4gaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldworc3Ry
aWtlIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK3N0cm9uZyBpbnRl
cmZhY2VOYW1lPUhUTUxFbGVtZW50LCBjcmVhdGVXaXRoTmV3CitzdHlsZSBjb25zdHJ1Y3Rvck5l
ZWRzQ3JlYXRlZEJ5UGFyc2VyLCBjcmVhdGVXaXRoTmV3CitzdWIgaW50ZXJmYWNlTmFtZT1IVE1M
RWxlbWVudCwgY3JlYXRlV2l0aE5ldworc3VwIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQsIGNy
ZWF0ZVdpdGhOZXcKK3RhYmxlIGNyZWF0ZVdpdGhOZXcKK3Rib2R5IGludGVyZmFjZU5hbWU9SFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK3RkIGludGVyZmFjZU5hbWU9SFRN
TFRhYmxlQ2VsbEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK3RleHRhcmVhIGludGVyZmFjZU5hbWU9
SFRNTFRleHRBcmVhRWxlbWVudCwgY29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50LCBjcmVhdGVX
aXRoTmV3Cit0Zm9vdCBpbnRlcmZhY2VOYW1lPUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LCBjcmVh
dGVXaXRoTmV3Cit0aCBpbnRlcmZhY2VOYW1lPUhUTUxUYWJsZUNlbGxFbGVtZW50LCBjcmVhdGVX
aXRoTmV3Cit0aGVhZCBpbnRlcmZhY2VOYW1lPUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LCBjcmVh
dGVXaXRoTmV3Cit0aXRsZSBjcmVhdGVXaXRoTmV3Cit0ciBpbnRlcmZhY2VOYW1lPUhUTUxUYWJs
ZVJvd0VsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK3R0IGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQs
IGNyZWF0ZVdpdGhOZXcKK3UgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5l
dwordWwgaW50ZXJmYWNlTmFtZT1IVE1MVUxpc3RFbGVtZW50LCBjcmVhdGVXaXRoTmV3Cit2YXIg
aW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldwordmlkZW8gd3JhcHBlck9u
bHlJZk1lZGlhSXNBdmFpbGFibGUsIGNvbmRpdGlvbmFsPVZJREVPLCBjcmVhdGVXaXRoTmV3Cit3
YnIgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldworeG1wIGludGVyZmFj
ZU5hbWU9SFRNTFByZUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L01lZGlhRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL01lZGlhRG9j
dW1lbnQuY3BwCShyZXZpc2lvbiA0NzQyOCkKKysrIFdlYkNvcmUvbG9hZGVyL01lZGlhRG9jdW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsOCArMjI2LDggQEAgdm9pZCBNZWRpYURvY3Vt
ZW50OjpyZXBsYWNlTWVkaWFFbGVtZW50VAogICAgICAgICBlbWJlZEVsZW1lbnQtPnNldEF0dHJp
YnV0ZSh3aWR0aEF0dHIsICIxMDAlIik7CiAgICAgICAgIGVtYmVkRWxlbWVudC0+c2V0QXR0cmli
dXRlKGhlaWdodEF0dHIsICIxMDAlIik7CiAgICAgICAgIGVtYmVkRWxlbWVudC0+c2V0QXR0cmli
dXRlKG5hbWVBdHRyLCAicGx1Z2luIik7Ci0gICAgICAgIGVtYmVkRWxlbWVudC0+c2V0U3JjKHVy
bCgpLnN0cmluZygpKTsKLSAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRUeXBlKGZyYW1lKCktPmxv
YWRlcigpLT5yZXNwb25zZU1JTUVUeXBlKCkpOworICAgICAgICBlbWJlZEVsZW1lbnQtPnNldEF0
dHJpYnV0ZShzcmNBdHRyLCB1cmwoKS5zdHJpbmcoKSk7CisgICAgICAgIGVtYmVkRWxlbWVudC0+
c2V0QXR0cmlidXRlKHR5cGVBdHRyLCBmcmFtZSgpLT5sb2FkZXIoKS0+cmVzcG9uc2VNSU1FVHlw
ZSgpKTsKIAogICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgICAgICB2aWRlb0VsZW1lbnQt
PnBhcmVudCgpLT5yZXBsYWNlQ2hpbGQoZW1iZWRFbGVtZW50LCB2aWRlb0VsZW1lbnQsIGVjKTsK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDQ3NDI4KQorKysgV2Vi
Q29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw4ICs4
OCw4IEBAIHZvaWQgUGx1Z2luVG9rZW5pemVyOjpjcmVhdGVEb2N1bWVudFN0cnUKICAgICBtX2Vt
YmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKGhlaWdodEF0dHIsICIxMDAlIik7CiAgICAgCiAgICAg
bV9lbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZShuYW1lQXR0ciwgInBsdWdpbiIpOwotICAgIG1f
ZW1iZWRFbGVtZW50LT5zZXRTcmMobV9kb2MtPnVybCgpLnN0cmluZygpKTsKLSAgICBtX2VtYmVk
RWxlbWVudC0+c2V0VHlwZShtX2RvYy0+ZnJhbWUoKS0+bG9hZGVyKCktPnJlc3BvbnNlTUlNRVR5
cGUoKSk7CisgICAgbV9lbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZShzcmNBdHRyLCBtX2RvYy0+
dXJsKCkuc3RyaW5nKCkpOworICAgIG1fZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUodHlwZUF0
dHIsIG1fZG9jLT5mcmFtZSgpLT5sb2FkZXIoKS0+cmVzcG9uc2VNSU1FVHlwZSgpKTsKICAgICAK
ICAgICBib2R5LT5hcHBlbmRDaGlsZChlbWJlZEVsZW1lbnQsIGVjKTsgICAgCiB9CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0T2JqZWN0LmNwcAkocmV2aXNpb24gNDc0MjgpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgyLDcgKzI4Miw3IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KGJvb2wK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBib29sIHN1Y2Nl
c3MgPSBmcmFtZS0+bG9hZGVyKCktPnJlcXVlc3RPYmplY3QodGhpcywgdXJsLCBBdG9taWNTdHJp
bmcoby0+bmFtZSgpKSwgc2VydmljZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsKKyAg
ICAgICAgYm9vbCBzdWNjZXNzID0gZnJhbWUtPmxvYWRlcigpLT5yZXF1ZXN0T2JqZWN0KHRoaXMs
IHVybCwgby0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSwgc2VydmljZVR5cGUsIHBhcmFtTmFtZXMs
IHBhcmFtVmFsdWVzKTsKICAgICAgICAgaWYgKCFzdWNjZXNzICYmIG1faGFzRmFsbGJhY2tDb250
ZW50KQogICAgICAgICAgICAgby0+cmVuZGVyRmFsbGJhY2tDb250ZW50KCk7CiAgICAgfSBlbHNl
IGlmIChub2RlKCktPmhhc1RhZ05hbWUoZW1iZWRUYWcpKSB7CkluZGV4OiBXZWJDb3JlL3N2Zy9z
dmd0YWdzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL3N2Z3RhZ3MuaW4JKHJldmlzaW9u
IDQ3NDI4KQorKysgV2ViQ29yZS9zdmcvc3ZndGFncy5pbgkod29ya2luZyBjb3B5KQpAQCAtMywx
MTQgKzMsMTE0IEBAIG5hbWVzcGFjZVVSST0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcKIGd1
YXJkRmFjdG9yeVdpdGg9IkVOQUJMRShTVkcpIgogZXhwb3J0U3RyaW5ncwogCi1hCithIGNyZWF0
ZVdpdGhOZXcKICNpZiBFTkFCTEVfU1ZHX0ZPTlRTCi1hbHRHbHlwaAorYWx0R2x5cGggY3JlYXRl
V2l0aE5ldwogI2VuZGlmCiAjaWYgMAotYWx0R2x5cGhEZWYKLWFsdEdseXBoSXRlbQorYWx0R2x5
cGhEZWYgY3JlYXRlV2l0aE5ldworYWx0R2x5cGhJdGVtIGNyZWF0ZVdpdGhOZXcKICNlbmRpZgog
I2lmIEVOQUJMRV9TVkdfQU5JTUFUSU9OCi1hbmltYXRlCi1hbmltYXRlQ29sb3IKLWFuaW1hdGVN
b3Rpb24gSlNJbnRlcmZhY2VOYW1lPVNWR0VsZW1lbnQKLWFuaW1hdGVUcmFuc2Zvcm0KLXNldAor
YW5pbWF0ZSBjcmVhdGVXaXRoTmV3CithbmltYXRlQ29sb3IgY3JlYXRlV2l0aE5ldworYW5pbWF0
ZU1vdGlvbiBKU0ludGVyZmFjZU5hbWU9U1ZHRWxlbWVudCwgY3JlYXRlV2l0aE5ldworYW5pbWF0
ZVRyYW5zZm9ybSBjcmVhdGVXaXRoTmV3CitzZXQgY3JlYXRlV2l0aE5ldwogI2VuZGlmCi1jaXJj
bGUKLWNsaXBQYXRoCitjaXJjbGUgY3JlYXRlV2l0aE5ldworY2xpcFBhdGggY3JlYXRlV2l0aE5l
dwogI2lmIDAKLWNvbG9yX3Byb2ZpbGUKK2NvbG9yX3Byb2ZpbGUgY3JlYXRlV2l0aE5ldwogI2Vu
ZGlmCi1jdXJzb3IKK2N1cnNvciBjcmVhdGVXaXRoTmV3CiAjaWYgRU5BQkxFX1NWR19GT05UUwot
ZGVmaW5pdGlvbl9zcmMKK2RlZmluaXRpb25fc3JjIGNyZWF0ZVdpdGhOZXcKICNlbmRpZgotZGVm
cwotZGVzYwotZWxsaXBzZQorZGVmcyBjcmVhdGVXaXRoTmV3CitkZXNjIGNyZWF0ZVdpdGhOZXcK
K2VsbGlwc2UgY3JlYXRlV2l0aE5ldwogI2lmIEVOQUJMRV9GSUxURVJTCi1mZUJsZW5kCi1mZUNv
bG9yTWF0cml4Ci1mZUNvbXBvbmVudFRyYW5zZmVyCi1mZUNvbXBvc2l0ZQotI2lmIDAKLWZlQ29u
dm9sdmVNYXRyaXgKLSNlbmRpZgotZmVEaWZmdXNlTGlnaHRpbmcKLWZlRGlzcGxhY2VtZW50TWFw
Ci1mZURpc3RhbnRMaWdodAotZmVGbG9vZAotZmVGdW5jQQotZmVGdW5jQgotZmVGdW5jRwotZmVG
dW5jUgotZmVHYXVzc2lhbkJsdXIKLWZlSW1hZ2UKLWZlTWVyZ2UKLWZlTWVyZ2VOb2RlCi0jaWYg
MAotZmVNb3JwaG9sb2d5Ci0jZW5kaWYKLWZlT2Zmc2V0Ci1mZVBvaW50TGlnaHQKLWZlU3BlY3Vs
YXJMaWdodGluZwotZmVTcG90TGlnaHQKLWZlVGlsZQotZmVUdXJidWxlbmNlCi1maWx0ZXIKLSNl
bmRpZgotI2lmIEVOQUJMRV9TVkdfRk9OVFMKLWZvbnQKLWZvbnRfZmFjZQotZm9udF9mYWNlX2Zv
cm1hdAotZm9udF9mYWNlX25hbWUKLWZvbnRfZmFjZV9zcmMKLWZvbnRfZmFjZV91cmkKK2ZlQmxl
bmQgY3JlYXRlV2l0aE5ldworZmVDb2xvck1hdHJpeCBjcmVhdGVXaXRoTmV3CitmZUNvbXBvbmVu
dFRyYW5zZmVyIGNyZWF0ZVdpdGhOZXcKK2ZlQ29tcG9zaXRlIGNyZWF0ZVdpdGhOZXcKKyNpZiAw
CitmZUNvbnZvbHZlTWF0cml4IGNyZWF0ZVdpdGhOZXcKKyNlbmRpZgorZmVEaWZmdXNlTGlnaHRp
bmcgY3JlYXRlV2l0aE5ldworZmVEaXNwbGFjZW1lbnRNYXAgY3JlYXRlV2l0aE5ldworZmVEaXN0
YW50TGlnaHQgY3JlYXRlV2l0aE5ldworZmVGbG9vZCBjcmVhdGVXaXRoTmV3CitmZUZ1bmNBIGNy
ZWF0ZVdpdGhOZXcKK2ZlRnVuY0IgY3JlYXRlV2l0aE5ldworZmVGdW5jRyBjcmVhdGVXaXRoTmV3
CitmZUZ1bmNSIGNyZWF0ZVdpdGhOZXcKK2ZlR2F1c3NpYW5CbHVyIGNyZWF0ZVdpdGhOZXcKK2Zl
SW1hZ2UgY3JlYXRlV2l0aE5ldworZmVNZXJnZSBjcmVhdGVXaXRoTmV3CitmZU1lcmdlTm9kZSBj
cmVhdGVXaXRoTmV3CisjaWYgMAorZmVNb3JwaG9sb2d5IGNyZWF0ZVdpdGhOZXcKKyNlbmRpZgor
ZmVPZmZzZXQgY3JlYXRlV2l0aE5ldworZmVQb2ludExpZ2h0IGNyZWF0ZVdpdGhOZXcKK2ZlU3Bl
Y3VsYXJMaWdodGluZyBjcmVhdGVXaXRoTmV3CitmZVNwb3RMaWdodCBjcmVhdGVXaXRoTmV3Citm
ZVRpbGUgY3JlYXRlV2l0aE5ldworZmVUdXJidWxlbmNlIGNyZWF0ZVdpdGhOZXcKK2ZpbHRlciBj
cmVhdGVXaXRoTmV3CisjZW5kaWYKKyNpZiBFTkFCTEVfU1ZHX0ZPTlRTCitmb250IGNyZWF0ZVdp
dGhOZXcKK2ZvbnRfZmFjZSBjcmVhdGVXaXRoTmV3Citmb250X2ZhY2VfZm9ybWF0IGNyZWF0ZVdp
dGhOZXcKK2ZvbnRfZmFjZV9uYW1lIGNyZWF0ZVdpdGhOZXcKK2ZvbnRfZmFjZV9zcmMgY3JlYXRl
V2l0aE5ldworZm9udF9mYWNlX3VyaSBjcmVhdGVXaXRoTmV3CiAjZW5kaWYKICNpZiBFTkFCTEVf
U1ZHX0ZPUkVJR05fT0JKRUNUCi1mb3JlaWduT2JqZWN0Citmb3JlaWduT2JqZWN0IGNyZWF0ZVdp
dGhOZXcKICNlbmRpZgotZworZyBjcmVhdGVXaXRoTmV3CiAjaWYgRU5BQkxFX1NWR19GT05UUwot
Z2x5cGgKK2dseXBoIGNyZWF0ZVdpdGhOZXcKICNlbmRpZgogI2lmIDAKLWdseXBoUmVmCitnbHlw
aFJlZiBjcmVhdGVXaXRoTmV3CiAjZW5kaWYKICNpZiBFTkFCTEVfU1ZHX0ZPTlRTCi1oa2VybiBp
bnRlcmZhY2VOYW1lPVNWR0hLZXJuRWxlbWVudCwgSlNJbnRlcmZhY2VOYW1lPVNWR0VsZW1lbnQK
LSNlbmRpZgotaW1hZ2UKLWxpbmUKLWxpbmVhckdyYWRpZW50Ci1tYXJrZXIKLW1hc2sKLW1ldGFk
YXRhCi0jaWYgRU5BQkxFX1NWR19GT05UUwotbWlzc2luZ19nbHlwaAotI2VuZGlmCi1tcGF0aCBp
bnRlcmZhY2VOYW1lPVNWR01QYXRoRWxlbWVudCwgSlNJbnRlcmZhY2VOYW1lPVNWR0VsZW1lbnQK
LXBhdGgKLXBhdHRlcm4KLXBvbHlnb24KLXBvbHlsaW5lCi1yYWRpYWxHcmFkaWVudAotcmVjdAot
c2NyaXB0IGNvbnN0cnVjdG9yTmVlZHNDcmVhdGVkQnlQYXJzZXIKLXN0b3AKLXN0eWxlIGNvbnN0
cnVjdG9yTmVlZHNDcmVhdGVkQnlQYXJzZXIKLXN2ZyBpbnRlcmZhY2VOYW1lPVNWR1NWR0VsZW1l
bnQKLXN3aXRjaAotc3ltYm9sCi10ZXh0Ci10ZXh0UGF0aAotdGl0bGUKLXRyZWYgaW50ZXJmYWNl
TmFtZT1TVkdUUmVmRWxlbWVudAotdHNwYW4gaW50ZXJmYWNlTmFtZT1TVkdUU3BhbkVsZW1lbnQK
LXVzZQotdmlldworaGtlcm4gaW50ZXJmYWNlTmFtZT1TVkdIS2VybkVsZW1lbnQsIEpTSW50ZXJm
YWNlTmFtZT1TVkdFbGVtZW50LCBjcmVhdGVXaXRoTmV3CisjZW5kaWYKK2ltYWdlIGNyZWF0ZVdp
dGhOZXcKK2xpbmUgY3JlYXRlV2l0aE5ldworbGluZWFyR3JhZGllbnQgY3JlYXRlV2l0aE5ldwor
bWFya2VyIGNyZWF0ZVdpdGhOZXcKK21hc2sgY3JlYXRlV2l0aE5ldworbWV0YWRhdGEgY3JlYXRl
V2l0aE5ldworI2lmIEVOQUJMRV9TVkdfRk9OVFMKK21pc3NpbmdfZ2x5cGggY3JlYXRlV2l0aE5l
dworI2VuZGlmCittcGF0aCBpbnRlcmZhY2VOYW1lPVNWR01QYXRoRWxlbWVudCwgSlNJbnRlcmZh
Y2VOYW1lPVNWR0VsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK3BhdGggY3JlYXRlV2l0aE5ldworcGF0
dGVybiBjcmVhdGVXaXRoTmV3Citwb2x5Z29uIGNyZWF0ZVdpdGhOZXcKK3BvbHlsaW5lIGNyZWF0
ZVdpdGhOZXcKK3JhZGlhbEdyYWRpZW50IGNyZWF0ZVdpdGhOZXcKK3JlY3QgY3JlYXRlV2l0aE5l
dworc2NyaXB0IGNvbnN0cnVjdG9yTmVlZHNDcmVhdGVkQnlQYXJzZXIsIGNyZWF0ZVdpdGhOZXcK
K3N0b3AgY3JlYXRlV2l0aE5ldworc3R5bGUgY29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNl
ciwgY3JlYXRlV2l0aE5ldworc3ZnIGludGVyZmFjZU5hbWU9U1ZHU1ZHRWxlbWVudCwgY3JlYXRl
V2l0aE5ldworc3dpdGNoIGNyZWF0ZVdpdGhOZXcKK3N5bWJvbCBjcmVhdGVXaXRoTmV3Cit0ZXh0
IGNyZWF0ZVdpdGhOZXcKK3RleHRQYXRoIGNyZWF0ZVdpdGhOZXcKK3RpdGxlIGNyZWF0ZVdpdGhO
ZXcKK3RyZWYgaW50ZXJmYWNlTmFtZT1TVkdUUmVmRWxlbWVudCwgY3JlYXRlV2l0aE5ldwordHNw
YW4gaW50ZXJmYWNlTmFtZT1TVkdUU3BhbkVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK3VzZSBjcmVh
dGVXaXRoTmV3Cit2aWV3IGNyZWF0ZVdpdGhOZXcKICNpZiAwCi12a2VybiBpbnRlcmZhY2VOYW1l
PVNWR1ZLZXJuRWxlbWVudAordmtlcm4gaW50ZXJmYWNlTmFtZT1TVkdWS2VybkVsZW1lbnQsIGNy
ZWF0ZVdpdGhOZXcKICNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01MVGFnTmFtZXMuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGFnTmFtZXMuaW4JKHJldmlzaW9uIDQ3NDI4KQor
KysgV2ViQ29yZS93bWwvV01MVGFnTmFtZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIsMzQgKzIs
MzQgQEAgbmFtZXNwYWNlPSJXTUwiCiBuYW1lc3BhY2VVUkk9Imh0dHA6Ly93d3cud2FwZm9ydW0u
b3JnL0RURC93bWxfMS4xLnhtbCIKIGd1YXJkRmFjdG9yeVdpdGg9IkVOQUJMRShXTUwpIgogCi1h
Ci1hY2Nlc3MKLWFuY2hvcgotYnIgaW50ZXJmYWNlTmFtZT1XTUxCUkVsZW1lbnQKLWNhcmQKLWRv
Ci1maWVsZHNldCBpbnRlcmZhY2VOYW1lPVdNTEZpZWxkU2V0RWxlbWVudAotZ28KLWhlYWQgaW50
ZXJmYWNlTmFtZT1XTUxFbGVtZW50Ci1pbWcgaW50ZXJmYWNlTmFtZT1XTUxJbWFnZUVsZW1lbnQK
LWlucHV0CithIGNyZWF0ZVdpdGhOZXcKK2FjY2VzcyBjcmVhdGVXaXRoTmV3CithbmNob3IgY3Jl
YXRlV2l0aE5ldworYnIgaW50ZXJmYWNlTmFtZT1XTUxCUkVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcK
K2NhcmQgY3JlYXRlV2l0aE5ldworZG8gY3JlYXRlV2l0aE5ldworZmllbGRzZXQgaW50ZXJmYWNl
TmFtZT1XTUxGaWVsZFNldEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2dvIGNyZWF0ZVdpdGhOZXcK
K2hlYWQgaW50ZXJmYWNlTmFtZT1XTUxFbGVtZW50LCBjcmVhdGVXaXRoTmV3CitpbWcgaW50ZXJm
YWNlTmFtZT1XTUxJbWFnZUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2lucHV0IGNyZWF0ZVdpdGhO
ZXcKICNpZiAwCiAjIE5vdGU6ICdpbnNlcnRlZExlZ2VuZCcgaXMgbm90IGFuIG9mZmljaWFsIFdN
TCBlbGVtZW50IC0gaW50ZXJuYWwgcHVycG9zZSBvbmx5IQogI2VuZGlmCi1pbnNlcnRlZExlZ2Vu
ZCBpbnRlcmZhY2VOYW1lPVdNTEluc2VydGVkTGVnZW5kRWxlbWVudAotbWV0YQotbm9vcAotb25l
dmVudCBpbnRlcmZhY2VOYW1lPVdNTE9uRXZlbnRFbGVtZW50Ci1vcHRncm91cCBpbnRlcmZhY2VO
YW1lPVdNTE9wdEdyb3VwRWxlbWVudAotb3B0aW9uCi1wCi1wb3N0ZmllbGQKLXByZXYKLXJlZnJl
c2gKLXNlbGVjdAotc2V0dmFyCi10YWJsZQotdGQgaW50ZXJmYWNlTmFtZT1XTUxFbGVtZW50Ci10
ZW1wbGF0ZQotdGltZXIKLXRyIGludGVyZmFjZU5hbWU9V01MRWxlbWVudAoraW5zZXJ0ZWRMZWdl
bmQgaW50ZXJmYWNlTmFtZT1XTUxJbnNlcnRlZExlZ2VuZEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcK
K21ldGEgY3JlYXRlV2l0aE5ldworbm9vcCBjcmVhdGVXaXRoTmV3CitvbmV2ZW50IGludGVyZmFj
ZU5hbWU9V01MT25FdmVudEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK29wdGdyb3VwIGludGVyZmFj
ZU5hbWU9V01MT3B0R3JvdXBFbGVtZW50LCBjcmVhdGVXaXRoTmV3CitvcHRpb24gY3JlYXRlV2l0
aE5ldworcCBjcmVhdGVXaXRoTmV3Citwb3N0ZmllbGQgY3JlYXRlV2l0aE5ldworcHJldiBjcmVh
dGVXaXRoTmV3CityZWZyZXNoIGNyZWF0ZVdpdGhOZXcKK3NlbGVjdCBjcmVhdGVXaXRoTmV3Citz
ZXR2YXIgY3JlYXRlV2l0aE5ldwordGFibGUgY3JlYXRlV2l0aE5ldwordGQgaW50ZXJmYWNlTmFt
ZT1XTUxFbGVtZW50LCBjcmVhdGVXaXRoTmV3Cit0ZW1wbGF0ZSBjcmVhdGVXaXRoTmV3Cit0aW1l
ciBjcmVhdGVXaXRoTmV3Cit0ciBpbnRlcmZhY2VOYW1lPVdNTEVsZW1lbnQsIGNyZWF0ZVdpdGhO
ZXcK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>35112</attachid>
            <date>2009-08-19 02:22:40 -0700</date>
            <delta_ts>2009-08-22 23:56:47 -0700</delta_ts>
            <desc>patch 2</desc>
            <filename>RefCount1Patch2.txt</filename>
            <type>text/plain</type>
            <size>67916</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzQ5OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTM0IEBACisyMDA5LTA4LTE5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtl
IERPTSBjbGFzc2VzIHN0YXJ0IHdpdGggYSByZWZlcmVuY2UgY291bnQgb2YgMSwgbGlrZSBhbGwg
b3RoZXIgUmVmQ291bnRlZAorICAgICAgICAKKyAgICAgICAgTmV4dCBzdGVwOiBFbGVtZW50LCBI
VE1MRWxlbWVudCwgSFRNTEFuY2hvckVsZW1lbnQsIEhUTUxBcHBsZXRFbGVtZW50LAorICAgICAg
ICBIVE1MQXJlYUVsZW1lbnQsIEhUTUxFbWJlZEVsZW1lbnQsIEhUTUxGcmFtZUVsZW1lbnQsIEhU
TUxJRnJhbWVFbGVtZW50LAorICAgICAgICBIVE1MT2JqZWN0RWxlbWVudCwgSFRNTFBsdWdJbkVs
ZW1lbnQsIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy5tYWtlOiBGaXggZXJyb3Igc2VlbiBldmVyeSB0aW1lIHdlIGJ1aWxkIGJ5IGVzY2FwaW5nIHRo
ZSAkCisgICAgICAgIGluIHRoZSBidWlsZCBydWxlLCBzaW5jZSB5b3UgaGF2ZSB0byB1c2UgJCQg
Zm9yIHRoYXQgaW4gbWFrZS4KKworICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6IFVwZGF0ZWQu
CisKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTS5tbToKKyAgICAgICAgQWRkZWQgbm93LW5l
ZWRlZCBpbmNsdWRlIG9mIFNWR05hbWVzLmguCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OiBBZGRlZCBub3ctbmVlZGVkIGluY2x1ZGUgb2YgU1ZHTmFtZXMuaC4KKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjpjcmVhdGVFbGVtZW50KTogVXNlIGNyZWF0ZSBpbnN0ZWFkIG9mIG5ldy4K
KworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OkVsZW1lbnQpOiBBZGRlZCBDb25zdHJ1Y3Rpb25UeXBlIGFyZ3VtZW50IHNvIHRoZSBjYWxsZXIK
KyAgICAgICAgY2FuIGRldGVybWluZSB3aGV0aGVyIHRoaXMgc3RhcnRzIHdpdGggYSByZWZlcmVu
Y2UgY291bnQgb2YgZWl0aGVyIDAgb3IgMS4KKyAgICAgICAgTGF0ZXIgd2Ugd2lsbCByZW1vdmUg
dGhpcyBhZ2FpbiBvbmNlIHRoZXkgYXJlIGFsbCAxLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dDo6Y3JlYXRlKTogQWRkZWQuCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOiBBZGRlZCBjcmVh
dGUgYW5kIG1hZGUgY29uc3RydWN0b3IgcHJvdGVjdGVkLgorCisgICAgICAgICogZG9tL1N0eWxl
ZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6U3R5bGVkRWxl
bWVudCk6IEFkZGVkIENvbnN0cnVjdGlvblR5cGUgYXJndW1lbnQuCisgICAgICAgICogZG9tL1N0
eWxlZEVsZW1lbnQuaDogTWFkZSBtYW55IGZ1bmN0aW9ucyBwcm90ZWN0ZWQgb3IgcHJpdmF0ZSwg
aW5jbHVkaW5nCisgICAgICAgIHRoZSBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIGRvbS9tYWtl
X25hbWVzLnBsOiBVc2UgY3JlYXRlIHRvIGNyZWF0ZSB0aGUgYmFzZSBlbGVtZW50cyBIVE1MRWxl
bWVudCwKKyAgICAgICAgU1ZHRWxlbWVudCwgYW5kIFdNTEVsZW1lbnQuCisKKyAgICAgICAgKiBl
ZGl0aW5nL0NyZWF0ZUxpbmtDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0ZUxp
bmtDb21tYW5kOjpkb0FwcGx5KTogVXNlIGNyZWF0ZSBpbnN0ZWFkIG9mIG5ldy4KKyAgICAgICAg
KiBlZGl0aW5nL1VubGlua0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VW5saW5rQ29t
bWFuZDo6ZG9BcHBseSk6IERpdHRvLgorCisgICAgICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6Y3JlYXRlKTogQWRk
ZWQuCisgICAgICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5oOiBNYWRlIGNvbnN0cnVjdG9y
IHByb3RlY3RlZCBhbmQgYWRkZWQgY3JlYXRlLgorICAgICAgICBBbHNvIG1hZGUgbV9yb290RWRp
dGFibGVFbGVtZW50Rm9yU2VsZWN0aW9uT25Nb3VzZURvd24gYSBSZWZQdHIuCisKKyAgICAgICAg
KiBodG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBcHBs
ZXRFbGVtZW50OjpjcmVhdGUpOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxBcHBsZXRFbGVt
ZW50Lmg6IE1hZGUgY29uc3RydWN0b3IgcHJpdmF0ZSBhbmQgYWRkZWQgY3JlYXRlLgorCisgICAg
ICAgICogaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFy
ZWFFbGVtZW50OjpjcmVhdGUpOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVu
dC5oOiBNYWRlIGNvbnN0cnVjdG9yIHByaXZhdGUgYW5kIGFkZGVkIGNyZWF0ZS4KKworICAgICAg
ICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6
OmNyZWF0ZSk6IEFkZGVkLgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuaDogTWFkZSBjb25z
dHJ1Y3RvciBwcm90ZWN0ZWQgYW5kIGFkZGVkIGNyZWF0ZS4KKyAgICAgICAgTWFkZSBvdGhlciBm
dW5jdGlvbnMgcHJvdGVjdGVkIGFuZCBwcml2YXRlLiBBbHNvIGFkZGVkIGlubGluZQorICAgICAg
ICBkZWZpbml0aW9uIG9mIGNvbnN0cnVjdG9yLgorCisgICAgICAgICogaHRtbC9IVE1MRW1iZWRF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQ6OmNyZWF0ZSk6
IEFkZGVkLgorICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5oOiBNYWRlIGNvbnN0cnVj
dG9yIHByaXZhdGUgYW5kIGFkZGVkIGNyZWF0ZS4KKyAgICAgICAgTWFkZSBvdGhlciBmdW5jdGlv
bnMgcHJpdmF0ZS4KKworICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50OjpjcmVhdGUpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKiBodG1sL0hUTUxGcmFtZUVsZW1lbnQuaDogTWFkZSBjb25zdHJ1Y3RvciBwcml2YXRlIGFu
ZCBhZGRlZCBjcmVhdGUuCisgICAgICAgIE1hZGUgb3RoZXIgZnVuY3Rpb25zIHByaXZhdGUuCisK
KyAgICAgICAgKiBodG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmg6IE1hZGUgZnVuY3Rpb25zIHBy
b3RlY3RlZCBhbmQgcHJpdmF0ZS4KKworICAgICAgICAqIGh0bWwvSFRNTEZyYW1lT3duZXJFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudDo6SFRNTEZy
YW1lT3duZXJFbGVtZW50KTogUGFzcworICAgICAgICBDcmVhdGVFbGVtZW50IHNvIHJlZmVyZW5j
ZSBjb3VudCBzdGFydHMgYXQgMS4KKworICAgICAgICAqIGh0bWwvSFRNTEZyYW1lT3duZXJFbGVt
ZW50Lmg6IE1hZGUgZnVuY3Rpb25zIHByb3RlY3RlZCBhbmQgcHJpdmF0ZS4KKworICAgICAgICAq
IGh0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElGcmFt
ZUVsZW1lbnQ6OmNyZWF0ZSk6IEFkZGVkLgorICAgICAgICAqIGh0bWwvSFRNTElGcmFtZUVsZW1l
bnQuaDogTWFkZSBjb25zdHJ1Y3RvciBwcml2YXRlIGFuZCBhZGRlZCBjcmVhdGUuCisgICAgICAg
IE1hZGUgb3RoZXIgZnVuY3Rpb25zIHByaXZhdGUuCisKKyAgICAgICAgKiBodG1sL0hUTUxPYmpl
Y3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpjcmVh
dGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojpjb250YWlu
c0phdmFBcHBsZXQpOiBDaGFuZ2VkIHdoaWxlIGxvb3AKKyAgICAgICAgaW50byBhIGZvciBsb29w
IGFuZCB0d2Vha2VkIGZvcm1hdHRpbmcuCisKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVt
ZW50Lmg6IE1hZGUgY29uc3RydWN0b3IgcHJpdmF0ZSBhbmQgYWRkZWQgY3JlYXRlLgorICAgICAg
ICBNYWRlIG90aGVyIGZ1bmN0aW9ucyBwcml2YXRlLgorCisgICAgICAgICogaHRtbC9IVE1MUGx1
Z0luRWxlbWVudC5oOiBNYWRlIGNvbnN0cnVjdG9yIHByb3RlY3RlZC4KKyAgICAgICAgTWFkZSBv
dGhlciBmdW5jdGlvbnMgcHJvdGVjdGVkIGFuZCBwcml2YXRlLgorCisgICAgICAgICogaHRtbC9I
VE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmg6IE1hZGUgY29uc3RydWN0b3IgYW5kIGFub3RoZXIgZnVu
Y3Rpb24KKyAgICAgICAgcHJvdGVjdGVkLgorCisgICAgICAgICogaHRtbC9IVE1MVGFnTmFtZXMu
aW46IFJlbW92ZWQgY3JlYXRlV2l0aE5ldyBmcm9tIGFsbCBjbGFzc2VzIHRoYXQKKyAgICAgICAg
bm93IGhhdmUgY3JlYXRlIGZ1bmN0aW9ucy4gTW92ZWQgY29uZGl0aW9uYWwgbm9zY3JpcHQgdG8g
YSBzZXBhcmF0ZQorICAgICAgICBwYXJhZ3JhcGguCisKKyAgICAgICAgKiBodG1sL0hUTUxWaWV3
U291cmNlRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFZpZXdTb3VyY2VEb2N1
bWVudDo6YWRkU3BhbldpdGhDbGFzc05hbWUpOiBVc2UgY3JlYXRlLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6YWRkTGluayk6IERpdHRvLgorICAgICAgICAqIHBh
Z2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZG9jdW1lbnRGcmFnbWVu
dEZyb21EcmFnRGF0YSk6IERpdHRvLgorCisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6U1ZHRWxlbWVudCk6IFBhc3MgQ3JlYXRlRWxl
bWVudFplcm9SZWZDb3VudAorICAgICAgICBzbyByZWZlcmVuY2UgY291bnQgc3RpbGwgc3RhcnRz
IGF0IDAuIFdpbGwgY2hhbmdlIHRoaXMgY2xhc3MgbGF0ZXIuCisgICAgICAgIChXZWJDb3JlOjpT
VkdFbGVtZW50OjpjcmVhdGUpOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5oOiBB
ZGRlZCBjcmVhdGUsIG1hZGUgY29uc3RydWN0b3IgcHJvdGVjdGVkLCBhbmQKKyAgICAgICAgbWFk
ZSBvdGhlciBmdW5jdGlvbnMgcHJvdGVjdGVkIGFuZCBwcml2YXRlLiBSZW1vdmVkIHVubmVlZGVk
CisgICAgICAgIFNWR05hbWVzLmggaW5jbHVkZS4KKworICAgICAgICAqIHN2Zy9TVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkLmg6IEFkZGVkIG5vdy1uZWVkZWQgU1ZHTmFtZXMuaAorICAgICAg
ICBpbmNsdWRlLgorCisgICAgICAgICogc3ZnL1NWR1N0b3BFbGVtZW50Lmg6IEFkZGVkIG5vdy1u
ZWVkZWQgU1ZHTmFtZXMuaCBpbmNsdWRlLgorICAgICAgICBNYWRlIGZ1bmN0aW9ucyBwcml2YXRl
LgorCisgICAgICAgICogd21sL1dNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V01M
RWxlbWVudDo6V01MRWxlbWVudCk6IFBhc3MgQ3JlYXRlRWxlbWVudFplcm9SZWZDb3VudAorICAg
ICAgICBzbyByZWZlcmVuY2UgY291bnQgc3RpbGwgc3RhcnRzIGF0IDAuIFdpbGwgY2hhbmdlIHRo
aXMgY2xhc3MgbGF0ZXIuCisgICAgICAgIChXZWJDb3JlOjpXTUxFbGVtZW50OjpjcmVhdGUpOiBB
ZGRlZC4KKyAgICAgICAgKiB3bWwvV01MRWxlbWVudC5oOiBBZGRlZCBjcmVhdGUgYW5kIG1hZGUg
Y29uc3RydWN0b3IgcHJvdGVjdGVkLgorCisgICAgICAgICogd21sL1dNTFRhZ05hbWVzLmluOiBS
ZW1vdmVkIGNyZWF0ZVdpdGhOZXcgZnJvbSBXTUxFbGVtZW50LgorCiAyMDA5LTA4LTE4ICBNYWNp
ZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xp
dmVyIEh1bnQuCkluZGV4OiBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiA0NzQ5OSkKKysrIFdlYkNv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtNDYzLDE0ICs0NjMsMTQg
QEAgZW5kaWYKICMgMi4gTGluZXMgY29udGFpbmluZyBvbmx5IHdoaXRlc3BhY2UKICMgVGhlc2Ug
dHdvIHR5cGVzIG9mIGxpbmVzIHdpbGwgYmUgaWdub3JlZCBieSBtYWtle3Byb3AsdmFsdWVzfS5w
bC4KIENTU1Byb3BlcnR5TmFtZXMuaCA6ICQoV0VCQ09SRV9DU1NfUFJPUEVSVFlfTkFNRVMpIGNz
cy9tYWtlcHJvcC5wbAotCWlmIHNvcnQgJChXRUJDT1JFX0NTU19QUk9QRVJUWV9OQU1FUykgfCB1
bmlxIC1kIHwgZ3JlcCAtRSAtdiAnKF4jKXwoXltbOnNwYWNlOl1dKiQpJzsgdGhlbiBlY2hvICdE
dXBsaWNhdGUgdmFsdWUhJzsgZXhpdCAxOyBmaQorCWlmIHNvcnQgJChXRUJDT1JFX0NTU19QUk9Q
RVJUWV9OQU1FUykgfCB1bmlxIC1kIHwgZ3JlcCAtRSAtdiAnKF4jKXwoXltbOnNwYWNlOl1dKiQk
KSc7IHRoZW4gZWNobyAnRHVwbGljYXRlIHZhbHVlISc7IGV4aXQgMTsgZmkKIAljYXQgJChXRUJD
T1JFX0NTU19QUk9QRVJUWV9OQU1FUykgPiBDU1NQcm9wZXJ0eU5hbWVzLmluCiAJcGVybCAiJChX
ZWJDb3JlKS9jc3MvbWFrZXByb3AucGwiCiAKIENTU1ZhbHVlS2V5d29yZHMuaCA6ICQoV0VCQ09S
RV9DU1NfVkFMVUVfS0VZV09SRFMpIGNzcy9tYWtldmFsdWVzLnBsCiAJIyBMb3dlciBjYXNlIGFs
bCB0aGUgdmFsdWVzLCBhcyBDU1MgdmFsdWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlCiAJcGVybCAt
bmUgJ3ByaW50IGxjJyAkKFdFQkNPUkVfQ1NTX1ZBTFVFX0tFWVdPUkRTKSA+IENTU1ZhbHVlS2V5
d29yZHMuaW4KLQlpZiBzb3J0IENTU1ZhbHVlS2V5d29yZHMuaW4gfCB1bmlxIC1kIHwgZ3JlcCAt
RSAtdiAnKF4jKXwoXltbOnNwYWNlOl1dKiQpJzsgdGhlbiBlY2hvICdEdXBsaWNhdGUgdmFsdWUh
JzsgZXhpdCAxOyBmaQorCWlmIHNvcnQgQ1NTVmFsdWVLZXl3b3Jkcy5pbiB8IHVuaXEgLWQgfCBn
cmVwIC1FIC12ICcoXiMpfCheW1s6c3BhY2U6XV0qJCQpJzsgdGhlbiBlY2hvICdEdXBsaWNhdGUg
dmFsdWUhJzsgZXhpdCAxOyBmaQogCXBlcmwgIiQoV2ViQ29yZSkvY3NzL21ha2V2YWx1ZXMucGwi
CiAKICMgLS0tLS0tLS0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDQ3NDk5KQorKysgV2ViQ29y
ZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsNiArMzk2LDcgQEAgX19a
TjdXZWJDb3JlMTZpc0VuZE9mUGFyYWdyYXBoRVJLTlNfMTVWaQogX19aTjdXZWJDb3JlMTZ0aHJl
YWRHbG9iYWxEYXRhRXYKIF9fWk43V2ViQ29yZTE3RE9NSW1wbGVtZW50YXRpb24xNGlzVGV4dE1J
TUVUeXBlRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE3R2x5cGhQYWdlVHJlZU5vZGUxOHRy
ZWVHbHlwaFBhZ2VDb3VudEV2CitfX1pON1dlYkNvcmUxN0hUTUxQbHVnSW5FbGVtZW50MTFnZXRO
UE9iamVjdEV2CiBfX1pON1dlYkNvcmUxN2VxdWFsSWdub3JpbmdDYXNlRVBOU18xMFN0cmluZ0lt
cGxFUzFfCiBfX1pON1dlYkNvcmUxOGRlcHJlY2F0ZWRQYXJzZVVSTEVSS05TXzZTdHJpbmdFCiBf
X1pON1dlYkNvcmUxOGlzU3RhcnRPZlBhcmFncmFwaEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL29iamMvRE9NLm1tCShyZXZpc2lvbiA0NzQ5OSkKKysrIFdlYkNvcmUvYmluZGlu
Z3Mvb2JqYy9ET00ubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpZiBFTkFC
TEUoU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKQogI2ltcG9ydCAiRE9NU1ZHLmgiCiAjaW1wb3J0ICJT
VkdFbGVtZW50SW5zdGFuY2UuaCIKKyNpbXBvcnQgIlNWR05hbWVzLmgiCiAjZW5kaWYKIAogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDQ3NDk5KQorKysgV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNiArMTAxLDcgQEAK
ICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
ICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1
ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgpAQCAtNzk1LDcgKzc5Niw3IEBAIFBhc3NSZWZQ
dHI8RWxlbWVudD4gRG9jdW1lbnQ6OmNyZWF0ZUVsZW0KICNlbmRpZgogICAgIAogICAgIGlmICgh
ZSkKLSAgICAgICAgZSA9IG5ldyBFbGVtZW50KHFOYW1lLCBkb2N1bWVudCgpKTsKKyAgICAgICAg
ZSA9IEVsZW1lbnQ6OmNyZWF0ZShxTmFtZSwgZG9jdW1lbnQoKSk7CiAKICAgICAvLyA8aW1hZ2U+
IHVzZXMgaW1nVGFnIHNvIHdlIG5lZWQgYSBzcGVjaWFsIHJ1bGUuCiAjaWYgRU5BQkxFKFdNTCkK
SW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCShyZXZpc2lvbiA0NzQ5OSkKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NywxMiArNTcsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBYTUxOYW1lczsKICAg
ICAKLUVsZW1lbnQ6OkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvY3VtZW50KQotICAgIDogQ29udGFpbmVyTm9kZShkb2N1bWVudCwgQ3JlYXRlRWxlbWVu
dFplcm9SZWZDb3VudCkKK0VsZW1lbnQ6OkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBDb25zdHJ1Y3Rpb25UeXBlIHR5cGUpCisgICAgOiBD
b250YWluZXJOb2RlKGRvY3VtZW50LCB0eXBlKQogICAgICwgbV90YWdOYW1lKHRhZ05hbWUpCiB7
CiB9CiAKK1Bhc3NSZWZQdHI8RWxlbWVudD4gRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIENyZWF0ZUVsZW1lbnQpKTsKK30KKwog
RWxlbWVudDo6fkVsZW1lbnQoKQogewogICAgIGlmIChuYW1lZEF0dHJNYXApCkluZGV4OiBXZWJD
b3JlL2RvbS9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5oCShy
ZXZpc2lvbiA0NzQ5OSkKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDEsNyArNDEsNyBAQCBjbGFzcyBJbnRTaXplOwogCiBjbGFzcyBFbGVtZW50IDogcHVibGlj
IENvbnRhaW5lck5vZGUgewogcHVibGljOgotICAgIEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIHZpcnR1YWwgfkVsZW1lbnQoKTsK
IAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZ2V0SURBdHRyaWJ1dGUoKSBjb25zdDsKQEAgLTIw
OCw2ICsyMDgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRy
b2xDaGFuZ2VFdmVudCgpIHsgfQogCiBwcm90ZWN0ZWQ6CisgICAgRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqLCBDb25zdHJ1Y3Rpb25UeXBlKTsKKwogICAgIHZpcnR1YWwg
dm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJv
bURvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5n
ZWRCeVBhcnNlciA9IGZhbHNlLCBOb2RlKiBiZWZvcmVDaGFuZ2UgPSAwLCBOb2RlKiBhZnRlckNo
YW5nZSA9IDAsIGludCBjaGlsZENvdW50RGVsdGEgPSAwKTsKSW5kZXg6IFdlYkNvcmUvZG9tL1N0
eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA0NzQ5OSkKKysrIFdlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTEsOCArMTExLDggQEAgdm9pZCBTdHlsZWRFbGVtZW50Ojp1cGRh
dGVTdHlsZUF0dHJpYnV0ZQogICAgIG1fc3luY2hyb25pemluZ1N0eWxlQXR0cmlidXRlID0gZmFs
c2U7CiB9CiAKLVN0eWxlZEVsZW1lbnQ6OlN0eWxlZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSwgRG9jdW1lbnQgKmRvYykKLSAgICA6IEVsZW1lbnQobmFtZSwgZG9jKQorU3R5bGVk
RWxlbWVudDo6U3R5bGVkRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBEb2N1bWVu
dCogZG9jdW1lbnQsIENvbnN0cnVjdGlvblR5cGUgdHlwZSkKKyAgICA6IEVsZW1lbnQobmFtZSwg
ZG9jdW1lbnQsIHR5cGUpCiB7CiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmgJKHJldmlzaW9uIDQ3
NDk5KQorKysgV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
LDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5j
b20pCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzgsMTMgKzM4LDExIEBAIGNsYXNzIE1hcHBl
ZEF0dHJpYnV0ZTsKIAogY2xhc3MgU3R5bGVkRWxlbWVudCA6IHB1YmxpYyBFbGVtZW50IHsKIHB1
YmxpYzoKLSAgICBTdHlsZWRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwogICAgIHZpcnR1YWwgflN0eWxlZEVsZW1lbnQoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc1N0
eWxlZEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KICAgICBOYW1lZE1hcHBlZEF0
dHJNYXAqIG1hcHBlZEF0dHJpYnV0ZXMoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxOYW1lZE1hcHBl
ZEF0dHJNYXAqPihuYW1lZEF0dHJNYXAuZ2V0KCkpOyB9CiAgICAgY29uc3QgTmFtZWRNYXBwZWRB
dHRyTWFwKiBtYXBwZWRBdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TmFt
ZWRNYXBwZWRBdHRyTWFwKj4obmFtZWRBdHRyTWFwLmdldCgpKTsgfQorCiAgICAgYm9vbCBoYXNN
YXBwZWRBdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbmFtZWRBdHRyTWFwICYmIG1hcHBlZEF0
dHJpYnV0ZXMoKS0+aGFzTWFwcGVkQXR0cmlidXRlcygpOyB9CiAgICAgYm9vbCBpc01hcHBlZEF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdCB7IE1hcHBlZEF0dHJpYnV0
ZUVudHJ5IHJlcyA9IGVOb25lOyBtYXBUb0VudHJ5KG5hbWUsIHJlcyk7IHJldHVybiByZXMgIT0g
ZU5vbmU7IH0KIApAQCAtNTMsMzggKzUxLDM2IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZENTU1By
b3BlcnR5KE1hcHBlZEF0dHJpYnV0ZSosIGludCBpZCwgaW50IHZhbHVlKTsKICAgICB2b2lkIGFk
ZENTU0ltYWdlUHJvcGVydHkoTWFwcGVkQXR0cmlidXRlKiwgaW50IHByb3BlcnR5SUQsIGNvbnN0
IFN0cmluZyYgdXJsKTsKICAgICB2b2lkIGFkZENTU0NvbG9yKE1hcHBlZEF0dHJpYnV0ZSosIGlu
dCBpZCwgY29uc3QgU3RyaW5nJiBjb2xvcik7Ci0gICAgdm9pZCBjcmVhdGVNYXBwZWREZWNsKE1h
cHBlZEF0dHJpYnV0ZSopOwotICAgIAorCiAgICAgc3RhdGljIENTU01hcHBlZEF0dHJpYnV0ZURl
Y2xhcmF0aW9uKiBnZXRNYXBwZWRBdHRyaWJ1dGVEZWNsKE1hcHBlZEF0dHJpYnV0ZUVudHJ5LCBj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKICAg
ICBzdGF0aWMgdm9pZCBzZXRNYXBwZWRBdHRyaWJ1dGVEZWNsKE1hcHBlZEF0dHJpYnV0ZUVudHJ5
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBD
U1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiopOwogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1h
cHBlZEF0dHJpYnV0ZURlY2woTWFwcGVkQXR0cmlidXRlRW50cnksIGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpOwogCiAgICAgc3RhdGljIENTU01h
cHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKiBnZXRNYXBwZWRBdHRyaWJ1dGVEZWNsKE1hcHBlZEF0
dHJpYnV0ZUVudHJ5LCBBdHRyaWJ1dGUqKTsKICAgICBzdGF0aWMgdm9pZCBzZXRNYXBwZWRBdHRy
aWJ1dGVEZWNsKE1hcHBlZEF0dHJpYnV0ZUVudHJ5LCBBdHRyaWJ1dGUqLCBDU1NNYXBwZWRBdHRy
aWJ1dGVEZWNsYXJhdGlvbiopOwotICAgIAorCiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qIGlubGluZVN0eWxlRGVjbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lU3R5bGVEZWNsLmdl
dCgpOyB9CiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVBZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVE
ZWNscygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIGFkZGl0aW9u
YWxBdHRyaWJ1dGVTdHlsZURlY2xzKFZlY3RvcjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+
Jikge307CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGdldElubGluZVN0eWxlRGVj
bCgpOwogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCk7Ci0gICAgdm9pZCBjcmVhdGVJ
bmxpbmVTdHlsZURlY2woKTsKLSAgICB2b2lkIGRlc3Ryb3lJbmxpbmVTdHlsZURlY2woKTsKICAg
ICB2b2lkIGludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVTdHlsZUF0dHJpYnV0ZSgpIGNvbnN0OwotICAgIAorCiAgICAgY29uc3QgQ2xhc3NOYW1lcyYg
Y2xhc3NOYW1lcygpIGNvbnN0IHsgQVNTRVJUKGhhc0NsYXNzKCkpOyBBU1NFUlQobWFwcGVkQXR0
cmlidXRlcygpKTsgcmV0dXJuIG1hcHBlZEF0dHJpYnV0ZXMoKS0+Y2xhc3NOYW1lcygpOyB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqLCBib29sIHByZXNl
cnZlRGVjbHMgPSBmYWxzZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25z
dDsKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQXR0cmlidXRlTWFwKCkgY29uc3Q7CisKICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8QXR0cmlidXRlPiBjcmVhdGVBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpOwogCitwcm90ZWN0ZWQ6CisgICAg
U3R5bGVkRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBDb25zdHJ1Y3Rp
b25UeXBlKTsKKworICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSos
IGJvb2wgcHJlc2VydmVEZWNscyA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIGNvcHlOb25B
dHRyaWJ1dGVQcm9wZXJ0aWVzKGNvbnN0IEVsZW1lbnQqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBh
ZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdDsKIAot
cHJvdGVjdGVkOgogICAgIC8vIGNsYXNzQXR0cmlidXRlQ2hhbmdlZCgpIGV4aXN0cyB0byBzaGFy
ZSBjb2RlIGJldHdlZW4KICAgICAvLyBwYXJzZU1hcHBlZEF0dHJpYnV0ZSAoY2FsbGVkIHZpYSBz
ZXRBdHRyaWJ1dGUoKSkgYW5kCiAgICAgLy8gc3ZnQXR0cmlidXRlQ2hhbmdlZCAoY2FsbGVkIHdo
ZW4gZWxlbWVudC5jbGFzc05hbWUuYmFzZVZhbHVlIGlzIHNldCkKQEAgLTkyLDYgKzg4LDE3IEBA
IHByb3RlY3RlZDoKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvTmV3T3duZXJEb2N1
bWVudCgpOwogCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZEVsZW1lbnQoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIGNyZWF0ZU1hcHBlZERlY2woTWFwcGVk
QXR0cmlidXRlKik7CisKKyAgICB2b2lkIGNyZWF0ZUlubGluZVN0eWxlRGVjbCgpOworICAgIHZv
aWQgZGVzdHJveUlubGluZVN0eWxlRGVjbCgpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdHls
ZUF0dHJpYnV0ZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUF0dHJpYnV0ZU1h
cCgpIGNvbnN0OworCiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX2lu
bGluZVN0eWxlRGVjbDsKIH07CiAKSW5kZXg6IFdlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbAkocmV2aXNpb24gNDc0OTkpCisr
KyBXZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCSh3b3JraW5nIGNvcHkpCkBAIC0yODIsNyArMjgy
LDcgQEAgc3ViIHByaW50Q29uc3RydWN0b3JJbnRlcmlvcgogICAgIGlmICgkdGFnc3skdGFnTmFt
ZX17d3JhcHBlck9ubHlJZk1lZGlhSXNBdmFpbGFibGV9KSB7CiAgICAgICAgIHByaW50IEYgPDxF
TkQKICAgICBpZiAoIU1lZGlhUGxheWVyOjppc0F2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4g
bmV3IEhUTUxFbGVtZW50KCRjb25zdHJ1Y3RvclRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICAgICAg
cmV0dXJuIEhUTUxFbGVtZW50OjpjcmVhdGUoJGNvbnN0cnVjdG9yVGFnTmFtZSwgZG9jdW1lbnQp
OwogRU5ECiA7CiAgICAgfQpAQCAtNzU2LDcgKzc1Niw3IEBAIGlmICgkcGFyYW1ldGVyc3tuYW1l
c3BhY2V9IGVxICJIVE1MIikgewogICAgIHByaW50IEYgIiAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
KHFOYW1lLCBkb2N1bWVudCwgY3JlYXRlZEJ5UGFyc2VyKTtcbiI7CiB9CiAKLXByaW50IEYgIiAg
ICByZXR1cm4gbmV3ICRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50KHFOYW1lLCBkb2N1bWVu
dCk7XG4iOworcHJpbnQgRiAiICAgIHJldHVybiAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVu
dDo6Y3JlYXRlKHFOYW1lLCBkb2N1bWVudCk7XG4iOwogCiBpZiAoJHBhcmFtZXRlcnN7Z3VhcmRG
YWN0b3J5V2l0aH0pIHsKIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0NyZWF0ZUxpbmtDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQ3JlYXRlTGlua0NvbW1hbmQuY3Bw
CShyZXZpc2lvbiA0NzQ5OSkKKysrIFdlYkNvcmUvZWRpdGluZy9DcmVhdGVMaW5rQ29tbWFuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBDcmVhdGVMaW5rQ29tbWFu
ZDo6ZG9BcHBseSgpCiAgICAgaWYgKGVuZGluZ1NlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAotICAgIFJlZlB0cjxIVE1MQW5jaG9yRWxlbWVudD4gYW5jaG9y
RWxlbWVudCA9IG5ldyBIVE1MQW5jaG9yRWxlbWVudChkb2N1bWVudCgpKTsKKyAgICBSZWZQdHI8
SFRNTEFuY2hvckVsZW1lbnQ+IGFuY2hvckVsZW1lbnQgPSBIVE1MQW5jaG9yRWxlbWVudDo6Y3Jl
YXRlKGRvY3VtZW50KCkpOwogICAgIGFuY2hvckVsZW1lbnQtPnNldEhyZWYobV91cmwpOwogICAg
IAogICAgIGlmIChlbmRpbmdTZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKSW5kZXg6IFdlYkNvcmUv
ZWRpdGluZy9VbmxpbmtDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
VW5saW5rQ29tbWFuZC5jcHAJKHJldmlzaW9uIDQ3NDk5KQorKysgV2ViQ29yZS9lZGl0aW5nL1Vu
bGlua0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNCArMzcsMTMgQEAgVW5saW5r
Q29tbWFuZDo6VW5saW5rQ29tbWFuZChEb2N1bWVudCogZAogCiB2b2lkIFVubGlua0NvbW1hbmQ6
OmRvQXBwbHkoKQogewotICAgIC8vIEZJWE1FOiBJZiBhIGNhcmV0IGlzIGluc2lkZSBhIGxpbmss
IHJlbW92ZSBpdC4KKyAgICAvLyBGSVhNRTogSWYgYSBjYXJldCBpcyBpbnNpZGUgYSBsaW5rLCB3
ZSBzaG91bGQgcmVtb3ZlIGl0LCBidXQgY3VycmVudGx5IHdlIGRvbid0LgogICAgIGlmICghZW5k
aW5nU2VsZWN0aW9uKCkuaXNSYW5nZSgpKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAg
IHB1c2hQYXJ0aWFsbHlTZWxlY3RlZEFuY2hvckVsZW1lbnRzRG93bigpOwogCi0gICAgSFRNTEFu
Y2hvckVsZW1lbnQqIGFuY2hvckVsZW1lbnQgPSBuZXcgSFRNTEFuY2hvckVsZW1lbnQoZG9jdW1l
bnQoKSk7Ci0gICAgcmVtb3ZlU3R5bGVkRWxlbWVudChhbmNob3JFbGVtZW50KTsKKyAgICByZW1v
dmVTdHlsZWRFbGVtZW50KEhUTUxBbmNob3JFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSkpOwog
fQogCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NDk5
KQorKysgV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsMTggKzQwLDIwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKIAotSFRNTEFuY2hvckVsZW1lbnQ6OkhUTUxBbmNob3JFbGVtZW50KERvY3Vt
ZW50KiBkb2N1bWVudCkKLSAgICA6IEhUTUxFbGVtZW50KGFUYWcsIGRvY3VtZW50KQotICAgICwg
bV9yb290RWRpdGFibGVFbGVtZW50Rm9yU2VsZWN0aW9uT25Nb3VzZURvd24oMCkKK0hUTUxBbmNo
b3JFbGVtZW50OjpIVE1MQW5jaG9yRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVu
dCwgQ3JlYXRlRWxlbWVudCkKICAgICAsIG1fd2FzU2hpZnRLZXlEb3duT25Nb3VzZURvd24oZmFs
c2UpCiB7CiB9CiAKLUhUTUxBbmNob3JFbGVtZW50OjpIVE1MQW5jaG9yRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCi0gICAgOiBIVE1MRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCkKLSAgICAsIG1fcm9vdEVkaXRhYmxlRWxlbWVudEZvclNl
bGVjdGlvbk9uTW91c2VEb3duKDApCi0gICAgLCBtX3dhc1NoaWZ0S2V5RG93bk9uTW91c2VEb3du
KGZhbHNlKQorUGFzc1JlZlB0cjxIVE1MQW5jaG9yRWxlbWVudD4gSFRNTEFuY2hvckVsZW1lbnQ6
OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBI
VE1MQW5jaG9yRWxlbWVudChhVGFnLCBkb2N1bWVudCkpOworfQorCitQYXNzUmVmUHRyPEhUTUxB
bmNob3JFbGVtZW50PiBIVE1MQW5jaG9yRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEhUTUxBbmNob3JFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIGJvb2wgSFRN
TEFuY2hvckVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25zdApJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxBbmNob3JFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBbmNo
b3JFbGVtZW50LmgJKHJldmlzaW9uIDQ3NDk5KQorKysgV2ViQ29yZS9odG1sL0hUTUxBbmNob3JF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBIVE1MQW5jaG9yRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CiBw
dWJsaWM6Ci0gICAgSFRNTEFuY2hvckVsZW1lbnQoRG9jdW1lbnQqKTsKLSAgICBIVE1MQW5jaG9y
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxIVE1MQW5jaG9yRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SFRNTEFuY2hvckVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqKTsKIAogICAgIEtVUkwgaHJlZigpIGNvbnN0OwogICAgIHZvaWQgc2V0SHJl
Zihjb25zdCBBdG9taWNTdHJpbmcmKTsKQEAgLTUyLDYgKzUyLDggQEAgcHVibGljOgogICAgIGJv
b2wgaXNMaXZlTGluaygpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CisgICAgSFRNTEFuY2hvckVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisKICAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAKIHByaXZhdGU6CkBAIC03
MCw3ICs3Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBzaG9ydCB0YWJJbmRleCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBkcmFnZ2FibGUoKSBjb25zdDsKIAotICAgIEVsZW1lbnQqIG1f
cm9vdEVkaXRhYmxlRWxlbWVudEZvclNlbGVjdGlvbk9uTW91c2VEb3duOworICAgIFJlZlB0cjxF
bGVtZW50PiBtX3Jvb3RFZGl0YWJsZUVsZW1lbnRGb3JTZWxlY3Rpb25Pbk1vdXNlRG93bjsKICAg
ICBib29sIG1fd2FzU2hpZnRLZXlEb3duT25Nb3VzZURvd247CiB9OwogCkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MQXBwbGV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NDk5KQorKysgV2ViQ29yZS9odG1sL0hU
TUxBcHBsZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTIgKzM0LDE3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTEFw
cGxldEVsZW1lbnQ6OkhUTUxBcHBsZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2MpCi0gICAgOiBIVE1MUGx1Z0luRWxlbWVudCh0YWdOYW1lLCBkb2Mp
CitpbmxpbmUgSFRNTEFwcGxldEVsZW1lbnQ6OkhUTUxBcHBsZXRFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxQbHVnSW5F
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGFwcGxl
dFRhZykpOwogfQogCitQYXNzUmVmUHRyPEhUTUxBcHBsZXRFbGVtZW50PiBIVE1MQXBwbGV0RWxl
bWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1
bWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxBcHBsZXRFbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50KSk7Cit9CisKIHZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IGFsdEF0dHIgfHwKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5oCShyZXZpc2lvbiA0
NzQ5OSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw3ICsyOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTEFwcGxl
dEVsZW1lbnQgOiBwdWJsaWMgSFRNTFBsdWdJbkVsZW1lbnQgewogcHVibGljOgotICAgIEhUTUxB
cHBsZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEhUTUxBcHBsZXRFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7CiAKICAgICBTdHJpbmcgaHNwYWNlKCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRIc3BhY2UoY29uc3QgU3RyaW5nJik7CkBAIC0zOCw2ICszOCw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldFZzcGFjZShjb25zdCBTdHJpbmcmKTsKIAogcHJpdmF0ZToKKyAgICBIVE1MQXBwbGV0
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKwogICAgIHZpcnR1YWwg
aW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQogCiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxBcmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxB
cmVhRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NDk5KQorKysgV2ViQ29yZS9odG1sL0hUTUxBcmVh
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MQXJlYUVsZW1lbnQ6
OkhUTUxBcmVhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCog
ZG9jdW1lbnQpCitpbmxpbmUgSFRNTEFyZWFFbGVtZW50OjpIVE1MQXJlYUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDogSFRNTEFu
Y2hvckVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCiAgICAgLCBtX2Nvb3Jkc0xlbigwKQogICAg
ICwgbV9sYXN0U2l6ZSgtMSwgLTEpCkBAIC00Myw4ICs0Myw5IEBAIEhUTUxBcmVhRWxlbWVudDo6
SFRNTEFyZWFFbGVtZW50KGNvbnN0IFEKICAgICBBU1NFUlQoaGFzVGFnTmFtZShhcmVhVGFnKSk7
CiB9CiAKLUhUTUxBcmVhRWxlbWVudDo6fkhUTUxBcmVhRWxlbWVudCgpCitQYXNzUmVmUHRyPEhU
TUxBcmVhRWxlbWVudD4gSFRNTEFyZWFFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogeworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSFRNTEFyZWFFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIHZvaWQgSFRNTEFy
ZWFFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxBcmVhRWxlbWVudC5oCShyZXZpc2lvbiA0NzQ5OSkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MQXJlYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsNyBAQCBjbGFz
cyBQYXRoOwogCiBjbGFzcyBIVE1MQXJlYUVsZW1lbnQgOiBwdWJsaWMgSFRNTEFuY2hvckVsZW1l
bnQgewogcHVibGljOgotICAgIEhUTUxBcmVhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqKTsKLSAgICB2aXJ0dWFsIH5IVE1MQXJlYUVsZW1lbnQoKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxIVE1MQXJlYUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqKTsKIAogICAgIGJvb2wgaXNEZWZhdWx0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFw
ZSA9PSBEZWZhdWx0OyB9CiAKQEAgLTQ5LDYgKzQ4LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0
Tm9IcmVmKGJvb2wpOwogCiBwcml2YXRlOgorICAgIEhUTUxBcmVhRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKwogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRU
YWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQogICAg
IHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1
YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxFbGVtZW50LmNwcAkocmV2aXNpb24gNDc0OTkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMyArNTYsOSBAQCB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogdXNpbmcgc3RkOjptaW47CiB1c2luZyBzdGQ6Om1heDsKIAotSFRNTEVsZW1l
bnQ6OkhUTUxFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpk
b2MpCi0gICAgOiBTdHlsZWRFbGVtZW50KHRhZ05hbWUsIGRvYykKLXsKLX0KLQotSFRNTEVsZW1l
bnQ6On5IVE1MRWxlbWVudCgpCitQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBIVE1MRWxlbWVudDo6
Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkK
IHsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
LCBDcmVhdGVFbGVtZW50KSk7CiB9CiAKIFN0cmluZyBIVE1MRWxlbWVudDo6bm9kZU5hbWUoKSBj
b25zdApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxFbGVtZW50LmgJKHJldmlzaW9uIDQ3NDk5KQorKysgV2ViQ29yZS9odG1s
L0hUTUxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzUsMTkgKzM1
LDEyIEBAIGVudW0gSFRNTFRhZ1N0YXR1cyB7IFRhZ1N0YXR1c09wdGlvbmFsLCAKICAgICAgICAg
ICAgICAgICAgICAgICAgCiBjbGFzcyBIVE1MRWxlbWVudCA6IHB1YmxpYyBTdHlsZWRFbGVtZW50
IHsKIHB1YmxpYzoKLSAgICBIVE1MRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCopOwotICAgIHZpcnR1YWwgfkhUTUxFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNIVE1MRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1
YWwgU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRy
eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJl
c3VsdCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKIAogICAgIFBhc3NSZWZQ
dHI8SFRNTENvbGxlY3Rpb24+IGNoaWxkcmVuKCk7CiAgICAgCiAgICAgdmlydHVhbCBTdHJpbmcg
dGl0bGUoKSBjb25zdDsKKwogICAgIHZpcnR1YWwgc2hvcnQgdGFiSW5kZXgoKSBjb25zdDsKICAg
ICB2b2lkIHNldFRhYkluZGV4KGludCk7CiAKQEAgLTYzLDEyICs1NiwxMSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBpbnNlcnRBZGphY2VudEhUTUwoY29uc3QgU3RyaW5nJiB3aGVyZSwgY29uc3QgU3Ry
aW5nJiBodG1sLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBpbnNlcnRBZGphY2VudFRleHQo
Y29uc3QgU3RyaW5nJiB3aGVyZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJik7
CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50
UmljaGx5RWRpdGFibGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBjb250ZW50RWRpdGFi
bGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudEVkaXRhYmxlKE1hcHBlZEF0
dHJpYnV0ZSopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50RWRpdGFibGUoY29uc3QgU3Ry
aW5nJik7CisKKyAgICBTdHJpbmcgY29udGVudEVkaXRhYmxlKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRDb250ZW50RWRpdGFibGUoY29uc3QgU3RyaW5nJik7CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJh
Z2dhYmxlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXREcmFnZ2FibGUoYm9vbCk7CkBAIC03OSwzMSAr
NzEsNTMgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVp
cmVtZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7CisgICAgdmly
dHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5
bGUqKTsKKworICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1
YWxGb3JtKCk7IH0KKworICAgIHN0YXRpYyB2b2lkIGFkZEhUTUxBbGlnbm1lbnRUb1N0eWxlZEVs
ZW1lbnQoU3R5bGVkRWxlbWVudCosIE1hcHBlZEF0dHJpYnV0ZSopOworCitwcm90ZWN0ZWQ6Cisg
ICAgSFRNTEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqLCBD
b25zdHJ1Y3Rpb25UeXBlID0gQ3JlYXRlRWxlbWVudFplcm9SZWZDb3VudCk7CisKKyAgICB2b2lk
IGFkZEhUTUxBbGlnbm1lbnQoTWFwcGVkQXR0cmlidXRlKik7CisKKyAgICB2aXJ0dWFsIGJvb2wg
bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRl
RW50cnkmIHJlc3VsdCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSopOworCisgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkg
Y29uc3Q7CisKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRBbGxvd2VkKE5vZGUqIG5ld0NoaWxkKTsg
Ly8gRXJyb3ItY2hlY2tpbmcgZHVyaW5nIHBhcnNpbmcgdGhhdCBjaGVja3MgdGhlIERURAogCiAg
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBEVEQgZm9yIGEgZ2l2ZW4gY2hpbGQg
bm9kZS4KICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSopOworCiAgICAgc3Rh
dGljIGJvb2wgaW5FaXRoZXJUYWdMaXN0KGNvbnN0IE5vZGUqKTsKICAgICBzdGF0aWMgYm9vbCBp
bklubGluZVRhZ0xpc3QoY29uc3QgTm9kZSopOwogICAgIHN0YXRpYyBib29sIGluQmxvY2tUYWdM
aXN0KGNvbnN0IE5vZGUqKTsKICAgICBzdGF0aWMgYm9vbCBpc1JlY29nbml6ZWRUYWdOYW1lKGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKIAotICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVk
KFJlbmRlclN0eWxlKik7Ci0gICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVy
KFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKLQotICAgIEhUTUxGb3JtRWxlbWVudCogZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxGb3JtKCk7IH0KICAgICBIVE1MRm9ybUVsZW1lbnQq
IGZpbmRGb3JtQW5jZXN0b3IoKSBjb25zdDsKIAotICAgIHN0YXRpYyB2b2lkIGFkZEhUTUxBbGln
bm1lbnRUb1N0eWxlZEVsZW1lbnQoU3R5bGVkRWxlbWVudCosIE1hcHBlZEF0dHJpYnV0ZSopOwor
cHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgaXNIVE1MRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KIAotcHJvdGVjdGVkOgotICAgIHZvaWQgYWRkSFRNTEFsaWdubWVudChNYXBwZWRB
dHRyaWJ1dGUqKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0OworCisgICAg
dm9pZCBzZXRDb250ZW50RWRpdGFibGUoTWFwcGVkQXR0cmlidXRlKik7CiAKLXByaXZhdGU6CiAg
ICAgdmlydHVhbCBIVE1MRm9ybUVsZW1lbnQqIHZpcnR1YWxGb3JtKCkgY29uc3Q7CisKICAgICBO
b2RlKiBpbnNlcnRBZGphY2VudChjb25zdCBTdHJpbmcmIHdoZXJlLCBOb2RlKiBuZXdDaGlsZCwg
RXhjZXB0aW9uQ29kZSYpOwogfTsKIAoraW5saW5lIEhUTUxFbGVtZW50OjpIVE1MRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIENvbnN0cnVj
dGlvblR5cGUgdHlwZSkKKyAgICA6IFN0eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIHR5
cGUpCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEhUTUxFbGVt
ZW50X2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NDk5KQor
KysgV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
LDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgKDFTdGVpbkBnbXgu
ZGUpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCkBAIC00MiwxMyArNDIsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MRW1iZWRFbGVtZW50OjpIVE1MRW1iZWRFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCi0gICAgOiBI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50KHRhZ05hbWUsIGRvYykKK2lubGluZSBIVE1MRW1iZWRFbGVt
ZW50OjpIVE1MRW1iZWRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQodGFnTmFtZSwgZG9j
dW1lbnQpCiAgICAgLCBtX25lZWRXaWRnZXRVcGRhdGUoZmFsc2UpCiB7CiAgICAgQVNTRVJUKGhh
c1RhZ05hbWUoZW1iZWRUYWcpKTsKIH0KIAorUGFzc1JlZlB0cjxIVE1MRW1iZWRFbGVtZW50PiBI
VE1MRW1iZWRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvY3VtZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTEVtYmVkRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOworfQorCiBzdGF0aWMgaW5saW5lIFJlbmRlcldpZGdl
dCogZmluZFdpZGdldFJlbmRlcmVyKGNvbnN0IE5vZGUqIG4pIAogewogICAgIGlmICghbi0+cmVu
ZGVyZXIoKSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaAkocmV2aXNpb24gNDc0OTkpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcg
KzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOCwgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5
LDYgKzI5LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTEVtYmVkRWxlbWVu
dCA6IHB1YmxpYyBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxIVE1MRW1iZWRFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7CisKKyAgICB2b2lkIHNldE5lZWRXaWRnZXRVcGRhdGUoYm9vbCBuZWVkV2lk
Z2V0VXBkYXRlKSB7IG1fbmVlZFdpZGdldFVwZGF0ZSA9IG5lZWRXaWRnZXRVcGRhdGU7IH0KKwor
cHJpdmF0ZToKICAgICBIVE1MRW1iZWRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCopOwogCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkg
Y29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CkBAIC00OSwxMyArNTQsMTEgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgY29uc3QgUXVhbGlmaWVkTmFtZSYgaW1hZ2VTb3VyY2VBdHRy
aWJ1dGVOYW1lKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlV2lkZ2V0KCk7Ci0g
ICAgdm9pZCBzZXROZWVkV2lkZ2V0VXBkYXRlKGJvb2wgbmVlZFdpZGdldFVwZGF0ZSkgeyBtX25l
ZWRXaWRnZXRVcGRhdGUgPSBuZWVkV2lkZ2V0VXBkYXRlOyB9CiAKICAgICB2aXJ0dWFsIFJlbmRl
cldpZGdldCogcmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygpIGNvbnN0OwogCiAgICAgdmlydHVh
bCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNv
bnN0OwogCi1wcml2YXRlOgogICAgIGJvb2wgbV9uZWVkV2lkZ2V0VXBkYXRlOwogfTsKIApJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50LmNwcAkocmV2aXNpb24gNDc0OTkpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTEZyYW1lRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1I
VE1MRnJhbWVFbGVtZW50OjpIVE1MRnJhbWVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKK2lubGluZSBIVE1MRnJhbWVFbGVtZW50OjpIVE1M
RnJhbWVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1
bWVudCkKICAgICA6IEhUTUxGcmFtZUVsZW1lbnRCYXNlKHRhZ05hbWUsIGRvY3VtZW50KQogICAg
ICwgbV9mcmFtZUJvcmRlcih0cnVlKQogICAgICwgbV9mcmFtZUJvcmRlclNldChmYWxzZSkKQEAg
LTQzLDYgKzQzLDExIEBAIEhUTUxGcmFtZUVsZW1lbnQ6OkhUTUxGcmFtZUVsZW1lbnQoY29uc3QK
ICAgICBBU1NFUlQoaGFzVGFnTmFtZShmcmFtZVRhZykpOwogfQogCitQYXNzUmVmUHRyPEhUTUxG
cmFtZUVsZW1lbnQ+IEhUTUxGcmFtZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBIVE1MRnJhbWVFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7Cit9CisKIGJvb2wgSFRNTEZy
YW1lRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopCiB7CiAgICAgLy8gRm9y
IGNvbXBhdGliaWxpdHksIGZyYW1lcyByZW5kZXIgZXZlbiB3aGVuIGRpc3BsYXk6IG5vbmUgaXMg
c2V0LgpAQCAtNTYsOSArNjEsMTAgQEAgUmVuZGVyT2JqZWN0KiBIVE1MRnJhbWVFbGVtZW50Ojpj
cmVhdGVSZQogCiBzdGF0aWMgaW5saW5lIEhUTUxGcmFtZVNldEVsZW1lbnQqIGNvbnRhaW5pbmdG
cmFtZVNldEVsZW1lbnQoTm9kZSogbm9kZSkKIHsKLSAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT5w
YXJlbnROb2RlKCkpKQorICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkpIHsK
ICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoZnJhbWVzZXRUYWcpKQogICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnQqPihub2RlKTsKKyAgICB9CiAg
ICAgcmV0dXJuIDA7CiB9CiAKQEAgLTc0LDcgKzgwLDcgQEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50
OjphdHRhY2goKQogICAgIH0KIH0KIAotdm9pZCBIVE1MRnJhbWVFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIEhUTUxGcmFtZUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBpZiAo
YXR0ci0+bmFtZSgpID09IGZyYW1lYm9yZGVyQXR0cikgewogICAgICAgICBtX2ZyYW1lQm9yZGVy
ID0gYXR0ci0+dmFsdWUoKS50b0ludCgpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudC5oCShy
ZXZpc2lvbiA0NzQ5OSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
SFRNTEZyYW1lRWxlbWVudCA6IHB1YmxpYyBIVE1MRnJhbWVFbGVtZW50QmFzZSB7CiBwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEZyYW1lRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworCisgICAgYm9vbCBoYXNGcmFtZUJvcmRlcigpIGNv
bnN0IHsgcmV0dXJuIG1fZnJhbWVCb3JkZXI7IH0KKworICAgIGJvb2wgbm9SZXNpemUoKSBjb25z
dCB7IHJldHVybiBtX25vUmVzaXplOyB9CisgICAgdm9pZCBzZXROb1Jlc2l6ZShib29sKTsKKwor
cHJpdmF0ZToKICAgICBIVE1MRnJhbWVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCopOwogCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkg
Y29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CkBAIC00MiwxMiArNTAsNiBAQCBw
dWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSopOwogCi0gICAgYm9vbCBoYXNGcmFtZUJvcmRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fZnJhbWVCb3JkZXI7IH0KLQotICAgIGJvb2wgbm9SZXNpemUoKSBjb25zdCB7IHJldHVybiBt
X25vUmVzaXplOyB9Ci0gICAgdm9pZCBzZXROb1Jlc2l6ZShib29sKTsKLQotcHJpdmF0ZToKICAg
ICBib29sIG1fZnJhbWVCb3JkZXI7CiAgICAgYm9vbCBtX2ZyYW1lQm9yZGVyU2V0OwogCkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuaAkocmV2aXNpb24gNDc0OTkpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjIg
KzMxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MRnJhbWVFbGVtZW50QmFz
ZSA6IHB1YmxpYyBIVE1MRnJhbWVPd25lckVsZW1lbnQgewogcHVibGljOgotICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLQotICAgIHZpcnR1
YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVk
RnJvbURvY3VtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0gICAgdmlydHVh
bCBib29sIGNhbkxhenlBdHRhY2goKSB7IHJldHVybiBmYWxzZTsgfQotCiAgICAgS1VSTCBsb2Nh
dGlvbigpIGNvbnN0OwogICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgU3RyaW5nJik7CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
Rm9jdXMoYm9vbCk7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJp
YnV0ZSopIGNvbnN0OwotCiAgICAgdmlydHVhbCBTY3JvbGxiYXJNb2RlIHNjcm9sbGluZ01vZGUo
KSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGluZzsgfQogICAgIAogICAgIGludCBnZXRNYXJnaW5X
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2luV2lkdGg7IH0KQEAgLTU1LDEyICs0MiwyOCBA
QCBwdWJsaWM6CiAgICAgaW50IHdpZHRoKCkgY29uc3Q7CiAgICAgaW50IGhlaWdodCgpIGNvbnN0
OwogCi0gICAgYm9vbCB2aWV3U291cmNlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld1NvdXJj
ZTsgfQotCiBwcm90ZWN0ZWQ6CiAgICAgSFRNTEZyYW1lRWxlbWVudEJhc2UoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7CiAKICAgICBib29sIGlzVVJMQWxsb3dlZCgpIGNvbnN0Owor
CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSop
OworCisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CisgICAgdmlydHVh
bCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2go
KTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgY2FuTGF6eUF0dGFjaCgpIHsgcmV0dXJu
IGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCk7CisgICAgCisgICAgdmlydHVhbCBib29sIGlzVVJM
QXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OworCisgICAgYm9vbCB2aWV3U291cmNlTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlld1NvdXJjZTsgfQorCiAgICAgdm9pZCBzZXROYW1lQW5kT3Bl
blVSTCgpOwogICAgIHZvaWQgb3BlblVSTCgpOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZy
YW1lT3duZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZyYW1l
T3duZXJFbGVtZW50LmNwcAkocmV2aXNpb24gNDc0OTkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZy
YW1lT3duZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzMsNyArMzMsNyBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OkhUTUxGcmFtZU93bmVyRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCi0g
ICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKKyAgICA6IEhUTUxFbGVtZW50KHRh
Z05hbWUsIGRvY3VtZW50LCBDcmVhdGVFbGVtZW50KQogICAgICwgbV9jb250ZW50RnJhbWUoMCkK
IHsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmgJKHJldmlzaW9uIDQ3
NDk5KQorKysgV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yNywzNiArMjcsMzYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBET01XaW5k
b3c7CiBjbGFzcyBGcmFtZTsKLWNsYXNzIEtleWJvYXJkRXZlbnQ7CiAKICNpZiBFTkFCTEUoU1ZH
KQogY2xhc3MgU1ZHRG9jdW1lbnQ7CiAjZW5kaWYKIAogY2xhc3MgSFRNTEZyYW1lT3duZXJFbGVt
ZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKLXByb3RlY3RlZDoKLSAgICBIVE1MRnJhbWVPd25l
ckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKLQogcHVi
bGljOgogICAgIHZpcnR1YWwgfkhUTUxGcmFtZU93bmVyRWxlbWVudCgpOwogCi0gICAgdmlydHVh
bCB2b2lkIHdpbGxSZW1vdmUoKTsKLQogICAgIEZyYW1lKiBjb250ZW50RnJhbWUoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRlbnRGcmFtZTsgfQogICAgIERPTVdpbmRvdyogY29udGVudFdpbmRvdygp
IGNvbnN0OwogICAgIERvY3VtZW50KiBjb250ZW50RG9jdW1lbnQoKSBjb25zdDsKIAotICAgIHZp
cnR1YWwgYm9vbCBpc0ZyYW1lT3duZXJFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25z
dCB7IHJldHVybiBtX2NvbnRlbnRGcmFtZTsgfQotICAgIAotICAgIHZpcnR1YWwgU2Nyb2xsYmFy
TW9kZSBzY3JvbGxpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gU2Nyb2xsYmFyQXV0bzsgfQotCiAj
aWYgRU5BQkxFKFNWRykKICAgICBTVkdEb2N1bWVudCogZ2V0U1ZHRG9jdW1lbnQoRXhjZXB0aW9u
Q29kZSYpIGNvbnN0OwogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIFNjcm9sbGJhck1vZGUgc2Nyb2xs
aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFNjcm9sbGJhckF1dG87IH0KKworcHJvdGVjdGVkOgor
ICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCopOworCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBGcmFtZTsKKworICAgIHZp
cnR1YWwgYm9vbCBpc0ZyYW1lT3duZXJFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25z
dCB7IHJldHVybiBtX2NvbnRlbnRGcmFtZTsgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCB3aWxs
UmVtb3ZlKCk7CisKICAgICBGcmFtZSogbV9jb250ZW50RnJhbWU7CiB9OwogCkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MSUZyYW1lRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NDk5KQorKysgV2ViQ29yZS9odG1s
L0hUTUxJRnJhbWVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDE3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRN
TElGcmFtZUVsZW1lbnQ6OkhUTUxJRnJhbWVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKK2lubGluZSBIVE1MSUZyYW1lRWxlbWVudDo6SFRN
TElGcmFtZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
Y3VtZW50KQogICAgIDogSFRNTEZyYW1lRWxlbWVudEJhc2UodGFnTmFtZSwgZG9jdW1lbnQpCiB7
CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoaWZyYW1lVGFnKSk7CiB9CiAKK1Bhc3NSZWZQdHI8SFRN
TElGcmFtZUVsZW1lbnQ+IEhUTUxJRnJhbWVFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSFRNTElGcmFtZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKK30KKwogYm9vbCBI
VE1MSUZyYW1lRWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBpZiAoYXR0ck5h
bWUgPT0gd2lkdGhBdHRyIHx8IGF0dHJOYW1lID09IGhlaWdodEF0dHIpIHsKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MSUZyYW1lRWxlbWVudC5oCShyZXZpc2lvbiA0NzQ5OSkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
SUZyYW1lRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDIwMDAgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzAsNiArMzAsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxJRnJhbWVFbGVtZW50IDogcHVibGljIEhUTUxGcmFtZUVs
ZW1lbnRCYXNlIHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MSUZyYW1lRWxl
bWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworCitwcml2YXRl
OgogICAgIEhUTUxJRnJhbWVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwogCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3Qg
eyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KQEAgLTQ4LDcgKzUxLDYgQEAgcHVibGljOgog
ICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsK
IAotcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV9uYW1lOwogfTsKIApJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTE9iamVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0NzQ5OSkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MT2JqZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMjAwMCBTdGVmYW4gU2NoaW1hbnNraSAoMVN0ZWluQGdteC5kZSkKLSAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKQEAgLTQ1LDggKzQ1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MT2JqZWN0RWxlbWVudDo6SFRNTE9iamVjdEVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgYm9vbCBjcmVhdGVk
QnlQYXJzZXIpIAotICAgIDogSFRNTFBsdWdJbkltYWdlRWxlbWVudCh0YWdOYW1lLCBkb2MpCitp
bmxpbmUgSFRNTE9iamVjdEVsZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
IAorICAgIDogSFRNTFBsdWdJbkltYWdlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKICAgICAs
IG1fZG9jTmFtZWRJdGVtKHRydWUpCiAgICAgLCBtX25lZWRXaWRnZXRVcGRhdGUoIWNyZWF0ZWRC
eVBhcnNlcikKICAgICAsIG1fdXNlRmFsbGJhY2tDb250ZW50KGZhbHNlKQpAQCAtNTQsNiArNTQs
MTEgQEAgSFRNTE9iamVjdEVsZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50KGNvbgogICAgIEFTU0VS
VChoYXNUYWdOYW1lKG9iamVjdFRhZykpOwogfQogCitQYXNzUmVmUHRyPEhUTUxPYmplY3RFbGVt
ZW50PiBIVE1MT2JqZWN0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBIVE1MT2JqZWN0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgY3Jl
YXRlZEJ5UGFyc2VyKSk7Cit9CisKIFJlbmRlcldpZGdldCogSFRNTE9iamVjdEVsZW1lbnQ6OnJl
bmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBjb25zdAogewogICAgIFJlbmRlcldpZGdldCogcmVu
ZGVyV2lkZ2V0ID0gKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNXaWRnZXQoKSkgPyB0b1Jl
bmRlcldpZGdldChyZW5kZXJlcigpKSA6IDA7CkBAIC0zMjgsMTggKzMzMywxNiBAQCBib29sIEhU
TUxPYmplY3RFbGVtZW50Ojpjb250YWluc0phdmFBcHBsCiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0
cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBlKGdldEF0dHJpYnV0ZSh0eXBlQXR0cikpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCi0gICAgTm9kZSogY2hpbGQgPSBmaXJzdENoaWxkKCk7
Ci0gICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+aXNFbGVtZW50Tm9kZSgp
KSB7Ci0gICAgICAgICAgICBFbGVtZW50KiBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGNoaWxk
KTsKLSAgICAgICAgICAgIGlmIChlLT5oYXNUYWdOYW1lKHBhcmFtVGFnKSAmJiBlcXVhbElnbm9y
aW5nQ2FzZShlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpLCAidHlwZSIpICYmIE1JTUVUeXBlUmVn
aXN0cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBlKGUtPmdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpLnN0
cmluZygpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKGUtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSAmJiBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxl
bWVudCo+KGUpLT5jb250YWluc0phdmFBcHBsZXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpOworICAgIGZvciAoRWxlbWVudCogY2hpbGQgPSBmaXJzdEVsZW1l
bnRDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpIHsK
KyAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKHBhcmFtVGFnKQorICAgICAgICAgICAgICAg
ICYmIGVxdWFsSWdub3JpbmdDYXNlKGNoaWxkLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpLCAidHlw
ZSIpCisgICAgICAgICAgICAgICAgJiYgTUlNRVR5cGVSZWdpc3RyeTo6aXNKYXZhQXBwbGV0TUlN
RVR5cGUoY2hpbGQtPmdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpLnN0cmluZygpKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUob2JqZWN0VGFn
KQorICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50Kj4oY2hp
bGQpLT5jb250YWluc0phdmFBcHBsZXQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICAKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTE9iamVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9i
amVjdEVsZW1lbnQuaAkocmV2aXNpb24gNDc0OTkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9iamVj
dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNywxMCArMjcsMzQg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBLVVJMOwotCiBjbGFzcyBIVE1MT2Jq
ZWN0RWxlbWVudCA6IHB1YmxpYyBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50IHsKIHB1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MT2JqZWN0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKKworICAgIHZvaWQg
c2V0TmVlZFdpZGdldFVwZGF0ZShib29sIG5lZWRXaWRnZXRVcGRhdGUpIHsgbV9uZWVkV2lkZ2V0
VXBkYXRlID0gbmVlZFdpZGdldFVwZGF0ZTsgfQorCisgICAgdm9pZCByZW5kZXJGYWxsYmFja0Nv
bnRlbnQoKTsKKworICAgIGJvb2wgZGVjbGFyZSgpIGNvbnN0OworICAgIHZvaWQgc2V0RGVjbGFy
ZShib29sKTsKKworICAgIGludCBoc3BhY2UoKSBjb25zdDsKKyAgICB2b2lkIHNldEhzcGFjZShp
bnQpOworCisgICAgaW50IHZzcGFjZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VnNwYWNlKGludCk7
CisKKyAgICBib29sIGlzRG9jTmFtZWRJdGVtKCkgY29uc3QgeyByZXR1cm4gbV9kb2NOYW1lZEl0
ZW07IH0KKworICAgIGNvbnN0IFN0cmluZyYgY2xhc3NJZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xh
c3NJZDsgfQorCisgICAgYm9vbCBjb250YWluc0phdmFBcHBsZXQoKSBjb25zdDsKKworICAgIC8v
IEZJWE1FOiBXaHkgZG9lcyB0aGlzIG92ZXJyaWRlIG5lZWQgdG8gYmUgaGVyZT8KKyAgICAvLyBF
bGVtZW50Ojp3aWxsVmFsaWRhdGUgYWxyZWFkeSByZXR1cm5zIGZhbHNlLgorICAgIHZpcnR1YWwg
Ym9vbCB3aWxsVmFsaWRhdGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCitwcml2YXRlOgog
ICAgIEhUTUxPYmplY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJv
b2wgY3JlYXRlZEJ5UGFyc2VyKTsKIAogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29u
c3QgeyByZXR1cm4gNTsgfQpAQCAtNTMsMzIgKzc3LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGltYWdlU291cmNlQXR0cmlidXRlTmFtZSgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVdpZGdldCgpOwotICAgIHZvaWQgc2V0TmVlZFdpZGdl
dFVwZGF0ZShib29sIG5lZWRXaWRnZXRVcGRhdGUpIHsgbV9uZWVkV2lkZ2V0VXBkYXRlID0gbmVl
ZFdpZGdldFVwZGF0ZTsgfQotCi0gICAgdm9pZCByZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsKIAog
ICAgIHZpcnR1YWwgUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29u
c3Q7CiAKLSAgICBib29sIGRlY2xhcmUoKSBjb25zdDsKLSAgICB2b2lkIHNldERlY2xhcmUoYm9v
bCk7Ci0KLSAgICBpbnQgaHNwYWNlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIc3BhY2UoaW50KTsK
LQotICAgIGludCB2c3BhY2UoKSBjb25zdDsKLSAgICB2b2lkIHNldFZzcGFjZShpbnQpOwotCi0g
ICAgYm9vbCBpc0RvY05hbWVkSXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jTmFtZWRJdGVtOyB9
Ci0KLSAgICBjb25zdCBTdHJpbmcmIGNsYXNzSWQoKSBjb25zdCB7IHJldHVybiBtX2NsYXNzSWQ7
IH0KLQotICAgIGJvb2wgY29udGFpbnNKYXZhQXBwbGV0KCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFs
IHZvaWQgYWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JikgY29u
c3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgd2lsbFZhbGlkYXRlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KLQotcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZURvY05hbWVkSXRlbSgpOwogCiAgICAg
QXRvbWljU3RyaW5nIG1faWQ7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaAkocmV2aXNp
b24gNDc0OTkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNiwzNyArMzYsNDQgQEAgY2xhc3MgUmVuZGVyV2lkZ2V0
OwogCiBjbGFzcyBIVE1MUGx1Z0luRWxlbWVudCA6IHB1YmxpYyBIVE1MRnJhbWVPd25lckVsZW1l
bnQgewogcHVibGljOgotICAgIEhUTUxQbHVnSW5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50Kik7CiAgICAgdmlydHVhbCB+SFRNTFBsdWdJbkVsZW1lbnQoKTsK
IAotICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICB2aXJ0dWFs
IEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0
dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKiBuZXdD
aGlsZCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlV2lkZ2V0KCkgeyB9Ci0KICAgICBTdHJp
bmcgaGVpZ2h0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRIZWlnaHQoY29uc3QgU3RyaW5nJik7CiAg
ICAgCiAgICAgU3RyaW5nIHdpZHRoKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRXaWR0aChjb25zdCBT
dHJpbmcmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7
Ci0KLSAgICB2aXJ0dWFsIFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CiAgICAgUGFzc1NjcmlwdElu
c3RhbmNlIGdldEluc3RhbmNlKCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLSAgICB2aXJ0dWFsIE5QT2JqZWN0KiBnZXROUE9iamVjdCgpOworICAgIE5QT2JqZWN0
KiBnZXROUE9iamVjdCgpOwogI2VuZGlmCiAKIHByb3RlY3RlZDoKKyAgICBIVE1MUGx1Z0luRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOworCisgICAgdmly
dHVhbCB2b2lkIGRldGFjaCgpOworCiAgICAgc3RhdGljIHZvaWQgdXBkYXRlV2lkZ2V0Q2FsbGJh
Y2soTm9kZSopOwogCisgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKwor
cHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwor
CisgICAgdmlydHVhbCBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBj
b25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQo
KSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgYm9vbCBj
aGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
V2lkZ2V0KCkgeyB9CisKK3Byb3RlY3RlZDoKICAgICBBdG9taWNTdHJpbmcgbV9uYW1lOworCitw
cml2YXRlOgogICAgIG11dGFibGUgU2NyaXB0SW5zdGFuY2UgbV9pbnN0YW5jZTsKICNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBOUE9iamVjdCogbV9OUE9iamVjdDsKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gNDc0OTkpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMCwxNSArMzAsMTYgQEAg
Y2xhc3MgSFRNTEltYWdlTG9hZGVyOwogCiBjbGFzcyBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50IDog
cHVibGljIEhUTUxQbHVnSW5FbGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7CiAgICAgdmly
dHVhbCB+SFRNTFBsdWdJbkltYWdlRWxlbWVudCgpOwogCi0gICAgYm9vbCBpc0ltYWdlVHlwZSgp
OwotCiAgICAgY29uc3QgU3RyaW5nJiBzZXJ2aWNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vy
dmljZVR5cGU7IH0KICAgICBjb25zdCBTdHJpbmcmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJs
OyB9CiAKIHByb3RlY3RlZDoKKyAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7CisKKyAgICBib29sIGlzSW1hZ2VUeXBlKCk7
CisKICAgICBPd25QdHI8SFRNTEltYWdlTG9hZGVyPiBtX2ltYWdlTG9hZGVyOwogICAgIFN0cmlu
ZyBtX3NlcnZpY2VUeXBlOwogICAgIFN0cmluZyBtX3VybDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MVGFnTmFtZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWdOYW1lcy5p
bgkocmV2aXNpb24gNDc0OTkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhZ05hbWVzLmluCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yLDI3ICsyLDI3IEBAIG5hbWVzcGFjZT0iSFRNTCIKIG5hbWVzcGFjZVBy
ZWZpeD0ieGh0bWwiCiBuYW1lc3BhY2VVUkk9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
CiAKLWEgaW50ZXJmYWNlTmFtZT1IVE1MQW5jaG9yRWxlbWVudCwgY3JlYXRlV2l0aE5ldwotYWJi
ciBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50LCBjcmVhdGVXaXRoTmV3Ci1hY3JvbnltIGludGVy
ZmFjZU5hbWU9SFRNTEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKLWFkZHJlc3MgaW50ZXJmYWNlTmFt
ZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldwotYXBwbGV0IGNyZWF0ZVdpdGhOZXcKLWFyZWEg
Y3JlYXRlV2l0aE5ldworYSBpbnRlcmZhY2VOYW1lPUhUTUxBbmNob3JFbGVtZW50CithYmJyIGlu
dGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKK2Fjcm9ueW0gaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVu
dAorYWRkcmVzcyBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CithcHBsZXQKK2FyZWEKIGF1ZGlv
IHdyYXBwZXJPbmx5SWZNZWRpYUlzQXZhaWxhYmxlLCBjb25kaXRpb25hbD1WSURFTywgY3JlYXRl
V2l0aE5ldwotYiBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50LCBjcmVhdGVXaXRoTmV3CitiIGlu
dGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKIGJhc2UgY3JlYXRlV2l0aE5ldwogYmFzZWZvbnQgaW50
ZXJmYWNlTmFtZT1IVE1MQmFzZUZvbnRFbGVtZW50LCBjcmVhdGVXaXRoTmV3Ci1iZG8gaW50ZXJm
YWNlTmFtZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldwotYmlnIGludGVyZmFjZU5hbWU9SFRN
TEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2JkbyBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Citi
aWcgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogYmxvY2txdW90ZSBjcmVhdGVXaXRoTmV3CiBi
b2R5IGNyZWF0ZVdpdGhOZXcKIGJyIGludGVyZmFjZU5hbWU9SFRNTEJSRWxlbWVudCwgY3JlYXRl
V2l0aE5ldwogYnV0dG9uIGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudCwgY3JlYXRlV2l0aE5l
dwogY2FudmFzIGNyZWF0ZVdpdGhOZXcKIGNhcHRpb24gaW50ZXJmYWNlTmFtZT1IVE1MVGFibGVD
YXB0aW9uRWxlbWVudCwgY3JlYXRlV2l0aE5ldwotY2VudGVyIGludGVyZmFjZU5hbWU9SFRNTEVs
ZW1lbnQsIGNyZWF0ZVdpdGhOZXcKLWNpdGUgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudCwgY3Jl
YXRlV2l0aE5ldwotY29kZSBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50LCBjcmVhdGVXaXRoTmV3
CitjZW50ZXIgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAorY2l0ZSBpbnRlcmZhY2VOYW1lPUhU
TUxFbGVtZW50Citjb2RlIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKIGNvbCBpbnRlcmZhY2VO
YW1lPUhUTUxUYWJsZUNvbEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKIGNvbGdyb3VwIGludGVyZmFj
ZU5hbWU9SFRNTFRhYmxlQ29sRWxlbWVudCwgY3JlYXRlV2l0aE5ldwogZGF0YWdyaWQgaW50ZXJm
YWNlTmFtZT1IVE1MRGF0YUdyaWRFbGVtZW50LCBjb25kaXRpb25hbD1EQVRBR1JJRCwgY3JlYXRl
V2l0aE5ldwpAQCAtMzAsNDAgKzMwLDQwIEBAIGRhdGFsaXN0IGludGVyZmFjZU5hbWU9SFRNTERh
dGFMaXN0RWxlbWUKIGRjZWxsIGludGVyZmFjZU5hbWU9SFRNTERhdGFHcmlkQ2VsbEVsZW1lbnQs
IGNvbmRpdGlvbmFsPURBVEFHUklELCBjcmVhdGVXaXRoTmV3CiBkY29sIGludGVyZmFjZU5hbWU9
SFRNTERhdGFHcmlkQ29sRWxlbWVudCwgY29uZGl0aW9uYWw9REFUQUdSSUQsIGNyZWF0ZVdpdGhO
ZXcKIGRyb3cgaW50ZXJmYWNlTmFtZT1IVE1MRGF0YUdyaWRSb3dFbGVtZW50LCBjb25kaXRpb25h
bD1EQVRBR1JJRCwgY3JlYXRlV2l0aE5ldwotZGQgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudCwg
Y3JlYXRlV2l0aE5ldworZGQgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogZGVsIGludGVyZmFj
ZU5hbWU9SFRNTE1vZEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKLWRmbiBpbnRlcmZhY2VOYW1lPUhU
TUxFbGVtZW50LCBjcmVhdGVXaXRoTmV3CitkZm4gaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAog
ZGlyIGludGVyZmFjZU5hbWU9SFRNTERpcmVjdG9yeUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKIGRp
diBjcmVhdGVXaXRoTmV3Ci1kbCBpbnRlcmZhY2VOYW1lPUhUTUxETGlzdEVsZW1lbnQsIGNyZWF0
ZVdpdGhOZXcKLWR0IGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKLWVt
IGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKLWVtYmVkIGNyZWF0ZVdp
dGhOZXcKK2RsIGludGVyZmFjZU5hbWU9SFRNTERMaXN0RWxlbWVudCwgY3JlYXRlV2l0aE5ldywg
Y3JlYXRlV2l0aE5ldworZHQgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAorZW0gaW50ZXJmYWNl
TmFtZT1IVE1MRWxlbWVudAorZW1iZWQKIGZpZWxkc2V0IGludGVyZmFjZU5hbWU9SFRNTEZpZWxk
U2V0RWxlbWVudCwgY29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50LCBjcmVhdGVXaXRoTmV3CiBm
b250IGNyZWF0ZVdpdGhOZXcKIGZvcm0gY3JlYXRlV2l0aE5ldwotZnJhbWUgY3JlYXRlV2l0aE5l
dworZnJhbWUKIGZyYW1lc2V0IGludGVyZmFjZU5hbWU9SFRNTEZyYW1lU2V0RWxlbWVudCwgY3Jl
YXRlV2l0aE5ldwotaGVhZCBjcmVhdGVXaXRoTmV3CiBoMSBpbnRlcmZhY2VOYW1lPUhUTUxIZWFk
aW5nRWxlbWVudCwgY3JlYXRlV2l0aE5ldwogaDIgaW50ZXJmYWNlTmFtZT1IVE1MSGVhZGluZ0Vs
ZW1lbnQsIGNyZWF0ZVdpdGhOZXcKIGgzIGludGVyZmFjZU5hbWU9SFRNTEhlYWRpbmdFbGVtZW50
LCBjcmVhdGVXaXRoTmV3CiBoNCBpbnRlcmZhY2VOYW1lPUhUTUxIZWFkaW5nRWxlbWVudCwgY3Jl
YXRlV2l0aE5ldwogaDUgaW50ZXJmYWNlTmFtZT1IVE1MSGVhZGluZ0VsZW1lbnQsIGNyZWF0ZVdp
dGhOZXcKIGg2IGludGVyZmFjZU5hbWU9SFRNTEhlYWRpbmdFbGVtZW50LCBjcmVhdGVXaXRoTmV3
CitoZWFkIGNyZWF0ZVdpdGhOZXcKIGhyIGludGVyZmFjZU5hbWU9SFRNTEhSRWxlbWVudCwgY3Jl
YXRlV2l0aE5ldwogaHRtbCBjcmVhdGVXaXRoTmV3Ci1pIGludGVyZmFjZU5hbWU9SFRNTEVsZW1l
bnQsIGNyZWF0ZVdpdGhOZXcKLWlmcmFtZSBpbnRlcmZhY2VOYW1lPUhUTUxJRnJhbWVFbGVtZW50
LCBjcmVhdGVXaXRoTmV3CitpIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKK2lmcmFtZSBpbnRl
cmZhY2VOYW1lPUhUTUxJRnJhbWVFbGVtZW50CiBpbWFnZSBtYXBUb1RhZ05hbWU9aW1nLCBjcmVh
dGVXaXRoTmV3CiBpbWcgaW50ZXJmYWNlTmFtZT1IVE1MSW1hZ2VFbGVtZW50LCBjb25zdHJ1Y3Rv
ck5lZWRzRm9ybUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKIGlucHV0IGNvbnN0cnVjdG9yTmVlZHNG
b3JtRWxlbWVudCwgY3JlYXRlV2l0aE5ldwogaW5zIGludGVyZmFjZU5hbWU9SFRNTE1vZEVsZW1l
bnQsIGNyZWF0ZVdpdGhOZXcKIGlzaW5kZXggaW50ZXJmYWNlTmFtZT1IVE1MSXNJbmRleEVsZW1l
bnQsIGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudCwgY3JlYXRlV2l0aE5ldwota2JkIGludGVy
ZmFjZU5hbWU9SFRNTEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2tiZCBpbnRlcmZhY2VOYW1lPUhU
TUxFbGVtZW50CiBrZXlnZW4gSlNJbnRlcmZhY2VOYW1lPUhUTUxTZWxlY3RFbGVtZW50LCBjb25z
dHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKIGxhYmVsIGNyZWF0ZVdpdGhO
ZXcKLWxheWVyIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2xheWVy
IGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKIGxlZ2VuZCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVs
ZW1lbnQsIGNyZWF0ZVdpdGhOZXcKIGxpIGludGVyZmFjZU5hbWU9SFRNTExJRWxlbWVudCwgY3Jl
YXRlV2l0aE5ldwogbGluayBjb25zdHJ1Y3Rvck5lZWRzQ3JlYXRlZEJ5UGFyc2VyLCBjcmVhdGVX
aXRoTmV3CkBAIC03Miw0MCArNzIsMzUgQEAgbWFwIGNyZWF0ZVdpdGhOZXcKIG1hcnF1ZWUgY3Jl
YXRlV2l0aE5ldwogbWVudSBjcmVhdGVXaXRoTmV3CiBtZXRhIGNyZWF0ZVdpdGhOZXcKLW5hdiBp
bnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50LCBjcmVhdGVXaXRoTmV3Ci1ub2JyIGludGVyZmFjZU5h
bWU9SFRNTEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKLW5vZW1iZWQgaW50ZXJmYWNlTmFtZT1IVE1M
RWxlbWVudCwgY3JlYXRlV2l0aE5ldwotbm9mcmFtZXMgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVu
dCwgY3JlYXRlV2l0aE5ldwotbm9sYXllciBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50LCBjcmVh
dGVXaXRoTmV3Ci0jaWYgRU5BQkxFX1hIVE1MTVAKLW5vc2NyaXB0IGludGVyZmFjZU5hbWU9SFRN
TE5vU2NyaXB0RWxlbWVudCwgY3JlYXRlV2l0aE5ldwotI2Vsc2UKLW5vc2NyaXB0IGludGVyZmFj
ZU5hbWU9SFRNTEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKLSNlbmRpZgotb2JqZWN0IGNvbnN0cnVj
dG9yTmVlZHNDcmVhdGVkQnlQYXJzZXIsIGNyZWF0ZVdpdGhOZXcKK25hdiBpbnRlcmZhY2VOYW1l
PUhUTUxFbGVtZW50Citub2JyIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKK25vZW1iZWQgaW50
ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAorbm9mcmFtZXMgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVu
dAorbm9sYXllciBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CitvYmplY3QgY29uc3RydWN0b3JO
ZWVkc0NyZWF0ZWRCeVBhcnNlcgogb2wgaW50ZXJmYWNlTmFtZT1IVE1MT0xpc3RFbGVtZW50LCBj
cmVhdGVXaXRoTmV3CiBvcHRncm91cCBpbnRlcmZhY2VOYW1lPUhUTUxPcHRHcm91cEVsZW1lbnQs
IGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudCwgY3JlYXRlV2l0aE5ldwogb3B0aW9uIGNvbnN0
cnVjdG9yTmVlZHNGb3JtRWxlbWVudCwgY3JlYXRlV2l0aE5ldwogcCBpbnRlcmZhY2VOYW1lPUhU
TUxQYXJhZ3JhcGhFbGVtZW50LCBjcmVhdGVXaXRoTmV3CiBwYXJhbSBjcmVhdGVXaXRoTmV3Ci1w
bGFpbnRleHQgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldworcGxhaW50
ZXh0IGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKIHByZSBjcmVhdGVXaXRoTmV3CiBxIGludGVy
ZmFjZU5hbWU9SFRNTFF1b3RlRWxlbWVudCwgY3JlYXRlV2l0aE5ldwotcnAgaW50ZXJmYWNlTmFt
ZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldwotcnQgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVu
dCwgY3JlYXRlV2l0aE5ldwotcnVieSBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50LCBjcmVhdGVX
aXRoTmV3Ci1zIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKLXNhbXAg
aW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldworcnAgaW50ZXJmYWNlTmFt
ZT1IVE1MRWxlbWVudAorcnQgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAorcnVieSBpbnRlcmZh
Y2VOYW1lPUhUTUxFbGVtZW50CitzIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKK3NhbXAgaW50
ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogc2NyaXB0IGNvbnN0cnVjdG9yTmVlZHNDcmVhdGVkQnlQ
YXJzZXIsIGNyZWF0ZVdpdGhOZXcKIHNlbGVjdCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQs
IGNyZWF0ZVdpdGhOZXcKLXNtYWxsIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQsIGNyZWF0ZVdp
dGhOZXcKK3NtYWxsIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKIHNvdXJjZSB3cmFwcGVyT25s
eUlmTWVkaWFJc0F2YWlsYWJsZSwgY29uZGl0aW9uYWw9VklERU8sIGNyZWF0ZVdpdGhOZXcKLXNw
YW4gaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldwotc3RyaWtlIGludGVy
ZmFjZU5hbWU9SFRNTEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKLXN0cm9uZyBpbnRlcmZhY2VOYW1l
PUhUTUxFbGVtZW50LCBjcmVhdGVXaXRoTmV3CitzcGFuIGludGVyZmFjZU5hbWU9SFRNTEVsZW1l
bnQKK3N0cmlrZSBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CitzdHJvbmcgaW50ZXJmYWNlTmFt
ZT1IVE1MRWxlbWVudAogc3R5bGUgY29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNlciwgY3Jl
YXRlV2l0aE5ldwotc3ViIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcK
LXN1cCBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50LCBjcmVhdGVXaXRoTmV3CitzdWIgaW50ZXJm
YWNlTmFtZT1IVE1MRWxlbWVudAorc3VwIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKIHRhYmxl
IGNyZWF0ZVdpdGhOZXcKIHRib2R5IGludGVyZmFjZU5hbWU9SFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQsIGNyZWF0ZVdpdGhOZXcKIHRkIGludGVyZmFjZU5hbWU9SFRNTFRhYmxlQ2VsbEVsZW1lbnQs
IGNyZWF0ZVdpdGhOZXcKQEAgLTExNSwxMCArMTEwLDE2IEBAIHRoIGludGVyZmFjZU5hbWU9SFRN
TFRhYmxlQ2VsbEVsZW1lbnQsIGMKIHRoZWFkIGludGVyZmFjZU5hbWU9SFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKIHRpdGxlIGNyZWF0ZVdpdGhOZXcKIHRyIGludGVyZmFj
ZU5hbWU9SFRNTFRhYmxlUm93RWxlbWVudCwgY3JlYXRlV2l0aE5ldwotdHQgaW50ZXJmYWNlTmFt
ZT1IVE1MRWxlbWVudCwgY3JlYXRlV2l0aE5ldwotdSBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50
LCBjcmVhdGVXaXRoTmV3Cit0dCBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Cit1IGludGVyZmFj
ZU5hbWU9SFRNTEVsZW1lbnQKIHVsIGludGVyZmFjZU5hbWU9SFRNTFVMaXN0RWxlbWVudCwgY3Jl
YXRlV2l0aE5ldwotdmFyIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcK
K3ZhciBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiB2aWRlbyB3cmFwcGVyT25seUlmTWVkaWFJ
c0F2YWlsYWJsZSwgY29uZGl0aW9uYWw9VklERU8sIGNyZWF0ZVdpdGhOZXcKLXdiciBpbnRlcmZh
Y2VOYW1lPUhUTUxFbGVtZW50LCBjcmVhdGVXaXRoTmV3Cit3YnIgaW50ZXJmYWNlTmFtZT1IVE1M
RWxlbWVudAogeG1wIGludGVyZmFjZU5hbWU9SFRNTFByZUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcK
KworI2lmIEVOQUJMRV9YSFRNTE1QCitub3NjcmlwdCBpbnRlcmZhY2VOYW1lPUhUTUxOb1Njcmlw
dEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKKyNlbHNlCitub3NjcmlwdCBpbnRlcmZhY2VOYW1lPUhU
TUxFbGVtZW50CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3Vt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVu
dC5jcHAJKHJldmlzaW9uIDQ3NDk5KQorKysgV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9j
dW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNyArMjA5LDcgQEAgUGFzc1JlZlB0cjxF
bGVtZW50PiBIVE1MVmlld1NvdXJjZURvY3VtZQogICAgICAgICByZXR1cm4gbV9jdXJyZW50Owog
ICAgIH0KIAotICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gc3BhbiA9IG5ldyBIVE1MRWxlbWVudChz
cGFuVGFnLCB0aGlzKTsKKyAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IHNwYW4gPSBIVE1MRWxlbWVu
dDo6Y3JlYXRlKHNwYW5UYWcsIHRoaXMpOwogICAgIFJlZlB0cjxOYW1lZE1hcHBlZEF0dHJNYXA+
IGF0dHJzID0gTmFtZWRNYXBwZWRBdHRyTWFwOjpjcmVhdGUoKTsKICAgICBhdHRycy0+YWRkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZTo6Y3JlYXRlKGNsYXNzQXR0ciwgY2xhc3NOYW1lKSk7CiAg
ICAgc3Bhbi0+c2V0QXR0cmlidXRlTWFwKGF0dHJzLnJlbGVhc2UoKSk7CkBAIC0yOTIsNyArMjky
LDcgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MVmlld1NvdXJjZURvY3VtZQogICAgICAgICBh
ZGRMaW5lKCJ3ZWJraXQtaHRtbC10YWciKTsKICAgICAKICAgICAvLyBOb3cgY3JlYXRlIGEgbGlu
ayBmb3IgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBpbnN0ZWFkIG9mIGEgc3Bhbi4KLSAgICBSZWZQdHI8
SFRNTEFuY2hvckVsZW1lbnQ+IGFuY2hvciA9IG5ldyBIVE1MQW5jaG9yRWxlbWVudCh0aGlzKTsK
KyAgICBSZWZQdHI8SFRNTEFuY2hvckVsZW1lbnQ+IGFuY2hvciA9IEhUTUxBbmNob3JFbGVtZW50
OjpjcmVhdGUodGhpcyk7CiAgICAgUmVmUHRyPE5hbWVkTWFwcGVkQXR0ck1hcD4gYXR0cnMgPSBO
YW1lZE1hcHBlZEF0dHJNYXA6OmNyZWF0ZSgpOwogICAgIGNvbnN0IGNoYXIqIGNsYXNzVmFsdWU7
CiAgICAgaWYgKGlzQW5jaG9yKQpJbmRleDogV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biA0NzQ5OSkKKysrIFdlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBkb2N1CiAgICAgICAgICAgICBTdHJpbmcgdGl0bGU7CiAgICAgICAgICAgICBTdHJpbmcgdXJs
ID0gZHJhZ0RhdGEtPmFzVVJMKCZ0aXRsZSk7CiAgICAgICAgICAgICBpZiAoIXVybC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SFRNTEFuY2hvckVsZW1lbnQ+IGFuY2hvciA9
IG5ldyBIVE1MQW5jaG9yRWxlbWVudChkb2N1bWVudCk7CisgICAgICAgICAgICAgICAgUmVmUHRy
PEhUTUxBbmNob3JFbGVtZW50PiBhbmNob3IgPSBIVE1MQW5jaG9yRWxlbWVudDo6Y3JlYXRlKGRv
Y3VtZW50KTsKICAgICAgICAgICAgICAgICBhbmNob3ItPnNldEhyZWYodXJsKTsKICAgICAgICAg
ICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgICAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBh
bmNob3JUZXh0ID0gZG9jdW1lbnQtPmNyZWF0ZVRleHROb2RlKHRpdGxlKTsKSW5kZXg6IFdlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCShyZXZpc2lvbiA0NzQ5OSkKKysrIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MSwxNCArNTEsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1TVkdFbGVtZW50OjpTVkdFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCi0gICAgOiBTdHlsZWRFbGVt
ZW50KHRhZ05hbWUsIGRvYykKK1NWR0VsZW1lbnQ6OlNWR0VsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogU3R5bGVkRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCwgQ3JlYXRlRWxlbWVudFplcm9SZWZDb3VudCkKICAgICAsIG1fc2hh
ZG93UGFyZW50KDApCiAgICAgLCBtX2N1cnNvckVsZW1lbnQoMCkKICAgICAsIG1fY3Vyc29ySW1h
Z2VWYWx1ZSgwKQogewogfQogCitQYXNzUmVmUHRyPFNWR0VsZW1lbnQ+IFNWR0VsZW1lbnQ6OmNy
ZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCit7
CisgICAgcmV0dXJuIG5ldyBTVkdFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKK30KKwogU1ZH
RWxlbWVudDo6flNWR0VsZW1lbnQoKQogewogICAgIGlmIChtX2N1cnNvckVsZW1lbnQpCkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZH
RWxlbWVudC5oCShyZXZpc2lvbiA0NzQ5OSkKKysrIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDcgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgogICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisgICAgQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjYsMjUgKzI1LDIyIEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRl
ICJTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oIgotI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFRy
YW5zZm9ybWF0aW9uTWF0cml4OwogICAgIGNsYXNzIENTU0N1cnNvckltYWdlVmFsdWU7CiAgICAg
Y2xhc3MgRG9jdW1lbnQ7CiAgICAgY2xhc3MgU1ZHQ3Vyc29yRWxlbWVudDsKICAgICBjbGFzcyBT
VkdEb2N1bWVudEV4dGVuc2lvbnM7CiAgICAgY2xhc3MgU1ZHRWxlbWVudEluc3RhbmNlOwogICAg
IGNsYXNzIFNWR1NWR0VsZW1lbnQ7CisgICAgY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAK
ICAgICBjbGFzcyBTVkdFbGVtZW50IDogcHVibGljIFN0eWxlZEVsZW1lbnQgewogICAgIHB1Ymxp
YzoKLSAgICAgICAgU1ZHRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgICAgICB2aXJ0dWFsIH5TVkdFbGVtZW50KCk7Ci0g
ICAgICAgIHZpcnR1YWwgYm9vbCBpc1NWR0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1N1cHBvcnRlZChTdHJpbmdJbXBsKiBmZWF0dXJlLCBT
dHJpbmdJbXBsKiB2ZXJzaW9uKSBjb25zdDsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGlk
KCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0SWQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgICAgICBTdHJpbmcgeG1sYmFzZSgpIGNvbnN0OwpAQCAtNTIsNiArNDgsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgU1ZHU1ZHRWxlbWVudCogb3duZXJTVkdFbGVt
ZW50KCkgY29uc3Q7CiAgICAgICAgIFNWR0VsZW1lbnQqIHZpZXdwb3J0RWxlbWVudCgpIGNvbnN0
OworCiAgICAgICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogYWNjZXNzRG9jdW1lbnRTVkdFeHRl
bnNpb25zKCkgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSopOwpAQCAtNjQsMzMgKzYxLDUzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzR3JhZGllbnRTdG9wKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzVGV4dENvbnRlbnQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1NoYWRvd05vZGUoKSBj
b25zdCB7IHJldHVybiBtX3NoYWRvd1BhcmVudDsgfQotICAgICAgICB2aXJ0dWFsIE5vZGUqIHNo
YWRvd1BhcmVudE5vZGUoKSB7IHJldHVybiBtX3NoYWRvd1BhcmVudDsgfQogICAgICAgICB2b2lk
IHNldFNoYWRvd1BhcmVudE5vZGUoQ29udGFpbmVyTm9kZSogbm9kZSkgeyBtX3NoYWRvd1BhcmVu
dCA9IG5vZGU7IH0KLSAgICAgICAgdmlydHVhbCBDb250YWluZXJOb2RlKiBldmVudFBhcmVudE5v
ZGUoKTsKIAogICAgICAgICAvLyBGb3IgU1ZHVGVzdHMKICAgICAgICAgdmlydHVhbCBib29sIGlz
VmFsaWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gIAotICAgICAgICB2aXJ0dWFsIHZvaWQg
ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisKICAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVy
SXNOZWVkZWQoUmVuZGVyU3R5bGUqKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFs
IGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlKikgY29uc3Q7CiAKLSAgICAgICAg
dmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBidWlsZFBlbmRpbmdSZXNvdXJjZSgpIHsgfQotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSB7IH0KLSAgICAgICAgdmlydHVh
bCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwgYm9vbCBwcmVzZXJ2ZURlY2xzID0g
ZmFsc2UpOwogCiAgICAgICAgIHZvaWQgc2VuZFNWR0xvYWRFdmVudElmUG9zc2libGUoYm9vbCBz
ZW5kUGFyZW50TG9hZEV2ZW50cyA9IGZhbHNlKTsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwg
VHJhbnNmb3JtYXRpb25NYXRyaXgqIHN1cHBsZW1lbnRhbFRyYW5zZm9ybSgpIHsgcmV0dXJuIDA7
IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0ZWRTVkdBdHRyaWJ1dGUoY29u
c3QgU3RyaW5nJikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRTeW5jaHJvbml6ZWRT
VkdBdHRyaWJ1dGVzKGJvb2wpIGNvbnN0OwogCiAgICAgICAgIEhhc2hTZXQ8U1ZHRWxlbWVudElu
c3RhbmNlKj4gaW5zdGFuY2VzRm9yRWxlbWVudCgpIGNvbnN0OwotIAorCisgICAgICAgIHZvaWQg
YWRkU1ZHUHJvcGVydHlTeW5jaHJvbml6ZXIoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUs
IGNvbnN0IFNWR0FuaW1hdGVkUHJvcGVydHlCYXNlJiBiYXNlKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICBtX3N2Z1Byb3BlcnR5TWFwLnNldChhdHRyTmFtZS5sb2NhbE5hbWUoKSwgJmJh
c2UpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRDdXJzb3JFbGVtZW50KFNWR0N1cnNv
ckVsZW1lbnQqIGN1cnNvckVsZW1lbnQpIHsgbV9jdXJzb3JFbGVtZW50ID0gY3Vyc29yRWxlbWVu
dDsgfQorICAgICAgICB2b2lkIHNldEN1cnNvckltYWdlVmFsdWUoQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZSogY3Vyc29ySW1hZ2VWYWx1ZSkgeyBtX2N1cnNvckltYWdlVmFsdWUgPSBjdXJzb3JJbWFnZVZh
bHVlOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFNWR0VsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcnNp
bmdDaGlsZHJlbigpOworICAgICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQo
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwgYm9v
bCBwcmVzZXJ2ZURlY2xzID0gZmFsc2UpOworICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5p
bWF0ZWRTVkdBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJikgY29uc3Q7CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBmcmllbmQgY2xhc3MgU1ZHRWxlbWVudEluc3RhbmNlOworCisgICAgICAgIHZpcnR1
YWwgYm9vbCBpc1NWR0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAg
dmlydHVhbCBib29sIGlzU3VwcG9ydGVkKFN0cmluZ0ltcGwqIGZlYXR1cmUsIFN0cmluZ0ltcGwq
IHZlcnNpb24pIGNvbnN0OworICAgICAgICAKKyAgICAgICAgdmlydHVhbCBib29sIGlzU2hhZG93
Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93UGFyZW50OyB9CisgICAgICAgIHZpcnR1YWwg
Tm9kZSogc2hhZG93UGFyZW50Tm9kZSgpIHsgcmV0dXJuIG1fc2hhZG93UGFyZW50OyB9CisgICAg
ICAgIHZpcnR1YWwgQ29udGFpbmVyTm9kZSogZXZlbnRQYXJlbnROb2RlKCk7CisKKyAgICAgICAg
dmlydHVhbCB2b2lkIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCkgeyB9CisKICAgICAgICAgLy8gSW5s
aW5lZCBtZXRob2RzIGhhbmRsaW5nIFNWRyBwcm9wZXJ0eSBzeW5jaHJvbml6YXRpb24KICAgICAg
ICAgdm9pZCBpbnZva2VTVkdQcm9wZXJ0eVN5bmNocm9uaXplcihjb25zdCBTdHJpbmcmIG5hbWUp
IGNvbnN0CiAgICAgICAgIHsKQEAgLTExNCwxNyArMTMxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBhZGRTVkdQcm9wZXJ0
eVN5bmNocm9uaXplcihjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgY29uc3QgU1ZHQW5p
bWF0ZWRQcm9wZXJ0eUJhc2UmIGJhc2UpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1f
c3ZnUHJvcGVydHlNYXAuc2V0KGF0dHJOYW1lLmxvY2FsTmFtZSgpLCAmYmFzZSk7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIHNldEN1cnNvckVsZW1lbnQoU1ZHQ3Vyc29yRWxlbWVudCogY3Vy
c29yRWxlbWVudCkgeyBtX2N1cnNvckVsZW1lbnQgPSBjdXJzb3JFbGVtZW50OyB9Ci0gICAgICAg
IHZvaWQgc2V0Q3Vyc29ySW1hZ2VWYWx1ZShDU1NDdXJzb3JJbWFnZVZhbHVlKiBjdXJzb3JJbWFn
ZVZhbHVlKSB7IG1fY3Vyc29ySW1hZ2VWYWx1ZSA9IGN1cnNvckltYWdlVmFsdWU7IH0KLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTVkdFbGVtZW50SW5zdGFuY2U7Ci0KICAg
ICAgICAgdm9pZCBtYXBJbnN0YW5jZVRvRWxlbWVudChTVkdFbGVtZW50SW5zdGFuY2UqKTsKICAg
ICAgICAgdm9pZCByZW1vdmVJbnN0YW5jZU1hcHBpbmcoU1ZHRWxlbWVudEluc3RhbmNlKik7CiAK
SW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgJKHJldmlz
aW9uIDQ3NDk5KQorKysgV2ViQ29yZS9zdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogI2lu
Y2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuaAkocmV2aXNpb24gNDc0OTkpCisrKyBX
ZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDggKzIsNiBA
QAogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUs
IDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBLREUgcHJvamVjdAotCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCiAgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCkBAIC0yNCw2ICsy
Miw3IEBACiAjZGVmaW5lIFNWR1N0b3BFbGVtZW50X2gKIAogI2lmIEVOQUJMRShTVkcpCisjaW5j
bHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTMzLDEzICszMiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIFNWR1N0b3BFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwog
ICAgICAgICB2aXJ0dWFsIH5TVkdTdG9wRWxlbWVudCgpOwogCisgICAgcHJpdmF0ZToKICAgICAg
ICAgdmlydHVhbCBib29sIGlzR3JhZGllbnRTdG9wKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUqKTsKIAogICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVu
ZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwogCi0gICAgcHJpdmF0ZToKICAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR1N0b3BFbGVtZW50LCBTVkdOYW1lczo6c3RvcFRh
Z1N0cmluZywgU1ZHTmFtZXM6Om9mZnNldEF0dHJTdHJpbmcsIGZsb2F0LCBPZmZzZXQsIG9mZnNl
dCkKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmNwcAkocmV2aXNpb24gNDc0OTkpCisrKyBXZWJD
b3JlL3dtbC9XTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDE2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOwogCi1XTUxF
bGVtZW50OjpXTUxFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
KiBkb2MpCi0gICAgOiBTdHlsZWRFbGVtZW50KHRhZ05hbWUsIGRvYykKK1dNTEVsZW1lbnQ6OldN
TEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50
KQorICAgIDogU3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgQ3JlYXRlRWxlbWVudFpl
cm9SZWZDb3VudCkKIHsKIH0KIAorc3RhdGljIFBhc3NSZWZQdHI8V01MRWxlbWVudD4gV01MRWxl
bWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1
bWVudCkKK3sKKyAgICByZXR1cm4gbmV3IFdNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOwor
fQorCiBib29sIFdNTEVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgaWYgKGF0
dHJOYW1lID09IEhUTUxOYW1lczo6YWxpZ25BdHRyKSB7CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MRWxlbWVudC5oCShyZXZpc2lv
biA0NzQ5OSkKKysrIFdlYkNvcmUvd21sL1dNTEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjksNyArMjksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFdNTEVsZW1lbnQgOiBw
dWJsaWMgU3R5bGVkRWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgV01MRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdN
TEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCop
OwogCiAgICAgdmlydHVhbCBib29sIGlzV01MRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNXTUxUYXNrRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CkBAIC00Myw2ICs0Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlbmRlck9iamVj
dCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwogCiBwcm90ZWN0
ZWQ6CisgICAgV01MRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCopOworCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBkZXJpdmVkIGNsYXNzZXMKICAgICBT
dHJpbmcgcGFyc2VWYWx1ZVN1YnN0aXR1dGluZ1ZhcmlhYmxlUmVmZXJlbmNlcyhjb25zdCBBdG9t
aWNTdHJpbmcmLCBXTUxFcnJvckNvZGUgZGVmYXVsdEVycm9yQ29kZSA9IFdNTEVycm9ySW52YWxp
ZFZhcmlhYmxlUmVmZXJlbmNlKSBjb25zdDsKICAgICBTdHJpbmcgcGFyc2VWYWx1ZUZvcmJpZGRp
bmdWYXJpYWJsZVJlZmVyZW5jZXMoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CkluZGV4OiBX
ZWJDb3JlL3dtbC9XTUxUYWdOYW1lcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxU
YWdOYW1lcy5pbgkocmV2aXNpb24gNDc0OTkpCisrKyBXZWJDb3JlL3dtbC9XTUxUYWdOYW1lcy5p
bgkod29ya2luZyBjb3B5KQpAQCAtMTAsNyArMTAsNyBAQCBjYXJkIGNyZWF0ZVdpdGhOZXcKIGRv
IGNyZWF0ZVdpdGhOZXcKIGZpZWxkc2V0IGludGVyZmFjZU5hbWU9V01MRmllbGRTZXRFbGVtZW50
LCBjcmVhdGVXaXRoTmV3CiBnbyBjcmVhdGVXaXRoTmV3Ci1oZWFkIGludGVyZmFjZU5hbWU9V01M
RWxlbWVudCwgY3JlYXRlV2l0aE5ldworaGVhZCBpbnRlcmZhY2VOYW1lPVdNTEVsZW1lbnQKIGlt
ZyBpbnRlcmZhY2VOYW1lPVdNTEltYWdlRWxlbWVudCwgY3JlYXRlV2l0aE5ldwogaW5wdXQgY3Jl
YXRlV2l0aE5ldwogI2lmIDAKQEAgLTI5LDcgKzI5LDcgQEAgcmVmcmVzaCBjcmVhdGVXaXRoTmV3
CiBzZWxlY3QgY3JlYXRlV2l0aE5ldwogc2V0dmFyIGNyZWF0ZVdpdGhOZXcKIHRhYmxlIGNyZWF0
ZVdpdGhOZXcKLXRkIGludGVyZmFjZU5hbWU9V01MRWxlbWVudCwgY3JlYXRlV2l0aE5ldwordGQg
aW50ZXJmYWNlTmFtZT1XTUxFbGVtZW50CiB0ZW1wbGF0ZSBjcmVhdGVXaXRoTmV3CiB0aW1lciBj
cmVhdGVXaXRoTmV3Ci10ciBpbnRlcmZhY2VOYW1lPVdNTEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcK
K3RyIGludGVyZmFjZU5hbWU9V01MRWxlbWVudAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66014</attachid>
            <date>2010-08-30 22:56:01 -0700</date>
            <delta_ts>2010-08-31 08:40:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-28068-20100830225600.patch</filename>
            <type>text/plain</type>
            <size>83800</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjQ1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjY5IEBACisyMDEwLTA4LTMwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtl
IERPTSBjbGFzc2VzIHN0YXJ0IHdpdGggYSByZWZlcmVuY2UgY291bnQgb2YgMSwgbGlrZSBhbGwg
b3RoZXIgUmVmQ291bnRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjgwNjgKKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWNjZXNz
U1ZHRXh0ZW5zaW9ucyk6IFVzZSBhZG9wdFB0ciBpbnN0ZWFkIG9mIHNldC4KKworICAgICAgICAq
IGRvbS9Eb2N1bWVudC5oOiBSZW1vdmVkIGluaXRpYWxSZWZDb3VudCBpbiBOb2RlIGNvbnN0cnVj
dG9yLiBJdCdzIGFsd2F5cyAxIG5vdy4KKworICAgICAgICAqIGRvbS9Ob2RlLmg6IFJlbW92ZWQg
Q3JlYXRlV2l0aFplcm9SZWZDb3VudEZsYWcsIENyZWF0ZVN0eWxlZEVsZW1lbnRaZXJvUmVmQ291
bnQsCisgICAgICAgIENyZWF0ZVNWR0VsZW1lbnRaZXJvUmVmQ291bnQsIGFuZCBpbml0aWFsUmVm
Q291bnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9UcmVlU2hhcmVkLmg6IFJlbW92ZWQgaW5pdGlh
bFJlZkNvdW50IGFyZ3VtZW50LiBJdCdzIGFsd2F5cyAxIG5vdy4KKworICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcjo6dXBkYXRlRnJvbUVsZW1lbnQp
OiBVc2UgY3JlYXRlCisgICAgICAgIGluc3RlYWQgb2YgbmV3LgorCisgICAgICAgICogcmVuZGVy
aW5nL1NWR1Jlc291cmNlcy5oOiBJbmhlcml0IGZyb20gTm9uY29weWFibGUuCisKKyAgICAgICAg
KiByZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UmVzb3VyY2VzQ2FjaGU6On5TVkdSZXNvdXJjZXNDYWNoZSk6IFJlbW92ZWQgdW5uZWVkZWQgc3Bl
Y2lhbAorICAgICAgICBjYXNlIGNvZGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHU2hhZG93
VHJlZUVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NoYWRvd1RyZWVDb250YWlu
ZXJFbGVtZW50OjpjcmVhdGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NoYWRvd1Ry
ZWVSb290RWxlbWVudDo6U1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50KTogTWFkZSBhcmd1bWVudAor
ICAgICAgICB0eXBlIG1vcmUgc3BlY2lmaWMuCisgICAgICAgIChXZWJDb3JlOjpTVkdTaGFkb3dU
cmVlUm9vdEVsZW1lbnQ6OmNyZWF0ZSk6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9TVkdT
aGFkb3dUcmVlRWxlbWVudHMuaDogQWRkZWQgY3JlYXRlIGZ1bmN0aW9ucywgYW5kIG1hZGUgdGhl
CisgICAgICAgIGFyZ3VtZW50IHR5cGUgbW9yZSBzcGVjaWZpYy4KKworICAgICAgICAqIHN2Zy9T
VkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRF
eHRlbnNpb25zOjpTVkdEb2N1bWVudEV4dGVuc2lvbnMpOiBVc2UgYWRvcHRQdHIuCisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdl
OjpkYXRhQ2hhbmdlZCk6IFVzZSBhZG9wdFB0ciBpbnN0ZWFkIG9mIHNldC4KKworICAgICAgICAq
IHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OlNWR0Vs
ZW1lbnQpOiBVc2UgQ3JlYXRlU1ZHRWxlbWVudCBpbnN0ZWFkIG9mCisgICAgICAgIENyZWF0ZVNW
R0VsZW1lbnRaZXJvUmVmQ291bnQuCisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpjcmVh
dGUpOiBVc2UgYWRvcHRSZWYuCisKKyAgICAgICAgKiB3bWwvV01MRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXTUxFbGVtZW50OjpXTUxFbGVtZW50KTogVXNlIENyZWF0ZVN0eWxlZEVs
ZW1lbnQgaW5zdGVhZCBvZgorICAgICAgICBDcmVhdGVTdHlsZWRFbGVtZW50WmVyb1JlZkNvdW50
LgorICAgICAgICAoV2ViQ29yZTo6V01MRWxlbWVudDo6Y3JlYXRlKTogVXNlIGFkb3B0UmVmLgor
CisgICAgICAgICogc3ZnL1NWR0FFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FF
bGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9TVkdBbHRHbHlwaEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQWx0R2x5cGhFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAq
IHN2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVDb2xvckVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50OjpjcmVhdGUpOgor
ICAgICAgICAqIHN2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvU1ZH
QW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZVRyYW5zZm9ybUVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL1NWR0NpcmNsZUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2lyY2xlRWxlbWVudDo6Y3JlYXRlKToKKyAg
ICAgICAgKiBzdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0NsaXBQYXRoRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvU1ZHQ3Vyc29yRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdDdXJzb3JFbGVtZW50OjpjcmVhdGUpOgorICAg
ICAgICAqIHN2Zy9TVkdEZWZzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdEZWZz
RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRGVzY0VsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRGVzY0VsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL1NW
R0VsbGlwc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsbGlwc2VFbGVtZW50
OjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUJsZW5kRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvU1ZH
RkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1h
dHJpeEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNm
ZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpjcmVhdGUpOgorICAg
ICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcv
U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
RGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVEaXN0YW50TGlnaHRF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6
Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZF
RnVuY0FFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRnVuY0FFbGVtZW50Ojpj
cmVhdGUpOgorICAgICAgICAqIHN2Zy9TVkdGRUZ1bmNCRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRUZ1bmNCRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVG
dW5jR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVGdW5jR0VsZW1lbnQ6OmNy
ZWF0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFRnVuY1JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFRnVuY1JFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9TVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVzc2lhbkJs
dXJFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAg
KiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNZXJn
ZUVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OmNyZWF0ZSk6Cisg
ICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVP
ZmZzZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zmc2V0RWxlbWVudDo6
Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRVBvaW50TGlnaHRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAq
IHN2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL1NW
R0ZFU3BvdExpZ2h0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVNwb3RMaWdo
dEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVUaWxlRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBz
dmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1
cmJ1bGVuY2VFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckVsZW1lbnQ6OmNyZWF0ZSk6CisgICAg
ICAgICogc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRF
bGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAq
IHN2Zy9TVkdGb250RmFjZUZvcm1hdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Rm9udEZhY2VGb3JtYXRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9TVkdGb250RmFj
ZU5hbWVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlTmFtZUVsZW1l
bnQ6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlU3JjRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZVNyY0VsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAg
ICogc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
b250RmFjZVVyaUVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZvcmVpZ25PYmpl
Y3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50
OjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9TVkdHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdHRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvU1ZHR2x5cGhFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dseXBoRWxlbWVudDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBzdmcvU1ZHSEtlcm5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0hLZXJu
RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcv
U1ZHTGluZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGluZUVsZW1lbnQ6OmNy
ZWF0ZSk6CisgICAgICAgICogc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAg
ICogc3ZnL1NWR01QYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdNUGF0aEVs
ZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHTWFya2VyRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcv
U1ZHTWFza0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFza0VsZW1lbnQ6OmNy
ZWF0ZSk6CisgICAgICAgICogc3ZnL1NWR01ldGFkYXRhRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdNZXRhZGF0YUVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL1NWR01p
c3NpbmdHbHlwaEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWlzc2luZ0dseXBo
RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL1NW
R1BhdHRlcm5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdHRlcm5FbGVtZW50
OjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQb2x5Z29uRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvU1ZH
UG9seWxpbmVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BvbHlsaW5lRWxlbWVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6Y3JlYXRlKToKKyAg
ICAgICAgKiBzdmcvU1ZHUmVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVj
dEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1NWR0VsZW1lbnQ6OmN1cnJlbnRWaWV3KToKKyAgICAgICAgKiBzdmcvU1ZHU2NyaXB0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVtZW50OjpjcmVhdGUpOgor
ICAgICAgICAqIHN2Zy9TVkdTZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Nl
dEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL1NWR1N0b3BFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1N0b3BFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9T
VkdTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVFbGVtZW50Ojpj
cmVhdGUpOgorICAgICAgICAqIHN2Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1N3aXRjaEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL1NWR1N5bWJv
bEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3ltYm9sRWxlbWVudDo6Y3JlYXRl
KToKKyAgICAgICAgKiBzdmcvU1ZHVFJlZkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVFJlZkVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL1NWR1RTcGFuRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUU3BhbkVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAg
ICogc3ZnL1NWR1RleHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRFbGVt
ZW50OjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVGV4dFBhdGhFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIHN2
Zy9TVkdUaXRsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGl0bGVFbGVtZW50
OjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9TVkdVc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1VzZUVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VF
bGVtZW50OjpleHBhbmRVc2VFbGVtZW50c0luU2hhZG93VHJlZSk6CisgICAgICAgICogc3ZnL1NW
R1ZLZXJuRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdWS2VybkVsZW1lbnQ6OmNy
ZWF0ZSk6CisgICAgICAgICogc3ZnL1NWR1ZpZXdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1ZpZXdFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIHdtbC9XTUxBRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXTUxBRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiB3
bWwvV01MQWNjZXNzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXTUxBY2Nlc3NFbGVt
ZW50OjpjcmVhdGUpOgorICAgICAgICAqIHdtbC9XTUxBbmNob3JFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldNTEFuY2hvckVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogd21sL1dN
TEJSRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXTUxCUkVsZW1lbnQ6OmNyZWF0ZSk6
CisgICAgICAgICogd21sL1dNTENhcmRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldN
TENhcmRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIHdtbC9XTUxEb0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V01MRG9FbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIHdtbC9X
TUxEb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6V01MRG9jdW1lbnQ6OmNyZWF0ZSk6Cisg
ICAgICAgICogd21sL1dNTEZpZWxkU2V0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
TUxGaWVsZFNldEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogd21sL1dNTEZvcm1Db250cm9s
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNy
ZWF0ZSk6CisgICAgICAgICogd21sL1dNTEdvRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXTUxHb0VsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogd21sL1dNTEltYWdlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXTUxJbWFnZUVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAg
ICogd21sL1dNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXTUxJbnB1dEVs
ZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogd21sL1dNTEluc2VydGVkTGVnZW5kRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXTUxJbnNlcnRlZExlZ2VuZEVsZW1lbnQ6OmNyZWF0ZSk6
CisgICAgICAgICogd21sL1dNTEludHJpbnNpY0V2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldNTEludHJpbnNpY0V2ZW50OjpjcmVhdGUpOgorICAgICAgICAqIHdtbC9XTUxNZXRhRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXTUxNZXRhRWxlbWVudDo6Y3JlYXRlKToKKyAgICAg
ICAgKiB3bWwvV01MTm9vcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V01MTm9vcEVs
ZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogd21sL1dNTE9uRXZlbnRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldNTE9uRXZlbnRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIHdt
bC9XTUxPcHRHcm91cEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V01MT3B0R3JvdXBF
bGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIHdtbC9XTUxPcHRpb25FbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldNTE9wdGlvbkVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogd21s
L1dNTFBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldNTFBFbGVtZW50OjpjcmVhdGUp
OgorICAgICAgICAqIHdtbC9XTUxQb3N0ZmllbGRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldNTFBvc3RmaWVsZEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogd21sL1dNTFByZXZF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldNTFByZXZFbGVtZW50OjpjcmVhdGUpOgor
ICAgICAgICAqIHdtbC9XTUxSZWZyZXNoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
TUxSZWZyZXNoRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiB3bWwvV01MU2VsZWN0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXTUxTZWxlY3RFbGVtZW50OjpjcmVhdGUpOgorICAg
ICAgICAqIHdtbC9XTUxTZXR2YXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldNTFNl
dHZhckVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogd21sL1dNTFRhYmxlRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXTUxUYWJsZUVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICog
d21sL1dNTFRhc2tFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldNTFRhc2tFbGVtZW50
OjpjcmVhdGUpOgorICAgICAgICAqIHdtbC9XTUxUZW1wbGF0ZUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V01MVGVtcGxhdGVFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIHdtbC9X
TUxUaW1lckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V01MVGltZXJFbGVtZW50Ojpj
cmVhdGUpOgorICAgICAgICBVc2UgYWRvcHRSZWYuCisKIDIwMTAtMDgtMzAgIE1paGFpIFBhcnBh
cml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBC
YXJ0aC4KSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDIzLDcgKzQwMjMsNyBAQCBjb25zdCBTVkdE
b2N1bWVudEV4dGVuc2lvbnMqIERvY3VtZW50OjpzCiBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIERv
Y3VtZW50OjphY2Nlc3NTVkdFeHRlbnNpb25zKCkKIHsKICAgICBpZiAoIW1fc3ZnRXh0ZW5zaW9u
cykKLSAgICAgICAgbV9zdmdFeHRlbnNpb25zLnNldChuZXcgU1ZHRG9jdW1lbnRFeHRlbnNpb25z
KHRoaXMpKTsKKyAgICAgICAgbV9zdmdFeHRlbnNpb25zID0gYWRvcHRQdHIobmV3IFNWR0RvY3Vt
ZW50RXh0ZW5zaW9ucyh0aGlzKSk7CiAgICAgcmV0dXJuIG1fc3ZnRXh0ZW5zaW9ucy5nZXQoKTsK
IH0KICNlbmRpZgpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMTksOCArMTMxOSw3IEBAIGlubGluZSBib29s
IE5vZGU6OmlzRG9jdW1lbnROb2RlKCkgY29uc3QKIAogLy8gaGVyZSBiZWNhdXNlIGl0IHVzZXMg
YSBEb2N1bWVudCBtZXRob2QgYnV0IHdlIHJlYWxseSB3YW50IHRvIGlubGluZSBpdAogaW5saW5l
IE5vZGU6Ok5vZGUoRG9jdW1lbnQqIGRvY3VtZW50LCBDb25zdHJ1Y3Rpb25UeXBlIHR5cGUpCi0g
ICAgOiBUcmVlU2hhcmVkPENvbnRhaW5lck5vZGU+KGluaXRpYWxSZWZDb3VudCh0eXBlKSkKLSAg
ICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogICAg
ICwgbV9wcmV2aW91cygwKQogICAgICwgbV9uZXh0KDApCiAgICAgLCBtX3JlbmRlcmVyKDApCklu
ZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5o
CShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNjM1LDcgKzYzNSw2IEBAIHByaXZhdGU6CiAgICAgICAgIEhhc1NWR1JhcmVEYXRhRmxhZyA9
IDEgPDwgMjMsIC8vIFNWR0VsZW1lbnQKICNlbmRpZgogICAgICAgICBTdHlsZUNoYW5nZU1hc2sg
PSAxIDw8IG5vZGVTdHlsZUNoYW5nZVNoaWZ0IHwgMSA8PCAobm9kZVN0eWxlQ2hhbmdlU2hpZnQg
KyAxKSwKLSAgICAgICAgQ3JlYXRlV2l0aFplcm9SZWZDb3VudEZsYWcgPSAxIDw8IDI2LAogCiAj
aWYgRU5BQkxFKFNWRykKICAgICAgICAgRGVmYXVsdE5vZGVGbGFncyA9IElzUGFyc2luZ0NoaWxk
cmVuRmluaXNoZWRGbGFnIHwgSXNTdHlsZUF0dHJpYnV0ZVZhbGlkRmxhZyB8IEFyZVNWR0F0dHJp
YnV0ZXNWYWxpZEZsYWcKQEAgLTY1Miw4ICs2NTEsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xl
YXJGbGFnKE5vZGVGbGFncyBtYXNrKSBjb25zdCB7IG1fbm9kZUZsYWdzICY9IH5tYXNrOyB9IAog
CiBwcm90ZWN0ZWQ6Ci0gICAgLy8gQ3JlYXRlV2l0aFplcm9SZWZDb3VudEZsYWcgaXMgZGVwcmVj
YXRlZCBhbmQgY2FuIGJlIHJlbW92ZWQgb25jZSB3ZSBjb252ZXJ0IGFsbCBlbGVtZW50Ci0gICAg
Ly8gY2xhc3NlcyB0byBzdGFydCB3aXRoIGEgcmVmZXJlbmNlIGNvdW50IG9mIDEuCiAgICAgZW51
bSBDb25zdHJ1Y3Rpb25UeXBlIHsgCiAgICAgICAgIENyZWF0ZU90aGVyID0gRGVmYXVsdE5vZGVG
bGFncywKICAgICAgICAgQ3JlYXRlVGV4dCA9IERlZmF1bHROb2RlRmxhZ3MgfCBJc1RleHRGbGFn
LApAQCAtNjYxLDEwICs2NTgsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIENyZWF0ZUNvbnRhaW5l
ciA9IERlZmF1bHROb2RlRmxhZ3MgfCBJc0NvbnRhaW5lckZsYWcsIAogICAgICAgICBDcmVhdGVF
bGVtZW50ID0gQ3JlYXRlQ29udGFpbmVyIHwgSXNFbGVtZW50RmxhZywgCiAgICAgICAgIENyZWF0
ZVN0eWxlZEVsZW1lbnQgPSBDcmVhdGVFbGVtZW50IHwgSXNTdHlsZWRFbGVtZW50RmxhZywgCi0g
ICAgICAgIENyZWF0ZVN0eWxlZEVsZW1lbnRaZXJvUmVmQ291bnQgPSAgQ3JlYXRlU3R5bGVkRWxl
bWVudCB8IENyZWF0ZVdpdGhaZXJvUmVmQ291bnRGbGFnLCAKICAgICAgICAgQ3JlYXRlSFRNTEVs
ZW1lbnQgPSBDcmVhdGVTdHlsZWRFbGVtZW50IHwgSXNIVE1MRmxhZywgCiAgICAgICAgIENyZWF0
ZVNWR0VsZW1lbnQgPSBDcmVhdGVTdHlsZWRFbGVtZW50IHwgSXNTVkdGbGFnLCAKLSAgICAgICAg
Q3JlYXRlU1ZHRWxlbWVudFplcm9SZWZDb3VudCA9IENyZWF0ZVNWR0VsZW1lbnQgfCBDcmVhdGVX
aXRoWmVyb1JlZkNvdW50RmxhZywKICAgICB9OwogICAgIE5vZGUoRG9jdW1lbnQqLCBDb25zdHJ1
Y3Rpb25UeXBlKTsKIApAQCAtNjg0LDcgKzY3OSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBtYXJr
Q2FjaGVkTm9kZUxpc3RzU2xvdyhKU0M6Ok1hcmtTdGFjayYsIEpTQzo6SlNHbG9iYWxEYXRhJik7
CiAjZW5kaWYKIAotICAgIHN0YXRpYyBib29sIGluaXRpYWxSZWZDb3VudChDb25zdHJ1Y3Rpb25U
eXBlKTsKICAgICB2b2lkIHNldFN0eWxlQ2hhbmdlKFN0eWxlQ2hhbmdlVHlwZSk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CkBAIC03NDEsMTEgKzczNSw2
IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLWlubGluZSBib29sIE5vZGU6OmluaXRpYWxSZWZD
b3VudChDb25zdHJ1Y3Rpb25UeXBlIHR5cGUpCi17Ci0gICAgcmV0dXJuICEodHlwZSAmIENyZWF0
ZVdpdGhaZXJvUmVmQ291bnRGbGFnKTsKLX0KLQogLy8gVXNlZCBpbiBOb2RlOjphZGRTdWJyZXNv
dXJjZUF0dHJpYnV0ZVVSTHMoKSBhbmQgaW4gYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoKQogaW5s
aW5lIHZvaWQgYWRkU3VicmVzb3VyY2VVUkwoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0
IEtVUkwmIHVybCkKIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vVHJlZVNoYXJlZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vVHJlZVNoYXJlZC5oCShyZXZpc2lvbiA2NjQ0NSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vVHJlZVNoYXJlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwx
MSArMzQsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhZG9wdGVkKFRyZWVTaAogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBUcmVlU2hhcmVkIDogcHVibGljIE5vbmNvcHlhYmxl
IHsKIHB1YmxpYzoKLSAgICBUcmVlU2hhcmVkKGludCBpbml0aWFsUmVmQ291bnQgPSAxKQotICAg
ICAgICA6IG1fcmVmQ291bnQoaW5pdGlhbFJlZkNvdW50KQorICAgIFRyZWVTaGFyZWQoKQorICAg
ICAgICA6IG1fcmVmQ291bnQoMSkKICAgICAgICAgLCBtX3BhcmVudCgwKQogI2lmbmRlZiBOREVC
VUcKLSAgICAgICAgLCBtX2Fkb3B0aW9uSXNSZXF1aXJlZChpbml0aWFsUmVmQ291bnQgPT0gMSkK
KyAgICAgICAgLCBtX2Fkb3B0aW9uSXNSZXF1aXJlZCh0cnVlKQogI2VuZGlmCiAgICAgewogICAg
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcAkocmV2aXNpb24g
NjY0NDUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRh
aW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBSZW5kZXJTVkdT
aGFkb3dUcmVlUm9vdENvbnRhaW5lcjo6dQogICAgIFNWR1VzZUVsZW1lbnQqIHVzZUVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxTVkdVc2VFbGVtZW50Kj4obm9kZSgpKTsKICAgICBpZiAoIW1fc2hhZG93
Um9vdCkgewogICAgICAgICBBU1NFUlQoIW1fcmVjcmVhdGVUcmVlKTsKLSAgICAgICAgbV9zaGFk
b3dSb290ID0gbmV3IFNWR1NoYWRvd1RyZWVSb290RWxlbWVudChkb2N1bWVudCgpLCB1c2VFbGVt
ZW50KTsKKyAgICAgICAgbV9zaGFkb3dSb290ID0gU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50Ojpj
cmVhdGUoZG9jdW1lbnQoKSwgdXNlRWxlbWVudCk7CiAgICAgICAgIHVzZUVsZW1lbnQtPmJ1aWxk
UGVuZGluZ1Jlc291cmNlKCk7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdS
ZXNvdXJjZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXMu
aAkocmV2aXNpb24gNjY0NDUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBjbGFzcyBSZW5kZXJTVkdSZXNvdXJjZU1h
c2tlcjsKIGNsYXNzIFNWR1JlbmRlclN0eWxlOwogCiAvLyBIb2xkcyBhIHNldCBvZiByZXNvdXJj
ZXMgYXNzb2NpYXRlZCB3aXRoIGEgUmVuZGVyT2JqZWN0Ci1jbGFzcyBTVkdSZXNvdXJjZXMgewor
Y2xhc3MgU1ZHUmVzb3VyY2VzIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICBT
VkdSZXNvdXJjZXMoKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ2Fj
aGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlc0NhY2hl
LmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXND
YWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCw3IEBAIFNWR1Jlc291cmNlc0Nh
Y2hlOjpTVkdSZXNvdXJjZXNDYWNoZSgpCiAKIFNWR1Jlc291cmNlc0NhY2hlOjp+U1ZHUmVzb3Vy
Y2VzQ2FjaGUoKQogewotICAgIGlmIChtX2NhY2hlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OwotCiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fY2FjaGUpOwotICAgIG1fY2FjaGUuY2xlYXIoKTsK
IH0KIAogdm9pZCBTVkdSZXNvdXJjZXNDYWNoZTo6YWRkUmVzb3VyY2VzRnJvbVJlbmRlck9iamVj
dChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCShyZXZpc2lvbiA2
NjQ0NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDE3ICsyNiwyMCBAQAogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgog
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVk
ZSAiU1ZHVXNlRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIFNWR1NoYWRv
d1RyZWVDb250YWluZXJFbGVtZW50CisKIFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50OjpT
VkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBT
VkdHRWxlbWVudChTVkdOYW1lczo6Z1RhZywgZG9jdW1lbnQpCiB7CiB9Ci0gICAgCi1TVkdTaGFk
b3dUcmVlQ29udGFpbmVyRWxlbWVudDo6flNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50KCkK
KworUGFzc1JlZlB0cjxTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudD4gU1ZHU2hhZG93VHJl
ZUNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCiB7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudChkb2N1bWVudCkp
OwogfQogCiBGbG9hdFNpemUgU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ6OmNvbnRhaW5l
clRyYW5zbGF0aW9uKCkgY29uc3QKQEAgLTQ1LDE1ICs0OCwxNyBAQCBGbG9hdFNpemUgU1ZHU2hh
ZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ6CiB9CiAKIC8vIFNWR1NoYWRvd1RyZWVSb290RWxlbWVu
dAotU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50OjpTVkdTaGFkb3dUcmVlUm9vdEVsZW1lbnQoRG9j
dW1lbnQqIGRvY3VtZW50LCBFbGVtZW50KiBzaGFkb3dQYXJlbnQpCisKK2lubGluZSBTVkdTaGFk
b3dUcmVlUm9vdEVsZW1lbnQ6OlNWR1NoYWRvd1RyZWVSb290RWxlbWVudChEb2N1bWVudCogZG9j
dW1lbnQsIFNWR1VzZUVsZW1lbnQqIHNoYWRvd1BhcmVudCkKICAgICA6IFNWR1NoYWRvd1RyZWVD
b250YWluZXJFbGVtZW50KGRvY3VtZW50KQogICAgICwgbV9zaGFkb3dQYXJlbnQoc2hhZG93UGFy
ZW50KQogewogICAgIHNldEluRG9jdW1lbnQoKTsKIH0KIAotU1ZHU2hhZG93VHJlZVJvb3RFbGVt
ZW50Ojp+U1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50KCkKK1Bhc3NSZWZQdHI8U1ZHU2hhZG93VHJl
ZVJvb3RFbGVtZW50PiBTVkdTaGFkb3dUcmVlUm9vdEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCog
ZG9jdW1lbnQsIFNWR1VzZUVsZW1lbnQqIHNoYWRvd1BhcmVudCkKIHsKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNWR1NoYWRvd1RyZWVSb290RWxlbWVudChkb2N1bWVudCwgc2hhZG93UGFyZW50
KSk7CiB9CiAKIHZvaWQgU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50OjphdHRhY2hFbGVtZW50KFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlLCBSZW5kZXJBcmVuYSogYXJlbmEpCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuaAkocmV2aXNpb24gNjY0NDUp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsMTMgKzI3LDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZs
b2F0U2l6ZTsKK2NsYXNzIFNWR1VzZUVsZW1lbnQ7CiAKIGNsYXNzIFNWR1NoYWRvd1RyZWVDb250
YWluZXJFbGVtZW50IDogcHVibGljIFNWR0dFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBTVkdTaGFk
b3dUcmVlQ29udGFpbmVyRWxlbWVudChEb2N1bWVudCopOwotICAgIHZpcnR1YWwgflNWR1NoYWRv
d1RyZWVDb250YWluZXJFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTaGFkb3dUcmVl
Q29udGFpbmVyRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7
CiAKICAgICBGbG9hdFNpemUgY29udGFpbmVyVHJhbnNsYXRpb24oKSBjb25zdDsKICAgICB2b2lk
IHNldENvbnRhaW5lck9mZnNldChjb25zdCBTVkdMZW5ndGgmIHgsIGNvbnN0IFNWR0xlbmd0aCYg
eSkKQEAgLTQyLDIyICs0MCwyOSBAQCBwdWJsaWM6CiAgICAgICAgIG1feU9mZnNldCA9IHk7CiAg
ICAgfQogCitwcm90ZWN0ZWQ6CisgICAgU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQoRG9j
dW1lbnQqKTsKKwogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgaXNTaGFkb3dUcmVlQ29udGFp
bmVyRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKwogICAgIFNWR0xlbmd0aCBtX3hP
ZmZzZXQ7CiAgICAgU1ZHTGVuZ3RoIG1feU9mZnNldDsKIH07CiAKIGNsYXNzIFNWR1NoYWRvd1Ry
ZWVSb290RWxlbWVudCA6IHB1YmxpYyBTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudCB7CiBw
dWJsaWM6Ci0gICAgU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50KERvY3VtZW50KiwgRWxlbWVudCog
c2hhZG93UGFyZW50KTsKLSAgICB2aXJ0dWFsIH5TVkdTaGFkb3dUcmVlUm9vdEVsZW1lbnQoKTsK
LQotICAgIHZpcnR1YWwgYm9vbCBpc1NoYWRvd05vZGUoKSBjb25zdCB7IHJldHVybiBtX3NoYWRv
d1BhcmVudDsgfQotICAgIHZpcnR1YWwgQ29udGFpbmVyTm9kZSogc2hhZG93UGFyZW50Tm9kZSgp
IHsgcmV0dXJuIG1fc2hhZG93UGFyZW50OyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHU2hh
ZG93VHJlZVJvb3RFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBTVkdVc2VFbGVtZW50KiBzaGFk
b3dQYXJlbnQpOwogCiAgICAgdm9pZCBhdHRhY2hFbGVtZW50KFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+LCBSZW5kZXJBcmVuYSopOwogCisgICAgdmlydHVhbCBDb250YWluZXJOb2RlKiBzaGFkb3dQ
YXJlbnROb2RlKCkgeyByZXR1cm4gbV9zaGFkb3dQYXJlbnQ7IH0KKwogcHJpdmF0ZToKKyAgICBT
VkdTaGFkb3dUcmVlUm9vdEVsZW1lbnQoRG9jdW1lbnQqLCBTVkdVc2VFbGVtZW50KiBzaGFkb3dQ
YXJlbnQpOworCisgICAgdmlydHVhbCBib29sIGlzU2hhZG93Tm9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2hhZG93UGFyZW50OyB9CisKICAgICBDb250YWluZXJOb2RlKiBtX3NoYWRvd1BhcmVudDsK
IH07CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29yZS9z
dmcvU1ZHQUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIGlubGlu
ZSBTVkdBRWxlbWVudDo6U1ZHQUVsZW1lbnQoY29uc3QgUXUKIAogUGFzc1JlZlB0cjxTVkdBRWxl
bWVudD4gU1ZHQUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBTVkdBRWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdBRWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCkpOwogfQogCiBTdHJpbmcgU1ZHQUVsZW1lbnQ6OnRpdGxlKCkgY29uc3QKSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvU1ZHQWx0R2x5cGhFbGVtZW50LmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBXZWJD
b3JlL3N2Zy9TVkdBbHRHbHlwaEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0
MCw3IEBAIGlubGluZSBTVkdBbHRHbHlwaEVsZW1lbnQ6OlNWR0FsdEdseXBoRWwKIAogUGFzc1Jl
ZlB0cjxTVkdBbHRHbHlwaEVsZW1lbnQ+IFNWR0FsdEdseXBoRWxlbWVudDo6Y3JlYXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1
cm4gbmV3IFNWR0FsdEdseXBoRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTVkdBbHRHbHlwaEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0K
IAogdm9pZCBTVkdBbHRHbHlwaEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlQ29sb3JF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVt
ZW50LmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlQ29sb3JF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBpbmxpbmUgU1ZHQW5p
bWF0ZUNvbG9yRWxlbWVudDo6U1ZHQW5pbWF0CiAKIFBhc3NSZWZQdHI8U1ZHQW5pbWF0ZUNvbG9y
RWxlbWVudD4gU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4gbmV3IFNWR0Fu
aW1hdGVDb2xvckVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiB9
CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyAr
NDgsNyBAQCBTVkdBbmltYXRlRWxlbWVudDo6U1ZHQW5pbWF0ZUVsZW1lbnQoY29uCiAKIFBhc3NS
ZWZQdHI8U1ZHQW5pbWF0ZUVsZW1lbnQ+IFNWR0FuaW1hdGVFbGVtZW50OjpjcmVhdGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVy
biBuZXcgU1ZHQW5pbWF0ZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU1ZHQW5pbWF0ZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAog
U1ZHQW5pbWF0ZUVsZW1lbnQ6On5TVkdBbmltYXRlRWxlbWVudCgpCkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyAr
NDksNyBAQCBpbmxpbmUgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OlNWR0FuaW1hCiAKIFBhc3NS
ZWZQdHI8U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ+IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojpj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQog
ewotICAgIHJldHVybiBuZXcgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jdW1l
bnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQodGFn
TmFtZSwgZG9jdW1lbnQpKTsKIH0KIAogYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6aGFz
VmFsaWRUYXJnZXQoKSBjb25zdApJbmRleDogV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9y
bUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zv
cm1FbGVtZW50LmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmltYXRl
VHJhbnNmb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgaW5s
aW5lIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpTVkdBbgogCiBQYXNzUmVmUHRyPFNWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50PiBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Y3JlYXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAg
ICByZXR1cm4gbmV3IFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50KHRh
Z05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIGJvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6
Omhhc1ZhbGlkVGFyZ2V0KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIGlubGluZSBTVkdDaXJjbGVFbGVtZW50OjpTVkdD
aXJjbGVFbGVtZW4KIAogUGFzc1JlZlB0cjxTVkdDaXJjbGVFbGVtZW50PiBTVkdDaXJjbGVFbGVt
ZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3Vt
ZW50KQogewotICAgIHJldHVybiBuZXcgU1ZHQ2lyY2xlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVu
dCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdDaXJjbGVFbGVtZW50KHRhZ05hbWUsIGRv
Y3VtZW50KSk7CiB9CiAKIHZvaWQgU1ZHQ2lyY2xlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoQXR0cmlidXRlKiBhdHRyKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgaW5saW5lIFNWR0NsaXBQYXRoRWxlbWVudDo6
U1ZHQ2xpcFBhdGhFbAogCiBQYXNzUmVmUHRyPFNWR0NsaXBQYXRoRWxlbWVudD4gU1ZHQ2xpcFBh
dGhFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQq
IGRvY3VtZW50KQogewotICAgIHJldHVybiBuZXcgU1ZHQ2xpcFBhdGhFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0NsaXBQYXRoRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiB2b2lkIFNWR0NsaXBQYXRoRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHQ3Vy
c29yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHQ3Vyc29yRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgaW5saW5lIFNWR0N1cnNvckVsZW1l
bnQ6OlNWR0N1cnNvckVsZW1lbgogCiBQYXNzUmVmUHRyPFNWR0N1cnNvckVsZW1lbnQ+IFNWR0N1
cnNvckVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBTVkdDdXJzb3JFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0N1cnNvckVsZW1lbnQodGFn
TmFtZSwgZG9jdW1lbnQpKTsKIH0KIAogU1ZHQ3Vyc29yRWxlbWVudDo6flNWR0N1cnNvckVsZW1l
bnQoKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRGVmc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL1NWR0RlZnNFbGVtZW50LmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBXZWJD
b3JlL3N2Zy9TVkdEZWZzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcg
QEAgaW5saW5lIFNWR0RlZnNFbGVtZW50OjpTVkdEZWZzRWxlbWVudChjbwogCiBQYXNzUmVmUHRy
PFNWR0RlZnNFbGVtZW50PiBTVkdEZWZzRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4gbmV3IFNWR0Rl
ZnNFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNW
R0RlZnNFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIGJvb2wgU1ZHRGVmc0VsZW1l
bnQ6OmlzVmFsaWQoKSBjb25zdApJbmRleDogV2ViQ29yZS9zdmcvU1ZHRGVzY0VsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0Rlc2NFbGVtZW50LmNwcAkocmV2aXNpb24g
NjY0NDUpCisrKyBXZWJDb3JlL3N2Zy9TVkdEZXNjRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDcgKzMxLDcgQEAgaW5saW5lIFNWR0Rlc2NFbGVtZW50OjpTVkdEZXNjRWxlbWVudChj
bwogCiBQYXNzUmVmUHRyPFNWR0Rlc2NFbGVtZW50PiBTVkdEZXNjRWxlbWVudDo6Y3JlYXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICBy
ZXR1cm4gbmV3IFNWR0Rlc2NFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNWR0Rlc2NFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIFN0
cmluZyBTVkdEZXNjRWxlbWVudDo6ZGVzY3JpcHRpb24oKSBjb25zdApJbmRleDogV2ViQ29yZS9z
dmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9T
VkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvc3Zn
L1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OlNWR0RvY3Vt
ZW50RXh0ZW5zaW9ucyhEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBtX2RvY3VtZW50KGRvY3Vt
ZW50KQotICAgICwgbV9yZXNvdXJjZXNDYWNoZShuZXcgU1ZHUmVzb3VyY2VzQ2FjaGUpCisgICAg
LCBtX3Jlc291cmNlc0NhY2hlKGFkb3B0UHRyKG5ldyBTVkdSZXNvdXJjZXNDYWNoZSkpCiB7CiB9
CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMyArNTIsMTMgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogU1ZHRWxlbWVudDo6U1ZH
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQp
Ci0gICAgOiBTdHlsZWRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBDcmVhdGVTVkdFbGVtZW50
WmVyb1JlZkNvdW50KQorICAgIDogU3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgQ3Jl
YXRlU1ZHRWxlbWVudCkKIHsKIH0KIAogUGFzc1JlZlB0cjxTVkdFbGVtZW50PiBTVkdFbGVtZW50
OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50
KQogewotICAgIHJldHVybiBuZXcgU1ZHRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAK
IFNWR0VsZW1lbnQ6On5TVkdFbGVtZW50KCkKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0VsbGlwc2VF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5j
cHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGlubGluZSBTVkdFbGxpcHNlRWxlbWVu
dDo6U1ZHRWxsaXBzZUVsZW0KIAogUGFzc1JlZlB0cjxTVkdFbGxpcHNlRWxlbWVudD4gU1ZHRWxs
aXBzZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBTVkdFbGxpcHNlRWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdFbGxpcHNlRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiB2b2lkIFNWR0VsbGlwc2VFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRUJs
ZW5kRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1l
bnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBpbmxpbmUgU1ZHRkVCbGVuZEVs
ZW1lbnQ6OlNWR0ZFQmxlbmRFbGVtCiAKIFBhc3NSZWZQdHI8U1ZHRkVCbGVuZEVsZW1lbnQ+IFNW
R0ZFQmxlbmRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBuZXcgU1ZHRkVCbGVuZEVsZW1lbnQodGFn
TmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRkVCbGVuZEVsZW1l
bnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAogdm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZH
RkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZF
Q29sb3JNYXRyaXhFbGVtZW50LmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBXZWJDb3JlL3N2Zy9T
VkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcg
QEAgaW5saW5lIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpTVkdGRUNvbAogCiBQYXNzUmVmUHRy
PFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50PiBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6Y3JlYXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAg
ICByZXR1cm4gbmV3IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KSk7CiB9CiAKIHZvaWQgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFQ29t
cG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdG
RUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29y
ZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw3ICs0MCw3IEBAIGlubGluZSBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6U1YK
IAogUGFzc1JlZlB0cjxTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudD4gU1ZHRkVDb21wb25l
bnRUcmFuc2ZlckVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBTVkdGRUNvbXBvbmVudFRyYW5z
ZmVyRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
VkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiB2
b2lkIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShB
dHRyaWJ1dGUqIGF0dHIpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBpbmxpbmUgU1ZHRkVDb21wb3NpdGVF
bGVtZW50OjpTVkdGRUNvbXBvCiAKIFBhc3NSZWZQdHI8U1ZHRkVDb21wb3NpdGVFbGVtZW50PiBT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBTVkdGRUNvbXBvc2l0ZUVs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRkVD
b21wb3NpdGVFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIHZvaWQgU1ZHRkVDb21w
b3NpdGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2
NjQ0NSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBpbmxpbmUgU1ZHRkVDb252b2x2ZU1hdHJpeEVs
ZW1lbnQ6OlNWR0ZFCiAKIFBhc3NSZWZQdHI8U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ+IFNW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBuZXcgU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAog
dm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0
cmlidXRlKiBhdHRyKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgaW5saW5l
IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6U1ZHRgogCiBQYXNzUmVmUHRyPFNWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudD4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpjcmVhdGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAg
IHJldHVybiBuZXcgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQpJbmRleDogV2ViQ29yZS9z
dmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysr
IFdlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDcgKzM1LDcgQEAgaW5saW5lIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6
U1ZHRgogCiBQYXNzUmVmUHRyPFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudD4gU1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBuZXcgU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNW
R0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiBDaGFu
bmVsU2VsZWN0b3JUeXBlIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c3RyaW5nVG9DaGFu
bmVsKGNvbnN0IFN0cmluZyYga2V5KQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGln
aHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdo
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFu
dExpZ2h0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgaW5saW5l
IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6U1ZHRkVEaQogCiBQYXNzUmVmUHRyPFNWR0ZFRGlz
dGFudExpZ2h0RWxlbWVudD4gU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpjcmVhdGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVy
biBuZXcgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudCh0YWdOYW1lLCBkb2N1
bWVudCkpOwogfQogCiBQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBTVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQ6OmxpZ2h0U291cmNlKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5j
cHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGlubGluZSBTVkdGRUZsb29kRWxlbWVu
dDo6U1ZHRkVGbG9vZEVsZW0KIAogUGFzc1JlZlB0cjxTVkdGRUZsb29kRWxlbWVudD4gU1ZHRkVG
bG9vZEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBTVkdGRUZsb29kRWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdGRUZsb29kRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVG
bG9vZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqKQpJbmRleDogV2ViQ29yZS9zdmcv
U1ZHRkVGdW5jQUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFRnVu
Y0FFbGVtZW50LmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRUZ1bmNB
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgaW5saW5lIFNWR0ZF
RnVuY0FFbGVtZW50OjpTVkdGRUZ1bmNBRWxlbQogCiBQYXNzUmVmUHRyPFNWR0ZFRnVuY0FFbGVt
ZW50PiBTVkdGRUZ1bmNBRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4gbmV3IFNWR0ZFRnVuY0FFbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZFRnVu
Y0FFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3Zn
L1NWR0ZFRnVuY0JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRUZ1
bmNCRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVGdW5j
QkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIGlubGluZSBTVkdG
RUZ1bmNCRWxlbWVudDo6U1ZHRkVGdW5jQkVsZW0KIAogUGFzc1JlZlB0cjxTVkdGRUZ1bmNCRWxl
bWVudD4gU1ZHRkVGdW5jQkVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBTVkdGRUZ1bmNCRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdGRUZ1
bmNCRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdGRUZ1bmNHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVG
dW5jR0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFRnVu
Y0dFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBpbmxpbmUgU1ZH
RkVGdW5jR0VsZW1lbnQ6OlNWR0ZFRnVuY0dFbGVtCiAKIFBhc3NSZWZQdHI8U1ZHRkVGdW5jR0Vs
ZW1lbnQ+IFNWR0ZFRnVuY0dFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBuZXcgU1ZHRkVGdW5jR0Vs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRkVG
dW5jR0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9z
dmcvU1ZHRkVGdW5jUkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZF
RnVuY1JFbGVtZW50LmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRUZ1
bmNSRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgaW5saW5lIFNW
R0ZFRnVuY1JFbGVtZW50OjpTVkdGRUZ1bmNSRWxlbQogCiBQYXNzUmVmUHRyPFNWR0ZFRnVuY1JF
bGVtZW50PiBTVkdGRUZ1bmNSRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4gbmV3IFNWR0ZFRnVuY1JF
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZF
RnVuY1JFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUv
c3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBXZWJD
b3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw3ICszOSw3IEBAIGlubGluZSBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OlNWR0ZFR2EKIAog
UGFzc1JlZlB0cjxTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ+IFNWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1
bWVudCkKIHsKLSAgICByZXR1cm4gbmV3IFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAogdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQ6OnNldFN0ZERldmlhdGlvbihmbG9hdCwgZmxvYXQpCkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdGRUltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVJbWFn
ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBpbmxpbmUgU1ZHRkVJ
bWFnZUVsZW1lbnQ6OlNWR0ZFSW1hZ2VFbGVtCiAKIFBhc3NSZWZQdHI8U1ZHRkVJbWFnZUVsZW1l
bnQ+IFNWR0ZFSW1hZ2VFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBuZXcgU1ZHRkVJbWFnZUVsZW1l
bnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRkVJbWFn
ZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAogU1ZHRkVJbWFnZUVsZW1lbnQ6On5T
VkdGRUltYWdlRWxlbWVudCgpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCShyZXZp
c2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBpbmxpbmUgU1ZHRkVNZXJnZUVsZW1lbnQ6OlNWR0ZF
TWVyZ2VFbGVtCiAKIFBhc3NSZWZQdHI8U1ZHRkVNZXJnZUVsZW1lbnQ+IFNWR0ZFTWVyZ2VFbGVt
ZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3Vt
ZW50KQogewotICAgIHJldHVybiBuZXcgU1ZHRkVNZXJnZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1l
bnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRkVNZXJnZUVsZW1lbnQodGFnTmFtZSwg
ZG9jdW1lbnQpKTsKIH0KIAogUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTWVyZ2VFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyKQpJbmRleDogV2ViQ29y
ZS9zdmcvU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUv
c3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0
LDcgQEAgaW5saW5lIFNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6U1ZHRkVNZXJnZQogCiBQYXNzUmVm
UHRyPFNWR0ZFTWVyZ2VOb2RlRWxlbWVudD4gU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpjcmVhdGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAg
IHJldHVybiBuZXcgU1ZHRkVNZXJnZU5vZGVFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZFTWVyZ2VOb2RlRWxlbWVudCh0YWdOYW1lLCBkb2N1
bWVudCkpOwogfQogCiB2b2lkIFNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoQXR0cmlidXRlKiBhdHRyKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxl
bWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgaW5saW5lIFNWR0ZF
TW9ycGhvbG9neUVsZW1lbnQ6OlNWR0ZFTW9ycAogCiBQYXNzUmVmUHRyPFNWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQ+IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBTVkdG
RU1vcnBob2xvZ3lFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAog
dm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzZXRSYWRpdXMoZmxvYXQsIGZsb2F0KQpJbmRl
eDogV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNv
cmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0
LDcgQEAgaW5saW5lIFNWR0ZFT2Zmc2V0RWxlbWVudDo6U1ZHRkVPZmZzZXRFbAogCiBQYXNzUmVm
UHRyPFNWR0ZFT2Zmc2V0RWxlbWVudD4gU1ZHRkVPZmZzZXRFbGVtZW50OjpjcmVhdGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVy
biBuZXcgU1ZHRkVPZmZzZXRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNWR0ZFT2Zmc2V0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQog
CiB2b2lkIFNWR0ZFT2Zmc2V0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRl
KiBhdHRyKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAJKHJldmlz
aW9uIDY2NDQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgaW5saW5lIFNWR0ZFUG9pbnRMaWdodEVsZW1l
bnQ6OlNWR0ZFUG9pbgogCiBQYXNzUmVmUHRyPFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ+IFNWR0ZF
UG9pbnRMaWdodEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBTVkdGRVBvaW50TGlnaHRFbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZFUG9p
bnRMaWdodEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAogUGFzc1JlZlB0cjxMaWdo
dFNvdXJjZT4gU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoKSBjb25zdApJbmRl
eDogV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAJKHJldmlz
aW9uIDY2NDQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgaW5saW5lIFNWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQ6OlNWRwogCiBQYXNzUmVmUHRyPFNWR0ZFU3BlY3VsYXJMaWdodGluZ0Vs
ZW1lbnQ+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBT
VkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQodGFnTmFtZSwgZG9j
dW1lbnQpKTsKIH0KIAogdm9pZCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRVNw
b3RMaWdodEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFU3BvdExp
Z2h0RWxlbWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVTcG90
TGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBpbmxpbmUg
U1ZHRkVTcG90TGlnaHRFbGVtZW50OjpTVkdGRVNwb3RMCiAKIFBhc3NSZWZQdHI8U1ZHRkVTcG90
TGlnaHRFbGVtZW50PiBTVkdGRVNwb3RMaWdodEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBT
VkdGRVNwb3RMaWdodEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU1ZHRkVTcG90TGlnaHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAK
IFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IFNWR0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3Vy
Y2UoKSBjb25zdApJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1
KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDcgKzM1LDcgQEAgaW5saW5lIFNWR0ZFVGlsZUVsZW1lbnQ6OlNWR0ZFVGlsZUVsZW1lbgog
CiBQYXNzUmVmUHRyPFNWR0ZFVGlsZUVsZW1lbnQ+IFNWR0ZFVGlsZUVsZW1lbnQ6OmNyZWF0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAg
cmV0dXJuIG5ldyBTVkdGRVRpbGVFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNWR0ZFVGlsZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0K
IAogdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
IGF0dHIpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAkocmV2aXNp
b24gNjY0NDUpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBpbmxpbmUgU1ZHRkVUdXJidWxlbmNlRWxlbWVu
dDo6U1ZHRkVUdXJiCiAKIFBhc3NSZWZQdHI8U1ZHRkVUdXJidWxlbmNlRWxlbWVudD4gU1ZHRkVU
dXJidWxlbmNlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4gbmV3IFNWR0ZFVHVyYnVsZW5jZUVsZW1l
bnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiB2b2lkIFNWR0ZFVHVyYnVs
ZW5jZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKSW5kZXg6
IFdlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvc3Zn
L1NWR0ZpbHRlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIGlu
bGluZSBTVkdGaWx0ZXJFbGVtZW50OjpTVkdGaWx0ZXJFbGVtZW4KIAogUGFzc1JlZlB0cjxTVkdG
aWx0ZXJFbGVtZW50PiBTVkdGaWx0ZXJFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBuZXcgU1ZHRmls
dGVyRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
VkdGaWx0ZXJFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIHZvaWQgU1ZHRmlsdGVy
RWxlbWVudDo6c2V0RmlsdGVyUmVzKHVuc2lnbmVkIGxvbmcgZmlsdGVyUmVzWCwgdW5zaWduZWQg
bG9uZyBmaWx0ZXJSZXNZKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcAkocmV2aXNpb24gNjY0
NDUpCisrKyBXZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDcgKzQ4LDcgQEAgaW5saW5lIFNWR0ZvbnRFbGVtZW50OjpTVkdGb250RWxlbWVudChjbwog
CiBQYXNzUmVmUHRyPFNWR0ZvbnRFbGVtZW50PiBTVkdGb250RWxlbWVudDo6Y3JlYXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1
cm4gbmV3IFNWR0ZvbnRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNWR0ZvbnRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIHZvaWQg
U1ZHRm9udEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2
NDQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTgsNyArNTgsNyBAQCBpbmxpbmUgU1ZHRm9udEZhY2VFbGVtZW50OjpTVkdGb250RmFj
ZUVsCiAKIFBhc3NSZWZQdHI8U1ZHRm9udEZhY2VFbGVtZW50PiBTVkdGb250RmFjZUVsZW1lbnQ6
OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQp
CiB7Ci0gICAgcmV0dXJuIG5ldyBTVkdGb250RmFjZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQp
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRm9udEZhY2VFbGVtZW50KHRhZ05hbWUsIGRv
Y3VtZW50KSk7CiB9CiAKIHN0YXRpYyBpbnQgY3NzUHJvcGVydHlJZEZvclNWR0F0dHJpYnV0ZU5h
bWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdG
b250RmFjZUZvcm1hdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0Zv
bnRGYWNlRm9ybWF0RWxlbWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29yZS9zdmcv
U1ZHRm9udEZhY2VGb3JtYXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYs
NyBAQCBpbmxpbmUgU1ZHRm9udEZhY2VGb3JtYXRFbGVtZW50OjpTVkdGb250CiAKIFBhc3NSZWZQ
dHI8U1ZHRm9udEZhY2VGb3JtYXRFbGVtZW50PiBTVkdGb250RmFjZUZvcm1hdEVsZW1lbnQ6OmNy
ZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7
Ci0gICAgcmV0dXJuIG5ldyBTVkdGb250RmFjZUZvcm1hdEVsZW1lbnQodGFnTmFtZSwgZG9jdW1l
bnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRm9udEZhY2VGb3JtYXRFbGVtZW50KHRh
Z05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIHZvaWQgU1ZHRm9udEZhY2VGb3JtYXRFbGVtZW50Ojpj
aGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwg
Tm9kZSogYWZ0ZXJDaGFuZ2UsIGludCBjaGlsZENvdW50RGVsdGEpCkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdGb250RmFjZU5hbWVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9T
VkdGb250RmFjZU5hbWVFbGVtZW50LmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBXZWJDb3JlL3N2
Zy9TVkdGb250RmFjZU5hbWVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NyBAQCBpbmxpbmUgU1ZHRm9udEZhY2VOYW1lRWxlbWVudDo6U1ZHRm9udEZhCiAKIFBhc3NSZWZQ
dHI8U1ZHRm9udEZhY2VOYW1lRWxlbWVudD4gU1ZHRm9udEZhY2VOYW1lRWxlbWVudDo6Y3JlYXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAg
ICByZXR1cm4gbmV3IFNWR0ZvbnRGYWNlTmFtZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRm9udEZhY2VOYW1lRWxlbWVudCh0YWdOYW1lLCBk
b2N1bWVudCkpOwogfQogCiBQYXNzUmVmUHRyPENTU0ZvbnRGYWNlU3JjVmFsdWU+IFNWR0ZvbnRG
YWNlTmFtZUVsZW1lbnQ6OnNyY1ZhbHVlKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0Zv
bnRGYWNlU3JjRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRm9udEZh
Y2VTcmNFbGVtZW50LmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBXZWJDb3JlL3N2Zy9TVkdGb250
RmFjZVNyY0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGlubGlu
ZSBTVkdGb250RmFjZVNyY0VsZW1lbnQ6OlNWR0ZvbnRGYWMKIAogUGFzc1JlZlB0cjxTVkdGb250
RmFjZVNyY0VsZW1lbnQ+IFNWR0ZvbnRGYWNlU3JjRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4gbmV3
IFNWR0ZvbnRGYWNlU3JjRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTVkdGb250RmFjZVNyY0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0K
IAogUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IFNWR0ZvbnRGYWNlU3JjRWxlbWVudDo6c3JjVmFs
dWUoKSBjb25zdApJbmRleDogV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VVcmlFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuY3BwCShyZXZp
c2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgaW5saW5lIFNWR0ZvbnRGYWNlVXJpRWxlbWVu
dDo6U1ZHRm9udEZhYwogCiBQYXNzUmVmUHRyPFNWR0ZvbnRGYWNlVXJpRWxlbWVudD4gU1ZHRm9u
dEZhY2VVcmlFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBuZXcgU1ZHRm9udEZhY2VVcmlFbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZvbnRGYWNl
VXJpRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiBTVkdGb250RmFjZVVyaUVsZW1l
bnQ6On5TVkdGb250RmFjZVVyaUVsZW1lbnQoKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRm9yZWln
bk9iamVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZvcmVpZ25P
YmplY3RFbGVtZW50LmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBXZWJDb3JlL3N2Zy9TVkdGb3Jl
aWduT2JqZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgU1ZH
Rm9yZWlnbk9iamVjdEVsZW1lbnQ6OlNWR0ZvcmVpZ25PYmplYwogCiBQYXNzUmVmUHRyPFNWR0Zv
cmVpZ25PYmplY3RFbGVtZW50PiBTVkdGb3JlaWduT2JqZWN0RWxlbWVudDo6Y3JlYXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1
cm4gbmV3IFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50KSk7CiB9CiAKIHZvaWQgU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0dFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdHRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2
NDQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw3ICszNiw3IEBAIFNWR0dFbGVtZW50OjpTVkdHRWxlbWVudChjb25zdCBRdWFsaWZpZWQKIAog
UGFzc1JlZlB0cjxTVkdHRWxlbWVudD4gU1ZHR0VsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBT
VkdHRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
VkdHRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiB2b2lkIFNWR0dFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdHbHlwaEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0dseXBoRWxl
bWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHR2x5cGhFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBpbmxpbmUgU1ZHR2x5cGhFbGVt
ZW50OjpTVkdHbHlwaEVsZW1lbnQoCiAKIFBhc3NSZWZQdHI8U1ZHR2x5cGhFbGVtZW50PiBTVkdH
bHlwaEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBTVkdHbHlwaEVsZW1lbnQodGFnTmFtZSwg
ZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHR2x5cGhFbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50KSk7CiB9CiAKIHZvaWQgU1ZHR2x5cGhFbGVtZW50OjppbnZhbGlkYXRlR2x5
cGhDYWNoZSgpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdIS2VybkVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1KQor
KysgV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NyArNDIsNyBAQCBpbmxpbmUgU1ZHSEtlcm5FbGVtZW50OjpTVkdIS2VybkVsZW1lbnQoCiAKIFBh
c3NSZWZQdHI8U1ZHSEtlcm5FbGVtZW50PiBTVkdIS2VybkVsZW1lbnQ6OmNyZWF0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJu
IG5ldyBTVkdIS2VybkVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU1ZHSEtlcm5FbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIHZvaWQg
U1ZHSEtlcm5FbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ltYWdl
RWxlbWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHSW1hZ2VFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBpbmxpbmUgU1ZHSW1hZ2VF
bGVtZW50OjpTVkdJbWFnZUVsZW1lbnQoCiAKIFBhc3NSZWZQdHI8U1ZHSW1hZ2VFbGVtZW50PiBT
VkdJbWFnZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBTVkdJbWFnZUVsZW1lbnQodGFnTmFt
ZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHSW1hZ2VFbGVtZW50KHRh
Z05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIHZvaWQgU1ZHSW1hZ2VFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdMaW5lRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBpbmxpbmUgU1ZHTGluZUVsZW1lbnQ6OlNWR0xpbmVF
bGVtZW50KGNvCiAKIFBhc3NSZWZQdHI8U1ZHTGluZUVsZW1lbnQ+IFNWR0xpbmVFbGVtZW50Ojpj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQog
ewotICAgIHJldHVybiBuZXcgU1ZHTGluZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU1ZHTGluZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsK
IH0KIAogdm9pZCBTVkdMaW5lRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRl
KiBhdHRyKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgaW5saW5lIFNWR0xpbmVhckdyYWRp
ZW50RWxlbWVudDo6U1ZHTGluZQogCiBQYXNzUmVmUHRyPFNWR0xpbmVhckdyYWRpZW50RWxlbWVu
dD4gU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBuZXcgU1ZHTGluZWFy
R3JhZGllbnRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiB2
b2lkIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmli
dXRlKiBhdHRyKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkK
KysrIFdlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDcgQEAgaW5saW5lIFNWR01QYXRoRWxlbWVudDo6U1ZHTVBhdGhFbGVtZW50KAogCiBQ
YXNzUmVmUHRyPFNWR01QYXRoRWxlbWVudD4gU1ZHTVBhdGhFbGVtZW50OjpjcmVhdGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVy
biBuZXcgU1ZHTVBhdGhFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNWR01QYXRoRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiB2b2lk
IFNWR01QYXRoRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQpJ
bmRleDogV2ViQ29yZS9zdmcvU1ZHTWFya2VyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvU1ZHTWFya2VyRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29y
ZS9zdmcvU1ZHTWFya2VyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcg
QEAgU1ZHTWFya2VyRWxlbWVudDo6U1ZHTWFya2VyRWxlbWVudChjb25zdAogCiBQYXNzUmVmUHRy
PFNWR01hcmtlckVsZW1lbnQ+IFNWR01hcmtlckVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBT
VkdNYXJrZXJFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNWR01hcmtlckVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAogQWZmaW5lVHJh
bnNmb3JtIFNWR01hcmtlckVsZW1lbnQ6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oZmxvYXQgdmll
d1dpZHRoLCBmbG9hdCB2aWV3SGVpZ2h0KSBjb25zdApJbmRleDogV2ViQ29yZS9zdmcvU1ZHTWFz
a0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmNw
cAkocmV2aXNpb24gNjY0NDUpCisrKyBXZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgaW5saW5lIFNWR01hc2tFbGVtZW50OjpTVkdN
YXNrRWxlbWVudChjbwogCiBQYXNzUmVmUHRyPFNWR01hc2tFbGVtZW50PiBTVkdNYXNrRWxlbWVu
dDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVu
dCkKIHsKLSAgICByZXR1cm4gbmV3IFNWR01hc2tFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR01hc2tFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
KSk7CiB9CiAKIHZvaWQgU1ZHTWFza0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJp
YnV0ZSogYXR0cikKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR01ldGFkYXRhRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHTWV0YWRhdGFFbGVtZW50LmNwcAkocmV2aXNpb24g
NjY0NDUpCisrKyBXZWJDb3JlL3N2Zy9TVkdNZXRhZGF0YUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw3ICszMSw3IEBAIGlubGluZSBTVkdNZXRhZGF0YUVsZW1lbnQ6OlNWR01ldGFk
YXRhRWwKIAogUGFzc1JlZlB0cjxTVkdNZXRhZGF0YUVsZW1lbnQ+IFNWR01ldGFkYXRhRWxlbWVu
dDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVu
dCkKIHsKLSAgICByZXR1cm4gbmV3IFNWR01ldGFkYXRhRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVu
dCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdNZXRhZGF0YUVsZW1lbnQodGFnTmFtZSwg
ZG9jdW1lbnQpKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHTWlzc2luZ0dseXBoRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHTWlzc2luZ0dseXBoRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHTWlzc2luZ0dseXBoRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgaW5saW5lIFNWR01pc3Np
bmdHbHlwaEVsZW1lbnQ6OlNWR01pc3NpbgogCiBQYXNzUmVmUHRyPFNWR01pc3NpbmdHbHlwaEVs
ZW1lbnQ+IFNWR01pc3NpbmdHbHlwaEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBTVkdNaXNz
aW5nR2x5cGhFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNWR01pc3NpbmdHbHlwaEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAogfQpJ
bmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBXZWJDb3JlL3N2
Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgaW5s
aW5lIFNWR1BhdGhFbGVtZW50OjpTVkdQYXRoRWxlbWVudChjbwogCiBQYXNzUmVmUHRyPFNWR1Bh
dGhFbGVtZW50PiBTVkdQYXRoRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4gbmV3IFNWR1BhdGhFbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1BhdGhF
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIGZsb2F0IFNWR1BhdGhFbGVtZW50Ojpn
ZXRUb3RhbExlbmd0aCgpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCShyZXZpc2lv
biA2NjQ0NSkKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjMsNyArNjMsNyBAQCBpbmxpbmUgU1ZHUGF0dGVybkVsZW1lbnQ6OlNWR1BhdHRl
cm5FbGVtCiAKIFBhc3NSZWZQdHI8U1ZHUGF0dGVybkVsZW1lbnQ+IFNWR1BhdHRlcm5FbGVtZW50
OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50
KQogewotICAgIHJldHVybiBuZXcgU1ZHUGF0dGVybkVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQp
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHUGF0dGVybkVsZW1lbnQodGFnTmFtZSwgZG9j
dW1lbnQpKTsKIH0KIAogdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoQXR0cmlidXRlKiBhdHRyKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHUG9seWdvbkVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmNwcAkocmV2
aXNpb24gNjY0NDUpCisrKyBXZWJDb3JlL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgaW5saW5lIFNWR1BvbHlnb25FbGVtZW50OjpTVkdQ
b2x5Z29uRWxlbQogCiBQYXNzUmVmUHRyPFNWR1BvbHlnb25FbGVtZW50PiBTVkdQb2x5Z29uRWxl
bWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1
bWVudCkKIHsKLSAgICByZXR1cm4gbmV3IFNWR1BvbHlnb25FbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1BvbHlnb25FbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KSk7CiB9CiAKIFBhdGggU1ZHUG9seWdvbkVsZW1lbnQ6OnRvUGF0aERhdGEoKSBj
b25zdApJbmRleDogV2ViQ29yZS9zdmcvU1ZHUG9seWxpbmVFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkK
KysrIFdlYkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDcgKzM0LDcgQEAgaW5saW5lIFNWR1BvbHlsaW5lRWxlbWVudDo6U1ZHUG9seWxpbmVFbAog
CiBQYXNzUmVmUHRyPFNWR1BvbHlsaW5lRWxlbWVudD4gU1ZHUG9seWxpbmVFbGVtZW50OjpjcmVh
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewot
ICAgIHJldHVybiBuZXcgU1ZHUG9seWxpbmVFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1BvbHlsaW5lRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVu
dCkpOwogfQogCiBQYXRoIFNWR1BvbHlsaW5lRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0Cklu
ZGV4OiBXZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDY2
NDQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBpbmxpbmUgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50
OjpTVkdSYWRpCiAKIFBhc3NSZWZQdHI8U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50PiBTVkdSYWRp
YWxHcmFkaWVudEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBTVkdSYWRpYWxHcmFkaWVudEVs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIHZvaWQgU1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIp
CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUv
c3ZnL1NWR1JlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBp
bmxpbmUgU1ZHUmVjdEVsZW1lbnQ6OlNWR1JlY3RFbGVtZW50KGNvCiAKIFBhc3NSZWZQdHI8U1ZH
UmVjdEVsZW1lbnQ+IFNWR1JlY3RFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBuZXcgU1ZHUmVjdEVs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHUmVj
dEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAogdm9pZCBTVkdSZWN0RWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQpJbmRleDogV2ViQ29yZS9zdmcv
U1ZHU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgU1ZHU1ZHRWxlbWVudDo6U1ZHU1ZHRWxl
bWVudChjb25zdCBRdWFsaQogCiBQYXNzUmVmUHRyPFNWR1NWR0VsZW1lbnQ+IFNWR1NWR0VsZW1l
bnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1l
bnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBTVkdTVkdFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1NWR0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQp
KTsKIH0KIAogU1ZHU1ZHRWxlbWVudDo6flNWR1NWR0VsZW1lbnQoKQpAQCAtMTg2LDggKzE4Niw3
IEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6c2V0VXNlQ3VycmVudFZpZXcoYm8KIFNWR1ZpZXdTcGVj
KiBTVkdTVkdFbGVtZW50OjpjdXJyZW50VmlldygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3ZpZXdT
cGVjKQotICAgICAgICBtX3ZpZXdTcGVjLnNldChuZXcgU1ZHVmlld1NwZWModGhpcykpOwotCisg
ICAgICAgIG1fdmlld1NwZWMgPSBhZG9wdFB0cihuZXcgU1ZHVmlld1NwZWModGhpcykpOwogICAg
IHJldHVybiBtX3ZpZXdTcGVjLmdldCgpOwogfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTY3Jp
cHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50
LmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBXZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBpbmxpbmUgU1ZHU2NyaXB0RWxlbWVu
dDo6U1ZHU2NyaXB0RWxlbWVuCiAKIFBhc3NSZWZQdHI8U1ZHU2NyaXB0RWxlbWVudD4gU1ZHU2Ny
aXB0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCiB7Ci0gICAgcmV0dXJuIG5ldyBTVkdT
Y3JpcHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIpOworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU1ZHU2NyaXB0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgY3Jl
YXRlZEJ5UGFyc2VyKSk7CiB9CiAKIFN0cmluZyBTVkdTY3JpcHRFbGVtZW50OjpzY3JpcHRDb250
ZW50KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1NldEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1NldEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysr
IFdlYkNvcmUvc3ZnL1NWR1NldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICsz
MSw3IEBAIGlubGluZSBTVkdTZXRFbGVtZW50OjpTVkdTZXRFbGVtZW50KGNvbnMKIAogUGFzc1Jl
ZlB0cjxTVkdTZXRFbGVtZW50PiBTVkdTZXRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBuZXcgU1ZH
U2V0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
VkdTZXRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUv
c3ZnL1NWR1N0b3BFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTdG9w
RWxlbWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGlubGluZSBTVkdTdG9wRWxl
bWVudDo6U1ZHU3RvcEVsZW1lbnQoY28KIAogUGFzc1JlZlB0cjxTVkdTdG9wRWxlbWVudD4gU1ZH
U3RvcEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBTVkdTdG9wRWxlbWVudCh0YWdOYW1lLCBk
b2N1bWVudCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdTdG9wRWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCkpOwogfQogCiB2b2lkIFNWR1N0b3BFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShBdHRyaWJ1dGUqIGF0dHIpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5jcHAJKHJldmlz
aW9uIDY2NDQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNyArNDIsNyBAQCBpbmxpbmUgU1ZHU3R5bGVFbGVtZW50OjpTVkdTdHlsZUVs
ZW1lbnQoCiAKIFBhc3NSZWZQdHI8U1ZHU3R5bGVFbGVtZW50PiBTVkdTdHlsZUVsZW1lbnQ6OmNy
ZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIGJv
b2wgY3JlYXRlZEJ5UGFyc2VyKQogewotICAgIHJldHVybiBuZXcgU1ZHU3R5bGVFbGVtZW50KHRh
Z05hbWUsIGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIpOworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU1ZHU3R5bGVFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIpKTsK
IH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBTVkdTdHlsZUVsZW1lbnQ6OnR5cGUoKSBjb25zdApJ
bmRleDogV2ViQ29yZS9zdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29y
ZS9zdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcg
QEAgaW5saW5lIFNWR1N3aXRjaEVsZW1lbnQ6OlNWR1N3aXRjaEVsZW1lbgogCiBQYXNzUmVmUHRy
PFNWR1N3aXRjaEVsZW1lbnQ+IFNWR1N3aXRjaEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBT
VkdTd2l0Y2hFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNWR1N3aXRjaEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAogYm9vbCBTVkdT
d2l0Y2hFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUqIGNoaWxkKSBjb25z
dApJbmRleDogV2ViQ29yZS9zdmcvU1ZHU3ltYm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvU1ZHU3ltYm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2Vi
Q29yZS9zdmcvU1ZHU3ltYm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0
LDcgQEAgaW5saW5lIFNWR1N5bWJvbEVsZW1lbnQ6OlNWR1N5bWJvbEVsZW1lbgogCiBQYXNzUmVm
UHRyPFNWR1N5bWJvbEVsZW1lbnQ+IFNWR1N5bWJvbEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5l
dyBTVkdTeW1ib2xFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNWR1N5bWJvbEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAogdm9pZCBT
VkdTeW1ib2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCklu
ZGV4OiBXZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvc3Zn
L1NWR1RSZWZFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBpbmxp
bmUgU1ZHVFJlZkVsZW1lbnQ6OlNWR1RSZWZFbGVtZW50KGNvCiAKIFBhc3NSZWZQdHI8U1ZHVFJl
ZkVsZW1lbnQ+IFNWR1RSZWZFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBuZXcgU1ZHVFJlZkVsZW1l
bnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHVFJlZkVs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAogdm9pZCBTVkdUUmVmRWxlbWVudDo6dXBk
YXRlUmVmZXJlbmNlZFRleHQoKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHVFNwYW5FbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUU3BhbkVsZW1lbnQuY3BwCShyZXZpc2lv
biA2NjQ0NSkKKysrIFdlYkNvcmUvc3ZnL1NWR1RTcGFuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDcgKzM2LDcgQEAgaW5saW5lIFNWR1RTcGFuRWxlbWVudDo6U1ZHVFNwYW5FbGVt
ZW50KAogCiBQYXNzUmVmUHRyPFNWR1RTcGFuRWxlbWVudD4gU1ZHVFNwYW5FbGVtZW50OjpjcmVh
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewot
ICAgIHJldHVybiBuZXcgU1ZHVFNwYW5FbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNWR1RTcGFuRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwog
fQogCiBib29sIFNWR1RTcGFuRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2Rl
KiBjaGlsZCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1
KQorKysgV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw3ICs0NCw3IEBAIGlubGluZSBTVkdUZXh0RWxlbWVudDo6U1ZHVGV4dEVsZW1lbnQoY28KIAog
UGFzc1JlZlB0cjxTVkdUZXh0RWxlbWVudD4gU1ZHVGV4dEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJu
IG5ldyBTVkdUZXh0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTVkdUZXh0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiB2b2lkIFNW
R1RleHRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29y
ZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQs
NyBAQCBpbmxpbmUgU1ZHVGV4dFBhdGhFbGVtZW50OjpTVkdUZXh0UGF0aEVsCiAKIFBhc3NSZWZQ
dHI8U1ZHVGV4dFBhdGhFbGVtZW50PiBTVkdUZXh0UGF0aEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJu
IG5ldyBTVkdUZXh0UGF0aEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU1ZHVGV4dFBhdGhFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAK
IHZvaWQgU1ZHVGV4dFBhdGhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
IGF0dHIpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdUaXRsZUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL1NWR1RpdGxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysg
V2ViQ29yZS9zdmcvU1ZHVGl0bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyAr
MzMsNyBAQCBpbmxpbmUgU1ZHVGl0bGVFbGVtZW50OjpTVkdUaXRsZUVsZW1lbnQoCiAKIFBhc3NS
ZWZQdHI8U1ZHVGl0bGVFbGVtZW50PiBTVkdUaXRsZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5l
dyBTVkdUaXRsZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU1ZHVGl0bGVFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIHZvaWQgU1ZH
VGl0bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50
LmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBXZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBpbmxpbmUgU1ZHVXNlRWxlbWVudDo6U1ZH
VXNlRWxlbWVudChjb25zCiAKIFBhc3NSZWZQdHI8U1ZHVXNlRWxlbWVudD4gU1ZHVXNlRWxlbWVu
dDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVu
dCkKIHsKLSAgICByZXR1cm4gbmV3IFNWR1VzZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHVXNlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkp
OwogfQogCiBTVkdFbGVtZW50SW5zdGFuY2UqIFNWR1VzZUVsZW1lbnQ6Omluc3RhbmNlUm9vdCgp
IGNvbnN0CkBAIC03OTUsNyArNzk1LDcgQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpleHBhbmRVc2VF
bGVtZW50c0luUwogCiAgICAgICAgIC8vIERvbid0IEFTU0VSVCh0YXJnZXQpIGhlcmUsIGl0IG1h
eSBiZSAicGVuZGluZyIsIHRvby4KICAgICAgICAgLy8gU2V0dXAgc3ViLXNoYWRvdyB0cmVlIHJv
b3Qgbm9kZQotICAgICAgICBSZWZQdHI8U1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ+IGNs
b25lUGFyZW50ID0gbmV3IFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50KGRvY3VtZW50KCkp
OworICAgICAgICBSZWZQdHI8U1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ+IGNsb25lUGFy
ZW50ID0gU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsK
IAogICAgICAgICAvLyBTcGVjOiBJbiB0aGUgZ2VuZXJhdGVkIGNvbnRlbnQsIHRoZSAndXNlJyB3
aWxsIGJlIHJlcGxhY2VkIGJ5ICdnJywgd2hlcmUgYWxsIGF0dHJpYnV0ZXMgZnJvbSB0aGUKICAg
ICAgICAgLy8gJ3VzZScgZWxlbWVudCBleGNlcHQgZm9yIHgsIHksIHdpZHRoLCBoZWlnaHQgYW5k
IHhsaW5rOmhyZWYgYXJlIHRyYW5zZmVycmVkIHRvIHRoZSBnZW5lcmF0ZWQgJ2cnIGVsZW1lbnQu
CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdWS2VybkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29y
ZS9zdmcvU1ZHVktlcm5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBA
QCBpbmxpbmUgU1ZHVktlcm5FbGVtZW50OjpTVkdWS2VybkVsZW1lbnQoCiAKIFBhc3NSZWZQdHI8
U1ZHVktlcm5FbGVtZW50PiBTVkdWS2VybkVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBTVkdW
S2VybkVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U1ZHVktlcm5FbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIHZvaWQgU1ZHVktlcm5F
bGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdWaWV3
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHVmlld0VsZW1lbnQuY3Bw
CShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvc3ZnL1NWR1ZpZXdFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBpbmxpbmUgU1ZHVmlld0VsZW1lbnQ6OlNWR1Zp
ZXdFbGVtZW50KGNvCiAKIFBhc3NSZWZQdHI8U1ZHVmlld0VsZW1lbnQ+IFNWR1ZpZXdFbGVtZW50
OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50
KQogewotICAgIHJldHVybiBuZXcgU1ZHVmlld0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHVmlld0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQp
KTsKIH0KIAogU1ZHU3RyaW5nTGlzdCogU1ZHVmlld0VsZW1lbnQ6OnZpZXdUYXJnZXQoKSBjb25z
dApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MCw3
ICsyNDAsNyBAQCBib29sIFNWR0ltYWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSCiAgICAg
ICAgIHN0YXRpYyBGcmFtZUxvYWRlckNsaWVudCogZHVtbXlGcmFtZUxvYWRlckNsaWVudCA9ICBu
ZXcgRW1wdHlGcmFtZUxvYWRlckNsaWVudDsKIAogICAgICAgICBQYWdlOjpQYWdlQ2xpZW50cyBw
YWdlQ2xpZW50czsKLSAgICAgICAgbV9jaHJvbWVDbGllbnQuc2V0KG5ldyBTVkdJbWFnZUNocm9t
ZUNsaWVudCh0aGlzKSk7CisgICAgICAgIG1fY2hyb21lQ2xpZW50ID0gYWRvcHRQdHIobmV3IFNW
R0ltYWdlQ2hyb21lQ2xpZW50KHRoaXMpKTsKICAgICAgICAgcGFnZUNsaWVudHMuY2hyb21lQ2xp
ZW50ID0gbV9jaHJvbWVDbGllbnQuZ2V0KCk7CiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCiAg
ICAgICAgIHN0YXRpYyBDb250ZXh0TWVudUNsaWVudCogZHVtbXlDb250ZXh0TWVudUNsaWVudCA9
IG5ldyBFbXB0eUNvbnRleHRNZW51Q2xpZW50OwpJbmRleDogV2ViQ29yZS93bWwvV01MQUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEFFbGVtZW50LmNwcAkocmV2aXNp
b24gNjY0NDUpCisrKyBXZWJDb3JlL3dtbC9XTUxBRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDcgKzUzLDcgQEAgV01MQUVsZW1lbnQ6OldNTEFFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZAogCiBQYXNzUmVmUHRyPFdNTEFFbGVtZW50PiBXTUxBRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4g
bmV3IFdNTEFFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFdNTEFFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIHZvaWQgV01MQUVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKSW5kZXg6IFdlYkNvcmUv
d21sL1dNTEFjY2Vzc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEFj
Y2Vzc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvd21sL1dNTEFjY2Vz
c0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIFdNTEFjY2Vzc0Vs
ZW1lbnQ6OldNTEFjY2Vzc0VsZW1lbnQoY29uc3QKIAogUGFzc1JlZlB0cjxXTUxBY2Nlc3NFbGVt
ZW50PiBXTUxBY2Nlc3NFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBuZXcgV01MQWNjZXNzRWxlbWVu
dCh0YWdOYW1lLCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXTUxBY2Nlc3NF
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIHZvaWQgV01MQWNjZXNzRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQpJbmRleDogV2ViQ29yZS93bWwv
V01MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MQW5jaG9y
RWxlbWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29yZS93bWwvV01MQW5jaG9yRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgV01MQW5jaG9yRWxlbWVu
dDo6V01MQW5jaG9yRWxlbWVudChjb25zdAogCiBQYXNzUmVmUHRyPFdNTEFuY2hvckVsZW1lbnQ+
IFdNTEFuY2hvckVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBXTUxBbmNob3JFbGVtZW50KHRh
Z05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdNTEFuY2hvckVsZW1l
bnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAogV01MQW5jaG9yRWxlbWVudDo6fldNTEFuY2hv
ckVsZW1lbnQoKQpJbmRleDogV2ViQ29yZS93bWwvV01MQlJFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3dtbC9XTUxCUkVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdl
YkNvcmUvd21sL1dNTEJSRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcg
QEAgV01MQlJFbGVtZW50OjpXTUxCUkVsZW1lbnQoY29uc3QgUXVhbGlmaQogCiBQYXNzUmVmUHRy
PFdNTEJSRWxlbWVudD4gV01MQlJFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBuZXcgV01MQlJFbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdNTEJSRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiBib29sIFdNTEJSRWxlbWVudDo6bWFwVG9F
bnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkm
IHJlc3VsdCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvd21sL1dNTENhcmRFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxDYXJkRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1
KQorKysgV2ViQ29yZS93bWwvV01MQ2FyZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Nyw3ICs1Nyw3IEBAIFdNTENhcmRFbGVtZW50OjpXTUxDYXJkRWxlbWVudChjb25zdCBRdWEKIAog
UGFzc1JlZlB0cjxXTUxDYXJkRWxlbWVudD4gV01MQ2FyZEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJu
IG5ldyBXTUxDYXJkRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBXTUxDYXJkRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiBXTUxDYXJk
RWxlbWVudDo6fldNTENhcmRFbGVtZW50KCkKSW5kZXg6IFdlYkNvcmUvd21sL1dNTERvRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MRG9FbGVtZW50LmNwcAkocmV2aXNp
b24gNjY0NDUpCisrKyBXZWJDb3JlL3dtbC9XTUxEb0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw3ICs1Myw3IEBAIFdNTERvRWxlbWVudDo6V01MRG9FbGVtZW50KGNvbnN0IFF1YWxp
ZmkKIAogUGFzc1JlZlB0cjxXTUxEb0VsZW1lbnQ+IFdNTERvRWxlbWVudDo6Y3JlYXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1
cm4gbmV3IFdNTERvRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBXTUxEb0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAogdm9pZCBXTUxE
b0VsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQpJbmRleDogV2ViQ29y
ZS93bWwvV01MRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxEb2N1bWVu
dC5oCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvd21sL1dNTERvY3VtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgY2xhc3MgV01MRG9jdW1lbnQgOiBwdWJsaWMgRG9j
dW1lbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdNTERvY3VtZW50PiBjcmVh
dGUoRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFdNTERvY3VtZW50KGZyYW1lLCB1cmwpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKGFkb3B0UmVmKG5ldyBXTUxEb2N1bWVudChmcmFtZSwgdXJsKSkpKTsKICAgICB9CiAK
ICAgICB2aXJ0dWFsIH5XTUxEb2N1bWVudCgpOwpJbmRleDogV2ViQ29yZS93bWwvV01MRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MRWxlbWVudC5jcHAJKHJldmlzaW9u
IDY2NDQ1KQorKysgV2ViQ29yZS93bWwvV01MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDEzICszOSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgV01M
TmFtZXM7CiAKIFdNTEVsZW1lbnQ6OldNTEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQotICAgIDogU3R5bGVkRWxlbWVudCh0YWdOYW1lLCBk
b2N1bWVudCwgQ3JlYXRlU3R5bGVkRWxlbWVudFplcm9SZWZDb3VudCkKKyAgICA6IFN0eWxlZEVs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIENyZWF0ZVN0eWxlZEVsZW1lbnQpCiB7CiB9CiAKIFBh
c3NSZWZQdHI8V01MRWxlbWVudD4gV01MRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4gbmV3IFdNTEVs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV01MRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiBib29sIFdNTEVsZW1lbnQ6Om1hcFRvRW50
cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiBy
ZXN1bHQpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxGaWVsZFNldEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEZpZWxkU2V0RWxlbWVudC5jcHAJKHJldmlzaW9u
IDY2NDQ1KQorKysgV2ViQ29yZS93bWwvV01MRmllbGRTZXRFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNyArNDEsNyBAQCBXTUxGaWVsZFNldEVsZW1lbnQ6OldNTEZpZWxkU2V0RWxl
bWVudChjCiAKIFBhc3NSZWZQdHI8V01MRmllbGRTZXRFbGVtZW50PiBXTUxGaWVsZFNldEVsZW1l
bnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1l
bnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBXTUxGaWVsZFNldEVsZW1lbnQodGFnTmFtZSwgZG9jdW1l
bnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV01MRmllbGRTZXRFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KSk7CiB9CiAKIFdNTEZpZWxkU2V0RWxlbWVudDo6fldNTEZpZWxkU2V0RWxlbWVu
dCgpCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvd21sL1dNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2
NDQ1KQorKysgV2ViQ29yZS93bWwvV01MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzcsNyArMzcsNyBAQCBXTUxGb3JtQ29udHJvbEVsZW1lbnQ6OldNTEZvcm1Db250
cm9sRWxlCiAKIFBhc3NSZWZQdHI8V01MRm9ybUNvbnRyb2xFbGVtZW50PiBXTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCog
ZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBXTUxGb3JtQ29udHJvbEVsZW1lbnQodGFnTmFt
ZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV01MRm9ybUNvbnRyb2xFbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIFdNTEZvcm1Db250cm9sRWxlbWVudDo6fldN
TEZvcm1Db250cm9sRWxlbWVudCgpCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxHb0VsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEdvRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2
NDQ1KQorKysgV2ViQ29yZS93bWwvV01MR29FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTIsNyArNTIsNyBAQCBXTUxHb0VsZW1lbnQ6OldNTEdvRWxlbWVudChjb25zdCBRdWFsaWZpCiAg
CiBQYXNzUmVmUHRyPFdNTEdvRWxlbWVudD4gV01MR29FbGVtZW50OjpjcmVhdGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBu
ZXcgV01MR29FbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFdNTEdvRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiB2b2lkIFdNTEdvRWxl
bWVudDo6cmVnaXN0ZXJQb3N0ZmllbGRFbGVtZW50KFdNTFBvc3RmaWVsZEVsZW1lbnQqIHBvc3Rm
aWVsZCkKSW5kZXg6IFdlYkNvcmUvd21sL1dNTEltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS93bWwvV01MSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBX
ZWJDb3JlL3dtbC9XTUxJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0
NSw3IEBAIFdNTEltYWdlRWxlbWVudDo6V01MSW1hZ2VFbGVtZW50KGNvbnN0IFEKIAogUGFzc1Jl
ZlB0cjxXTUxJbWFnZUVsZW1lbnQ+IFdNTEltYWdlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4gbmV3
IFdNTEltYWdlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXTUxJbWFnZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAogV01MSW1hZ2VF
bGVtZW50Ojp+V01MSW1hZ2VFbGVtZW50KCkKSW5kZXg6IFdlYkNvcmUvd21sL1dNTElucHV0RWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MSW5wdXRFbGVtZW50LmNwcAko
cmV2aXNpb24gNjY0NDUpCisrKyBXZWJDb3JlL3dtbC9XTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIFdNTElucHV0RWxlbWVudDo6V01MSW5wdXRFbGVt
ZW50KGNvbnN0IFEKIAogUGFzc1JlZlB0cjxXTUxJbnB1dEVsZW1lbnQ+IFdNTElucHV0RWxlbWVu
dDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVu
dCkKIHsKLSAgICByZXR1cm4gbmV3IFdNTElucHV0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXTUxJbnB1dEVsZW1lbnQodGFnTmFtZSwgZG9jdW1l
bnQpKTsKIH0KIAogV01MSW5wdXRFbGVtZW50Ojp+V01MSW5wdXRFbGVtZW50KCkKSW5kZXg6IFdl
YkNvcmUvd21sL1dNTEluc2VydGVkTGVnZW5kRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS93bWwvV01MSW5zZXJ0ZWRMZWdlbmRFbGVtZW50LmNwcAkocmV2aXNpb24gNjY0NDUpCisr
KyBXZWJDb3JlL3dtbC9XTUxJbnNlcnRlZExlZ2VuZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw3ICszMiw3IEBAIFdNTEluc2VydGVkTGVnZW5kRWxlbWVudDo6V01MSW5zZXJ0ZWRM
ZWcKIAogUGFzc1JlZlB0cjxXTUxJbnNlcnRlZExlZ2VuZEVsZW1lbnQ+IFdNTEluc2VydGVkTGVn
ZW5kRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4gbmV3IFdNTEluc2VydGVkTGVnZW5kRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXTUxJbnNlcnRlZExl
Z2VuZEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAogV01MSW5zZXJ0ZWRMZWdlbmRF
bGVtZW50Ojp+V01MSW5zZXJ0ZWRMZWdlbmRFbGVtZW50KCkKSW5kZXg6IFdlYkNvcmUvd21sL1dN
TEludHJpbnNpY0V2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxJbnRyaW5z
aWNFdmVudC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29yZS93bWwvV01MSW50cmluc2lj
RXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIFdNTEludHJpbnNpY0V2
ZW50OjpXTUxJbnRyaW5zaWNFdmVudChEb2MKIAogUGFzc1JlZlB0cjxXTUxJbnRyaW5zaWNFdmVu
dD4gV01MSW50cmluc2ljRXZlbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBXTUxJbnRyaW5zaWNFdmVu
dCh0YWdOYW1lLCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXTUxJbnRyaW5z
aWNFdmVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiBXTUxJbnRyaW5zaWNFdmVudDo6V01M
SW50cmluc2ljRXZlbnQoV01MVGFza0VsZW1lbnQqIHRhc2tFbGVtZW50KQpJbmRleDogV2ViQ29y
ZS93bWwvV01MTWV0YUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTE1l
dGFFbGVtZW50LmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBXZWJDb3JlL3dtbC9XTUxNZXRhRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgV01MTWV0YUVsZW1lbnQ6
OldNTE1ldGFFbGVtZW50KGNvbnN0IFF1YQogCiBQYXNzUmVmUHRyPFdNTE1ldGFFbGVtZW50PiBX
TUxNZXRhRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4gbmV3IFdNTE1ldGFFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdNTE1ldGFFbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50KSk7CiB9CiAKIFdNTE1ldGFFbGVtZW50Ojp+V01MTWV0YUVsZW1lbnQoKQpJ
bmRleDogV2ViQ29yZS93bWwvV01MTm9vcEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvd21sL1dNTE5vb3BFbGVtZW50LmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBXZWJDb3JlL3dt
bC9XTUxOb29wRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgV01M
Tm9vcEVsZW1lbnQ6OldNTE5vb3BFbGVtZW50KGNvbnN0IFF1YQogCiBQYXNzUmVmUHRyPFdNTE5v
b3BFbGVtZW50PiBXTUxOb29wRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4gbmV3IFdNTE5vb3BFbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdNTE5vb3BF
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIFdNTE5vb3BFbGVtZW50Ojp+V01MTm9v
cEVsZW1lbnQoKQpJbmRleDogV2ViQ29yZS93bWwvV01MT25FdmVudEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTE9uRXZlbnRFbGVtZW50LmNwcAkocmV2aXNpb24gNjY0
NDUpCisrKyBXZWJDb3JlL3dtbC9XTUxPbkV2ZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDcgQEAgV01MT25FdmVudEVsZW1lbnQ6OldNTE9uRXZlbnRFbGVtZW50KGNv
bgogCiBQYXNzUmVmUHRyPFdNTE9uRXZlbnRFbGVtZW50PiBXTUxPbkV2ZW50RWxlbWVudDo6Y3Jl
YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsK
LSAgICByZXR1cm4gbmV3IFdNTE9uRXZlbnRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFdNTE9uRXZlbnRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
KSk7CiB9CiAKIHZvaWQgV01MT25FdmVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSogYXR0cikKSW5kZXg6IFdlYkNvcmUvd21sL1dNTE9wdEdyb3VwRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MT3B0R3JvdXBFbGVtZW50LmNwcAkocmV2aXNp
b24gNjY0NDUpCisrKyBXZWJDb3JlL3dtbC9XTUxPcHRHcm91cEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIFdNTE9wdEdyb3VwRWxlbWVudDo6V01MT3B0R3JvdXBF
bGVtZW50KGMKIAogUGFzc1JlZlB0cjxXTUxPcHRHcm91cEVsZW1lbnQ+IFdNTE9wdEdyb3VwRWxl
bWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1
bWVudCkKIHsKLSAgICByZXR1cm4gbmV3IFdNTE9wdEdyb3VwRWxlbWVudCh0YWdOYW1lLCBkb2N1
bWVudCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXTUxPcHRHcm91cEVsZW1lbnQodGFnTmFt
ZSwgZG9jdW1lbnQpKTsKIH0KIAogV01MT3B0R3JvdXBFbGVtZW50Ojp+V01MT3B0R3JvdXBFbGVt
ZW50KCkKSW5kZXg6IFdlYkNvcmUvd21sL1dNTE9wdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvd21sL1dNTE9wdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysr
IFdlYkNvcmUvd21sL1dNTE9wdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3
ICs0MSw3IEBAIFdNTE9wdGlvbkVsZW1lbnQ6OldNTE9wdGlvbkVsZW1lbnQoY29uc3QKIAogUGFz
c1JlZlB0cjxXTUxPcHRpb25FbGVtZW50PiBXTUxPcHRpb25FbGVtZW50OjpjcmVhdGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVy
biBuZXcgV01MT3B0aW9uRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBXTUxPcHRpb25FbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIFdN
TE9wdGlvbkVsZW1lbnQ6On5XTUxPcHRpb25FbGVtZW50KCkKSW5kZXg6IFdlYkNvcmUvd21sL1dN
TFBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxQRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29yZS93bWwvV01MUEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIFdNTFBFbGVtZW50OjpXTUxQRWxlbWVudChjb25zdCBR
dWFsaWZpZWQKIAogUGFzc1JlZlB0cjxXTUxQRWxlbWVudD4gV01MUEVsZW1lbnQ6OmNyZWF0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAg
cmV0dXJuIG5ldyBXTUxQRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBXTUxQRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiBib29sIFdN
TFBFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBw
ZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdApJbmRleDogV2ViQ29yZS93bWwvV01MUG9z
dGZpZWxkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MUG9zdGZpZWxk
RWxlbWVudC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29yZS93bWwvV01MUG9zdGZpZWxk
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgV01MUG9zdGZpZWxk
RWxlbWVudDo6V01MUG9zdGZpZWxkRWxlbWVudAogCiBQYXNzUmVmUHRyPFdNTFBvc3RmaWVsZEVs
ZW1lbnQ+IFdNTFBvc3RmaWVsZEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBXTUxQb3N0Zmll
bGRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdN
TFBvc3RmaWVsZEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAogdm9pZCBXTUxQb3N0
ZmllbGRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCkluZGV4OiBXZWJDb3JlL3dtbC9X
TUxQcmV2RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MUHJldkVsZW1l
bnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvd21sL1dNTFByZXZFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBXTUxQcmV2RWxlbWVudDo6V01MUHJl
dkVsZW1lbnQoY29uc3QgUXVhCiAKIFBhc3NSZWZQdHI8V01MUHJldkVsZW1lbnQ+IFdNTFByZXZF
bGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
Y3VtZW50KQogewotICAgIHJldHVybiBuZXcgV01MUHJldkVsZW1lbnQodGFnTmFtZSwgZG9jdW1l
bnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV01MUHJldkVsZW1lbnQodGFnTmFtZSwgZG9j
dW1lbnQpKTsKIH0KIAogV01MUHJldkVsZW1lbnQ6On5XTUxQcmV2RWxlbWVudCgpCkluZGV4OiBX
ZWJDb3JlL3dtbC9XTUxSZWZyZXNoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93
bWwvV01MUmVmcmVzaEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvd21s
L1dNTFJlZnJlc2hFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBX
TUxSZWZyZXNoRWxlbWVudDo6V01MUmVmcmVzaEVsZW1lbnQoY29uCiAKIFBhc3NSZWZQdHI8V01M
UmVmcmVzaEVsZW1lbnQ+IFdNTFJlZnJlc2hFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBuZXcgV01M
UmVmcmVzaEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgV01MUmVmcmVzaEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAogV01MUmVmcmVz
aEVsZW1lbnQ6On5XTUxSZWZyZXNoRWxlbWVudCgpCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxTZWxl
Y3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxTZWxlY3RFbGVtZW50
LmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBXZWJDb3JlL3dtbC9XTUxTZWxlY3RFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBXTUxTZWxlY3RFbGVtZW50OjpXTUxT
ZWxlY3RFbGVtZW50KGNvbnN0CiAKIFBhc3NSZWZQdHI8V01MU2VsZWN0RWxlbWVudD4gV01MU2Vs
ZWN0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4gbmV3IFdNTFNlbGVjdEVsZW1lbnQodGFnTmFtZSwg
ZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV01MU2VsZWN0RWxlbWVudCh0YWdO
YW1lLCBkb2N1bWVudCkpOwogfQogCiBXTUxTZWxlY3RFbGVtZW50Ojp+V01MU2VsZWN0RWxlbWVu
dCgpCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxTZXR2YXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3dtbC9XTUxTZXR2YXJFbGVtZW50LmNwcAkocmV2aXNpb24gNjY0NDUpCisrKyBX
ZWJDb3JlL3dtbC9XTUxTZXR2YXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNyBAQCBXTUxTZXR2YXJFbGVtZW50OjpXTUxTZXR2YXJFbGVtZW50KGNvbnN0CiAKIFBhc3NS
ZWZQdHI8V01MU2V0dmFyRWxlbWVudD4gV01MU2V0dmFyRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4g
bmV3IFdNTFNldHZhckVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgV01MU2V0dmFyRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiBXTUxT
ZXR2YXJFbGVtZW50Ojp+V01MU2V0dmFyRWxlbWVudCgpCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxU
YWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFRhYmxlRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDY2NDQ1KQorKysgV2ViQ29yZS93bWwvV01MVGFibGVFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBXTUxUYWJsZUVsZW1lbnQ6OldNTFRh
YmxlRWxlbWVudChjb25zdCBRCiAKIFBhc3NSZWZQdHI8V01MVGFibGVFbGVtZW50PiBXTUxUYWJs
ZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCog
ZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBXTUxUYWJsZUVsZW1lbnQodGFnTmFtZSwgZG9j
dW1lbnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV01MVGFibGVFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KSk7CiB9CiAKIFdNTFRhYmxlRWxlbWVudDo6fldNTFRhYmxlRWxlbWVudCgpCklu
ZGV4OiBXZWJDb3JlL3dtbC9XTUxUYXNrRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS93bWwvV01MVGFza0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjQ0NSkKKysrIFdlYkNvcmUvd21s
L1dNTFRhc2tFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBXTUxU
YXNrRWxlbWVudDo6V01MVGFza0VsZW1lbnQoY29uc3QgUXVhCiAKIFBhc3NSZWZQdHI8V01MVGFz
a0VsZW1lbnQ+IFdNTFRhc2tFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBuZXcgV01MVGFza0VsZW1l
bnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV01MVGFza0Vs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAogV01MVGFza0VsZW1lbnQ6On5XTUxUYXNr
RWxlbWVudCgpCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxUZW1wbGF0ZUVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFRlbXBsYXRlRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2
NDQ1KQorKysgV2ViQ29yZS93bWwvV01MVGVtcGxhdGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDUsNyArNDUsNyBAQCBXTUxUZW1wbGF0ZUVsZW1lbnQ6On5XTUxUZW1wbGF0ZUVsZW1l
bnQoCiAKIFBhc3NSZWZQdHI8V01MVGVtcGxhdGVFbGVtZW50PiBXTUxUZW1wbGF0ZUVsZW1lbnQ6
OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQp
CiB7Ci0gICAgcmV0dXJuIG5ldyBXTUxUZW1wbGF0ZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQp
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV01MVGVtcGxhdGVFbGVtZW50KHRhZ05hbWUsIGRv
Y3VtZW50KSk7CiB9CiAKIHZvaWQgV01MVGVtcGxhdGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShBdHRyaWJ1dGUqIGF0dHIpCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxUaW1lckVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFRpbWVyRWxlbWVudC5jcHAJKHJldmlz
aW9uIDY2NDQ1KQorKysgV2ViQ29yZS93bWwvV01MVGltZXJFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNyArNDQsNyBAQCBXTUxUaW1lckVsZW1lbnQ6OldNTFRpbWVyRWxlbWVudChj
b25zdCBRCiAKIFBhc3NSZWZQdHI8V01MVGltZXJFbGVtZW50PiBXTUxUaW1lckVsZW1lbnQ6OmNy
ZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7
Ci0gICAgcmV0dXJuIG5ldyBXTUxUaW1lckVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgV01MVGltZXJFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7
CiB9CiAKIHZvaWQgV01MVGltZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1
dGUqIGF0dHIpCg==
</data>
<flag name="review"
          id="54922"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>