<?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>8929</bug_id>
          
          <creation_ts>2006-05-15 16:12:40 -0700</creation_ts>
          <short_desc>Split html_imageimpl.* into separate files (one per class).</short_desc>
          <delta_ts>2006-05-16 00:46:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>42415</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-15 16:12:40 -0700</bug_when>
    <thetext>last one in html/ !</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42416</commentid>
    <comment_count>1</comment_count>
      <attachid>8334</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-15 16:16:36 -0700</bug_when>
    <thetext>Created attachment 8334
do the splits! (ignoring whitespace changes)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42417</commentid>
    <comment_count>2</comment_count>
      <attachid>8334</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-15 16:18:38 -0700</bug_when>
    <thetext>Comment on attachment 8334
do the splits! (ignoring whitespace changes)

timh reviewed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8334</attachid>
            <date>2006-05-15 16:16:36 -0700</date>
            <delta_ts>2006-05-15 16:18:38 -0700</delta_ts>
            <desc>do the splits! (ignoring whitespace changes)</desc>
            <filename>split.patch</filename>
            <type>text/plain</type>
            <size>139670</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGJpbmRpbmdzL2pzL2tqc19odG1sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9q
cy9ranNfaHRtbC5jcHAJKHJldmlzaW9uIDE0MzkwKQorKysgYmluZGluZ3MvanMva2pzX2h0bWwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw5IEBACiAjaW5jbHVkZSAiRG9jTG9hZGVy
LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQXBwbGV0RWxlbWVudC5oIgor
I2luY2x1ZGUgIkhUTUxBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxCYXNlRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxCYXNlRm9udEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQmxvY2tx
dW90ZUVsZW1lbnQuaCIKQEAgLTQ2LDExICs0OCwxMyBAQAogI2luY2x1ZGUgIkhUTUxIUkVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSUZyYW1l
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
SXNJbmRleEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTGFiZWxFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTExlZ2VuZEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTElFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE1hcEVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MTWVudUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWV0YUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTW9kRWxlbWVudC5oIgpAQCAtODEsNyArODUsNiBAQAogI2luY2x1ZGUg
IlRleHQuaCIKICNpbmNsdWRlICJjc3NfcnVsZWltcGwuaCIKICNpbmNsdWRlICJkb20yX2V2ZW50
c2ltcGwuaCIKLSNpbmNsdWRlICJodG1sX2ltYWdlaW1wbC5oIgogI2luY2x1ZGUgImtqc19jc3Mu
aCIKICNpbmNsdWRlICJranNfZXZlbnRzLmgiCiAjaW5jbHVkZSAia2pzX3Byb3h5LmgiCkluZGV4
OiBiaW5kaW5ncy9qcy9ranNfZXZlbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9r
anNfZXZlbnRzLmNwcAkocmV2aXNpb24gMTQzODIpCisrKyBiaW5kaW5ncy9qcy9ranNfZXZlbnRz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsOCBAQAogI2luY2x1ZGUgIkpTTW91c2VF
dmVudC5oIgogI2luY2x1ZGUgIkpTS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgImRvbTJfZXZl
bnRzaW1wbC5oIgotI2luY2x1ZGUgImh0bWxfaW1hZ2VpbXBsLmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgImtqc19wcm94
eS5oIgogI2luY2x1ZGUgImtqc193aW5kb3cuaCIKIApJbmRleDogYmluZGluZ3MvanMvSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9K
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShyZXZpc2lvbiAxNDM4MikKKysrIGJp
bmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJDYW52YXNTdHlsZS5oIgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJKU0NhbnZhc0dyYWRpZW50LmgiCiAj
aW5jbHVkZSAiSlNDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuaCIKSW5kZXg6IGJpbmRpbmdzL29iamMvRE9NSFRNTC5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBiaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0JKHJldmlzaW9uIDE0MzkwKQorKysgYmluZGluZ3Mv
b2JqYy9ET01IVE1MLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0
ICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW1wb3J0ICJGb3VuZGF0aW9uRXh0cmFzLmgiCiAjaW1w
b3J0ICJIVE1MQXBwbGV0RWxlbWVudC5oIgorI2ltcG9ydCAiSFRNTEFyZWFFbGVtZW50LmgiCiAj
aW1wb3J0ICJIVE1MQmFzZUVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxCYXNlRm9udEVsZW1lbnQu
aCIKICNpbXBvcnQgIkhUTUxCb2R5RWxlbWVudC5oIgpAQCAtNTIsMTEgKzUzLDEzIEBACiAjaW1w
b3J0ICJIVE1MSFJFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MSHRtbEVsZW1lbnQuaCIKICNpbXBv
cnQgIkhUTUxJRnJhbWVFbGVtZW50LmgiCisjaW1wb3J0ICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAj
aW1wb3J0ICJIVE1MSXNJbmRleEVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxMYWJlbEVsZW1lbnQu
aCIKICNpbXBvcnQgIkhUTUxMZWdlbmRFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MTElFbGVtZW50
LmgiCiAjaW1wb3J0ICJIVE1MTGlua0VsZW1lbnQuaCIKKyNpbXBvcnQgIkhUTUxNYXBFbGVtZW50
LmgiCiAjaW1wb3J0ICJIVE1MTWVudUVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxNZXRhRWxlbWVu
dC5oIgogI2ltcG9ydCAiSFRNTE5hbWVzLmgiCkBAIC04MSw3ICs4NCw2IEBACiAjaW1wb3J0ICJI
VE1MVGl0bGVFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MVUxpc3RFbGVtZW50LmgiCiAjaW1wb3J0
ICJOYW1lTm9kZUxpc3QuaCIKLSNpbXBvcnQgImh0bWxfaW1hZ2VpbXBsLmgiCiAjaW1wb3J0ICJt
YXJrdXAuaCIKICNpbXBvcnQgIlJlbmRlclRleHRGaWVsZC5oIgogI2ltcG9ydCAiRnJhbWVWaWV3
LmgiCkluZGV4OiBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1s
L0hUTUxPYmplY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMTQzODIpCisrKyBodG1sL0hUTUxPYmpl
Y3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTMgKzI4LDE0IEBACiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VMb2FkZXIuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyUGFydE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgog
I2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJjc3NoZWxwZXIuaCIKLSNpbmNsdWRlICJodG1s
X2ltYWdlaW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IGh0bWwvSFRNTFBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MUGFyc2VyLmNwcAkocmV2aXNpb24gMTQz
OTApCisrKyBodG1sL0hUTUxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3
IEBACiAjaW5jbHVkZSAiSFRNTEhSRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxJc0luZGV4RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxNYXBF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGFibGVSb3dFbGVtZW50LmgiCkluZGV4OiBodG1s
L2h0bWxfaW1hZ2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL2h0bWxfaW1hZ2VpbXBsLmNw
cAkocmV2aXNpb24gMTQzODIpCisrKyBodG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw3MTQgKzAsMCBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
RE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiaHRtbF9p
bWFnZWltcGwuaCIKLQotI2luY2x1ZGUgIkRvY0xvYWRlci5oIgotI2luY2x1ZGUgIkV2ZW50TmFt
ZXMuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQu
aCIKLSNpbmNsdWRlICJjc3NoZWxwZXIuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgi
Ci0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5o
IgotI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0KLXVz
aW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNw
YWNlIEV2ZW50TmFtZXM7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi1IVE1MSW1hZ2VM
b2FkZXI6OkhUTUxJbWFnZUxvYWRlcihFbGVtZW50KiBlbHQpCi0gICAgOiBtX2VsZW1lbnQoZWx0
KSwgbV9pbWFnZSgwKSwgbV9maXJlZExvYWQodHJ1ZSksIG1faW1hZ2VDb21wbGV0ZSh0cnVlKQot
ewotfQotCi1IVE1MSW1hZ2VMb2FkZXI6On5IVE1MSW1hZ2VMb2FkZXIoKQotewotICAgIGlmICht
X2ltYWdlKQotICAgICAgICBtX2ltYWdlLT5kZXJlZih0aGlzKTsKLSAgICBtX2VsZW1lbnQtPmRv
Y3VtZW50KCktPnJlbW92ZUltYWdlKHRoaXMpOwotfQotCi12b2lkIEhUTUxJbWFnZUxvYWRlcjo6
c2V0TG9hZGluZ0ltYWdlKENhY2hlZEltYWdlICpsb2FkaW5nSW1hZ2UpCi17Ci0gICAgbV9maXJl
ZExvYWQgPSBmYWxzZTsKLSAgICBtX2ltYWdlQ29tcGxldGUgPSBmYWxzZTsKLSAgICBtX2ltYWdl
ID0gbG9hZGluZ0ltYWdlOwotfQotCi12b2lkIEhUTUxJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVs
ZW1lbnQoKQotewotICAgIC8vIElmIHdlJ3JlIG5vdCBtYWtpbmcgcmVuZGVyZXJzIGZvciB0aGUg
cGFnZSwgdGhlbiBkb24ndCBsb2FkIGltYWdlcy4gIFdlIGRvbid0IHdhbnQgdG8gc2xvdwotICAg
IC8vIGRvd24gdGhlIHJhdyBIVE1MIHBhcnNpbmcgY2FzZSBieSBsb2FkaW5nIGltYWdlcyB3ZSBk
b24ndCBpbnRlbmQgdG8gZGlzcGxheS4KLSAgICBFbGVtZW50KiBlbGVtID0gZWxlbWVudCgpOwot
ICAgIERvY3VtZW50KiBkb2MgPSBlbGVtLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jLT5yZW5k
ZXJlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBdG9taWNTdHJpbmcgYXR0ciA9IGVsZW0t
PmdldEF0dHJpYnV0ZShlbGVtLT5oYXNMb2NhbE5hbWUob2JqZWN0VGFnKSA/IGRhdGFBdHRyIDog
c3JjQXR0cik7Ci0gICAgCi0gICAgLy8gVHJlYXQgYSBsYWNrIG9mIHNyYyBvciBlbXB0eSBzdHJp
bmcgZm9yIHNyYyBhcyBubyBpbWFnZSBhdCBhbGwuCi0gICAgQ2FjaGVkSW1hZ2UgKm5ld0ltYWdl
ID0gMDsKLSAgICBpZiAoIWF0dHIuaXNFbXB0eSgpKQotICAgICAgICBuZXdJbWFnZSA9IGRvYy0+
ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShwYXJzZVVSTChhdHRyKSk7Ci0KLSAgICBDYWNoZWRJ
bWFnZSAqb2xkSW1hZ2UgPSBtX2ltYWdlOwotICAgIGlmIChuZXdJbWFnZSAhPSBvbGRJbWFnZSkg
ewotI2lmZGVmIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcKLSAgICAgICAgaWYgKCFkb2Mt
Pm93bmVyRWxlbWVudCgpICYmIG5ld0ltYWdlKQotICAgICAgICAgICAgcHJpbnRmKCJJbWFnZSBy
ZXF1ZXN0ZWQgYXQgJWRcbiIsIGRvYy0+ZWxhcHNlZFRpbWUoKSk7Ci0jZW5kaWYKLSAgICAgICAg
c2V0TG9hZGluZ0ltYWdlKG5ld0ltYWdlKTsKLSAgICAgICAgaWYgKG5ld0ltYWdlKQotICAgICAg
ICAgICAgbmV3SW1hZ2UtPnJlZih0aGlzKTsKLSAgICAgICAgaWYgKG9sZEltYWdlKQotICAgICAg
ICAgICAgb2xkSW1hZ2UtPmRlcmVmKHRoaXMpOwotICAgIH0KLQotICAgIGlmIChSZW5kZXJJbWFn
ZSogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KGVsZW0tPnJlbmRlcmVyKCkp
KQotICAgICAgICByZW5kZXJlci0+cmVzZXRBbmltYXRpb24oKTsKLX0KLQotdm9pZCBIVE1MSW1h
Z2VMb2FkZXI6OmRpc3BhdGNoTG9hZEV2ZW50KCkKLXsKLSAgICBpZiAoIW1fZmlyZWRMb2FkICYm
IG1faW1hZ2UpIHsKLSAgICAgICAgbV9maXJlZExvYWQgPSB0cnVlOwotICAgICAgICBlbGVtZW50
KCktPmRpc3BhdGNoSFRNTEV2ZW50KG1faW1hZ2UtPmlzRXJyb3JJbWFnZSgpID8gZXJyb3JFdmVu
dCA6IGxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKLSAgICB9Ci19Ci0KLXZvaWQgSFRNTEltYWdl
TG9hZGVyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRPYmplY3QgKmltYWdlKQotewotICAgIG1faW1h
Z2VDb21wbGV0ZSA9IHRydWU7Ci0gICAgRWxlbWVudCogZWxlbSA9IGVsZW1lbnQoKTsKLSAgICBE
b2N1bWVudCogZG9jID0gZWxlbS0+ZG9jdW1lbnQoKTsKLSAgICBkb2MtPmRpc3BhdGNoSW1hZ2VM
b2FkRXZlbnRTb29uKHRoaXMpOwotI2lmZGVmIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcK
LSAgICAgICAgaWYgKCFkb2MtPm93bmVyRWxlbWVudCgpKQotICAgICAgICAgICAgcHJpbnRmKCJJ
bWFnZSBsb2FkZWQgYXQgJWRcbiIsIGRvYy0+ZWxhcHNlZFRpbWUoKSk7Ci0jZW5kaWYKLSAgICBp
ZiAoUmVuZGVySW1hZ2UqIHJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihlbGVt
LT5yZW5kZXJlcigpKSkKLSAgICAgICAgcmVuZGVyZXItPnNldENhY2hlZEltYWdlKG1faW1hZ2Up
OwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxJbWFnZUVsZW1lbnQ6OkhUTUxJbWFn
ZUVsZW1lbnQoRG9jdW1lbnQgKmRvYywgSFRNTEZvcm1FbGVtZW50ICpmKQotICAgIDogSFRNTEVs
ZW1lbnQoaW1nVGFnLCBkb2MpLCBtX2ltYWdlTG9hZGVyKHRoaXMpLCBpc21hcChmYWxzZSksIG1f
Zm9ybShmKQotICAgICwgbV9jb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVTb3VyY2VPdmVyKQot
ewotICAgIGlmIChmKQotICAgICAgICBmLT5yZWdpc3RlckltZ0VsZW1lbnQodGhpcyk7Ci19Ci0K
LUhUTUxJbWFnZUVsZW1lbnQ6OkhUTUxJbWFnZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYyks
IG1faW1hZ2VMb2FkZXIodGhpcyksIGlzbWFwKGZhbHNlKSwgbV9mb3JtKDApCi0gICAgLCBtX2Nv
bXBvc2l0ZU9wZXJhdG9yKENvbXBvc2l0ZVNvdXJjZU92ZXIpCi17Ci19Ci0KLUhUTUxJbWFnZUVs
ZW1lbnQ6On5IVE1MSW1hZ2VFbGVtZW50KCkKLXsKLSAgICBpZiAobV9mb3JtKQotICAgICAgICBt
X2Zvcm0tPnJlbW92ZUltZ0VsZW1lbnQodGhpcyk7Ci19Ci0KLWJvb2wgSFRNTEltYWdlRWxlbWVu
dDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmli
dXRlRW50cnkmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBpZiAoYXR0ck5hbWUgPT0gd2lkdGhBdHRy
IHx8Ci0gICAgICAgIGF0dHJOYW1lID09IGhlaWdodEF0dHIgfHwKLSAgICAgICAgYXR0ck5hbWUg
PT0gdnNwYWNlQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBoc3BhY2VBdHRyIHx8Ci0gICAg
ICAgIGF0dHJOYW1lID09IHZhbGlnbkF0dHIpIHsKLSAgICAgICAgcmVzdWx0ID0gZVVuaXZlcnNh
bDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBpZiAoYXR0ck5hbWUg
PT0gYm9yZGVyQXR0ciB8fCBhdHRyTmFtZSA9PSBhbGlnbkF0dHIpIHsKLSAgICAgICAgcmVzdWx0
ID0gZVJlcGxhY2VkOyAvLyBTaGFyZWQgd2l0aCBlbWJlZCBhbmQgaWZyYW1lIGVsZW1lbnRzLgot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIEhUTUxFbGVtZW50Ojpt
YXBUb0VudHJ5KGF0dHJOYW1lLCByZXN1bHQpOwotfQotCi12b2lkIEhUTUxJbWFnZUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9IGF0dHItPm5hbWUoKTsKLSAgICBpZiAoYXR0ck5h
bWUgPT0gYWx0QXR0cikgewotICAgICAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PFJlbmRlckltYWdlKj4ocmVuZGVyZXIoKSktPnVwZGF0ZUFsdFRleHQoKTsKLSAg
ICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IHNyY0F0dHIpCi0gICAgICAgIG1faW1hZ2VMb2FkZXIu
dXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSB3aWR0aEF0dHIp
Ci0gICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9XSURUSCwgYXR0ci0+dmFsdWUo
KSk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gaGVpZ2h0QXR0cikKLSAgICAgICAgYWRkQ1NT
TGVuZ3RoKGF0dHIsIENTU19QUk9QX0hFSUdIVCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxzZSBp
ZiAoYXR0ck5hbWUgPT0gYm9yZGVyQXR0cikgewotICAgICAgICAvLyBib3JkZXI9Im5vYm9yZGVy
IiAtPiBib3JkZXI9IjAiCi0gICAgICAgIGlmKGF0dHItPnZhbHVlKCkudG9JbnQoKSkgewotICAg
ICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX0JPUkRFUl9XSURUSCwgYXR0ci0+
dmFsdWUoKSk7Ci0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JE
RVJfVE9QX1NUWUxFLCBDU1NfVkFMX1NPTElEKTsKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5
KGF0dHIsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9TVFlMRSwgQ1NTX1ZBTF9TT0xJRCk7Ci0gICAg
ICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX1NUWUxF
LCBDU1NfVkFMX1NPTElEKTsKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19Q
Uk9QX0JPUkRFUl9MRUZUX1NUWUxFLCBDU1NfVkFMX1NPTElEKTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gdnNwYWNlQXR0cikgewotICAgICAgICBhZGRDU1NMZW5ndGgo
YXR0ciwgQ1NTX1BST1BfTUFSR0lOX1RPUCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgICAgIGFkZENT
U0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fQk9UVE9NLCBhdHRyLT52YWx1ZSgpKTsKLSAg
ICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IGhzcGFjZUF0dHIpIHsKLSAgICAgICAgYWRkQ1NTTGVu
Z3RoKGF0dHIsIENTU19QUk9QX01BUkdJTl9MRUZULCBhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAg
YWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX01BUkdJTl9SSUdIVCwgYXR0ci0+dmFsdWUoKSk7
Ci0gICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBhbGlnbkF0dHIpCi0gICAgICAgIGFkZEhUTUxB
bGlnbm1lbnQoYXR0cik7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gdmFsaWduQXR0cikKLSAg
ICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVkVSVElDQUxfQUxJR04sIGF0dHIt
PnZhbHVlKCkpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IHVzZW1hcEF0dHIpIHsKLSAgICAg
ICAgaWYgKGF0dHItPnZhbHVlKCkuZG9tU3RyaW5nKClbMF0gPT0gJyMnKQotICAgICAgICAgICAg
dXNlbWFwID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdXNlbWFw
ID0gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwocGFyc2VVUkwoYXR0ci0+dmFsdWUoKSkpOwotICAg
ICAgICBtX2lzTGluayA9ICFhdHRyLT5pc051bGwoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHJOYW1l
ID09IGlzbWFwQXR0cikKLSAgICAgICAgaXNtYXAgPSB0cnVlOwotICAgIGVsc2UgaWYgKGF0dHJO
YW1lID09IG9uYWJvcnRBdHRyKQotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihhYm9ydEV2
ZW50LCBhdHRyKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBvbmxvYWRBdHRyKQotICAgICAg
ICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihsb2FkRXZlbnQsIGF0dHIpOwotICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IGNvbXBvc2l0ZUF0dHIpIHsKLSAgICAgICAgaWYgKCFwYXJzZUNvbXBvc2l0ZU9w
ZXJhdG9yKGF0dHItPnZhbHVlKCksIG1fY29tcG9zaXRlT3BlcmF0b3IpKQotICAgICAgICAgICAg
bV9jb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXI7Ci0gICAgfSBlbHNlIGlm
IChhdHRyTmFtZSA9PSBuYW1lQXR0cikgewotICAgICAgICBTdHJpbmcgbmV3TmFtZUF0dHIgPSBh
dHRyLT52YWx1ZSgpOwotICAgICAgICBpZiAoaW5Eb2N1bWVudCgpICYmIGRvY3VtZW50KCktPmlz
SFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIEhUTUxEb2N1bWVudCogZG9jID0gc3RhdGlj
X2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jdW1lbnQoKSk7Ci0gICAgICAgICAgICBkb2MtPnJlbW92
ZU5hbWVkSXRlbShvbGROYW1lQXR0cik7Ci0gICAgICAgICAgICBkb2MtPmFkZE5hbWVkSXRlbShu
ZXdOYW1lQXR0cik7Ci0gICAgICAgIH0KLSAgICAgICAgb2xkTmFtZUF0dHIgPSBuZXdOYW1lQXR0
cjsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOwotfQotCi1TdHJpbmcgSFRNTEltYWdlRWxlbWVudDo6YWx0VGV4dCgpIGNvbnN0Ci17
Ci0gICAgLy8gbGV0cyBmaWd1cmUgb3V0IHRoZSBhbHQgdGV4dC4uIG1hZ2ljIHN0dWZmCi0gICAg
Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OC9SRUMtaHRtbDQwLTE5OTgwNDI0L2FwcGVuZGl4
L25vdGVzLmh0bWwjYWx0Z2VuCi0gICAgLy8gYWxzbyBoZWF2aWx5IGRpc2N1c3NlZCBieSBIaXhp
ZSBvbiBidWd6aWxsYQotICAgIFN0cmluZyBhbHQgPSBnZXRBdHRyaWJ1dGUoYWx0QXR0cik7Ci0g
ICAgLy8gZmFsbCBiYWNrIHRvIHRpdGxlIGF0dHJpYnV0ZQotICAgIGlmIChhbHQuaXNOdWxsKCkp
Ci0gICAgICAgIGFsdCA9IGdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOwotICAgIHJldHVybiBhbHQ7
Ci19Ci0KLVJlbmRlck9iamVjdCAqSFRNTEltYWdlRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVu
ZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUpCi17Ci0gICAgIHJldHVybiBuZXcg
KGFyZW5hKSBSZW5kZXJJbWFnZSh0aGlzKTsKLX0KLQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50Ojph
dHRhY2goKQotewotICAgIEhUTUxFbGVtZW50OjphdHRhY2goKTsKLQotICAgIGlmIChSZW5kZXJJ
bWFnZSogaW1hZ2VPYmogPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KHJlbmRlcmVyKCkpKQot
ICAgICAgICBpbWFnZU9iai0+c2V0Q2FjaGVkSW1hZ2UobV9pbWFnZUxvYWRlci5pbWFnZSgpKTsK
LX0KLQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCi17Ci0g
ICAgRG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50KCk7Ci0gICAgaWYgKGRvYy0+aXNIVE1MRG9jdW1l
bnQoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jKS0+YWRkTmFtZWRJ
dGVtKG9sZE5hbWVBdHRyKTsKLQotICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVu
dCgpOwotfQotCi12b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQot
ewotICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOwotICAgIGlmIChkb2MtPmlzSFRNTERv
Y3VtZW50KCkpCi0gICAgICAgIHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGRvYyktPnJlbW92
ZU5hbWVkSXRlbShvbGROYW1lQXR0cik7Ci0KLSAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21E
b2N1bWVudCgpOwotfQotCi1pbnQgSFRNTEltYWdlRWxlbWVudDo6d2lkdGgoYm9vbCBpZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlcigpKSB7Ci0gICAg
ICAgIC8vIGNoZWNrIHRoZSBhdHRyaWJ1dGUgZmlyc3QgZm9yIGFuIGV4cGxpY2l0IHBpeGVsIHZh
bHVlCi0gICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIGludCB3aWR0aCA9IGdldEF0dHJpYnV0ZSh3
aWR0aEF0dHIpLnRvSW50KCZvayk7Ci0gICAgICAgIGlmIChvaykKLSAgICAgICAgICAgIHJldHVy
biB3aWR0aDsKLSAgICAgICAgCi0gICAgICAgIC8vIGlmIHRoZSBpbWFnZSBpcyBhdmFpbGFibGUs
IHVzZSBpdHMgd2lkdGgKLSAgICAgICAgaWYgKG1faW1hZ2VMb2FkZXIuaW1hZ2UoKSkKLSAgICAg
ICAgICAgIHJldHVybiBtX2ltYWdlTG9hZGVyLmltYWdlKCktPmltYWdlU2l6ZSgpLndpZHRoKCk7
Ci0gICAgfQotCi0gICAgRG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50KCk7Ci0gICAgaWYgKGlnbm9y
ZVBlbmRpbmdTdHlsZXNoZWV0cykKLSAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKLSAgICBlbHNlCi0gICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0KCk7
Ci0KLSAgICByZXR1cm4gcmVuZGVyZXIoKSA/IHJlbmRlcmVyKCktPmNvbnRlbnRXaWR0aCgpIDog
MDsKLX0KLQotaW50IEhUTUxJbWFnZUVsZW1lbnQ6OmhlaWdodChib29sIGlnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cykgY29uc3QKLXsKLSAgICBpZiAoIXJlbmRlcmVyKCkpIHsKLSAgICAgICAgLy8g
Y2hlY2sgdGhlIGF0dHJpYnV0ZSBmaXJzdCBmb3IgYW4gZXhwbGljaXQgcGl4ZWwgdmFsdWUKLSAg
ICAgICAgYm9vbCBvazsKLSAgICAgICAgaW50IGhlaWdodCA9IGdldEF0dHJpYnV0ZShoZWlnaHRB
dHRyKS50b0ludCgmb2spOwotICAgICAgICBpZiAob2spCi0gICAgICAgICAgICByZXR1cm4gaGVp
Z2h0OwotICAgICAgICAKLSAgICAgICAgLy8gaWYgdGhlIGltYWdlIGlzIGF2YWlsYWJsZSwgdXNl
IGl0cyBoZWlnaHQKLSAgICAgICAgaWYgKG1faW1hZ2VMb2FkZXIuaW1hZ2UoKSkKLSAgICAgICAg
ICAgIHJldHVybiBtX2ltYWdlTG9hZGVyLmltYWdlKCktPmltYWdlU2l6ZSgpLmhlaWdodCgpOyAg
ICAgICAgCi0gICAgfQotCi0gICAgRG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50KCk7Ci0gICAgaWYg
KGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cykKLSAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBlbHNlCi0gICAgICAgIGRvYy0+dXBkYXRlTGF5
b3V0KCk7Ci0KLSAgICByZXR1cm4gcmVuZGVyZXIoKSA/IHJlbmRlcmVyKCktPmNvbnRlbnRIZWln
aHQoKSA6IDA7Ci19Ci0KLWJvb2wgSFRNTEltYWdlRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0
cmlidXRlICphdHRyKSBjb25zdAotewotICAgIHJldHVybiBhdHRyLT5uYW1lKCkgPT0gc3JjQXR0
ciB8fCAoYXR0ci0+bmFtZSgpID09IHVzZW1hcEF0dHIgJiYgYXR0ci0+dmFsdWUoKS5kb21TdHJp
bmcoKVswXSAhPSAnIycpOwotfQotCi1TdHJpbmcgSFRNTEltYWdlRWxlbWVudDo6bmFtZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShuYW1lQXR0cik7Ci19Ci0KLXZvaWQgSFRN
TEltYWdlRWxlbWVudDo6c2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0
dHJpYnV0ZShuYW1lQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEltYWdlRWxlbWVudDo6
YWxpZ24oKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsKLX0K
LQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRBbGlnbihjb25zdCBTdHJpbmcmIHZhbHVlKQot
ewotICAgIHNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxJ
bWFnZUVsZW1lbnQ6OmFsdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbHRB
dHRyKTsKLX0KLQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRBbHQoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYWx0QXR0ciwgdmFsdWUpOwotfQotCi1pbnQgSFRN
TEltYWdlRWxlbWVudDo6Ym9yZGVyKCkgY29uc3QKLXsKLSAgICAvLyAjIyMgcmV0dXJuIHZhbHVl
IGluIHBpeGVscwotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYm9yZGVyQXR0cikudG9JbnQoKTsK
LX0KLQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRCb3JkZXIoaW50IHZhbHVlKQotewotICAg
IHNldEF0dHJpYnV0ZShib3JkZXJBdHRyLCBTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwotfQotCi12
b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldEhlaWdodChpbnQgdmFsdWUpCi17Ci0gICAgc2V0QXR0
cmlidXRlKGhlaWdodEF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7Ci19Ci0KLWludCBIVE1M
SW1hZ2VFbGVtZW50Ojpoc3BhY2UoKSBjb25zdAotewotICAgIC8vICMjIyByZXR1cm4gYWN0dWFs
IHZhbHVlCi0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShoc3BhY2VBdHRyKS50b0ludCgpOwotfQot
Ci12b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldEhzcGFjZShpbnQgdmFsdWUpCi17Ci0gICAgc2V0
QXR0cmlidXRlKGhzcGFjZUF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7Ci19Ci0KLWJvb2wg
SFRNTEltYWdlRWxlbWVudDo6aXNNYXAoKSBjb25zdAotewotICAgIHJldHVybiAhZ2V0QXR0cmli
dXRlKGlzbWFwQXR0cikuaXNOdWxsKCk7Ci19Ci0KLXZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0
SXNNYXAoYm9vbCBpc01hcCkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoaXNtYXBBdHRyLCBpc01hcCA/
ICIiIDogMCk7Ci19Ci0KLVN0cmluZyBIVE1MSW1hZ2VFbGVtZW50Ojpsb25nRGVzYygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShsb25nZGVzY0F0dHIpOwotfQotCi12b2lkIEhU
TUxJbWFnZUVsZW1lbnQ6OnNldExvbmdEZXNjKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAg
c2V0QXR0cmlidXRlKGxvbmdkZXNjQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEltYWdl
RWxlbWVudDo6c3JjKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVV
UkwoZ2V0QXR0cmlidXRlKHNyY0F0dHIpKTsKLX0KLQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50Ojpz
ZXRTcmMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoc3JjQXR0ciwg
dmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEltYWdlRWxlbWVudDo6dXNlTWFwKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHVzZW1hcEF0dHIpOwotfQotCi12b2lkIEhUTUxJbWFn
ZUVsZW1lbnQ6OnNldFVzZU1hcChjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJp
YnV0ZSh1c2VtYXBBdHRyLCB2YWx1ZSk7Ci19Ci0KLWludCBIVE1MSW1hZ2VFbGVtZW50Ojp2c3Bh
Y2UoKSBjb25zdAotewotICAgIC8vICMjIyByZXR1cm4gYWN0dWFsIHZzcGFjZQotICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUodnNwYWNlQXR0cikudG9JbnQoKTsKLX0KLQotdm9pZCBIVE1MSW1hZ2VF
bGVtZW50OjpzZXRWc3BhY2UoaW50IHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh2c3BhY2VB
dHRyLCBTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwotfQotCi12b2lkIEhUTUxJbWFnZUVsZW1lbnQ6
OnNldFdpZHRoKGludCB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCBTdHJp
bmc6Om51bWJlcih2YWx1ZSkpOwotfQotCi1pbnQgSFRNTEltYWdlRWxlbWVudDo6eCgpIGNvbnN0
Ci17Ci0gICAgUmVuZGVyT2JqZWN0ICpyID0gcmVuZGVyZXIoKTsKLSAgICBpZiAoIXIpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIGludCB4LCB5OwotICAgIHItPmFic29sdXRlUG9zaXRpb24oeCwg
eSk7Ci0gICAgcmV0dXJuIHg7Ci19Ci0KLWludCBIVE1MSW1hZ2VFbGVtZW50Ojp5KCkgY29uc3QK
LXsKLSAgICBSZW5kZXJPYmplY3QgKnIgPSByZW5kZXJlcigpOwotICAgIGlmICghcikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgaW50IHgsIHk7Ci0gICAgci0+YWJzb2x1dGVQb3NpdGlvbih4LCB5
KTsKLSAgICByZXR1cm4geTsKLX0KLQotYm9vbCBIVE1MSW1hZ2VFbGVtZW50Ojpjb21wbGV0ZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW1hZ2VMb2FkZXIuaW1hZ2VDb21wbGV0ZSgpOwotfQot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxNYXBFbGVtZW50OjpIVE1MTWFwRWxlbWVudChE
b2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnQobWFwVGFnLCBkb2MpCi17Ci19Ci0KLUhU
TUxNYXBFbGVtZW50Ojp+SFRNTE1hcEVsZW1lbnQoKQotewotICAgIGRvY3VtZW50KCktPnJlbW92
ZUltYWdlTWFwKHRoaXMpOwotfQotCi1ib29sIEhUTUxNYXBFbGVtZW50OjpjaGVja0RURChjb25z
dCBOb2RlKiBuZXdDaGlsZCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBzZWVtcyByZWFsbHkgb2Rk
LCBhbGxvd2luZyBvbmx5IGJsb2NrcyBpbnNpZGUgbWFwIGVsZW1lbnRzLgotICAgIHJldHVybiBu
ZXdDaGlsZC0+aGFzVGFnTmFtZShhcmVhVGFnKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShzY3Jp
cHRUYWcpIHx8IGluQmxvY2tUYWdMaXN0KG5ld0NoaWxkKTsKLX0KLQotYm9vbCBIVE1MTWFwRWxl
bWVudDo6bWFwTW91c2VFdmVudChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwg
UmVuZGVyT2JqZWN0OjpOb2RlSW5mbyYgaW5mbykKLXsKLSAgICBOb2RlICpub2RlID0gdGhpczsK
LSAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSkKLSAgICAg
ICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYXJlYVRhZykpCi0gICAgICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8SFRNTEFyZWFFbGVtZW50ICo+KG5vZGUpLT5tYXBNb3VzZUV2ZW50KHgsIHksIHdpZHRo
LCBoZWlnaHQsIGluZm8pKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotdm9pZCBIVE1MTWFwRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlICphdHRyKQotewotICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lID0gYXR0ci0+bmFtZSgpOwotICAgIGlmIChhdHRyTmFtZSA9PSBpZEF0dHIgfHwgYXR0ck5h
bWUgPT0gbmFtZUF0dHIpIHsKLSAgICAgICAgRG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50KCk7Ci0g
ICAgICAgIGlmIChhdHRyTmFtZSA9PSBpZEF0dHIpIHsKLSAgICAgICAgICAgIC8vIENhbGwgYmFz
ZSBjbGFzcyBzbyB0aGF0IGhhc0lEIGJpdCBnZXRzIHNldC4KLSAgICAgICAgICAgIEhUTUxFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLSAgICAgICAgICAgIGlmIChkb2MtPmh0
bWxNb2RlKCkgIT0gRG9jdW1lbnQ6OlhIdG1sKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBkb2MtPnJlbW92ZUltYWdlTWFwKHRoaXMpOwotICAgICAgICBtX25h
bWUgPSBhdHRyLT52YWx1ZSgpOwotICAgICAgICBpZiAobV9uYW1lWzBdID09ICcjJykgewotICAg
ICAgICAgICAgU3RyaW5nIG1hcE5hbWUobV9uYW1lLmRvbVN0cmluZygpLmNvcHkoKSk7Ci0gICAg
ICAgICAgICBtYXBOYW1lLnJlbW92ZSgwLCAxKTsKLSAgICAgICAgICAgIG1fbmFtZSA9IG1hcE5h
bWU7Ci0gICAgICAgIH0KLSAgICAgICAgZG9jLT5hZGRJbWFnZU1hcCh0aGlzKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQot
Ci1QYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1MTWFwRWxlbWVudDo6YXJlYXMoKQotewot
ICAgIHJldHVybiBuZXcgSFRNTENvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rpb246Ok1BUF9B
UkVBUyk7Ci19Ci0KLVN0cmluZyBIVE1MTWFwRWxlbWVudDo6bmFtZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShuYW1lQXR0cik7Ci19Ci0KLXZvaWQgSFRNTE1hcEVsZW1lbnQ6
OnNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobmFtZUF0
dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MQXJlYUVsZW1lbnQ6
OkhUTUxBcmVhRWxlbWVudChEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEFuY2hvckVsZW1lbnQo
YXJlYVRhZywgZG9jKQotewotICAgIG1fY29vcmRzID0gMDsKLSAgICBtX2Nvb3Jkc0xlbiA9IDA7
Ci0gICAgbV9zaGFwZSA9IFVua25vd247Ci0gICAgbGFzdGggPSAtMTsKLSAgICBsYXN0dyA9IC0x
OwotfQotCi1IVE1MQXJlYUVsZW1lbnQ6On5IVE1MQXJlYUVsZW1lbnQoKQotewotICAgIGRlbGV0
ZSBbXSBtX2Nvb3JkczsKLX0KLQotdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09
IHNoYXBlQXR0cikgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUo
KSwgImRlZmF1bHQiKSkKLSAgICAgICAgICAgIG1fc2hhcGUgPSBEZWZhdWx0OwotICAgICAgICBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiY2lyY2xlIikpCi0gICAg
ICAgICAgICBtX3NoYXBlID0gQ2lyY2xlOwotICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShhdHRyLT52YWx1ZSgpLCAicG9seSIpKQotICAgICAgICAgICAgbV9zaGFwZSA9IFBvbHk7
Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJyZWN0
IikpCi0gICAgICAgICAgICBtX3NoYXBlID0gUmVjdDsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBjb29yZHNBdHRyKSB7Ci0gICAgICAgIGRlbGV0ZSBbXSBtX2Nvb3JkczsKLSAgICAg
ICAgbV9jb29yZHMgPSBhdHRyLT52YWx1ZSgpLnRvQ29vcmRzQXJyYXkobV9jb29yZHNMZW4pOwot
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHRhcmdldEF0dHIpIHsKLSAgICAgICAgbV9o
YXNUYXJnZXQgPSAhYXR0ci0+aXNOdWxsKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gYWx0QXR0ciB8fCBhdHRyLT5uYW1lKCkgPT0gYWNjZXNza2V5QXR0cikgewotICAgICAgICAv
LyBEbyBub3RoaW5nLgotICAgIH0gZWxzZQotICAgICAgICBIVE1MQW5jaG9yRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLWJvb2wgSFRNTEFyZWFFbGVtZW50OjptYXBN
b3VzZUV2ZW50KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBSZW5kZXJPYmpl
Y3Q6Ok5vZGVJbmZvJiBpbmZvKQotewotICAgIGlmICh3aWR0aCAhPSBsYXN0dyB8fCBoZWlnaHQg
IT0gbGFzdGgpIHsKLSAgICAgICAgcmVnaW9uID0gZ2V0UmVnaW9uKHdpZHRoLCBoZWlnaHQpOwot
ICAgICAgICBsYXN0dyA9IHdpZHRoOwotICAgICAgICBsYXN0aCA9IGhlaWdodDsKLSAgICB9Ci0K
LSAgICBpZiAoIXJlZ2lvbi5jb250YWlucyhJbnRQb2ludCh4LCB5KSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICBpbmZvLnNldElubmVyTm9kZSh0aGlzKTsKLSAgICBpbmZvLnNl
dFVSTEVsZW1lbnQodGhpcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUludFJlY3QgSFRNTEFy
ZWFFbGVtZW50OjpnZXRSZWN0KFJlbmRlck9iamVjdCogb2JqKSBjb25zdAotewotICAgIGludCBk
eCwgZHk7Ci0gICAgb2JqLT5hYnNvbHV0ZVBvc2l0aW9uKGR4LCBkeSk7Ci0gICAgUGF0aCBwID0g
Z2V0UmVnaW9uKGxhc3R3LCBsYXN0aCk7Ci0gICAgcC50cmFuc2xhdGUoSW50U2l6ZShkeCwgZHkp
KTsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChwLmJvdW5kaW5nUmVjdCgpKTsKLX0KLQot
UGF0aCBIVE1MQXJlYUVsZW1lbnQ6OmdldFJlZ2lvbihpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX2Nvb3JkcykKLSAgICAgICAgcmV0dXJuIFBhdGgoKTsKLQotICAg
IC8vIElmIGVsZW1lbnQgb21pdHMgdGhlIHNoYXBlIGF0dHJpYnV0ZSwgc2VsZWN0IHNoYXBlIGJh
c2VkIG9uIG51bWJlciBvZiBjb29yZGluYXRlcy4KLSAgICBTaGFwZSBzaGFwZSA9IG1fc2hhcGU7
Ci0gICAgaWYgKHNoYXBlID09IFVua25vd24pIHsKLSAgICAgICAgaWYgKG1fY29vcmRzTGVuID09
IDMpCi0gICAgICAgICAgICBzaGFwZSA9IENpcmNsZTsKLSAgICAgICAgZWxzZSBpZiAobV9jb29y
ZHNMZW4gPT0gNCkKLSAgICAgICAgICAgIHNoYXBlID0gUmVjdDsKLSAgICAgICAgZWxzZSBpZiAo
bV9jb29yZHNMZW4gPj0gNikKLSAgICAgICAgICAgIHNoYXBlID0gUG9seTsKLSAgICB9Ci0KLSAg
ICBQYXRoIHBhdGg7Ci0gICAgc3dpdGNoIChzaGFwZSkgewotICAgICAgICBjYXNlIFBvbHk6Ci0g
ICAgICAgICAgICBpZiAobV9jb29yZHNMZW4gPj0gNikgewotICAgICAgICAgICAgICAgIGludCBu
dW1Qb2ludHMgPSBtX2Nvb3Jkc0xlbiAvIDI7Ci0gICAgICAgICAgICAgICAgcGF0aC5tb3ZlVG8o
RmxvYXRQb2ludChtX2Nvb3Jkc1swXS5jYWxjTWluVmFsdWUod2lkdGgpLCBtX2Nvb3Jkc1sxXS5j
YWxjTWluVmFsdWUoaGVpZ2h0KSkpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBp
IDwgbnVtUG9pbnRzOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKEZs
b2F0UG9pbnQobV9jb29yZHNbaSAqIDJdLmNhbGNNaW5WYWx1ZSh3aWR0aCksIG1fY29vcmRzW2kg
KiAyICsgMV0uY2FsY01pblZhbHVlKGhlaWdodCkpKTsKLSAgICAgICAgICAgICAgICBwYXRoLmNs
b3NlU3VicGF0aCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ2lyY2xlOgotICAgICAgICAgICAgaWYgKG1fY29vcmRzTGVuID49IDMpIHsKLSAgICAg
ICAgICAgICAgICBMZW5ndGggcmFkaXVzID0gbV9jb29yZHNbMl07Ci0gICAgICAgICAgICAgICAg
aW50IHIgPSBtaW4ocmFkaXVzLmNhbGNNaW5WYWx1ZSh3aWR0aCksIHJhZGl1cy5jYWxjTWluVmFs
dWUoaGVpZ2h0KSk7Ci0gICAgICAgICAgICAgICAgcGF0aC5hZGRFbGxpcHNlKEZsb2F0UmVjdCht
X2Nvb3Jkc1swXS5jYWxjTWluVmFsdWUod2lkdGgpIC0gciwgbV9jb29yZHNbMV0uY2FsY01pblZh
bHVlKGhlaWdodCkgLSByLAotICAgICAgICAgICAgICAgICAgICAyICogciwgMiAqIHIpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlY3Q6Ci0gICAg
ICAgICAgICBpZiAobV9jb29yZHNMZW4gPj0gNCkgewotICAgICAgICAgICAgICAgIGludCB4MCA9
IG1fY29vcmRzWzBdLmNhbGNNaW5WYWx1ZSh3aWR0aCk7Ci0gICAgICAgICAgICAgICAgaW50IHkw
ID0gbV9jb29yZHNbMV0uY2FsY01pblZhbHVlKGhlaWdodCk7Ci0gICAgICAgICAgICAgICAgaW50
IHgxID0gbV9jb29yZHNbMl0uY2FsY01pblZhbHVlKHdpZHRoKTsKLSAgICAgICAgICAgICAgICBp
bnQgeTEgPSBtX2Nvb3Jkc1szXS5jYWxjTWluVmFsdWUoaGVpZ2h0KTsKLSAgICAgICAgICAgICAg
ICBwYXRoLmFkZFJlY3QoRmxvYXRSZWN0KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCkpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRGVmYXVsdDoKLSAg
ICAgICAgICAgIHBhdGguYWRkUmVjdChGbG9hdFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVW5rbm93bjoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIHJldHVybiBwYXRoOwotfQotCi1TdHJpbmcgSFRNTEFyZWFFbGVt
ZW50OjphY2Nlc3NLZXkoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWNjZXNz
a2V5QXR0cik7Ci19Ci0KLXZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXRBY2Nlc3NLZXkoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYWNjZXNza2V5QXR0ciwgdmFsdWUp
OwotfQotCi1TdHJpbmcgSFRNTEFyZWFFbGVtZW50OjphbHQoKSBjb25zdAotewotICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUoYWx0QXR0cik7Ci19Ci0KLXZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXRB
bHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYWx0QXR0ciwgdmFs
dWUpOwotfQotCi1TdHJpbmcgSFRNTEFyZWFFbGVtZW50Ojpjb29yZHMoKSBjb25zdAotewotICAg
IHJldHVybiBnZXRBdHRyaWJ1dGUoY29vcmRzQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEFyZWFFbGVt
ZW50OjpzZXRDb29yZHMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUo
Y29vcmRzQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEFyZWFFbGVtZW50OjpocmVmKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRl
KGhyZWZBdHRyKSk7Ci19Ci0KLXZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXRIcmVmKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGhyZWZBdHRyLCB2YWx1ZSk7Ci19Ci0K
LWJvb2wgSFRNTEFyZWFFbGVtZW50Ojpub0hyZWYoKSBjb25zdAotewotICAgIHJldHVybiAhZ2V0
QXR0cmlidXRlKG5vaHJlZkF0dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxBcmVhRWxlbWVu
dDo6c2V0Tm9IcmVmKGJvb2wgbm9IcmVmKQotewotICAgIHNldEF0dHJpYnV0ZShub2hyZWZBdHRy
LCBub0hyZWYgPyAiIiA6IDApOwotfQotCi1TdHJpbmcgSFRNTEFyZWFFbGVtZW50OjpzaGFwZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShzaGFwZUF0dHIpOwotfQotCi12b2lk
IEhUTUxBcmVhRWxlbWVudDo6c2V0U2hhcGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBz
ZXRBdHRyaWJ1dGUoc2hhcGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLWludCBIVE1MQXJlYUVsZW1lbnQ6
OnRhYkluZGV4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHRhYmluZGV4QXR0
cikudG9JbnQoKTsKLX0KLQotdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldFRhYkluZGV4KGludCB0
YWJJbmRleCkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRyLCBTdHJpbmc6Om51bWJl
cih0YWJJbmRleCkpOwotfQotCi1TdHJpbmcgSFRNTEFyZWFFbGVtZW50Ojp0YXJnZXQoKSBjb25z
dAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodGFyZ2V0QXR0cik7Ci19Ci0KLXZvaWQgSFRN
TEFyZWFFbGVtZW50OjpzZXRUYXJnZXQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRB
dHRyaWJ1dGUodGFyZ2V0QXR0ciwgdmFsdWUpOwotfQotCi19CkluZGV4OiBodG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE0MzgyKQorKysgaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTElt
YWdlTG9hZGVyLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVk
U3RyaW5ncy5oIgogI2luY2x1ZGUgIlJlbmRlckZpbGVCdXR0b24uaCIKQEAgLTQ0LDcgKzQ1LDYg
QEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgog
I2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJodG1sX2ltYWdlaW1w
bC5oIgogI2luY2x1ZGUgIlJlbmRlckJ1dHRvbi5oIgogI2luY2x1ZGUgPHVuaWNvZGUvdWJyay5o
PgogCkluZGV4OiBodG1sL0hUTUxNYXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hU
TUxNYXBFbGVtZW50LmNwcAkocmV2aXNpb24gMTQzODIpCisrKyBodG1sL0hUTUxNYXBFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNDM1ICsyMCwyMCBAQAogICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAogICog
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KLQogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgImh0bWxfaW1hZ2VpbXBsLmgiCisjaW5jbHVkZSAiSFRNTE1hcEVsZW1lbnQuaCIK
IAotI2luY2x1ZGUgIkRvY0xvYWRlci5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJjc3NoZWxwZXIuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAi
Q1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgotI2luY2x1ZGUg
IlJlbmRlckltYWdlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MQXJl
YUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IAotSFRNTEltYWdlTG9hZGVyOjpIVE1MSW1hZ2VMb2FkZXIoRWxlbWVudCogZWx0KQotICAgIDog
bV9lbGVtZW50KGVsdCksIG1faW1hZ2UoMCksIG1fZmlyZWRMb2FkKHRydWUpLCBtX2ltYWdlQ29t
cGxldGUodHJ1ZSkKLXsKLX0KLQotSFRNTEltYWdlTG9hZGVyOjp+SFRNTEltYWdlTG9hZGVyKCkK
LXsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgbV9pbWFnZS0+ZGVyZWYodGhpcyk7Ci0gICAg
bV9lbGVtZW50LT5kb2N1bWVudCgpLT5yZW1vdmVJbWFnZSh0aGlzKTsKLX0KLQotdm9pZCBIVE1M
SW1hZ2VMb2FkZXI6OnNldExvYWRpbmdJbWFnZShDYWNoZWRJbWFnZSAqbG9hZGluZ0ltYWdlKQot
ewotICAgIG1fZmlyZWRMb2FkID0gZmFsc2U7Ci0gICAgbV9pbWFnZUNvbXBsZXRlID0gZmFsc2U7
Ci0gICAgbV9pbWFnZSA9IGxvYWRpbmdJbWFnZTsKLX0KLQotdm9pZCBIVE1MSW1hZ2VMb2FkZXI6
OnVwZGF0ZUZyb21FbGVtZW50KCkKLXsKLSAgICAvLyBJZiB3ZSdyZSBub3QgbWFraW5nIHJlbmRl
cmVycyBmb3IgdGhlIHBhZ2UsIHRoZW4gZG9uJ3QgbG9hZCBpbWFnZXMuICBXZSBkb24ndCB3YW50
IHRvIHNsb3cKLSAgICAvLyBkb3duIHRoZSByYXcgSFRNTCBwYXJzaW5nIGNhc2UgYnkgbG9hZGlu
ZyBpbWFnZXMgd2UgZG9uJ3QgaW50ZW5kIHRvIGRpc3BsYXkuCi0gICAgRWxlbWVudCogZWxlbSA9
IGVsZW1lbnQoKTsKLSAgICBEb2N1bWVudCogZG9jID0gZWxlbS0+ZG9jdW1lbnQoKTsKLSAgICBp
ZiAoIWRvYy0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQXRvbWljU3RyaW5n
IGF0dHIgPSBlbGVtLT5nZXRBdHRyaWJ1dGUoZWxlbS0+aGFzTG9jYWxOYW1lKG9iamVjdFRhZykg
PyBkYXRhQXR0ciA6IHNyY0F0dHIpOwotICAgIAotICAgIC8vIFRyZWF0IGEgbGFjayBvZiBzcmMg
b3IgZW1wdHkgc3RyaW5nIGZvciBzcmMgYXMgbm8gaW1hZ2UgYXQgYWxsLgotICAgIENhY2hlZElt
YWdlICpuZXdJbWFnZSA9IDA7Ci0gICAgaWYgKCFhdHRyLmlzRW1wdHkoKSkKLSAgICAgICAgbmV3
SW1hZ2UgPSBkb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0SW1hZ2UocGFyc2VVUkwoYXR0cikpOwot
Ci0gICAgQ2FjaGVkSW1hZ2UgKm9sZEltYWdlID0gbV9pbWFnZTsKLSAgICBpZiAobmV3SW1hZ2Ug
IT0gb2xkSW1hZ2UpIHsKLSNpZmRlZiBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HCi0gICAg
ICAgIGlmICghZG9jLT5vd25lckVsZW1lbnQoKSAmJiBuZXdJbWFnZSkKLSAgICAgICAgICAgIHBy
aW50ZigiSW1hZ2UgcmVxdWVzdGVkIGF0ICVkXG4iLCBkb2MtPmVsYXBzZWRUaW1lKCkpOwotI2Vu
ZGlmCi0gICAgICAgIHNldExvYWRpbmdJbWFnZShuZXdJbWFnZSk7Ci0gICAgICAgIGlmIChuZXdJ
bWFnZSkKLSAgICAgICAgICAgIG5ld0ltYWdlLT5yZWYodGhpcyk7Ci0gICAgICAgIGlmIChvbGRJ
bWFnZSkKLSAgICAgICAgICAgIG9sZEltYWdlLT5kZXJlZih0aGlzKTsKLSAgICB9Ci0KLSAgICBp
ZiAoUmVuZGVySW1hZ2UqIHJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihlbGVt
LT5yZW5kZXJlcigpKSkKLSAgICAgICAgcmVuZGVyZXItPnJlc2V0QW5pbWF0aW9uKCk7Ci19Ci0K
LXZvaWQgSFRNTEltYWdlTG9hZGVyOjpkaXNwYXRjaExvYWRFdmVudCgpCi17Ci0gICAgaWYgKCFt
X2ZpcmVkTG9hZCAmJiBtX2ltYWdlKSB7Ci0gICAgICAgIG1fZmlyZWRMb2FkID0gdHJ1ZTsKLSAg
ICAgICAgZWxlbWVudCgpLT5kaXNwYXRjaEhUTUxFdmVudChtX2ltYWdlLT5pc0Vycm9ySW1hZ2Uo
KSA/IGVycm9yRXZlbnQgOiBsb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7Ci0gICAgfQotfQotCi12
b2lkIEhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkT2JqZWN0ICppbWFnZSkK
LXsKLSAgICBtX2ltYWdlQ29tcGxldGUgPSB0cnVlOwotICAgIEVsZW1lbnQqIGVsZW0gPSBlbGVt
ZW50KCk7Ci0gICAgRG9jdW1lbnQqIGRvYyA9IGVsZW0tPmRvY3VtZW50KCk7Ci0gICAgZG9jLT5k
aXNwYXRjaEltYWdlTG9hZEV2ZW50U29vbih0aGlzKTsKLSNpZmRlZiBJTlNUUlVNRU5UX0xBWU9V
VF9TQ0hFRFVMSU5HCi0gICAgICAgIGlmICghZG9jLT5vd25lckVsZW1lbnQoKSkKLSAgICAgICAg
ICAgIHByaW50ZigiSW1hZ2UgbG9hZGVkIGF0ICVkXG4iLCBkb2MtPmVsYXBzZWRUaW1lKCkpOwot
I2VuZGlmCi0gICAgaWYgKFJlbmRlckltYWdlKiByZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRl
ckltYWdlKj4oZWxlbS0+cmVuZGVyZXIoKSkpCi0gICAgICAgIHJlbmRlcmVyLT5zZXRDYWNoZWRJ
bWFnZShtX2ltYWdlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MSW1hZ2VFbGVt
ZW50OjpIVE1MSW1hZ2VFbGVtZW50KERvY3VtZW50ICpkb2MsIEhUTUxGb3JtRWxlbWVudCAqZikK
LSAgICA6IEhUTUxFbGVtZW50KGltZ1RhZywgZG9jKSwgbV9pbWFnZUxvYWRlcih0aGlzKSwgaXNt
YXAoZmFsc2UpLCBtX2Zvcm0oZikKLSAgICAsIG1fY29tcG9zaXRlT3BlcmF0b3IoQ29tcG9zaXRl
U291cmNlT3ZlcikKLXsKLSAgICBpZiAoZikKLSAgICAgICAgZi0+cmVnaXN0ZXJJbWdFbGVtZW50
KHRoaXMpOwotfQotCi1IVE1MSW1hZ2VFbGVtZW50OjpIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudCh0
YWdOYW1lLCBkb2MpLCBtX2ltYWdlTG9hZGVyKHRoaXMpLCBpc21hcChmYWxzZSksIG1fZm9ybSgw
KQotICAgICwgbV9jb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVTb3VyY2VPdmVyKQotewotfQot
Ci1IVE1MSW1hZ2VFbGVtZW50Ojp+SFRNTEltYWdlRWxlbWVudCgpCi17Ci0gICAgaWYgKG1fZm9y
bSkKLSAgICAgICAgbV9mb3JtLT5yZW1vdmVJbWdFbGVtZW50KHRoaXMpOwotfQotCi1ib29sIEhU
TUxJbWFnZUVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUs
IE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgaWYgKGF0dHJOYW1l
ID09IHdpZHRoQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBoZWlnaHRBdHRyIHx8Ci0gICAg
ICAgIGF0dHJOYW1lID09IHZzcGFjZUF0dHIgfHwKLSAgICAgICAgYXR0ck5hbWUgPT0gaHNwYWNl
QXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSB2YWxpZ25BdHRyKSB7Ci0gICAgICAgIHJlc3Vs
dCA9IGVVbml2ZXJzYWw7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKGF0dHJOYW1lID09IGJvcmRlckF0dHIgfHwgYXR0ck5hbWUgPT0gYWxpZ25BdHRyKSB7Ci0g
ICAgICAgIHJlc3VsdCA9IGVSZXBsYWNlZDsgLy8gU2hhcmVkIHdpdGggZW1iZWQgYW5kIGlmcmFt
ZSBlbGVtZW50cy4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBI
VE1MRWxlbWVudDo6bWFwVG9FbnRyeShhdHRyTmFtZSwgcmVzdWx0KTsKLX0KLQotdm9pZCBIVE1M
SW1hZ2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIp
Ci17Ci0gICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUgPSBhdHRyLT5uYW1lKCk7Ci0g
ICAgaWYgKGF0dHJOYW1lID09IGFsdEF0dHIpIHsKLSAgICAgICAgaWYgKHJlbmRlcmVyKCkpCi0g
ICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KHJlbmRlcmVyKCkpLT51cGRhdGVB
bHRUZXh0KCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBzcmNBdHRyKQotICAgICAgICBt
X2ltYWdlTG9hZGVyLnVwZGF0ZUZyb21FbGVtZW50KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gd2lkdGhBdHRyKQotICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfV0lEVEgs
IGF0dHItPnZhbHVlKCkpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGhlaWdodEF0dHIpCi0g
ICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9IRUlHSFQsIGF0dHItPnZhbHVlKCkp
OwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGJvcmRlckF0dHIpIHsKLSAgICAgICAgLy8gYm9y
ZGVyPSJub2JvcmRlciIgLT4gYm9yZGVyPSIwIgotICAgICAgICBpZihhdHRyLT52YWx1ZSgpLnRv
SW50KCkpIHsKLSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9CT1JERVJf
V0lEVEgsIGF0dHItPnZhbHVlKCkpOwotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwg
Q1NTX1BST1BfQk9SREVSX1RPUF9TVFlMRSwgQ1NTX1ZBTF9TT0xJRCk7Ci0gICAgICAgICAgICBh
ZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfUklHSFRfU1RZTEUsIENTU19WQUxf
U09MSUQpOwotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVS
X0JPVFRPTV9TVFlMRSwgQ1NTX1ZBTF9TT0xJRCk7Ci0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0
eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfTEVGVF9TVFlMRSwgQ1NTX1ZBTF9TT0xJRCk7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IHZzcGFjZUF0dHIpIHsKLSAgICAgICAg
YWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX01BUkdJTl9UT1AsIGF0dHItPnZhbHVlKCkpOwot
ICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX0JPVFRPTSwgYXR0ci0+
dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBoc3BhY2VBdHRyKSB7Ci0gICAg
ICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fTEVGVCwgYXR0ci0+dmFsdWUo
KSk7Ci0gICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fUklHSFQsIGF0
dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gYWxpZ25BdHRyKQotICAg
ICAgICBhZGRIVE1MQWxpZ25tZW50KGF0dHIpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IHZh
bGlnbkF0dHIpCi0gICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1ZFUlRJQ0FM
X0FMSUdOLCBhdHRyLT52YWx1ZSgpKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSB1c2VtYXBB
dHRyKSB7Ci0gICAgICAgIGlmIChhdHRyLT52YWx1ZSgpLmRvbVN0cmluZygpWzBdID09ICcjJykK
LSAgICAgICAgICAgIHVzZW1hcCA9IGF0dHItPnZhbHVlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHVzZW1hcCA9IGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHBhcnNlVVJMKGF0dHItPnZh
bHVlKCkpKTsKLSAgICAgICAgbV9pc0xpbmsgPSAhYXR0ci0+aXNOdWxsKCk7Ci0gICAgfSBlbHNl
IGlmIChhdHRyTmFtZSA9PSBpc21hcEF0dHIpCi0gICAgICAgIGlzbWFwID0gdHJ1ZTsKLSAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBvbmFib3J0QXR0cikKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlz
dGVuZXIoYWJvcnRFdmVudCwgYXR0cik7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gb25sb2Fk
QXR0cikKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIobG9hZEV2ZW50LCBhdHRyKTsKLSAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBjb21wb3NpdGVBdHRyKSB7Ci0gICAgICAgIGlmICghcGFy
c2VDb21wb3NpdGVPcGVyYXRvcihhdHRyLT52YWx1ZSgpLCBtX2NvbXBvc2l0ZU9wZXJhdG9yKSkK
LSAgICAgICAgICAgIG1fY29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyOwot
ICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gbmFtZUF0dHIpIHsKLSAgICAgICAgU3RyaW5nIG5l
d05hbWVBdHRyID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgaWYgKGluRG9jdW1lbnQoKSAmJiBk
b2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBIVE1MRG9jdW1lbnQq
IGRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGRvY3VtZW50KCkpOwotICAgICAgICAg
ICAgZG9jLT5yZW1vdmVOYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwotICAgICAgICAgICAgZG9jLT5h
ZGROYW1lZEl0ZW0obmV3TmFtZUF0dHIpOwotICAgICAgICB9Ci0gICAgICAgIG9sZE5hbWVBdHRy
ID0gbmV3TmFtZUF0dHI7Ci0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQotU3RyaW5nIEhUTUxJbWFnZUVsZW1lbnQ6OmFsdFRl
eHQoKSBjb25zdAotewotICAgIC8vIGxldHMgZmlndXJlIG91dCB0aGUgYWx0IHRleHQuLiBtYWdp
YyBzdHVmZgotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzE5OTgvUkVDLWh0bWw0MC0xOTk4
MDQyNC9hcHBlbmRpeC9ub3Rlcy5odG1sI2FsdGdlbgotICAgIC8vIGFsc28gaGVhdmlseSBkaXNj
dXNzZWQgYnkgSGl4aWUgb24gYnVnemlsbGEKLSAgICBTdHJpbmcgYWx0ID0gZ2V0QXR0cmlidXRl
KGFsdEF0dHIpOwotICAgIC8vIGZhbGwgYmFjayB0byB0aXRsZSBhdHRyaWJ1dGUKLSAgICBpZiAo
YWx0LmlzTnVsbCgpKQotICAgICAgICBhbHQgPSBnZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKLSAg
ICByZXR1cm4gYWx0OwotfQotCi1SZW5kZXJPYmplY3QgKkhUTUxJbWFnZUVsZW1lbnQ6OmNyZWF0
ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlKQotewotICAg
ICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVySW1hZ2UodGhpcyk7Ci19Ci0KLXZvaWQgSFRNTElt
YWdlRWxlbWVudDo6YXR0YWNoKCkKLXsKLSAgICBIVE1MRWxlbWVudDo6YXR0YWNoKCk7Ci0KLSAg
ICBpZiAoUmVuZGVySW1hZ2UqIGltYWdlT2JqID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihy
ZW5kZXJlcigpKSkKLSAgICAgICAgaW1hZ2VPYmotPnNldENhY2hlZEltYWdlKG1faW1hZ2VMb2Fk
ZXIuaW1hZ2UoKSk7Ci19Ci0KLXZvaWQgSFRNTEltYWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9j
dW1lbnQoKQotewotICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOwotICAgIGlmIChkb2Mt
PmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGRv
YyktPmFkZE5hbWVkSXRlbShvbGROYW1lQXR0cik7Ci0KLSAgICBIVE1MRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvRG9jdW1lbnQoKTsKLX0KLQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpyZW1vdmVkRnJv
bURvY3VtZW50KCkKLXsKLSAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsKLSAgICBpZiAo
ZG9jLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQq
Pihkb2MpLT5yZW1vdmVOYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwotCi0gICAgSFRNTEVsZW1lbnQ6
OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLX0KLQotaW50IEhUTUxJbWFnZUVsZW1lbnQ6OndpZHRo
KGJvb2wgaWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKSBjb25zdAotewotICAgIGlmICghcmVuZGVy
ZXIoKSkgewotICAgICAgICAvLyBjaGVjayB0aGUgYXR0cmlidXRlIGZpcnN0IGZvciBhbiBleHBs
aWNpdCBwaXhlbCB2YWx1ZQotICAgICAgICBib29sIG9rOwotICAgICAgICBpbnQgd2lkdGggPSBn
ZXRBdHRyaWJ1dGUod2lkdGhBdHRyKS50b0ludCgmb2spOwotICAgICAgICBpZiAob2spCi0gICAg
ICAgICAgICByZXR1cm4gd2lkdGg7Ci0gICAgICAgIAotICAgICAgICAvLyBpZiB0aGUgaW1hZ2Ug
aXMgYXZhaWxhYmxlLCB1c2UgaXRzIHdpZHRoCi0gICAgICAgIGlmIChtX2ltYWdlTG9hZGVyLmlt
YWdlKCkpCi0gICAgICAgICAgICByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgpLT5pbWFnZVNp
emUoKS53aWR0aCgpOwotICAgIH0KLQotICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOwot
ICAgIGlmIChpZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMpCi0gICAgICAgIGRvYy0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgZWxzZQotICAgICAgICBkb2MtPnVw
ZGF0ZUxheW91dCgpOwotCi0gICAgcmV0dXJuIHJlbmRlcmVyKCkgPyByZW5kZXJlcigpLT5jb250
ZW50V2lkdGgoKSA6IDA7Ci19Ci0KLWludCBIVE1MSW1hZ2VFbGVtZW50OjpoZWlnaHQoYm9vbCBp
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlcigpKSB7
Ci0gICAgICAgIC8vIGNoZWNrIHRoZSBhdHRyaWJ1dGUgZmlyc3QgZm9yIGFuIGV4cGxpY2l0IHBp
eGVsIHZhbHVlCi0gICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIGludCBoZWlnaHQgPSBnZXRBdHRy
aWJ1dGUoaGVpZ2h0QXR0cikudG9JbnQoJm9rKTsKLSAgICAgICAgaWYgKG9rKQotICAgICAgICAg
ICAgcmV0dXJuIGhlaWdodDsKLSAgICAgICAgCi0gICAgICAgIC8vIGlmIHRoZSBpbWFnZSBpcyBh
dmFpbGFibGUsIHVzZSBpdHMgaGVpZ2h0Ci0gICAgICAgIGlmIChtX2ltYWdlTG9hZGVyLmltYWdl
KCkpCi0gICAgICAgICAgICByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgpLT5pbWFnZVNpemUo
KS5oZWlnaHQoKTsgICAgICAgIAotICAgIH0KLQotICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVu
dCgpOwotICAgIGlmIChpZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMpCi0gICAgICAgIGRvYy0+dXBk
YXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgZWxzZQotICAgICAgICBk
b2MtPnVwZGF0ZUxheW91dCgpOwotCi0gICAgcmV0dXJuIHJlbmRlcmVyKCkgPyByZW5kZXJlcigp
LT5jb250ZW50SGVpZ2h0KCkgOiAwOwotfQotCi1ib29sIEhUTUxJbWFnZUVsZW1lbnQ6OmlzVVJM
QXR0cmlidXRlKEF0dHJpYnV0ZSAqYXR0cikgY29uc3QKLXsKLSAgICByZXR1cm4gYXR0ci0+bmFt
ZSgpID09IHNyY0F0dHIgfHwgKGF0dHItPm5hbWUoKSA9PSB1c2VtYXBBdHRyICYmIGF0dHItPnZh
bHVlKCkuZG9tU3RyaW5nKClbMF0gIT0gJyMnKTsKLX0KLQotU3RyaW5nIEhUTUxJbWFnZUVsZW1l
bnQ6Om5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwot
fQotCi12b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LXsKLSAgICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxJ
bWFnZUVsZW1lbnQ6OmFsaWduKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFs
aWduQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0QWxpZ24oY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYWxpZ25BdHRyLCB2YWx1ZSk7Ci19Ci0K
LVN0cmluZyBIVE1MSW1hZ2VFbGVtZW50OjphbHQoKSBjb25zdAotewotICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUoYWx0QXR0cik7Ci19Ci0KLXZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0QWx0KGNv
bnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFsdEF0dHIsIHZhbHVlKTsK
LX0KLQotaW50IEhUTUxJbWFnZUVsZW1lbnQ6OmJvcmRlcigpIGNvbnN0Ci17Ci0gICAgLy8gIyMj
IHJldHVybiB2YWx1ZSBpbiBwaXhlbHMKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGJvcmRlckF0
dHIpLnRvSW50KCk7Ci19Ci0KLXZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0Qm9yZGVyKGludCB2
YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYm9yZGVyQXR0ciwgU3RyaW5nOjpudW1iZXIodmFs
dWUpKTsKLX0KLQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRIZWlnaHQoaW50IHZhbHVlKQot
ewotICAgIHNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCBTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwot
fQotCi1pbnQgSFRNTEltYWdlRWxlbWVudDo6aHNwYWNlKCkgY29uc3QKLXsKLSAgICAvLyAjIyMg
cmV0dXJuIGFjdHVhbCB2YWx1ZQotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoaHNwYWNlQXR0ciku
dG9JbnQoKTsKLX0KLQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRIc3BhY2UoaW50IHZhbHVl
KQotewotICAgIHNldEF0dHJpYnV0ZShoc3BhY2VBdHRyLCBTdHJpbmc6Om51bWJlcih2YWx1ZSkp
OwotfQotCi1ib29sIEhUTUxJbWFnZUVsZW1lbnQ6OmlzTWFwKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gIWdldEF0dHJpYnV0ZShpc21hcEF0dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxJbWFn
ZUVsZW1lbnQ6OnNldElzTWFwKGJvb2wgaXNNYXApCi17Ci0gICAgc2V0QXR0cmlidXRlKGlzbWFw
QXR0ciwgaXNNYXAgPyAiIiA6IDApOwotfQotCi1TdHJpbmcgSFRNTEltYWdlRWxlbWVudDo6bG9u
Z0Rlc2MoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobG9uZ2Rlc2NBdHRyKTsK
LX0KLQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRMb25nRGVzYyhjb25zdCBTdHJpbmcmIHZh
bHVlKQotewotICAgIHNldEF0dHJpYnV0ZShsb25nZGVzY0F0dHIsIHZhbHVlKTsKLX0KLQotU3Ry
aW5nIEhUTUxJbWFnZUVsZW1lbnQ6OnNyYygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShzcmNBdHRyKSk7Ci19Ci0KLXZvaWQgSFRNTElt
YWdlRWxlbWVudDo6c2V0U3JjKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmli
dXRlKHNyY0F0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxJbWFnZUVsZW1lbnQ6OnVzZU1h
cCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh1c2VtYXBBdHRyKTsKLX0KLQot
dm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRVc2VNYXAoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBzZXRBdHRyaWJ1dGUodXNlbWFwQXR0ciwgdmFsdWUpOwotfQotCi1pbnQgSFRNTEltYWdl
RWxlbWVudDo6dnNwYWNlKCkgY29uc3QKLXsKLSAgICAvLyAjIyMgcmV0dXJuIGFjdHVhbCB2c3Bh
Y2UKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHZzcGFjZUF0dHIpLnRvSW50KCk7Ci19Ci0KLXZv
aWQgSFRNTEltYWdlRWxlbWVudDo6c2V0VnNwYWNlKGludCB2YWx1ZSkKLXsKLSAgICBzZXRBdHRy
aWJ1dGUodnNwYWNlQXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKLX0KLQotdm9pZCBIVE1M
SW1hZ2VFbGVtZW50OjpzZXRXaWR0aChpbnQgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHdp
ZHRoQXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKLX0KLQotaW50IEhUTUxJbWFnZUVsZW1l
bnQ6OngoKSBjb25zdAotewotICAgIFJlbmRlck9iamVjdCAqciA9IHJlbmRlcmVyKCk7Ci0gICAg
aWYgKCFyKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpbnQgeCwgeTsKLSAgICByLT5hYnNvbHV0
ZVBvc2l0aW9uKHgsIHkpOwotICAgIHJldHVybiB4OwotfQotCi1pbnQgSFRNTEltYWdlRWxlbWVu
dDo6eSgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyT2JqZWN0ICpyID0gcmVuZGVyZXIoKTsKLSAgICBp
ZiAoIXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIGludCB4LCB5OwotICAgIHItPmFic29sdXRl
UG9zaXRpb24oeCwgeSk7Ci0gICAgcmV0dXJuIHk7Ci19Ci0KLWJvb2wgSFRNTEltYWdlRWxlbWVu
dDo6Y29tcGxldGUoKSBjb25zdAotewotICAgIHJldHVybiBtX2ltYWdlTG9hZGVyLmltYWdlQ29t
cGxldGUoKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBIVE1MTWFwRWxlbWVudDo6SFRN
TE1hcEVsZW1lbnQoRG9jdW1lbnQgKmRvYykKICAgICA6IEhUTUxFbGVtZW50KG1hcFRhZywgZG9j
KQogewpAQCAtNDY1LDEyICs1MCwxMiBAQAogICAgIHJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFt
ZShhcmVhVGFnKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShzY3JpcHRUYWcpIHx8IGluQmxvY2tU
YWdMaXN0KG5ld0NoaWxkKTsKIH0KIAotYm9vbCBIVE1MTWFwRWxlbWVudDo6bWFwTW91c2VFdmVu
dChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgUmVuZGVyT2JqZWN0OjpOb2Rl
SW5mbyYgaW5mbykKK2Jvb2wgSFRNTE1hcEVsZW1lbnQ6Om1hcE1vdXNlRXZlbnQoaW50IHgsIGlu
dCB5LCBjb25zdCBJbnRTaXplJiBzaXplLCBSZW5kZXJPYmplY3Q6Ok5vZGVJbmZvJiBpbmZvKQog
ewogICAgIE5vZGUgKm5vZGUgPSB0aGlzOwogICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZl
cnNlTmV4dE5vZGUodGhpcykpKQogICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShhcmVhVGFn
KSkKLSAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnQgKj4obm9kZSkt
Pm1hcE1vdXNlRXZlbnQoeCwgeSwgd2lkdGgsIGhlaWdodCwgaW5mbykpCisgICAgICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVtZW50Kj4obm9kZSktPm1hcE1vdXNlRXZlbnQoeCwg
eSwgc2l6ZSwgaW5mbykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQpAQCAtNTEzLDIwMiArOTgsNCBAQAogICAgIHNldEF0dHJpYnV0ZShuYW1lQXR0
ciwgdmFsdWUpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxBcmVhRWxlbWVudDo6
SFRNTEFyZWFFbGVtZW50KERvY3VtZW50ICpkb2MpCi0gICAgOiBIVE1MQW5jaG9yRWxlbWVudChh
cmVhVGFnLCBkb2MpCi17Ci0gICAgbV9jb29yZHMgPSAwOwotICAgIG1fY29vcmRzTGVuID0gMDsK
LSAgICBtX3NoYXBlID0gVW5rbm93bjsKLSAgICBsYXN0aCA9IC0xOwotICAgIGxhc3R3ID0gLTE7
Ci19Ci0KLUhUTUxBcmVhRWxlbWVudDo6fkhUTUxBcmVhRWxlbWVudCgpCi17Ci0gICAgZGVsZXRl
IFtdIG1fY29vcmRzOwotfQotCi12b2lkIEhUTUxBcmVhRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
c2hhcGVBdHRyKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgp
LCAiZGVmYXVsdCIpKQotICAgICAgICAgICAgbV9zaGFwZSA9IERlZmF1bHQ7Ci0gICAgICAgIGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJjaXJjbGUiKSkKLSAgICAg
ICAgICAgIG1fc2hhcGUgPSBDaXJjbGU7Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKGF0dHItPnZhbHVlKCksICJwb2x5IikpCi0gICAgICAgICAgICBtX3NoYXBlID0gUG9seTsK
LSAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInJlY3Qi
KSkKLSAgICAgICAgICAgIG1fc2hhcGUgPSBSZWN0OwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IGNvb3Jkc0F0dHIpIHsKLSAgICAgICAgZGVsZXRlIFtdIG1fY29vcmRzOwotICAgICAg
ICBtX2Nvb3JkcyA9IGF0dHItPnZhbHVlKCkudG9Db29yZHNBcnJheShtX2Nvb3Jkc0xlbik7Ci0g
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdGFyZ2V0QXR0cikgewotICAgICAgICBtX2hh
c1RhcmdldCA9ICFhdHRyLT5pc051bGwoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBhbHRBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBhY2Nlc3NrZXlBdHRyKSB7Ci0gICAgICAgIC8v
IERvIG5vdGhpbmcuCi0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxBbmNob3JFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQotYm9vbCBIVE1MQXJlYUVsZW1lbnQ6Om1hcE1v
dXNlRXZlbnQoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFJlbmRlck9iamVj
dDo6Tm9kZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKHdpZHRoICE9IGxhc3R3IHx8IGhlaWdodCAh
PSBsYXN0aCkgewotICAgICAgICByZWdpb24gPSBnZXRSZWdpb24od2lkdGgsIGhlaWdodCk7Ci0g
ICAgICAgIGxhc3R3ID0gd2lkdGg7Ci0gICAgICAgIGxhc3RoID0gaGVpZ2h0OwotICAgIH0KLQot
ICAgIGlmICghcmVnaW9uLmNvbnRhaW5zKEludFBvaW50KHgsIHkpKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAotICAgIGluZm8uc2V0SW5uZXJOb2RlKHRoaXMpOwotICAgIGluZm8uc2V0
VVJMRWxlbWVudCh0aGlzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSW50UmVjdCBIVE1MQXJl
YUVsZW1lbnQ6OmdldFJlY3QoUmVuZGVyT2JqZWN0KiBvYmopIGNvbnN0Ci17Ci0gICAgaW50IGR4
LCBkeTsKLSAgICBvYmotPmFic29sdXRlUG9zaXRpb24oZHgsIGR5KTsKLSAgICBQYXRoIHAgPSBn
ZXRSZWdpb24obGFzdHcsIGxhc3RoKTsKLSAgICBwLnRyYW5zbGF0ZShJbnRTaXplKGR4LCBkeSkp
OwotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHAuYm91bmRpbmdSZWN0KCkpOwotfQotCi1Q
YXRoIEhUTUxBcmVhRWxlbWVudDo6Z2V0UmVnaW9uKGludCB3aWR0aCwgaW50IGhlaWdodCkgY29u
c3QKLXsKLSAgICBpZiAoIW1fY29vcmRzKQotICAgICAgICByZXR1cm4gUGF0aCgpOwotCi0gICAg
Ly8gSWYgZWxlbWVudCBvbWl0cyB0aGUgc2hhcGUgYXR0cmlidXRlLCBzZWxlY3Qgc2hhcGUgYmFz
ZWQgb24gbnVtYmVyIG9mIGNvb3JkaW5hdGVzLgotICAgIFNoYXBlIHNoYXBlID0gbV9zaGFwZTsK
LSAgICBpZiAoc2hhcGUgPT0gVW5rbm93bikgewotICAgICAgICBpZiAobV9jb29yZHNMZW4gPT0g
MykKLSAgICAgICAgICAgIHNoYXBlID0gQ2lyY2xlOwotICAgICAgICBlbHNlIGlmIChtX2Nvb3Jk
c0xlbiA9PSA0KQotICAgICAgICAgICAgc2hhcGUgPSBSZWN0OwotICAgICAgICBlbHNlIGlmICht
X2Nvb3Jkc0xlbiA+PSA2KQotICAgICAgICAgICAgc2hhcGUgPSBQb2x5OwotICAgIH0KLQotICAg
IFBhdGggcGF0aDsKLSAgICBzd2l0Y2ggKHNoYXBlKSB7Ci0gICAgICAgIGNhc2UgUG9seToKLSAg
ICAgICAgICAgIGlmIChtX2Nvb3Jkc0xlbiA+PSA2KSB7Ci0gICAgICAgICAgICAgICAgaW50IG51
bVBvaW50cyA9IG1fY29vcmRzTGVuIC8gMjsKLSAgICAgICAgICAgICAgICBwYXRoLm1vdmVUbyhG
bG9hdFBvaW50KG1fY29vcmRzWzBdLmNhbGNNaW5WYWx1ZSh3aWR0aCksIG1fY29vcmRzWzFdLmNh
bGNNaW5WYWx1ZShoZWlnaHQpKSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkg
PCBudW1Qb2ludHM7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oRmxv
YXRQb2ludChtX2Nvb3Jkc1tpICogMl0uY2FsY01pblZhbHVlKHdpZHRoKSwgbV9jb29yZHNbaSAq
IDIgKyAxXS5jYWxjTWluVmFsdWUoaGVpZ2h0KSkpOwotICAgICAgICAgICAgICAgIHBhdGguY2xv
c2VTdWJwYXRoKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDaXJjbGU6Ci0gICAgICAgICAgICBpZiAobV9jb29yZHNMZW4gPj0gMykgewotICAgICAg
ICAgICAgICAgIExlbmd0aCByYWRpdXMgPSBtX2Nvb3Jkc1syXTsKLSAgICAgICAgICAgICAgICBp
bnQgciA9IG1pbihyYWRpdXMuY2FsY01pblZhbHVlKHdpZHRoKSwgcmFkaXVzLmNhbGNNaW5WYWx1
ZShoZWlnaHQpKTsKLSAgICAgICAgICAgICAgICBwYXRoLmFkZEVsbGlwc2UoRmxvYXRSZWN0KG1f
Y29vcmRzWzBdLmNhbGNNaW5WYWx1ZSh3aWR0aCkgLSByLCBtX2Nvb3Jkc1sxXS5jYWxjTWluVmFs
dWUoaGVpZ2h0KSAtIHIsCi0gICAgICAgICAgICAgICAgICAgIDIgKiByLCAyICogcikpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVjdDoKLSAgICAg
ICAgICAgIGlmIChtX2Nvb3Jkc0xlbiA+PSA0KSB7Ci0gICAgICAgICAgICAgICAgaW50IHgwID0g
bV9jb29yZHNbMF0uY2FsY01pblZhbHVlKHdpZHRoKTsKLSAgICAgICAgICAgICAgICBpbnQgeTAg
PSBtX2Nvb3Jkc1sxXS5jYWxjTWluVmFsdWUoaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBpbnQg
eDEgPSBtX2Nvb3Jkc1syXS5jYWxjTWluVmFsdWUod2lkdGgpOwotICAgICAgICAgICAgICAgIGlu
dCB5MSA9IG1fY29vcmRzWzNdLmNhbGNNaW5WYWx1ZShoZWlnaHQpOwotICAgICAgICAgICAgICAg
IHBhdGguYWRkUmVjdChGbG9hdFJlY3QoeDAsIHkwLCB4MSAtIHgwLCB5MSAtIHkwKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEZWZhdWx0OgotICAg
ICAgICAgICAgcGF0aC5hZGRSZWN0KEZsb2F0UmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVbmtub3duOgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhdGg7Ci19Ci0KLVN0cmluZyBIVE1MQXJlYUVsZW1l
bnQ6OmFjY2Vzc0tleSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhY2Nlc3Nr
ZXlBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldEFjY2Vzc0tleShjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyLCB2YWx1ZSk7
Ci19Ci0KLVN0cmluZyBIVE1MQXJlYUVsZW1lbnQ6OmFsdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShhbHRBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldEFs
dChjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhbHRBdHRyLCB2YWx1
ZSk7Ci19Ci0KLVN0cmluZyBIVE1MQXJlYUVsZW1lbnQ6OmNvb3JkcygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShjb29yZHNBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXJlYUVsZW1l
bnQ6OnNldENvb3Jkcyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShj
b29yZHNBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MQXJlYUVsZW1lbnQ6OmhyZWYoKSBj
b25zdAotewotICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUo
aHJlZkF0dHIpKTsKLX0KLQotdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldEhyZWYoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoaHJlZkF0dHIsIHZhbHVlKTsKLX0KLQot
Ym9vbCBIVE1MQXJlYUVsZW1lbnQ6Om5vSHJlZigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRB
dHRyaWJ1dGUobm9ocmVmQXR0cikuaXNOdWxsKCk7Ci19Ci0KLXZvaWQgSFRNTEFyZWFFbGVtZW50
OjpzZXROb0hyZWYoYm9vbCBub0hyZWYpCi17Ci0gICAgc2V0QXR0cmlidXRlKG5vaHJlZkF0dHIs
IG5vSHJlZiA/ICIiIDogMCk7Ci19Ci0KLVN0cmluZyBIVE1MQXJlYUVsZW1lbnQ6OnNoYXBlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHNoYXBlQXR0cik7Ci19Ci0KLXZvaWQg
SFRNTEFyZWFFbGVtZW50OjpzZXRTaGFwZShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNl
dEF0dHJpYnV0ZShzaGFwZUF0dHIsIHZhbHVlKTsKLX0KLQotaW50IEhUTUxBcmVhRWxlbWVudDo6
dGFiSW5kZXgoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRy
KS50b0ludCgpOwotfQotCi12b2lkIEhUTUxBcmVhRWxlbWVudDo6c2V0VGFiSW5kZXgoaW50IHRh
YkluZGV4KQotewotICAgIHNldEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIsIFN0cmluZzo6bnVtYmVy
KHRhYkluZGV4KSk7Ci19Ci0KLVN0cmluZyBIVE1MQXJlYUVsZW1lbnQ6OnRhcmdldCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0YXJnZXRBdHRyKTsKLX0KLQotdm9pZCBIVE1M
QXJlYUVsZW1lbnQ6OnNldFRhcmdldChjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0
dHJpYnV0ZSh0YXJnZXRBdHRyLCB2YWx1ZSk7Ci19Ci0KIH0KSW5kZXg6IGh0bWwvSFRNTEltYWdl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAkocmV2
aXNpb24gMTQzODIpCisrKyBodG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMCwyMCArMjAsMTcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgogICovCi0KICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJodG1sX2ltYWdl
aW1wbC5oIgorI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkRvY0xv
YWRlci5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJjc3NoZWxwZXIuaCIKICNp
bmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5o
IgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJSZW5kZXJJbWFnZS5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBzdGQ7CiAKQEAgLTQyLDg0ICszOSwxMSBAQAogdXNpbmcgbmFtZXNwYWNlIEV2ZW50
TmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MSW1hZ2VMb2FkZXI6OkhU
TUxJbWFnZUxvYWRlcihFbGVtZW50KiBlbHQpCi0gICAgOiBtX2VsZW1lbnQoZWx0KSwgbV9pbWFn
ZSgwKSwgbV9maXJlZExvYWQodHJ1ZSksIG1faW1hZ2VDb21wbGV0ZSh0cnVlKQotewotfQotCi1I
VE1MSW1hZ2VMb2FkZXI6On5IVE1MSW1hZ2VMb2FkZXIoKQotewotICAgIGlmIChtX2ltYWdlKQot
ICAgICAgICBtX2ltYWdlLT5kZXJlZih0aGlzKTsKLSAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkt
PnJlbW92ZUltYWdlKHRoaXMpOwotfQotCi12b2lkIEhUTUxJbWFnZUxvYWRlcjo6c2V0TG9hZGlu
Z0ltYWdlKENhY2hlZEltYWdlICpsb2FkaW5nSW1hZ2UpCi17Ci0gICAgbV9maXJlZExvYWQgPSBm
YWxzZTsKLSAgICBtX2ltYWdlQ29tcGxldGUgPSBmYWxzZTsKLSAgICBtX2ltYWdlID0gbG9hZGlu
Z0ltYWdlOwotfQotCi12b2lkIEhUTUxJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQoKQot
ewotICAgIC8vIElmIHdlJ3JlIG5vdCBtYWtpbmcgcmVuZGVyZXJzIGZvciB0aGUgcGFnZSwgdGhl
biBkb24ndCBsb2FkIGltYWdlcy4gIFdlIGRvbid0IHdhbnQgdG8gc2xvdwotICAgIC8vIGRvd24g
dGhlIHJhdyBIVE1MIHBhcnNpbmcgY2FzZSBieSBsb2FkaW5nIGltYWdlcyB3ZSBkb24ndCBpbnRl
bmQgdG8gZGlzcGxheS4KLSAgICBFbGVtZW50KiBlbGVtID0gZWxlbWVudCgpOwotICAgIERvY3Vt
ZW50KiBkb2MgPSBlbGVtLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jLT5yZW5kZXJlcigpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBBdG9taWNTdHJpbmcgYXR0ciA9IGVsZW0tPmdldEF0dHJp
YnV0ZShlbGVtLT5oYXNMb2NhbE5hbWUob2JqZWN0VGFnKSA/IGRhdGFBdHRyIDogc3JjQXR0cik7
Ci0gICAgCi0gICAgLy8gVHJlYXQgYSBsYWNrIG9mIHNyYyBvciBlbXB0eSBzdHJpbmcgZm9yIHNy
YyBhcyBubyBpbWFnZSBhdCBhbGwuCi0gICAgQ2FjaGVkSW1hZ2UgKm5ld0ltYWdlID0gMDsKLSAg
ICBpZiAoIWF0dHIuaXNFbXB0eSgpKQotICAgICAgICBuZXdJbWFnZSA9IGRvYy0+ZG9jTG9hZGVy
KCktPnJlcXVlc3RJbWFnZShwYXJzZVVSTChhdHRyKSk7Ci0KLSAgICBDYWNoZWRJbWFnZSAqb2xk
SW1hZ2UgPSBtX2ltYWdlOwotICAgIGlmIChuZXdJbWFnZSAhPSBvbGRJbWFnZSkgewotI2lmZGVm
IElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcKLSAgICAgICAgaWYgKCFkb2MtPm93bmVyRWxl
bWVudCgpICYmIG5ld0ltYWdlKQotICAgICAgICAgICAgcHJpbnRmKCJJbWFnZSByZXF1ZXN0ZWQg
YXQgJWRcbiIsIGRvYy0+ZWxhcHNlZFRpbWUoKSk7Ci0jZW5kaWYKLSAgICAgICAgc2V0TG9hZGlu
Z0ltYWdlKG5ld0ltYWdlKTsKLSAgICAgICAgaWYgKG5ld0ltYWdlKQotICAgICAgICAgICAgbmV3
SW1hZ2UtPnJlZih0aGlzKTsKLSAgICAgICAgaWYgKG9sZEltYWdlKQotICAgICAgICAgICAgb2xk
SW1hZ2UtPmRlcmVmKHRoaXMpOwotICAgIH0KLQotICAgIGlmIChSZW5kZXJJbWFnZSogcmVuZGVy
ZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KGVsZW0tPnJlbmRlcmVyKCkpKQotICAgICAg
ICByZW5kZXJlci0+cmVzZXRBbmltYXRpb24oKTsKLX0KLQotdm9pZCBIVE1MSW1hZ2VMb2FkZXI6
OmRpc3BhdGNoTG9hZEV2ZW50KCkKLXsKLSAgICBpZiAoIW1fZmlyZWRMb2FkICYmIG1faW1hZ2Up
IHsKLSAgICAgICAgbV9maXJlZExvYWQgPSB0cnVlOwotICAgICAgICBlbGVtZW50KCktPmRpc3Bh
dGNoSFRNTEV2ZW50KG1faW1hZ2UtPmlzRXJyb3JJbWFnZSgpID8gZXJyb3JFdmVudCA6IGxvYWRF
dmVudCwgZmFsc2UsIGZhbHNlKTsKLSAgICB9Ci19Ci0KLXZvaWQgSFRNTEltYWdlTG9hZGVyOjpu
b3RpZnlGaW5pc2hlZChDYWNoZWRPYmplY3QgKmltYWdlKQotewotICAgIG1faW1hZ2VDb21wbGV0
ZSA9IHRydWU7Ci0gICAgRWxlbWVudCogZWxlbSA9IGVsZW1lbnQoKTsKLSAgICBEb2N1bWVudCog
ZG9jID0gZWxlbS0+ZG9jdW1lbnQoKTsKLSAgICBkb2MtPmRpc3BhdGNoSW1hZ2VMb2FkRXZlbnRT
b29uKHRoaXMpOwotI2lmZGVmIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcKLSAgICAgICAg
aWYgKCFkb2MtPm93bmVyRWxlbWVudCgpKQotICAgICAgICAgICAgcHJpbnRmKCJJbWFnZSBsb2Fk
ZWQgYXQgJWRcbiIsIGRvYy0+ZWxhcHNlZFRpbWUoKSk7Ci0jZW5kaWYKLSAgICBpZiAoUmVuZGVy
SW1hZ2UqIHJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihlbGVtLT5yZW5kZXJl
cigpKSkKLSAgICAgICAgcmVuZGVyZXItPnNldENhY2hlZEltYWdlKG1faW1hZ2UpOwotfQotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KIEhUTUxJbWFnZUVsZW1lbnQ6OkhUTUxJbWFnZUVsZW1lbnQo
RG9jdW1lbnQgKmRvYywgSFRNTEZvcm1FbGVtZW50ICpmKQotICAgIDogSFRNTEVsZW1lbnQoaW1n
VGFnLCBkb2MpLCBtX2ltYWdlTG9hZGVyKHRoaXMpLCBpc21hcChmYWxzZSksIG1fZm9ybShmKQor
ICAgIDogSFRNTEVsZW1lbnQoaW1nVGFnLCBkb2MpCisgICAgLCBtX2ltYWdlTG9hZGVyKHRoaXMp
CisgICAgLCBpc21hcChmYWxzZSkKKyAgICAsIG1fZm9ybShmKQogICAgICwgbV9jb21wb3NpdGVP
cGVyYXRvcihDb21wb3NpdGVTb3VyY2VPdmVyKQogewogICAgIGlmIChmKQpAQCAtMTI3LDcgKzUx
LDEwIEBACiB9CiAKIEhUTUxJbWFnZUVsZW1lbnQ6OkhUTUxJbWFnZUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KHRh
Z05hbWUsIGRvYyksIG1faW1hZ2VMb2FkZXIodGhpcyksIGlzbWFwKGZhbHNlKSwgbV9mb3JtKDAp
CisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBtX2ltYWdlTG9hZGVyKHRo
aXMpCisgICAgLCBpc21hcChmYWxzZSkKKyAgICAsIG1fZm9ybSgwKQogICAgICwgbV9jb21wb3Np
dGVPcGVyYXRvcihDb21wb3NpdGVTb3VyY2VPdmVyKQogewogfQpAQCAtNDQ3LDI2OCArMzc0LDQg
QEAKICAgICByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZUNvbXBsZXRlKCk7CiB9CiAKLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotSFRNTE1hcEVsZW1lbnQ6OkhUTUxNYXBFbGVtZW50KERvY3VtZW50
ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudChtYXBUYWcsIGRvYykKLXsKLX0KLQotSFRNTE1hcEVs
ZW1lbnQ6On5IVE1MTWFwRWxlbWVudCgpCi17Ci0gICAgZG9jdW1lbnQoKS0+cmVtb3ZlSW1hZ2VN
YXAodGhpcyk7Ci19Ci0KLWJvb2wgSFRNTE1hcEVsZW1lbnQ6OmNoZWNrRFREKGNvbnN0IE5vZGUq
IG5ld0NoaWxkKQotewotICAgIC8vIEZJWE1FOiBUaGlzIHNlZW1zIHJlYWxseSBvZGQsIGFsbG93
aW5nIG9ubHkgYmxvY2tzIGluc2lkZSBtYXAgZWxlbWVudHMuCi0gICAgcmV0dXJuIG5ld0NoaWxk
LT5oYXNUYWdOYW1lKGFyZWFUYWcpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKHNjcmlwdFRhZykg
fHwgaW5CbG9ja1RhZ0xpc3QobmV3Q2hpbGQpOwotfQotCi1ib29sIEhUTUxNYXBFbGVtZW50Ojpt
YXBNb3VzZUV2ZW50KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBSZW5kZXJP
YmplY3Q6Ok5vZGVJbmZvJiBpbmZvKQotewotICAgIE5vZGUgKm5vZGUgPSB0aGlzOwotICAgIHdo
aWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUodGhpcykpKQotICAgICAgICBpZiAo
bm9kZS0+aGFzVGFnTmFtZShhcmVhVGFnKSkKLSAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxI
VE1MQXJlYUVsZW1lbnQgKj4obm9kZSktPm1hcE1vdXNlRXZlbnQoeCwgeSwgd2lkdGgsIGhlaWdo
dCwgaW5mbykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIEhUTUxNYXBFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUgPSBh
dHRyLT5uYW1lKCk7Ci0gICAgaWYgKGF0dHJOYW1lID09IGlkQXR0ciB8fCBhdHRyTmFtZSA9PSBu
YW1lQXR0cikgewotICAgICAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsKLSAgICAgICAg
aWYgKGF0dHJOYW1lID09IGlkQXR0cikgewotICAgICAgICAgICAgLy8gQ2FsbCBiYXNlIGNsYXNz
IHNvIHRoYXQgaGFzSUQgYml0IGdldHMgc2V0LgotICAgICAgICAgICAgSFRNTEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotICAgICAgICAgICAgaWYgKGRvYy0+aHRtbE1vZGUo
KSAhPSBEb2N1bWVudDo6WEh0bWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIGRvYy0+cmVtb3ZlSW1hZ2VNYXAodGhpcyk7Ci0gICAgICAgIG1fbmFtZSA9IGF0
dHItPnZhbHVlKCk7Ci0gICAgICAgIGlmIChtX25hbWVbMF0gPT0gJyMnKSB7Ci0gICAgICAgICAg
ICBTdHJpbmcgbWFwTmFtZShtX25hbWUuZG9tU3RyaW5nKCkuY29weSgpKTsKLSAgICAgICAgICAg
IG1hcE5hbWUucmVtb3ZlKDAsIDEpOwotICAgICAgICAgICAgbV9uYW1lID0gbWFwTmFtZTsKLSAg
ICAgICAgfQotICAgICAgICBkb2MtPmFkZEltYWdlTWFwKHRoaXMpOwotICAgIH0gZWxzZQotICAg
ICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLVBhc3NS
ZWZQdHI8SFRNTENvbGxlY3Rpb24+IEhUTUxNYXBFbGVtZW50OjphcmVhcygpCi17Ci0gICAgcmV0
dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6TUFQX0FSRUFTKTsK
LX0KLQotU3RyaW5nIEhUTUxNYXBFbGVtZW50OjpuYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKLX0KLQotdm9pZCBIVE1MTWFwRWxlbWVudDo6c2V0TmFt
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShuYW1lQXR0ciwgdmFs
dWUpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxBcmVhRWxlbWVudDo6SFRNTEFy
ZWFFbGVtZW50KERvY3VtZW50ICpkb2MpCi0gICAgOiBIVE1MQW5jaG9yRWxlbWVudChhcmVhVGFn
LCBkb2MpCi17Ci0gICAgbV9jb29yZHMgPSAwOwotICAgIG1fY29vcmRzTGVuID0gMDsKLSAgICBt
X3NoYXBlID0gVW5rbm93bjsKLSAgICBsYXN0aCA9IC0xOwotICAgIGxhc3R3ID0gLTE7Ci19Ci0K
LUhUTUxBcmVhRWxlbWVudDo6fkhUTUxBcmVhRWxlbWVudCgpCi17Ci0gICAgZGVsZXRlIFtdIG1f
Y29vcmRzOwotfQotCi12b2lkIEhUTUxBcmVhRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlICphdHRyKQotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gc2hhcGVB
dHRyKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiZGVm
YXVsdCIpKQotICAgICAgICAgICAgbV9zaGFwZSA9IERlZmF1bHQ7Ci0gICAgICAgIGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJjaXJjbGUiKSkKLSAgICAgICAgICAg
IG1fc2hhcGUgPSBDaXJjbGU7Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0
dHItPnZhbHVlKCksICJwb2x5IikpCi0gICAgICAgICAgICBtX3NoYXBlID0gUG9seTsKLSAgICAg
ICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInJlY3QiKSkKLSAg
ICAgICAgICAgIG1fc2hhcGUgPSBSZWN0OwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IGNvb3Jkc0F0dHIpIHsKLSAgICAgICAgZGVsZXRlIFtdIG1fY29vcmRzOwotICAgICAgICBtX2Nv
b3JkcyA9IGF0dHItPnZhbHVlKCkudG9Db29yZHNBcnJheShtX2Nvb3Jkc0xlbik7Ci0gICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdGFyZ2V0QXR0cikgewotICAgICAgICBtX2hhc1Rhcmdl
dCA9ICFhdHRyLT5pc051bGwoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhbHRB
dHRyIHx8IGF0dHItPm5hbWUoKSA9PSBhY2Nlc3NrZXlBdHRyKSB7Ci0gICAgICAgIC8vIERvIG5v
dGhpbmcuCi0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxBbmNob3JFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQotYm9vbCBIVE1MQXJlYUVsZW1lbnQ6Om1hcE1vdXNlRXZl
bnQoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFJlbmRlck9iamVjdDo6Tm9k
ZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKHdpZHRoICE9IGxhc3R3IHx8IGhlaWdodCAhPSBsYXN0
aCkgewotICAgICAgICByZWdpb24gPSBnZXRSZWdpb24od2lkdGgsIGhlaWdodCk7Ci0gICAgICAg
IGxhc3R3ID0gd2lkdGg7Ci0gICAgICAgIGxhc3RoID0gaGVpZ2h0OwotICAgIH0KLQotICAgIGlm
ICghcmVnaW9uLmNvbnRhaW5zKEludFBvaW50KHgsIHkpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAotICAgIGluZm8uc2V0SW5uZXJOb2RlKHRoaXMpOwotICAgIGluZm8uc2V0VVJMRWxl
bWVudCh0aGlzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSW50UmVjdCBIVE1MQXJlYUVsZW1l
bnQ6OmdldFJlY3QoUmVuZGVyT2JqZWN0KiBvYmopIGNvbnN0Ci17Ci0gICAgaW50IGR4LCBkeTsK
LSAgICBvYmotPmFic29sdXRlUG9zaXRpb24oZHgsIGR5KTsKLSAgICBQYXRoIHAgPSBnZXRSZWdp
b24obGFzdHcsIGxhc3RoKTsKLSAgICBwLnRyYW5zbGF0ZShJbnRTaXplKGR4LCBkeSkpOwotICAg
IHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHAuYm91bmRpbmdSZWN0KCkpOwotfQotCi1QYXRoIEhU
TUxBcmVhRWxlbWVudDo6Z2V0UmVnaW9uKGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3QKLXsK
LSAgICBpZiAoIW1fY29vcmRzKQotICAgICAgICByZXR1cm4gUGF0aCgpOwotCi0gICAgLy8gSWYg
ZWxlbWVudCBvbWl0cyB0aGUgc2hhcGUgYXR0cmlidXRlLCBzZWxlY3Qgc2hhcGUgYmFzZWQgb24g
bnVtYmVyIG9mIGNvb3JkaW5hdGVzLgotICAgIFNoYXBlIHNoYXBlID0gbV9zaGFwZTsKLSAgICBp
ZiAoc2hhcGUgPT0gVW5rbm93bikgewotICAgICAgICBpZiAobV9jb29yZHNMZW4gPT0gMykKLSAg
ICAgICAgICAgIHNoYXBlID0gQ2lyY2xlOwotICAgICAgICBlbHNlIGlmIChtX2Nvb3Jkc0xlbiA9
PSA0KQotICAgICAgICAgICAgc2hhcGUgPSBSZWN0OwotICAgICAgICBlbHNlIGlmIChtX2Nvb3Jk
c0xlbiA+PSA2KQotICAgICAgICAgICAgc2hhcGUgPSBQb2x5OwotICAgIH0KLQotICAgIFBhdGgg
cGF0aDsKLSAgICBzd2l0Y2ggKHNoYXBlKSB7Ci0gICAgICAgIGNhc2UgUG9seToKLSAgICAgICAg
ICAgIGlmIChtX2Nvb3Jkc0xlbiA+PSA2KSB7Ci0gICAgICAgICAgICAgICAgaW50IG51bVBvaW50
cyA9IG1fY29vcmRzTGVuIC8gMjsKLSAgICAgICAgICAgICAgICBwYXRoLm1vdmVUbyhGbG9hdFBv
aW50KG1fY29vcmRzWzBdLmNhbGNNaW5WYWx1ZSh3aWR0aCksIG1fY29vcmRzWzFdLmNhbGNNaW5W
YWx1ZShoZWlnaHQpKSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBudW1Q
b2ludHM7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2lu
dChtX2Nvb3Jkc1tpICogMl0uY2FsY01pblZhbHVlKHdpZHRoKSwgbV9jb29yZHNbaSAqIDIgKyAx
XS5jYWxjTWluVmFsdWUoaGVpZ2h0KSkpOwotICAgICAgICAgICAgICAgIHBhdGguY2xvc2VTdWJw
YXRoKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
aXJjbGU6Ci0gICAgICAgICAgICBpZiAobV9jb29yZHNMZW4gPj0gMykgewotICAgICAgICAgICAg
ICAgIExlbmd0aCByYWRpdXMgPSBtX2Nvb3Jkc1syXTsKLSAgICAgICAgICAgICAgICBpbnQgciA9
IG1pbihyYWRpdXMuY2FsY01pblZhbHVlKHdpZHRoKSwgcmFkaXVzLmNhbGNNaW5WYWx1ZShoZWln
aHQpKTsKLSAgICAgICAgICAgICAgICBwYXRoLmFkZEVsbGlwc2UoRmxvYXRSZWN0KG1fY29vcmRz
WzBdLmNhbGNNaW5WYWx1ZSh3aWR0aCkgLSByLCBtX2Nvb3Jkc1sxXS5jYWxjTWluVmFsdWUoaGVp
Z2h0KSAtIHIsCi0gICAgICAgICAgICAgICAgICAgIDIgKiByLCAyICogcikpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVjdDoKLSAgICAgICAgICAg
IGlmIChtX2Nvb3Jkc0xlbiA+PSA0KSB7Ci0gICAgICAgICAgICAgICAgaW50IHgwID0gbV9jb29y
ZHNbMF0uY2FsY01pblZhbHVlKHdpZHRoKTsKLSAgICAgICAgICAgICAgICBpbnQgeTAgPSBtX2Nv
b3Jkc1sxXS5jYWxjTWluVmFsdWUoaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBpbnQgeDEgPSBt
X2Nvb3Jkc1syXS5jYWxjTWluVmFsdWUod2lkdGgpOwotICAgICAgICAgICAgICAgIGludCB5MSA9
IG1fY29vcmRzWzNdLmNhbGNNaW5WYWx1ZShoZWlnaHQpOwotICAgICAgICAgICAgICAgIHBhdGgu
YWRkUmVjdChGbG9hdFJlY3QoeDAsIHkwLCB4MSAtIHgwLCB5MSAtIHkwKSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEZWZhdWx0OgotICAgICAgICAg
ICAgcGF0aC5hZGRSZWN0KEZsb2F0UmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVbmtub3duOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHBhdGg7Ci19Ci0KLVN0cmluZyBIVE1MQXJlYUVsZW1lbnQ6OmFj
Y2Vzc0tleSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRy
KTsKLX0KLQotdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldEFjY2Vzc0tleShjb25zdCBTdHJpbmcm
IHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyLCB2YWx1ZSk7Ci19Ci0K
LVN0cmluZyBIVE1MQXJlYUVsZW1lbnQ6OmFsdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0
dHJpYnV0ZShhbHRBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldEFsdChjb25z
dCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhbHRBdHRyLCB2YWx1ZSk7Ci19
Ci0KLVN0cmluZyBIVE1MQXJlYUVsZW1lbnQ6OmNvb3JkcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShjb29yZHNBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNl
dENvb3Jkcyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShjb29yZHNB
dHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MQXJlYUVsZW1lbnQ6OmhyZWYoKSBjb25zdAot
ewotICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoaHJlZkF0
dHIpKTsKLX0KLQotdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldEhyZWYoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoaHJlZkF0dHIsIHZhbHVlKTsKLX0KLQotYm9vbCBI
VE1MQXJlYUVsZW1lbnQ6Om5vSHJlZigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1
dGUobm9ocmVmQXR0cikuaXNOdWxsKCk7Ci19Ci0KLXZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXRO
b0hyZWYoYm9vbCBub0hyZWYpCi17Ci0gICAgc2V0QXR0cmlidXRlKG5vaHJlZkF0dHIsIG5vSHJl
ZiA/ICIiIDogMCk7Ci19Ci0KLVN0cmluZyBIVE1MQXJlYUVsZW1lbnQ6OnNoYXBlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHNoYXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEFy
ZWFFbGVtZW50OjpzZXRTaGFwZShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJp
YnV0ZShzaGFwZUF0dHIsIHZhbHVlKTsKLX0KLQotaW50IEhUTUxBcmVhRWxlbWVudDo6dGFiSW5k
ZXgoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRyKS50b0lu
dCgpOwotfQotCi12b2lkIEhUTUxBcmVhRWxlbWVudDo6c2V0VGFiSW5kZXgoaW50IHRhYkluZGV4
KQotewotICAgIHNldEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIsIFN0cmluZzo6bnVtYmVyKHRhYklu
ZGV4KSk7Ci19Ci0KLVN0cmluZyBIVE1MQXJlYUVsZW1lbnQ6OnRhcmdldCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0YXJnZXRBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXJlYUVs
ZW1lbnQ6OnNldFRhcmdldChjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0
ZSh0YXJnZXRBdHRyLCB2YWx1ZSk7Ci19Ci0KIH0KSW5kZXg6IGh0bWwvSFRNTEFyZWFFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MQXJlYUVsZW1lbnQuaAkocmV2aXNpb24gMTQzODIp
CisrKyBodG1sL0hUTUxBcmVhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxMzMgKzIy
LDE1IEBACiAgKgogICovCiAKLSNpZm5kZWYgSFRNTF9JTUFHRUlNUExfSAotI2RlZmluZSBIVE1M
X0lNQUdFSU1QTF9ICisjaWZuZGVmIEhUTUxBcmVhRWxlbWVudF9ICisjZGVmaW5lIEhUTUxBcmVh
RWxlbWVudF9ICiAKLSNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkhUTUxBbmNo
b3JFbGVtZW50LmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJQYXRoLmgiCi0jaW5j
bHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiIC8vIGZvciBS
ZW5kZXJPYmplY3Q6Ok5vZGVJbmZvCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRN
TENvbGxlY3Rpb247Ci1jbGFzcyBIVE1MRm9ybUVsZW1lbnQ7Ci1jbGFzcyBJbWFnZTsKLWNsYXNz
IFN0cmluZzsKLQotc3RydWN0IExlbmd0aDsKLQotY2xhc3MgSFRNTEltYWdlTG9hZGVyIDogcHVi
bGljIENhY2hlZE9iamVjdENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgSFRNTEltYWdlTG9hZGVyKEVs
ZW1lbnQqKTsKLSAgICB2aXJ0dWFsIH5IVE1MSW1hZ2VMb2FkZXIoKTsKLQotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwotCi0gICAgdm9pZCBkaXNwYXRjaExvYWRFdmVudCgp
OwotCi0gICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQot
ICAgIGJvb2wgaW1hZ2VDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VDb21wbGV0ZTsg
fQotICAgIENhY2hlZEltYWdlKiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KLQot
ICAgIC8vIENhY2hlZE9iamVjdENsaWVudCBBUEkKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmlu
aXNoZWQoQ2FjaGVkT2JqZWN0Kik7Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIHNldExvYWRpbmdJ
bWFnZShDYWNoZWRJbWFnZSopOwotCi1wcml2YXRlOgotICAgIEVsZW1lbnQqIG1fZWxlbWVudDsK
LSAgICBDYWNoZWRJbWFnZSogbV9pbWFnZTsKLSAgICBib29sIG1fZmlyZWRMb2FkIDogMTsKLSAg
ICBib29sIG1faW1hZ2VDb21wbGV0ZSA6IDE7Ci19OwotCi1jbGFzcyBIVE1MSW1hZ2VFbGVtZW50
IDogcHVibGljIEhUTUxFbGVtZW50IHsKLSAgICBmcmllbmQgY2xhc3MgSFRNTEZvcm1FbGVtZW50
OwotcHVibGljOgotICAgIEhUTUxJbWFnZUVsZW1lbnQoRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1l
bnQqID0gMCk7Ci0gICAgSFRNTEltYWdlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCopOwotICAgIH5IVE1MSW1hZ2VFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFs
IEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0
dXNGb3JiaWRkZW47IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0gICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0
ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQg
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1
bWVudCgpOwotCi0gICAgaW50IHdpZHRoKGJvb2wgaWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzID0g
ZmFsc2UpIGNvbnN0OwotICAgIGludCBoZWlnaHQoYm9vbCBpZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHMgPSBmYWxzZSkgY29uc3Q7Ci0KLSAgICBib29sIGlzU2VydmVyTWFwKCkgY29uc3QgeyByZXR1
cm4gaXNtYXAgJiYgdXNlbWFwLmlzRW1wdHkoKTsgfQotCi0gICAgU3RyaW5nIGFsdFRleHQoKSBj
b25zdDsKLQotICAgIFN0cmluZyBpbWFnZU1hcCgpIGNvbnN0IHsgcmV0dXJuIHVzZW1hcDsgfQot
ICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsK
LQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9jb21wb3NpdGVPcGVyYXRvcjsgfQotCi0gICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgpOyB9Ci0gICAgCi0gICAgU3Ry
aW5nIG5hbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJik7Ci0KLSAg
ICBTdHJpbmcgYWxpZ24oKSBjb25zdDsKLSAgICB2b2lkIHNldEFsaWduKGNvbnN0IFN0cmluZyYp
OwotCi0gICAgU3RyaW5nIGFsdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0QWx0KGNvbnN0IFN0cmlu
ZyYpOwotCi0gICAgaW50IGJvcmRlcigpIGNvbnN0OwotICAgIHZvaWQgc2V0Qm9yZGVyKGludCk7
Ci0KLSAgICB2b2lkIHNldEhlaWdodChpbnQpOwotCi0gICAgaW50IGhzcGFjZSgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0SHNwYWNlKGludCk7Ci0KLSAgICBib29sIGlzTWFwKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRJc01hcChib29sKTsKLQotICAgIFN0cmluZyBsb25nRGVzYygpIGNvbnN0OwotICAg
IHZvaWQgc2V0TG9uZ0Rlc2MoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgc3JjKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRTcmMoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgdXNlTWFw
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRVc2VNYXAoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBpbnQg
dnNwYWNlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRWc3BhY2UoaW50KTsKLQotICAgIHZvaWQgc2V0
V2lkdGgoaW50KTsKLQotICAgIGludCB4KCkgY29uc3Q7Ci0gICAgaW50IHkoKSBjb25zdDsKLQot
ICAgIGJvb2wgY29tcGxldGUoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIEhUTUxJbWFnZUxv
YWRlciBtX2ltYWdlTG9hZGVyOwotICAgIFN0cmluZyB1c2VtYXA7Ci0gICAgYm9vbCBpc21hcDsK
LSAgICBIVE1MRm9ybUVsZW1lbnQqIG1fZm9ybTsKLSAgICBTdHJpbmcgb2xkTmFtZUF0dHI7Ci0g
ICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9jb21wb3NpdGVPcGVyYXRvcjsKLX07Ci0KLS8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KIGNsYXNzIEhUTUxBcmVhRWxlbWVudCA6IHB1YmxpYyBIVE1MQW5jaG9yRWxlbWVudCB7
CiBwdWJsaWM6CiAgICAgZW51bSBTaGFwZSB7IERlZmF1bHQsIFBvbHksIFJlY3QsIENpcmNsZSwg
VW5rbm93biB9OwpAQCAtMTYzLDcgKzQ1LDcgQEAKIAogICAgIGJvb2wgaXNEZWZhdWx0KCkgY29u
c3QgeyByZXR1cm4gbV9zaGFwZSA9PSBEZWZhdWx0OyB9CiAKLSAgICBib29sIG1hcE1vdXNlRXZl
bnQoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFJlbmRlck9iamVjdDo6Tm9k
ZUluZm8mIGluZm8pOworICAgIGJvb2wgbWFwTW91c2VFdmVudChpbnQgeCwgaW50IHksIGNvbnN0
IEludFNpemUmLCBSZW5kZXJPYmplY3Q6Ok5vZGVJbmZvJik7CiAKICAgICB2aXJ0dWFsIEludFJl
Y3QgZ2V0UmVjdChSZW5kZXJPYmplY3QqKSBjb25zdDsKIApAQCAtMTkyLDQwICs3NCwxNCBAQAog
ICAgIHZvaWQgc2V0VGFyZ2V0KGNvbnN0IFN0cmluZyYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgUGF0
aCBnZXRSZWdpb24oaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKKyAgICBQYXRoIGdldFJl
Z2lvbihjb25zdCBJbnRTaXplJikgY29uc3Q7CiAgICAgUGF0aCByZWdpb247CiAgICAgTGVuZ3Ro
KiBtX2Nvb3JkczsKICAgICBpbnQgbV9jb29yZHNMZW47Ci0gICAgaW50IGxhc3R3LCBsYXN0aDsK
KyAgICBJbnRTaXplIG1fbGFzdFNpemU7CiAgICAgU2hhcGUgbV9zaGFwZTsKIH07CiAKLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTE1hcEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1l
bnQgewotcHVibGljOgotICAgIEhUTUxNYXBFbGVtZW50KERvY3VtZW50Kik7Ci0gICAgfkhUTUxN
YXBFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1l
bnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1YWwgaW50
IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQotICAgIHZpcnR1YWwgYm9vbCBjaGVj
a0RURChjb25zdCBOb2RlKik7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGdldE5hbWUoKSBj
b25zdCB7IHJldHVybiBtX25hbWU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLQotICAgIGJvb2wgbWFwTW91c2VFdmVudChpbnQg
eCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgUmVuZGVyT2JqZWN0OjpOb2RlSW5mbyYp
OwotCi0gICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gYXJlYXMoKTsKLQotICAgIFN0cmlu
ZyBuYW1lKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpOwotCi1wcml2
YXRlOgotICAgIEF0b21pY1N0cmluZyBtX25hbWU7Ci19OwotCiB9IC8vbmFtZXNwYWNlCiAKICNl
bmRpZgpJbmRleDogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwv
SFRNTEZvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gMTQzODIpCisrKyBodG1sL0hUTUxGb3JtRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEwICszMiwxMCBAQAogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1Db2xs
ZWN0aW9uLmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJ
bnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJjc3NoZWxw
ZXIuaCIKLSNpbmNsdWRlICJodG1sX2ltYWdlaW1wbC5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVF
ZGl0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IGh0bWwvSFRNTEFyZWFFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHJldmlzaW9uIDE0
MzgyKQorKysgaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw1
MDkgKzIwLDI3IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4K
ICAqLwotCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiaHRtbF9pbWFnZWltcGwuaCIK
KyNpbmNsdWRlICJIVE1MQXJlYUVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkRvY0xvYWRlci5oIgot
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRl
ICJIVE1MRm9ybUVsZW1lbnQuaCIKLSNpbmNsdWRlICJjc3NoZWxwZXIuaCIKLSNpbmNsdWRlICJD
U1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1
ZGUgIkhUTUxEb2N1bWVudC5oIgotI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MSW1hZ2VMb2FkZXI6OkhUTUxJbWFnZUxvYWRlcihFbGVt
ZW50KiBlbHQpCi0gICAgOiBtX2VsZW1lbnQoZWx0KSwgbV9pbWFnZSgwKSwgbV9maXJlZExvYWQo
dHJ1ZSksIG1faW1hZ2VDb21wbGV0ZSh0cnVlKQotewotfQotCi1IVE1MSW1hZ2VMb2FkZXI6On5I
VE1MSW1hZ2VMb2FkZXIoKQotewotICAgIGlmIChtX2ltYWdlKQotICAgICAgICBtX2ltYWdlLT5k
ZXJlZih0aGlzKTsKLSAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnJlbW92ZUltYWdlKHRoaXMp
OwotfQotCi12b2lkIEhUTUxJbWFnZUxvYWRlcjo6c2V0TG9hZGluZ0ltYWdlKENhY2hlZEltYWdl
ICpsb2FkaW5nSW1hZ2UpCi17Ci0gICAgbV9maXJlZExvYWQgPSBmYWxzZTsKLSAgICBtX2ltYWdl
Q29tcGxldGUgPSBmYWxzZTsKLSAgICBtX2ltYWdlID0gbG9hZGluZ0ltYWdlOwotfQotCi12b2lk
IEhUTUxJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQoKQotewotICAgIC8vIElmIHdlJ3Jl
IG5vdCBtYWtpbmcgcmVuZGVyZXJzIGZvciB0aGUgcGFnZSwgdGhlbiBkb24ndCBsb2FkIGltYWdl
cy4gIFdlIGRvbid0IHdhbnQgdG8gc2xvdwotICAgIC8vIGRvd24gdGhlIHJhdyBIVE1MIHBhcnNp
bmcgY2FzZSBieSBsb2FkaW5nIGltYWdlcyB3ZSBkb24ndCBpbnRlbmQgdG8gZGlzcGxheS4KLSAg
ICBFbGVtZW50KiBlbGVtID0gZWxlbWVudCgpOwotICAgIERvY3VtZW50KiBkb2MgPSBlbGVtLT5k
b2N1bWVudCgpOwotICAgIGlmICghZG9jLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBBdG9taWNTdHJpbmcgYXR0ciA9IGVsZW0tPmdldEF0dHJpYnV0ZShlbGVtLT5oYXNMb2Nh
bE5hbWUob2JqZWN0VGFnKSA/IGRhdGFBdHRyIDogc3JjQXR0cik7Ci0gICAgCi0gICAgLy8gVHJl
YXQgYSBsYWNrIG9mIHNyYyBvciBlbXB0eSBzdHJpbmcgZm9yIHNyYyBhcyBubyBpbWFnZSBhdCBh
bGwuCi0gICAgQ2FjaGVkSW1hZ2UgKm5ld0ltYWdlID0gMDsKLSAgICBpZiAoIWF0dHIuaXNFbXB0
eSgpKQotICAgICAgICBuZXdJbWFnZSA9IGRvYy0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShw
YXJzZVVSTChhdHRyKSk7Ci0KLSAgICBDYWNoZWRJbWFnZSAqb2xkSW1hZ2UgPSBtX2ltYWdlOwot
ICAgIGlmIChuZXdJbWFnZSAhPSBvbGRJbWFnZSkgewotI2lmZGVmIElOU1RSVU1FTlRfTEFZT1VU
X1NDSEVEVUxJTkcKLSAgICAgICAgaWYgKCFkb2MtPm93bmVyRWxlbWVudCgpICYmIG5ld0ltYWdl
KQotICAgICAgICAgICAgcHJpbnRmKCJJbWFnZSByZXF1ZXN0ZWQgYXQgJWRcbiIsIGRvYy0+ZWxh
cHNlZFRpbWUoKSk7Ci0jZW5kaWYKLSAgICAgICAgc2V0TG9hZGluZ0ltYWdlKG5ld0ltYWdlKTsK
LSAgICAgICAgaWYgKG5ld0ltYWdlKQotICAgICAgICAgICAgbmV3SW1hZ2UtPnJlZih0aGlzKTsK
LSAgICAgICAgaWYgKG9sZEltYWdlKQotICAgICAgICAgICAgb2xkSW1hZ2UtPmRlcmVmKHRoaXMp
OwotICAgIH0KLQotICAgIGlmIChSZW5kZXJJbWFnZSogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJJbWFnZSo+KGVsZW0tPnJlbmRlcmVyKCkpKQotICAgICAgICByZW5kZXJlci0+cmVzZXRB
bmltYXRpb24oKTsKLX0KLQotdm9pZCBIVE1MSW1hZ2VMb2FkZXI6OmRpc3BhdGNoTG9hZEV2ZW50
KCkKLXsKLSAgICBpZiAoIW1fZmlyZWRMb2FkICYmIG1faW1hZ2UpIHsKLSAgICAgICAgbV9maXJl
ZExvYWQgPSB0cnVlOwotICAgICAgICBlbGVtZW50KCktPmRpc3BhdGNoSFRNTEV2ZW50KG1faW1h
Z2UtPmlzRXJyb3JJbWFnZSgpID8gZXJyb3JFdmVudCA6IGxvYWRFdmVudCwgZmFsc2UsIGZhbHNl
KTsKLSAgICB9Ci19Ci0KLXZvaWQgSFRNTEltYWdlTG9hZGVyOjpub3RpZnlGaW5pc2hlZChDYWNo
ZWRPYmplY3QgKmltYWdlKQotewotICAgIG1faW1hZ2VDb21wbGV0ZSA9IHRydWU7Ci0gICAgRWxl
bWVudCogZWxlbSA9IGVsZW1lbnQoKTsKLSAgICBEb2N1bWVudCogZG9jID0gZWxlbS0+ZG9jdW1l
bnQoKTsKLSAgICBkb2MtPmRpc3BhdGNoSW1hZ2VMb2FkRXZlbnRTb29uKHRoaXMpOwotI2lmZGVm
IElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcKLSAgICAgICAgaWYgKCFkb2MtPm93bmVyRWxl
bWVudCgpKQotICAgICAgICAgICAgcHJpbnRmKCJJbWFnZSBsb2FkZWQgYXQgJWRcbiIsIGRvYy0+
ZWxhcHNlZFRpbWUoKSk7Ci0jZW5kaWYKLSAgICBpZiAoUmVuZGVySW1hZ2UqIHJlbmRlcmVyID0g
c3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihlbGVtLT5yZW5kZXJlcigpKSkKLSAgICAgICAgcmVu
ZGVyZXItPnNldENhY2hlZEltYWdlKG1faW1hZ2UpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLUhUTUxJbWFnZUVsZW1lbnQ6OkhUTUxJbWFnZUVsZW1lbnQoRG9jdW1lbnQgKmRvYywgSFRN
TEZvcm1FbGVtZW50ICpmKQotICAgIDogSFRNTEVsZW1lbnQoaW1nVGFnLCBkb2MpLCBtX2ltYWdl
TG9hZGVyKHRoaXMpLCBpc21hcChmYWxzZSksIG1fZm9ybShmKQotICAgICwgbV9jb21wb3NpdGVP
cGVyYXRvcihDb21wb3NpdGVTb3VyY2VPdmVyKQotewotICAgIGlmIChmKQotICAgICAgICBmLT5y
ZWdpc3RlckltZ0VsZW1lbnQodGhpcyk7Ci19Ci0KLUhUTUxJbWFnZUVsZW1lbnQ6OkhUTUxJbWFn
ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLSAg
ICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYyksIG1faW1hZ2VMb2FkZXIodGhpcyksIGlzbWFw
KGZhbHNlKSwgbV9mb3JtKDApCi0gICAgLCBtX2NvbXBvc2l0ZU9wZXJhdG9yKENvbXBvc2l0ZVNv
dXJjZU92ZXIpCi17Ci19Ci0KLUhUTUxJbWFnZUVsZW1lbnQ6On5IVE1MSW1hZ2VFbGVtZW50KCkK
LXsKLSAgICBpZiAobV9mb3JtKQotICAgICAgICBtX2Zvcm0tPnJlbW92ZUltZ0VsZW1lbnQodGhp
cyk7Ci19Ci0KLWJvb2wgSFRNTEltYWdlRWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKLXsK
LSAgICBpZiAoYXR0ck5hbWUgPT0gd2lkdGhBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IGhl
aWdodEF0dHIgfHwKLSAgICAgICAgYXR0ck5hbWUgPT0gdnNwYWNlQXR0ciB8fAotICAgICAgICBh
dHRyTmFtZSA9PSBoc3BhY2VBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IHZhbGlnbkF0dHIp
IHsKLSAgICAgICAgcmVzdWx0ID0gZVVuaXZlcnNhbDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICAKLSAgICBpZiAoYXR0ck5hbWUgPT0gYm9yZGVyQXR0ciB8fCBhdHRyTmFtZSA9
PSBhbGlnbkF0dHIpIHsKLSAgICAgICAgcmVzdWx0ID0gZVJlcGxhY2VkOyAvLyBTaGFyZWQgd2l0
aCBlbWJlZCBhbmQgaWZyYW1lIGVsZW1lbnRzLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgcmV0dXJuIEhUTUxFbGVtZW50OjptYXBUb0VudHJ5KGF0dHJOYW1lLCByZXN1bHQp
OwotfQotCi12b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9
IGF0dHItPm5hbWUoKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gYWx0QXR0cikgewotICAgICAgICBp
ZiAocmVuZGVyZXIoKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4ocmVu
ZGVyZXIoKSktPnVwZGF0ZUFsdFRleHQoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IHNy
Y0F0dHIpCi0gICAgICAgIG1faW1hZ2VMb2FkZXIudXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSB3aWR0aEF0dHIpCi0gICAgICAgIGFkZENTU0xlbmd0aChhdHRy
LCBDU1NfUFJPUF9XSURUSCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gaGVpZ2h0QXR0cikKLSAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX0hFSUdI
VCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gYm9yZGVyQXR0cikg
ewotICAgICAgICAvLyBib3JkZXI9Im5vYm9yZGVyIiAtPiBib3JkZXI9IjAiCi0gICAgICAgIGlm
KGF0dHItPnZhbHVlKCkudG9JbnQoKSkgewotICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIs
IENTU19QUk9QX0JPUkRFUl9XSURUSCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgICAgICAgICBhZGRD
U1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfVE9QX1NUWUxFLCBDU1NfVkFMX1NPTElE
KTsKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9SSUdI
VF9TVFlMRSwgQ1NTX1ZBTF9TT0xJRCk7Ci0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRy
LCBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX1NUWUxFLCBDU1NfVkFMX1NPTElEKTsKLSAgICAgICAg
ICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9MRUZUX1NUWUxFLCBDU1Nf
VkFMX1NPTElEKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gdnNwYWNl
QXR0cikgewotICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX1RPUCwg
YXR0ci0+dmFsdWUoKSk7Ci0gICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJH
SU5fQk9UVE9NLCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IGhz
cGFjZUF0dHIpIHsKLSAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX01BUkdJTl9M
RUZULCBhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9Q
X01BUkdJTl9SSUdIVCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9
PSBhbGlnbkF0dHIpCi0gICAgICAgIGFkZEhUTUxBbGlnbm1lbnQoYXR0cik7Ci0gICAgZWxzZSBp
ZiAoYXR0ck5hbWUgPT0gdmFsaWduQXR0cikKLSAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwg
Q1NTX1BST1BfVkVSVElDQUxfQUxJR04sIGF0dHItPnZhbHVlKCkpOwotICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IHVzZW1hcEF0dHIpIHsKLSAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkuZG9tU3Ry
aW5nKClbMF0gPT0gJyMnKQotICAgICAgICAgICAgdXNlbWFwID0gYXR0ci0+dmFsdWUoKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgdXNlbWFwID0gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwo
cGFyc2VVUkwoYXR0ci0+dmFsdWUoKSkpOwotICAgICAgICBtX2lzTGluayA9ICFhdHRyLT5pc051
bGwoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IGlzbWFwQXR0cikKLSAgICAgICAgaXNt
YXAgPSB0cnVlOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IG9uYWJvcnRBdHRyKQotICAgICAg
ICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihhYm9ydEV2ZW50LCBhdHRyKTsKLSAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBvbmxvYWRBdHRyKQotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihsb2Fk
RXZlbnQsIGF0dHIpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGNvbXBvc2l0ZUF0dHIpIHsK
LSAgICAgICAgaWYgKCFwYXJzZUNvbXBvc2l0ZU9wZXJhdG9yKGF0dHItPnZhbHVlKCksIG1fY29t
cG9zaXRlT3BlcmF0b3IpKQotICAgICAgICAgICAgbV9jb21wb3NpdGVPcGVyYXRvciA9IENvbXBv
c2l0ZVNvdXJjZU92ZXI7Ci0gICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBuYW1lQXR0cikgewot
ICAgICAgICBTdHJpbmcgbmV3TmFtZUF0dHIgPSBhdHRyLT52YWx1ZSgpOwotICAgICAgICBpZiAo
aW5Eb2N1bWVudCgpICYmIGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAg
ICAgIEhUTUxEb2N1bWVudCogZG9jID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jdW1l
bnQoKSk7Ci0gICAgICAgICAgICBkb2MtPnJlbW92ZU5hbWVkSXRlbShvbGROYW1lQXR0cik7Ci0g
ICAgICAgICAgICBkb2MtPmFkZE5hbWVkSXRlbShuZXdOYW1lQXR0cik7Ci0gICAgICAgIH0KLSAg
ICAgICAgb2xkTmFtZUF0dHIgPSBuZXdOYW1lQXR0cjsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRN
TEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi1TdHJpbmcgSFRNTElt
YWdlRWxlbWVudDo6YWx0VGV4dCgpIGNvbnN0Ci17Ci0gICAgLy8gbGV0cyBmaWd1cmUgb3V0IHRo
ZSBhbHQgdGV4dC4uIG1hZ2ljIHN0dWZmCi0gICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMTk5
OC9SRUMtaHRtbDQwLTE5OTgwNDI0L2FwcGVuZGl4L25vdGVzLmh0bWwjYWx0Z2VuCi0gICAgLy8g
YWxzbyBoZWF2aWx5IGRpc2N1c3NlZCBieSBIaXhpZSBvbiBidWd6aWxsYQotICAgIFN0cmluZyBh
bHQgPSBnZXRBdHRyaWJ1dGUoYWx0QXR0cik7Ci0gICAgLy8gZmFsbCBiYWNrIHRvIHRpdGxlIGF0
dHJpYnV0ZQotICAgIGlmIChhbHQuaXNOdWxsKCkpCi0gICAgICAgIGFsdCA9IGdldEF0dHJpYnV0
ZSh0aXRsZUF0dHIpOwotICAgIHJldHVybiBhbHQ7Ci19Ci0KLVJlbmRlck9iamVjdCAqSFRNTElt
YWdlRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHls
ZSAqc3R5bGUpCi17Ci0gICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJJbWFnZSh0aGlzKTsK
LX0KLQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjphdHRhY2goKQotewotICAgIEhUTUxFbGVtZW50
OjphdHRhY2goKTsKLQotICAgIGlmIChSZW5kZXJJbWFnZSogaW1hZ2VPYmogPSBzdGF0aWNfY2Fz
dDxSZW5kZXJJbWFnZSo+KHJlbmRlcmVyKCkpKQotICAgICAgICBpbWFnZU9iai0+c2V0Q2FjaGVk
SW1hZ2UobV9pbWFnZUxvYWRlci5pbWFnZSgpKTsKLX0KLQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50
OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCi17Ci0gICAgRG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50
KCk7Ci0gICAgaWYgKGRvYy0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8
SFRNTERvY3VtZW50Kj4oZG9jKS0+YWRkTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLQotICAgIEhU
TUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotfQotCi12b2lkIEhUTUxJbWFnZUVs
ZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQotewotICAgIERvY3VtZW50KiBkb2MgPSBkb2N1
bWVudCgpOwotICAgIGlmIChkb2MtPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIHN0YXRpY19j
YXN0PEhUTUxEb2N1bWVudCo+KGRvYyktPnJlbW92ZU5hbWVkSXRlbShvbGROYW1lQXR0cik7Ci0K
LSAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotfQotCi1pbnQgSFRNTElt
YWdlRWxlbWVudDo6d2lkdGgoYm9vbCBpZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMpIGNvbnN0Ci17
Ci0gICAgaWYgKCFyZW5kZXJlcigpKSB7Ci0gICAgICAgIC8vIGNoZWNrIHRoZSBhdHRyaWJ1dGUg
Zmlyc3QgZm9yIGFuIGV4cGxpY2l0IHBpeGVsIHZhbHVlCi0gICAgICAgIGJvb2wgb2s7Ci0gICAg
ICAgIGludCB3aWR0aCA9IGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpLnRvSW50KCZvayk7Ci0gICAg
ICAgIGlmIChvaykKLSAgICAgICAgICAgIHJldHVybiB3aWR0aDsKLSAgICAgICAgCi0gICAgICAg
IC8vIGlmIHRoZSBpbWFnZSBpcyBhdmFpbGFibGUsIHVzZSBpdHMgd2lkdGgKLSAgICAgICAgaWYg
KG1faW1hZ2VMb2FkZXIuaW1hZ2UoKSkKLSAgICAgICAgICAgIHJldHVybiBtX2ltYWdlTG9hZGVy
LmltYWdlKCktPmltYWdlU2l6ZSgpLndpZHRoKCk7Ci0gICAgfQotCi0gICAgRG9jdW1lbnQqIGRv
YyA9IGRvY3VtZW50KCk7Ci0gICAgaWYgKGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cykKLSAgICAg
ICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBlbHNl
Ci0gICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0KCk7Ci0KLSAgICByZXR1cm4gcmVuZGVyZXIoKSA/
IHJlbmRlcmVyKCktPmNvbnRlbnRXaWR0aCgpIDogMDsKLX0KLQotaW50IEhUTUxJbWFnZUVsZW1l
bnQ6OmhlaWdodChib29sIGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cykgY29uc3QKLXsKLSAgICBp
ZiAoIXJlbmRlcmVyKCkpIHsKLSAgICAgICAgLy8gY2hlY2sgdGhlIGF0dHJpYnV0ZSBmaXJzdCBm
b3IgYW4gZXhwbGljaXQgcGl4ZWwgdmFsdWUKLSAgICAgICAgYm9vbCBvazsKLSAgICAgICAgaW50
IGhlaWdodCA9IGdldEF0dHJpYnV0ZShoZWlnaHRBdHRyKS50b0ludCgmb2spOwotICAgICAgICBp
ZiAob2spCi0gICAgICAgICAgICByZXR1cm4gaGVpZ2h0OwotICAgICAgICAKLSAgICAgICAgLy8g
aWYgdGhlIGltYWdlIGlzIGF2YWlsYWJsZSwgdXNlIGl0cyBoZWlnaHQKLSAgICAgICAgaWYgKG1f
aW1hZ2VMb2FkZXIuaW1hZ2UoKSkKLSAgICAgICAgICAgIHJldHVybiBtX2ltYWdlTG9hZGVyLmlt
YWdlKCktPmltYWdlU2l6ZSgpLmhlaWdodCgpOyAgICAgICAgCi0gICAgfQotCi0gICAgRG9jdW1l
bnQqIGRvYyA9IGRvY3VtZW50KCk7Ci0gICAgaWYgKGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cykK
LSAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAg
ICBlbHNlCi0gICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0KCk7Ci0KLSAgICByZXR1cm4gcmVuZGVy
ZXIoKSA/IHJlbmRlcmVyKCktPmNvbnRlbnRIZWlnaHQoKSA6IDA7Ci19Ci0KLWJvb2wgSFRNTElt
YWdlRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlICphdHRyKSBjb25zdAotewotICAg
IHJldHVybiBhdHRyLT5uYW1lKCkgPT0gc3JjQXR0ciB8fCAoYXR0ci0+bmFtZSgpID09IHVzZW1h
cEF0dHIgJiYgYXR0ci0+dmFsdWUoKS5kb21TdHJpbmcoKVswXSAhPSAnIycpOwotfQotCi1TdHJp
bmcgSFRNTEltYWdlRWxlbWVudDo6bmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJp
YnV0ZShuYW1lQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0TmFtZShjb25z
dCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShuYW1lQXR0ciwgdmFsdWUpOwot
fQotCi1TdHJpbmcgSFRNTEltYWdlRWxlbWVudDo6YWxpZ24oKSBjb25zdAotewotICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsKLX0KLQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50Ojpz
ZXRBbGlnbihjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhbGlnbkF0
dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxJbWFnZUVsZW1lbnQ6OmFsdCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbHRBdHRyKTsKLX0KLQotdm9pZCBIVE1MSW1hZ2VF
bGVtZW50OjpzZXRBbHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUo
YWx0QXR0ciwgdmFsdWUpOwotfQotCi1pbnQgSFRNTEltYWdlRWxlbWVudDo6Ym9yZGVyKCkgY29u
c3QKLXsKLSAgICAvLyAjIyMgcmV0dXJuIHZhbHVlIGluIHBpeGVscwotICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUoYm9yZGVyQXR0cikudG9JbnQoKTsKLX0KLQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50
OjpzZXRCb3JkZXIoaW50IHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShib3JkZXJBdHRyLCBT
dHJpbmc6Om51bWJlcih2YWx1ZSkpOwotfQotCi12b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldEhl
aWdodChpbnQgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGhlaWdodEF0dHIsIFN0cmluZzo6
bnVtYmVyKHZhbHVlKSk7Ci19Ci0KLWludCBIVE1MSW1hZ2VFbGVtZW50Ojpoc3BhY2UoKSBjb25z
dAotewotICAgIC8vICMjIyByZXR1cm4gYWN0dWFsIHZhbHVlCi0gICAgcmV0dXJuIGdldEF0dHJp
YnV0ZShoc3BhY2VBdHRyKS50b0ludCgpOwotfQotCi12b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNl
dEhzcGFjZShpbnQgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGhzcGFjZUF0dHIsIFN0cmlu
Zzo6bnVtYmVyKHZhbHVlKSk7Ci19Ci0KLWJvb2wgSFRNTEltYWdlRWxlbWVudDo6aXNNYXAoKSBj
b25zdAotewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGlzbWFwQXR0cikuaXNOdWxsKCk7Ci19
Ci0KLXZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0SXNNYXAoYm9vbCBpc01hcCkKLXsKLSAgICBz
ZXRBdHRyaWJ1dGUoaXNtYXBBdHRyLCBpc01hcCA/ICIiIDogMCk7Ci19Ci0KLVN0cmluZyBIVE1M
SW1hZ2VFbGVtZW50Ojpsb25nRGVzYygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0
ZShsb25nZGVzY0F0dHIpOwotfQotCi12b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldExvbmdEZXNj
KGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGxvbmdkZXNjQXR0ciwg
dmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEltYWdlRWxlbWVudDo6c3JjKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKHNyY0F0dHIpKTsK
LX0KLQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRTcmMoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LXsKLSAgICBzZXRBdHRyaWJ1dGUoc3JjQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTElt
YWdlRWxlbWVudDo6dXNlTWFwKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHVz
ZW1hcEF0dHIpOwotfQotCi12b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldFVzZU1hcChjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh1c2VtYXBBdHRyLCB2YWx1ZSk7Ci19
Ci0KLWludCBIVE1MSW1hZ2VFbGVtZW50Ojp2c3BhY2UoKSBjb25zdAotewotICAgIC8vICMjIyBy
ZXR1cm4gYWN0dWFsIHZzcGFjZQotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodnNwYWNlQXR0ciku
dG9JbnQoKTsKLX0KLQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRWc3BhY2UoaW50IHZhbHVl
KQotewotICAgIHNldEF0dHJpYnV0ZSh2c3BhY2VBdHRyLCBTdHJpbmc6Om51bWJlcih2YWx1ZSkp
OwotfQotCi12b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldFdpZHRoKGludCB2YWx1ZSkKLXsKLSAg
ICBzZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCBTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwotfQotCi1p
bnQgSFRNTEltYWdlRWxlbWVudDo6eCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyT2JqZWN0ICpyID0g
cmVuZGVyZXIoKTsKLSAgICBpZiAoIXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIGludCB4LCB5
OwotICAgIHItPmFic29sdXRlUG9zaXRpb24oeCwgeSk7Ci0gICAgcmV0dXJuIHg7Ci19Ci0KLWlu
dCBIVE1MSW1hZ2VFbGVtZW50Ojp5KCkgY29uc3QKLXsKLSAgICBSZW5kZXJPYmplY3QgKnIgPSBy
ZW5kZXJlcigpOwotICAgIGlmICghcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaW50IHgsIHk7
Ci0gICAgci0+YWJzb2x1dGVQb3NpdGlvbih4LCB5KTsKLSAgICByZXR1cm4geTsKLX0KLQotYm9v
bCBIVE1MSW1hZ2VFbGVtZW50Ojpjb21wbGV0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW1h
Z2VMb2FkZXIuaW1hZ2VDb21wbGV0ZSgpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhU
TUxNYXBFbGVtZW50OjpIVE1MTWFwRWxlbWVudChEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVs
ZW1lbnQobWFwVGFnLCBkb2MpCi17Ci19Ci0KLUhUTUxNYXBFbGVtZW50Ojp+SFRNTE1hcEVsZW1l
bnQoKQotewotICAgIGRvY3VtZW50KCktPnJlbW92ZUltYWdlTWFwKHRoaXMpOwotfQotCi1ib29s
IEhUTUxNYXBFbGVtZW50OjpjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCkKLXsKLSAgICAv
LyBGSVhNRTogVGhpcyBzZWVtcyByZWFsbHkgb2RkLCBhbGxvd2luZyBvbmx5IGJsb2NrcyBpbnNp
ZGUgbWFwIGVsZW1lbnRzLgotICAgIHJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShhcmVhVGFn
KSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShzY3JpcHRUYWcpIHx8IGluQmxvY2tUYWdMaXN0KG5l
d0NoaWxkKTsKLX0KLQotYm9vbCBIVE1MTWFwRWxlbWVudDo6bWFwTW91c2VFdmVudChpbnQgeCwg
aW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgUmVuZGVyT2JqZWN0OjpOb2RlSW5mbyYgaW5m
bykKLXsKLSAgICBOb2RlICpub2RlID0gdGhpczsKLSAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT50
cmF2ZXJzZU5leHROb2RlKHRoaXMpKSkKLSAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYXJl
YVRhZykpCi0gICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVtZW50ICo+KG5v
ZGUpLT5tYXBNb3VzZUV2ZW50KHgsIHksIHdpZHRoLCBoZWlnaHQsIGluZm8pKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBIVE1MTWFw
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQotewot
ICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lID0gYXR0ci0+bmFtZSgpOwotICAgIGlm
IChhdHRyTmFtZSA9PSBpZEF0dHIgfHwgYXR0ck5hbWUgPT0gbmFtZUF0dHIpIHsKLSAgICAgICAg
RG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50KCk7Ci0gICAgICAgIGlmIChhdHRyTmFtZSA9PSBpZEF0
dHIpIHsKLSAgICAgICAgICAgIC8vIENhbGwgYmFzZSBjbGFzcyBzbyB0aGF0IGhhc0lEIGJpdCBn
ZXRzIHNldC4KLSAgICAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKLSAgICAgICAgICAgIGlmIChkb2MtPmh0bWxNb2RlKCkgIT0gRG9jdW1lbnQ6OlhIdG1s
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBkb2MtPnJlbW92
ZUltYWdlTWFwKHRoaXMpOwotICAgICAgICBtX25hbWUgPSBhdHRyLT52YWx1ZSgpOwotICAgICAg
ICBpZiAobV9uYW1lWzBdID09ICcjJykgewotICAgICAgICAgICAgU3RyaW5nIG1hcE5hbWUobV9u
YW1lLmRvbVN0cmluZygpLmNvcHkoKSk7Ci0gICAgICAgICAgICBtYXBOYW1lLnJlbW92ZSgwLCAx
KTsKLSAgICAgICAgICAgIG1fbmFtZSA9IG1hcE5hbWU7Ci0gICAgICAgIH0KLSAgICAgICAgZG9j
LT5hZGRJbWFnZU1hcCh0aGlzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi1QYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiBIVE1MTWFwRWxlbWVudDo6YXJlYXMoKQotewotICAgIHJldHVybiBuZXcgSFRNTENvbGxlY3Rp
b24odGhpcywgSFRNTENvbGxlY3Rpb246Ok1BUF9BUkVBUyk7Ci19Ci0KLVN0cmluZyBIVE1MTWFw
RWxlbWVudDo6bmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShuYW1lQXR0
cik7Ci19Ci0KLXZvaWQgSFRNTE1hcEVsZW1lbnQ6OnNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCiBIVE1MQXJlYUVsZW1lbnQ6OkhUTUxBcmVhRWxlbWVudChEb2N1bWVudCAq
ZG9jKQogICAgIDogSFRNTEFuY2hvckVsZW1lbnQoYXJlYVRhZywgZG9jKQorICAgICwgbV9jb29y
ZHMoMCkKKyAgICAsIG1fY29vcmRzTGVuKDApCisgICAgLCBtX2xhc3RTaXplKC0xLCAtMSkKKyAg
ICAsIG1fc2hhcGUoVW5rbm93bikKIHsKLSAgICBtX2Nvb3JkcyA9IDA7Ci0gICAgbV9jb29yZHNM
ZW4gPSAwOwotICAgIG1fc2hhcGUgPSBVbmtub3duOwotICAgIGxhc3RoID0gLTE7Ci0gICAgbGFz
dHcgPSAtMTsKIH0KIAogSFRNTEFyZWFFbGVtZW50Ojp+SFRNTEFyZWFFbGVtZW50KCkKQEAgLTU1
MiwxMiArNzAsMTEgQEAKICAgICAgICAgSFRNTEFuY2hvckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOwogfQogCi1ib29sIEhUTUxBcmVhRWxlbWVudDo6bWFwTW91c2VFdmVudChp
bnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgUmVuZGVyT2JqZWN0OjpOb2RlSW5m
byYgaW5mbykKK2Jvb2wgSFRNTEFyZWFFbGVtZW50OjptYXBNb3VzZUV2ZW50KGludCB4LCBpbnQg
eSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgUmVuZGVyT2JqZWN0OjpOb2RlSW5mbyYgaW5mbykKIHsK
LSAgICBpZiAod2lkdGggIT0gbGFzdHcgfHwgaGVpZ2h0ICE9IGxhc3RoKSB7Ci0gICAgICAgIHJl
Z2lvbiA9IGdldFJlZ2lvbih3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgbGFzdHcgPSB3aWR0aDsK
LSAgICAgICAgbGFzdGggPSBoZWlnaHQ7CisgICAgaWYgKG1fbGFzdFNpemUgIT0gc2l6ZSkgewor
ICAgICAgICByZWdpb24gPSBnZXRSZWdpb24oc2l6ZSk7CisgICAgICAgIG1fbGFzdFNpemUgPSBz
aXplOwogICAgIH0KIAogICAgIGlmICghcmVnaW9uLmNvbnRhaW5zKEludFBvaW50KHgsIHkpKSkK
QEAgLTU3MiwxNiArODksMTkgQEAKIHsKICAgICBpbnQgZHgsIGR5OwogICAgIG9iai0+YWJzb2x1
dGVQb3NpdGlvbihkeCwgZHkpOwotICAgIFBhdGggcCA9IGdldFJlZ2lvbihsYXN0dywgbGFzdGgp
OworICAgIFBhdGggcCA9IGdldFJlZ2lvbihtX2xhc3RTaXplKTsKICAgICBwLnRyYW5zbGF0ZShJ
bnRTaXplKGR4LCBkeSkpOwogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHAuYm91bmRpbmdS
ZWN0KCkpOwogfQogCi1QYXRoIEhUTUxBcmVhRWxlbWVudDo6Z2V0UmVnaW9uKGludCB3aWR0aCwg
aW50IGhlaWdodCkgY29uc3QKK1BhdGggSFRNTEFyZWFFbGVtZW50OjpnZXRSZWdpb24oY29uc3Qg
SW50U2l6ZSYgc2l6ZSkgY29uc3QKIHsKICAgICBpZiAoIW1fY29vcmRzKQogICAgICAgICByZXR1
cm4gUGF0aCgpOwogCisgICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGludCBoZWln
aHQgPSBzaXplLmhlaWdodCgpOworCiAgICAgLy8gSWYgZWxlbWVudCBvbWl0cyB0aGUgc2hhcGUg
YXR0cmlidXRlLCBzZWxlY3Qgc2hhcGUgYmFzZWQgb24gbnVtYmVyIG9mIGNvb3JkaW5hdGVzLgog
ICAgIFNoYXBlIHNoYXBlID0gbV9zaGFwZTsKICAgICBpZiAoc2hhcGUgPT0gVW5rbm93bikgewpA
QCAtNjA4LDggKzEyOCw3IEBACiAgICAgICAgICAgICBpZiAobV9jb29yZHNMZW4gPj0gMykgewog
ICAgICAgICAgICAgICAgIExlbmd0aCByYWRpdXMgPSBtX2Nvb3Jkc1syXTsKICAgICAgICAgICAg
ICAgICBpbnQgciA9IG1pbihyYWRpdXMuY2FsY01pblZhbHVlKHdpZHRoKSwgcmFkaXVzLmNhbGNN
aW5WYWx1ZShoZWlnaHQpKTsKLSAgICAgICAgICAgICAgICBwYXRoLmFkZEVsbGlwc2UoRmxvYXRS
ZWN0KG1fY29vcmRzWzBdLmNhbGNNaW5WYWx1ZSh3aWR0aCkgLSByLCBtX2Nvb3Jkc1sxXS5jYWxj
TWluVmFsdWUoaGVpZ2h0KSAtIHIsCi0gICAgICAgICAgICAgICAgICAgIDIgKiByLCAyICogcikp
OworICAgICAgICAgICAgICAgIHBhdGguYWRkRWxsaXBzZShGbG9hdFJlY3QobV9jb29yZHNbMF0u
Y2FsY01pblZhbHVlKHdpZHRoKSAtIHIsIG1fY29vcmRzWzFdLmNhbGNNaW5WYWx1ZShoZWlnaHQp
IC0gciwgMiAqIHIsIDIgKiByKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBSZWN0OgpJbmRleDogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDE0MzgyKQor
KysgaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDcgQEAKICNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIKICNpbmNsdWRlICJFdmVudE5hbWVz
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJodG1sX2ltYWdlaW1wbC5oIgorI2lu
Y2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNs
dWRlICJSZW5kZXJGbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKSW5kZXg6IGh0bWwv
SFRNTERvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxEb2N1bWVudC5jcHAJKHJl
dmlzaW9uIDE0MzgyKQorKysgaHRtbC9IVE1MRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MSw4ICs2MSw4IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJjc3NzdHlsZXNl
bGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgImh0bWxf
aW1hZ2VpbXBsLmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgorI2luY2x1ZGUgIkhUTUxF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnRGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiZG9tMl9ldmVudHNpbXBsLmgiCkluZGV4OiBodG1sL0hUTUxG
b3JtQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24u
Y3BwCShyZXZpc2lvbiAxNDM4MikKKysrIGh0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAiSFRNTEdlbmVyaWNGb3Jt
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgotI2luY2x1ZGUgImh0bWxf
aW1hZ2VpbXBsLmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBodG1sL0hUTUxDYW52YXNF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCShyZXZpc2lv
biAxNDM4MikKKysrIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjMsMTAgKzIzLDExIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEhUTUxfQ0FO
VkFTSU1QTF9ICi0jZGVmaW5lIEhUTUxfQ0FOVkFTSU1QTF9ICisjaWZuZGVmIEhUTUxDYW52YXNF
bGVtZW50X0gKKyNkZWZpbmUgSFRNTENhbnZhc0VsZW1lbnRfSAogCi0jaW5jbHVkZSAiaHRtbF9p
bWFnZWltcGwuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkludFNpemUu
aCIKIAogI2lmIF9fQVBQTEVfXwogLy8gRklYTUU6IE1hYy1zcGVjaWZpYyBwYXJ0cyBuZWVkIHRv
IG1vdmUgdG8gdGhlIHBsYXRmb3JtIGRpcmVjdG9yeS4KQEAgLTM4LDYgKzM5LDcgQEAKIAogY2xh
c3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOwogdHlwZWRlZiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDsKK2NsYXNzIEZsb2F0UmVjdDsKIAogY2xhc3Mg
SFRNTENhbnZhc0VsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGljOgpJbmRleDog
aHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MSW1hZ2VFbGVt
ZW50LmgJKHJldmlzaW9uIDE0MzgyKQorKysgaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDU1ICsyMiwyMCBAQAogICoKICAqLwogCi0jaWZuZGVmIEhUTUxfSU1B
R0VJTVBMX0gKLSNkZWZpbmUgSFRNTF9JTUFHRUlNUExfSAorI2lmbmRlZiBIVE1MSW1hZ2VFbGVt
ZW50X0gKKyNkZWZpbmUgSFRNTEltYWdlRWxlbWVudF9ICiAKLSNpbmNsdWRlICJDYWNoZWRJbWFn
ZS5oIgotI2luY2x1ZGUgIkhUTUxBbmNob3JFbGVtZW50LmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIK
LSNpbmNsdWRlICJQYXRoLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAi
SFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSFRN
TEltYWdlTG9hZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRNTENvbGxl
Y3Rpb247Ci1jbGFzcyBIVE1MRm9ybUVsZW1lbnQ7Ci1jbGFzcyBJbWFnZTsKLWNsYXNzIFN0cmlu
ZzsKLQotc3RydWN0IExlbmd0aDsKLQotY2xhc3MgSFRNTEltYWdlTG9hZGVyIDogcHVibGljIENh
Y2hlZE9iamVjdENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgSFRNTEltYWdlTG9hZGVyKEVsZW1lbnQq
KTsKLSAgICB2aXJ0dWFsIH5IVE1MSW1hZ2VMb2FkZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVGcm9tRWxlbWVudCgpOwotCi0gICAgdm9pZCBkaXNwYXRjaExvYWRFdmVudCgpOwotCi0g
ICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQotICAgIGJv
b2wgaW1hZ2VDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VDb21wbGV0ZTsgfQotICAg
IENhY2hlZEltYWdlKiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KLQotICAgIC8v
IENhY2hlZE9iamVjdENsaWVudCBBUEkKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQo
Q2FjaGVkT2JqZWN0Kik7Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIHNldExvYWRpbmdJbWFnZShD
YWNoZWRJbWFnZSopOwotCi1wcml2YXRlOgotICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKLSAgICBD
YWNoZWRJbWFnZSogbV9pbWFnZTsKLSAgICBib29sIG1fZmlyZWRMb2FkIDogMTsKLSAgICBib29s
IG1faW1hZ2VDb21wbGV0ZSA6IDE7Ci19OwotCiBjbGFzcyBIVE1MSW1hZ2VFbGVtZW50IDogcHVi
bGljIEhUTUxFbGVtZW50IHsKICAgICBmcmllbmQgY2xhc3MgSFRNTEZvcm1FbGVtZW50OwogcHVi
bGljOgogICAgIEhUTUxJbWFnZUVsZW1lbnQoRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0g
MCk7Ci0gICAgSFRNTEltYWdlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCopOworICAgIEhUTUxJbWFnZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50Kik7CiAgICAgfkhUTUxJbWFnZUVsZW1lbnQoKTsKIAogICAgIHZpcnR1YWwgSFRNTFRh
Z1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJp
ZGRlbjsgfQpAQCAtMTQ3LDg1ICsxMTIsNiBAQAogICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fY29t
cG9zaXRlT3BlcmF0b3I7CiB9OwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MQXJlYUVsZW1l
bnQgOiBwdWJsaWMgSFRNTEFuY2hvckVsZW1lbnQgewotcHVibGljOgotICAgIGVudW0gU2hhcGUg
eyBEZWZhdWx0LCBQb2x5LCBSZWN0LCBDaXJjbGUsIFVua25vd24gfTsKLQotICAgIEhUTUxBcmVh
RWxlbWVudChEb2N1bWVudCopOwotICAgIH5IVE1MQXJlYUVsZW1lbnQoKTsKLQotICAgIHZpcnR1
YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0
YXR1c0ZvcmJpZGRlbjsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQotCi0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSopOwotCi0gICAgYm9vbCBpc0RlZmF1bHQoKSBjb25zdCB7IHJldHVybiBtX3No
YXBlID09IERlZmF1bHQ7IH0KLQotICAgIGJvb2wgbWFwTW91c2VFdmVudChpbnQgeCwgaW50IHks
IGludCB3aWR0aCwgaW50IGhlaWdodCwgUmVuZGVyT2JqZWN0OjpOb2RlSW5mbyYgaW5mbyk7Ci0K
LSAgICB2aXJ0dWFsIEludFJlY3QgZ2V0UmVjdChSZW5kZXJPYmplY3QqKSBjb25zdDsKLQotICAg
IFN0cmluZyBhY2Nlc3NLZXkoKSBjb25zdDsKLSAgICB2b2lkIHNldEFjY2Vzc0tleShjb25zdCBT
dHJpbmcmKTsKLQotICAgIFN0cmluZyBhbHQoKSBjb25zdDsKLSAgICB2b2lkIHNldEFsdChjb25z
dCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBjb29yZHMoKSBjb25zdDsKLSAgICB2b2lkIHNldENv
b3Jkcyhjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBocmVmKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRIcmVmKGNvbnN0IFN0cmluZyYpOwotCi0gICAgYm9vbCBub0hyZWYoKSBjb25zdDsKLSAg
ICB2b2lkIHNldE5vSHJlZihib29sKTsKLQotICAgIFN0cmluZyBzaGFwZSgpIGNvbnN0OwotICAg
IHZvaWQgc2V0U2hhcGUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBpbnQgdGFiSW5kZXgoKSBjb25z
dDsKLSAgICB2b2lkIHNldFRhYkluZGV4KGludCk7Ci0KLSAgICBTdHJpbmcgdGFyZ2V0KCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRUYXJnZXQoY29uc3QgU3RyaW5nJik7Ci0KLXByb3RlY3RlZDoKLSAg
ICBQYXRoIGdldFJlZ2lvbihpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0OwotICAgIFBhdGgg
cmVnaW9uOwotICAgIExlbmd0aCogbV9jb29yZHM7Ci0gICAgaW50IG1fY29vcmRzTGVuOwotICAg
IGludCBsYXN0dywgbGFzdGg7Ci0gICAgU2hhcGUgbV9zaGFwZTsKLX07Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotY2xhc3MgSFRNTE1hcEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewot
cHVibGljOgotICAgIEhUTUxNYXBFbGVtZW50KERvY3VtZW50Kik7Ci0gICAgfkhUTUxNYXBFbGVt
ZW50KCk7Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1By
aW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQotICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChj
b25zdCBOb2RlKik7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGdldE5hbWUoKSBjb25zdCB7
IHJldHVybiBtX25hbWU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLQotICAgIGJvb2wgbWFwTW91c2VFdmVudChpbnQgeCwgaW50
IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgUmVuZGVyT2JqZWN0OjpOb2RlSW5mbyYpOwotCi0g
ICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gYXJlYXMoKTsKLQotICAgIFN0cmluZyBuYW1l
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpOwotCi1wcml2YXRlOgot
ICAgIEF0b21pY1N0cmluZyBtX25hbWU7Ci19OwotCiB9IC8vbmFtZXNwYWNlCiAKICNlbmRpZgpJ
bmRleDogaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTElt
YWdlTG9hZGVyLmNwcAkocmV2aXNpb24gMTQzODIpCisrKyBodG1sL0hUTUxJbWFnZUxvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDIwICsyMCwxNyBAQAogICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAogICogQm9z
dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KLQogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgImh0bWxfaW1hZ2VpbXBsLmgiCisjaW5jbHVkZSAiSFRNTEltYWdlTG9hZGVyLmgiCiAK
KyNpbmNsdWRlICJjc3NoZWxwZXIuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1
ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNp
bmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKLSNpbmNsdWRlICJjc3NoZWxwZXIuaCIKLSNpbmNs
dWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgot
I2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgotI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKIAogdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIApAQCAtNDMsNyArNDAsMTAgQEAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKIEhUTUxJbWFnZUxvYWRlcjo6SFRNTEltYWdlTG9hZGVyKEVsZW1lbnQqIGVsdCkKLSAg
ICA6IG1fZWxlbWVudChlbHQpLCBtX2ltYWdlKDApLCBtX2ZpcmVkTG9hZCh0cnVlKSwgbV9pbWFn
ZUNvbXBsZXRlKHRydWUpCisgICAgOiBtX2VsZW1lbnQoZWx0KQorICAgICwgbV9pbWFnZSgwKQor
ICAgICwgbV9maXJlZExvYWQodHJ1ZSkKKyAgICAsIG1faW1hZ2VDb21wbGV0ZSh0cnVlKQogewog
fQogCkBAIC0xMTYsNTk5ICsxMTYsNCBAQAogICAgICAgICByZW5kZXJlci0+c2V0Q2FjaGVkSW1h
Z2UobV9pbWFnZSk7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTEltYWdlRWxlbWVu
dDo6SFRNTEltYWdlRWxlbWVudChEb2N1bWVudCAqZG9jLCBIVE1MRm9ybUVsZW1lbnQgKmYpCi0g
ICAgOiBIVE1MRWxlbWVudChpbWdUYWcsIGRvYyksIG1faW1hZ2VMb2FkZXIodGhpcyksIGlzbWFw
KGZhbHNlKSwgbV9mb3JtKGYpCi0gICAgLCBtX2NvbXBvc2l0ZU9wZXJhdG9yKENvbXBvc2l0ZVNv
dXJjZU92ZXIpCi17Ci0gICAgaWYgKGYpCi0gICAgICAgIGYtPnJlZ2lzdGVySW1nRWxlbWVudCh0
aGlzKTsKLX0KLQotSFRNTEltYWdlRWxlbWVudDo6SFRNTEltYWdlRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnQodGFn
TmFtZSwgZG9jKSwgbV9pbWFnZUxvYWRlcih0aGlzKSwgaXNtYXAoZmFsc2UpLCBtX2Zvcm0oMCkK
LSAgICAsIG1fY29tcG9zaXRlT3BlcmF0b3IoQ29tcG9zaXRlU291cmNlT3ZlcikKLXsKLX0KLQot
SFRNTEltYWdlRWxlbWVudDo6fkhUTUxJbWFnZUVsZW1lbnQoKQotewotICAgIGlmIChtX2Zvcm0p
Ci0gICAgICAgIG1fZm9ybS0+cmVtb3ZlSW1nRWxlbWVudCh0aGlzKTsKLX0KLQotYm9vbCBIVE1M
SW1hZ2VFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBN
YXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAotewotICAgIGlmIChhdHRyTmFtZSA9
PSB3aWR0aEF0dHIgfHwKLSAgICAgICAgYXR0ck5hbWUgPT0gaGVpZ2h0QXR0ciB8fAotICAgICAg
ICBhdHRyTmFtZSA9PSB2c3BhY2VBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IGhzcGFjZUF0
dHIgfHwKLSAgICAgICAgYXR0ck5hbWUgPT0gdmFsaWduQXR0cikgewotICAgICAgICByZXN1bHQg
PSBlVW5pdmVyc2FsOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGlm
IChhdHRyTmFtZSA9PSBib3JkZXJBdHRyIHx8IGF0dHJOYW1lID09IGFsaWduQXR0cikgewotICAg
ICAgICByZXN1bHQgPSBlUmVwbGFjZWQ7IC8vIFNoYXJlZCB3aXRoIGVtYmVkIGFuZCBpZnJhbWUg
ZWxlbWVudHMuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSFRN
TEVsZW1lbnQ6Om1hcFRvRW50cnkoYXR0ck5hbWUsIHJlc3VsdCk7Ci19Ci0KLXZvaWQgSFRNTElt
YWdlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQot
ewotICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lID0gYXR0ci0+bmFtZSgpOwotICAg
IGlmIChhdHRyTmFtZSA9PSBhbHRBdHRyKSB7Ci0gICAgICAgIGlmIChyZW5kZXJlcigpKQotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihyZW5kZXJlcigpKS0+dXBkYXRlQWx0
VGV4dCgpOwotICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gc3JjQXR0cikKLSAgICAgICAgbV9p
bWFnZUxvYWRlci51cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IHdpZHRoQXR0cikKLSAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX1dJRFRILCBh
dHRyLT52YWx1ZSgpKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBoZWlnaHRBdHRyKQotICAg
ICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfSEVJR0hULCBhdHRyLT52YWx1ZSgpKTsK
LSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBib3JkZXJBdHRyKSB7Ci0gICAgICAgIC8vIGJvcmRl
cj0ibm9ib3JkZXIiIC0+IGJvcmRlcj0iMCIKLSAgICAgICAgaWYoYXR0ci0+dmFsdWUoKS50b0lu
dCgpKSB7Ci0gICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfQk9SREVSX1dJ
RFRILCBhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENT
U19QUk9QX0JPUkRFUl9UT1BfU1RZTEUsIENTU19WQUxfU09MSUQpOwotICAgICAgICAgICAgYWRk
Q1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX1JJR0hUX1NUWUxFLCBDU1NfVkFMX1NP
TElEKTsKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9C
T1RUT01fU1RZTEUsIENTU19WQUxfU09MSUQpOwotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHko
YXR0ciwgQ1NTX1BST1BfQk9SREVSX0xFRlRfU1RZTEUsIENTU19WQUxfU09MSUQpOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSB2c3BhY2VBdHRyKSB7Ci0gICAgICAgIGFk
ZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fVE9QLCBhdHRyLT52YWx1ZSgpKTsKLSAg
ICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX01BUkdJTl9CT1RUT00sIGF0dHItPnZh
bHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gaHNwYWNlQXR0cikgewotICAgICAg
ICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX0xFRlQsIGF0dHItPnZhbHVlKCkp
OwotICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX1JJR0hULCBhdHRy
LT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IGFsaWduQXR0cikKLSAgICAg
ICAgYWRkSFRNTEFsaWdubWVudChhdHRyKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSB2YWxp
Z25BdHRyKQotICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9WRVJUSUNBTF9B
TElHTiwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gdXNlbWFwQXR0
cikgewotICAgICAgICBpZiAoYXR0ci0+dmFsdWUoKS5kb21TdHJpbmcoKVswXSA9PSAnIycpCi0g
ICAgICAgICAgICB1c2VtYXAgPSBhdHRyLT52YWx1ZSgpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB1c2VtYXAgPSBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChwYXJzZVVSTChhdHRyLT52YWx1
ZSgpKSk7Ci0gICAgICAgIG1faXNMaW5rID0gIWF0dHItPmlzTnVsbCgpOwotICAgIH0gZWxzZSBp
ZiAoYXR0ck5hbWUgPT0gaXNtYXBBdHRyKQotICAgICAgICBpc21hcCA9IHRydWU7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gb25hYm9ydEF0dHIpCi0gICAgICAgIHNldEhUTUxFdmVudExpc3Rl
bmVyKGFib3J0RXZlbnQsIGF0dHIpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IG9ubG9hZEF0
dHIpCi0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGxvYWRFdmVudCwgYXR0cik7Ci0gICAg
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gY29tcG9zaXRlQXR0cikgewotICAgICAgICBpZiAoIXBhcnNl
Q29tcG9zaXRlT3BlcmF0b3IoYXR0ci0+dmFsdWUoKSwgbV9jb21wb3NpdGVPcGVyYXRvcikpCi0g
ICAgICAgICAgICBtX2NvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlcjsKLSAg
ICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IG5hbWVBdHRyKSB7Ci0gICAgICAgIFN0cmluZyBuZXdO
YW1lQXR0ciA9IGF0dHItPnZhbHVlKCk7Ci0gICAgICAgIGlmIChpbkRvY3VtZW50KCkgJiYgZG9j
dW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgSFRNTERvY3VtZW50KiBk
b2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihkb2N1bWVudCgpKTsKLSAgICAgICAgICAg
IGRvYy0+cmVtb3ZlTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAgICAgICAgICAgIGRvYy0+YWRk
TmFtZWRJdGVtKG5ld05hbWVBdHRyKTsKLSAgICAgICAgfQotICAgICAgICBvbGROYW1lQXR0ciA9
IG5ld05hbWVBdHRyOwotICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLVN0cmluZyBIVE1MSW1hZ2VFbGVtZW50OjphbHRUZXh0
KCkgY29uc3QKLXsKLSAgICAvLyBsZXRzIGZpZ3VyZSBvdXQgdGhlIGFsdCB0ZXh0Li4gbWFnaWMg
c3R1ZmYKLSAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8xOTk4L1JFQy1odG1sNDAtMTk5ODA0
MjQvYXBwZW5kaXgvbm90ZXMuaHRtbCNhbHRnZW4KLSAgICAvLyBhbHNvIGhlYXZpbHkgZGlzY3Vz
c2VkIGJ5IEhpeGllIG9uIGJ1Z3ppbGxhCi0gICAgU3RyaW5nIGFsdCA9IGdldEF0dHJpYnV0ZShh
bHRBdHRyKTsKLSAgICAvLyBmYWxsIGJhY2sgdG8gdGl0bGUgYXR0cmlidXRlCi0gICAgaWYgKGFs
dC5pc051bGwoKSkKLSAgICAgICAgYWx0ID0gZ2V0QXR0cmlidXRlKHRpdGxlQXR0cik7Ci0gICAg
cmV0dXJuIGFsdDsKLX0KLQotUmVuZGVyT2JqZWN0ICpIVE1MSW1hZ2VFbGVtZW50OjpjcmVhdGVS
ZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAgICAg
cmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlckltYWdlKHRoaXMpOwotfQotCi12b2lkIEhUTUxJbWFn
ZUVsZW1lbnQ6OmF0dGFjaCgpCi17Ci0gICAgSFRNTEVsZW1lbnQ6OmF0dGFjaCgpOwotCi0gICAg
aWYgKFJlbmRlckltYWdlKiBpbWFnZU9iaiA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4ocmVu
ZGVyZXIoKSkpCi0gICAgICAgIGltYWdlT2JqLT5zZXRDYWNoZWRJbWFnZShtX2ltYWdlTG9hZGVy
LmltYWdlKCkpOwotfQotCi12b2lkIEhUTUxJbWFnZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3Vt
ZW50KCkKLXsKLSAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jLT5p
c0hUTUxEb2N1bWVudCgpKQotICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihkb2Mp
LT5hZGROYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwotCi0gICAgSFRNTEVsZW1lbnQ6Omluc2VydGVk
SW50b0RvY3VtZW50KCk7Ci19Ci0KLXZvaWQgSFRNTEltYWdlRWxlbWVudDo6cmVtb3ZlZEZyb21E
b2N1bWVudCgpCi17Ci0gICAgRG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50KCk7Ci0gICAgaWYgKGRv
Yy0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4o
ZG9jKS0+cmVtb3ZlTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLQotICAgIEhUTUxFbGVtZW50Ojpy
ZW1vdmVkRnJvbURvY3VtZW50KCk7Ci19Ci0KLWludCBIVE1MSW1hZ2VFbGVtZW50Ojp3aWR0aChi
b29sIGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cykgY29uc3QKLXsKLSAgICBpZiAoIXJlbmRlcmVy
KCkpIHsKLSAgICAgICAgLy8gY2hlY2sgdGhlIGF0dHJpYnV0ZSBmaXJzdCBmb3IgYW4gZXhwbGlj
aXQgcGl4ZWwgdmFsdWUKLSAgICAgICAgYm9vbCBvazsKLSAgICAgICAgaW50IHdpZHRoID0gZ2V0
QXR0cmlidXRlKHdpZHRoQXR0cikudG9JbnQoJm9rKTsKLSAgICAgICAgaWYgKG9rKQotICAgICAg
ICAgICAgcmV0dXJuIHdpZHRoOwotICAgICAgICAKLSAgICAgICAgLy8gaWYgdGhlIGltYWdlIGlz
IGF2YWlsYWJsZSwgdXNlIGl0cyB3aWR0aAotICAgICAgICBpZiAobV9pbWFnZUxvYWRlci5pbWFn
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG1faW1hZ2VMb2FkZXIuaW1hZ2UoKS0+aW1hZ2VTaXpl
KCkud2lkdGgoKTsKLSAgICB9Ci0KLSAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsKLSAg
ICBpZiAoaWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKQotICAgICAgICBkb2MtPnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGVsc2UKLSAgICAgICAgZG9jLT51cGRh
dGVMYXlvdXQoKTsKLQotICAgIHJldHVybiByZW5kZXJlcigpID8gcmVuZGVyZXIoKS0+Y29udGVu
dFdpZHRoKCkgOiAwOwotfQotCi1pbnQgSFRNTEltYWdlRWxlbWVudDo6aGVpZ2h0KGJvb2wgaWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKSBjb25zdAotewotICAgIGlmICghcmVuZGVyZXIoKSkgewot
ICAgICAgICAvLyBjaGVjayB0aGUgYXR0cmlidXRlIGZpcnN0IGZvciBhbiBleHBsaWNpdCBwaXhl
bCB2YWx1ZQotICAgICAgICBib29sIG9rOwotICAgICAgICBpbnQgaGVpZ2h0ID0gZ2V0QXR0cmli
dXRlKGhlaWdodEF0dHIpLnRvSW50KCZvayk7Ci0gICAgICAgIGlmIChvaykKLSAgICAgICAgICAg
IHJldHVybiBoZWlnaHQ7Ci0gICAgICAgIAotICAgICAgICAvLyBpZiB0aGUgaW1hZ2UgaXMgYXZh
aWxhYmxlLCB1c2UgaXRzIGhlaWdodAotICAgICAgICBpZiAobV9pbWFnZUxvYWRlci5pbWFnZSgp
KQotICAgICAgICAgICAgcmV0dXJuIG1faW1hZ2VMb2FkZXIuaW1hZ2UoKS0+aW1hZ2VTaXplKCku
aGVpZ2h0KCk7ICAgICAgICAKLSAgICB9Ci0KLSAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQo
KTsKLSAgICBpZiAoaWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKQotICAgICAgICBkb2MtPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGVsc2UKLSAgICAgICAgZG9j
LT51cGRhdGVMYXlvdXQoKTsKLQotICAgIHJldHVybiByZW5kZXJlcigpID8gcmVuZGVyZXIoKS0+
Y29udGVudEhlaWdodCgpIDogMDsKLX0KLQotYm9vbCBIVE1MSW1hZ2VFbGVtZW50Ojppc1VSTEF0
dHJpYnV0ZShBdHRyaWJ1dGUgKmF0dHIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGF0dHItPm5hbWUo
KSA9PSBzcmNBdHRyIHx8IChhdHRyLT5uYW1lKCkgPT0gdXNlbWFwQXR0ciAmJiBhdHRyLT52YWx1
ZSgpLmRvbVN0cmluZygpWzBdICE9ICcjJyk7Ci19Ci0KLVN0cmluZyBIVE1MSW1hZ2VFbGVtZW50
OjpuYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKLX0K
LQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17
Ci0gICAgc2V0QXR0cmlidXRlKG5hbWVBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MSW1h
Z2VFbGVtZW50OjphbGlnbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbGln
bkF0dHIpOwotfQotCi12b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldEFsaWduKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFsdWUpOwotfQotCi1T
dHJpbmcgSFRNTEltYWdlRWxlbWVudDo6YWx0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKGFsdEF0dHIpOwotfQotCi12b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldEFsdChjb25z
dCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhbHRBdHRyLCB2YWx1ZSk7Ci19
Ci0KLWludCBIVE1MSW1hZ2VFbGVtZW50Ojpib3JkZXIoKSBjb25zdAotewotICAgIC8vICMjIyBy
ZXR1cm4gdmFsdWUgaW4gcGl4ZWxzCi0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShib3JkZXJBdHRy
KS50b0ludCgpOwotfQotCi12b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldEJvcmRlcihpbnQgdmFs
dWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGJvcmRlckF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVl
KSk7Ci19Ci0KLXZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0SGVpZ2h0KGludCB2YWx1ZSkKLXsK
LSAgICBzZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKLX0K
LQotaW50IEhUTUxJbWFnZUVsZW1lbnQ6OmhzcGFjZSgpIGNvbnN0Ci17Ci0gICAgLy8gIyMjIHJl
dHVybiBhY3R1YWwgdmFsdWUKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGhzcGFjZUF0dHIpLnRv
SW50KCk7Ci19Ci0KLXZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0SHNwYWNlKGludCB2YWx1ZSkK
LXsKLSAgICBzZXRBdHRyaWJ1dGUoaHNwYWNlQXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsK
LX0KLQotYm9vbCBIVE1MSW1hZ2VFbGVtZW50Ojppc01hcCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
ICFnZXRBdHRyaWJ1dGUoaXNtYXBBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MSW1hZ2VF
bGVtZW50OjpzZXRJc01hcChib29sIGlzTWFwKQotewotICAgIHNldEF0dHJpYnV0ZShpc21hcEF0
dHIsIGlzTWFwID8gIiIgOiAwKTsKLX0KLQotU3RyaW5nIEhUTUxJbWFnZUVsZW1lbnQ6OmxvbmdE
ZXNjKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGxvbmdkZXNjQXR0cik7Ci19
Ci0KLXZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0TG9uZ0Rlc2MoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobG9uZ2Rlc2NBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmlu
ZyBIVE1MSW1hZ2VFbGVtZW50OjpzcmMoKSBjb25zdAotewotICAgIHJldHVybiBkb2N1bWVudCgp
LT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoc3JjQXR0cikpOwotfQotCi12b2lkIEhUTUxJbWFn
ZUVsZW1lbnQ6OnNldFNyYyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0
ZShzcmNBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MSW1hZ2VFbGVtZW50Ojp1c2VNYXAo
KSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodXNlbWFwQXR0cik7Ci19Ci0KLXZv
aWQgSFRNTEltYWdlRWxlbWVudDo6c2V0VXNlTWFwKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0g
ICAgc2V0QXR0cmlidXRlKHVzZW1hcEF0dHIsIHZhbHVlKTsKLX0KLQotaW50IEhUTUxJbWFnZUVs
ZW1lbnQ6OnZzcGFjZSgpIGNvbnN0Ci17Ci0gICAgLy8gIyMjIHJldHVybiBhY3R1YWwgdnNwYWNl
Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh2c3BhY2VBdHRyKS50b0ludCgpOwotfQotCi12b2lk
IEhUTUxJbWFnZUVsZW1lbnQ6OnNldFZzcGFjZShpbnQgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmli
dXRlKHZzcGFjZUF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7Ci19Ci0KLXZvaWQgSFRNTElt
YWdlRWxlbWVudDo6c2V0V2lkdGgoaW50IHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh3aWR0
aEF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7Ci19Ci0KLWludCBIVE1MSW1hZ2VFbGVtZW50
Ojp4KCkgY29uc3QKLXsKLSAgICBSZW5kZXJPYmplY3QgKnIgPSByZW5kZXJlcigpOwotICAgIGlm
ICghcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaW50IHgsIHk7Ci0gICAgci0+YWJzb2x1dGVQ
b3NpdGlvbih4LCB5KTsKLSAgICByZXR1cm4geDsKLX0KLQotaW50IEhUTUxJbWFnZUVsZW1lbnQ6
OnkoKSBjb25zdAotewotICAgIFJlbmRlck9iamVjdCAqciA9IHJlbmRlcmVyKCk7Ci0gICAgaWYg
KCFyKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpbnQgeCwgeTsKLSAgICByLT5hYnNvbHV0ZVBv
c2l0aW9uKHgsIHkpOwotICAgIHJldHVybiB5OwotfQotCi1ib29sIEhUTUxJbWFnZUVsZW1lbnQ6
OmNvbXBsZXRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZUNvbXBs
ZXRlKCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTE1hcEVsZW1lbnQ6OkhUTUxN
YXBFbGVtZW50KERvY3VtZW50ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudChtYXBUYWcsIGRvYykK
LXsKLX0KLQotSFRNTE1hcEVsZW1lbnQ6On5IVE1MTWFwRWxlbWVudCgpCi17Ci0gICAgZG9jdW1l
bnQoKS0+cmVtb3ZlSW1hZ2VNYXAodGhpcyk7Ci19Ci0KLWJvb2wgSFRNTE1hcEVsZW1lbnQ6OmNo
ZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKQotewotICAgIC8vIEZJWE1FOiBUaGlzIHNlZW1z
IHJlYWxseSBvZGQsIGFsbG93aW5nIG9ubHkgYmxvY2tzIGluc2lkZSBtYXAgZWxlbWVudHMuCi0g
ICAgcmV0dXJuIG5ld0NoaWxkLT5oYXNUYWdOYW1lKGFyZWFUYWcpIHx8IG5ld0NoaWxkLT5oYXNU
YWdOYW1lKHNjcmlwdFRhZykgfHwgaW5CbG9ja1RhZ0xpc3QobmV3Q2hpbGQpOwotfQotCi1ib29s
IEhUTUxNYXBFbGVtZW50OjptYXBNb3VzZUV2ZW50KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBSZW5kZXJPYmplY3Q6Ok5vZGVJbmZvJiBpbmZvKQotewotICAgIE5vZGUgKm5v
ZGUgPSB0aGlzOwotICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUodGhp
cykpKQotICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShhcmVhVGFnKSkKLSAgICAgICAgICAg
IGlmIChzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnQgKj4obm9kZSktPm1hcE1vdXNlRXZlbnQo
eCwgeSwgd2lkdGgsIGhlaWdodCwgaW5mbykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEhUTUxNYXBFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUgPSBhdHRyLT5uYW1lKCk7Ci0gICAgaWYgKGF0dHJOYW1lID09IGlkQXR0
ciB8fCBhdHRyTmFtZSA9PSBuYW1lQXR0cikgewotICAgICAgICBEb2N1bWVudCogZG9jID0gZG9j
dW1lbnQoKTsKLSAgICAgICAgaWYgKGF0dHJOYW1lID09IGlkQXR0cikgewotICAgICAgICAgICAg
Ly8gQ2FsbCBiYXNlIGNsYXNzIHNvIHRoYXQgaGFzSUQgYml0IGdldHMgc2V0LgotICAgICAgICAg
ICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotICAgICAgICAgICAg
aWYgKGRvYy0+aHRtbE1vZGUoKSAhPSBEb2N1bWVudDo6WEh0bWwpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGRvYy0+cmVtb3ZlSW1hZ2VNYXAodGhpcyk7Ci0g
ICAgICAgIG1fbmFtZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgICAgIGlmIChtX25hbWVbMF0gPT0g
JyMnKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbWFwTmFtZShtX25hbWUuZG9tU3RyaW5nKCkuY29w
eSgpKTsKLSAgICAgICAgICAgIG1hcE5hbWUucmVtb3ZlKDAsIDEpOwotICAgICAgICAgICAgbV9u
YW1lID0gbWFwTmFtZTsKLSAgICAgICAgfQotICAgICAgICBkb2MtPmFkZEltYWdlTWFwKHRoaXMp
OwotICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7Ci19Ci0KLVBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IEhUTUxNYXBFbGVtZW50Ojph
cmVhcygpCi17Ci0gICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVj
dGlvbjo6TUFQX0FSRUFTKTsKLX0KLQotU3RyaW5nIEhUTUxNYXBFbGVtZW50OjpuYW1lKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKLX0KLQotdm9pZCBIVE1M
TWFwRWxlbWVudDo6c2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJp
YnV0ZShuYW1lQXR0ciwgdmFsdWUpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxB
cmVhRWxlbWVudDo6SFRNTEFyZWFFbGVtZW50KERvY3VtZW50ICpkb2MpCi0gICAgOiBIVE1MQW5j
aG9yRWxlbWVudChhcmVhVGFnLCBkb2MpCi17Ci0gICAgbV9jb29yZHMgPSAwOwotICAgIG1fY29v
cmRzTGVuID0gMDsKLSAgICBtX3NoYXBlID0gVW5rbm93bjsKLSAgICBsYXN0aCA9IC0xOwotICAg
IGxhc3R3ID0gLTE7Ci19Ci0KLUhUTUxBcmVhRWxlbWVudDo6fkhUTUxBcmVhRWxlbWVudCgpCi17
Ci0gICAgZGVsZXRlIFtdIG1fY29vcmRzOwotfQotCi12b2lkIEhUTUxBcmVhRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQotewotICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gc2hhcGVBdHRyKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShh
dHRyLT52YWx1ZSgpLCAiZGVmYXVsdCIpKQotICAgICAgICAgICAgbV9zaGFwZSA9IERlZmF1bHQ7
Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJjaXJj
bGUiKSkKLSAgICAgICAgICAgIG1fc2hhcGUgPSBDaXJjbGU7Ci0gICAgICAgIGVsc2UgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJwb2x5IikpCi0gICAgICAgICAgICBtX3No
YXBlID0gUG9seTsKLSAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFs
dWUoKSwgInJlY3QiKSkKLSAgICAgICAgICAgIG1fc2hhcGUgPSBSZWN0OwotICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IGNvb3Jkc0F0dHIpIHsKLSAgICAgICAgZGVsZXRlIFtdIG1fY29v
cmRzOwotICAgICAgICBtX2Nvb3JkcyA9IGF0dHItPnZhbHVlKCkudG9Db29yZHNBcnJheShtX2Nv
b3Jkc0xlbik7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdGFyZ2V0QXR0cikgewot
ICAgICAgICBtX2hhc1RhcmdldCA9ICFhdHRyLT5pc051bGwoKTsKLSAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBhbHRBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBhY2Nlc3NrZXlBdHRyKSB7
Ci0gICAgICAgIC8vIERvIG5vdGhpbmcuCi0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxBbmNob3JF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQotYm9vbCBIVE1MQXJlYUVs
ZW1lbnQ6Om1hcE1vdXNlRXZlbnQoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQs
IFJlbmRlck9iamVjdDo6Tm9kZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKHdpZHRoICE9IGxhc3R3
IHx8IGhlaWdodCAhPSBsYXN0aCkgewotICAgICAgICByZWdpb24gPSBnZXRSZWdpb24od2lkdGgs
IGhlaWdodCk7Ci0gICAgICAgIGxhc3R3ID0gd2lkdGg7Ci0gICAgICAgIGxhc3RoID0gaGVpZ2h0
OwotICAgIH0KLQotICAgIGlmICghcmVnaW9uLmNvbnRhaW5zKEludFBvaW50KHgsIHkpKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGluZm8uc2V0SW5uZXJOb2RlKHRoaXMpOwot
ICAgIGluZm8uc2V0VVJMRWxlbWVudCh0aGlzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSW50
UmVjdCBIVE1MQXJlYUVsZW1lbnQ6OmdldFJlY3QoUmVuZGVyT2JqZWN0KiBvYmopIGNvbnN0Ci17
Ci0gICAgaW50IGR4LCBkeTsKLSAgICBvYmotPmFic29sdXRlUG9zaXRpb24oZHgsIGR5KTsKLSAg
ICBQYXRoIHAgPSBnZXRSZWdpb24obGFzdHcsIGxhc3RoKTsKLSAgICBwLnRyYW5zbGF0ZShJbnRT
aXplKGR4LCBkeSkpOwotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHAuYm91bmRpbmdSZWN0
KCkpOwotfQotCi1QYXRoIEhUTUxBcmVhRWxlbWVudDo6Z2V0UmVnaW9uKGludCB3aWR0aCwgaW50
IGhlaWdodCkgY29uc3QKLXsKLSAgICBpZiAoIW1fY29vcmRzKQotICAgICAgICByZXR1cm4gUGF0
aCgpOwotCi0gICAgLy8gSWYgZWxlbWVudCBvbWl0cyB0aGUgc2hhcGUgYXR0cmlidXRlLCBzZWxl
Y3Qgc2hhcGUgYmFzZWQgb24gbnVtYmVyIG9mIGNvb3JkaW5hdGVzLgotICAgIFNoYXBlIHNoYXBl
ID0gbV9zaGFwZTsKLSAgICBpZiAoc2hhcGUgPT0gVW5rbm93bikgewotICAgICAgICBpZiAobV9j
b29yZHNMZW4gPT0gMykKLSAgICAgICAgICAgIHNoYXBlID0gQ2lyY2xlOwotICAgICAgICBlbHNl
IGlmIChtX2Nvb3Jkc0xlbiA9PSA0KQotICAgICAgICAgICAgc2hhcGUgPSBSZWN0OwotICAgICAg
ICBlbHNlIGlmIChtX2Nvb3Jkc0xlbiA+PSA2KQotICAgICAgICAgICAgc2hhcGUgPSBQb2x5Owot
ICAgIH0KLQotICAgIFBhdGggcGF0aDsKLSAgICBzd2l0Y2ggKHNoYXBlKSB7Ci0gICAgICAgIGNh
c2UgUG9seToKLSAgICAgICAgICAgIGlmIChtX2Nvb3Jkc0xlbiA+PSA2KSB7Ci0gICAgICAgICAg
ICAgICAgaW50IG51bVBvaW50cyA9IG1fY29vcmRzTGVuIC8gMjsKLSAgICAgICAgICAgICAgICBw
YXRoLm1vdmVUbyhGbG9hdFBvaW50KG1fY29vcmRzWzBdLmNhbGNNaW5WYWx1ZSh3aWR0aCksIG1f
Y29vcmRzWzFdLmNhbGNNaW5WYWx1ZShoZWlnaHQpKSk7Ci0gICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDE7IGkgPCBudW1Qb2ludHM7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgcGF0aC5h
ZGRMaW5lVG8oRmxvYXRQb2ludChtX2Nvb3Jkc1tpICogMl0uY2FsY01pblZhbHVlKHdpZHRoKSwg
bV9jb29yZHNbaSAqIDIgKyAxXS5jYWxjTWluVmFsdWUoaGVpZ2h0KSkpOwotICAgICAgICAgICAg
ICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDaXJjbGU6Ci0gICAgICAgICAgICBpZiAobV9jb29yZHNMZW4gPj0g
MykgewotICAgICAgICAgICAgICAgIExlbmd0aCByYWRpdXMgPSBtX2Nvb3Jkc1syXTsKLSAgICAg
ICAgICAgICAgICBpbnQgciA9IG1pbihyYWRpdXMuY2FsY01pblZhbHVlKHdpZHRoKSwgcmFkaXVz
LmNhbGNNaW5WYWx1ZShoZWlnaHQpKTsKLSAgICAgICAgICAgICAgICBwYXRoLmFkZEVsbGlwc2Uo
RmxvYXRSZWN0KG1fY29vcmRzWzBdLmNhbGNNaW5WYWx1ZSh3aWR0aCkgLSByLCBtX2Nvb3Jkc1sx
XS5jYWxjTWluVmFsdWUoaGVpZ2h0KSAtIHIsCi0gICAgICAgICAgICAgICAgICAgIDIgKiByLCAy
ICogcikpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
UmVjdDoKLSAgICAgICAgICAgIGlmIChtX2Nvb3Jkc0xlbiA+PSA0KSB7Ci0gICAgICAgICAgICAg
ICAgaW50IHgwID0gbV9jb29yZHNbMF0uY2FsY01pblZhbHVlKHdpZHRoKTsKLSAgICAgICAgICAg
ICAgICBpbnQgeTAgPSBtX2Nvb3Jkc1sxXS5jYWxjTWluVmFsdWUoaGVpZ2h0KTsKLSAgICAgICAg
ICAgICAgICBpbnQgeDEgPSBtX2Nvb3Jkc1syXS5jYWxjTWluVmFsdWUod2lkdGgpOwotICAgICAg
ICAgICAgICAgIGludCB5MSA9IG1fY29vcmRzWzNdLmNhbGNNaW5WYWx1ZShoZWlnaHQpOwotICAg
ICAgICAgICAgICAgIHBhdGguYWRkUmVjdChGbG9hdFJlY3QoeDAsIHkwLCB4MSAtIHgwLCB5MSAt
IHkwKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBE
ZWZhdWx0OgotICAgICAgICAgICAgcGF0aC5hZGRSZWN0KEZsb2F0UmVjdCgwLCAwLCB3aWR0aCwg
aGVpZ2h0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVbmtub3duOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhdGg7Ci19Ci0KLVN0cmluZyBI
VE1MQXJlYUVsZW1lbnQ6OmFjY2Vzc0tleSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJp
YnV0ZShhY2Nlc3NrZXlBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldEFjY2Vz
c0tleShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhY2Nlc3NrZXlB
dHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MQXJlYUVsZW1lbnQ6OmFsdCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbHRBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXJlYUVs
ZW1lbnQ6OnNldEFsdChjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShh
bHRBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MQXJlYUVsZW1lbnQ6OmNvb3JkcygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjb29yZHNBdHRyKTsKLX0KLQotdm9pZCBI
VE1MQXJlYUVsZW1lbnQ6OnNldENvb3Jkcyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNl
dEF0dHJpYnV0ZShjb29yZHNBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MQXJlYUVsZW1l
bnQ6OmhyZWYoKSBjb25zdAotewotICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChn
ZXRBdHRyaWJ1dGUoaHJlZkF0dHIpKTsKLX0KLQotdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldEhy
ZWYoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoaHJlZkF0dHIsIHZh
bHVlKTsKLX0KLQotYm9vbCBIVE1MQXJlYUVsZW1lbnQ6Om5vSHJlZigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuICFnZXRBdHRyaWJ1dGUobm9ocmVmQXR0cikuaXNOdWxsKCk7Ci19Ci0KLXZvaWQgSFRN
TEFyZWFFbGVtZW50OjpzZXROb0hyZWYoYm9vbCBub0hyZWYpCi17Ci0gICAgc2V0QXR0cmlidXRl
KG5vaHJlZkF0dHIsIG5vSHJlZiA/ICIiIDogMCk7Ci19Ci0KLVN0cmluZyBIVE1MQXJlYUVsZW1l
bnQ6OnNoYXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHNoYXBlQXR0cik7
Ci19Ci0KLXZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXRTaGFwZShjb25zdCBTdHJpbmcmIHZhbHVl
KQotewotICAgIHNldEF0dHJpYnV0ZShzaGFwZUF0dHIsIHZhbHVlKTsKLX0KLQotaW50IEhUTUxB
cmVhRWxlbWVudDo6dGFiSW5kZXgoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUo
dGFiaW5kZXhBdHRyKS50b0ludCgpOwotfQotCi12b2lkIEhUTUxBcmVhRWxlbWVudDo6c2V0VGFi
SW5kZXgoaW50IHRhYkluZGV4KQotewotICAgIHNldEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIsIFN0
cmluZzo6bnVtYmVyKHRhYkluZGV4KSk7Ci19Ci0KLVN0cmluZyBIVE1MQXJlYUVsZW1lbnQ6OnRh
cmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0YXJnZXRBdHRyKTsKLX0K
LQotdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldFRhcmdldChjb25zdCBTdHJpbmcmIHZhbHVlKQot
ewotICAgIHNldEF0dHJpYnV0ZSh0YXJnZXRBdHRyLCB2YWx1ZSk7Ci19Ci0KIH0KSW5kZXg6IGh0
bWwvSFRNTEVsZW1lbnRGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxFbGVtZW50
RmFjdG9yeS5jcHAJKHJldmlzaW9uIDE0MzkwKQorKysgaHRtbC9IVE1MRWxlbWVudEZhY3Rvcnku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSFRNTEVsZW1lbnRGYWN0b3J5LmgiCiAKKyNpbmNsdWRlICJIVE1MQW5jaG9y
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxBcHBsZXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEJhc2VGb250RWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxCYXNlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxCbG9ja3F1b3RlRWxlbWVudC5o
IgpAQCAtNDUsMTEgKzQ3LDEzIEBACiAjaW5jbHVkZSAiSFRNTEhSRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJc0luZGV4RWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxMYWJlbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTGVnZW5k
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxMSUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTGlu
a0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTWFwRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxN
YXJxdWVlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZW51RWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxNZXRhRWxlbWVudC5oIgpJbmRleDogaHRtbC9odG1sX2ltYWdlaW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGh0bWwvaHRtbF9pbWFnZWltcGwuaAkocmV2aXNpb24gMTQzODIpCisrKyBodG1sL2h0
bWxfaW1hZ2VpbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjMxICswLDAgQEAKLS8qCi0gKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgot
ICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAg
ICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBIVE1MX0lNQUdFSU1Q
TF9ICi0jZGVmaW5lIEhUTUxfSU1BR0VJTVBMX0gKLQotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgi
Ci0jaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2lu
Y2x1ZGUgIlBhdGguaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBIVE1MQ29sbGVjdGlvbjsKLWNsYXNzIEhUTUxGb3JtRWxlbWVudDsK
LWNsYXNzIEltYWdlOwotY2xhc3MgU3RyaW5nOwotCi1zdHJ1Y3QgTGVuZ3RoOwotCi1jbGFzcyBI
VE1MSW1hZ2VMb2FkZXIgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0Q2xpZW50IHsKLXB1YmxpYzoKLSAg
ICBIVE1MSW1hZ2VMb2FkZXIoRWxlbWVudCopOwotICAgIHZpcnR1YWwgfkhUTUxJbWFnZUxvYWRl
cigpOwotCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7Ci0KLSAgICB2b2lk
IGRpc3BhdGNoTG9hZEV2ZW50KCk7Ci0KLSAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9lbGVtZW50OyB9Ci0gICAgYm9vbCBpbWFnZUNvbXBsZXRlKCkgY29uc3QgeyByZXR1
cm4gbV9pbWFnZUNvbXBsZXRlOyB9Ci0gICAgQ2FjaGVkSW1hZ2UqIGltYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbWFnZTsgfQotCi0gICAgLy8gQ2FjaGVkT2JqZWN0Q2xpZW50IEFQSQotICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRPYmplY3QqKTsKLQotcHJvdGVjdGVkOgot
ICAgIHZvaWQgc2V0TG9hZGluZ0ltYWdlKENhY2hlZEltYWdlKik7Ci0KLXByaXZhdGU6Ci0gICAg
RWxlbWVudCogbV9lbGVtZW50OwotICAgIENhY2hlZEltYWdlKiBtX2ltYWdlOwotICAgIGJvb2wg
bV9maXJlZExvYWQgOiAxOwotICAgIGJvb2wgbV9pbWFnZUNvbXBsZXRlIDogMTsKLX07Ci0KLWNs
YXNzIEhUTUxJbWFnZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewotICAgIGZyaWVuZCBj
bGFzcyBIVE1MRm9ybUVsZW1lbnQ7Ci1wdWJsaWM6Ci0gICAgSFRNTEltYWdlRWxlbWVudChEb2N1
bWVudCosIEhUTUxGb3JtRWxlbWVudCogPSAwKTsKLSAgICBIVE1MSW1hZ2VFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7Ci0gICAgfkhUTUxJbWFnZUVsZW1l
bnQoKTsKLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1By
aW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQotCi0gICAgdmlydHVhbCBib29sIG1hcFRvRW50
cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiBy
ZXN1bHQpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKLSAgICB2aXJ0dWFs
IFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSop
OwotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0KLSAgICBpbnQgd2lkdGgoYm9vbCBpZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMgPSBmYWxzZSkgY29uc3Q7Ci0gICAgaW50IGhlaWdodChib29sIGln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cyA9IGZhbHNlKSBjb25zdDsKLQotICAgIGJvb2wgaXNTZXJ2
ZXJNYXAoKSBjb25zdCB7IHJldHVybiBpc21hcCAmJiB1c2VtYXAuaXNFbXB0eSgpOyB9Ci0KLSAg
ICBTdHJpbmcgYWx0VGV4dCgpIGNvbnN0OwotCi0gICAgU3RyaW5nIGltYWdlTWFwKCkgY29uc3Qg
eyByZXR1cm4gdXNlbWFwOyB9Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRl
KEF0dHJpYnV0ZSopIGNvbnN0OwotCi0gICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3Bl
cmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0ZU9wZXJhdG9yOyB9Ci0KLSAgICBDYWNo
ZWRJbWFnZSogY2FjaGVkSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlTG9hZGVyLmltYWdl
KCk7IH0KLSAgICAKLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TmFtZShj
b25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBhbGlnbigpIGNvbnN0OwotICAgIHZvaWQgc2V0
QWxpZ24oY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgYWx0KCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRBbHQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBpbnQgYm9yZGVyKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRCb3JkZXIoaW50KTsKLQotICAgIHZvaWQgc2V0SGVpZ2h0KGludCk7Ci0KLSAgICBp
bnQgaHNwYWNlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIc3BhY2UoaW50KTsKLQotICAgIGJvb2wg
aXNNYXAoKSBjb25zdDsKLSAgICB2b2lkIHNldElzTWFwKGJvb2wpOwotCi0gICAgU3RyaW5nIGxv
bmdEZXNjKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRMb25nRGVzYyhjb25zdCBTdHJpbmcmKTsKLQot
ICAgIFN0cmluZyBzcmMoKSBjb25zdDsKLSAgICB2b2lkIHNldFNyYyhjb25zdCBTdHJpbmcmKTsK
LQotICAgIFN0cmluZyB1c2VNYXAoKSBjb25zdDsKLSAgICB2b2lkIHNldFVzZU1hcChjb25zdCBT
dHJpbmcmKTsKLQotICAgIGludCB2c3BhY2UoKSBjb25zdDsKLSAgICB2b2lkIHNldFZzcGFjZShp
bnQpOwotCi0gICAgdm9pZCBzZXRXaWR0aChpbnQpOwotCi0gICAgaW50IHgoKSBjb25zdDsKLSAg
ICBpbnQgeSgpIGNvbnN0OwotCi0gICAgYm9vbCBjb21wbGV0ZSgpIGNvbnN0OwotCi1wcm90ZWN0
ZWQ6Ci0gICAgSFRNTEltYWdlTG9hZGVyIG1faW1hZ2VMb2FkZXI7Ci0gICAgU3RyaW5nIHVzZW1h
cDsKLSAgICBib29sIGlzbWFwOwotICAgIEhUTUxGb3JtRWxlbWVudCogbV9mb3JtOwotICAgIFN0
cmluZyBvbGROYW1lQXR0cjsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBtX2NvbXBvc2l0ZU9wZXJh
dG9yOwotfTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTEFyZWFFbGVtZW50IDogcHVibGlj
IEhUTUxBbmNob3JFbGVtZW50IHsKLXB1YmxpYzoKLSAgICBlbnVtIFNoYXBlIHsgRGVmYXVsdCwg
UG9seSwgUmVjdCwgQ2lyY2xlLCBVbmtub3duIH07Ci0KLSAgICBIVE1MQXJlYUVsZW1lbnQoRG9j
dW1lbnQqKTsKLSAgICB+SFRNTEFyZWFFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdT
dGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRk
ZW47IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
LQotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUq
KTsKLQotICAgIGJvb2wgaXNEZWZhdWx0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZSA9PSBEZWZh
dWx0OyB9Ci0KLSAgICBib29sIG1hcE1vdXNlRXZlbnQoaW50IHgsIGludCB5LCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIFJlbmRlck9iamVjdDo6Tm9kZUluZm8mIGluZm8pOwotCi0gICAgdmlydHVh
bCBJbnRSZWN0IGdldFJlY3QoUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0KLSAgICBTdHJpbmcgYWNj
ZXNzS2V5KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBY2Nlc3NLZXkoY29uc3QgU3RyaW5nJik7Ci0K
LSAgICBTdHJpbmcgYWx0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbHQoY29uc3QgU3RyaW5nJik7
Ci0KLSAgICBTdHJpbmcgY29vcmRzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb29yZHMoY29uc3Qg
U3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgaHJlZigpIGNvbnN0OwotICAgIHZvaWQgc2V0SHJlZihj
b25zdCBTdHJpbmcmKTsKLQotICAgIGJvb2wgbm9IcmVmKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRO
b0hyZWYoYm9vbCk7Ci0KLSAgICBTdHJpbmcgc2hhcGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFNo
YXBlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgaW50IHRhYkluZGV4KCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRUYWJJbmRleChpbnQpOwotCi0gICAgU3RyaW5nIHRhcmdldCgpIGNvbnN0OwotICAgIHZv
aWQgc2V0VGFyZ2V0KGNvbnN0IFN0cmluZyYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgUGF0aCBnZXRS
ZWdpb24oaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKLSAgICBQYXRoIHJlZ2lvbjsKLSAg
ICBMZW5ndGgqIG1fY29vcmRzOwotICAgIGludCBtX2Nvb3Jkc0xlbjsKLSAgICBpbnQgbGFzdHcs
IGxhc3RoOwotICAgIFNoYXBlIG1fc2hhcGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LWNsYXNzIEhUTUxNYXBFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKLXB1YmxpYzoKLSAg
ICBIVE1MTWFwRWxlbWVudChEb2N1bWVudCopOwotICAgIH5IVE1MTWFwRWxlbWVudCgpOwotCi0g
ICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1
cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNv
bnN0IHsgcmV0dXJuIDE7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSop
OwotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9u
YW1lOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlKik7Ci0KLSAgICBib29sIG1hcE1vdXNlRXZlbnQoaW50IHgsIGludCB5LCBpbnQgd2lk
dGgsIGludCBoZWlnaHQsIFJlbmRlck9iamVjdDo6Tm9kZUluZm8mKTsKLQotICAgIFBhc3NSZWZQ
dHI8SFRNTENvbGxlY3Rpb24+IGFyZWFzKCk7Ci0KLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmKTsKLQotcHJpdmF0ZToKLSAgICBBdG9taWNT
dHJpbmcgbV9uYW1lOwotfTsKLQotfSAvL25hbWVzcGFjZQotCi0jZW5kaWYKSW5kZXg6IGh0bWwv
SFRNTEltYWdlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MSW1hZ2VMb2FkZXIuaAko
cmV2aXNpb24gMTQzODIpCisrKyBodG1sL0hUTUxJbWFnZUxvYWRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiwyMyArMjIsMTQgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBIVE1MX0lNQUdFSU1QTF9I
Ci0jZGVmaW5lIEhUTUxfSU1BR0VJTVBMX0gKKyNpZm5kZWYgSFRNTEltYWdlTG9hZGVyX0gKKyNk
ZWZpbmUgSFRNTEltYWdlTG9hZGVyX0gKIAotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5j
bHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUg
IlBhdGguaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJDYWNoZWRPYmpl
Y3RDbGllbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBIVE1MQ29sbGVjdGlv
bjsKLWNsYXNzIEhUTUxGb3JtRWxlbWVudDsKLWNsYXNzIEltYWdlOwotY2xhc3MgU3RyaW5nOwot
Ci1zdHJ1Y3QgTGVuZ3RoOworY2xhc3MgRWxlbWVudDsKIAogY2xhc3MgSFRNTEltYWdlTG9hZGVy
IDogcHVibGljIENhY2hlZE9iamVjdENsaWVudCB7CiBwdWJsaWM6CkBAIC02NiwxNjYgKzU3LDYg
QEAKICAgICBib29sIG1faW1hZ2VDb21wbGV0ZSA6IDE7CiB9OwogCi1jbGFzcyBIVE1MSW1hZ2VF
bGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKLSAgICBmcmllbmQgY2xhc3MgSFRNTEZvcm1F
bGVtZW50OwotcHVibGljOgotICAgIEhUTUxJbWFnZUVsZW1lbnQoRG9jdW1lbnQqLCBIVE1MRm9y
bUVsZW1lbnQqID0gMCk7Ci0gICAgSFRNTEltYWdlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCopOwotICAgIH5IVE1MSW1hZ2VFbGVtZW50KCk7Ci0KLSAgICB2
aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBU
YWdTdGF0dXNGb3JiaWRkZW47IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsK
LSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0gICAgdmlydHVhbCBSZW5kZXJPYmplY3Qq
IGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKLSAgICB2aXJ0dWFs
IHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZy
b21Eb2N1bWVudCgpOwotCi0gICAgaW50IHdpZHRoKGJvb2wgaWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzID0gZmFsc2UpIGNvbnN0OwotICAgIGludCBoZWlnaHQoYm9vbCBpZ25vcmVQZW5kaW5nU3R5
bGVzaGVldHMgPSBmYWxzZSkgY29uc3Q7Ci0KLSAgICBib29sIGlzU2VydmVyTWFwKCkgY29uc3Qg
eyByZXR1cm4gaXNtYXAgJiYgdXNlbWFwLmlzRW1wdHkoKTsgfQotCi0gICAgU3RyaW5nIGFsdFRl
eHQoKSBjb25zdDsKLQotICAgIFN0cmluZyBpbWFnZU1hcCgpIGNvbnN0IHsgcmV0dXJuIHVzZW1h
cDsgfQotICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBj
b25zdDsKLQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9jb21wb3NpdGVPcGVyYXRvcjsgfQotCi0gICAgQ2FjaGVkSW1hZ2UqIGNhY2hl
ZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgpOyB9Ci0gICAgCi0g
ICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJik7
Ci0KLSAgICBTdHJpbmcgYWxpZ24oKSBjb25zdDsKLSAgICB2b2lkIHNldEFsaWduKGNvbnN0IFN0
cmluZyYpOwotCi0gICAgU3RyaW5nIGFsdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0QWx0KGNvbnN0
IFN0cmluZyYpOwotCi0gICAgaW50IGJvcmRlcigpIGNvbnN0OwotICAgIHZvaWQgc2V0Qm9yZGVy
KGludCk7Ci0KLSAgICB2b2lkIHNldEhlaWdodChpbnQpOwotCi0gICAgaW50IGhzcGFjZSgpIGNv
bnN0OwotICAgIHZvaWQgc2V0SHNwYWNlKGludCk7Ci0KLSAgICBib29sIGlzTWFwKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRJc01hcChib29sKTsKLQotICAgIFN0cmluZyBsb25nRGVzYygpIGNvbnN0
OwotICAgIHZvaWQgc2V0TG9uZ0Rlc2MoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgc3Jj
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTcmMoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcg
dXNlTWFwKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRVc2VNYXAoY29uc3QgU3RyaW5nJik7Ci0KLSAg
ICBpbnQgdnNwYWNlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRWc3BhY2UoaW50KTsKLQotICAgIHZv
aWQgc2V0V2lkdGgoaW50KTsKLQotICAgIGludCB4KCkgY29uc3Q7Ci0gICAgaW50IHkoKSBjb25z
dDsKLQotICAgIGJvb2wgY29tcGxldGUoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIEhUTUxJ
bWFnZUxvYWRlciBtX2ltYWdlTG9hZGVyOwotICAgIFN0cmluZyB1c2VtYXA7Ci0gICAgYm9vbCBp
c21hcDsKLSAgICBIVE1MRm9ybUVsZW1lbnQqIG1fZm9ybTsKLSAgICBTdHJpbmcgb2xkTmFtZUF0
dHI7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9jb21wb3NpdGVPcGVyYXRvcjsKLX07Ci0KLS8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxBcmVhRWxlbWVudCA6IHB1YmxpYyBIVE1MQW5jaG9yRWxl
bWVudCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBTaGFwZSB7IERlZmF1bHQsIFBvbHksIFJlY3QsIENp
cmNsZSwgVW5rbm93biB9OwotCi0gICAgSFRNTEFyZWFFbGVtZW50KERvY3VtZW50Kik7Ci0gICAg
fkhUTUxBcmVhRWxlbWVudCgpOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9Ci0gICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICBib29s
IGlzRGVmYXVsdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUgPT0gRGVmYXVsdDsgfQotCi0gICAg
Ym9vbCBtYXBNb3VzZUV2ZW50KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBS
ZW5kZXJPYmplY3Q6Ok5vZGVJbmZvJiBpbmZvKTsKLQotICAgIHZpcnR1YWwgSW50UmVjdCBnZXRS
ZWN0KFJlbmRlck9iamVjdCopIGNvbnN0OwotCi0gICAgU3RyaW5nIGFjY2Vzc0tleSgpIGNvbnN0
OwotICAgIHZvaWQgc2V0QWNjZXNzS2V5KGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGFs
dCgpIGNvbnN0OwotICAgIHZvaWQgc2V0QWx0KGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5n
IGNvb3JkcygpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29vcmRzKGNvbnN0IFN0cmluZyYpOwotCi0g
ICAgU3RyaW5nIGhyZWYoKSBjb25zdDsKLSAgICB2b2lkIHNldEhyZWYoY29uc3QgU3RyaW5nJik7
Ci0KLSAgICBib29sIG5vSHJlZigpIGNvbnN0OwotICAgIHZvaWQgc2V0Tm9IcmVmKGJvb2wpOwot
Ci0gICAgU3RyaW5nIHNoYXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTaGFwZShjb25zdCBTdHJp
bmcmKTsKLQotICAgIGludCB0YWJJbmRleCgpIGNvbnN0OwotICAgIHZvaWQgc2V0VGFiSW5kZXgo
aW50KTsKLQotICAgIFN0cmluZyB0YXJnZXQoKSBjb25zdDsKLSAgICB2b2lkIHNldFRhcmdldChj
b25zdCBTdHJpbmcmKTsKLQotcHJvdGVjdGVkOgotICAgIFBhdGggZ2V0UmVnaW9uKGludCB3aWR0
aCwgaW50IGhlaWdodCkgY29uc3Q7Ci0gICAgUGF0aCByZWdpb247Ci0gICAgTGVuZ3RoKiBtX2Nv
b3JkczsKLSAgICBpbnQgbV9jb29yZHNMZW47Ci0gICAgaW50IGxhc3R3LCBsYXN0aDsKLSAgICBT
aGFwZSBtX3NoYXBlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MTWFw
RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7Ci1wdWJsaWM6Ci0gICAgSFRNTE1hcEVsZW1l
bnQoRG9jdW1lbnQqKTsKLSAgICB+SFRNTE1hcEVsZW1lbnQoKTsKLQotICAgIHZpcnR1YWwgSFRN
TFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1Jl
cXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAx
OyB9Ci0gICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqKTsKLQotICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotCi0gICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotCi0g
ICAgYm9vbCBtYXBNb3VzZUV2ZW50KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCBSZW5kZXJPYmplY3Q6Ok5vZGVJbmZvJik7Ci0KLSAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0
aW9uPiBhcmVhcygpOwotCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldE5h
bWUoY29uc3QgU3RyaW5nJik7Ci0KLXByaXZhdGU6Ci0gICAgQXRvbWljU3RyaW5nIG1fbmFtZTsK
LX07Ci0KIH0gLy9uYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBodG1sL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwCShyZXZpc2lvbiAxNDM4MikKKysrIGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTIgKzI2LDE0IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCiAKKyNpbmNsdWRlICJD
YWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50LmgiCiAjaW5jbHVkZSAiQ2Fu
dmFzUGF0dGVybi5oIgogI2luY2x1ZGUgIkNhbnZhc1N0eWxlLmgiCiAjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxD
YW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlckhUTUxDYW52YXMuaCIKICNpbmNsdWRlICJj
c3NwYXJzZXIuaCIKSW5kZXg6IGh0bWwvSFRNTE1hcEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBo
dG1sL0hUTUxNYXBFbGVtZW50LmgJKHJldmlzaW9uIDE0MzgyKQorKysgaHRtbC9IVE1MTWFwRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxODYgKzIyLDE0IEBACiAgKgogICovCiAKLSNp
Zm5kZWYgSFRNTF9JTUFHRUlNUExfSAotI2RlZmluZSBIVE1MX0lNQUdFSU1QTF9ICisjaWZuZGVm
IEhUTUxNYXBFbGVtZW50X0gKKyNkZWZpbmUgSFRNTE1hcEVsZW1lbnRfSAogCi0jaW5jbHVkZSAi
Q2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJIVE1MQW5jaG9yRWxlbWVudC5oIgotI2luY2x1ZGUg
IkltYWdlLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgor
I2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiIC8vIGZv
ciBSZW5kZXJPYmplY3Q6Ok5vZGVJbmZvCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
SFRNTENvbGxlY3Rpb247Ci1jbGFzcyBIVE1MRm9ybUVsZW1lbnQ7Ci1jbGFzcyBJbWFnZTsKLWNs
YXNzIFN0cmluZzsKLQotc3RydWN0IExlbmd0aDsKLQotY2xhc3MgSFRNTEltYWdlTG9hZGVyIDog
cHVibGljIENhY2hlZE9iamVjdENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgSFRNTEltYWdlTG9hZGVy
KEVsZW1lbnQqKTsKLSAgICB2aXJ0dWFsIH5IVE1MSW1hZ2VMb2FkZXIoKTsKLQotICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwotCi0gICAgdm9pZCBkaXNwYXRjaExvYWRFdmVu
dCgpOwotCi0gICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsg
fQotICAgIGJvb2wgaW1hZ2VDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VDb21wbGV0
ZTsgfQotICAgIENhY2hlZEltYWdlKiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0K
LQotICAgIC8vIENhY2hlZE9iamVjdENsaWVudCBBUEkKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5
RmluaXNoZWQoQ2FjaGVkT2JqZWN0Kik7Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIHNldExvYWRp
bmdJbWFnZShDYWNoZWRJbWFnZSopOwotCi1wcml2YXRlOgotICAgIEVsZW1lbnQqIG1fZWxlbWVu
dDsKLSAgICBDYWNoZWRJbWFnZSogbV9pbWFnZTsKLSAgICBib29sIG1fZmlyZWRMb2FkIDogMTsK
LSAgICBib29sIG1faW1hZ2VDb21wbGV0ZSA6IDE7Ci19OwotCi1jbGFzcyBIVE1MSW1hZ2VFbGVt
ZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKLSAgICBmcmllbmQgY2xhc3MgSFRNTEZvcm1FbGVt
ZW50OwotcHVibGljOgotICAgIEhUTUxJbWFnZUVsZW1lbnQoRG9jdW1lbnQqLCBIVE1MRm9ybUVs
ZW1lbnQqID0gMCk7Ci0gICAgSFRNTEltYWdlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCopOwotICAgIH5IVE1MSW1hZ2VFbGVtZW50KCk7Ci0KLSAgICB2aXJ0
dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdT
dGF0dXNGb3JiaWRkZW47IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0gICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNy
ZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKLSAgICB2aXJ0dWFsIHZv
aWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21E
b2N1bWVudCgpOwotCi0gICAgaW50IHdpZHRoKGJvb2wgaWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
ID0gZmFsc2UpIGNvbnN0OwotICAgIGludCBoZWlnaHQoYm9vbCBpZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMgPSBmYWxzZSkgY29uc3Q7Ci0KLSAgICBib29sIGlzU2VydmVyTWFwKCkgY29uc3QgeyBy
ZXR1cm4gaXNtYXAgJiYgdXNlbWFwLmlzRW1wdHkoKTsgfQotCi0gICAgU3RyaW5nIGFsdFRleHQo
KSBjb25zdDsKLQotICAgIFN0cmluZyBpbWFnZU1hcCgpIGNvbnN0IHsgcmV0dXJuIHVzZW1hcDsg
fQotICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25z
dDsKLQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb21wb3NpdGVPcGVyYXRvcjsgfQotCi0gICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZElt
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgpOyB9Ci0gICAgCi0gICAg
U3RyaW5nIG5hbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJik7Ci0K
LSAgICBTdHJpbmcgYWxpZ24oKSBjb25zdDsKLSAgICB2b2lkIHNldEFsaWduKGNvbnN0IFN0cmlu
ZyYpOwotCi0gICAgU3RyaW5nIGFsdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0QWx0KGNvbnN0IFN0
cmluZyYpOwotCi0gICAgaW50IGJvcmRlcigpIGNvbnN0OwotICAgIHZvaWQgc2V0Qm9yZGVyKGlu
dCk7Ci0KLSAgICB2b2lkIHNldEhlaWdodChpbnQpOwotCi0gICAgaW50IGhzcGFjZSgpIGNvbnN0
OwotICAgIHZvaWQgc2V0SHNwYWNlKGludCk7Ci0KLSAgICBib29sIGlzTWFwKCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRJc01hcChib29sKTsKLQotICAgIFN0cmluZyBsb25nRGVzYygpIGNvbnN0Owot
ICAgIHZvaWQgc2V0TG9uZ0Rlc2MoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgc3JjKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRTcmMoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgdXNl
TWFwKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRVc2VNYXAoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBp
bnQgdnNwYWNlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRWc3BhY2UoaW50KTsKLQotICAgIHZvaWQg
c2V0V2lkdGgoaW50KTsKLQotICAgIGludCB4KCkgY29uc3Q7Ci0gICAgaW50IHkoKSBjb25zdDsK
LQotICAgIGJvb2wgY29tcGxldGUoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIEhUTUxJbWFn
ZUxvYWRlciBtX2ltYWdlTG9hZGVyOwotICAgIFN0cmluZyB1c2VtYXA7Ci0gICAgYm9vbCBpc21h
cDsKLSAgICBIVE1MRm9ybUVsZW1lbnQqIG1fZm9ybTsKLSAgICBTdHJpbmcgb2xkTmFtZUF0dHI7
Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9jb21wb3NpdGVPcGVyYXRvcjsKLX07Ci0KLS8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLWNsYXNzIEhUTUxBcmVhRWxlbWVudCA6IHB1YmxpYyBIVE1MQW5jaG9yRWxlbWVu
dCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBTaGFwZSB7IERlZmF1bHQsIFBvbHksIFJlY3QsIENpcmNs
ZSwgVW5rbm93biB9OwotCi0gICAgSFRNTEFyZWFFbGVtZW50KERvY3VtZW50Kik7Ci0gICAgfkhU
TUxBcmVhRWxlbWVudCgpOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVp
cmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9Ci0gICAgdmlydHVh
bCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICBib29sIGlz
RGVmYXVsdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUgPT0gRGVmYXVsdDsgfQotCi0gICAgYm9v
bCBtYXBNb3VzZUV2ZW50KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBSZW5k
ZXJPYmplY3Q6Ok5vZGVJbmZvJiBpbmZvKTsKLQotICAgIHZpcnR1YWwgSW50UmVjdCBnZXRSZWN0
KFJlbmRlck9iamVjdCopIGNvbnN0OwotCi0gICAgU3RyaW5nIGFjY2Vzc0tleSgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0QWNjZXNzS2V5KGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGFsdCgp
IGNvbnN0OwotICAgIHZvaWQgc2V0QWx0KGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGNv
b3JkcygpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29vcmRzKGNvbnN0IFN0cmluZyYpOwotCi0gICAg
U3RyaW5nIGhyZWYoKSBjb25zdDsKLSAgICB2b2lkIHNldEhyZWYoY29uc3QgU3RyaW5nJik7Ci0K
LSAgICBib29sIG5vSHJlZigpIGNvbnN0OwotICAgIHZvaWQgc2V0Tm9IcmVmKGJvb2wpOwotCi0g
ICAgU3RyaW5nIHNoYXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTaGFwZShjb25zdCBTdHJpbmcm
KTsKLQotICAgIGludCB0YWJJbmRleCgpIGNvbnN0OwotICAgIHZvaWQgc2V0VGFiSW5kZXgoaW50
KTsKLQotICAgIFN0cmluZyB0YXJnZXQoKSBjb25zdDsKLSAgICB2b2lkIHNldFRhcmdldChjb25z
dCBTdHJpbmcmKTsKLQotcHJvdGVjdGVkOgotICAgIFBhdGggZ2V0UmVnaW9uKGludCB3aWR0aCwg
aW50IGhlaWdodCkgY29uc3Q7Ci0gICAgUGF0aCByZWdpb247Ci0gICAgTGVuZ3RoKiBtX2Nvb3Jk
czsKLSAgICBpbnQgbV9jb29yZHNMZW47Ci0gICAgaW50IGxhc3R3LCBsYXN0aDsKLSAgICBTaGFw
ZSBtX3NoYXBlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBjbGFzcyBIVE1MTWFwRWxl
bWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgSFRNTE1hcEVsZW1lbnQo
RG9jdW1lbnQqKTsKQEAgLTIxNSw3ICs0Myw3IEBACiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAKLSAgICBib29sIG1hcE1vdXNlRXZl
bnQoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFJlbmRlck9iamVjdDo6Tm9k
ZUluZm8mKTsKKyAgICBib29sIG1hcE1vdXNlRXZlbnQoaW50IHgsIGludCB5LCBjb25zdCBJbnRT
aXplJiwgUmVuZGVyT2JqZWN0OjpOb2RlSW5mbyYpOwogCiAgICAgUGFzc1JlZlB0cjxIVE1MQ29s
bGVjdGlvbj4gYXJlYXMoKTsKIApJbmRleDogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiAxNDM4MikKKysr
IHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDkg
QEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1l
bnQuaCIKLSNpbmNsdWRlICJodG1sX2ltYWdlaW1wbC5oIgorI2luY2x1ZGUgIkhUTUxNYXBFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyQ2FudmFzLmgi
CiAKQEAgLTQxLDEwICs0MiwxMCBAQAogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1S
ZW5kZXJJbWFnZTo6UmVuZGVySW1hZ2UoTm9kZSAqX25vZGUpCi0gICAgOiBSZW5kZXJSZXBsYWNl
ZChfbm9kZSkKK1JlbmRlckltYWdlOjpSZW5kZXJJbWFnZShOb2RlKiBuKQorICAgIDogUmVuZGVy
UmVwbGFjZWQobikKKyAgICAsIG1fY2FjaGVkSW1hZ2UoMCkKIHsKLSAgICBtX2NhY2hlZEltYWdl
ID0gMDsKICAgICBtX3NlbGVjdGlvblN0YXRlID0gU2VsZWN0aW9uTm9uZTsKICAgICBzZXRJbnRy
aW5zaWNXaWR0aCgwKTsKICAgICBzZXRJbnRyaW5zaWNIZWlnaHQoMCk7CkBAIC0yOTcsOCArMjk4
LDcgQEAKICAgICByZXR1cm4gaSA/IGktPmRvY3VtZW50KCktPmdldEltYWdlTWFwKGktPmltYWdl
TWFwKCkpIDogMDsKIH0KIAotYm9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQoTm9kZUluZm8m
IGluZm8sIGludCBfeCwgaW50IF95LCBpbnQgX3R4LCBpbnQgX3R5LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJJ
bWFnZTo6bm9kZUF0UG9pbnQoTm9kZUluZm8mIGluZm8sIGludCBfeCwgaW50IF95LCBpbnQgX3R4
LCBpbnQgX3R5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CiAgICAgYm9vbCBpbnNp
ZGUgPSBSZW5kZXJSZXBsYWNlZDo6bm9kZUF0UG9pbnQoaW5mbywgX3gsIF95LCBfdHgsIF90eSwg
aGl0VGVzdEFjdGlvbik7CiAKQEAgLTMwOSw3ICszMDksNyBAQAogICAgICAgICBIVE1MTWFwRWxl
bWVudCogbWFwID0gaW1hZ2VNYXAoKTsKICAgICAgICAgaWYgKG1hcCkgewogICAgICAgICAgICAg
Ly8gd2UncmUgYSBjbGllbnQgc2lkZSBpbWFnZSBtYXAKLSAgICAgICAgICAgIGluc2lkZSA9IG1h
cC0+bWFwTW91c2VFdmVudChfeCAtIHR4LCBfeSAtIHR5LCBjb250ZW50V2lkdGgoKSwgY29udGVu
dEhlaWdodCgpLCBpbmZvKTsKKyAgICAgICAgICAgIGluc2lkZSA9IG1hcC0+bWFwTW91c2VFdmVu
dChfeCAtIHR4LCBfeSAtIHR5LCBJbnRTaXplKGNvbnRlbnRXaWR0aCgpLCBjb250ZW50SGVpZ2h0
KCkpLCBpbmZvKTsKICAgICAgICAgICAgIGluZm8uc2V0SW5uZXJOb25TaGFyZWROb2RlKGVsZW1l
bnQoKSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBkb20vRG9jdW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGRvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE0MzgyKQorKysgZG9tL0RvY3VtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsMTAgQEAKICNpbmNsdWRlICJIVE1MQm9k
eUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxl
bWVudEZhY3RvcnkuaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VMb2FkZXIuaCIKICNpbmNsdWRlICJI
VE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTE1hcEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZUNvbGxlY3Rpb24uaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCkBAIC02
Niw3ICs2OCw2IEBACiAjaW5jbHVkZSAiY3Nzc3R5bGVzZWxlY3Rvci5oIgogI2luY2x1ZGUgImRv
bTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgImRvbV94bWxpbXBsLmgiCi0jaW5jbHVkZSAiaHRt
bF9pbWFnZWltcGwuaCIKICNpbmNsdWRlICJranNfYmluZGluZy5oIgogI2luY2x1ZGUgImtqc19w
cm94eS5oIgogI2luY2x1ZGUgInhtbF90b2tlbml6ZXIuaCIKSW5kZXg6IFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE0MzkwKQorKysgV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MjIsNyArNDIyLDYgQEAKIAkJOTNFRUMyNzEw
OUMzMjE4ODAwQzUxNUQxIC8qIENhbnZhc1N0eWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRUVDMjcwMDlDMzIxODgwMEM1MTVEMSAvKiBDYW52
YXNTdHlsZS5jcHAgKi87IH07CiAJCTkzRjE5OEU1MDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRG9j
dW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1
MjNEMjNDMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRG9jdW1lbnQuaCAqLzsgfTsKIAkJOTNGMTk4
RTYwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzRjAyREU0Mzk2MDE4NjM1Q0EgLyogSFRN
TEVsZW1lbnQuaCAqLzsgfTsKLQkJOTNGMTk4RTkwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfaW1h
Z2VpbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTIzRDI0NTAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9pbWFnZWltcGwuaCAqLzsgfTsKIAkJOTNG
MTk4RUYwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjUxMDJERTQzOTYwMTg2MzVDQSAvKiBI
VE1MUGFyc2VyLmggKi87IH07CiAJCTkzRjE5OEYwMDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MVG9r
ZW5pemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTIzRDI1MzAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTFRva2VuaXplci5oICovOyB9OwogCQk5M0Yx
OThGNjA4MjQ1RTU5MDAxRTlBQkMgLyogRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNzkwMkRFNDNENzAxODYzNUNBIC8qIERlY29k
ZXIuaCAqLzsgfTsKQEAgLTUxMyw3ICs1MTIsNiBAQAogCQk5M0YxOUE1RjA4MjQ1RTU5MDAxRTlB
QkMgLyogV2ViQ29yZVZpZXdGYWN0b3J5Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODU1NTAyREUzNzU5MDFFQTQxMjIgLyogV2ViQ29yZVZpZXdG
YWN0b3J5Lm0gKi87IH07CiAJCTkzRjE5QTkxMDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRG9jdW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUy
M0QyM0IwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxEb2N1bWVudC5jcHAgKi87IH07CiAJCTkzRjE5
QTkyMDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzRTAyREU0Mzk2MDE4NjM1Q0EgLyog
SFRNTEVsZW1lbnQuY3BwICovOyB9OwotCQk5M0YxOUE5NTA4MjQ1RTU5MDAxRTlBQkMgLyogaHRt
bF9pbWFnZWltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjUyM0QyNDQwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfaW1hZ2VpbXBsLmNwcCAqLzsg
fTsKIAkJOTNGMTlBOUIwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxQYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNTAwMkRFNDM5NjAx
ODYzNUNBIC8qIEhUTUxQYXJzZXIuY3BwICovOyB9OwogCQk5M0YxOUE5QzA4MjQ1RTU5MDAxRTlB
QkMgLyogSFRNTFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNTIzRDI1MjAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTFRva2VuaXplci5j
cHAgKi87IH07CiAJCTkzRjE5QTlEMDgyNDVFNTkwMDFFOUFCQyAvKiBEZWNvZGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjc4MDJERTQz
RDcwMTg2MzVDQSAvKiBEZWNvZGVyLmNwcCAqLzsgfTsKQEAgLTExNDgsNiArMTE0NiwxNCBAQAog
CQlBOEVBN0NCNjBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTEJsb2NrcXVvdGVFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RUE3Q0E4MEEx
OTJCOUMwMEE4RUY1RiAvKiBIVE1MQmxvY2txdW90ZUVsZW1lbnQuY3BwICovOyB9OwogCQlBOEVB
N0NCNzBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTERpdkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RUE3Q0E5MEExOTJCOUMwMEE4RUY1RiAv
KiBIVE1MRGl2RWxlbWVudC5oICovOyB9OwogCQlBOEVBN0NCODBBMTkyQjlDMDBBOEVGNUYgLyog
SFRNTEhlYWRpbmdFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEVBN0NBQTBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTEhlYWRpbmdFbGVtZW50
LmggKi87IH07CisJCUE4RUE3RDJCMEExOTM4NTUwMEE4RUY1RiAvKiBIVE1MSW1hZ2VMb2FkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RUE3RDIz
MEExOTM4NTUwMEE4RUY1RiAvKiBIVE1MSW1hZ2VMb2FkZXIuaCAqLzsgfTsKKwkJQThFQTdEMkMw
QTE5Mzg1NTAwQThFRjVGIC8qIEhUTUxNYXBFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEVBN0QyNDBBMTkzODU1MDBBOEVGNUYgLyogSFRN
TE1hcEVsZW1lbnQuaCAqLzsgfTsKKwkJQThFQTdEMkQwQTE5Mzg1NTAwQThFRjVGIC8qIEhUTUxJ
bWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4RUE3RDI1MEExOTM4NTUwMEE4RUY1RiAvKiBIVE1MSW1hZ2VFbGVtZW50LmggKi87IH07
CisJCUE4RUE3RDJFMEExOTM4NTUwMEE4RUY1RiAvKiBIVE1MQXJlYUVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RUE3RDI2MEExOTM4NTUw
MEE4RUY1RiAvKiBIVE1MQXJlYUVsZW1lbnQuaCAqLzsgfTsKKwkJQThFQTdEMkYwQTE5Mzg1NTAw
QThFRjVGIC8qIEhUTUxBcmVhRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBOEVBN0QyNzBBMTkzODU1MDBBOEVGNUYgLyogSFRNTEFyZWFF
bGVtZW50LmNwcCAqLzsgfTsKKwkJQThFQTdEMzAwQTE5Mzg1NTAwQThFRjVGIC8qIEhUTUxJbWFn
ZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBOEVBN0QyODBBMTkzODU1MDBBOEVGNUYgLyogSFRNTEltYWdlTG9hZGVyLmNwcCAqLzsgfTsK
KwkJQThFQTdEMzEwQTE5Mzg1NTAwQThFRjVGIC8qIEhUTUxJbWFnZUVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThFQTdEMjkwQTE5Mzg1
NTAwQThFRjVGIC8qIEhUTUxJbWFnZUVsZW1lbnQuY3BwICovOyB9OworCQlBOEVBN0QzMjBBMTkz
ODU1MDBBOEVGNUYgLyogSFRNTE1hcEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThFQTdEMkEwQTE5Mzg1NTAwQThFRjVGIC8qIEhUTUxN
YXBFbGVtZW50LmNwcCAqLzsgfTsKIAkJQThGRDhCODYwODdDQjQ0QzAwREMzNzA3IC8qIEtXUVdN
YXRyaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTg1RDdBOEMwODc5RUM2NDAwNkE5MTcyIC8qIEtXUVdNYXRyaXguY3BwICovOyB9OwogCQlBOEZE
OEI4NzA4N0NCNDU3MDBEQzM3MDcgLyogS1dRV01hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg1RDdBOEQwODc5RUM2NDAwNkE5MTcyIC8qIEtX
UVdNYXRyaXguaCAqLzsgfTsKIAkJQThGRUZCMEEwOTc5RjQ3MjAwNTgzOUZEIC8qIFJlbmRlckZv
cmVpZ25PYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4RkVGQjA4MDk3OUY0NzIwMDU4MzlGRCAvKiBSZW5kZXJGb3JlaWduT2JqZWN0LmggKi87
IH07CkBAIC0yNjEzLDYgKzI2MTksMTQgQEAKIAkJQThFQTdDQTgwQTE5MkI5QzAwQThFRjVGIC8q
IEhUTUxCbG9ja3F1b3RlRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSFRNTEJsb2NrcXVvdGVFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQThFQTdDQTkwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxEaXZFbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MRGl2RWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBOEVBN0NBQTBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTEhl
YWRpbmdFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MSGVh
ZGluZ0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThFQTdEMjMwQTE5
Mzg1NTAwQThFRjVGIC8qIEhUTUxJbWFnZUxvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSFRNTEltYWdlTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUE4RUE3RDI0MEExOTM4NTUwMEE4RUY1RiAvKiBIVE1MTWFwRWxlbWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTE1hcEVsZW1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQThFQTdEMjUwQTE5Mzg1NTAwQThFRjVGIC8qIEhUTUxJbWFnZUVs
ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxJbWFnZUVsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThFQTdEMjYwQTE5Mzg1NTAwQThF
RjVGIC8qIEhUTUxBcmVhRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSFRNTEFyZWFFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4RUE3
RDI3MEExOTM4NTUwMEE4RUY1RiAvKiBIVE1MQXJlYUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxBcmVhRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUE4RUE3RDI4MEExOTM4NTUwMEE4RUY1RiAvKiBIVE1MSW1hZ2VM
b2FkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxJbWFn
ZUxvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4RUE3RDI5MEExOTM4
NTUwMEE4RUY1RiAvKiBIVE1MSW1hZ2VFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBIVE1MSW1hZ2VFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQThFQTdEMkEwQTE5Mzg1NTAwQThFRjVGIC8qIEhUTUxNYXBFbGVtZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MTWFwRWxlbWVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4RkVGQjA4MDk3OUY0NzIwMDU4MzlG
RCAvKiBSZW5kZXJGb3JlaWduT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5kZXJGb3JlaWduT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE4RkVGQjA5MDk3OUY0NzIwMDU4MzlGRCAvKiBSZW5kZXJGb3JlaWduT2JqZWN0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJGb3JlaWduT2JqZWN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThGRUZCMkYwOTc5RjRGNjAwNTgzOUZE
IC8qIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTVkdGb3JlaWduT2JqZWN0RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yODIwLDggKzI4MzQsNiBAQAogCQlGNTIzRDIzQzAyREU0Mzk2MDE4
NjM1Q0EgLyogSFRNTERvY3VtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxEb2N1bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QyM0UwMkRFNDM5NjAxODYz
NUNBIC8qIEhUTUxFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMjNGMDJERTQzOTYw
MTg2MzVDQSAvKiBIVE1MRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJRjUyM0QyNDQwMkRFNDM5NjAxODYz
NUNBIC8qIGh0bWxfaW1hZ2VpbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGh0bWxfaW1hZ2VpbXBsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1MjNEMjQ1MDJE
RTQzOTYwMTg2MzVDQSAvKiBodG1sX2ltYWdlaW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBodG1sX2ltYWdlaW1wbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QyNTAw
MkRFNDM5NjAxODYzNUNBIC8qIEhUTUxQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFBhcnNlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDI1
MTAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDI1MjAyREU0
Mzk2MDE4NjM1Q0EgLyogSFRNTFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MVG9rZW5pemVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC0zNDM5
LDEyICszNDUxLDEyIEBACiAJCQkJOTNFRUMxRUYwOUMyODc3NzAwQzUxNUQxIC8qIENhbnZhc1N0
eWxlLmggKi8sCiAJCQkJQTgxMzZEMzcwOTczQThFNzAwRDc0NDYzIC8qIEZvcm1EYXRhTGlzdC5j
cHAgKi8sCiAJCQkJQTgxMzZEMzYwOTczQThFNzAwRDc0NDYzIC8qIEZvcm1EYXRhTGlzdC5oICov
LAotCQkJCUY1MjNEMjQ0MDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2ltYWdlaW1wbC5jcHAgKi8s
Ci0JCQkJRjUyM0QyNDUwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfaW1hZ2VpbXBsLmggKi8sCiAJ
CQkJQThDRkY3OUEwQTE1Njk3ODAwMEE0MjM0IC8qIEhUTUxBbmNob3JFbGVtZW50LmNwcCAqLywK
IAkJCQlBOENGRjdBMTBBMTU2OTc4MDAwQTQyMzQgLyogSFRNTEFuY2hvckVsZW1lbnQuaCAqLywK
IAkJCQlBODcxRDQ1NDBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTEFwcGxldEVsZW1lbnQuY3BwICov
LAogCQkJCUE4NzFENDUzMEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MQXBwbGV0RWxlbWVudC5oICov
LAorCQkJCUE4RUE3RDI3MEExOTM4NTUwMEE4RUY1RiAvKiBIVE1MQXJlYUVsZW1lbnQuY3BwICov
LAorCQkJCUE4RUE3RDI2MEExOTM4NTUwMEE4RUY1RiAvKiBIVE1MQXJlYUVsZW1lbnQuaCAqLywK
IAkJCQlBODcxREMxRTBBMTUyMDU3MDBCMTJBNjggLyogSFRNTEJhc2VFbGVtZW50LmNwcCAqLywK
IAkJCQlBODcxREMxMzBBMTUyMDU3MDBCMTJBNjggLyogSFRNTEJhc2VFbGVtZW50LmggKi8sCiAJ
CQkJQThERjNGQ0IwOTdGQTBGQjAwNTI5ODFCIC8qIEhUTUxCYXNlRm9udEVsZW1lbnQuY3BwICov
LApAQCAtMzUwMiw2ICszNTE0LDEwIEBACiAJCQkJQTg3MURFMUIwQTE1MkFDODAwQjEyQTY4IC8q
IEhUTUxIdG1sRWxlbWVudC5oICovLAogCQkJCUE4NzFERTE4MEExNTJBQzgwMEIxMkE2OCAvKiBI
VE1MSUZyYW1lRWxlbWVudC5jcHAgKi8sCiAJCQkJQTg3MURFMUUwQTE1MkFDODAwQjEyQTY4IC8q
IEhUTUxJRnJhbWVFbGVtZW50LmggKi8sCisJCQkJQThFQTdEMjkwQTE5Mzg1NTAwQThFRjVGIC8q
IEhUTUxJbWFnZUVsZW1lbnQuY3BwICovLAorCQkJCUE4RUE3RDI1MEExOTM4NTUwMEE4RUY1RiAv
KiBIVE1MSW1hZ2VFbGVtZW50LmggKi8sCisJCQkJQThFQTdEMjgwQTE5Mzg1NTAwQThFRjVGIC8q
IEhUTUxJbWFnZUxvYWRlci5jcHAgKi8sCisJCQkJQThFQTdEMjMwQTE5Mzg1NTAwQThFRjVGIC8q
IEhUTUxJbWFnZUxvYWRlci5oICovLAogCQkJCUE4MTM2OUIxMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBI
VE1MSW5wdXRFbGVtZW50LmNwcCAqLywKIAkJCQlBODEzNjlCMDA5NzM3NEY1MDBENzQ0NjMgLyog
SFRNTElucHV0RWxlbWVudC5oICovLAogCQkJCUE4MTM2OUFGMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBI
VE1MSXNJbmRleEVsZW1lbnQuY3BwICovLApAQCAtMzUxNiw2ICszNTMyLDggQEAKIAkJCQlBOEVB
NzlFQTBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTExJRWxlbWVudC5oICovLAogCQkJCUE4NzFEQzE1
MEExNTIwNTcwMEIxMkE2OCAvKiBIVE1MTGlua0VsZW1lbnQuY3BwICovLAogCQkJCUE4NzFEQzE0
MEExNTIwNTcwMEIxMkE2OCAvKiBIVE1MTGlua0VsZW1lbnQuaCAqLywKKwkJCQlBOEVBN0QyQTBB
MTkzODU1MDBBOEVGNUYgLyogSFRNTE1hcEVsZW1lbnQuY3BwICovLAorCQkJCUE4RUE3RDI0MEEx
OTM4NTUwMEE4RUY1RiAvKiBIVE1MTWFwRWxlbWVudC5oICovLAogCQkJCUE4RUE3QzlFMEExOTJC
OUMwMEE4RUY1RiAvKiBIVE1MTWFycXVlZUVsZW1lbnQuY3BwICovLAogCQkJCUE4RUE3QzlEMEEx
OTJCOUMwMEE4RUY1RiAvKiBIVE1MTWFycXVlZUVsZW1lbnQuaCAqLywKIAkJCQlBOEVBNzlFQzBB
MTkxNkRGMDBBOEVGNUYgLyogSFRNTE1lbnVFbGVtZW50LmNwcCAqLywKQEAgLTQ3ODQsNyArNDgw
Miw2IEBACiAJCQlmaWxlcyA9ICgKIAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMgLyogSFRN
TERvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFNjA4MjQ1RTU5MDAxRTlBQkMg
LyogSFRNTEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTkzRjE5OEU5MDgyNDVFNTkwMDFF
OUFCQyAvKiBodG1sX2ltYWdlaW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk4RUYwODI0
NUU1OTAwMUU5QUJDIC8qIEhUTUxQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OEYw
MDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
M0YxOThGNjA4MjQ1RTU5MDAxRTlBQkMgLyogRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCkBAIC01
NDQzLDYgKzU0NjAsMTAgQEAKIAkJCQlBOEVBN0NCNTBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTFBh
cmFncmFwaEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3Q0I3MEExOTJCOUMwMEE4
RUY1RiAvKiBIVE1MRGl2RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThFQTdDQjgwQTE5
MkI5QzAwQThFRjVGIC8qIEhUTUxIZWFkaW5nRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QThFQTdEMkIwQTE5Mzg1NTAwQThFRjVGIC8qIEhUTUxJbWFnZUxvYWRlci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQThFQTdEMkMwQTE5Mzg1NTAwQThFRjVGIC8qIEhUTUxNYXBFbGVtZW50LmggaW4g
SGVhZGVycyAqLywKKwkJCQlBOEVBN0QyRDBBMTkzODU1MDBBOEVGNUYgLyogSFRNTEltYWdlRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQThFQTdEMkUwQTE5Mzg1NTAwQThFRjVGIC8qIEhU
TUxBcmVhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC01NjU1LDcgKzU2NzYsNiBAQAogCQkJ
CTkzRjE5QTVGMDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlVmlld0ZhY3RvcnkubSBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzRjE5QTkxMDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRG9jdW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBOTIwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkzRjE5QTk1MDgyNDVFNTkwMDFFOUFCQyAvKiBo
dG1sX2ltYWdlaW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUE5QjA4MjQ1RTU5MDAx
RTlBQkMgLyogSFRNTFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUE5QzA4MjQ1
RTU5MDAxRTlBQkMgLyogSFRNTFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0Yx
OUE5RDA4MjQ1RTU5MDAxRTlBQkMgLyogRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTYy
NDQsNiArNjI2NCwxMCBAQAogCQkJCUE4RUE3Q0IyMEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MUGFy
YWdyYXBoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEVBN0NCMzBBMTkyQjlDMDBB
OEVGNUYgLyogSFRNTEhSRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEVBN0NCNjBB
MTkyQjlDMDBBOEVGNUYgLyogSFRNTEJsb2NrcXVvdGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUE4RUE3RDJGMEExOTM4NTUwMEE4RUY1RiAvKiBIVE1MQXJlYUVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQThFQTdEMzAwQTE5Mzg1NTAwQThFRjVGIC8qIEhUTUxJbWFnZUxv
YWRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOEVBN0QzMTBBMTkzODU1MDBBOEVGNUYgLyog
SFRNTEltYWdlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOEVBN0QzMjBBMTkzODU1
MDBBOEVGNUYgLyogSFRNTE1hcEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBlZGl0
aW5nL0pTRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0pTRWRpdG9yLmNwcAkocmV2
aXNpb24gMTQzODIpCisrKyBlZGl0aW5nL0pTRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsMTEgKzMyLDExIEBACiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxl
bWVudC5oIgogI2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCiAjaW5jbHVkZSAi
U2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlR5cGluZ0NvbW1hbmQuaCIKICNpbmNs
dWRlICJVbmxpbmtDb21tYW5kLmgiCi0jaW5jbHVkZSAiaHRtbF9pbWFnZWltcGwuaCIKICNpbmNs
dWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgogCkluZGV4OiBDaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDM5MikKKysrIENoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDU2IEBACiAyMDA2LTA1LTE1ICBFcmljIFNlaWRl
bCAgPGVzZWlkZWxAYXBwbGUuY29tPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFNwbGl0IGh0bWxfaW1hZ2VpbXBsLiogaW50byBzZXBhcmF0ZSBmaWxl
cyAob25lIHBlciBjbGFzcykuCisgICAgICAgIGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODkyOQorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMva2pzX2V2ZW50cy5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvanMva2pzX2h0bWwuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL29i
amMvRE9NSFRNTC5tbToKKyAgICAgICAgKiBicmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5t
bToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAqIGVkaXRpbmcvSlNFZGl0
b3IuY3BwOgorICAgICAgICAqIGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAg
ICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxB
cmVhRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50
OjpIVE1MQXJlYUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50Ojpt
YXBNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudDo6Z2V0UmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQ6OmdldFJlZ2lvbik6CisgICAg
ICAgICogaHRtbC9IVE1MQXJlYUVsZW1lbnQuaDogQWRkZWQuCisgICAgICAgICogaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTERvY3VtZW50LmNwcDoKKyAgICAg
ICAgKiBodG1sL0hUTUxFbGVtZW50RmFjdG9yeS5jcHA6CisgICAgICAgICogaHRtbC9IVE1MRm9y
bUNvbGxlY3Rpb24uY3BwOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcDoKKyAg
ICAgICAgKiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxJbWFnZUVsZW1lbnQ6OkhUTUxJbWFnZUVsZW1lbnQpOgorICAgICAgICAqIGh0bWwv
SFRNTEltYWdlRWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUxvYWRl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlTG9hZGVyOjpIVE1MSW1h
Z2VMb2FkZXIpOgorICAgICAgICAqIGh0bWwvSFRNTEltYWdlTG9hZGVyLmg6IEFkZGVkLgorICAg
ICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MTWFw
RWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1hcEVsZW1lbnQ6Om1h
cE1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1hcEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXBFbGVtZW50Lmg6IEFkZGVkLgor
ICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRN
TFBhcnNlci5jcHA6CisgICAgICAgICogaHRtbC9odG1sX2ltYWdlaW1wbC5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogaHRtbC9odG1sX2ltYWdlaW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIGtz
dmcyL21pc2MvU1ZHSW1hZ2VMb2FkZXIuaDoKKyAgICAgICAgKiBrd3EvV2ViQ29yZUFYT2JqZWN0
Lm1tOgorICAgICAgICAoLVtXZWJDb3JlQVhPYmplY3QgYWRkQ2hpbGRyZW5Ub0FycmF5Ol0pOgor
ICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6UmVuZGVySW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KToKKworMjAwNi0wNS0xNSAg
RXJpYyBTZWlkZWwgIDxlc2VpZGVsQGFwcGxlLmNvbT4KKwogICAgICAgICBSZXZpZXdlZCBieSBi
ZXRoLgogCiAgICAgICAgIFNwbGl0IGh0bWxfYmxvY2tpbXBsLiogaW50byBzZXBhcmF0ZSBmaWxl
cyAob25lIHBlciBjbGFzcykuCkluZGV4OiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2oJKHJldmlzaW9uIDE0MzkwKQorKysgV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS9XZWJDb3JlLnZj
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzI4MywxMiArMzI4MywzNyBAQAogCQkJCVJlbGF0aXZl
UGF0aD0iLi5cLi5caHRtbFxIVE1MRGl2RWxlbWVudC5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0K
Kw0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caHRtbFxodG1sX2ltYWdlaW1w
bC5jcHAiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caHRtbFxIVE1MTWFwRWxlbWVudC5jcHAi
DQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwu
LlxodG1sXGh0bWxfaW1hZ2VpbXBsLmgiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caHRtbFxI
VE1MTWFwRWxlbWVudC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5cLi5caHRtbFxIVE1MSW1hZ2VFbGVtZW50LmNwcCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGh0bWxcSFRNTElt
YWdlRWxlbWVudC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5cLi5caHRtbFxIVE1MQXJlYUVsZW1lbnQuY3BwIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caHRtbFxIVE1MQXJlYUVs
ZW1lbnQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXC4uXGh0bWxcSFRNTEltYWdlTG9hZGVyLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGh0bWxcSFRNTEltYWdlTG9hZGVy
LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCkluZGV4OiBicmlkZ2UvbWFjL1dl
YkNvcmVGcmFtZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBicmlkZ2UvbWFjL1dlYkNvcmVGcmFt
ZUJyaWRnZS5tbQkocmV2aXNpb24gMTQzODIpCisrKyBicmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJy
aWRnZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNiBAQAogI2ltcG9ydCAiY3NzaGVs
cGVyLmgiCiAjaW1wb3J0ICJEZWxldGVTZWxlY3Rpb25Db21tYW5kLmgiCiAjaW1wb3J0ICJIVE1M
RG9jdW1lbnQuaCIKLSNpbXBvcnQgImh0bWxfaW1hZ2VpbXBsLmgiCiAjaW1wb3J0ICJodG1sZWRp
dGluZy5oIgogI2ltcG9ydCAiSFRNTE5hbWVzLmgiCiAjaW1wb3J0ICJranNfcHJveHkuaCIKSW5k
ZXg6IGtzdmcyL21pc2MvU1ZHSW1hZ2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9taXNj
L1NWR0ltYWdlTG9hZGVyLmgJKHJldmlzaW9uIDE0MzgyKQorKysga3N2ZzIvbWlzYy9TVkdJbWFn
ZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMiArMjMsMTIgQEAKICNkZWZpbmUgS1NW
R19TVkdJbWFnZUxvYWRlcl9ICiAjaWYgU1ZHX1NVUFBPUlQKIAotI2luY2x1ZGUgImh0bWxfaW1h
Z2VpbXBsLmgiCisjaW5jbHVkZSAiSFRNTEltYWdlTG9hZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlCiB7CiAgICAgY2xhc3MgU1ZHSW1hZ2VFbGVtZW50OwotICAgIGNsYXNzIFNWR0ltYWdlTG9h
ZGVyIDogcHVibGljIFdlYkNvcmU6OkhUTUxJbWFnZUxvYWRlciB7CisgICAgY2xhc3MgU1ZHSW1h
Z2VMb2FkZXIgOiBwdWJsaWMgSFRNTEltYWdlTG9hZGVyIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IFNWR0ltYWdlTG9hZGVyKFNWR0ltYWdlRWxlbWVudCAqbm9kZSk7CiAgICAgICAgIHZpcnR1YWwg
flNWR0ltYWdlTG9hZGVyKCk7CkluZGV4OiBrd3EvV2ViQ29yZUFYT2JqZWN0Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGt3cS9XZWJDb3JlQVhPYmplY3QubW0JKHJldmlzaW9uIDE0Mzg5KQorKysga3dxL1dl
YkNvcmVBWE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsMTAgQEAKICNpbXBv
cnQgIkV2ZW50TmFtZXMuaCIKICNpbXBvcnQgIkZvdW5kYXRpb25FeHRyYXMuaCIKICNpbXBvcnQg
IkZyYW1lTWFjLmgiCisjaW1wb3J0ICJIVE1MQXJlYUVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxD
b2xsZWN0aW9uLmgiCiAjaW1wb3J0ICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW1wb3J0ICJIVE1M
TWFwRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTE5hbWVzLmgiCiAjaW1wb3J0ICJSZW5kZXJDYW52
YXMuaCIKICNpbXBvcnQgIlJlbmRlckltYWdlLmgiCkBAIC00OSw3ICs1MSw2IEBACiAjaW1wb3J0
ICJXZWJDb3JlRnJhbWVCcmlkZ2UuaCIKICNpbXBvcnQgIldlYkNvcmVGcmFtZVZpZXcuaCIKICNp
bXBvcnQgIldlYkNvcmVWaWV3RmFjdG9yeS5oIgotI2ltcG9ydCAiaHRtbF9pbWFnZWltcGwuaCIK
ICNpbXBvcnQgImtqc19odG1sLmgiCiAjaW1wb3J0ICJ2aXNpYmxlX3VuaXRzLmgiCiAKSW5kZXg6
IHBhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAx
NDM4MikKKysrIHBhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw2IEBA
CiAjaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgogI2luY2x1ZGUgImNzc3N0eWxlc2VsZWN0b3Iu
aCIKICNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIKLSNpbmNsdWRlICJodG1sX2ltYWdlaW1w
bC5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAia2pzX3dpbmRvdy5oIgog
I2luY2x1ZGUgIm1hcmt1cC5oIgo=
</data>
<flag name="review"
          id="2347"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>