<?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>7616</bug_id>
          
          <creation_ts>2006-03-05 11:51:34 -0800</creation_ts>
          <short_desc>get all references to KJS::Node out of internal.h</short_desc>
          <delta_ts>2006-03-05 21:54:09 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</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>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>35167</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-05 11:51:34 -0800</bug_when>
    <thetext>While working on removing the &quot;Impl&quot; suffix from class names in WebCore, I discovered a conflict between KJS::Node and WebCore::Node. This happens because KJS::Node is exposed to WebCore. But it should not be.

The best fix would be to not use &quot;internal.h&quot; at all in WebCore. This is impractical at the moment because it&apos;s used for a number of different reasons.

Instead, I factored out the only thing in &quot;internal.h&quot; that needs KJS::Node out into a separate file. It&apos;s the parser, and the new file is &quot;Parser.h&quot;. This fits with our future direction for JavaScriptCore of naming files after the classes in them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35168</commentid>
    <comment_count>1</comment_count>
      <attachid>6875</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-05 11:53:54 -0800</bug_when>
    <thetext>Created attachment 6875
patch with change log</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6875</attachid>
            <date>2006-03-05 11:53:54 -0800</date>
            <delta_ts>2006-03-05 18:27:02 -0800</delta_ts>
            <desc>patch with change log</desc>
            <filename>NodePatch.txt</filename>
            <type>text/plain</type>
            <size>51161</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGtqcy9pbnRlcm5hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL2ludGVybmFsLmNwcAko
cmV2aXNpb24gMTMxNDUpCisrKyBranMvaW50ZXJuYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw4ICs0OCw2IEBACiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKLWV4
dGVybiBpbnQga2pzeXlwYXJzZSgpOwotCiBuYW1lc3BhY2UgS0pTIHsKIAogI2lmIFBMQVRGT1JN
KFdJTl9PUykKQEAgLTI1MCw5MiArMjQ4LDYgQEAKICAgfQogfQogCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gUGFyc2VyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1zdGF0aWMgUmVmUHRyPFByb2dyYW1Ob2RlPiAqcHJvZ05vZGU7Ci1pbnQgUGFy
c2VyOjpzaWQgPSAwOwotCi1zdGF0aWMgVmVjdG9yPFJlZlB0cjxOb2RlPiA+KiBuZXdOb2RlczsK
LXN0YXRpYyBIYXNoU2V0PE5vZGUqPiogbm9kZUN5Y2xlczsKLQotdm9pZCBQYXJzZXI6OnNhdmVO
ZXdOb2RlKE5vZGUgKm5vZGUpCi17Ci0gICAgaWYgKCFuZXdOb2RlcykKLSAgICAgICAgbmV3Tm9k
ZXMgPSBuZXcgVmVjdG9yPFJlZlB0cjxOb2RlPiA+OwotCi0gICAgbmV3Tm9kZXMtPmFwcGVuZChu
b2RlKTsKLX0KLQotdm9pZCBQYXJzZXI6Om5vdGVOb2RlQ3ljbGUoTm9kZSAqbm9kZSkKLXsKLSAg
ICBpZiAoIW5vZGVDeWNsZXMpCi0gICAgICAgIG5vZGVDeWNsZXMgPSBuZXcgSGFzaFNldDxOb2Rl
Kj47Ci0gICAgbm9kZUN5Y2xlcy0+YWRkKG5vZGUpOwotfQotCi12b2lkIFBhcnNlcjo6cmVtb3Zl
Tm9kZUN5Y2xlKE5vZGUgKm5vZGUpCi17Ci0gICAgQVNTRVJUKG5vZGVDeWNsZXMpOwotICAgIG5v
ZGVDeWNsZXMtPnJlbW92ZShub2RlKTsKLX0KLQotc3RhdGljIHZvaWQgY2xlYXJOZXdOb2Rlcygp
Ci17Ci0gICAgaWYgKG5vZGVDeWNsZXMpIHsKLSAgICAgICAgZm9yIChIYXNoU2V0PE5vZGUqPjo6
aXRlcmF0b3IgaXQgPSBub2RlQ3ljbGVzLT5iZWdpbigpOyBpdCAhPSBub2RlQ3ljbGVzLT5lbmQo
KTsgKytpdCkKLSAgICAgICAgICAgICgqaXQpLT5icmVha0N5Y2xlKCk7Ci0gICAgICAgIGRlbGV0
ZSBub2RlQ3ljbGVzOwotICAgICAgICBub2RlQ3ljbGVzID0gMDsKLSAgICB9Ci0KLSAgICBkZWxl
dGUgbmV3Tm9kZXM7Ci0gICAgbmV3Tm9kZXMgPSAwOwotfQotCi1SZWZQdHI8UHJvZ3JhbU5vZGU+
IFBhcnNlcjo6cGFyc2UoY29uc3QgVVN0cmluZyAmc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5l
TnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFy
ICpjb2RlLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLCBpbnQgKnNvdXJjZUlkLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZXJyTGluZSwgVVN0cmluZyAqZXJyTXNnKQot
ewotICBpZiAoZXJyTGluZSkKLSAgICAqZXJyTGluZSA9IC0xOwotICBpZiAoZXJyTXNnKQotICAg
ICplcnJNc2cgPSAwOwotICBpZiAoIXByb2dOb2RlKQotICAgIHByb2dOb2RlID0gbmV3IFJlZlB0
cjxQcm9ncmFtTm9kZT47Ci0KLSAgTGV4ZXI6OmN1cnIoKS0+c2V0Q29kZShzb3VyY2VVUkwsIHN0
YXJ0aW5nTGluZU51bWJlciwgY29kZSwgbGVuZ3RoKTsKLSAgKnByb2dOb2RlID0gMDsKLSAgc2lk
Kys7Ci0gIGlmIChzb3VyY2VJZCkKLSAgICAqc291cmNlSWQgPSBzaWQ7Ci0gIC8vIEVuYWJsZSB0
aGlzIChhbmQgdGhlICNkZWZpbmUgWVlERUJVRyBpbiBncmFtbWFyLnkpIHRvIGRlYnVnIGEgcGFy
c2UgZXJyb3IKLSAgLy9leHRlcm4gaW50IGtqc3l5ZGVidWc7Ci0gIC8va2pzeXlkZWJ1Zz0xOwot
ICBpbnQgcGFyc2VFcnJvciA9IGtqc3l5cGFyc2UoKTsKLSAgYm9vbCBsZXhFcnJvciA9IExleGVy
OjpjdXJyKCktPnNhd0Vycm9yKCk7Ci0gIExleGVyOjpjdXJyKCktPmRvbmVQYXJzaW5nKCk7Ci0g
IFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZyA9ICpwcm9nTm9kZTsKLSAgKnByb2dOb2RlID0gMDsK
LQotICBjbGVhck5ld05vZGVzKCk7Ci0KLSAgaWYgKHBhcnNlRXJyb3IgfHwgbGV4RXJyb3IpIHsK
LSAgICBpbnQgZWxpbmUgPSBMZXhlcjo6Y3VycigpLT5saW5lTm8oKTsKLSAgICBpZiAoZXJyTGlu
ZSkKLSAgICAgICplcnJMaW5lID0gZWxpbmU7Ci0gICAgaWYgKGVyck1zZykKLSAgICAgICplcnJN
c2cgPSAiUGFyc2UgZXJyb3IiOwotICAgIHJldHVybiBSZWZQdHI8UHJvZ3JhbU5vZGU+KCk7Ci0g
IH0KLQotICByZXR1cm4gcHJvZzsKLX0KLQotdm9pZCBQYXJzZXI6OmFjY2VwdChQcm9ncmFtTm9k
ZSAqcHJvZykKLXsKLSAgKnByb2dOb2RlID0gcHJvZzsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIEludGVycHJldGVySW1wIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAogSW50ZXJwcmV0ZXJJbXAqIEludGVycHJldGVySW1wOjpzX2hvb2sgPSAwTDsKSW5k
ZXg6IGtqcy9mdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9mdW5jdGlvbi5oCShyZXZpc2lv
biAxMzE0NSkKKysrIGtqcy9mdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw5
IEBACiAKIG5hbWVzcGFjZSBLSlMgewogCisgIGNsYXNzIEFjdGl2YXRpb25JbXA7CisgIGNsYXNz
IEZ1bmN0aW9uQm9keU5vZGU7CiAgIGNsYXNzIFBhcmFtZXRlcjsKLSAgY2xhc3MgQWN0aXZhdGlv
bkltcDsKIAogICAvKioKICAgICogQHNob3J0IEltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBpbnRl
cm5hbCBGdW5jdGlvbnMuCkluZGV4OiBranMvUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL1Bh
cnNlci5oCShyZXZpc2lvbiAxMzEyNykKKysrIGtqcy9QYXJzZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw5ICsxLDkgQEAKLS8vIC0qLSBjLWJhc2ljLW9mZnNldDogMiAtKi0KKy8vIC0qLSBjLWJh
c2ljLW9mZnNldDogNCAtKi0KIC8qCiAgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBs
aWJyYXJpZXMKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3Qu
Y29tKQotICogIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLgorICogIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIyLDM3MCArMjIsNDAgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBJTlRFUk5B
TF9ICi0jZGVmaW5lIElOVEVSTkFMX0gKKyNpZm5kZWYgUGFyc2VyX2gKKyNkZWZpbmUgUGFyc2Vy
X2gKIAotI2luY2x1ZGUgIkpTVHlwZS5oIgotI2luY2x1ZGUgImludGVycHJldGVyLmgiCi0jaW5j
bHVkZSAib2JqZWN0LmgiCi0jaW5jbHVkZSAicHJvdGVjdC5oIgotI2luY2x1ZGUgInNjb3BlX2No
YWluLmgiCi0jaW5jbHVkZSAidHlwZXMuaCIKLSNpbmNsdWRlICJ1c3RyaW5nLmgiCisjaW5jbHVk
ZSA8a3htbGNvcmUvUGFzc1JlZlB0ci5oPgogCi0jaW5jbHVkZSA8a3htbGNvcmUvTm9uY29weWFi
bGUuaD4KLSNpbmNsdWRlIDxreG1sY29yZS9SZWZQdHIuaD4KLQotI2RlZmluZSBJMThOX05PT1Ao
cykgcwotCiBuYW1lc3BhY2UgS0pTIHsKIAotICBjbGFzcyBOb2RlOwotICBjbGFzcyBQcm9ncmFt
Tm9kZTsKLSAgY2xhc3MgRnVuY3Rpb25Cb2R5Tm9kZTsKLSAgY2xhc3MgRnVuY3Rpb25Qcm90b3R5
cGU7Ci0gIGNsYXNzIEZ1bmN0aW9uSW1wOwotICBjbGFzcyBEZWJ1Z2dlcjsKKyAgICBjbGFzcyBO
b2RlOworICAgIGNsYXNzIFByb2dyYW1Ob2RlOworICAgIGNsYXNzIFVDaGFyOworICAgIGNsYXNz
IFVTdHJpbmc7CiAKLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFByaW1pdGl2ZSBpbXBscwotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
ICBjbGFzcyBTdHJpbmdJbXAgOiBwdWJsaWMgSlNDZWxsIHsKLSAgcHVibGljOgotICAgIFN0cmlu
Z0ltcChjb25zdCBVU3RyaW5nJiB2KSA6IHZhbCh2KSB7IH0KLSAgICBVU3RyaW5nIHZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gdmFsOyB9Ci0KLSAgICBKU1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IFN0cmluZ1R5cGU7IH0KLQotICAgIEpTVmFsdWUgKnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhl
YywgSlNUeXBlIHByZWZlcnJlZCA9IFVuc3BlY2lmaWVkVHlwZSkgY29uc3Q7Ci0gICAgYm9vbCB0
b0Jvb2xlYW4oRXhlY1N0YXRlICpleGVjKSBjb25zdDsKLSAgICBkb3VibGUgdG9OdW1iZXIoRXhl
Y1N0YXRlICpleGVjKSBjb25zdDsKLSAgICBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSAqZXhl
YykgY29uc3Q7Ci0gICAgSlNPYmplY3QgKnRvT2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7
Ci0KLSAgcHJpdmF0ZToKLSAgICBVU3RyaW5nIHZhbDsKLSAgfTsKLQotICBjbGFzcyBOdW1iZXJJ
bXAgOiBwdWJsaWMgSlNDZWxsIHsKLSAgICBmcmllbmQgY2xhc3MgQ29uc3RhbnRWYWx1ZXM7Ci0g
ICAgZnJpZW5kIGNsYXNzIEludGVycHJldGVySW1wOwotICAgIGZyaWVuZCBKU1ZhbHVlICpqc051
bWJlckNlbGwoZG91YmxlKTsKLSAgcHVibGljOgotICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIHZhbDsgfQotCi0gICAgSlNUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBOdW1iZXJU
eXBlOyB9Ci0KLSAgICBKU1ZhbHVlICp0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIEpTVHlw
ZSBwcmVmZXJyZWQgPSBVbnNwZWNpZmllZFR5cGUpIGNvbnN0OwotICAgIGJvb2wgdG9Cb29sZWFu
KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7Ci0gICAgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSAq
ZXhlYykgY29uc3Q7Ci0gICAgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0
OwotICAgIEpTT2JqZWN0ICp0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwotCi0gIHBy
aXZhdGU6Ci0gICAgTnVtYmVySW1wKGRvdWJsZSB2KSA6IHZhbCh2KSB7IH0KLQotICAgIHZpcnR1
YWwgYm9vbCBnZXRVSW50MzIodWludDMyX3QmKSBjb25zdDsKLQotICAgIGRvdWJsZSB2YWw7Ci0g
IH07Ci0gIAotCi0gIC8qKgotICAgKiBAc2hvcnQgVGhlICJsYWJlbCBzZXQiIGluIEVjbWEtMjYy
IHNwZWMKLSAgICovCi0gIGNsYXNzIExhYmVsU3RhY2sgOiBOb25jb3B5YWJsZSB7Ci0gIHB1Ymxp
YzoKLSAgICBMYWJlbFN0YWNrKCk6IHRvcygwKSwgaXRlcmF0aW9uRGVwdGgoMCksIHN3aXRjaERl
cHRoKDApIHt9Ci0gICAgfkxhYmVsU3RhY2soKTsKLQogICAgIC8qKgotICAgICAqIElmIGlkIGlz
IG5vdCBlbXB0eSBhbmQgaXMgbm90IGluIHRoZSBzdGFjayBhbHJlYWR5LCBwdXRzIGl0IG9uIHRv
cCBvZgotICAgICAqIHRoZSBzdGFjayBhbmQgcmV0dXJucyB0cnVlLCBvdGhlcndpc2UgcmV0dXJu
cyBmYWxzZQorICAgICAqIEBpbnRlcm5hbAorICAgICAqCisgICAgICogUGFyc2VzIEVDTUFTY3Jp
cHQgc291cmNlIGNvZGUgYW5kIGNvbnZlcnRzIGludG8gUHJvZ3JhbU5vZGUgb2JqZWN0cywgd2hp
Y2gKKyAgICAgKiByZXByZXNlbnQgdGhlIHJvb3Qgb2YgYSBwYXJzZSB0cmVlLiBUaGlzIGNsYXNz
IHByb3ZpZGVzIGEgY29udmVuaWVudCB3b3JrYXJvdW5kCisgICAgICogZm9yIHRoZSBwcm9ibGVt
IG9mIHRoZSBiaXNvbiBwYXJzZXIgd29ya2luZyBpbiBhIHN0YXRpYyBjb250ZXh0LgogICAgICAq
LwotICAgIGJvb2wgcHVzaChjb25zdCBJZGVudGlmaWVyICZpZCk7Ci0gICAgLyoqCi0gICAgICog
SXMgdGhlIGlkIGluIHRoZSBzdGFjaz8KLSAgICAgKi8KLSAgICBib29sIGNvbnRhaW5zKGNvbnN0
IElkZW50aWZpZXIgJmlkKSBjb25zdDsKLSAgICAvKioKLSAgICAgKiBSZW1vdmVzIGZyb20gdGhl
IHN0YWNrIHRoZSBsYXN0IHB1c2hlZCBpZCAod2hhdCBlbHNlPykKLSAgICAgKi8KLSAgICB2b2lk
IHBvcCgpOwotICAgIAotICAgIHZvaWQgcHVzaEl0ZXJhdGlvbigpIHsgaXRlcmF0aW9uRGVwdGgr
KzsgfQotICAgIHZvaWQgcG9wSXRlcmF0aW9uKCkgeyBpdGVyYXRpb25EZXB0aC0tOyB9Ci0gICAg
Ym9vbCBpbkl0ZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIChpdGVyYXRpb25EZXB0aCA+IDApOyB9
Ci0gICAgCi0gICAgdm9pZCBwdXNoU3dpdGNoKCkgeyBzd2l0Y2hEZXB0aCsrOyB9Ci0gICAgdm9p
ZCBwb3BTd2l0Y2goKSB7IHN3aXRjaERlcHRoLS07IH0KLSAgICBib29sIGluU3dpdGNoKCkgY29u
c3QgeyByZXR1cm4gKHN3aXRjaERlcHRoID4gMCk7IH0KLSAgICAKLSAgcHJpdmF0ZToKLSAgICBz
dHJ1Y3QgU3RhY2tFbGVtIHsKLSAgICAgIElkZW50aWZpZXIgaWQ7Ci0gICAgICBTdGFja0VsZW0g
KnByZXY7Ci0gICAgfTsKKyAgICBjbGFzcyBQYXJzZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IHBhcnNlKGNvbnN0IFVTdHJpbmcmIHNvdXJj
ZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwKKyAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBj
b2RlLCB1bnNpZ25lZCBsZW5ndGgsCisgICAgICAgICAgICBpbnQqIHNvdXJjZUlkID0gMCwgaW50
KiBlcnJMaW5lID0gMCwgVVN0cmluZyogZXJyTXNnID0gMCk7CiAKLSAgICBTdGFja0VsZW0gKnRv
czsKLSAgICBpbnQgaXRlcmF0aW9uRGVwdGg7Ci0gICAgaW50IHN3aXRjaERlcHRoOwotICB9Owor
ICAgICAgICBzdGF0aWMgdm9pZCBhY2NlcHQoUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4pOwogCisg
ICAgICAgIHN0YXRpYyB2b2lkIHNhdmVOZXdOb2RlKE5vZGUqKTsKKyAgICAgICAgc3RhdGljIHZv
aWQgbm90ZU5vZGVDeWNsZShOb2RlKik7CisgICAgICAgIHN0YXRpYyB2b2lkIHJlbW92ZU5vZGVD
eWNsZShOb2RlKik7CiAKLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBhcnNpbmcgJiBldmFsdWF0aW9uCi0gIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorICAgICAgICBzdGF0aWMgaW50IHNpZDsKKyAgICB9OwogCi0gIGVudW0gQ29kZVR5cGUg
eyBHbG9iYWxDb2RlLAotICAgICAgICAgICAgICAgICAgRXZhbENvZGUsCi0gICAgICAgICAgICAg
ICAgICBGdW5jdGlvbkNvZGUsCi0gICAgICAgICAgICAgICAgICBBbm9ueW1vdXNDb2RlIH07Ci0K
LSAgLyoqCi0gICAqIEBpbnRlcm5hbAotICAgKgotICAgKiBQYXJzZXMgRUNNQVNjcmlwdCBzb3Vy
Y2UgY29kZSBhbmQgY29udmVydHMgaW50byBQcm9ncmFtTm9kZSBvYmplY3RzLCB3aGljaAotICAg
KiByZXByZXNlbnQgdGhlIHJvb3Qgb2YgYSBwYXJzZSB0cmVlLiBUaGlzIGNsYXNzIHByb3ZpZGVz
IGEgY29udmVuaWFudCB3b3JrYXJvdW5kCi0gICAqIGZvciB0aGUgcHJvYmxlbSBvZiB0aGUgYmlz
b24gcGFyc2VyIHdvcmtpbmcgaW4gYSBzdGF0aWMgY29udGV4dC4KLSAgICovCi0gIGNsYXNzIFBh
cnNlciB7Ci0gIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPFByb2dyYW1Ob2RlPiBwYXJzZShj
b25zdCBVU3RyaW5nICZzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKmNvZGUsIHVuc2ln
bmVkIGludCBsZW5ndGgsIGludCAqc291cmNlSWQgPSAwLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCAqZXJyTGluZSA9IDAsIFVTdHJpbmcgKmVyck1zZyA9IDAp
OwotICAgIHN0YXRpYyB2b2lkIGFjY2VwdChQcm9ncmFtTm9kZSAqcHJvZyk7Ci0KLSAgICBzdGF0
aWMgdm9pZCBzYXZlTmV3Tm9kZShOb2RlICpub2RlKTsKLSAgICBzdGF0aWMgdm9pZCBub3RlTm9k
ZUN5Y2xlKE5vZGUgKm5vZGUpOwotICAgIHN0YXRpYyB2b2lkIHJlbW92ZU5vZGVDeWNsZShOb2Rl
ICpub2RlKTsKLQotICAgIHN0YXRpYyBpbnQgc2lkOwotICB9OwotCi0gIGNsYXNzIFNhdmVkQnVp
bHRpbnNJbnRlcm5hbCB7Ci0gICAgZnJpZW5kIGNsYXNzIEludGVycHJldGVySW1wOwotICBwcml2
YXRlOgotICAgIFByb3RlY3RlZFB0cjxKU09iamVjdD4gYl9PYmplY3Q7Ci0gICAgUHJvdGVjdGVk
UHRyPEpTT2JqZWN0PiBiX0Z1bmN0aW9uOwotICAgIFByb3RlY3RlZFB0cjxKU09iamVjdD4gYl9B
cnJheTsKLSAgICBQcm90ZWN0ZWRQdHI8SlNPYmplY3Q+IGJfQm9vbGVhbjsKLSAgICBQcm90ZWN0
ZWRQdHI8SlNPYmplY3Q+IGJfU3RyaW5nOwotICAgIFByb3RlY3RlZFB0cjxKU09iamVjdD4gYl9O
dW1iZXI7Ci0gICAgUHJvdGVjdGVkUHRyPEpTT2JqZWN0PiBiX0RhdGU7Ci0gICAgUHJvdGVjdGVk
UHRyPEpTT2JqZWN0PiBiX1JlZ0V4cDsKLSAgICBQcm90ZWN0ZWRQdHI8SlNPYmplY3Q+IGJfRXJy
b3I7Ci0KLSAgICBQcm90ZWN0ZWRQdHI8SlNPYmplY3Q+IGJfT2JqZWN0UHJvdG90eXBlOwotICAg
IFByb3RlY3RlZFB0cjxKU09iamVjdD4gYl9GdW5jdGlvblByb3RvdHlwZTsKLSAgICBQcm90ZWN0
ZWRQdHI8SlNPYmplY3Q+IGJfQXJyYXlQcm90b3R5cGU7Ci0gICAgUHJvdGVjdGVkUHRyPEpTT2Jq
ZWN0PiBiX0Jvb2xlYW5Qcm90b3R5cGU7Ci0gICAgUHJvdGVjdGVkUHRyPEpTT2JqZWN0PiBiX1N0
cmluZ1Byb3RvdHlwZTsKLSAgICBQcm90ZWN0ZWRQdHI8SlNPYmplY3Q+IGJfTnVtYmVyUHJvdG90
eXBlOwotICAgIFByb3RlY3RlZFB0cjxKU09iamVjdD4gYl9EYXRlUHJvdG90eXBlOwotICAgIFBy
b3RlY3RlZFB0cjxKU09iamVjdD4gYl9SZWdFeHBQcm90b3R5cGU7Ci0gICAgUHJvdGVjdGVkUHRy
PEpTT2JqZWN0PiBiX0Vycm9yUHJvdG90eXBlOwotCi0gICAgUHJvdGVjdGVkUHRyPEpTT2JqZWN0
PiBiX2V2YWxFcnJvcjsKLSAgICBQcm90ZWN0ZWRQdHI8SlNPYmplY3Q+IGJfcmFuZ2VFcnJvcjsK
LSAgICBQcm90ZWN0ZWRQdHI8SlNPYmplY3Q+IGJfcmVmZXJlbmNlRXJyb3I7Ci0gICAgUHJvdGVj
dGVkUHRyPEpTT2JqZWN0PiBiX3N5bnRheEVycm9yOwotICAgIFByb3RlY3RlZFB0cjxKU09iamVj
dD4gYl90eXBlRXJyb3I7Ci0gICAgUHJvdGVjdGVkUHRyPEpTT2JqZWN0PiBiX3VyaUVycm9yOwot
Ci0gICAgUHJvdGVjdGVkUHRyPEpTT2JqZWN0PiBiX2V2YWxFcnJvclByb3RvdHlwZTsKLSAgICBQ
cm90ZWN0ZWRQdHI8SlNPYmplY3Q+IGJfcmFuZ2VFcnJvclByb3RvdHlwZTsKLSAgICBQcm90ZWN0
ZWRQdHI8SlNPYmplY3Q+IGJfcmVmZXJlbmNlRXJyb3JQcm90b3R5cGU7Ci0gICAgUHJvdGVjdGVk
UHRyPEpTT2JqZWN0PiBiX3N5bnRheEVycm9yUHJvdG90eXBlOwotICAgIFByb3RlY3RlZFB0cjxK
U09iamVjdD4gYl90eXBlRXJyb3JQcm90b3R5cGU7Ci0gICAgUHJvdGVjdGVkUHRyPEpTT2JqZWN0
PiBiX3VyaUVycm9yUHJvdG90eXBlOwotICB9OwotCi0gIGNsYXNzIEludGVycHJldGVySW1wIHsK
LSAgICBmcmllbmQgY2xhc3MgQ29sbGVjdG9yOwotICBwdWJsaWM6Ci0gICAgSW50ZXJwcmV0ZXJJ
bXAoSW50ZXJwcmV0ZXIgKmludGVycCwgSlNPYmplY3QgKmdsb2IpOwotICAgIH5JbnRlcnByZXRl
ckltcCgpOwotCi0gICAgSlNPYmplY3QgKmdsb2JhbE9iamVjdCgpIHsgcmV0dXJuIGdsb2JhbDsg
fQotICAgIEludGVycHJldGVyICppbnRlcnByZXRlcigpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJw
cmV0ZXI7IH0KLQotICAgIHZvaWQgaW5pdEdsb2JhbE9iamVjdCgpOwotCi0gICAgdm9pZCBtYXJr
KCk7Ci0KLSAgICBFeGVjU3RhdGUgKmdsb2JhbEV4ZWMoKSB7IHJldHVybiAmZ2xvYkV4ZWM7IH0K
LSAgICBib29sIGNoZWNrU3ludGF4KGNvbnN0IFVTdHJpbmcgJmNvZGUpOwotICAgIENvbXBsZXRp
b24gZXZhbHVhdGUoY29uc3QgVUNoYXIqIGNvZGUsIGludCBjb2RlTGVuZ3RoLCBKU1ZhbHVlKiB0
aGlzViwgY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKTsK
LSAgICBEZWJ1Z2dlciAqZGVidWdnZXIoKSBjb25zdCB7IHJldHVybiBkYmc7IH0KLSAgICB2b2lk
IHNldERlYnVnZ2VyKERlYnVnZ2VyICpkKSB7IGRiZyA9IGQ7IH0KLQotICAgIEpTT2JqZWN0ICpi
dWlsdGluT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gYl9PYmplY3Q7IH0KLSAgICBKU09iamVjdCAq
YnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gYl9GdW5jdGlvbjsgfQotICAgIEpTT2Jq
ZWN0ICpidWlsdGluQXJyYXkoKSBjb25zdCB7IHJldHVybiBiX0FycmF5OyB9Ci0gICAgSlNPYmpl
Y3QgKmJ1aWx0aW5Cb29sZWFuKCkgY29uc3QgeyByZXR1cm4gYl9Cb29sZWFuOyB9Ci0gICAgSlNP
YmplY3QgKmJ1aWx0aW5TdHJpbmcoKSBjb25zdCB7IHJldHVybiBiX1N0cmluZzsgfQotICAgIEpT
T2JqZWN0ICpidWlsdGluTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gYl9OdW1iZXI7IH0KLSAgICBK
U09iamVjdCAqYnVpbHRpbkRhdGUoKSBjb25zdCB7IHJldHVybiBiX0RhdGU7IH0KLSAgICBKU09i
amVjdCAqYnVpbHRpblJlZ0V4cCgpIGNvbnN0IHsgcmV0dXJuIGJfUmVnRXhwOyB9Ci0gICAgSlNP
YmplY3QgKmJ1aWx0aW5FcnJvcigpIGNvbnN0IHsgcmV0dXJuIGJfRXJyb3I7IH0KLQotICAgIEpT
T2JqZWN0ICpidWlsdGluT2JqZWN0UHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gYl9PYmplY3RQ
cm90b3R5cGU7IH0KLSAgICBKU09iamVjdCAqYnVpbHRpbkZ1bmN0aW9uUHJvdG90eXBlKCkgY29u
c3QgeyByZXR1cm4gYl9GdW5jdGlvblByb3RvdHlwZTsgfQotICAgIEpTT2JqZWN0ICpidWlsdGlu
QXJyYXlQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBiX0FycmF5UHJvdG90eXBlOyB9Ci0gICAg
SlNPYmplY3QgKmJ1aWx0aW5Cb29sZWFuUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gYl9Cb29s
ZWFuUHJvdG90eXBlOyB9Ci0gICAgSlNPYmplY3QgKmJ1aWx0aW5TdHJpbmdQcm90b3R5cGUoKSBj
b25zdCB7IHJldHVybiBiX1N0cmluZ1Byb3RvdHlwZTsgfQotICAgIEpTT2JqZWN0ICpidWlsdGlu
TnVtYmVyUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gYl9OdW1iZXJQcm90b3R5cGU7IH0KLSAg
ICBKU09iamVjdCAqYnVpbHRpbkRhdGVQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBiX0RhdGVQ
cm90b3R5cGU7IH0KLSAgICBKU09iamVjdCAqYnVpbHRpblJlZ0V4cFByb3RvdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIGJfUmVnRXhwUHJvdG90eXBlOyB9Ci0gICAgSlNPYmplY3QgKmJ1aWx0aW5FcnJv
clByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGJfRXJyb3JQcm90b3R5cGU7IH0KLQotICAgIEpT
T2JqZWN0ICpidWlsdGluRXZhbEVycm9yKCkgY29uc3QgeyByZXR1cm4gYl9ldmFsRXJyb3I7IH0K
LSAgICBKU09iamVjdCAqYnVpbHRpblJhbmdlRXJyb3IoKSBjb25zdCB7IHJldHVybiBiX3Jhbmdl
RXJyb3I7IH0KLSAgICBKU09iamVjdCAqYnVpbHRpblJlZmVyZW5jZUVycm9yKCkgY29uc3QgeyBy
ZXR1cm4gYl9yZWZlcmVuY2VFcnJvcjsgfQotICAgIEpTT2JqZWN0ICpidWlsdGluU3ludGF4RXJy
b3IoKSBjb25zdCB7IHJldHVybiBiX3N5bnRheEVycm9yOyB9Ci0gICAgSlNPYmplY3QgKmJ1aWx0
aW5UeXBlRXJyb3IoKSBjb25zdCB7IHJldHVybiBiX3R5cGVFcnJvcjsgfQotICAgIEpTT2JqZWN0
ICpidWlsdGluVVJJRXJyb3IoKSBjb25zdCB7IHJldHVybiBiX3VyaUVycm9yOyB9Ci0KLSAgICBK
U09iamVjdCAqYnVpbHRpbkV2YWxFcnJvclByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGJfZXZh
bEVycm9yUHJvdG90eXBlOyB9Ci0gICAgSlNPYmplY3QgKmJ1aWx0aW5SYW5nZUVycm9yUHJvdG90
eXBlKCkgY29uc3QgeyByZXR1cm4gYl9yYW5nZUVycm9yUHJvdG90eXBlOyB9Ci0gICAgSlNPYmpl
Y3QgKmJ1aWx0aW5SZWZlcmVuY2VFcnJvclByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGJfcmVm
ZXJlbmNlRXJyb3JQcm90b3R5cGU7IH0KLSAgICBKU09iamVjdCAqYnVpbHRpblN5bnRheEVycm9y
UHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gYl9zeW50YXhFcnJvclByb3RvdHlwZTsgfQotICAg
IEpTT2JqZWN0ICpidWlsdGluVHlwZUVycm9yUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gYl90
eXBlRXJyb3JQcm90b3R5cGU7IH0KLSAgICBKU09iamVjdCAqYnVpbHRpblVSSUVycm9yUHJvdG90
eXBlKCkgY29uc3QgeyByZXR1cm4gYl91cmlFcnJvclByb3RvdHlwZTsgfQotCi0gICAgdm9pZCBz
ZXRDb21wYXRNb2RlKEludGVycHJldGVyOjpDb21wYXRNb2RlIG1vZGUpIHsgbV9jb21wYXRNb2Rl
ID0gbW9kZTsgfQotICAgIEludGVycHJldGVyOjpDb21wYXRNb2RlIGNvbXBhdE1vZGUoKSBjb25z
dCB7IHJldHVybiBtX2NvbXBhdE1vZGU7IH0KLQotICAgIC8vIENoYWluZWQgbGlzdCBvZiBpbnRl
cnByZXRlcnMgKHJpbmcpCi0gICAgc3RhdGljIEludGVycHJldGVySW1wKiBmaXJzdEludGVycHJl
dGVyKCkgeyByZXR1cm4gc19ob29rOyB9Ci0gICAgSW50ZXJwcmV0ZXJJbXAgKm5leHRJbnRlcnBy
ZXRlcigpIGNvbnN0IHsgcmV0dXJuIG5leHQ7IH0KLSAgICBJbnRlcnByZXRlckltcCAqcHJldklu
dGVycHJldGVyKCkgY29uc3QgeyByZXR1cm4gcHJldjsgfQotCi0gICAgc3RhdGljIEludGVycHJl
dGVySW1wICppbnRlcnByZXRlcldpdGhHbG9iYWxPYmplY3QoSlNPYmplY3QgKik7Ci0gICAgCi0g
ICAgdm9pZCBzZXRDb250ZXh0KENvbnRleHRJbXAgKmMpIHsgX2NvbnRleHQgPSBjOyB9Ci0gICAg
Q29udGV4dEltcCAqY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIF9jb250ZXh0OyB9Ci0KLSAgICB2
b2lkIHNhdmVCdWlsdGlucyAoU2F2ZWRCdWlsdGlucyAmYnVpbHRpbnMpIGNvbnN0OwotICAgIHZv
aWQgcmVzdG9yZUJ1aWx0aW5zIChjb25zdCBTYXZlZEJ1aWx0aW5zICZidWlsdGlucyk7Ci0KLSAg
cHJpdmF0ZToKLSAgICB2b2lkIGNsZWFyKCk7Ci0gICAgSW50ZXJwcmV0ZXIgKm1faW50ZXJwcmV0
ZXI7Ci0gICAgSlNPYmplY3QgKmdsb2JhbDsKLSAgICBEZWJ1Z2dlciAqZGJnOwotCi0gICAgLy8g
QnVpbHQtaW4gcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IHByb3RvdHlwZS4gVGhlc2UgYXJlIGFj
Y2Vzc2libGUKLSAgICAvLyBmcm9tIGhlcmUgZXZlbiBpZiB0aGV5IGFyZSByZXBsYWNlZCBieSBq
cyBjb2RlIChlLmcuIGFzc2lnbmluZyB0bwotICAgIC8vIEFycmF5LnByb3RvdHlwZSkKLQotICAg
IFByb3RlY3RlZFB0cjxKU09iamVjdD4gYl9PYmplY3Q7Ci0gICAgUHJvdGVjdGVkUHRyPEpTT2Jq
ZWN0PiBiX0Z1bmN0aW9uOwotICAgIFByb3RlY3RlZFB0cjxKU09iamVjdD4gYl9BcnJheTsKLSAg
ICBQcm90ZWN0ZWRQdHI8SlNPYmplY3Q+IGJfQm9vbGVhbjsKLSAgICBQcm90ZWN0ZWRQdHI8SlNP
YmplY3Q+IGJfU3RyaW5nOwotICAgIFByb3RlY3RlZFB0cjxKU09iamVjdD4gYl9OdW1iZXI7Ci0g
ICAgUHJvdGVjdGVkUHRyPEpTT2JqZWN0PiBiX0RhdGU7Ci0gICAgUHJvdGVjdGVkUHRyPEpTT2Jq
ZWN0PiBiX1JlZ0V4cDsKLSAgICBQcm90ZWN0ZWRQdHI8SlNPYmplY3Q+IGJfRXJyb3I7Ci0KLSAg
ICBQcm90ZWN0ZWRQdHI8SlNPYmplY3Q+IGJfT2JqZWN0UHJvdG90eXBlOwotICAgIFByb3RlY3Rl
ZFB0cjxKU09iamVjdD4gYl9GdW5jdGlvblByb3RvdHlwZTsKLSAgICBQcm90ZWN0ZWRQdHI8SlNP
YmplY3Q+IGJfQXJyYXlQcm90b3R5cGU7Ci0gICAgUHJvdGVjdGVkUHRyPEpTT2JqZWN0PiBiX0Jv
b2xlYW5Qcm90b3R5cGU7Ci0gICAgUHJvdGVjdGVkUHRyPEpTT2JqZWN0PiBiX1N0cmluZ1Byb3Rv
dHlwZTsKLSAgICBQcm90ZWN0ZWRQdHI8SlNPYmplY3Q+IGJfTnVtYmVyUHJvdG90eXBlOwotICAg
IFByb3RlY3RlZFB0cjxKU09iamVjdD4gYl9EYXRlUHJvdG90eXBlOwotICAgIFByb3RlY3RlZFB0
cjxKU09iamVjdD4gYl9SZWdFeHBQcm90b3R5cGU7Ci0gICAgUHJvdGVjdGVkUHRyPEpTT2JqZWN0
PiBiX0Vycm9yUHJvdG90eXBlOwotCi0gICAgUHJvdGVjdGVkUHRyPEpTT2JqZWN0PiBiX2V2YWxF
cnJvcjsKLSAgICBQcm90ZWN0ZWRQdHI8SlNPYmplY3Q+IGJfcmFuZ2VFcnJvcjsKLSAgICBQcm90
ZWN0ZWRQdHI8SlNPYmplY3Q+IGJfcmVmZXJlbmNlRXJyb3I7Ci0gICAgUHJvdGVjdGVkUHRyPEpT
T2JqZWN0PiBiX3N5bnRheEVycm9yOwotICAgIFByb3RlY3RlZFB0cjxKU09iamVjdD4gYl90eXBl
RXJyb3I7Ci0gICAgUHJvdGVjdGVkUHRyPEpTT2JqZWN0PiBiX3VyaUVycm9yOwotCi0gICAgUHJv
dGVjdGVkUHRyPEpTT2JqZWN0PiBiX2V2YWxFcnJvclByb3RvdHlwZTsKLSAgICBQcm90ZWN0ZWRQ
dHI8SlNPYmplY3Q+IGJfcmFuZ2VFcnJvclByb3RvdHlwZTsKLSAgICBQcm90ZWN0ZWRQdHI8SlNP
YmplY3Q+IGJfcmVmZXJlbmNlRXJyb3JQcm90b3R5cGU7Ci0gICAgUHJvdGVjdGVkUHRyPEpTT2Jq
ZWN0PiBiX3N5bnRheEVycm9yUHJvdG90eXBlOwotICAgIFByb3RlY3RlZFB0cjxKU09iamVjdD4g
Yl90eXBlRXJyb3JQcm90b3R5cGU7Ci0gICAgUHJvdGVjdGVkUHRyPEpTT2JqZWN0PiBiX3VyaUVy
cm9yUHJvdG90eXBlOwotCi0gICAgRXhlY1N0YXRlIGdsb2JFeGVjOwotICAgIEludGVycHJldGVy
OjpDb21wYXRNb2RlIG1fY29tcGF0TW9kZTsKLQotICAgIC8vIENoYWluZWQgbGlzdCBvZiBpbnRl
cnByZXRlcnMgKHJpbmcpIC0gZm9yIGNvbGxlY3RvcgotICAgIHN0YXRpYyBJbnRlcnByZXRlcklt
cCogc19ob29rOwotICAgIEludGVycHJldGVySW1wICpuZXh0LCAqcHJldjsKLSAgICAKLSAgICBD
b250ZXh0SW1wICpfY29udGV4dDsKLQotICAgIGludCByZWN1cnNpb247Ci0gIH07Ci0KLSAgY2xh
c3MgQXR0YWNoZWRJbnRlcnByZXRlcjsKLSAgY2xhc3MgRGVidWdnZXJJbXAgewotICBwdWJsaWM6
Ci0KLSAgICBEZWJ1Z2dlckltcCgpIHsKLSAgICAgIGludGVycHMgPSAwOwotICAgICAgaXNBYm9y
dGVkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgdm9pZCBhYm9ydCgpIHsgaXNBYm9ydGVkID0gdHJ1
ZTsgfQotICAgIGJvb2wgYWJvcnRlZCgpIGNvbnN0IHsgcmV0dXJuIGlzQWJvcnRlZDsgfQotCi0g
ICAgQXR0YWNoZWRJbnRlcnByZXRlciAqaW50ZXJwczsKLSAgICBib29sIGlzQWJvcnRlZDsKLSAg
fTsKLQotICBjbGFzcyBJbnRlcm5hbEZ1bmN0aW9uSW1wIDogcHVibGljIEpTT2JqZWN0IHsKLSAg
cHVibGljOgotICAgIEludGVybmFsRnVuY3Rpb25JbXAoKTsKLSAgICBJbnRlcm5hbEZ1bmN0aW9u
SW1wKEZ1bmN0aW9uUHJvdG90eXBlKik7Ci0gICAgSW50ZXJuYWxGdW5jdGlvbkltcChGdW5jdGlv
blByb3RvdHlwZSosIGNvbnN0IElkZW50aWZpZXImKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpbXBs
ZW1lbnRzQ2FsbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgSlNWYWx1ZSogY2FsbEFzRnVuY3Rpb24o
RXhlY1N0YXRlKiwgSlNPYmplY3QqIHRoaXNPYmplYywgY29uc3QgTGlzdCYgYXJncykgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgaGFzSW5zdGFuY2UoRXhlY1N0YXRlKiwgSlNWYWx1ZSopOwotCi0gICAgdmlydHVh
bCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0g
ICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwotICAgIGNvbnN0IElkZW50aWZpZXImIGZ1
bmN0aW9uTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotCi0gIHByaXZhdGU6Ci0gICAg
SWRlbnRpZmllciBtX25hbWU7Ci0gIH07Ci0KLSAgLy8gaGVscGVyIGZ1bmN0aW9uIGZvciB0b0lu
dGVnZXIsIHRvSW50MzIsIHRvVUludDMyIGFuZCB0b1VJbnQxNgotICBkb3VibGUgcm91bmRWYWx1
ZShFeGVjU3RhdGUgKiwgSlNWYWx1ZSAqKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgdm9pZCBwcmlu
dEluZm8oRXhlY1N0YXRlICpleGVjLCBjb25zdCBjaGFyICpzLCBKU1ZhbHVlICosIGludCBsaW5l
bm8gPSAtMSk7Ci0jZW5kaWYKLQotaW5saW5lIExhYmVsU3RhY2s6On5MYWJlbFN0YWNrKCkKLXsK
LSAgICBTdGFja0VsZW0gKnByZXY7Ci0gICAgZm9yIChTdGFja0VsZW0gKmUgPSB0b3M7IGU7IGUg
PSBwcmV2KSB7Ci0gICAgICAgIHByZXYgPSBlLT5wcmV2OwotICAgICAgICBkZWxldGUgZTsKLSAg
ICB9Ci19Ci0KLWlubGluZSB2b2lkIExhYmVsU3RhY2s6OnBvcCgpCi17Ci0gICAgaWYgKFN0YWNr
RWxlbSAqZSA9IHRvcykgewotICAgICAgICB0b3MgPSBlLT5wcmV2OwotICAgICAgICBkZWxldGUg
ZTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlCiAKLSNlbmRpZiAvLyAgSU5URVJOQUxfSAor
I2VuZGlmCkluZGV4OiBranMvaW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvaW50ZXJuYWwu
aAkocmV2aXNpb24gMTMxNDUpCisrKyBranMvaW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAt
Myw3ICszLDcgQEAKICAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwog
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtNDAsMTIgKzQwLDggQEAKIAogbmFtZXNwYWNlIEtKUyB7CiAKLSAgY2xh
c3MgTm9kZTsKLSAgY2xhc3MgUHJvZ3JhbU5vZGU7Ci0gIGNsYXNzIEZ1bmN0aW9uQm9keU5vZGU7
Ci0gIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlOwotICBjbGFzcyBGdW5jdGlvbkltcDsKICAgY2xh
c3MgRGVidWdnZXI7CisgIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlOwogCiAgIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmltaXRpdmUgaW1w
bHMKQEAgLTEzNSw3ICsxMzEsNyBAQAogCiAKICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnNpbmcgJiBldmFsdWF0aW9uCisgIC8vICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEV2YWx1YXRpb24KICAgLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKICAgZW51bSBDb2RlVHlwZSB7IEdsb2JhbENvZGUsCkBAIC0xNDMsMjcgKzEzOSw2IEBA
CiAgICAgICAgICAgICAgICAgICBGdW5jdGlvbkNvZGUsCiAgICAgICAgICAgICAgICAgICBBbm9u
eW1vdXNDb2RlIH07CiAKLSAgLyoqCi0gICAqIEBpbnRlcm5hbAotICAgKgotICAgKiBQYXJzZXMg
RUNNQVNjcmlwdCBzb3VyY2UgY29kZSBhbmQgY29udmVydHMgaW50byBQcm9ncmFtTm9kZSBvYmpl
Y3RzLCB3aGljaAotICAgKiByZXByZXNlbnQgdGhlIHJvb3Qgb2YgYSBwYXJzZSB0cmVlLiBUaGlz
IGNsYXNzIHByb3ZpZGVzIGEgY29udmVuaWFudCB3b3JrYXJvdW5kCi0gICAqIGZvciB0aGUgcHJv
YmxlbSBvZiB0aGUgYmlzb24gcGFyc2VyIHdvcmtpbmcgaW4gYSBzdGF0aWMgY29udGV4dC4KLSAg
ICovCi0gIGNsYXNzIFBhcnNlciB7Ci0gIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPFByb2dy
YW1Ob2RlPiBwYXJzZShjb25zdCBVU3RyaW5nICZzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVO
dW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNo
YXIgKmNvZGUsIHVuc2lnbmVkIGludCBsZW5ndGgsIGludCAqc291cmNlSWQgPSAwLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZXJyTGluZSA9IDAsIFVTdHJp
bmcgKmVyck1zZyA9IDApOwotICAgIHN0YXRpYyB2b2lkIGFjY2VwdChQcm9ncmFtTm9kZSAqcHJv
Zyk7Ci0KLSAgICBzdGF0aWMgdm9pZCBzYXZlTmV3Tm9kZShOb2RlICpub2RlKTsKLSAgICBzdGF0
aWMgdm9pZCBub3RlTm9kZUN5Y2xlKE5vZGUgKm5vZGUpOwotICAgIHN0YXRpYyB2b2lkIHJlbW92
ZU5vZGVDeWNsZShOb2RlICpub2RlKTsKLQotICAgIHN0YXRpYyBpbnQgc2lkOwotICB9OwotCiAg
IGNsYXNzIFNhdmVkQnVpbHRpbnNJbnRlcm5hbCB7CiAgICAgZnJpZW5kIGNsYXNzIEludGVycHJl
dGVySW1wOwogICBwcml2YXRlOgpJbmRleDoga2pzL25vZGVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pz
L25vZGVzLmgJKHJldmlzaW9uIDEzMTQ1KQorKysga2pzL25vZGVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMsNyArMyw3IEBACiAgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJp
ZXMKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQot
ICogIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLgorICogIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTIyLDE0ICsyMiwxNCBAQAogICoKICAqLwogCi0jaWZuZGVmIF9O
T0RFU19IXwotI2RlZmluZSBfTk9ERVNfSF8KKyNpZm5kZWYgTk9ERVNfSF8KKyNkZWZpbmUgTk9E
RVNfSF8KIAorI2luY2x1ZGUgIlBhcnNlci5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5j
bHVkZSA8a3htbGNvcmUvTGlzdFJlZlB0ci5oPgogI2luY2x1ZGUgPGt4bWxjb3JlL1JlZlB0ci5o
PgotI2luY2x1ZGUgPGt4bWxjb3JlL0xpc3RSZWZQdHIuaD4KIAotI2luY2x1ZGUgImludGVybmFs
LmgiCi0KIG5hbWVzcGFjZSBLSlMgewogCiAgIGNsYXNzIFByb2dyYW1Ob2RlOwpJbmRleDoga2pz
L1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL1BhcnNlci5jcHAJKHJldmlzaW9uIDEzMTI3
KQorKysga2pzL1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw5IEBACisvLyAt
Ki0gYy1iYXNpYy1vZmZzZXQ6IDQgLSotCiAvKgogICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBLREUgbGlicmFyaWVzCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAo
cG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5j
LgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDIzOSArMjMsMjAgQEAKICAqLwogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJQYXJzZXIuaCIKIAot
I2luY2x1ZGUgImFycmF5X29iamVjdC5oIgotI2luY2x1ZGUgImJvb2xfb2JqZWN0LmgiCi0jaW5j
bHVkZSAiY29sbGVjdG9yLmgiCi0jaW5jbHVkZSAiY29udGV4dC5oIgotI2luY2x1ZGUgImRhdGVf
b2JqZWN0LmgiCi0jaW5jbHVkZSAiZGVidWdnZXIuaCIKLSNpbmNsdWRlICJlcnJvcl9vYmplY3Qu
aCIKLSNpbmNsdWRlICJmdW5jdGlvbl9vYmplY3QuaCIKICNpbmNsdWRlICJsZXhlci5oIgotI2lu
Y2x1ZGUgIm1hdGhfb2JqZWN0LmgiCiAjaW5jbHVkZSAibm9kZXMuaCIKLSNpbmNsdWRlICJudW1i
ZXJfb2JqZWN0LmgiCi0jaW5jbHVkZSAib2JqZWN0LmgiCi0jaW5jbHVkZSAib2JqZWN0X29iamVj
dC5oIgotI2luY2x1ZGUgIm9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJyZWdleHBfb2JqZWN0Lmgi
Ci0jaW5jbHVkZSAic3RyaW5nX29iamVjdC5oIgotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1
ZGUgPGt4bWxjb3JlL0hhc2hNYXAuaD4KICNpbmNsdWRlIDxreG1sY29yZS9IYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUg
PHN0ZGlvLmg+CiAKIGV4dGVybiBpbnQga2pzeXlwYXJzZSgpOwogCiBuYW1lc3BhY2UgS0pTIHsK
IAotI2lmIFBMQVRGT1JNKFdJTl9PUykKLSNkZWZpbmUgY29weXNpZ24gX2NvcHlzaWduCi0jZW5k
aWYKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN0cmluZ0ltcCAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSlNWYWx1ZSAqU3RyaW5nSW1wOjp0b1By
aW1pdGl2ZShFeGVjU3RhdGUgKiwgSlNUeXBlKSBjb25zdAotewotICByZXR1cm4gY29uc3RfY2Fz
dDxTdHJpbmdJbXAgKj4odGhpcyk7Ci19Ci0KLWJvb2wgU3RyaW5nSW1wOjp0b0Jvb2xlYW4oRXhl
Y1N0YXRlICopIGNvbnN0Ci17Ci0gIHJldHVybiAodmFsLnNpemUoKSA+IDApOwotfQotCi1kb3Vi
bGUgU3RyaW5nSW1wOjp0b051bWJlcihFeGVjU3RhdGUgKikgY29uc3QKLXsKLSAgcmV0dXJuIHZh
bC50b0RvdWJsZSgpOwotfQotCi1VU3RyaW5nIFN0cmluZ0ltcDo6dG9TdHJpbmcoRXhlY1N0YXRl
ICopIGNvbnN0Ci17Ci0gIHJldHVybiB2YWw7Ci19Ci0KLUpTT2JqZWN0ICpTdHJpbmdJbXA6OnRv
T2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKLXsKLSAgICByZXR1cm4gbmV3IFN0cmluZ0lu
c3RhbmNlKGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluU3RyaW5nUHJvdG90eXBl
KCksIHZhbCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdW1iZXJJ
bXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUpTVmFsdWUgKk51bWJl
ckltcDo6dG9QcmltaXRpdmUoRXhlY1N0YXRlICosIEpTVHlwZSkgY29uc3QKLXsKLSAgcmV0dXJu
IGNvbnN0X2Nhc3Q8TnVtYmVySW1wICo+KHRoaXMpOwotfQotCi1ib29sIE51bWJlckltcDo6dG9C
b29sZWFuKEV4ZWNTdGF0ZSAqKSBjb25zdAotewotICByZXR1cm4gdmFsIDwgMC4wIHx8IHZhbCA+
IDAuMDsgLy8gZmFsc2UgZm9yIE5hTgotfQotCi1kb3VibGUgTnVtYmVySW1wOjp0b051bWJlcihF
eGVjU3RhdGUgKikgY29uc3QKLXsKLSAgcmV0dXJuIHZhbDsKLX0KLQotVVN0cmluZyBOdW1iZXJJ
bXA6OnRvU3RyaW5nKEV4ZWNTdGF0ZSAqKSBjb25zdAotewotICBpZiAodmFsID09IDAuMCkgLy8g
KzAuMCBvciAtMC4wCi0gICAgcmV0dXJuICIwIjsKLSAgcmV0dXJuIFVTdHJpbmc6OmZyb20odmFs
KTsKLX0KLQotSlNPYmplY3QgKk51bWJlckltcDo6dG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBj
b25zdAotewotICBMaXN0IGFyZ3M7Ci0gIGFyZ3MuYXBwZW5kKGNvbnN0X2Nhc3Q8TnVtYmVySW1w
Kj4odGhpcykpOwotICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4oZXhlYy0+bGV4aWNh
bEludGVycHJldGVyKCktPmJ1aWx0aW5OdW1iZXIoKS0+Y29uc3RydWN0KGV4ZWMsYXJncykpOwot
fQotCi0vLyBGSVhNRTogV2UgY2FuIG9wdGltaXplIHRoaXMgdG8gd29yayBsaWtlIEpTVmFsdWU6
OmdldFVJbnQzMi4gSSdtIGlnbm9yaW5nIGl0IGZvciBub3cKLS8vIGJlY2F1c2UgaXQgbmV2ZXIg
c2hvd3MgdXAgb24gcHJvZmlsZXMuCi1ib29sIE51bWJlckltcDo6Z2V0VUludDMyKHVpbnQzMl90
JiB1aW50MzIpIGNvbnN0Ci17Ci0gIHVpbnQzMiA9ICh1aW50MzJfdCl2YWw7Ci0gIHJldHVybiAo
ZG91YmxlKXVpbnQzMiA9PSB2YWw7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBHZXR0ZXJTZXR0ZXJJbXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12b2lk
IEdldHRlclNldHRlckltcDo6bWFyaygpCi17Ci0gICAgaWYgKGdldHRlciAmJiAhZ2V0dGVyLT5t
YXJrZWQoKSkKLSAgICAgICAgZ2V0dGVyLT5tYXJrKCk7Ci0gICAgaWYgKHNldHRlciAmJiAhc2V0
dGVyLT5tYXJrZWQoKSkKLSAgICAgICAgc2V0dGVyLT5tYXJrKCk7Ci19Ci0KLUpTVmFsdWUgKkdl
dHRlclNldHRlckltcDo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgSlNUeXBlKSBjb25zdAotewot
ICAgIGFzc2VydChmYWxzZSk7Ci0gICAgcmV0dXJuIGpzTnVsbCgpOwotfQotCi1ib29sIEdldHRl
clNldHRlckltcDo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0Ci17Ci0gICAgYXNzZXJ0KGZh
bHNlKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWRvdWJsZSBHZXR0ZXJTZXR0ZXJJbXA6OnRv
TnVtYmVyKEV4ZWNTdGF0ZSAqKSBjb25zdAotewotICAgIGFzc2VydChmYWxzZSk7Ci0gICAgcmV0
dXJuIDAuMDsKLX0KLQotVVN0cmluZyBHZXR0ZXJTZXR0ZXJJbXA6OnRvU3RyaW5nKEV4ZWNTdGF0
ZSAqKSBjb25zdAotewotICAgIGFzc2VydChmYWxzZSk7Ci0gICAgcmV0dXJuIFVTdHJpbmc6Om51
bGwoKTsKLX0KLQotSlNPYmplY3QgKkdldHRlclNldHRlckltcDo6dG9PYmplY3QoRXhlY1N0YXRl
ICpleGVjKSBjb25zdAotewotICAgIGFzc2VydChmYWxzZSk7Ci0gICAgcmV0dXJuIGpzTnVsbCgp
LT50b09iamVjdChleGVjKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IExhYmVsU3RhY2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYm9vbCBM
YWJlbFN0YWNrOjpwdXNoKGNvbnN0IElkZW50aWZpZXIgJmlkKQotewotICBpZiAoY29udGFpbnMo
aWQpKQotICAgIHJldHVybiBmYWxzZTsKLQotICBTdGFja0VsZW0gKm5ld3RvcyA9IG5ldyBTdGFj
a0VsZW07Ci0gIG5ld3Rvcy0+aWQgPSBpZDsKLSAgbmV3dG9zLT5wcmV2ID0gdG9zOwotICB0b3Mg
PSBuZXd0b3M7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIExhYmVsU3RhY2s6OmNvbnRhaW5z
KGNvbnN0IElkZW50aWZpZXIgJmlkKSBjb25zdAotewotICBpZiAoaWQuaXNFbXB0eSgpKQotICAg
IHJldHVybiB0cnVlOwotCi0gIGZvciAoU3RhY2tFbGVtICpjdXJyID0gdG9zOyBjdXJyOyBjdXJy
ID0gY3Vyci0+cHJldikKLSAgICBpZiAoY3Vyci0+aWQgPT0gaWQpCi0gICAgICByZXR1cm4gdHJ1
ZTsKLQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBDb250ZXh0SW1wIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8v
IEVDTUEgMTAuMgotQ29udGV4dEltcDo6Q29udGV4dEltcChKU09iamVjdCAqZ2xvYiwgSW50ZXJw
cmV0ZXJJbXAgKmludGVycHJldGVyLCBKU09iamVjdCAqdGhpc1YsIENvZGVUeXBlIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRJbXAgKmNhbGxpbmdDb24sIEZ1bmN0aW9uSW1w
ICpmdW5jLCBjb25zdCBMaXN0ICphcmdzKQotICAgIDogX2ludGVycHJldGVyKGludGVycHJldGVy
KSwgX2Z1bmN0aW9uKGZ1bmMpLCBfYXJndW1lbnRzKGFyZ3MpCi17Ci0gIG1fY29kZVR5cGUgPSB0
eXBlOwotICBfY2FsbGluZ0NvbnRleHQgPSBjYWxsaW5nQ29uOwotCi0gIC8vIGNyZWF0ZSBhbmQg
aW5pdGlhbGl6ZSBhY3RpdmF0aW9uIG9iamVjdCAoRUNNQSAxMC4xLjYpCi0gIGlmICh0eXBlID09
IEZ1bmN0aW9uQ29kZSB8fCB0eXBlID09IEFub255bW91c0NvZGUgKSB7Ci0gICAgYWN0aXZhdGlv
biA9IG5ldyBBY3RpdmF0aW9uSW1wKGZ1bmMsICphcmdzKTsKLSAgICB2YXJpYWJsZSA9IGFjdGl2
YXRpb247Ci0gIH0gZWxzZSB7Ci0gICAgYWN0aXZhdGlvbiA9IE5VTEw7Ci0gICAgdmFyaWFibGUg
PSBnbG9iOwotICB9Ci0KLSAgLy8gRUNNQSAxMC4yCi0gIHN3aXRjaCh0eXBlKSB7Ci0gICAgY2Fz
ZSBFdmFsQ29kZToKLSAgICAgIGlmIChfY2FsbGluZ0NvbnRleHQpIHsKLSAgICAgICAgc2NvcGUg
PSBfY2FsbGluZ0NvbnRleHQtPnNjb3BlQ2hhaW4oKTsKLSAgICAgICAgdmFyaWFibGUgPSBfY2Fs
bGluZ0NvbnRleHQtPnZhcmlhYmxlT2JqZWN0KCk7Ci0gICAgICAgIHRoaXNWYWwgPSBfY2FsbGlu
Z0NvbnRleHQtPnRoaXNWYWx1ZSgpOwotICAgICAgICBicmVhazsKLSAgICAgIH0gLy8gZWxzZSBz
YW1lIGFzIEdsb2JhbENvZGUKLSAgICBjYXNlIEdsb2JhbENvZGU6Ci0gICAgICBzY29wZS5jbGVh
cigpOwotICAgICAgc2NvcGUucHVzaChnbG9iKTsKLSAgICAgIHRoaXNWYWwgPSBzdGF0aWNfY2Fz
dDxKU09iamVjdCo+KGdsb2IpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6
Ci0gICAgY2FzZSBBbm9ueW1vdXNDb2RlOgotICAgICAgaWYgKHR5cGUgPT0gRnVuY3Rpb25Db2Rl
KSB7Ci0gICAgICAgIHNjb3BlID0gZnVuYy0+c2NvcGUoKTsKLSAgICAgICAgc2NvcGUucHVzaChh
Y3RpdmF0aW9uKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHNjb3BlLmNsZWFyKCk7Ci0gICAg
ICAgIHNjb3BlLnB1c2goZ2xvYik7Ci0gICAgICAgIHNjb3BlLnB1c2goYWN0aXZhdGlvbik7Ci0g
ICAgICB9Ci0gICAgICB2YXJpYWJsZSA9IGFjdGl2YXRpb247IC8vIFRPRE86IERvbnREZWxldGUg
PyAoRUNNQSAxMC4yLjMpCi0gICAgICB0aGlzVmFsID0gdGhpc1Y7Ci0gICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgX2ludGVycHJldGVyLT5zZXRDb250ZXh0KHRoaXMpOwotfQotCi1Db250ZXh0SW1w
Ojp+Q29udGV4dEltcCgpCi17Ci0gIF9pbnRlcnByZXRlci0+c2V0Q29udGV4dChfY2FsbGluZ0Nv
bnRleHQpOwotfQotCi12b2lkIENvbnRleHRJbXA6Om1hcmsoKQotewotICBmb3IgKENvbnRleHRJ
bXAgKmNvbnRleHQgPSB0aGlzOyBjb250ZXh0OyBjb250ZXh0ID0gY29udGV4dC0+X2NhbGxpbmdD
b250ZXh0KSB7Ci0gICAgY29udGV4dC0+c2NvcGUubWFyaygpOwotICB9Ci19Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQYXJzZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLXN0YXRpYyBSZWZQdHI8UHJvZ3JhbU5vZGU+ICpwcm9nTm9kZTsK
IGludCBQYXJzZXI6OnNpZCA9IDA7CiAKK3N0YXRpYyBSZWZQdHI8UHJvZ3JhbU5vZGU+KiBwcm9n
Tm9kZTsKIHN0YXRpYyBWZWN0b3I8UmVmUHRyPE5vZGU+ID4qIG5ld05vZGVzOwogc3RhdGljIEhh
c2hTZXQ8Tm9kZSo+KiBub2RlQ3ljbGVzOwogCkBAIC0yNjIsNyArNDQsNiBAQAogewogICAgIGlm
ICghbmV3Tm9kZXMpCiAgICAgICAgIG5ld05vZGVzID0gbmV3IFZlY3RvcjxSZWZQdHI8Tm9kZT4g
PjsKLQogICAgIG5ld05vZGVzLT5hcHBlbmQobm9kZSk7CiB9CiAKQEAgLTI5Miw1MTAgKzczLDUw
IEBACiAgICAgbmV3Tm9kZXMgPSAwOwogfQogCi1SZWZQdHI8UHJvZ3JhbU5vZGU+IFBhcnNlcjo6
cGFyc2UoY29uc3QgVVN0cmluZyAmc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICpjb2RlLCB1
bnNpZ25lZCBpbnQgbGVuZ3RoLCBpbnQgKnNvdXJjZUlkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCAqZXJyTGluZSwgVVN0cmluZyAqZXJyTXNnKQorUGFzc1JlZlB0
cjxQcm9ncmFtTm9kZT4gUGFyc2VyOjpwYXJzZShjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGlu
dCBzdGFydGluZ0xpbmVOdW1iZXIsCisgICAgY29uc3QgVUNoYXIqIGNvZGUsIHVuc2lnbmVkIGxl
bmd0aCwKKyAgICBpbnQqIHNvdXJjZUlkLCBpbnQqIGVyckxpbmUsIFVTdHJpbmcqIGVyck1zZykK
IHsKLSAgaWYgKGVyckxpbmUpCi0gICAgKmVyckxpbmUgPSAtMTsKLSAgaWYgKGVyck1zZykKLSAg
ICAqZXJyTXNnID0gMDsKLSAgaWYgKCFwcm9nTm9kZSkKLSAgICBwcm9nTm9kZSA9IG5ldyBSZWZQ
dHI8UHJvZ3JhbU5vZGU+OwotCi0gIExleGVyOjpjdXJyKCktPnNldENvZGUoc291cmNlVVJMLCBz
dGFydGluZ0xpbmVOdW1iZXIsIGNvZGUsIGxlbmd0aCk7Ci0gICpwcm9nTm9kZSA9IDA7Ci0gIHNp
ZCsrOwotICBpZiAoc291cmNlSWQpCi0gICAgKnNvdXJjZUlkID0gc2lkOwotICAvLyBFbmFibGUg
dGhpcyAoYW5kIHRoZSAjZGVmaW5lIFlZREVCVUcgaW4gZ3JhbW1hci55KSB0byBkZWJ1ZyBhIHBh
cnNlIGVycm9yCi0gIC8vZXh0ZXJuIGludCBranN5eWRlYnVnOwotICAvL2tqc3l5ZGVidWc9MTsK
LSAgaW50IHBhcnNlRXJyb3IgPSBranN5eXBhcnNlKCk7Ci0gIGJvb2wgbGV4RXJyb3IgPSBMZXhl
cjo6Y3VycigpLT5zYXdFcnJvcigpOwotICBMZXhlcjo6Y3VycigpLT5kb25lUGFyc2luZygpOwot
ICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2cgPSAqcHJvZ05vZGU7Ci0gICpwcm9nTm9kZSA9IDA7
Ci0KLSAgY2xlYXJOZXdOb2RlcygpOwotCi0gIGlmIChwYXJzZUVycm9yIHx8IGxleEVycm9yKSB7
Ci0gICAgaW50IGVsaW5lID0gTGV4ZXI6OmN1cnIoKS0+bGluZU5vKCk7CiAgICAgaWYgKGVyckxp
bmUpCi0gICAgICAqZXJyTGluZSA9IGVsaW5lOworICAgICAgICAqZXJyTGluZSA9IC0xOwogICAg
IGlmIChlcnJNc2cpCi0gICAgICAqZXJyTXNnID0gIlBhcnNlIGVycm9yIjsKLSAgICByZXR1cm4g
UmVmUHRyPFByb2dyYW1Ob2RlPigpOwotICB9CisgICAgICAgICplcnJNc2cgPSAwOworICAgIGlm
ICghcHJvZ05vZGUpCisgICAgICAgIHByb2dOb2RlID0gbmV3IFJlZlB0cjxQcm9ncmFtTm9kZT47
CiAKLSAgcmV0dXJuIHByb2c7Ci19CisgICAgTGV4ZXI6OmN1cnIoKS0+c2V0Q29kZShzb3VyY2VV
UkwsIHN0YXJ0aW5nTGluZU51bWJlciwgY29kZSwgbGVuZ3RoKTsKKyAgICAqcHJvZ05vZGUgPSAw
OworICAgIHNpZCsrOworICAgIGlmIChzb3VyY2VJZCkKKyAgICAgICAgKnNvdXJjZUlkID0gc2lk
OwogCi12b2lkIFBhcnNlcjo6YWNjZXB0KFByb2dyYW1Ob2RlICpwcm9nKQotewotICAqcHJvZ05v
ZGUgPSBwcm9nOwotfQorICAgIC8vIEVuYWJsZSB0aGlzIGFuZCB0aGUgI2RlZmluZSBZWURFQlVH
IGluIGdyYW1tYXIueSB0byBkZWJ1ZyBhIHBhcnNlIGVycm9yCisgICAgLy9leHRlcm4gaW50IGtq
c3l5ZGVidWc7CisgICAgLy9ranN5eWRlYnVnPTE7CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBJbnRlcnByZXRlckltcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgaW50IHBhcnNlRXJyb3IgPSBranN5eXBhcnNlKCk7CisgICAgYm9vbCBsZXhFcnJvciA9
IExleGVyOjpjdXJyKCktPnNhd0Vycm9yKCk7CisgICAgTGV4ZXI6OmN1cnIoKS0+ZG9uZVBhcnNp
bmcoKTsKKyAgICBQYXNzUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9nID0gcHJvZ05vZGUtPnJlbGVh
c2UoKTsKKyAgICAqcHJvZ05vZGUgPSAwOwogCi1JbnRlcnByZXRlckltcCogSW50ZXJwcmV0ZXJJ
bXA6OnNfaG9vayA9IDBMOworICAgIGNsZWFyTmV3Tm9kZXMoKTsKIAotdHlwZWRlZiBIYXNoTWFw
PEpTT2JqZWN0ICosIEludGVycHJldGVySW1wICo+IEludGVycHJldGVyTWFwOworICAgIGlmIChw
YXJzZUVycm9yIHx8IGxleEVycm9yKSB7CisgICAgICAgIGludCBlbGluZSA9IExleGVyOjpjdXJy
KCktPmxpbmVObygpOworICAgICAgICBpZiAoZXJyTGluZSkKKyAgICAgICAgICAgICplcnJMaW5l
ID0gZWxpbmU7CisgICAgICAgIGlmIChlcnJNc2cpCisgICAgICAgICAgICAqZXJyTXNnID0gIlBh
cnNlIGVycm9yIjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCi1zdGF0aWMgaW5saW5lIElu
dGVycHJldGVyTWFwICZpbnRlcnByZXRlck1hcCgpCi17Ci0gICAgc3RhdGljIEludGVycHJldGVy
TWFwICptYXAgPSBuZXcgSW50ZXJwcmV0ZXJNYXA7Ci0gICAgcmV0dXJuICptYXA7CisgICAgcmV0
dXJuIHByb2c7CiB9CiAKLUludGVycHJldGVySW1wOjpJbnRlcnByZXRlckltcChJbnRlcnByZXRl
ciAqaW50ZXJwLCBKU09iamVjdCAqZ2xvYikKLSAgICA6IGdsb2JFeGVjKGludGVycCwgMCkKLSAg
ICAsIF9jb250ZXh0KDApCit2b2lkIFBhcnNlcjo6YWNjZXB0KFBhc3NSZWZQdHI8UHJvZ3JhbU5v
ZGU+IHByb2cpCiB7Ci0gIC8vIGFkZCB0aGlzIGludGVycHJldGVyIHRvIHRoZSBnbG9iYWwgY2hh
aW4KLSAgLy8gYXMgYSByb290IHNldCBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uCi0gIEpTTG9jayBs
b2NrOwotCi0gIG1faW50ZXJwcmV0ZXIgPSBpbnRlcnA7Ci0gIGlmIChzX2hvb2spIHsKLSAgICBw
cmV2ID0gc19ob29rOwotICAgIG5leHQgPSBzX2hvb2stPm5leHQ7Ci0gICAgc19ob29rLT5uZXh0
LT5wcmV2ID0gdGhpczsKLSAgICBzX2hvb2stPm5leHQgPSB0aGlzOwotICB9IGVsc2UgewotICAg
IC8vIFRoaXMgaXMgdGhlIGZpcnN0IGludGVycHJldGVyCi0gICAgc19ob29rID0gbmV4dCA9IHBy
ZXYgPSB0aGlzOwotICB9Ci0KLSAgaW50ZXJwcmV0ZXJNYXAoKS5zZXQoZ2xvYiwgdGhpcyk7Ci0K
LSAgZ2xvYmFsID0gZ2xvYjsKLSAgZGJnID0gMDsKLSAgbV9jb21wYXRNb2RlID0gSW50ZXJwcmV0
ZXI6Ok5hdGl2ZU1vZGU7Ci0KLSAgLy8gaW5pdGlhbGl6ZSBwcm9wZXJ0aWVzIG9mIHRoZSBnbG9i
YWwgb2JqZWN0Ci0gIGluaXRHbG9iYWxPYmplY3QoKTsKLQotICByZWN1cnNpb24gPSAwOworICAg
ICpwcm9nTm9kZSA9IHByb2c7CiB9CiAKLXZvaWQgSW50ZXJwcmV0ZXJJbXA6OmluaXRHbG9iYWxP
YmplY3QoKQotewotICBJZGVudGlmaWVyOjppbml0KCk7Ci0gIAotICAvLyBDb250cnVjdG9yIHBy
b3RvdHlwZSBvYmplY3RzIChPYmplY3QucHJvdG90eXBlLCBBcnJheS5wcm90b3R5cGUgZXRjKQot
Ci0gIEZ1bmN0aW9uUHJvdG90eXBlICpmdW5jUHJvdG8gPSBuZXcgRnVuY3Rpb25Qcm90b3R5cGUo
Jmdsb2JFeGVjKTsKLSAgYl9GdW5jdGlvblByb3RvdHlwZSA9IGZ1bmNQcm90bzsKLSAgT2JqZWN0
UHJvdG90eXBlICpvYmpQcm90byA9IG5ldyBPYmplY3RQcm90b3R5cGUoJmdsb2JFeGVjLCBmdW5j
UHJvdG8pOwotICBiX09iamVjdFByb3RvdHlwZSA9IG9ialByb3RvOwotICBmdW5jUHJvdG8tPnNl
dFByb3RvdHlwZShiX09iamVjdFByb3RvdHlwZSk7Ci0KLSAgQXJyYXlQcm90b3R5cGUgKmFycmF5
UHJvdG8gPSBuZXcgQXJyYXlQcm90b3R5cGUoJmdsb2JFeGVjLCBvYmpQcm90byk7Ci0gIGJfQXJy
YXlQcm90b3R5cGUgPSBhcnJheVByb3RvOwotICBTdHJpbmdQcm90b3R5cGUgKnN0cmluZ1Byb3Rv
ID0gbmV3IFN0cmluZ1Byb3RvdHlwZSgmZ2xvYkV4ZWMsIG9ialByb3RvKTsKLSAgYl9TdHJpbmdQ
cm90b3R5cGUgPSBzdHJpbmdQcm90bzsKLSAgQm9vbGVhblByb3RvdHlwZSAqYm9vbGVhblByb3Rv
ID0gbmV3IEJvb2xlYW5Qcm90b3R5cGUoJmdsb2JFeGVjLCBvYmpQcm90bywgZnVuY1Byb3RvKTsK
LSAgYl9Cb29sZWFuUHJvdG90eXBlID0gYm9vbGVhblByb3RvOwotICBOdW1iZXJQcm90b3R5cGUg
Km51bWJlclByb3RvID0gbmV3IE51bWJlclByb3RvdHlwZSgmZ2xvYkV4ZWMsIG9ialByb3RvLCBm
dW5jUHJvdG8pOwotICBiX051bWJlclByb3RvdHlwZSA9IG51bWJlclByb3RvOwotICBEYXRlUHJv
dG90eXBlICpkYXRlUHJvdG8gPSBuZXcgRGF0ZVByb3RvdHlwZSgmZ2xvYkV4ZWMsIG9ialByb3Rv
KTsKLSAgYl9EYXRlUHJvdG90eXBlID0gZGF0ZVByb3RvOwotICBSZWdFeHBQcm90b3R5cGUgKnJl
Z2V4cFByb3RvID0gbmV3IFJlZ0V4cFByb3RvdHlwZSgmZ2xvYkV4ZWMsIG9ialByb3RvLCBmdW5j
UHJvdG8pOwotICBiX1JlZ0V4cFByb3RvdHlwZSA9IHJlZ2V4cFByb3RvOwotICBFcnJvclByb3Rv
dHlwZSAqZXJyb3JQcm90byA9IG5ldyBFcnJvclByb3RvdHlwZSgmZ2xvYkV4ZWMsIG9ialByb3Rv
LCBmdW5jUHJvdG8pOwotICBiX0Vycm9yUHJvdG90eXBlID0gZXJyb3JQcm90bzsKLQotICBzdGF0
aWNfY2FzdDxKU09iamVjdCo+KGdsb2JhbCktPnNldFByb3RvdHlwZShiX09iamVjdFByb3RvdHlw
ZSk7Ci0KLSAgLy8gQ29uc3RydWN0b3JzIChPYmplY3QsIEFycmF5LCBldGMuKQotICBiX09iamVj
dCA9IG5ldyBPYmplY3RPYmplY3RJbXAoJmdsb2JFeGVjLCBvYmpQcm90bywgZnVuY1Byb3RvKTsK
LSAgYl9GdW5jdGlvbiA9IG5ldyBGdW5jdGlvbk9iamVjdEltcCgmZ2xvYkV4ZWMsIGZ1bmNQcm90
byk7Ci0gIGJfQXJyYXkgPSBuZXcgQXJyYXlPYmplY3RJbXAoJmdsb2JFeGVjLCBmdW5jUHJvdG8s
IGFycmF5UHJvdG8pOwotICBiX1N0cmluZyA9IG5ldyBTdHJpbmdPYmplY3RJbXAoJmdsb2JFeGVj
LCBmdW5jUHJvdG8sIHN0cmluZ1Byb3RvKTsKLSAgYl9Cb29sZWFuID0gbmV3IEJvb2xlYW5PYmpl
Y3RJbXAoJmdsb2JFeGVjLCBmdW5jUHJvdG8sIGJvb2xlYW5Qcm90byk7Ci0gIGJfTnVtYmVyID0g
bmV3IE51bWJlck9iamVjdEltcCgmZ2xvYkV4ZWMsIGZ1bmNQcm90bywgbnVtYmVyUHJvdG8pOwot
ICBiX0RhdGUgPSBuZXcgRGF0ZU9iamVjdEltcCgmZ2xvYkV4ZWMsIGZ1bmNQcm90bywgZGF0ZVBy
b3RvKTsKLSAgYl9SZWdFeHAgPSBuZXcgUmVnRXhwT2JqZWN0SW1wKCZnbG9iRXhlYywgZnVuY1By
b3RvLCByZWdleHBQcm90byk7Ci0gIGJfRXJyb3IgPSBuZXcgRXJyb3JPYmplY3RJbXAoJmdsb2JF
eGVjLCBmdW5jUHJvdG8sIGVycm9yUHJvdG8pOwotCi0gIC8vIEVycm9yIG9iamVjdCBwcm90b3R5
cGVzCi0gIGJfZXZhbEVycm9yUHJvdG90eXBlID0gbmV3IE5hdGl2ZUVycm9yUHJvdG90eXBlKCZn
bG9iRXhlYywgZXJyb3JQcm90bywgRXZhbEVycm9yLCAiRXZhbEVycm9yIiwgIkV2YWxFcnJvciIp
OwotICBiX3JhbmdlRXJyb3JQcm90b3R5cGUgPSBuZXcgTmF0aXZlRXJyb3JQcm90b3R5cGUoJmds
b2JFeGVjLCBlcnJvclByb3RvLCBSYW5nZUVycm9yLCAiUmFuZ2VFcnJvciIsICJSYW5nZUVycm9y
Iik7Ci0gIGJfcmVmZXJlbmNlRXJyb3JQcm90b3R5cGUgPSBuZXcgTmF0aXZlRXJyb3JQcm90b3R5
cGUoJmdsb2JFeGVjLCBlcnJvclByb3RvLCBSZWZlcmVuY2VFcnJvciwgIlJlZmVyZW5jZUVycm9y
IiwgIlJlZmVyZW5jZUVycm9yIik7Ci0gIGJfc3ludGF4RXJyb3JQcm90b3R5cGUgPSBuZXcgTmF0
aXZlRXJyb3JQcm90b3R5cGUoJmdsb2JFeGVjLCBlcnJvclByb3RvLCBTeW50YXhFcnJvciwgIlN5
bnRheEVycm9yIiwgIlN5bnRheEVycm9yIik7Ci0gIGJfdHlwZUVycm9yUHJvdG90eXBlID0gbmV3
IE5hdGl2ZUVycm9yUHJvdG90eXBlKCZnbG9iRXhlYywgZXJyb3JQcm90bywgVHlwZUVycm9yLCAi
VHlwZUVycm9yIiwgIlR5cGVFcnJvciIpOwotICBiX3VyaUVycm9yUHJvdG90eXBlID0gbmV3IE5h
dGl2ZUVycm9yUHJvdG90eXBlKCZnbG9iRXhlYywgZXJyb3JQcm90bywgVVJJRXJyb3IsICJVUklF
cnJvciIsICJVUklFcnJvciIpOwotCi0gIC8vIEVycm9yIG9iamVjdHMKLSAgYl9ldmFsRXJyb3Ig
PSBuZXcgTmF0aXZlRXJyb3JJbXAoJmdsb2JFeGVjLCBmdW5jUHJvdG8sIGJfZXZhbEVycm9yUHJv
dG90eXBlKTsKLSAgYl9yYW5nZUVycm9yID0gbmV3IE5hdGl2ZUVycm9ySW1wKCZnbG9iRXhlYywg
ZnVuY1Byb3RvLCBiX3JhbmdlRXJyb3JQcm90b3R5cGUpOwotICBiX3JlZmVyZW5jZUVycm9yID0g
bmV3IE5hdGl2ZUVycm9ySW1wKCZnbG9iRXhlYywgZnVuY1Byb3RvLCBiX3JlZmVyZW5jZUVycm9y
UHJvdG90eXBlKTsKLSAgYl9zeW50YXhFcnJvciA9IG5ldyBOYXRpdmVFcnJvckltcCgmZ2xvYkV4
ZWMsIGZ1bmNQcm90bywgYl9zeW50YXhFcnJvclByb3RvdHlwZSk7Ci0gIGJfdHlwZUVycm9yID0g
bmV3IE5hdGl2ZUVycm9ySW1wKCZnbG9iRXhlYywgZnVuY1Byb3RvLCBiX3R5cGVFcnJvclByb3Rv
dHlwZSk7Ci0gIGJfdXJpRXJyb3IgPSBuZXcgTmF0aXZlRXJyb3JJbXAoJmdsb2JFeGVjLCBmdW5j
UHJvdG8sIGJfdXJpRXJyb3JQcm90b3R5cGUpOwotCi0gIC8vIEVDTUEgMTUuMy40LjEKLSAgZnVu
Y1Byb3RvLT5wdXQoJmdsb2JFeGVjLCBjb25zdHJ1Y3RvclByb3BlcnR5TmFtZSwgYl9GdW5jdGlv
biwgRG9udEVudW0pOwotCi0gIGdsb2JhbC0+cHV0KCZnbG9iRXhlYywgIk9iamVjdCIsIGJfT2Jq
ZWN0LCBEb250RW51bSk7Ci0gIGdsb2JhbC0+cHV0KCZnbG9iRXhlYywgIkZ1bmN0aW9uIiwgYl9G
dW5jdGlvbiwgRG9udEVudW0pOwotICBnbG9iYWwtPnB1dCgmZ2xvYkV4ZWMsICJBcnJheSIsIGJf
QXJyYXksIERvbnRFbnVtKTsKLSAgZ2xvYmFsLT5wdXQoJmdsb2JFeGVjLCAiQm9vbGVhbiIsIGJf
Qm9vbGVhbiwgRG9udEVudW0pOwotICBnbG9iYWwtPnB1dCgmZ2xvYkV4ZWMsICJTdHJpbmciLCBi
X1N0cmluZywgRG9udEVudW0pOwotICBnbG9iYWwtPnB1dCgmZ2xvYkV4ZWMsICJOdW1iZXIiLCBi
X051bWJlciwgRG9udEVudW0pOwotICBnbG9iYWwtPnB1dCgmZ2xvYkV4ZWMsICJEYXRlIiwgYl9E
YXRlLCBEb250RW51bSk7Ci0gIGdsb2JhbC0+cHV0KCZnbG9iRXhlYywgIlJlZ0V4cCIsIGJfUmVn
RXhwLCBEb250RW51bSk7Ci0gIGdsb2JhbC0+cHV0KCZnbG9iRXhlYywgIkVycm9yIiwgYl9FcnJv
ciwgRG9udEVudW0pOwotICAvLyBVc2luZyBJbnRlcm5hbCBmb3IgdGhvc2UgdG8gaGF2ZSBzb21l
dGhpbmcgIT0gMAotICAvLyAoc2VlIGtqc193aW5kb3cpLiBNYXliZSBEb250RW51bSB3b3VsZCBi
ZSBvayB0b28gPwotICBnbG9iYWwtPnB1dCgmZ2xvYkV4ZWMsICJFdmFsRXJyb3IiLGJfZXZhbEVy
cm9yLCBJbnRlcm5hbCk7Ci0gIGdsb2JhbC0+cHV0KCZnbG9iRXhlYywgIlJhbmdlRXJyb3IiLGJf
cmFuZ2VFcnJvciwgSW50ZXJuYWwpOwotICBnbG9iYWwtPnB1dCgmZ2xvYkV4ZWMsICJSZWZlcmVu
Y2VFcnJvciIsYl9yZWZlcmVuY2VFcnJvciwgSW50ZXJuYWwpOwotICBnbG9iYWwtPnB1dCgmZ2xv
YkV4ZWMsICJTeW50YXhFcnJvciIsYl9zeW50YXhFcnJvciwgSW50ZXJuYWwpOwotICBnbG9iYWwt
PnB1dCgmZ2xvYkV4ZWMsICJUeXBlRXJyb3IiLGJfdHlwZUVycm9yLCBJbnRlcm5hbCk7Ci0gIGds
b2JhbC0+cHV0KCZnbG9iRXhlYywgIlVSSUVycm9yIixiX3VyaUVycm9yLCBJbnRlcm5hbCk7Ci0K
LSAgLy8gU2V0IHRoZSBjb25zdHJ1Y3RvclByb3BlcnR5TmFtZSBwcm9wZXJ0eSBvZiBhbGwgYnVp
bHRpbiBjb25zdHJ1Y3RvcnMKLSAgb2JqUHJvdG8tPnB1dCgmZ2xvYkV4ZWMsIGNvbnN0cnVjdG9y
UHJvcGVydHlOYW1lLCBiX09iamVjdCwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OwotICBmdW5jUHJvdG8tPnB1dCgmZ2xvYkV4ZWMsIGNvbnN0cnVjdG9yUHJvcGVydHlOYW1lLCBi
X0Z1bmN0aW9uLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7Ci0gIGFycmF5UHJv
dG8tPnB1dCgmZ2xvYkV4ZWMsIGNvbnN0cnVjdG9yUHJvcGVydHlOYW1lLCBiX0FycmF5LCBEb250
RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7Ci0gIGJvb2xlYW5Qcm90by0+cHV0KCZnbG9i
RXhlYywgY29uc3RydWN0b3JQcm9wZXJ0eU5hbWUsIGJfQm9vbGVhbiwgRG9udEVudW0gfCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpOwotICBzdHJpbmdQcm90by0+cHV0KCZnbG9iRXhlYywgY29uc3Ry
dWN0b3JQcm9wZXJ0eU5hbWUsIGJfU3RyaW5nLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFk
T25seSk7Ci0gIG51bWJlclByb3RvLT5wdXQoJmdsb2JFeGVjLCBjb25zdHJ1Y3RvclByb3BlcnR5
TmFtZSwgYl9OdW1iZXIsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgZGF0
ZVByb3RvLT5wdXQoJmdsb2JFeGVjLCBjb25zdHJ1Y3RvclByb3BlcnR5TmFtZSwgYl9EYXRlLCBE
b250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7Ci0gIHJlZ2V4cFByb3RvLT5wdXQoJmds
b2JFeGVjLCBjb25zdHJ1Y3RvclByb3BlcnR5TmFtZSwgYl9SZWdFeHAsIERvbnRFbnVtIHwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgZXJyb3JQcm90by0+cHV0KCZnbG9iRXhlYywgY29uc3Ry
dWN0b3JQcm9wZXJ0eU5hbWUsIGJfRXJyb3IsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5KTsKLSAgYl9ldmFsRXJyb3JQcm90b3R5cGUtPnB1dCgmZ2xvYkV4ZWMsIGNvbnN0cnVjdG9y
UHJvcGVydHlOYW1lLCBiX2V2YWxFcnJvciwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpOwotICBiX3JhbmdlRXJyb3JQcm90b3R5cGUtPnB1dCgmZ2xvYkV4ZWMsIGNvbnN0cnVjdG9y
UHJvcGVydHlOYW1lLCBiX3JhbmdlRXJyb3IsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5KTsKLSAgYl9yZWZlcmVuY2VFcnJvclByb3RvdHlwZS0+cHV0KCZnbG9iRXhlYywgY29uc3Ry
dWN0b3JQcm9wZXJ0eU5hbWUsIGJfcmVmZXJlbmNlRXJyb3IsIERvbnRFbnVtIHwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKLSAgYl9zeW50YXhFcnJvclByb3RvdHlwZS0+cHV0KCZnbG9iRXhlYywg
Y29uc3RydWN0b3JQcm9wZXJ0eU5hbWUsIGJfc3ludGF4RXJyb3IsIERvbnRFbnVtIHwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KTsKLSAgYl90eXBlRXJyb3JQcm90b3R5cGUtPnB1dCgmZ2xvYkV4ZWMs
IGNvbnN0cnVjdG9yUHJvcGVydHlOYW1lLCBiX3R5cGVFcnJvciwgRG9udEVudW0gfCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpOwotICBiX3VyaUVycm9yUHJvdG90eXBlLT5wdXQoJmdsb2JFeGVjLCBj
b25zdHJ1Y3RvclByb3BlcnR5TmFtZSwgYl91cmlFcnJvciwgRG9udEVudW0gfCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpOwotCi0gIC8vIGJ1aWx0LWluIHZhbHVlcwotICBnbG9iYWwtPnB1dCgmZ2xv
YkV4ZWMsICJOYU4iLCAgICAgICAganNOYU4oKSwgRG9udEVudW18RG9udERlbGV0ZSk7Ci0gIGds
b2JhbC0+cHV0KCZnbG9iRXhlYywgIkluZmluaXR5IiwgICBqc051bWJlcihJbmYpLCBEb250RW51
bXxEb250RGVsZXRlKTsKLSAgZ2xvYmFsLT5wdXQoJmdsb2JFeGVjLCAidW5kZWZpbmVkIiwgIGpz
VW5kZWZpbmVkKCksIERvbnRFbnVtfERvbnREZWxldGUpOwotCi0gIC8vIGJ1aWx0LWluIGZ1bmN0
aW9ucwotICBnbG9iYWwtPnB1dERpcmVjdEZ1bmN0aW9uKG5ldyBHbG9iYWxGdW5jSW1wKCZnbG9i
RXhlYywgZnVuY1Byb3RvLCBHbG9iYWxGdW5jSW1wOjpFdmFsLCAxLCAiZXZhbCIpLCBEb250RW51
bSk7Ci0gIGdsb2JhbC0+cHV0RGlyZWN0RnVuY3Rpb24obmV3IEdsb2JhbEZ1bmNJbXAoJmdsb2JF
eGVjLCBmdW5jUHJvdG8sIEdsb2JhbEZ1bmNJbXA6OlBhcnNlSW50LCAyLCAicGFyc2VJbnQiKSwg
RG9udEVudW0pOwotICBnbG9iYWwtPnB1dERpcmVjdEZ1bmN0aW9uKG5ldyBHbG9iYWxGdW5jSW1w
KCZnbG9iRXhlYywgZnVuY1Byb3RvLCBHbG9iYWxGdW5jSW1wOjpQYXJzZUZsb2F0LCAxLCAicGFy
c2VGbG9hdCIpLCBEb250RW51bSk7Ci0gIGdsb2JhbC0+cHV0RGlyZWN0RnVuY3Rpb24obmV3IEds
b2JhbEZ1bmNJbXAoJmdsb2JFeGVjLCBmdW5jUHJvdG8sIEdsb2JhbEZ1bmNJbXA6OklzTmFOLCAx
LCAiaXNOYU4iKSwgRG9udEVudW0pOwotICBnbG9iYWwtPnB1dERpcmVjdEZ1bmN0aW9uKG5ldyBH
bG9iYWxGdW5jSW1wKCZnbG9iRXhlYywgZnVuY1Byb3RvLCBHbG9iYWxGdW5jSW1wOjpJc0Zpbml0
ZSwgMSwgImlzRmluaXRlIiksIERvbnRFbnVtKTsKLSAgZ2xvYmFsLT5wdXREaXJlY3RGdW5jdGlv
bihuZXcgR2xvYmFsRnVuY0ltcCgmZ2xvYkV4ZWMsIGZ1bmNQcm90bywgR2xvYmFsRnVuY0ltcDo6
RXNjYXBlLCAxLCAiZXNjYXBlIiksIERvbnRFbnVtKTsKLSAgZ2xvYmFsLT5wdXREaXJlY3RGdW5j
dGlvbihuZXcgR2xvYmFsRnVuY0ltcCgmZ2xvYkV4ZWMsIGZ1bmNQcm90bywgR2xvYmFsRnVuY0lt
cDo6VW5Fc2NhcGUsIDEsICJ1bmVzY2FwZSIpLCBEb250RW51bSk7Ci0gIGdsb2JhbC0+cHV0RGly
ZWN0RnVuY3Rpb24obmV3IEdsb2JhbEZ1bmNJbXAoJmdsb2JFeGVjLCBmdW5jUHJvdG8sIEdsb2Jh
bEZ1bmNJbXA6OkRlY29kZVVSSSwgMSwgImRlY29kZVVSSSIpLCBEb250RW51bSk7Ci0gIGdsb2Jh
bC0+cHV0RGlyZWN0RnVuY3Rpb24obmV3IEdsb2JhbEZ1bmNJbXAoJmdsb2JFeGVjLCBmdW5jUHJv
dG8sIEdsb2JhbEZ1bmNJbXA6OkRlY29kZVVSSUNvbXBvbmVudCwgMSwgImRlY29kZVVSSUNvbXBv
bmVudCIpLCBEb250RW51bSk7Ci0gIGdsb2JhbC0+cHV0RGlyZWN0RnVuY3Rpb24obmV3IEdsb2Jh
bEZ1bmNJbXAoJmdsb2JFeGVjLCBmdW5jUHJvdG8sIEdsb2JhbEZ1bmNJbXA6OkVuY29kZVVSSSwg
MSwgImVuY29kZVVSSSIpLCBEb250RW51bSk7Ci0gIGdsb2JhbC0+cHV0RGlyZWN0RnVuY3Rpb24o
bmV3IEdsb2JhbEZ1bmNJbXAoJmdsb2JFeGVjLCBmdW5jUHJvdG8sIEdsb2JhbEZ1bmNJbXA6OkVu
Y29kZVVSSUNvbXBvbmVudCwgMSwgImVuY29kZVVSSUNvbXBvbmVudCIpLCBEb250RW51bSk7Ci0j
aWZuZGVmIE5ERUJVRwotICBnbG9iYWwtPnB1dERpcmVjdEZ1bmN0aW9uKG5ldyBHbG9iYWxGdW5j
SW1wKCZnbG9iRXhlYywgZnVuY1Byb3RvLCBHbG9iYWxGdW5jSW1wOjpLSlNQcmludCwgMSwgImtq
c3ByaW50IiksIERvbnRFbnVtKTsKLSNlbmRpZgotCi0gIC8vIGJ1aWx0LWluIG9iamVjdHMKLSAg
Z2xvYmFsLT5wdXQoJmdsb2JFeGVjLCAiTWF0aCIsIG5ldyBNYXRoT2JqZWN0SW1wKCZnbG9iRXhl
Yywgb2JqUHJvdG8pLCBEb250RW51bSk7CiB9Ci0KLUludGVycHJldGVySW1wOjp+SW50ZXJwcmV0
ZXJJbXAoKQotewotICBpZiAoZGJnKQotICAgIGRiZy0+ZGV0YWNoKG1faW50ZXJwcmV0ZXIpOwot
ICBjbGVhcigpOwotfQotCi12b2lkIEludGVycHJldGVySW1wOjpjbGVhcigpCi17Ci0gIC8vZnBy
aW50ZihzdGRlcnIsIkludGVycHJldGVySW1wOjpjbGVhclxuIik7Ci0gIC8vIHJlbW92ZSBmcm9t
IGdsb2JhbCBjaGFpbiAoc2VlIGluaXQoKSkKLSAgSlNMb2NrIGxvY2s7Ci0KLSAgbmV4dC0+cHJl
diA9IHByZXY7Ci0gIHByZXYtPm5leHQgPSBuZXh0OwotICBzX2hvb2sgPSBuZXh0OwotICBpZiAo
c19ob29rID09IHRoaXMpCi0gIHsKLSAgICAvLyBUaGlzIHdhcyB0aGUgbGFzdCBpbnRlcnByZXRl
cgotICAgIHNfaG9vayA9IDBMOwotICB9Ci0gIGludGVycHJldGVyTWFwKCkucmVtb3ZlKGdsb2Jh
bCk7Ci19Ci0KLXZvaWQgSW50ZXJwcmV0ZXJJbXA6Om1hcmsoKQotewotICBpZiAobV9pbnRlcnBy
ZXRlcikKLSAgICBtX2ludGVycHJldGVyLT5tYXJrKCk7Ci0gIGlmIChfY29udGV4dCkKLSAgICBf
Y29udGV4dC0+bWFyaygpOwotICBpZiAoZ2xvYmFsKQotICAgICAgZ2xvYmFsLT5tYXJrKCk7Ci0g
IGlmIChnbG9iRXhlYy5fZXhjZXB0aW9uKQotICAgICAgZ2xvYkV4ZWMuX2V4Y2VwdGlvbi0+bWFy
aygpOwotfQotCi1ib29sIEludGVycHJldGVySW1wOjpjaGVja1N5bnRheChjb25zdCBVU3RyaW5n
ICZjb2RlKQotewotICBKU0xvY2sgbG9jazsKLQotICAvLyBQYXJzZXI6OnBhcnNlKCkgcmV0dXJu
cyAwIGluIGEgc3ludGF4IGVycm9yIG9jY3Vycywgc28gd2UganVzdCBjaGVjayBmb3IgdGhhdAot
ICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dOb2RlID0gUGFyc2VyOjpwYXJzZShVU3RyaW5nKCks
IDAsIGNvZGUuZGF0YSgpLCBjb2RlLnNpemUoKSwgMCwgMCwgMCk7Ci0gIHJldHVybiBwcm9nTm9k
ZTsKLX0KLQotQ29tcGxldGlvbiBJbnRlcnByZXRlckltcDo6ZXZhbHVhdGUoY29uc3QgVUNoYXIq
IGNvZGUsIGludCBjb2RlTGVuZ3RoLCBKU1ZhbHVlKiB0aGlzViwgY29uc3QgVVN0cmluZyYgc291
cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKQotewotICBKU0xvY2sgbG9jazsKLQotICAv
LyBwcmV2ZW50IGFnYWluc3QgaW5maW5pdGUgcmVjdXJzaW9uCi0gIGlmIChyZWN1cnNpb24gPj0g
MjApCi0gICAgcmV0dXJuIENvbXBsZXRpb24oVGhyb3csIEVycm9yOjpjcmVhdGUoJmdsb2JFeGVj
LCBHZW5lcmFsRXJyb3IsICJSZWN1cnNpb24gdG9vIGRlZXAiKSk7Ci0KLSAgLy8gcGFyc2UgdGhl
IHNvdXJjZSBjb2RlCi0gIGludCBzaWQ7Ci0gIGludCBlcnJMaW5lOwotICBVU3RyaW5nIGVyck1z
ZzsKLSAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9nTm9kZSA9IFBhcnNlcjo6cGFyc2Uoc291cmNl
VVJMLCBzdGFydGluZ0xpbmVOdW1iZXIsIGNvZGUsIGNvZGVMZW5ndGgsICZzaWQsICZlcnJMaW5l
LCAmZXJyTXNnKTsKLQotICAvLyBub3RpZnkgZGVidWdnZXIgdGhhdCBzb3VyY2UgaGFzIGJlZW4g
cGFyc2VkCi0gIGlmIChkYmcpIHsKLSAgICBib29sIGNvbnQgPSBkYmctPnNvdXJjZVBhcnNlZCgm
Z2xvYkV4ZWMsIHNpZCwgc291cmNlVVJMLCBVU3RyaW5nKGNvZGUsIGNvZGVMZW5ndGgpLCBlcnJM
aW5lKTsKLSAgICBpZiAoIWNvbnQpCi0gICAgICByZXR1cm4gQ29tcGxldGlvbihCcmVhayk7Ci0g
IH0KLSAgCi0gIC8vIG5vIHByb2dyYW0gbm9kZSBtZWFucyBhIHN5bnRheCBlcnJvciBvY2N1cnJl
ZAotICBpZiAoIXByb2dOb2RlKQotICAgIHJldHVybiBDb21wbGV0aW9uKFRocm93LCBFcnJvcjo6
Y3JlYXRlKCZnbG9iRXhlYywgU3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwgc2lkLCAmc291
cmNlVVJMKSk7Ci0KLSAgZ2xvYkV4ZWMuY2xlYXJFeGNlcHRpb24oKTsKLQotICByZWN1cnNpb24r
KzsKLQotICBKU09iamVjdCogZ2xvYmFsT2JqID0gZ2xvYmFsT2JqZWN0KCk7Ci0gIEpTT2JqZWN0
KiB0aGlzT2JqID0gZ2xvYmFsT2JqOwotCi0gIC8vICJ0aGlzIiBtdXN0IGJlIGFuIG9iamVjdC4u
LiB1c2Ugc2FtZSBydWxlcyBhcyBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkoKQotICBpZiAodGhp
c1YgJiYgIXRoaXNWLT5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgdGhpc09iaiA9IHRoaXNW
LT50b09iamVjdCgmZ2xvYkV4ZWMpOwotCi0gIENvbXBsZXRpb24gcmVzOwotICBpZiAoZ2xvYkV4
ZWMuaGFkRXhjZXB0aW9uKCkpCi0gICAgLy8gdGhlIHRoaXNWLT50b09iamVjdCgpIGNvbnZlcnNp
b24gYWJvdmUgbWlnaHQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uIC0gaWYgc28sIHByb3BhZ2F0
ZSBpdAotICAgIHJlcyA9IENvbXBsZXRpb24oVGhyb3csIGdsb2JFeGVjLmV4Y2VwdGlvbigpKTsK
LSAgZWxzZSB7Ci0gICAgLy8gZXhlY3V0ZSB0aGUgY29kZQotICAgIENvbnRleHRJbXAgY3R4KGds
b2JhbE9iaiwgdGhpcywgdGhpc09iaik7Ci0gICAgRXhlY1N0YXRlIG5ld0V4ZWMobV9pbnRlcnBy
ZXRlciwgJmN0eCk7Ci0gICAgcHJvZ05vZGUtPnByb2Nlc3NWYXJEZWNscygmbmV3RXhlYyk7Ci0g
ICAgcmVzID0gcHJvZ05vZGUtPmV4ZWN1dGUoJm5ld0V4ZWMpOwotICB9Ci0KLSAgcmVjdXJzaW9u
LS07Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotdm9pZCBJbnRlcnByZXRlckltcDo6c2F2ZUJ1aWx0
aW5zIChTYXZlZEJ1aWx0aW5zICZidWlsdGlucykgY29uc3QKLXsKLSAgaWYgKCFidWlsdGlucy5f
aW50ZXJuYWwpIHsKLSAgICBidWlsdGlucy5faW50ZXJuYWwgPSBuZXcgU2F2ZWRCdWlsdGluc0lu
dGVybmFsOwotICB9Ci0KLSAgYnVpbHRpbnMuX2ludGVybmFsLT5iX09iamVjdCA9IGJfT2JqZWN0
OwotICBidWlsdGlucy5faW50ZXJuYWwtPmJfRnVuY3Rpb24gPSBiX0Z1bmN0aW9uOwotICBidWls
dGlucy5faW50ZXJuYWwtPmJfQXJyYXkgPSBiX0FycmF5OwotICBidWlsdGlucy5faW50ZXJuYWwt
PmJfQm9vbGVhbiA9IGJfQm9vbGVhbjsKLSAgYnVpbHRpbnMuX2ludGVybmFsLT5iX1N0cmluZyA9
IGJfU3RyaW5nOwotICBidWlsdGlucy5faW50ZXJuYWwtPmJfTnVtYmVyID0gYl9OdW1iZXI7Ci0g
IGJ1aWx0aW5zLl9pbnRlcm5hbC0+Yl9EYXRlID0gYl9EYXRlOwotICBidWlsdGlucy5faW50ZXJu
YWwtPmJfUmVnRXhwID0gYl9SZWdFeHA7Ci0gIGJ1aWx0aW5zLl9pbnRlcm5hbC0+Yl9FcnJvciA9
IGJfRXJyb3I7Ci0gIAotICBidWlsdGlucy5faW50ZXJuYWwtPmJfT2JqZWN0UHJvdG90eXBlID0g
Yl9PYmplY3RQcm90b3R5cGU7Ci0gIGJ1aWx0aW5zLl9pbnRlcm5hbC0+Yl9GdW5jdGlvblByb3Rv
dHlwZSA9IGJfRnVuY3Rpb25Qcm90b3R5cGU7Ci0gIGJ1aWx0aW5zLl9pbnRlcm5hbC0+Yl9BcnJh
eVByb3RvdHlwZSA9IGJfQXJyYXlQcm90b3R5cGU7Ci0gIGJ1aWx0aW5zLl9pbnRlcm5hbC0+Yl9C
b29sZWFuUHJvdG90eXBlID0gYl9Cb29sZWFuUHJvdG90eXBlOwotICBidWlsdGlucy5faW50ZXJu
YWwtPmJfU3RyaW5nUHJvdG90eXBlID0gYl9TdHJpbmdQcm90b3R5cGU7Ci0gIGJ1aWx0aW5zLl9p
bnRlcm5hbC0+Yl9OdW1iZXJQcm90b3R5cGUgPSBiX051bWJlclByb3RvdHlwZTsKLSAgYnVpbHRp
bnMuX2ludGVybmFsLT5iX0RhdGVQcm90b3R5cGUgPSBiX0RhdGVQcm90b3R5cGU7Ci0gIGJ1aWx0
aW5zLl9pbnRlcm5hbC0+Yl9SZWdFeHBQcm90b3R5cGUgPSBiX1JlZ0V4cFByb3RvdHlwZTsKLSAg
YnVpbHRpbnMuX2ludGVybmFsLT5iX0Vycm9yUHJvdG90eXBlID0gYl9FcnJvclByb3RvdHlwZTsK
LSAgCi0gIGJ1aWx0aW5zLl9pbnRlcm5hbC0+Yl9ldmFsRXJyb3IgPSBiX2V2YWxFcnJvcjsKLSAg
YnVpbHRpbnMuX2ludGVybmFsLT5iX3JhbmdlRXJyb3IgPSBiX3JhbmdlRXJyb3I7Ci0gIGJ1aWx0
aW5zLl9pbnRlcm5hbC0+Yl9yZWZlcmVuY2VFcnJvciA9IGJfcmVmZXJlbmNlRXJyb3I7Ci0gIGJ1
aWx0aW5zLl9pbnRlcm5hbC0+Yl9zeW50YXhFcnJvciA9IGJfc3ludGF4RXJyb3I7Ci0gIGJ1aWx0
aW5zLl9pbnRlcm5hbC0+Yl90eXBlRXJyb3IgPSBiX3R5cGVFcnJvcjsKLSAgYnVpbHRpbnMuX2lu
dGVybmFsLT5iX3VyaUVycm9yID0gYl91cmlFcnJvcjsKLSAgCi0gIGJ1aWx0aW5zLl9pbnRlcm5h
bC0+Yl9ldmFsRXJyb3JQcm90b3R5cGUgPSBiX2V2YWxFcnJvclByb3RvdHlwZTsKLSAgYnVpbHRp
bnMuX2ludGVybmFsLT5iX3JhbmdlRXJyb3JQcm90b3R5cGUgPSBiX3JhbmdlRXJyb3JQcm90b3R5
cGU7Ci0gIGJ1aWx0aW5zLl9pbnRlcm5hbC0+Yl9yZWZlcmVuY2VFcnJvclByb3RvdHlwZSA9IGJf
cmVmZXJlbmNlRXJyb3JQcm90b3R5cGU7Ci0gIGJ1aWx0aW5zLl9pbnRlcm5hbC0+Yl9zeW50YXhF
cnJvclByb3RvdHlwZSA9IGJfc3ludGF4RXJyb3JQcm90b3R5cGU7Ci0gIGJ1aWx0aW5zLl9pbnRl
cm5hbC0+Yl90eXBlRXJyb3JQcm90b3R5cGUgPSBiX3R5cGVFcnJvclByb3RvdHlwZTsKLSAgYnVp
bHRpbnMuX2ludGVybmFsLT5iX3VyaUVycm9yUHJvdG90eXBlID0gYl91cmlFcnJvclByb3RvdHlw
ZTsKLX0KLQotdm9pZCBJbnRlcnByZXRlckltcDo6cmVzdG9yZUJ1aWx0aW5zIChjb25zdCBTYXZl
ZEJ1aWx0aW5zICZidWlsdGlucykKLXsKLSAgaWYgKCFidWlsdGlucy5faW50ZXJuYWwpIHsKLSAg
ICByZXR1cm47Ci0gIH0KLQotICBiX09iamVjdCA9IGJ1aWx0aW5zLl9pbnRlcm5hbC0+Yl9PYmpl
Y3Q7Ci0gIGJfRnVuY3Rpb24gPSBidWlsdGlucy5faW50ZXJuYWwtPmJfRnVuY3Rpb247Ci0gIGJf
QXJyYXkgPSBidWlsdGlucy5faW50ZXJuYWwtPmJfQXJyYXk7Ci0gIGJfQm9vbGVhbiA9IGJ1aWx0
aW5zLl9pbnRlcm5hbC0+Yl9Cb29sZWFuOwotICBiX1N0cmluZyA9IGJ1aWx0aW5zLl9pbnRlcm5h
bC0+Yl9TdHJpbmc7Ci0gIGJfTnVtYmVyID0gYnVpbHRpbnMuX2ludGVybmFsLT5iX051bWJlcjsK
LSAgYl9EYXRlID0gYnVpbHRpbnMuX2ludGVybmFsLT5iX0RhdGU7Ci0gIGJfUmVnRXhwID0gYnVp
bHRpbnMuX2ludGVybmFsLT5iX1JlZ0V4cDsKLSAgYl9FcnJvciA9IGJ1aWx0aW5zLl9pbnRlcm5h
bC0+Yl9FcnJvcjsKLSAgCi0gIGJfT2JqZWN0UHJvdG90eXBlID0gYnVpbHRpbnMuX2ludGVybmFs
LT5iX09iamVjdFByb3RvdHlwZTsKLSAgYl9GdW5jdGlvblByb3RvdHlwZSA9IGJ1aWx0aW5zLl9p
bnRlcm5hbC0+Yl9GdW5jdGlvblByb3RvdHlwZTsKLSAgYl9BcnJheVByb3RvdHlwZSA9IGJ1aWx0
aW5zLl9pbnRlcm5hbC0+Yl9BcnJheVByb3RvdHlwZTsKLSAgYl9Cb29sZWFuUHJvdG90eXBlID0g
YnVpbHRpbnMuX2ludGVybmFsLT5iX0Jvb2xlYW5Qcm90b3R5cGU7Ci0gIGJfU3RyaW5nUHJvdG90
eXBlID0gYnVpbHRpbnMuX2ludGVybmFsLT5iX1N0cmluZ1Byb3RvdHlwZTsKLSAgYl9OdW1iZXJQ
cm90b3R5cGUgPSBidWlsdGlucy5faW50ZXJuYWwtPmJfTnVtYmVyUHJvdG90eXBlOwotICBiX0Rh
dGVQcm90b3R5cGUgPSBidWlsdGlucy5faW50ZXJuYWwtPmJfRGF0ZVByb3RvdHlwZTsKLSAgYl9S
ZWdFeHBQcm90b3R5cGUgPSBidWlsdGlucy5faW50ZXJuYWwtPmJfUmVnRXhwUHJvdG90eXBlOwot
ICBiX0Vycm9yUHJvdG90eXBlID0gYnVpbHRpbnMuX2ludGVybmFsLT5iX0Vycm9yUHJvdG90eXBl
OwotICAKLSAgYl9ldmFsRXJyb3IgPSBidWlsdGlucy5faW50ZXJuYWwtPmJfZXZhbEVycm9yOwot
ICBiX3JhbmdlRXJyb3IgPSBidWlsdGlucy5faW50ZXJuYWwtPmJfcmFuZ2VFcnJvcjsKLSAgYl9y
ZWZlcmVuY2VFcnJvciA9IGJ1aWx0aW5zLl9pbnRlcm5hbC0+Yl9yZWZlcmVuY2VFcnJvcjsKLSAg
Yl9zeW50YXhFcnJvciA9IGJ1aWx0aW5zLl9pbnRlcm5hbC0+Yl9zeW50YXhFcnJvcjsKLSAgYl90
eXBlRXJyb3IgPSBidWlsdGlucy5faW50ZXJuYWwtPmJfdHlwZUVycm9yOwotICBiX3VyaUVycm9y
ID0gYnVpbHRpbnMuX2ludGVybmFsLT5iX3VyaUVycm9yOwotICAKLSAgYl9ldmFsRXJyb3JQcm90
b3R5cGUgPSBidWlsdGlucy5faW50ZXJuYWwtPmJfZXZhbEVycm9yUHJvdG90eXBlOwotICBiX3Jh
bmdlRXJyb3JQcm90b3R5cGUgPSBidWlsdGlucy5faW50ZXJuYWwtPmJfcmFuZ2VFcnJvclByb3Rv
dHlwZTsKLSAgYl9yZWZlcmVuY2VFcnJvclByb3RvdHlwZSA9IGJ1aWx0aW5zLl9pbnRlcm5hbC0+
Yl9yZWZlcmVuY2VFcnJvclByb3RvdHlwZTsKLSAgYl9zeW50YXhFcnJvclByb3RvdHlwZSA9IGJ1
aWx0aW5zLl9pbnRlcm5hbC0+Yl9zeW50YXhFcnJvclByb3RvdHlwZTsKLSAgYl90eXBlRXJyb3JQ
cm90b3R5cGUgPSBidWlsdGlucy5faW50ZXJuYWwtPmJfdHlwZUVycm9yUHJvdG90eXBlOwotICBi
X3VyaUVycm9yUHJvdG90eXBlID0gYnVpbHRpbnMuX2ludGVybmFsLT5iX3VyaUVycm9yUHJvdG90
eXBlOwotfQotCi1JbnRlcnByZXRlckltcCAqSW50ZXJwcmV0ZXJJbXA6OmludGVycHJldGVyV2l0
aEdsb2JhbE9iamVjdChKU09iamVjdCAqZ2xvYmFsKQotewotICAgIHJldHVybiBpbnRlcnByZXRl
ck1hcCgpLmdldChnbG9iYWwpOwotfQotCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBJbnRlcm5hbEZ1bmN0aW9uSW1wIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNv
bnN0IENsYXNzSW5mbyBJbnRlcm5hbEZ1bmN0aW9uSW1wOjppbmZvID0geyJGdW5jdGlvbiIsIDAs
IDAsIDB9OwotCi1JbnRlcm5hbEZ1bmN0aW9uSW1wOjpJbnRlcm5hbEZ1bmN0aW9uSW1wKCkKLXsK
LX0KLQotSW50ZXJuYWxGdW5jdGlvbkltcDo6SW50ZXJuYWxGdW5jdGlvbkltcChGdW5jdGlvblBy
b3RvdHlwZSogZnVuY1Byb3RvKQotICA6IEpTT2JqZWN0KGZ1bmNQcm90bykKLXsKLX0KLQotSW50
ZXJuYWxGdW5jdGlvbkltcDo6SW50ZXJuYWxGdW5jdGlvbkltcChGdW5jdGlvblByb3RvdHlwZSog
ZnVuY1Byb3RvLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKQotICA6IEpTT2JqZWN0KGZ1bmNQcm90
bykKLSAgLCBtX25hbWUobmFtZSkKLXsKLX0KLQotYm9vbCBJbnRlcm5hbEZ1bmN0aW9uSW1wOjpp
bXBsZW1lbnRzQ2FsbCgpIGNvbnN0Ci17Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIEludGVy
bmFsRnVuY3Rpb25JbXA6OmltcGxlbWVudHNIYXNJbnN0YW5jZSgpIGNvbnN0Ci17Ci0gIHJldHVy
biB0cnVlOwotfQotCi1ib29sIEludGVybmFsRnVuY3Rpb25JbXA6Omhhc0luc3RhbmNlKEV4ZWNT
dGF0ZSAqZXhlYywgSlNWYWx1ZSAqdmFsdWUpCi17Ci0gIGlmICghdmFsdWUtPmlzT2JqZWN0KCkp
Ci0gICAgcmV0dXJuIGZhbHNlOwotCi0gIEpTVmFsdWUgKnByb3QgPSBnZXQoZXhlYyxwcm90b3R5
cGVQcm9wZXJ0eU5hbWUpOwotICBpZiAoIXByb3QtPmlzT2JqZWN0KCkgJiYgIXByb3QtPmlzTnVs
bCgpKSB7Ci0gICAgdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJJbnZhbGlkIHByb3RvdHlw
ZSBlbmNvdW50ZXJlZCBpbiBpbnN0YW5jZW9mIG9wZXJhdGlvbi4iKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci0gIH0KLQotICBKU09iamVjdCAqdiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KHZhbHVl
KTsKLSAgd2hpbGUgKCh2ID0gdi0+cHJvdG90eXBlKCktPmdldE9iamVjdCgpKSkgewotICAgIGlm
ICh2ID09IHByb3QpCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICByZXR1cm4gZmFsc2U7Ci19
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbG9iYWwgZnVuY3Rpb25zIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWRvdWJsZSByb3VuZFZhbHVlKEV4ZWNTdGF0
ZSAqZXhlYywgSlNWYWx1ZSAqdikKLXsKLSAgZG91YmxlIGQgPSB2LT50b051bWJlcihleGVjKTsK
LSAgZG91YmxlIGFkID0gZmFicyhkKTsKLSAgaWYgKGFkID09IDAgfHwgaXNOYU4oZCkgfHwgaXNJ
bmYoZCkpCi0gICAgcmV0dXJuIGQ7Ci0gIHJldHVybiBjb3B5c2lnbihmbG9vcihhZCksIGQpOwot
fQotCi0jaWZuZGVmIE5ERUJVRwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci12b2lkIHByaW50SW5mbyhF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IGNoYXIgKnMsIEpTVmFsdWUgKm8sIGludCBsaW5lbm8pCi17
Ci0gIGlmICghbykKLSAgICBmcHJpbnRmKHN0ZGVyciwgIktKUzogJXM6IChudWxsKSIsIHMpOwot
ICBlbHNlIHsKLSAgICBKU1ZhbHVlICp2ID0gbzsKLQotICAgIFVTdHJpbmcgbmFtZTsKLSAgICBz
d2l0Y2ggKHYtPnR5cGUoKSkgewotICAgIGNhc2UgVW5zcGVjaWZpZWRUeXBlOgotICAgICAgbmFt
ZSA9ICJVbnNwZWNpZmllZCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVuZGVmaW5lZFR5cGU6
Ci0gICAgICBuYW1lID0gIlVuZGVmaW5lZCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIE51bGxU
eXBlOgotICAgICAgbmFtZSA9ICJOdWxsIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQm9vbGVh
blR5cGU6Ci0gICAgICBuYW1lID0gIkJvb2xlYW4iOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBT
dHJpbmdUeXBlOgotICAgICAgbmFtZSA9ICJTdHJpbmciOwotICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBOdW1iZXJUeXBlOgotICAgICAgbmFtZSA9ICJOdW1iZXIiOwotICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBPYmplY3RUeXBlOgotICAgICAgbmFtZSA9IHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KHYp
LT5jbGFzc05hbWUoKTsKLSAgICAgIGlmIChuYW1lLmlzTnVsbCgpKQotICAgICAgICBuYW1lID0g
Iih1bmtub3duIGNsYXNzKSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdldHRlclNldHRlclR5
cGU6Ci0gICAgICBuYW1lID0gIkdldHRlclNldHRlciI7Ci0gICAgICBicmVhazsKLSAgICB9Ci0g
ICAgVVN0cmluZyB2U3RyaW5nID0gdi0+dG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKCB2U3RyaW5n
LnNpemUoKSA+IDUwICkKLSAgICAgIHZTdHJpbmcgPSB2U3RyaW5nLnN1YnN0ciggMCwgNTAgKSAr
ICIuLi4iOwotICAgIC8vIENhbid0IHVzZSB0d28gVVN0cmluZzo6YXNjaWkoKSBpbiB0aGUgc2Ft
ZSBmcHJpbnRmIGNhbGwKLSAgICBDU3RyaW5nIHRlbXBTdHJpbmcoIHZTdHJpbmcuY3N0cmluZygp
ICk7Ci0KLSAgICBmcHJpbnRmKHN0ZGVyciwgIktKUzogJXM6ICVzIDogJXMgKCVwKSIsCi0gICAg
ICAgICAgICBzLCB0ZW1wU3RyaW5nLmNfc3RyKCksIG5hbWUuYXNjaWkoKSwgKHZvaWQqKXYpOwot
Ci0gICAgaWYgKGxpbmVubyA+PSAwKQotICAgICAgZnByaW50ZihzdGRlcnIsICIsIGxpbmUgJWRc
biIsbGluZW5vKTsKLSAgICBlbHNlCi0gICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7Ci0gIH0K
LX0KLSNlbmRpZgotCi19CkluZGV4OiBDaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQ2hhbmdlTG9n
CShyZXZpc2lvbiAxMzE0NSkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDIyIEBACisyMDA2LTAzLTA1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGh0dHA6Ly9idWd6
aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYxNgorICAgICAgICAgIGdldCBh
bGwgcmVmZXJlbmNlcyB0byBLSlM6Ok5vZGUgb3V0IG9mIGludGVybmFsLmgKKworICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IFVwZGF0ZWQgZm9yIGZp
bGUgY2hhbmdlcy4KKworICAgICAgICAqIGtqcy9QYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBranMvUGFyc2VyLmg6IEFkZGVkLgorCisgICAgICAgICoga2pzL2ludGVybmFsLmNwcDogUmVt
b3ZlZCB0aGUgUGFyc2VyIGNsYXNzLgorICAgICAgICAqIGtqcy9pbnRlcm5hbC5oOiBEaXR0by4g
QWxzbyByZW1vdmVkIHVubmVjZXNzYXJ5IGRlY2xhcmF0aW9ucyBvZiBjbGFzc2VzCisgICAgICAg
IG5vdCB1c2VkIGluIHRoaXMgaGVhZGVyLgorCisgICAgICAgICoga2pzL25vZGVzLmg6IEFkZGVk
IGFuIGluY2x1ZGUgb2YgIlBhcnNlci5oIi4KKyAgICAgICAgKiBranMvZnVuY3Rpb24uaDogQWRk
ZWQgYSBkZWNsYXJhdGlvbiBvZiBGdW5jdGlvbkJvZHlOb2RlLgorCiAyMDA2LTAzLTA1ICBBbmRy
ZXcgV2VsbGluZ3RvbiAgPHByb3RvbkB3aXJldGFwcGVkLm5ldD4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljLCBsYW5kZWQgYnkgYXAuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEzMTQ1KQorKysgSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjA2LDYgKzIwNiw4IEBACiAJ
CTkzRTI2Q0NGMDhCMjkyMTkwMEY4NTIyNiAvKiBzb2Z0bGlua2luZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMjZDQ0UwOEIyOTIxOTAwRjg1MjI2
IC8qIHNvZnRsaW5raW5nLmggKi87IH07CiAJCTkzRTI2Q0Y3MDhCMjlBMUMwMEY4NTIyNiAvKiBw
Y3JlX2dldC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNFMjZDRjYwOEIyOUExQzAwRjg1MjI2IC8qIHBjcmVfZ2V0LmMgKi87IH07CiAJCTkzRTI2RERD
MDhCMkE0RjQwMEY4NTIyNiAvKiBwY3JlX3ByaW50aW50LmMgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0UyNkREQjA4QjJBNEY0MDBGODUyMjYgLyogcGNy
ZV9wcmludGludC5jICovOyB9OworCQk5M0YwQjNBQjA5QkI0REMwMDA2OEZDRTMgLyogUGFyc2Vy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjBC
M0E5MDlCQjREQzAwMDY4RkNFMyAvKiBQYXJzZXIuY3BwICovOyB9OworCQk5M0YwQjNBQzA5QkI0
REMwMDA2OEZDRTMgLyogUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0YwQjNBQTA5QkI0REMwMDA2OEZDRTMgLyogUGFyc2VyLmggKi87IH07
CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYQnVpbGRSdWxl
IHNlY3Rpb24gKi8KQEAgLTQxMiw2ICs0MTQsOCBAQAogCQk5M0UyNkNDRTA4QjI5MjE5MDBGODUy
MjYgLyogc29mdGxpbmtpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gc29mdGxpbmtpbmcuaDsgcGF0aCA9IGJpbmRpbmdzL3NvZnRsaW5raW5n
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJOTNFMjZDRjYw
OEIyOUExQzAwRjg1MjI2IC8qIHBjcmVfZ2V0LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHBjcmVfZ2V0LmM7IHBhdGggPSBwY3JlL3BjcmVfZ2V0
LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJOTNFMjZEREIw
OEIyQTRGNDAwRjg1MjI2IC8qIHBjcmVfcHJpbnRpbnQuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gcGNyZV9wcmludGludC5jOyBwYXRoID0gcGNy
ZS9wY3JlX3ByaW50aW50LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
fTsKKwkJOTNGMEIzQTkwOUJCNERDMDAwNjhGQ0UzIC8qIFBhcnNlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5M0YwQjNBQTA5QkI0REMwMDA2OEZDRTMgLyogUGFyc2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5M0YxOTgxQTA4MjQ1QUFFMDAxRTlBQkMgLyoga2V5d29yZHMudGFibGUgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBrZXl3b3Jkcy50YWJsZTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQlGNTM0MTM5MDAzMENFRUIxMDE4
QkU3RjMgLyogcmVmZXJlbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHJlZmVyZW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IHRhYldpZHRoID0gODsgfTsKIAkJRjUzNDEzOTEwMzBDRUVCMTAxOEJFN0YzIC8qIHJlZmVy
ZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSByZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwpA
QCAtNjg5LDYgKzY5Myw4IEBACiAJCQkJRjY5MkE4NzQwMjU1NTk3RDAxRkY2MEY3IC8qIG9iamVj
dF9vYmplY3QuaCAqLywKIAkJCQlGNjkyQTg3NzAyNTU1OTdEMDFGRjYwRjcgLyogb3BlcmF0aW9u
cy5jcHAgKi8sCiAJCQkJRjY5MkE4NzgwMjU1NTk3RDAxRkY2MEY3IC8qIG9wZXJhdGlvbnMuaCAq
LywKKwkJCQk5M0YwQjNBOTA5QkI0REMwMDA2OEZDRTMgLyogUGFyc2VyLmNwcCAqLywKKwkJCQk5
M0YwQjNBQTA5QkI0REMwMDA2OEZDRTMgLyogUGFyc2VyLmggKi8sCiAJCQkJRjY5MkE4NzkwMjU1
NTk3RDAxRkY2MEY3IC8qIHByb3BlcnR5X21hcC5jcHAgKi8sCiAJCQkJRjY5MkE4N0EwMjU1NTk3
RDAxRkY2MEY3IC8qIHByb3BlcnR5X21hcC5oICovLAogCQkJCTY1NjIxRTZCMDg5RTg1OTcwMDc2
MEYzNSAvKiBwcm9wZXJ0eV9zbG90LmNwcCAqLywKQEAgLTg2NCw2ICs4NzAsNyBAQAogCQkJCTE0
QUJCMzZGMDk5QzA3NjQwMEUyQTI0RiAvKiB2YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRB
QkI0NTUwOTlDMkEwRjAwRTJBMjRGIC8qIEpTVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVE
NkQ4N0YwOUI1QTMyRTAwMDJFNEQ3IC8qIFBsYXRmb3JtLmggaW4gSGVhZGVycyAqLywKKwkJCQk5
M0YwQjNBQzA5QkI0REMwMDA2OEZDRTMgLyogUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTEy
NDIsNiArMTI0OSw3IEBACiAJCQkJNjVERkM5MzMwOEVBMTczQTAwRjczMDBCIC8qIEhhc2hUYWJs
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NUVBNEM5QjA5MkFGOUUyMDA5M0Q4MDAgLyogSlNM
b2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NzYwODY0MDk5QzYzMzgwMDQzNzEyOCAvKiBK
U0ltbWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5M0YwQjNBQjA5QkI0REMwMDA2OEZD
RTMgLyogUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9Owo=
</data>
<flag name="review"
          id="1771"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>