<?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>7805</bug_id>
          
          <creation_ts>2006-03-16 10:15:09 -0800</creation_ts>
          <short_desc>LEAK: method name leaks in KJS::Bindings::CInstance::invokeMethod</short_desc>
          <delta_ts>2006-03-23 09:39:58 -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>http://build.webkit.org/results/post-commit-leaks-powerpc-mac-os-x/560/DumpRenderTree-leaks.txt</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="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>36559</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-03-16 10:15:09 -0800</bug_when>
    <thetext>A leak observed on BuildBot:

Leak: 0x106d6c90  size=16	string &apos;getURL&apos;
	Call stack: [thread 24a7]: | 0x0 | start | _start | main | dumpRenderTree | -[NSRunLoop runMode:beforeDate:] | CFRunLoopRunSpecific | __CFRunLoopRun | __CFRunLoopDoSources0 | _sendCallbacks | -[NSURLConnection(NSURLConnectionInternal) _sendCallbacks] | -[NSURLConnection(NSURLConnectionInternal) _sendDidReceiveDataCallback] | -[WebLoader connection:didReceiveData:lengthReceived:] | -[WebMainResourceLoader didReceiveData:lengthReceived:] | -[WebLoader didReceiveData:lengthReceived:] | -[WebMainResourceLoader addData:] | -[WebDataSource(WebPrivate) _receivedData:] | -[WebDataSource(WebPrivate) _commitLoadWithData:] | -[WebHTMLRepresentation receivedData:withDataSource:] | -[WebFrameBridge receivedData:textEncodingName:] | -[WebCoreFrameBridge addData:] | WebCore::Frame::addData(char const*, int) | WebCore::Frame::write(char const*, int) | WebCore::HTMLTokenizer::write(WebCore::SegmentedString const&amp;, bool) | WebCore::HTMLTokenizer::parseTag(WebCore::SegmentedString&amp;, WebCore::HTMLTokenizer::State) | WebCore::HTMLTokenizer::parseSpecial(WebCore::SegmentedString&amp;, WebCore::HTMLTokenizer::State) | WebCore::HTMLTokenizer::scriptHandler(WebCore::HTMLTokenizer::State) | WebCore::HTMLTokenizer::scriptExecution(QString const&amp;, WebCore::HTMLTokenizer::State, QString, int) | WebCore::Frame::executeScript(QString const&amp;, int, WebCore::NodeImpl*, QString const&amp;) | WebCore::KJSProxyImpl::evaluate(WebCore::String const&amp;, int, WebCore::String const&amp;, WebCore::NodeImpl*) | KJS::Interpreter::evaluate(KJS::UString const&amp;, int, KJS::UChar const*, int, KJS::JSValue*) | KJS::InterpreterImp::evaluate(KJS::UChar const*, int, KJS::JSValue*, KJS::UString const&amp;, int) | KJS::BlockNode::execute(KJS::ExecState*) | KJS::SourceElementsNode::execute(KJS::ExecState*) | KJS::TryNode::execute(KJS::ExecState*) | KJS::BlockNode::execute(KJS::ExecState*) | KJS::SourceElementsNode::execute(KJS::ExecState*) | KJS::IfNode::execute(KJS::ExecState*) | KJS::BlockNode::execute(KJS::ExecState*) | KJS::SourceElementsNode::execute(KJS::ExecState*) | KJS::IfNode::execute(KJS::ExecState*) | KJS::BlockNode::execute(KJS::ExecState*) | KJS::SourceElementsNode::execute(KJS::ExecState*) | KJS::ExprStatementNode::execute(KJS::ExecState*) | KJS::FunctionCallDotNode::evaluate(KJS::ExecState*) | KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) | KJS::RuntimeMethod::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) | KJS::Bindings::CInstance::invokeMethod(KJS::ExecState*, KJS::Bindings::MethodList const&amp;, KJS::List const&amp;) | KJS::Bindings::CMethod::name() const | _NPN_UTF8FromIdentifier | strdup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36560</commentid>
    <comment_count>1</comment_count>
      <attachid>7114</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-03-16 10:24:37 -0800</bug_when>
    <thetext>Created attachment 7114
proposed fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36568</commentid>
    <comment_count>2</comment_count>
      <attachid>7114</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2006-03-16 12:08:40 -0800</bug_when>
    <thetext>Comment on attachment 7114
proposed fix

Nice fix.

I really wish the method/field weren&apos;t responsible for deleting this data. What if a caller wanted to hang on to it past the method&apos;s/field&apos;s lifetime?

Still, in practice that doesn&apos;t seem to happen, and this is the idiom used in the rest of the bindings code, so I think it&apos;s the right fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36569</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-16 12:27:01 -0800</bug_when>
    <thetext>I also noticed this leak. But when I went to fix this leak I went crazy and also fixed a lot of other things. We should land Alexey&apos;s patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36570</commentid>
    <comment_count>4</comment_count>
      <attachid>7117</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-16 12:27:32 -0800</bug_when>
    <thetext>Created attachment 7117
a patch that includes my fix for this leak</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36571</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-16 12:28:58 -0800</bug_when>
    <thetext>Actually, although my patch has lots of other fixes, the fix for the leak is better. There no need to allocate and then later destroy a string. We can just use the pointer to the string that exists inside the private identifier.

Here&apos;s an excerpt from mine:

+const char* CMethod::name() const
+{
+    PrivateIdentifier *i = (PrivateIdentifier *)_methodIdentifier;
+    return i-&gt;isString ? i-&gt;value.string : 0;
+}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36839</commentid>
    <comment_count>6</comment_count>
      <attachid>7114</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-03-18 03:15:56 -0800</bug_when>
    <thetext>Comment on attachment 7114
proposed fix

Most importantly, my patch is simply wrong - it still leaks the name. Didn&apos;t clean up properly when moving from char* to CString...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37086</commentid>
    <comment_count>7</comment_count>
      <attachid>7117</attachid>
    <who name="John Sullivan">sullivan</who>
    <bug_when>2006-03-20 18:41:48 -0800</bug_when>
    <thetext>Comment on attachment 7117
a patch that includes my fix for this leak

I almost reviewed this, but got scared away by (1) the many style changes hiding the few (one? I gave up trying to find them) substantive changes; (2) the lack of ChangeLog explaining what substantive changes I should be looking for.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37396</commentid>
    <comment_count>8</comment_count>
      <attachid>7117</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-03-22 21:43:57 -0800</bug_when>
    <thetext>Comment on attachment 7117
a patch that includes my fix for this leak

Per sullivan&apos;s comment, please add a ChangeLog entry explaining the substantial change - I couldn&apos;t find it either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37407</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-23 07:29:32 -0800</bug_when>
    <thetext>The reason the patch doesn&apos;t have a change log is that I wasn&apos;t really ready to submit it for review. I attached it to demonstrate the leak fix within and then Geoff set the review flag. I decided to set the review flag myself to make it clear I had made the code change, but I haven&apos;t done my usual steps to prepare to land a code change yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37414</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2006-03-23 09:39:58 -0800</bug_when>
    <thetext>Sorry. My bad.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7114</attachid>
            <date>2006-03-16 10:24:37 -0800</date>
            <delta_ts>2006-03-18 03:15:56 -0800</delta_ts>
            <desc>proposed fix</desc>
            <filename>7805r1_patch.txt</filename>
            <type>text/plain</type>
            <size>2009</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19ydW50aW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfcnVudGltZS5jcHAJKHJldmlzaW9uIDEz
MzM0KQorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3J1bnRpbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw3ICszOCwxMyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOjpCaW5kaW5nczsK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDTWV0aG9kIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotCitjb25zdCBjaGFyICpDTWV0aG9kOjpuYW1lKCkgY29uc3QKK3sKKyAgICBpZiAoIV91
dGY4TmFtZS5jX3N0cigpKQorICAgICAgICBfdXRmOE5hbWUgPSBfTlBOX1VURjhGcm9tSWRlbnRp
ZmllcihfbWV0aG9kSWRlbnRpZmllcik7CisgICAgCisgICAgcmV0dXJuIF91dGY4TmFtZS5jX3N0
cigpOworfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENGaWVsZCAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKQEAgLTcwLDQgKzc2LDEyIEBAIHZvaWQgQ0ZpZWxkOjpzZXRWYWx1ZVRvSW5z
dGFuY2UoRXhlY1N0YXQKICAgICB9CiB9CiAKK2NvbnN0IGNoYXIgKkNGaWVsZDo6bmFtZSgpIGNv
bnN0Cit7CisgICAgaWYgKCFfdXRmOE5hbWUuY19zdHIoKSkKKyAgICAgICAgX3V0ZjhOYW1lID0g
X05QTl9VVEY4RnJvbUlkZW50aWZpZXIoX2ZpZWxkSWRlbnRpZmllcik7CisgICAgCisgICAgcmV0
dXJuIF91dGY4TmFtZS5jX3N0cigpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENB
cnJheSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9jL2NfcnVudGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2Mv
Y19ydW50aW1lLmgJKHJldmlzaW9uIDEzMzM0KQorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
Yy9jX3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTEgKzUxLDEyIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIEpTVmFsdWUgKnZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSW5zdGFuY2UgKmluc3RhbmNlKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmFs
dWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmluc3RhbmNlLCBK
U1ZhbHVlICphVmFsdWUpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgY29uc3QgY2hhciAqbmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIF9OUE5fVVRGOEZyb21JZGVudGlmaWVyKF9maWVsZElkZW50aWZp
ZXIpOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyICpuYW1lKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBSdW50aW1lVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gIiI7IH0KICAgICAKIHByaXZhdGU6
CiAgICAgTlBJZGVudGlmaWVyIF9maWVsZElkZW50aWZpZXI7CisgICAgbXV0YWJsZSBDU3RyaW5n
IF91dGY4TmFtZTsKIH07CiAKIApAQCAtNjYsMTIgKzY3LDEzIEBAIHB1YmxpYzoKIAogICAgIENN
ZXRob2QoTlBJZGVudGlmaWVyIGlkZW50KSA6IE1ldGhvZCgpLCBfbWV0aG9kSWRlbnRpZmllcihp
ZGVudCkge307CiAgICAgCi0gICAgdmlydHVhbCBjb25zdCBjaGFyICpuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gX05QTl9VVEY4RnJvbUlkZW50aWZpZXIoX21ldGhvZElkZW50aWZpZXIpOyB9OworICAg
IHZpcnR1YWwgY29uc3QgY2hhciAqbmFtZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBpbnQgbnVt
UGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIDA7IH07CiAKIHByaXZhdGU6CiAgICAgTlBJZGVu
dGlmaWVyIF9tZXRob2RJZGVudGlmaWVyOworICAgIG11dGFibGUgQ1N0cmluZyBfdXRmOE5hbWU7
CiB9OwogCiAjaWYgMAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7117</attachid>
            <date>2006-03-16 12:27:32 -0800</date>
            <delta_ts>2006-03-22 21:43:57 -0800</delta_ts>
            <desc>a patch that includes my fix for this leak</desc>
            <filename>CBindingsPatch.txt</filename>
            <type>text/plain</type>
            <size>67743</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGJpbmRpbmdzL05QX2pzb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9O
UF9qc29iamVjdC5jcHAJKHJldmlzaW9uIDEzMjk3KQorKysgYmluZGluZ3MvTlBfanNvYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjIsMjkgKzIyLDI3IEBA
CiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCisKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlIDxOUF9qc29iamVjdC5oPgorI2luY2x1ZGUgIk5QX2pzb2JqZWN0Lmgi
CiAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9ucHJ1bnRpbWUuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9jX3V0aWxpdHkuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9ucHJ1bnRp
bWVfaW1wbC5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL25wcnVudGltZV9wcml2Lmg+Cisj
aW5jbHVkZSAiY191dGlsaXR5LmgiCisjaW5jbHVkZSAiaWRlbnRpZmllci5oIgorI2luY2x1ZGUg
ImludGVycHJldGVyLmgiCisjaW5jbHVkZSAibGlzdC5oIgorI2luY2x1ZGUgIm5wcnVudGltZS5o
IgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAibnBydW50aW1lX3ByaXYu
aCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEtKUzsKIHVz
aW5nIG5hbWVzcGFjZSBLSlM6OkJpbmRpbmdzOwogCi0KLXN0YXRpYyBLSlM6Okxpc3QgbGlzdEZy
b21WYXJpYW50QXJncyhLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTlBWYXJpYW50ICphcmdz
LCB1bnNpZ25lZCBhcmdDb3VudCkKK3N0YXRpYyBMaXN0IGxpc3RGcm9tVmFyaWFudEFyZ3MoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVuc2lnbmVkIGFyZ0NvdW50KQog
ewotICAgIEtKUzo6TGlzdCBhTGlzdDsgCi0gICAgdW5zaWduZWQgaTsKLSAgICBjb25zdCBOUFZh
cmlhbnQgKnYgPSBhcmdzOwotICAgIAotICAgIGZvciAoaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsr
KSB7Ci0gICAgICAgIGFMaXN0LmFwcGVuZCAoY29udmVydE5QVmFyaWFudFRvVmFsdWUgKGV4ZWMs
IHYpKTsKLSAgICAgICAgdisrOwotICAgIH0KLSAgICAKKyAgICBMaXN0IGFMaXN0OyAKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykKKyAgICAgICAgYUxpc3QuYXBw
ZW5kKGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsICZhcmdzW2ldKSk7ICAgIAogICAgIHJl
dHVybiBhTGlzdDsKIH0KIApAQCAtNTMsNzUgKzUxLDQ3IEBACiAgICAgcmV0dXJuIChOUE9iamVj
dCopbWFsbG9jKHNpemVvZihKYXZhU2NyaXB0T2JqZWN0KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGpz
RGVhbGxvY2F0ZSAoSmF2YVNjcmlwdE9iamVjdCAqb2JqKQorc3RhdGljIHZvaWQganNEZWFsbG9j
YXRlKE5QT2JqZWN0KiBvYmopCiB7Ci0gICAgZnJlZSAob2JqKTsKKyAgICBmcmVlKG9iaik7CiB9
CiAKLXN0YXRpYyBOUENsYXNzIF9qYXZhc2NyaXB0Q2xhc3MgPSB7IAotICAgIDEsCi0gICAganNB
bGxvY2F0ZSwgCi0gICAgKE5QRGVhbGxvY2F0ZUZ1bmN0aW9uUHRyKWpzRGVhbGxvY2F0ZSwgCi0g
ICAgMCwKLSAgICAwLAotICAgIDAsCi0gICAgMCwKLSAgICAwLAotICAgIDAsCi0gICAgMCwKLSAg
ICAwCi19Oworc3RhdGljIE5QQ2xhc3MgX2phdmFzY3JpcHRDbGFzcyA9IHsgMSwganNBbGxvY2F0
ZSwganNEZWFsbG9jYXRlLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CitzdGF0aWMgTlBDbGFz
cyBfbm9TY3JpcHRDbGFzcyA9IHsgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9Owog
Ci1zdGF0aWMgTlBDbGFzcyBfbm9TY3JpcHRDbGFzcyA9IHsgCi0gICAgMSwKLSAgICAwLCAKLSAg
ICAwLCAKLSAgICAwLAotICAgIDAsCi0gICAgMCwKLSAgICAwLAotICAgIDAsCi0gICAgMCwKLSAg
ICAwLAotICAgIDAKLX07CitOUENsYXNzKiBOUFNjcmlwdE9iamVjdENsYXNzID0gJl9qYXZhc2Ny
aXB0Q2xhc3M7CitzdGF0aWMgTlBDbGFzcyogTlBOb1NjcmlwdE9iamVjdENsYXNzID0gJl9ub1Nj
cmlwdENsYXNzOwogCi1OUENsYXNzICpOUFNjcmlwdE9iamVjdENsYXNzID0gJl9qYXZhc2NyaXB0
Q2xhc3M7Ci1OUENsYXNzICpOUE5vU2NyaXB0T2JqZWN0Q2xhc3MgPSAmX25vU2NyaXB0Q2xhc3M7
Ci0KLXN0YXRpYyBJZGVudGlmaWVyIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGNvbnN0IE5Q
VVRGOCAqbmFtZSkKK3N0YXRpYyBJZGVudGlmaWVyIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVy
KGNvbnN0IE5QVVRGOCogbmFtZSkKIHsKICAgICBOUFVURjE2ICptZXRob2ROYW1lOwotICAgIHVu
c2lnbmVkIGludCBVVEYxNkxlbmd0aDsKLSAgICAKLSAgICBjb252ZXJ0VVRGOFRvVVRGMTYgKG5h
bWUsIC0xLCAmbWV0aG9kTmFtZSwgJlVURjE2TGVuZ3RoKTsgLy8gcmVxdWlyZXMgZnJlZSgpIG9m
IHJldHVybmVkIG1lbW9yeS4KLSAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgKChjb25zdCBLSlM6
OlVDaGFyKiltZXRob2ROYW1lLCBVVEYxNkxlbmd0aCk7Ci0gICAgZnJlZSAoKHZvaWQgKiltZXRo
b2ROYW1lKTsKLSAgICAKKyAgICB1bnNpZ25lZCBVVEYxNkxlbmd0aDsKKyAgICBjb252ZXJ0VVRG
OFRvVVRGMTYobmFtZSwgLTEsICZtZXRob2ROYW1lLCAmVVRGMTZMZW5ndGgpOyAvLyByZXF1aXJl
cyBmcmVlKCkgb2YgcmV0dXJuZWQgbWVtb3J5LgorICAgIElkZW50aWZpZXIgaWRlbnRpZmllcigo
Y29uc3QgS0pTOjpVQ2hhciopbWV0aG9kTmFtZSwgVVRGMTZMZW5ndGgpOworICAgIGZyZWUobWV0
aG9kTmFtZSk7CiAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CiAKLXN0YXRpYyBib29sIF9pc1Nh
ZmVTY3JpcHQoSmF2YVNjcmlwdE9iamVjdCAqb2JqKQorc3RhdGljIGJvb2wgX2lzU2FmZVNjcmlw
dChKYXZhU2NyaXB0T2JqZWN0KiBvYmopCiB7CiAgICAgaWYgKG9iai0+b3JpZ2luRXhlY3V0aW9u
Q29udGV4dCkgewotCUludGVycHJldGVyICpvcmlnaW5JbnRlcnByZXRlciA9IG9iai0+b3JpZ2lu
RXhlY3V0aW9uQ29udGV4dC0+aW50ZXJwcmV0ZXIoKTsKLQlpZiAob3JpZ2luSW50ZXJwcmV0ZXIp
IHsKLQkgICAgcmV0dXJuIG9yaWdpbkludGVycHJldGVyLT5pc1NhZmVTY3JpcHQgKG9iai0+ZXhl
Y3V0aW9uQ29udGV4dC0+aW50ZXJwcmV0ZXIoKSk7Ci0JfQorCUludGVycHJldGVyKiBvcmlnaW5J
bnRlcnByZXRlciA9IG9iai0+b3JpZ2luRXhlY3V0aW9uQ29udGV4dC0+aW50ZXJwcmV0ZXIoKTsK
KwlpZiAob3JpZ2luSW50ZXJwcmV0ZXIpCisJICAgIHJldHVybiBvcmlnaW5JbnRlcnByZXRlci0+
aXNTYWZlU2NyaXB0KG9iai0+ZXhlY3V0aW9uQ29udGV4dC0+aW50ZXJwcmV0ZXIoKSk7CiAgICAg
fQogICAgIHJldHVybiB0cnVlOwogfQogCi1OUE9iamVjdCAqX05QTl9DcmVhdGVTY3JpcHRPYmpl
Y3QgKE5QUCBucHAsIEtKUzo6SlNPYmplY3QgKmltcCwgY29uc3QgS0pTOjpCaW5kaW5nczo6Um9v
dE9iamVjdCAqb3JpZ2luRXhlY3V0aW9uQ29udGV4dCwgY29uc3QgS0pTOjpCaW5kaW5nczo6Um9v
dE9iamVjdCAqZXhlY3V0aW9uQ29udGV4dCkKK05QT2JqZWN0ICpfTlBOX0NyZWF0ZVNjcmlwdE9i
amVjdCAoTlBQIG5wcCwgSlNPYmplY3QgKmltcCwgY29uc3QgUm9vdE9iamVjdCAqb3JpZ2luRXhl
Y3V0aW9uQ29udGV4dCwgY29uc3QgUm9vdE9iamVjdCAqZXhlY3V0aW9uQ29udGV4dCkKIHsKLSAg
ICBKYXZhU2NyaXB0T2JqZWN0ICpvYmogPSAoSmF2YVNjcmlwdE9iamVjdCAqKV9OUE5fQ3JlYXRl
T2JqZWN0KG5wcCwgTlBTY3JpcHRPYmplY3RDbGFzcyk7CisgICAgSmF2YVNjcmlwdE9iamVjdCog
b2JqID0gKEphdmFTY3JpcHRPYmplY3QqKV9OUE5fQ3JlYXRlT2JqZWN0KG5wcCwgTlBTY3JpcHRP
YmplY3RDbGFzcyk7CiAKICAgICBvYmotPmltcCA9IGltcDsKICAgICBvYmotPm9yaWdpbkV4ZWN1
dGlvbkNvbnRleHQgPSBvcmlnaW5FeGVjdXRpb25Db250ZXh0OyAgICAKICAgICBvYmotPmV4ZWN1
dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0OyAgICAKIAotICAgIGFkZE5hdGl2ZVJlZmVy
ZW5jZSAoZXhlY3V0aW9uQ29udGV4dCwgaW1wKTsKLSAgICAKKyAgICBhZGROYXRpdmVSZWZlcmVu
Y2UoZXhlY3V0aW9uQ29udGV4dCwgaW1wKTsKKwogICAgIHJldHVybiAoTlBPYmplY3QgKilvYmo7
CiB9CiAKQEAgLTEzMCw3MSArMTAwLDY0IEBACiAgICAgcmV0dXJuIF9OUE5fQ3JlYXRlT2JqZWN0
KDAsIE5QTm9TY3JpcHRPYmplY3RDbGFzcyk7CiB9CiAKLWJvb2wgX05QTl9JbnZva2VEZWZhdWx0
IChOUFAsIE5QT2JqZWN0KiBvLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0Nv
dW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKK2Jvb2wgX05QTl9JbnZva2VEZWZhdWx0KE5QUCwgTlBP
YmplY3QqIG8sIGNvbnN0IE5QVmFyaWFudCogYXJncywgdWludDMyX3QgYXJnQ291bnQsIE5QVmFy
aWFudCogcmVzdWx0KQogewotICAgIGlmIChvLT5fY2xhc3MgPT0gTlBTY3JpcHRPYmplY3RDbGFz
cykgewotICAgICAgICAvLyBObyBub3Rpb24gb2YgYSBkZWZhdWx0IGZ1bmN0aW9uIG9uIEpTIG9i
amVjdHMuICBKdXN0IHJldHVybiBmYWxzZSwgY2FuJ3QgaGFuZGxlLgorICAgIGlmIChvLT5fY2xh
c3MgPT0gTlBTY3JpcHRPYmplY3RDbGFzcykKKyAgICAgICAgLy8gTm8gbm90aW9uIG9mIGEgZGVm
YXVsdCBmdW5jdGlvbiBvbiBKUyBvYmplY3RzLiBKdXN0IHJldHVybiBmYWxzZSwgY2FuJ3QgaGFu
ZGxlLgogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBp
ZiAoby0+X2NsYXNzLT5pbnZva2VEZWZhdWx0KSB7Ci0gICAgICAgICAgICByZXR1cm4gby0+X2Ns
YXNzLT5pbnZva2VEZWZhdWx0IChvLCBhcmdzLCBhcmdDb3VudCwgcmVzdWx0KTsKLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRBc1VuZGVmaW5lZChyZXN1
bHQpOworICAgIGlmIChvLT5fY2xhc3MtPmludm9rZURlZmF1bHQpCisgICAgICAgIHJldHVybiBv
LT5fY2xhc3MtPmludm9rZURlZmF1bHQobywgYXJncywgYXJnQ291bnQsIHJlc3VsdCk7ICAgIAor
ICAgIFZPSURfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIF9OUE5fSW52b2tlIChOUFAgbnBwLCBOUE9iamVjdCAqbywgTlBJZGVudGlmaWVyIG1ldGhv
ZE5hbWUsIGNvbnN0IE5QVmFyaWFudCAqYXJncywgdWludDMyX3QgYXJnQ291bnQsIE5QVmFyaWFu
dCAqcmVzdWx0KQorYm9vbCBfTlBOX0ludm9rZShOUFAgbnBwLCBOUE9iamVjdCogbywgTlBJZGVu
dGlmaWVyIG1ldGhvZE5hbWUsIGNvbnN0IE5QVmFyaWFudCogYXJncywgdWludDMyX3QgYXJnQ291
bnQsIE5QVmFyaWFudCogcmVzdWx0KQogewogICAgIGlmIChvLT5fY2xhc3MgPT0gTlBTY3JpcHRP
YmplY3RDbGFzcykgewotICAgICAgICBKYXZhU2NyaXB0T2JqZWN0ICpvYmogPSAoSmF2YVNjcmlw
dE9iamVjdCAqKW87IAotICAgICAgICAKKyAgICAgICAgSmF2YVNjcmlwdE9iamVjdCogb2JqID0g
KEphdmFTY3JpcHRPYmplY3QqKW87IAogCWlmICghX2lzU2FmZVNjcmlwdChvYmopKQogCSAgICBy
ZXR1cm4gZmFsc2U7Ci0JICAgIAotICAgICAgICBQcml2YXRlSWRlbnRpZmllciAqaSA9IChQcml2
YXRlSWRlbnRpZmllciAqKW1ldGhvZE5hbWU7CisKKyAgICAgICAgUHJpdmF0ZUlkZW50aWZpZXIq
IGkgPSAoUHJpdmF0ZUlkZW50aWZpZXIqKW1ldGhvZE5hbWU7CiAgICAgICAgIGlmICghaS0+aXNT
dHJpbmcpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKKwogCS8vIFNw
ZWNpYWwgY2FzZSB0aGUgImV2YWwiIG1ldGhvZC4KIAlpZiAobWV0aG9kTmFtZSA9PSBfTlBOX0dl
dFN0cmluZ0lkZW50aWZpZXIoImV2YWwiKSkgewogCSAgICBpZiAoYXJnQ291bnQgIT0gMSkKIAkJ
cmV0dXJuIGZhbHNlOwogCSAgICBpZiAoYXJnc1swXS50eXBlICE9IE5QVmFyaWFudFR5cGVfU3Ry
aW5nKQogCQlyZXR1cm4gZmFsc2U7Ci0JICAgIAotCSAgICByZXR1cm4gX05QTl9FdmFsdWF0ZSAo
bnBwLCBvLCAoTlBTdHJpbmcgKikmYXJnc1swXS52YWx1ZS5zdHJpbmdWYWx1ZSwgcmVzdWx0KTsK
KwkgICAgcmV0dXJuIF9OUE5fRXZhbHVhdGUobnBwLCBvLCAoTlBTdHJpbmcgKikmYXJnc1swXS52
YWx1ZS5zdHJpbmdWYWx1ZSwgcmVzdWx0KTsKIAl9Ci0JZWxzZSB7Ci0JICAgIC8vIExvb2t1cCB0
aGUgZnVuY3Rpb24gb2JqZWN0LgotCSAgICBFeGVjU3RhdGUgKmV4ZWMgPSBvYmotPmV4ZWN1dGlv
bkNvbnRleHQtPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMoKTsKLQkgICAgSlNMb2NrIGxvY2s7
Ci0JICAgIEpTVmFsdWUgKmZ1bmMgPSBvYmotPmltcC0+Z2V0IChleGVjLCBpZGVudGlmaWVyRnJv
bU5QSWRlbnRpZmllcihpLT52YWx1ZS5zdHJpbmcpKTsKIAotCSAgICBpZiAoZnVuYy0+aXNOdWxs
KCkpIHsKLQkJTlBOX0luaXRpYWxpemVWYXJpYW50QXNOdWxsKHJlc3VsdCk7Ci0JCXJldHVybiBm
YWxzZTsKLQkgICAgfSBlbHNlIGlmIChmdW5jLT5pc1VuZGVmaW5lZCgpKSB7Ci0JCU5QTl9Jbml0
aWFsaXplVmFyaWFudEFzVW5kZWZpbmVkKHJlc3VsdCk7Ci0JCXJldHVybiBmYWxzZTsKLQkgICAg
fSBlbHNlIHsKLQkJLy8gQ2FsbCB0aGUgZnVuY3Rpb24gb2JqZWN0LgotCQlKU09iamVjdCAqZnVu
Y0ltcCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZnVuYyk7Ci0JCUpTT2JqZWN0ICp0aGlzT2Jq
ID0gY29uc3RfY2FzdDxKU09iamVjdCo+KG9iai0+aW1wKTsKLQkJTGlzdCBhcmdMaXN0ID0gbGlz
dEZyb21WYXJpYW50QXJncyhleGVjLCBhcmdzLCBhcmdDb3VudCk7Ci0JCUpTVmFsdWUgKnJlc3Vs
dFYgPSBmdW5jSW1wLT5jYWxsIChleGVjLCB0aGlzT2JqLCBhcmdMaXN0KTsKKyAgICAgICAgLy8g
TG9va3VwIHRoZSBmdW5jdGlvbiBvYmplY3QuCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG9i
ai0+ZXhlY3V0aW9uQ29udGV4dC0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpOworICAgICAg
ICBKU0xvY2sgbG9jazsKKyAgICAgICAgSlNWYWx1ZSogZnVuYyA9IG9iai0+aW1wLT5nZXQoZXhl
YywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoaS0+dmFsdWUuc3RyaW5nKSk7CisgICAgICAg
IGlmIChmdW5jLT5pc051bGwoKSkgeworICAgICAgICAgICAgTlVMTF9UT19OUFZBUklBTlQoKnJl
c3VsdCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gCisgICAgICAgIGlm
IChmdW5jLT5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgICAgICBWT0lEX1RPX05QVkFSSUFOVCgq
cmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAv
LyBDYWxsIHRoZSBmdW5jdGlvbiBvYmplY3QuCisgICAgICAgIEpTT2JqZWN0ICpmdW5jSW1wID0g
c3RhdGljX2Nhc3Q8SlNPYmplY3QqPihmdW5jKTsKKyAgICAgICAgSlNPYmplY3QgKnRoaXNPYmog
PSBjb25zdF9jYXN0PEpTT2JqZWN0Kj4ob2JqLT5pbXApOworICAgICAgICBMaXN0IGFyZ0xpc3Qg
PSBsaXN0RnJvbVZhcmlhbnRBcmdzKGV4ZWMsIGFyZ3MsIGFyZ0NvdW50KTsKKyAgICAgICAgSlNW
YWx1ZSAqcmVzdWx0ViA9IGZ1bmNJbXAtPmNhbGwgKGV4ZWMsIHRoaXNPYmosIGFyZ0xpc3QpOwog
Ci0JCS8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxs
LgotCQljb252ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCByZXN1bHRWLCByZXN1bHQpOwotCQly
ZXR1cm4gdHJ1ZTsKLQkgICAgfQotCX0KLSAgICB9IGVsc2UgaWYgKG8tPl9jbGFzcy0+aW52b2tl
KQotICAgICAgICByZXR1cm4gby0+X2NsYXNzLT5pbnZva2UgKG8sIG1ldGhvZE5hbWUsIGFyZ3Ms
IGFyZ0NvdW50LCByZXN1bHQpOworICAgICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJl
c3VsdCBvZiB0aGUgZnVuY3Rpb24gY2FsbC4KKyAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlh
bnQoZXhlYywgcmVzdWx0ViwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgaWYgKG8tPl9jbGFzcy0+aW52b2tlKQorICAgICAgICByZXR1cm4gby0+X2NsYXNzLT5p
bnZva2UobywgbWV0aG9kTmFtZSwgYXJncywgYXJnQ291bnQsIHJlc3VsdCk7CiAgICAgCi0gICAg
TlBOX0luaXRpYWxpemVWYXJpYW50QXNVbmRlZmluZWQocmVzdWx0KTsKKyAgICBWT0lEX1RPX05Q
VkFSSUFOVCgqcmVzdWx0KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjA3LDEzMiArMTcw
LDExNyBAQAogCSAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0g
b2JqLT5leGVjdXRpb25Db250ZXh0LT5pbnRlcnByZXRlcigpLT5nbG9iYWxFeGVjKCk7Ci0gICAg
ICAgIEpTVmFsdWUqIHJlc3VsdDsKICAgICAgICAgCiAgICAgICAgIEpTTG9jayBsb2NrOwogICAg
ICAgICBOUFVURjE2KiBzY3JpcHRTdHJpbmc7CiAgICAgICAgIHVuc2lnbmVkIGludCBVVEYxNkxl
bmd0aDsKLSAgICAgICAgY29udmVydE5QU3RyaW5nVG9VVEYxNiAocywgJnNjcmlwdFN0cmluZywg
JlVURjE2TGVuZ3RoKTsgICAgLy8gcmVxdWlyZXMgZnJlZSgpIG9mIHJldHVybmVkIG1lbW9yeS4K
KyAgICAgICAgY29udmVydE5QU3RyaW5nVG9VVEYxNihzLCAmc2NyaXB0U3RyaW5nLCAmVVRGMTZM
ZW5ndGgpOyAvLyByZXF1aXJlcyBmcmVlKCkgb2YgcmV0dXJuZWQgbWVtb3J5CiAgICAgICAgIENv
bXBsZXRpb24gY29tcGxldGlvbiA9IG9iai0+ZXhlY3V0aW9uQ29udGV4dC0+aW50ZXJwcmV0ZXIo
KS0+ZXZhbHVhdGUoVVN0cmluZygpLCAwLCBVU3RyaW5nKChjb25zdCBVQ2hhciopc2NyaXB0U3Ry
aW5nLFVURjE2TGVuZ3RoKSk7CiAgICAgICAgIENvbXBsVHlwZSB0eXBlID0gY29tcGxldGlvbi5j
b21wbFR5cGUoKTsKICAgICAgICAgCisgICAgICAgIEpTVmFsdWUqIHJlc3VsdDsKICAgICAgICAg
aWYgKHR5cGUgPT0gTm9ybWFsKSB7CiAgICAgICAgICAgICByZXN1bHQgPSBjb21wbGV0aW9uLnZh
bHVlKCk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAgaWYgKCFyZXN1
bHQpCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
cmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgICAgIAotICAgICAgICBmcmVlICgodm9p
ZCAqKXNjcmlwdFN0cmluZyk7Ci0gICAgICAgIAorCisgICAgICAgIGZyZWUoc2NyaXB0U3RyaW5n
KTsKKwogICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCByZXN1bHQsIHZhcmlh
bnQpOwogICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBOUE5fSW5pdGlh
bGl6ZVZhcmlhbnRBc1VuZGVmaW5lZCh2YXJpYW50KTsKKyAgICBWT0lEX1RPX05QVkFSSUFOVCgq
dmFyaWFudCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIF9OUE5fR2V0UHJvcGVydHkg
KE5QUCwgTlBPYmplY3QqIG8sIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIE5QVmFyaWFudCog
dmFyaWFudCkKK2Jvb2wgX05QTl9HZXRQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCBOUElkZW50
aWZpZXIgcHJvcGVydHlOYW1lLCBOUFZhcmlhbnQqIHZhcmlhbnQpCiB7CiAgICAgaWYgKG8tPl9j
bGFzcyA9PSBOUFNjcmlwdE9iamVjdENsYXNzKSB7Ci0gICAgICAgIEphdmFTY3JpcHRPYmplY3Qg
Km9iaiA9IChKYXZhU2NyaXB0T2JqZWN0ICopbzsgCi0KKyAgICAgICAgSmF2YVNjcmlwdE9iamVj
dCogb2JqID0gKEphdmFTY3JpcHRPYmplY3QqKW87IAogCWlmICghX2lzU2FmZVNjcmlwdChvYmop
KQogCSAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgRXhlY1N0YXRlICpleGVjID0gb2JqLT5l
eGVjdXRpb25Db250ZXh0LT5pbnRlcnByZXRlcigpLT5nbG9iYWxFeGVjKCk7Ci0KLSAgICAgICAg
UHJpdmF0ZUlkZW50aWZpZXIgKmkgPSAoUHJpdmF0ZUlkZW50aWZpZXIgKilwcm9wZXJ0eU5hbWU7
CisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG9iai0+ZXhlY3V0aW9uQ29udGV4dC0+aW50ZXJw
cmV0ZXIoKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBQcml2YXRlSWRlbnRpZmllciogaSA9IChQ
cml2YXRlSWRlbnRpZmllciopcHJvcGVydHlOYW1lOwogICAgICAgICAKICAgICAgICAgSlNMb2Nr
IGxvY2s7CiAgICAgICAgIEpTVmFsdWUgKnJlc3VsdDsKLSAgICAgICAgaWYgKGktPmlzU3RyaW5n
KSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBvYmotPmltcC0+Z2V0IChleGVjLCBpZGVudGlmaWVy
RnJvbU5QSWRlbnRpZmllcihpLT52YWx1ZS5zdHJpbmcpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHJlc3VsdCA9IG9iai0+aW1wLT5nZXQgKGV4ZWMsIGktPnZhbHVlLm51bWJlcik7
Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGktPmlzU3RyaW5nKQorICAgICAgICAgICAgcmVzdWx0
ID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihpLT52YWx1
ZS5zdHJpbmcpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gb2JqLT5pbXAt
PmdldChleGVjLCBpLT52YWx1ZS5udW1iZXIpOwogCiAgICAgICAgIGlmIChyZXN1bHQtPmlzTnVs
bCgpKSB7Ci0gICAgICAgICAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRBc051bGwodmFyaWFudCk7
CisgICAgICAgICAgICBOVUxMX1RPX05QVkFSSUFOVCgqdmFyaWFudCk7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAocmVzdWx0LT5pc1VuZGVm
aW5lZCgpKSB7Ci0gICAgICAgICAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRBc1VuZGVmaW5lZCh2
YXJpYW50KTsKKyAgICAgICAgaWYgKHJlc3VsdC0+aXNVbmRlZmluZWQoKSkgeworICAgICAgICAg
ICAgVk9JRF9UT19OUFZBUklBTlQoKnZhcmlhbnQpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgY29udmVydFZhbHVlVG9O
UFZhcmlhbnQoZXhlYywgcmVzdWx0LCB2YXJpYW50KTsKLSAgICAgICAgfQotCisgICAgICAgIGNv
bnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJlc3VsdCwgdmFyaWFudCk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KLSAgICBlbHNlIGlmIChvLT5fY2xhc3MtPmhhc1Byb3BlcnR5ICYm
IG8tPl9jbGFzcy0+Z2V0UHJvcGVydHkpIHsKLSAgICAgICAgaWYgKG8tPl9jbGFzcy0+aGFzUHJv
cGVydHkgKG8sIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgIHJldHVybiBvLT5fY2xhc3Mt
PmdldFByb3BlcnR5IChvLCBwcm9wZXJ0eU5hbWUsIHZhcmlhbnQpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisKKyAgICBp
ZiAoby0+X2NsYXNzLT5oYXNQcm9wZXJ0eSAmJiBvLT5fY2xhc3MtPmdldFByb3BlcnR5KSB7Cisg
ICAgICAgIGlmIChvLT5fY2xhc3MtPmhhc1Byb3BlcnR5KG8sIHByb3BlcnR5TmFtZSkpCisgICAg
ICAgICAgICByZXR1cm4gby0+X2NsYXNzLT5nZXRQcm9wZXJ0eShvLCBwcm9wZXJ0eU5hbWUsIHZh
cmlhbnQpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgTlBOX0luaXRpYWxp
emVWYXJpYW50QXNVbmRlZmluZWQodmFyaWFudCk7CisgICAgVk9JRF9UT19OUFZBUklBTlQoKnZh
cmlhbnQpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBfTlBOX1NldFByb3BlcnR5IChO
UFAsIE5QT2JqZWN0KiBvLCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBOUFZhcmlh
bnQqIHZhcmlhbnQpCitib29sIF9OUE5fU2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgTlBJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgTlBWYXJpYW50KiB2YXJpYW50KQogewogICAg
IGlmIChvLT5fY2xhc3MgPT0gTlBTY3JpcHRPYmplY3RDbGFzcykgewotICAgICAgICBKYXZhU2Ny
aXB0T2JqZWN0ICpvYmogPSAoSmF2YVNjcmlwdE9iamVjdCAqKW87IAotCisgICAgICAgIEphdmFT
Y3JpcHRPYmplY3QqIG9iaiA9IChKYXZhU2NyaXB0T2JqZWN0KilvOyAKIAlpZiAoIV9pc1NhZmVT
Y3JpcHQob2JqKSkKIAkgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEV4ZWNTdGF0ZSAqZXhl
YyA9IG9iai0+ZXhlY3V0aW9uQ29udGV4dC0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpOwor
ICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBvYmotPmV4ZWN1dGlvbkNvbnRleHQtPmludGVycHJl
dGVyKCktPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgSlNMb2NrIGxvY2s7Ci0gICAgICAgIFByaXZh
dGVJZGVudGlmaWVyICppID0gKFByaXZhdGVJZGVudGlmaWVyICopcHJvcGVydHlOYW1lOworICAg
ICAgICBQcml2YXRlSWRlbnRpZmllciogaSA9IChQcml2YXRlSWRlbnRpZmllciopcHJvcGVydHlO
YW1lOwogICAgICAgICBpZiAoaS0+aXNTdHJpbmcpCiAgICAgICAgICAgICBvYmotPmltcC0+cHV0
KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGktPnZhbHVlLnN0cmluZyksIGNvbnZl
cnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsIHZhcmlhbnQpKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgb2JqLT5pbXAtPnB1dChleGVjLCBpLT52YWx1ZS5udW1iZXIsIGNvbnZlcnROUFZhcmlh
bnRUb1ZhbHVlKGV4ZWMsIHZhcmlhbnQpKTsKLSAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0gZWxzZSBpZiAoby0+X2NsYXNzLT5zZXRQcm9wZXJ0eSkKLSAgICAgICAgcmV0dXJu
IG8tPl9jbGFzcy0+c2V0UHJvcGVydHkgKG8sIHByb3BlcnR5TmFtZSwgdmFyaWFudCk7CisgICAg
fQogCisgICAgaWYgKG8tPl9jbGFzcy0+c2V0UHJvcGVydHkpCisgICAgICAgIHJldHVybiBvLT5f
Y2xhc3MtPnNldFByb3BlcnR5KG8sIHByb3BlcnR5TmFtZSwgdmFyaWFudCk7CisKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgX05QTl9SZW1vdmVQcm9wZXJ0eSAoTlBQLCBOUE9iamVjdCog
bywgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKK2Jvb2wgX05QTl9SZW1vdmVQcm9wZXJ0eShO
UFAsIE5QT2JqZWN0KiBvLCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogewogICAgIGlmIChv
LT5fY2xhc3MgPT0gTlBTY3JpcHRPYmplY3RDbGFzcykgewotICAgICAgICBKYXZhU2NyaXB0T2Jq
ZWN0ICpvYmogPSAoSmF2YVNjcmlwdE9iamVjdCAqKW87IAotCisgICAgICAgIEphdmFTY3JpcHRP
YmplY3QqIG9iaiA9IChKYXZhU2NyaXB0T2JqZWN0KilvOyAKIAlpZiAoIV9pc1NhZmVTY3JpcHQo
b2JqKSkKIAkgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IG9i
ai0+ZXhlY3V0aW9uQ29udGV4dC0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpOwotCi0gICAg
ICAgIFByaXZhdGVJZGVudGlmaWVyICppID0gKFByaXZhdGVJZGVudGlmaWVyICopcHJvcGVydHlO
YW1lOworICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBvYmotPmV4ZWN1dGlvbkNvbnRleHQtPmlu
dGVycHJldGVyKCktPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgUHJpdmF0ZUlkZW50aWZpZXIqIGkg
PSAoUHJpdmF0ZUlkZW50aWZpZXIqKXByb3BlcnR5TmFtZTsKICAgICAgICAgaWYgKGktPmlzU3Ry
aW5nKSB7Ci0gICAgICAgICAgICBpZiAoIW9iai0+aW1wLT5oYXNQcm9wZXJ0eSAoZXhlYywgaWRl
bnRpZmllckZyb21OUElkZW50aWZpZXIoaS0+dmFsdWUuc3RyaW5nKSkpIHsKKyAgICAgICAgICAg
IGlmICghb2JqLT5pbXAtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlm
aWVyKGktPnZhbHVlLnN0cmluZykpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmICgh
b2JqLT5pbXAtPmhhc1Byb3BlcnR5IChleGVjLCBpLT52YWx1ZS5udW1iZXIpKSB7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIW9iai0+aW1wLT5oYXNQcm9wZXJ0eShleGVjLCBp
LT52YWx1ZS5udW1iZXIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIEpTTG9jayBsb2NrOwogICAgICAgICBpZiAoaS0+
aXNTdHJpbmcpCi0gICAgICAgICAgICBvYmotPmltcC0+ZGVsZXRlUHJvcGVydHkgKGV4ZWMsIGlk
ZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGktPnZhbHVlLnN0cmluZykpOworICAgICAgICAgICAg
b2JqLT5pbXAtPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVy
KGktPnZhbHVlLnN0cmluZykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBvYmotPmltcC0+
ZGVsZXRlUHJvcGVydHkgKGV4ZWMsIGktPnZhbHVlLm51bWJlcik7CisgICAgICAgICAgICBvYmot
PmltcC0+ZGVsZXRlUHJvcGVydHkoZXhlYywgaS0+dmFsdWUubnVtYmVyKTsKICAgICAgICAgCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTM0Miw2MyArMjkwLDUyIEBACiBib29sIF9O
UE5fSGFzUHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFt
ZSkKIHsKICAgICBpZiAoby0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0Q2xhc3MpIHsKLSAgICAg
ICAgSmF2YVNjcmlwdE9iamVjdCAqb2JqID0gKEphdmFTY3JpcHRPYmplY3QgKilvOyAKLQorICAg
ICAgICBKYXZhU2NyaXB0T2JqZWN0KiBvYmogPSAoSmF2YVNjcmlwdE9iamVjdCopbzsgCiAJaWYg
KCFfaXNTYWZlU2NyaXB0KG9iaikpCiAJICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBFeGVj
U3RhdGUgKmV4ZWMgPSBvYmotPmV4ZWN1dGlvbkNvbnRleHQtPmludGVycHJldGVyKCktPmdsb2Jh
bEV4ZWMoKTsKLQotICAgICAgICBQcml2YXRlSWRlbnRpZmllciAqaSA9IChQcml2YXRlSWRlbnRp
ZmllciAqKXByb3BlcnR5TmFtZTsKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gb2JqLT5leGVj
dXRpb25Db250ZXh0LT5pbnRlcnByZXRlcigpLT5nbG9iYWxFeGVjKCk7CisgICAgICAgIFByaXZh
dGVJZGVudGlmaWVyKiBpID0gKFByaXZhdGVJZGVudGlmaWVyKilwcm9wZXJ0eU5hbWU7CiAgICAg
ICAgIEpTTG9jayBsb2NrOwotCiAgICAgICAgIGlmIChpLT5pc1N0cmluZykKICAgICAgICAgICAg
IHJldHVybiBvYmotPmltcC0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50
aWZpZXIoaS0+dmFsdWUuc3RyaW5nKSk7Ci0gICAgICAgIAogICAgICAgICByZXR1cm4gb2JqLT5p
bXAtPmhhc1Byb3BlcnR5KGV4ZWMsIGktPnZhbHVlLm51bWJlcik7Ci0gICAgfSBlbHNlIGlmIChv
LT5fY2xhc3MtPmhhc1Byb3BlcnR5KQotICAgICAgICByZXR1cm4gby0+X2NsYXNzLT5oYXNQcm9w
ZXJ0eSAobywgcHJvcGVydHlOYW1lKTsKLSAgICAKKyAgICB9CisKKyAgICBpZiAoby0+X2NsYXNz
LT5oYXNQcm9wZXJ0eSkKKyAgICAgICAgcmV0dXJuIG8tPl9jbGFzcy0+aGFzUHJvcGVydHkobywg
cHJvcGVydHlOYW1lKTsKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBfTlBOX0hhc01l
dGhvZChOUFAsIE5QT2JqZWN0KiBvLCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSkKIHsKICAgICBp
ZiAoby0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0Q2xhc3MpIHsKLSAgICAgICAgSmF2YVNjcmlw
dE9iamVjdCAqb2JqID0gKEphdmFTY3JpcHRPYmplY3QgKilvOyAKLSAgICAgICAgCisgICAgICAg
IEphdmFTY3JpcHRPYmplY3QqIG9iaiA9IChKYXZhU2NyaXB0T2JqZWN0KilvOyAKIAlpZiAoIV9p
c1NhZmVTY3JpcHQob2JqKSkKIAkgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIFByaXZhdGVJ
ZGVudGlmaWVyICppID0gKFByaXZhdGVJZGVudGlmaWVyICopbWV0aG9kTmFtZTsKKyAgICAgICAg
UHJpdmF0ZUlkZW50aWZpZXIqIGkgPSAoUHJpdmF0ZUlkZW50aWZpZXIqKW1ldGhvZE5hbWU7CiAg
ICAgICAgIGlmICghaS0+aXNTdHJpbmcpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgLy8gTG9va3VwIHRoZSBmdW5jdGlvbiBvYmplY3QuCi0gICAgICAg
IEV4ZWNTdGF0ZSAqZXhlYyA9IG9iai0+ZXhlY3V0aW9uQ29udGV4dC0+aW50ZXJwcmV0ZXIoKS0+
Z2xvYmFsRXhlYygpOwogCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG9iai0+ZXhlY3V0aW9u
Q29udGV4dC0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpOwogICAgICAgICBKU0xvY2sgbG9j
azsKLSAgICAgICAgSlNWYWx1ZSAqZnVuYyA9IG9iai0+aW1wLT5nZXQgKGV4ZWMsIGlkZW50aWZp
ZXJGcm9tTlBJZGVudGlmaWVyKGktPnZhbHVlLnN0cmluZykpOwotCi0gICAgICAgIGlmIChmdW5j
LT5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBKU1ZhbHVlKiBmdW5jID0g
b2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihpLT52YWx1ZS5z
dHJpbmcpKTsKKyAgICAgICAgcmV0dXJuICFmdW5jLT5pc1VuZGVmaW5lZCgpOwogICAgIH0KICAg
ICAKLSAgICBlbHNlIGlmIChvLT5fY2xhc3MtPmhhc01ldGhvZCkgewotICAgICAgICByZXR1cm4g
by0+X2NsYXNzLT5oYXNNZXRob2QgKG8sIG1ldGhvZE5hbWUpOwotICAgIH0KKyAgICBpZiAoby0+
X2NsYXNzLT5oYXNNZXRob2QpCisgICAgICAgIHJldHVybiBvLT5fY2xhc3MtPmhhc01ldGhvZChv
LCBtZXRob2ROYW1lKTsKICAgICAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgX05QTl9T
ZXRFeGNlcHRpb24oTlBPYmplY3QgKm8sIGNvbnN0IE5QVVRGOCAqbWVzc2FnZSkKK3ZvaWQgX05Q
Tl9TZXRFeGNlcHRpb24oTlBPYmplY3QqIG8sIGNvbnN0IE5QVVRGOCogbWVzc2FnZSkKIHsKICAg
ICBpZiAoby0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0Q2xhc3MpIHsKLSAgICAgICAgSmF2YVNj
cmlwdE9iamVjdCAqb2JqID0gKEphdmFTY3JpcHRPYmplY3QgKilvOyAKLSAgICAgICAgRXhlY1N0
YXRlICpleGVjID0gb2JqLT5leGVjdXRpb25Db250ZXh0LT5pbnRlcnByZXRlcigpLT5nbG9iYWxF
eGVjKCk7CisgICAgICAgIEphdmFTY3JpcHRPYmplY3QqIG9iaiA9IChKYXZhU2NyaXB0T2JqZWN0
KilvOyAKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gb2JqLT5leGVjdXRpb25Db250ZXh0LT5p
bnRlcnByZXRlcigpLT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIEpTTG9jayBsb2NrOwogICAgICAg
ICB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwgbWVzc2FnZSk7CiAgICAgfQpJbmRleDog
YmluZGluZ3MvYy9jX3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2MvY19ydW50
aW1lLmNwcAkocmV2aXNpb24gMTMyOTcpCisrKyBiaW5kaW5ncy9jL2NfcnVudGltZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDUwICsyNCw1NyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9pbnRlcm5hbC5oPgorI2luY2x1ZGUgImNfcnVu
dGltZS5oIgogCi0jaW5jbHVkZSA8Y19pbnN0YW5jZS5oPgotI2luY2x1ZGUgPGNfcnVudGltZS5o
PgotI2luY2x1ZGUgPGNfdXRpbGl0eS5oPgorI2luY2x1ZGUgImNfaW5zdGFuY2UuaCIKKyNpbmNs
dWRlICJjX3V0aWxpdHkuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgogCi0jaW5jbHVk
ZSA8cnVudGltZV9hcnJheS5oPgotI2luY2x1ZGUgPHJ1bnRpbWVfb2JqZWN0Lmg+CituYW1lc3Bh
Y2UgS0pTIHsKK25hbWVzcGFjZSBCaW5kaW5ncyB7CiAKLXVzaW5nIG5hbWVzcGFjZSBLSlM7Ci11
c2luZyBuYW1lc3BhY2UgS0pTOjpCaW5kaW5nczsKLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBDTWV0aG9kIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorY29uc3QgY2hhciogQ01ldGhvZDo6
bmFtZSgpIGNvbnN0Cit7CisgICAgUHJpdmF0ZUlkZW50aWZpZXIgKmkgPSAoUHJpdmF0ZUlkZW50
aWZpZXIgKilfbWV0aG9kSWRlbnRpZmllcjsKKyAgICByZXR1cm4gaS0+aXNTdHJpbmcgPyBpLT52
YWx1ZS5zdHJpbmcgOiAwOworfQogCi0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZpZWxk
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSlNWYWx1ZSAqQ0ZpZWxkOjp2YWx1ZUZyb21JbnN0
YW5jZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEluc3RhbmNlICppbnN0KSBjb25zdAorY29uc3Qg
Y2hhciogQ0ZpZWxkOjpuYW1lKCkgY29uc3QKIHsKLSAgICBjb25zdCBDSW5zdGFuY2UgKmluc3Rh
bmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ0luc3RhbmNlKj4oaW5zdCk7Ci0gICAgTlBPYmplY3Qg
Km9iaiA9IGluc3RhbmNlLT5nZXRPYmplY3QoKTsKLSAgICBKU1ZhbHVlICphVmFsdWU7Ci0gICAg
TlBWYXJpYW50IHByb3BlcnR5OwotICAgIFZPSURfVE9fTlBWQVJJQU5UKHByb3BlcnR5KTsKKyAg
ICBQcml2YXRlSWRlbnRpZmllciAqaSA9IChQcml2YXRlSWRlbnRpZmllciAqKV9maWVsZElkZW50
aWZpZXI7CisgICAgcmV0dXJuIGktPmlzU3RyaW5nID8gaS0+dmFsdWUuc3RyaW5nIDogMDsKK30K
KworSlNWYWx1ZSogQ0ZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEluc3RhbmNlKiBpbnN0KSBjb25zdAoreworICAgIGNvbnN0IENJbnN0YW5jZSogaW5zdGFu
Y2UgPSBzdGF0aWNfY2FzdDxjb25zdCBDSW5zdGFuY2UqPihpbnN0KTsKKyAgICBOUE9iamVjdCog
b2JqID0gaW5zdGFuY2UtPmdldE9iamVjdCgpOwogICAgIGlmIChvYmotPl9jbGFzcy0+Z2V0UHJv
cGVydHkpIHsKLSAgICAgICAgb2JqLT5fY2xhc3MtPmdldFByb3BlcnR5IChvYmosIF9maWVsZElk
ZW50aWZpZXIsICZwcm9wZXJ0eSk7Ci0gICAgICAgIGFWYWx1ZSA9IGNvbnZlcnROUFZhcmlhbnRU
b1ZhbHVlIChleGVjLCAmcHJvcGVydHkpOworICAgICAgICBOUFZhcmlhbnQgcHJvcGVydHk7Cisg
ICAgICAgIFZPSURfVE9fTlBWQVJJQU5UKHByb3BlcnR5KTsKKyAgICAgICAgaWYgKG9iai0+X2Ns
YXNzLT5nZXRQcm9wZXJ0eShvYmosIF9maWVsZElkZW50aWZpZXIsICZwcm9wZXJ0eSkpIHsKKyAg
ICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMs
ICZwcm9wZXJ0eSk7CisgICAgICAgICAgICBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWUoJnByb3Bl
cnR5KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KICAgICB9Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIGFWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVy
biBhVmFsdWU7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKIHZvaWQgQ0ZpZWxkOjpz
ZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJbnN0YW5jZSAqaW5zdCwg
SlNWYWx1ZSAqYVZhbHVlKSBjb25zdAogewotICAgIGNvbnN0IENJbnN0YW5jZSAqaW5zdGFuY2Ug
PSBzdGF0aWNfY2FzdDxjb25zdCBDSW5zdGFuY2UqPihpbnN0KTsKLSAgICBOUE9iamVjdCAqb2Jq
ID0gaW5zdGFuY2UtPmdldE9iamVjdCgpOworICAgIGNvbnN0IENJbnN0YW5jZSogaW5zdGFuY2Ug
PSBzdGF0aWNfY2FzdDxjb25zdCBDSW5zdGFuY2UqPihpbnN0KTsKKyAgICBOUE9iamVjdCogb2Jq
ID0gaW5zdGFuY2UtPmdldE9iamVjdCgpOwogICAgIGlmIChvYmotPl9jbGFzcy0+c2V0UHJvcGVy
dHkpIHsKICAgICAgICAgTlBWYXJpYW50IHZhcmlhbnQ7Ci0gICAgICAgIGNvbnZlcnRWYWx1ZVRv
TlBWYXJpYW50IChleGVjLCBhVmFsdWUsICZ2YXJpYW50KTsKLSAgICAgICAgb2JqLT5fY2xhc3Mt
PnNldFByb3BlcnR5IChvYmosIF9maWVsZElkZW50aWZpZXIsICZ2YXJpYW50KTsKKyAgICAgICAg
Y29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgYVZhbHVlLCAmdmFyaWFudCk7CisgICAgICAg
IG9iai0+X2NsYXNzLT5zZXRQcm9wZXJ0eShvYmosIF9maWVsZElkZW50aWZpZXIsICZ2YXJpYW50
KTsKKyAgICAgICAgX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlKCZ2YXJpYW50KTsKICAgICB9CiB9
CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0FycmF5IC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KK30gfQpJbmRleDogYmluZGluZ3MvYy9jX3V0aWxpdHkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJp
bmRpbmdzL2MvY191dGlsaXR5LmNwcAkocmV2aXNpb24gMTMyOTcpCisrKyBiaW5kaW5ncy9jL2Nf
dXRpbGl0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3Yg
KGFwQG55cG9wLmNvbSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI2LDEzICsyNiwxNCBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiY191dGlsaXR5LmgiCi0jaW5jbHVkZSA8dW5p
Y29kZS91Y252Lmg+CiAKLSNpbmNsdWRlICJKU1R5cGUuaCIKICNpbmNsdWRlICJOUF9qc29iamVj
dC5oIgogI2luY2x1ZGUgImNfaW5zdGFuY2UuaCIgCiAjaW5jbHVkZSAibnBydW50aW1lX2ltcGwu
aCIKICNpbmNsdWRlICJucHJ1bnRpbWVfcHJpdi5oIgorI2luY2x1ZGUgInJ1bnRpbWVfb2JqZWN0
LmgiCisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5jbHVkZSA8dW5pY29kZS91Y252Lmg+
CiAKIG5hbWVzcGFjZSBLSlMgeyBuYW1lc3BhY2UgQmluZGluZ3MgewogCkBAIC05OSwyOSArMTAw
LDI0IEBACiAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLT50b1N0cmluZyhleGVjKTsK
ICAgICAgICAgQ1N0cmluZyBjc3RyaW5nID0gdXN0cmluZy5VVEY4U3RyaW5nKCk7CiAgICAgICAg
IE5QU3RyaW5nIHN0cmluZyA9IHsgKGNvbnN0IE5QVVRGOCAqKWNzdHJpbmcuY19zdHIoKSwgY3N0
cmluZy5zaXplKCkgfTsKLSAgICAgICAgTlBOX0luaXRpYWxpemVWYXJpYW50V2l0aFN0cmluZ0Nv
cHkocmVzdWx0LCAmc3RyaW5nICk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gTnVtYmVy
VHlwZSkgewotICAgICAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoRG91YmxlKHJlc3VsdCwg
dmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBCb29s
ZWFuVHlwZSkgewotICAgICAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoQm9vbChyZXN1bHQs
IHZhbHVlLT50b0Jvb2xlYW4oZXhlYykpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09IFVu
c3BlY2lmaWVkVHlwZSkgewotICAgICAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRBc1VuZGVmaW5l
ZChyZXN1bHQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09IE51bGxUeXBlKSB7Ci0gICAg
ICAgIE5QTl9Jbml0aWFsaXplVmFyaWFudEFzTnVsbChyZXN1bHQpOwotICAgIH0KLSAgICBlbHNl
IGlmICh0eXBlID09IE9iamVjdFR5cGUpIHsKKyAgICAgICAgTlBOX0luaXRpYWxpemVWYXJpYW50
V2l0aFN0cmluZ0NvcHkocmVzdWx0LCAmc3RyaW5nKTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0g
TnVtYmVyVHlwZSkgeworICAgICAgICBET1VCTEVfVE9fTlBWQVJJQU5UKHZhbHVlLT50b051bWJl
cihleGVjKSwgKnJlc3VsdCk7CisgICAgfSBlbHNlIGlmICh0eXBlID09IEJvb2xlYW5UeXBlKSB7
CisgICAgICAgIEJPT0xFQU5fVE9fTlBWQVJJQU5UKHZhbHVlLT50b0Jvb2xlYW4oZXhlYyksICpy
ZXN1bHQpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBVbnNwZWNpZmllZFR5cGUpIHsKKyAgICAg
ICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7CisgICAgfSBlbHNlIGlmICh0eXBlID09IE51
bGxUeXBlKSB7CisgICAgICAgIE5VTExfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOworICAgIH0gZWxz
ZSBpZiAodHlwZSA9PSBPYmplY3RUeXBlKSB7CiAgICAgICAgIEpTT2JqZWN0ICpvYmplY3RJbXAg
PSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHZhbHVlKTsKICAgICAgICAgaWYgKG9iamVjdEltcC0+
Y2xhc3NJbmZvKCkgPT0gJlJ1bnRpbWVPYmplY3RJbXA6OmluZm8pIHsKLSAgICAgICAgICAgIFJ1
bnRpbWVPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3RJbXAgKj4odmFs
dWUpOwotICAgICAgICAgICAgQ0luc3RhbmNlICppbnN0YW5jZSA9IHN0YXRpY19jYXN0PENJbnN0
YW5jZSo+KGltcC0+Z2V0SW50ZXJuYWxJbnN0YW5jZSgpKTsKLSAgICAgICAgICAgIE5QTl9Jbml0
aWFsaXplVmFyaWFudFdpdGhPYmplY3QocmVzdWx0LCBpbnN0YW5jZS0+Z2V0T2JqZWN0KCkpOwot
ICAgICAgICB9Ci0JZWxzZSB7Ci0KKyAgICAgICAgICAgIFJ1bnRpbWVPYmplY3RJbXAqIGltcCA9
IHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3RJbXAgKj4odmFsdWUpOworICAgICAgICAgICAgQ0lu
c3RhbmNlKiBpbnN0YW5jZSA9IHN0YXRpY19jYXN0PENJbnN0YW5jZSo+KGltcC0+Z2V0SW50ZXJu
YWxJbnN0YW5jZSgpKTsKKyAgICAgICAgICAgIE5QT2JqZWN0KiBvYmogPSBpbnN0YW5jZS0+Z2V0
T2JqZWN0KCk7CisgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChvYmopOworCSAgICBPQkpF
Q1RfVE9fTlBWQVJJQU5UKG9iaiwgKnJlc3VsdCk7CisgICAgICAgIH0gZWxzZSB7CiAJICAgIElu
dGVycHJldGVyICpvcmlnaW5JbnRlcnByZXRlciA9IGV4ZWMtPmludGVycHJldGVyKCk7CiAgICAg
ICAgICAgICBjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAqb3JpZ2luRXhlY3V0aW9uQ29udGV4
dCA9IHJvb3RGb3JJbnRlcnByZXRlcihvcmlnaW5JbnRlcnByZXRlcik7CiAKQEAgLTE0MCw2MyAr
MTM2LDQ1IEBACiAgICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IG5ld0V4ZWN1dGlv
bkNvbnRleHQ7CiAgICAgICAgICAgICB9CiAgICAgCi0JICAgIE5QT2JqZWN0ICpvYmogPSAoTlBP
YmplY3QgKilleGVjLT5pbnRlcnByZXRlcigpLT5jcmVhdGVMYW5ndWFnZUluc3RhbmNlRm9yVmFs
dWUoZXhlYywgSW5zdGFuY2U6OkNMYW5ndWFnZSwgdmFsdWUtPnRvT2JqZWN0KGV4ZWMpLCBvcmln
aW5FeGVjdXRpb25Db250ZXh0LCBleGVjdXRpb25Db250ZXh0KTsKLQkgICAgTlBOX0luaXRpYWxp
emVWYXJpYW50V2l0aE9iamVjdChyZXN1bHQsIG9iaik7Ci0JICAgIF9OUE5fUmVsZWFzZU9iamVj
dChvYmopOworCSAgICBOUE9iamVjdCogb2JqID0gKE5QT2JqZWN0ICopZXhlYy0+aW50ZXJwcmV0
ZXIoKS0+Y3JlYXRlTGFuZ3VhZ2VJbnN0YW5jZUZvclZhbHVlKGV4ZWMsIEluc3RhbmNlOjpDTGFu
Z3VhZ2UsIHZhbHVlLT50b09iamVjdChleGVjKSwgb3JpZ2luRXhlY3V0aW9uQ29udGV4dCwgZXhl
Y3V0aW9uQ29udGV4dCk7CisJICAgIE9CSkVDVF9UT19OUFZBUklBTlQob2JqLCAqcmVzdWx0KTsK
IAl9CiAgICAgfQogICAgIGVsc2UKLSAgICAgICAgTlBOX0luaXRpYWxpemVWYXJpYW50QXNVbmRl
ZmluZWQocmVzdWx0KTsKKyAgICAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7CiB9CiAK
LUpTVmFsdWUgKmNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKEV4ZWNTdGF0ZSosIGNvbnN0IE5QVmFy
aWFudCp2YXJpYW50KQorSlNWYWx1ZSAqY29udmVydE5QVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRl
KiwgY29uc3QgTlBWYXJpYW50KiB2YXJpYW50KQogewogICAgIE5QVmFyaWFudFR5cGUgdHlwZSA9
IHZhcmlhbnQtPnR5cGU7CiAKLSAgICBpZiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX0Jvb2wpIHsK
LSAgICAgICAgTlBCb29sIGFCb29sOwotICAgICAgICBpZiAoTlBOX1ZhcmlhbnRUb0Jvb2wodmFy
aWFudCwgJmFCb29sKSkKLSAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oYUJvb2wpOwotICAg
ICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9
PSBOUFZhcmlhbnRUeXBlX051bGwpIHsKKyAgICBpZiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX0Jv
b2wpCisgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oTlBWQVJJQU5UX1RPX0JPT0xFQU4oKnZhcmlh
bnQpKTsKKyAgICBpZiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX051bGwpCiAgICAgICAgIHJldHVy
biBqc051bGwoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX1Zv
aWQpIHsKKyAgICBpZiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX1ZvaWQpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09IE5QVmFyaWFudFR5
cGVfSW50MzIpIHsKLSAgICAgICAgaW50MzJfdCBhbkludDsKLSAgICAgICAgaWYgKE5QTl9WYXJp
YW50VG9JbnQzMih2YXJpYW50LCAmYW5JbnQpKQotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVy
KGFuSW50KTsKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKDApOwotICAgIH0KLSAgICBlbHNlIGlm
ICh0eXBlID09IE5QVmFyaWFudFR5cGVfRG91YmxlKSB7Ci0gICAgICAgIGRvdWJsZSBhRG91Ymxl
OwotICAgICAgICBpZiAoTlBOX1ZhcmlhbnRUb0RvdWJsZSh2YXJpYW50LCAmYURvdWJsZSkpCi0g
ICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoYURvdWJsZSk7Ci0gICAgICAgIHJldHVybiBqc051
bWJlcigwKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX1N0cmlu
ZykgeworICAgIGlmICh0eXBlID09IE5QVmFyaWFudFR5cGVfSW50MzIpCisgICAgICAgIHJldHVy
biBqc051bWJlcihOUFZBUklBTlRfVE9fSU5UMzIoKnZhcmlhbnQpKTsKKyAgICBpZiAodHlwZSA9
PSBOUFZhcmlhbnRUeXBlX0RvdWJsZSkKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKE5QVkFSSUFO
VF9UT19ET1VCTEUoKnZhcmlhbnQpKTsKKyAgICBpZiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX1N0
cmluZykgewogICAgICAgICBOUFVURjE2ICpzdHJpbmdWYWx1ZTsKICAgICAgICAgdW5zaWduZWQg
aW50IFVURjE2TGVuZ3RoOwotICAgICAgICBjb252ZXJ0TlBTdHJpbmdUb1VURjE2KCZ2YXJpYW50
LT52YWx1ZS5zdHJpbmdWYWx1ZSwgJnN0cmluZ1ZhbHVlLCAmVVRGMTZMZW5ndGgpOyAgICAvLyBy
ZXF1aXJlcyBmcmVlKCkgb2YgcmV0dXJuZWQgbWVtb3J5LgorICAgICAgICBjb252ZXJ0TlBTdHJp
bmdUb1VURjE2KCZ2YXJpYW50LT52YWx1ZS5zdHJpbmdWYWx1ZSwgJnN0cmluZ1ZhbHVlLCAmVVRG
MTZMZW5ndGgpOyAvLyByZXF1aXJlcyBmcmVlKCkgb2YgcmV0dXJuZWQgbWVtb3J5CiAgICAgICAg
IFVTdHJpbmcgcmVzdWx0U3RyaW5nKChjb25zdCBVQ2hhciAqKXN0cmluZ1ZhbHVlLFVURjE2TGVu
Z3RoKTsKICAgICAgICAgZnJlZShzdHJpbmdWYWx1ZSk7CiAgICAgICAgIHJldHVybiBqc1N0cmlu
ZyhyZXN1bHRTdHJpbmcpOwogICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09IE5QVmFyaWFudFR5
cGVfT2JqZWN0KSB7CisgICAgaWYgKHR5cGUgPT0gTlBWYXJpYW50VHlwZV9PYmplY3QpIHsKICAg
ICAgICAgTlBPYmplY3QgKm9iaiA9IHZhcmlhbnQtPnZhbHVlLm9iamVjdFZhbHVlOwogICAgICAg
ICAKLSAgICAgICAgaWYgKG9iai0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0Q2xhc3MpIHsKKyAg
ICAgICAgaWYgKG9iai0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0Q2xhc3MpCiAgICAgICAgICAg
ICAvLyBHZXQgSlNPYmplY3QgZnJvbSBOUF9KYXZhU2NyaXB0T2JqZWN0LgotICAgICAgICAgICAg
SmF2YVNjcmlwdE9iamVjdCAqbyA9IChKYXZhU2NyaXB0T2JqZWN0ICopb2JqOwotICAgICAgICAg
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPihvLT5pbXApOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgLy8gIFdyYXAgTlBPYmplY3QgaW4gYSBDSW5zdGFuY2Uu
Ci0gICAgICAgICAgICByZXR1cm4gSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoSW5zdGFu
Y2U6OkNMYW5ndWFnZSwgb2JqKTsKLSAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuICgoSmF2
YVNjcmlwdE9iamVjdCAqKW9iaiktPmltcDsKKworICAgICAgICAvLyBXcmFwIE5QT2JqZWN0IGlu
IGEgQ0luc3RhbmNlLgorICAgICAgICByZXR1cm4gSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmpl
Y3QoSW5zdGFuY2U6OkNMYW5ndWFnZSwgb2JqKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CkluZGV4OiBiaW5kaW5ncy9jL2NfaW5zdGFuY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGJpbmRpbmdzL2MvY19pbnN0YW5jZS5jcHAJKHJldmlzaW9uIDEzMjk3KQorKysgYmluZGlu
Z3MvYy9jX2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTIzLDY3ICsyMyw1OCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2luY2x1ZGUgImNfY2xh
c3MuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJjX2luc3RhbmNlLmgiCisKKyNp
bmNsdWRlICJjX2NsYXNzLmgiCiAjaW5jbHVkZSAiY19ydW50aW1lLmgiCiAjaW5jbHVkZSAiY191
dGlsaXR5LmgiCi0jaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibGlzdC5oIgogI2luY2x1
ZGUgIm5wcnVudGltZV9pbXBsLmgiCi0jaW5jbHVkZSAibnBydW50aW1lX3ByaXYuaCIKKyNpbmNs
dWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAotI2lmZGVmIE5ERUJVRwotI2RlZmluZSBDX0xPRyhm
b3JtYXRBbmRBcmdzLi4uKSAoKHZvaWQpMCkKLSNlbHNlCi0jZGVmaW5lIENfTE9HKGZvcm1hdEFu
ZEFyZ3MuLi4pIHsgXAotICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiVkIC0tICVzOiAgIiwgX19G
SUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOyBcCi0gICAgZnByaW50ZihzdGRlcnIsIGZv
cm1hdEFuZEFyZ3MpOyBcCi19Ci0jZW5kaWYKLQogbmFtZXNwYWNlIEtKUyB7CiBuYW1lc3BhY2Ug
QmluZGluZ3MgewogCi1DSW5zdGFuY2U6OkNJbnN0YW5jZSAoTlBPYmplY3QgKm8pIAorQ0luc3Rh
bmNlOjpDSW5zdGFuY2UoTlBPYmplY3QqIG8pIAogewotICAgIF9vYmplY3QgPSBfTlBOX1JldGFp
bk9iamVjdCAobyk7CisgICAgX29iamVjdCA9IF9OUE5fUmV0YWluT2JqZWN0KG8pOwogICAgIF9j
bGFzcyA9IDA7Ci0gICAgc2V0RXhlY3V0aW9uQ29udGV4dCAoMCk7CisgICAgc2V0RXhlY3V0aW9u
Q29udGV4dCgwKTsKIH0KIAotQ0luc3RhbmNlOjp+Q0luc3RhbmNlICgpIAorQ0luc3RhbmNlOjp+
Q0luc3RhbmNlKCkgCiB7Ci0gICAgX05QTl9SZWxlYXNlT2JqZWN0IChfb2JqZWN0KTsKKyAgICBf
TlBOX1JlbGVhc2VPYmplY3QoX29iamVjdCk7CiB9CiAKLQotQ0luc3RhbmNlOjpDSW5zdGFuY2Ug
KGNvbnN0IENJbnN0YW5jZSAmb3RoZXIpIDogSW5zdGFuY2UoKSAKK0NJbnN0YW5jZTo6Q0luc3Rh
bmNlKGNvbnN0IENJbnN0YW5jZSAmb3RoZXIpIDogSW5zdGFuY2UoKQogewotICAgIF9vYmplY3Qg
PSBfTlBOX1JldGFpbk9iamVjdCAob3RoZXIuX29iamVjdCk7CisgICAgX29iamVjdCA9IF9OUE5f
UmV0YWluT2JqZWN0KG90aGVyLl9vYmplY3QpOwogICAgIF9jbGFzcyA9IDA7Ci0gICAgc2V0RXhl
Y3V0aW9uQ29udGV4dCAob3RoZXIuZXhlY3V0aW9uQ29udGV4dCgpKTsKLX07CisgICAgc2V0RXhl
Y3V0aW9uQ29udGV4dChvdGhlci5leGVjdXRpb25Db250ZXh0KCkpOworfQogCi1DSW5zdGFuY2Ug
JkNJbnN0YW5jZTo6b3BlcmF0b3I9KGNvbnN0IENJbnN0YW5jZSAmb3RoZXIpeworQ0luc3RhbmNl
ICZDSW5zdGFuY2U6Om9wZXJhdG9yPShjb25zdCBDSW5zdGFuY2UmIG90aGVyKQorewogICAgIGlm
ICh0aGlzID09ICZvdGhlcikKICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIAotICAgIE5QT2Jq
ZWN0ICpfb2xkT2JqZWN0ID0gX29iamVjdDsKLSAgICBfb2JqZWN0PSBfTlBOX1JldGFpbk9iamVj
dCAob3RoZXIuX29iamVjdCk7Ci0gICAgX05QTl9SZWxlYXNlT2JqZWN0IChfb2xkT2JqZWN0KTsK
KworICAgIE5QT2JqZWN0KiBfb2xkT2JqZWN0ID0gX29iamVjdDsKKyAgICBfb2JqZWN0ID0gX05Q
Tl9SZXRhaW5PYmplY3Qob3RoZXIuX29iamVjdCk7CisgICAgX05QTl9SZWxlYXNlT2JqZWN0KF9v
bGRPYmplY3QpOwogICAgIF9jbGFzcyA9IDA7Ci0gICAgCisKICAgICByZXR1cm4gKnRoaXM7Ci19
OworfQogCiBDbGFzcyAqQ0luc3RhbmNlOjpnZXRDbGFzcygpIGNvbnN0CiB7Ci0gICAgaWYgKCFf
Y2xhc3MpIHsKKyAgICBpZiAoIV9jbGFzcykKICAgICAgICAgX2NsYXNzID0gQ0NsYXNzOjpjbGFz
c0ZvcklzQShfb2JqZWN0LT5fY2xhc3MpOwotICAgIH0KICAgICByZXR1cm4gX2NsYXNzOwogfQog
Ci0KIHZvaWQgQ0luc3RhbmNlOjpiZWdpbigpCiB7CiAgICAgLy8gRG8gbm90aGluZy4KQEAgLTk0
LDEzNSArODUsOTYgQEAKICAgICAvLyBEbyBub3RoaW5nLgogfQogCi1KU1ZhbHVlICpDSW5zdGFu
Y2U6Omludm9rZU1ldGhvZCAoRXhlY1N0YXRlICpleGVjLCBjb25zdCBNZXRob2RMaXN0ICZtZXRo
b2RMaXN0LCBjb25zdCBMaXN0ICZhcmdzKQorSlNWYWx1ZSogQ0luc3RhbmNlOjppbnZva2VNZXRo
b2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBNZXRob2RMaXN0JiBtZXRob2RMaXN0LCBjb25zdCBM
aXN0JiBhcmdzKQogewotICAgIEpTVmFsdWUgKnJlc3VsdFZhbHVlOwotCiAgICAgLy8gT3Zlcmxv
YWRpbmcgbWV0aG9kcyBhcmUgbm90IGFsbG93ZWQgYnkgTlBPYmplY3RzLiAgU2hvdWxkIG9ubHkg
YmUgb25lCiAgICAgLy8gbmFtZSBtYXRjaCBmb3IgYSBwYXJ0aWN1bGFyIG1ldGhvZC4KLSAgICBh
c3NlcnQgKG1ldGhvZExpc3QubGVuZ3RoKCkgPT0gMSk7CisgICAgYXNzZXJ0KG1ldGhvZExpc3Qu
bGVuZ3RoKCkgPT0gMSk7CiAKLSAgICBDTWV0aG9kICptZXRob2QgPSAwOwotICAgIG1ldGhvZCA9
IHN0YXRpY19jYXN0PENNZXRob2QqPihtZXRob2RMaXN0Lm1ldGhvZEF0KDApKTsKKyAgICBDTWV0
aG9kKiBtZXRob2QgPSBzdGF0aWNfY2FzdDxDTWV0aG9kKj4obWV0aG9kTGlzdC5tZXRob2RBdCgw
KSk7CiAKLSAgICBOUElkZW50aWZpZXIgaWRlbnQgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIg
KG1ldGhvZC0+bmFtZSgpKTsKLSAgICBpZiAoIV9vYmplY3QtPl9jbGFzcy0+aGFzTWV0aG9kIChf
b2JqZWN0LCBpZGVudCkpIHsKKyAgICBOUElkZW50aWZpZXIgaWRlbnQgPSBfTlBOX0dldFN0cmlu
Z0lkZW50aWZpZXIobWV0aG9kLT5uYW1lKCkpOworICAgIGlmICghX29iamVjdC0+X2NsYXNzLT5o
YXNNZXRob2QoX29iamVjdCwgaWRlbnQpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9CiAKLSAgICB1bnNpZ25lZCBpLCBjb3VudCA9IGFyZ3Muc2l6ZSgpOwotICAgIE5QVmFy
aWFudCAqY0FyZ3M7Ci0gICAgTlBWYXJpYW50IGxvY2FsQnVmZmVyWzEyOF07Ci0gICAgaWYgKGNv
dW50ID4gMTI4KQotICAgICAgICBjQXJncyA9IChOUFZhcmlhbnQgKiltYWxsb2MgKHNpemVvZihO
UFZhcmlhbnQpKmNvdW50KTsKLSAgICBlbHNlCi0gICAgICAgIGNBcmdzID0gbG9jYWxCdWZmZXI7
Ci0gICAgCi0gICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgY29udmVy
dFZhbHVlVG9OUFZhcmlhbnQgKGV4ZWMsIGFyZ3MuYXQoaSksICZjQXJnc1tpXSk7Ci0gICAgfQor
ICAgIHVuc2lnbmVkIGNvdW50ID0gYXJncy5zaXplKCk7CisgICAgVmVjdG9yPE5QVmFyaWFudCwg
MTI4PiBjQXJncyhjb3VudCk7CiAKKyAgICB1bnNpZ25lZCBpOworICAgIGZvciAoaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQorICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCBhcmdz
LmF0KGkpLCAmY0FyZ3NbaV0pOworCiAgICAgLy8gSW52b2tlIHRoZSAnQycgbWV0aG9kLgogICAg
IE5QVmFyaWFudCByZXN1bHRWYXJpYW50OwogICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdFZh
cmlhbnQpOwotICAgIF9vYmplY3QtPl9jbGFzcy0+aW52b2tlIChfb2JqZWN0LCBpZGVudCwgY0Fy
Z3MsIGNvdW50LCAmcmVzdWx0VmFyaWFudCk7CisgICAgX29iamVjdC0+X2NsYXNzLT5pbnZva2Uo
X29iamVjdCwgaWRlbnQsIGNBcmdzLCBjb3VudCwgJnJlc3VsdFZhcmlhbnQpOwogCi0gICAgZm9y
IChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgX05QTl9SZWxlYXNlVmFyaWFudFZh
bHVlICgmY0FyZ3NbaV0pOwotICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
KyAgICAgICAgX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlKCZjQXJnc1tpXSk7CiAKLSAgICBpZiAo
Y0FyZ3MgIT0gbG9jYWxCdWZmZXIpCi0gICAgICAgIGZyZWUgKCh2b2lkICopY0FyZ3MpOwotICAg
ICAgICAgICAgCi0gICAgaWYgKCFOUFZBUklBTlRfSVNfVk9JRChyZXN1bHRWYXJpYW50KSkgewot
ICAgICAgICByZXN1bHRWYWx1ZSA9IGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlIChleGVjLCAmcmVz
dWx0VmFyaWFudCk7Ci0gICAgICAgIAotICAgICAgICBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWUg
KCZyZXN1bHRWYXJpYW50KTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiByZXN1bHRWYWx1ZTsK
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1ZSogcmVz
dWx0VmFsdWUgPSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZSAoZXhlYywgJnJlc3VsdFZhcmlhbnQp
OworICAgIF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgmcmVzdWx0VmFyaWFudCk7CisgICAgcmV0
dXJuIHJlc3VsdFZhbHVlOwogfQogCiAKLUpTVmFsdWUgKkNJbnN0YW5jZTo6aW52b2tlRGVmYXVs
dE1ldGhvZCAoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKQorSlNWYWx1ZSogQ0lu
c3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYg
YXJncykKIHsKLSAgICBKU1ZhbHVlICpyZXN1bHRWYWx1ZTsKKyAgICBpZiAoIV9vYmplY3QtPl9j
bGFzcy0+aW52b2tlRGVmYXVsdCkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAg
ICBpZiAoX29iamVjdC0+X2NsYXNzLT5pbnZva2VEZWZhdWx0KSB7ICAgICAKLSAgICAgICAgdW5z
aWduZWQgaSwgY291bnQgPSBhcmdzLnNpemUoKTsKLSAgICAgICAgTlBWYXJpYW50ICpjQXJnczsK
LSAgICAgICAgTlBWYXJpYW50IGxvY2FsQnVmZmVyWzEyOF07Ci0gICAgICAgIGlmIChjb3VudCA+
IDEyOCkKLSAgICAgICAgICAgIGNBcmdzID0gKE5QVmFyaWFudCAqKW1hbGxvYyAoc2l6ZW9mKE5Q
VmFyaWFudCkqY291bnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjQXJncyA9IGxvY2Fs
QnVmZmVyOwotICAgICAgICAKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsK
LSAgICAgICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50IChleGVjLCBhcmdzLmF0KGkpLCAm
Y0FyZ3NbaV0pOwotICAgICAgICB9CisgICAgdW5zaWduZWQgY291bnQgPSBhcmdzLnNpemUoKTsK
KyAgICBWZWN0b3I8TlBWYXJpYW50LCAxMjg+IGNBcmdzKGNvdW50KTsKIAotICAgICAgICAvLyBJ
bnZva2UgdGhlICdDJyBtZXRob2QuCi0gICAgICAgIE5QVmFyaWFudCByZXN1bHRWYXJpYW50Owot
ICAgICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHRWYXJpYW50KTsKLSAgICAgICAgX29iamVj
dC0+X2NsYXNzLT5pbnZva2VEZWZhdWx0IChfb2JqZWN0LCBjQXJncywgY291bnQsICZyZXN1bHRW
YXJpYW50KTsKKyAgICB1bnNpZ25lZCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQorICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCBhcmdzLmF0KGkpLCAmY0Fy
Z3NbaV0pOwogCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAg
ICAgICBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWUgKCZjQXJnc1tpXSk7Ci0gICAgICAgIH0KKyAg
ICAvLyBJbnZva2UgdGhlICdDJyBtZXRob2QuCisgICAgTlBWYXJpYW50IHJlc3VsdFZhcmlhbnQ7
CisgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0VmFyaWFudCk7CisgICAgX29iamVjdC0+X2Ns
YXNzLT5pbnZva2VEZWZhdWx0KF9vYmplY3QsIGNBcmdzLCBjb3VudCwgJnJlc3VsdFZhcmlhbnQp
OwogCi0gICAgICAgIGlmIChjQXJncyAhPSBsb2NhbEJ1ZmZlcikKLSAgICAgICAgICAgIGZyZWUg
KCh2b2lkICopY0FyZ3MpOwotICAgICAgICAgICAgICAgIAotICAgICAgICBpZiAoIU5QVkFSSUFO
VF9JU19WT0lEKHJlc3VsdFZhcmlhbnQpKSB7Ci0gICAgICAgICAgICByZXN1bHRWYWx1ZSA9IGNv
bnZlcnROUFZhcmlhbnRUb1ZhbHVlIChleGVjLCAmcmVzdWx0VmFyaWFudCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSAoJnJlc3VsdFZhcmlhbnQp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0VmFsdWU7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgZm9yIChpID0g
MDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgmY0Fy
Z3NbaV0pOworCisgICAgSlNWYWx1ZSogcmVzdWx0VmFsdWUgPSBjb252ZXJ0TlBWYXJpYW50VG9W
YWx1ZSAoZXhlYywgJnJlc3VsdFZhcmlhbnQpOworICAgIF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1
ZSgmcmVzdWx0VmFyaWFudCk7CisgICAgcmV0dXJuIHJlc3VsdFZhbHVlOwogfQogCiAKLUpTVmFs
dWUgKkNJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlIChKU1R5cGUgaGludCkgY29uc3QKK0pTVmFsdWUq
IENJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlKEpTVHlwZSBoaW50KSBjb25zdAogewotICAgIGlmICho
aW50ID09IFN0cmluZ1R5cGUpIHsKKyAgICBpZiAoaGludCA9PSBTdHJpbmdUeXBlKQogICAgICAg
ICByZXR1cm4gc3RyaW5nVmFsdWUoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoaGludCA9PSBOdW1i
ZXJUeXBlKSB7CisgICAgaWYgKGhpbnQgPT0gTnVtYmVyVHlwZSkKICAgICAgICAgcmV0dXJuIG51
bWJlclZhbHVlKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGhpbnQgPT0gQm9vbGVhblR5cGUpIHsK
KyAgIGlmIChoaW50ID09IEJvb2xlYW5UeXBlKQogICAgICAgICByZXR1cm4gYm9vbGVhblZhbHVl
KCk7Ci0gICAgfQotICAgIAogICAgIHJldHVybiB2YWx1ZU9mKCk7CiB9CiAKLUpTVmFsdWUgKkNJ
bnN0YW5jZTo6c3RyaW5nVmFsdWUoKSBjb25zdAorSlNWYWx1ZSogQ0luc3RhbmNlOjpzdHJpbmdW
YWx1ZSgpIGNvbnN0CiB7CiAgICAgY2hhciBidWZbMTAyNF07Ci0gICAgc25wcmludGYoYnVmLCAx
MDI0LCAiTlBPYmplY3QgJXAsIE5QQ2xhc3MgJXAiLCBfb2JqZWN0LCBfb2JqZWN0LT5fY2xhc3Mp
OworICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJOUE9iamVjdCAlcCwgTlBDbGFzcyAl
cCIsIF9vYmplY3QsIF9vYmplY3QtPl9jbGFzcyk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGJ1Zik7
CiB9CiAKLUpTVmFsdWUgKkNJbnN0YW5jZTo6bnVtYmVyVmFsdWUoKSBjb25zdAorSlNWYWx1ZSog
Q0luc3RhbmNlOjpudW1iZXJWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6ICBJbXBsZW1l
bnQgc29tZXRoaW5nIHNlbnNpYmxlCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBzb21ldGhpbmcg
c2Vuc2libGUuCiAgICAgcmV0dXJuIGpzTnVtYmVyKDApOwogfQogCi1KU1ZhbHVlICpDSW5zdGFu
Y2U6OmJvb2xlYW5WYWx1ZSgpIGNvbnN0CitKU1ZhbHVlKiBDSW5zdGFuY2U6OmJvb2xlYW5WYWx1
ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6ICBJbXBsZW1lbnQgc29tZXRoaW5nIHNlbnNpYmxl
CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBzb21ldGhpbmcgc2Vuc2libGUuCiAgICAgcmV0dXJu
IGpzQm9vbGVhbihmYWxzZSk7CiB9CiAKLUpTVmFsdWUgKkNJbnN0YW5jZTo6dmFsdWVPZigpIGNv
bnN0IAorSlNWYWx1ZSogQ0luc3RhbmNlOjp2YWx1ZU9mKCkgY29uc3QgCiB7CiAgICAgcmV0dXJu
IHN0cmluZ1ZhbHVlKCk7CiB9CkluZGV4OiBiaW5kaW5ncy9jL2NfY2xhc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGJpbmRpbmdzL2MvY19jbGFzcy5jcHAJKHJldmlzaW9uIDEzMjk3KQorKysgYmluZGlu
Z3MvYy9jX2NsYXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIy
LDk5ICsyMiw5OCBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLworCiAj
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8Y19jbGFzcy5oPgotI2luY2x1ZGUgPGNfaW5z
dGFuY2UuaD4KLSNpbmNsdWRlIDxjX3J1bnRpbWUuaD4KKyNpbmNsdWRlICJjX2NsYXNzLmgiCiAK
LXVzaW5nIG5hbWVzcGFjZSBLSlM6OkJpbmRpbmdzOworI2luY2x1ZGUgImNfaW5zdGFuY2UuaCIK
KyNpbmNsdWRlICJjX3J1bnRpbWUuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgogCi1i
b29sIE5QTl9Jc1ZhbGlkSWRlbnRpZmllciAoY29uc3QgTlBVVEY4ICpuYW1lKTsKK25hbWVzcGFj
ZSBLSlMgeworbmFtZXNwYWNlIEJpbmRpbmdzIHsKIAotQ0NsYXNzOjpDQ2xhc3MoTlBDbGFzcyAq
YUNsYXNzKQorQ0NsYXNzOjpDQ2xhc3MoTlBDbGFzcyogYUNsYXNzKQogewogICAgIF9pc2EgPSBh
Q2xhc3M7CiAgICAgX21ldGhvZHMgPSBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKE5VTEwsIDAs
ICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJk1ldGhvZERpY3Rpb25hcnlWYWx1ZUNh
bGxCYWNrcyk7CiAgICAgX2ZpZWxkcyA9IENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoTlVMTCwg
MCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAmRmllbGREaWN0aW9uYXJ5VmFsdWVD
YWxsQmFja3MpOwogfQogCi1DQ2xhc3M6On5DQ2xhc3MoKSAKK0NDbGFzczo6fkNDbGFzcygpCiB7
Ci0gICAgQ0ZSZWxlYXNlIChfZmllbGRzKTsKLSAgICBDRlJlbGVhc2UgKF9tZXRob2RzKTsKKyAg
ICBDRlJlbGVhc2UoX21ldGhvZHMpOworICAgIENGUmVsZWFzZShfZmllbGRzKTsKIH0KICAgICAK
IHN0YXRpYyBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGNsYXNzZXNCeUlzQSA9IDA7CiAKLXN0YXRp
YyB2b2lkIF9jcmVhdGVDbGFzc2VzQnlJc0FJZk5lY2Vzc2FyeSgpCitDQ2xhc3MqIENDbGFzczo6
Y2xhc3NGb3JJc0EoTlBDbGFzcyogaXNhKQogewotICAgIGlmIChjbGFzc2VzQnlJc0EgPT0gMCkK
LSAgICAgICAgY2xhc3Nlc0J5SXNBID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZSAoTlVMTCwg
MCwgTlVMTCwgTlVMTCk7Ci19CisgICAgaWYgKCFjbGFzc2VzQnlJc0EpCisgICAgICAgIGNsYXNz
ZXNCeUlzQSA9IENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoTlVMTCwgMCwgTlVMTCwgTlVMTCk7
CiAKLUNDbGFzcyAqQ0NsYXNzOjpjbGFzc0ZvcklzQSAoTlBDbGFzcyAqaXNhKQotewotICAgIF9j
cmVhdGVDbGFzc2VzQnlJc0FJZk5lY2Vzc2FyeSgpOwotICAgIAotICAgIENDbGFzcyAqYUNsYXNz
ID0gKENDbGFzcyAqKUNGRGljdGlvbmFyeUdldFZhbHVlKGNsYXNzZXNCeUlzQSwgaXNhKTsKLSAg
ICBpZiAoYUNsYXNzID09IE5VTEwpIHsKLSAgICAgICAgYUNsYXNzID0gbmV3IENDbGFzcyAoaXNh
KTsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUgKGNsYXNzZXNCeUlzQSwgaXNhLCBhQ2xh
c3MpOworICAgIENDbGFzcyogYUNsYXNzID0gKENDbGFzcyopQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
Y2xhc3Nlc0J5SXNBLCBpc2EpOworICAgIGlmICghYUNsYXNzKSB7CisgICAgICAgIGFDbGFzcyA9
IG5ldyBDQ2xhc3MoaXNhKTsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoY2xhc3Nlc0J5
SXNBLCBpc2EsIGFDbGFzcyk7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIGFDbGFzczsKIH0K
IAotY29uc3QgY2hhciAqQ0NsYXNzOjpuYW1lKCkgY29uc3QKK2NvbnN0IGNoYXIqIENDbGFzczo6
bmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICIiOwogfQogCi1NZXRob2RMaXN0IENDbGFzczo6
bWV0aG9kc05hbWVkKGNvbnN0IGNoYXIgKl9uYW1lLCBJbnN0YW5jZSAqaW5zdGFuY2UpIGNvbnN0
CitNZXRob2RMaXN0IENDbGFzczo6bWV0aG9kc05hbWVkKGNvbnN0IGNoYXIqIF9uYW1lLCBJbnN0
YW5jZSogaW5zdGFuY2UpIGNvbnN0CiB7CiAgICAgTWV0aG9kTGlzdCBtZXRob2RMaXN0OwogCiAg
ICAgQ0ZTdHJpbmdSZWYgbWV0aG9kTmFtZSA9IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoTlVM
TCwgX25hbWUsIGtDRlN0cmluZ0VuY29kaW5nQVNDSUkpOwotICAgIE1ldGhvZCAqbWV0aG9kID0g
KE1ldGhvZCAqKUNGRGljdGlvbmFyeUdldFZhbHVlIChfbWV0aG9kcywgbWV0aG9kTmFtZSk7Cisg
ICAgTWV0aG9kKiBtZXRob2QgPSAoTWV0aG9kKilDRkRpY3Rpb25hcnlHZXRWYWx1ZShfbWV0aG9k
cywgbWV0aG9kTmFtZSk7CiAgICAgaWYgKG1ldGhvZCkgewotICAgICAgICBDRlJlbGVhc2UgKG1l
dGhvZE5hbWUpOworICAgICAgICBDRlJlbGVhc2UobWV0aG9kTmFtZSk7CiAgICAgICAgIG1ldGhv
ZExpc3QuYWRkTWV0aG9kKG1ldGhvZCk7CiAgICAgICAgIHJldHVybiBtZXRob2RMaXN0OwogICAg
IH0KLSAgICAKLSAgICBOUElkZW50aWZpZXIgaWRlbnQgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZp
ZXIgKF9uYW1lKTsKLSAgICBjb25zdCBDSW5zdGFuY2UgKmluc3QgPSBzdGF0aWNfY2FzdDxjb25z
dCBDSW5zdGFuY2UqPihpbnN0YW5jZSk7Ci0gICAgTlBPYmplY3QgKm9iaiA9IGluc3QtPmdldE9i
amVjdCgpOwotICAgIGlmIChfaXNhLT5oYXNNZXRob2QgJiYgX2lzYS0+aGFzTWV0aG9kIChvYmos
IGlkZW50KSl7Ci0gICAgICAgIE1ldGhvZCAqYU1ldGhvZCA9IG5ldyBDTWV0aG9kIChpZGVudCk7
IC8vIGRlbGV0ZWQgd2hlbiB0aGUgZGljdGlvbmFyeSBpcyBkZXN0cm95ZWQKLSAgICAgICAgQ0ZE
aWN0aW9uYXJ5QWRkVmFsdWUgKChDRk11dGFibGVEaWN0aW9uYXJ5UmVmKV9tZXRob2RzLCBtZXRo
b2ROYW1lLCBhTWV0aG9kKTsKLSAgICAgICAgbWV0aG9kTGlzdC5hZGRNZXRob2QgKGFNZXRob2Qp
OworCisgICAgTlBJZGVudGlmaWVyIGlkZW50ID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyKF9u
YW1lKTsKKyAgICBjb25zdCBDSW5zdGFuY2UqIGluc3QgPSBzdGF0aWNfY2FzdDxjb25zdCBDSW5z
dGFuY2UqPihpbnN0YW5jZSk7CisgICAgTlBPYmplY3QqIG9iaiA9IGluc3QtPmdldE9iamVjdCgp
OworICAgIGlmIChfaXNhLT5oYXNNZXRob2QgJiYgX2lzYS0+aGFzTWV0aG9kKG9iaiwgaWRlbnQp
KXsKKyAgICAgICAgTWV0aG9kKiBhTWV0aG9kID0gbmV3IENNZXRob2QoaWRlbnQpOyAvLyBkZWxl
dGVkIHdoZW4gdGhlIGRpY3Rpb25hcnkgaXMgZGVzdHJveWVkCisgICAgICAgIENGRGljdGlvbmFy
eUFkZFZhbHVlKF9tZXRob2RzLCBtZXRob2ROYW1lLCBhTWV0aG9kKTsKKyAgICAgICAgbWV0aG9k
TGlzdC5hZGRNZXRob2QoYU1ldGhvZCk7CiAgICAgfQogCi0gICAgQ0ZSZWxlYXNlIChtZXRob2RO
YW1lKTsKLSAgICAKKyAgICBDRlJlbGVhc2UobWV0aG9kTmFtZSk7CiAgICAgcmV0dXJuIG1ldGhv
ZExpc3Q7CiB9CiAKIAotRmllbGQgKkNDbGFzczo6ZmllbGROYW1lZChjb25zdCBjaGFyICpuYW1l
LCBJbnN0YW5jZSAqaW5zdGFuY2UpIGNvbnN0CitGaWVsZCogQ0NsYXNzOjpmaWVsZE5hbWVkKGNv
bnN0IGNoYXIqIG5hbWUsIEluc3RhbmNlKiBpbnN0YW5jZSkgY29uc3QKIHsKICAgICBDRlN0cmlu
Z1JlZiBmaWVsZE5hbWUgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKE5VTEwsIG5hbWUsIGtD
RlN0cmluZ0VuY29kaW5nQVNDSUkpOwotICAgIEZpZWxkICphRmllbGQgPSAoRmllbGQgKilDRkRp
Y3Rpb25hcnlHZXRWYWx1ZSAoX2ZpZWxkcywgZmllbGROYW1lKTsKKyAgICBGaWVsZCogYUZpZWxk
ID0gKEZpZWxkICopQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoX2ZpZWxkcywgZmllbGROYW1lKTsKICAg
ICBpZiAoYUZpZWxkKSB7Ci0gICAgICAgIENGUmVsZWFzZSAoZmllbGROYW1lKTsKKyAgICAgICAg
Q0ZSZWxlYXNlKGZpZWxkTmFtZSk7CiAgICAgICAgIHJldHVybiBhRmllbGQ7CiAgICAgfQogCi0g
ICAgTlBJZGVudGlmaWVyIGlkZW50ID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyIChuYW1lKTsK
LSAgICBjb25zdCBDSW5zdGFuY2UgKmluc3QgPSBzdGF0aWNfY2FzdDxjb25zdCBDSW5zdGFuY2Uq
PihpbnN0YW5jZSk7Ci0gICAgTlBPYmplY3QgKm9iaiA9IGluc3QtPmdldE9iamVjdCgpOwotICAg
IGlmIChfaXNhLT5oYXNQcm9wZXJ0eSAmJiBfaXNhLT5oYXNQcm9wZXJ0eSAob2JqLCBpZGVudCkp
ewotICAgICAgICBhRmllbGQgPSBuZXcgQ0ZpZWxkIChpZGVudCk7IC8vIGRlbGV0ZWQgd2hlbiB0
aGUgZGljdGlvbmFyeSBpcyBkZXN0cm95ZWQKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUg
KChDRk11dGFibGVEaWN0aW9uYXJ5UmVmKV9maWVsZHMsIGZpZWxkTmFtZSwgYUZpZWxkKTsKKyAg
ICBOUElkZW50aWZpZXIgaWRlbnQgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIobmFtZSk7Cisg
ICAgY29uc3QgQ0luc3RhbmNlKiBpbnN0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ0luc3RhbmNlKj4o
aW5zdGFuY2UpOworICAgIE5QT2JqZWN0KiBvYmogPSBpbnN0LT5nZXRPYmplY3QoKTsKKyAgICBp
ZiAoX2lzYS0+aGFzUHJvcGVydHkgJiYgX2lzYS0+aGFzUHJvcGVydHkob2JqLCBpZGVudCkpewor
ICAgICAgICBhRmllbGQgPSBuZXcgQ0ZpZWxkKGlkZW50KTsgLy8gZGVsZXRlZCB3aGVuIHRoZSBk
aWN0aW9uYXJ5IGlzIGRlc3Ryb3llZAorICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShfZmll
bGRzLCBmaWVsZE5hbWUsIGFGaWVsZCk7CiAgICAgfQotICAgIAotICAgIENGUmVsZWFzZSAoZmll
bGROYW1lKTsKIAorICAgIENGUmVsZWFzZShmaWVsZE5hbWUpOwogICAgIHJldHVybiBhRmllbGQ7
Ci19OworfQorCit9Cit9CisKSW5kZXg6IGJpbmRpbmdzL2MvY19ydW50aW1lLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gYmluZGluZ3MvYy9jX3J1bnRpbWUuaAkocmV2aXNpb24gMTMyOTcpCisrKyBiaW5kaW5n
cy9jL2NfcnVudGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjIs
MzggKzIyLDI1IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCi0jaWZu
ZGVmIF9CSU5ESU5HU19DX1JVTlRJTUVfSF8KLSNkZWZpbmUgX0JJTkRJTkdTX0NfUlVOVElNRV9I
XwogCi0jaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNpZm5kZWYg
QklORElOR1NfQ19SVU5USU1FX0hfCisjZGVmaW5lIEJJTkRJTkdTX0NfUlVOVElNRV9IXwogCi0j
aW5jbHVkZSA8bnBydW50aW1lLmg+Ci0jaW5jbHVkZSA8bnBydW50aW1lX2ltcGwuaD4KKyNpbmNs
dWRlICJucHJ1bnRpbWUuaCIKKyNpbmNsdWRlICJydW50aW1lLmgiCiAKLSNpbmNsdWRlIDxydW50
aW1lLmg+Ci0jaW5jbHVkZSA8dXN0cmluZy5oPgorbmFtZXNwYWNlIEtKUyB7CituYW1lc3BhY2Ug
QmluZGluZ3MgewogCi1uYW1lc3BhY2UgS0pTCi17Ci0KLW5hbWVzcGFjZSBCaW5kaW5ncwotewot
Ci1jbGFzcyBDSW5zdGFuY2U7Ci0KLWNsYXNzIENGaWVsZCA6IHB1YmxpYyBGaWVsZAoteworY2xh
c3MgQ0ZpZWxkIDogcHVibGljIEZpZWxkIHsKIHB1YmxpYzoKLSAgICBDRmllbGQoTlBJZGVudGlm
aWVyIGlkZW50KSA6IEZpZWxkKCkgewotICAgICAgICBfZmllbGRJZGVudGlmaWVyID0gaWRlbnQ7
Ci0gICAgfTsKLSAgICAKLSAgICB2aXJ0dWFsIEpTVmFsdWUgKnZhbHVlRnJvbUluc3RhbmNlKEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmluc3RhbmNlKSBjb25zdDsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFu
Y2UgKmluc3RhbmNlLCBKU1ZhbHVlICphVmFsdWUpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwg
Y29uc3QgY2hhciAqbmFtZSgpIGNvbnN0IHsgcmV0dXJuIF9OUE5fVVRGOEZyb21JZGVudGlmaWVy
KF9maWVsZElkZW50aWZpZXIpOyB9CisgICAgQ0ZpZWxkKE5QSWRlbnRpZmllciBpZGVudCkgOiBf
ZmllbGRJZGVudGlmaWVyKGlkZW50KSB7IF9maWVsZElkZW50aWZpZXIgPSBpZGVudDsgfQorCisg
ICAgdmlydHVhbCBKU1ZhbHVlKiB2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqLCBjb25zdCBJ
bnN0YW5jZSopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZVRvSW5zdGFuY2UoRXhl
Y1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlKikgY29uc3Q7CisgICAgdmlydHVhbCBj
b25zdCBjaGFyKiBuYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCBSdW50aW1lVHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gIiI7IH0KLSAgICAKKwogcHJpdmF0ZToKICAgICBOUElkZW50aWZpZXIg
X2ZpZWxkSWRlbnRpZmllcjsKIH07CkBAIC02Miw0MSArNDksMTYgQEAKIGNsYXNzIENNZXRob2Qg
OiBwdWJsaWMgTWV0aG9kCiB7CiBwdWJsaWM6Ci0gICAgQ01ldGhvZCgpIDogTWV0aG9kKCksIF9t
ZXRob2RJZGVudGlmaWVyKDApIHt9OworICAgIENNZXRob2QoTlBJZGVudGlmaWVyIGlkZW50KSA6
IF9tZXRob2RJZGVudGlmaWVyKGlkZW50KSB7IH0KIAotICAgIENNZXRob2QoTlBJZGVudGlmaWVy
IGlkZW50KSA6IE1ldGhvZCgpLCBfbWV0aG9kSWRlbnRpZmllcihpZGVudCkge307Ci0gICAgCi0g
ICAgdmlydHVhbCBjb25zdCBjaGFyICpuYW1lKCkgY29uc3QgeyByZXR1cm4gX05QTl9VVEY4RnJv
bUlkZW50aWZpZXIoX21ldGhvZElkZW50aWZpZXIpOyB9OworICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogbmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IG51bVBhcmFtZXRlcnMoKSBjb25zdCB7
IHJldHVybiAwOyB9CiAKLSAgICB2aXJ0dWFsIGludCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfTsKLQogcHJpdmF0ZToKICAgICBOUElkZW50aWZpZXIgX21ldGhvZElkZW50aWZp
ZXI7CiB9OwogCi0jaWYgMAotY2xhc3MgQ0FycmF5IDogcHVibGljIEFycmF5Ci17Ci1wdWJsaWM6
Ci0gICAgQ0FycmF5IChPYmplY3RTdHJ1Y3RQdHIgYSk7Ci0KLSAgICBDQXJyYXkgKGNvbnN0IENB
cnJheSAmb3RoZXIpOwotCi0gICAgQ0FycmF5ICZvcGVyYXRvcj0oY29uc3QgQ0FycmF5ICZvdGhl
cik7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXQoRXhlY1N0YXRlICpleGVjLCB1
bnNpZ25lZCBpbnQgaW5kZXgsIEpTVmFsdWUgKmFWYWx1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBK
U1ZhbHVlICp2YWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4KSBjb25z
dDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRMZW5ndGgoKSBjb25zdDsKLSAgICAKLSAg
ICB2aXJ0dWFsIH5DQXJyYXkoKTsKLQotcHJpdmF0ZToKLX07Ci0jZW5kaWYKLQotCiB9IC8vIG5h
bWVzcGFjZSBCaW5kaW5ncwotCiB9IC8vIG5hbWVzcGFjZSBLSlMKIAogI2VuZGlmCkluZGV4OiBi
aW5kaW5ncy9jL2NfdXRpbGl0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2MvY191dGlsaXR5
LmgJKHJldmlzaW9uIDEzMjk3KQorKysgYmluZGluZ3MvYy9jX3V0aWxpdHkuaAkod29ya2luZyBj
b3B5KQpAQCAtMjIsMjIgKzIyLDIyIEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAogICovCi0jaWZuZGVmIF9DX1VUSUxJVFlfSF8KLSNkZWZpbmUgX0NfVVRJTElUWV9IXwogCi0j
aW5jbHVkZSA8bnBydW50aW1lLmg+CisjaWZuZGVmIENfVVRJTElUWV9IXworI2RlZmluZSBDX1VU
SUxJVFlfSF8KIAotI2luY2x1ZGUgPHJ1bnRpbWUuaD4KLSNpbmNsdWRlIDxydW50aW1lX29iamVj
dC5oPgotI2luY2x1ZGUgPHJ1bnRpbWVfcm9vdC5oPgorI2luY2x1ZGUgIm5wcnVudGltZS5oIgog
Ci1uYW1lc3BhY2UgS0pTIHsgbmFtZXNwYWNlIEJpbmRpbmdzIHsKK25hbWVzcGFjZSBLSlMgewog
CitjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBKU1ZhbHVlOworCituYW1lc3BhY2UgQmluZGluZ3Mg
eworCiB0eXBlZGVmIHVpbnQxNl90IE5QVVRGMTY7Ci1OUFVURjE2ICpOUE5fVVRGMTZGcm9tU3Ry
aW5nIChOUFN0cmluZyAqb2JqKTsKIAotdHlwZWRlZiBlbnVtIAoteworZW51bSBOUF9WYWx1ZVR5
cGUgewogICAgIE5QX051bWJlclZhbHVlVHlwZSwKICAgICBOUF9TdHJpbmdWYWx1ZVR5cGUsCiAg
ICAgTlBfQm9vbGVhblZhbHVlVHlwZSwKQEAgLTQ1LDIyICs0NSwyMSBAQAogICAgIE5QX1VuZGVm
aW5lZFZhbHVlVHlwZSwKICAgICBOUF9PYmplY3RWYWx1ZVR5cGUsCiAgICAgTlBfSW52YWxpZFZh
bHVlVHlwZQotfSBOUF9WYWx1ZVR5cGU7Cit9OwogCi12b2lkIGNvbnZlcnROUFN0cmluZ1RvVVRG
MTYoY29uc3QgTlBTdHJpbmcgKnN0cmluZywgTlBVVEYxNiAqKlVURjE2Q2hhcnMsIHVuc2lnbmVk
IGludCAqVVRGMTZMZW5ndGgpOwotdm9pZCBjb252ZXJ0VVRGOFRvVVRGMTYoY29uc3QgTlBVVEY4
ICpVVEY4Q2hhcnMsIGludCBVVEY4TGVuZ3RoLCBOUFVURjE2ICoqVVRGMTZDaGFycywgdW5zaWdu
ZWQgaW50ICpVVEYxNkxlbmd0aCk7Ci12b2lkIGNvZXJjZVZhbHVlVG9OUFZhcmlhbnRTdHJpbmdU
eXBlKEtKUzo6RXhlY1N0YXRlICpleGVjLCBLSlM6OkpTVmFsdWUgKnZhbHVlLCBOUFZhcmlhbnQg
KnJlc3VsdCk7Ci12b2lkIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBLSlM6OkpTVmFsdWUgKnZhbHVlLCBOUFZhcmlhbnQgKnJlc3VsdCk7Ci1LSlM6OkpTVmFs
dWUgKmNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBO
UFZhcmlhbnQgKnZhcmlhbnQpOwordm9pZCBjb252ZXJ0TlBTdHJpbmdUb1VURjE2KGNvbnN0IE5Q
U3RyaW5nKiwgTlBVVEYxNioqIFVURjE2Q2hhcnMsIHVuc2lnbmVkIGludCogVVRGMTZMZW5ndGgp
Owordm9pZCBjb252ZXJ0VVRGOFRvVVRGMTYoY29uc3QgTlBVVEY4KiBVVEY4Q2hhcnMsIGludCBV
VEY4TGVuZ3RoLCBOUFVURjE2KiogVVRGMTZDaGFycywgdW5zaWduZWQgaW50KiBVVEYxNkxlbmd0
aCk7Cit2b2lkIGNvZXJjZVZhbHVlVG9OUFZhcmlhbnRTdHJpbmdUeXBlKEV4ZWNTdGF0ZSosIEpT
VmFsdWUqLCBOUFZhcmlhbnQqIHJlc3VsdCk7Cit2b2lkIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50
KEV4ZWNTdGF0ZSosIEpTVmFsdWUqLCBOUFZhcmlhbnQqIHJlc3VsdCk7CitKU1ZhbHVlKiBjb252
ZXJ0TlBWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUqLCBjb25zdCBOUFZhcmlhbnQqKTsKIAotdHlw
ZWRlZiBzdHJ1Y3QgCi17CitzdHJ1Y3QgUHJpdmF0ZUlkZW50aWZpZXIgewogICAgIHVuaW9uIHsK
LSAgICAgICAgY29uc3QgTlBVVEY4ICpzdHJpbmc7CisgICAgICAgIGNvbnN0IE5QVVRGOCogc3Ry
aW5nOwogICAgICAgICBpbnQzMl90IG51bWJlcjsKICAgICB9IHZhbHVlOwogICAgIGJvb2wgaXNT
dHJpbmc7Ci19IFByaXZhdGVJZGVudGlmaWVyOworfTsKIAogfSB9CiAKSW5kZXg6IGJpbmRpbmdz
L2MvY19jbGFzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2MvY19jbGFzcy5oCShyZXZpc2lv
biAxMzI5NykKKysrIGJpbmRpbmdzL2MvY19jbGFzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw1
NSArMjIsNDEgQEAKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KLSNpZm5k
ZWYgX0JJTkRJTkdTX0NfQ0xBU1NfSF8KLSNkZWZpbmUgX0JJTkRJTkdTX0NfQ0xBU1NfSF8KIAot
I2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaWZuZGVmIEJJTkRJ
TkdTX0NfQ0xBU1NfSF8KKyNkZWZpbmUgQklORElOR1NfQ19DTEFTU19IXwogCisjaW5jbHVkZSAi
bnBydW50aW1lLmgiCisjaW5jbHVkZSAicnVudGltZS5oIgogCi0jaW5jbHVkZSA8cnVudGltZS5o
PgotI2luY2x1ZGUgPG5wcnVudGltZS5oPgotI2luY2x1ZGUgPGNfcnVudGltZS5oPgotCiBuYW1l
c3BhY2UgS0pTIHsKLQogbmFtZXNwYWNlIEJpbmRpbmdzIHsKIAotY2xhc3MgQ0NsYXNzIDogcHVi
bGljIEtKUzo6QmluZGluZ3M6OkNsYXNzCi17CitjbGFzcyBDQ2xhc3MgOiBwdWJsaWMgQ2xhc3Mg
ewogcHJvdGVjdGVkOgotICAgIENDbGFzcyhOUENsYXNzICphQ2xhc3MpOyAvLyBVc2UgY2xhc3NG
b3JJc0EgdG8gY3JlYXRlIGEgQ0NsYXNzLgorICAgIENDbGFzcyhOUENsYXNzKik7IC8vIFVzZSBj
bGFzc0ZvcklzQSB0byBjcmVhdGUgYSBDQ2xhc3MuCiAgICAgCiBwdWJsaWM6Ci0gICAgfkNDbGFz
cygpOworICAgIHN0YXRpYyBDQ2xhc3MqIGNsYXNzRm9ySXNBKE5QQ2xhc3MqKTsKKyAgICB2aXJ0
dWFsIH5DQ2xhc3MoKTsKIAotICAgIC8vIFJldHVybiB0aGUgY2FjaGVkIE9iakMgb2YgdGhlIHNw
ZWNpZmllZCBuYW1lLgotICAgIHN0YXRpYyBDQ2xhc3MgKmNsYXNzRm9ySXNBKE5QQ2xhc3MgKmFD
bGFzcyk7Ci0gICAgCi0gICAgdmlydHVhbCBjb25zdCBjaGFyICpuYW1lKCkgY29uc3Q7Ci0gICAg
Ci0gICAgdmlydHVhbCBNZXRob2RMaXN0IG1ldGhvZHNOYW1lZChjb25zdCBjaGFyICpuYW1lLCBJ
bnN0YW5jZSAqaW5zdGFuY2UpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgRmllbGQgKmZpZWxk
TmFtZWQoY29uc3QgY2hhciAqbmFtZSwgSW5zdGFuY2UgKmluc3RhbmNlKSBjb25zdDsKLSAgICAK
LSAgICB2aXJ0dWFsIENvbnN0cnVjdG9yICpjb25zdHJ1Y3RvckF0KGludCkgY29uc3QgewotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9OwotICAgIAotICAgIHZpcnR1YWwgaW50IG51bUNvbnN0cnVj
dG9ycygpIGNvbnN0IHsgcmV0dXJuIDA7IH07Ci0gICAgICAgIAorICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogbmFtZSgpIGNvbnN0OyAgICAKKyAgICB2aXJ0dWFsIE1ldGhvZExpc3QgbWV0aG9kc05h
bWVkKGNvbnN0IGNoYXIqIG5hbWUsIEluc3RhbmNlKikgY29uc3Q7CisgICAgdmlydHVhbCBGaWVs
ZCogZmllbGROYW1lZChjb25zdCBjaGFyKiBuYW1lLCBJbnN0YW5jZSopIGNvbnN0OworCisgICAg
dmlydHVhbCBDb25zdHJ1Y3RvciogY29uc3RydWN0b3JBdChpbnQpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KKyAgICB2aXJ0dWFsIGludCBudW1Db25zdHJ1Y3RvcnMoKSBjb25zdCB7IHJldHVybiAwOyB9
CisKIHByaXZhdGU6Ci0gICAgQ0NsYXNzKCk7IC8vIHByb2hpYml0IGRlZmF1bHQgY29uc3RydWN0
aW9uCi0gICAgQ0NsYXNzKGNvbnN0IENDbGFzcyAmb3RoZXIpOyAvLyBwcm9oaWJpdCBjb3B5aW5n
Ci0gICAgQ0NsYXNzICZvcGVyYXRvcj0oY29uc3QgQ0NsYXNzICZvdGhlcik7IC8vIGRpdHRvCi0g
ICAgCi0gICAgTlBDbGFzcyAqX2lzYTsKLSAgICBDRkRpY3Rpb25hcnlSZWYgX21ldGhvZHM7Ci0g
ICAgQ0ZEaWN0aW9uYXJ5UmVmIF9maWVsZHM7CisgICAgQ0NsYXNzKGNvbnN0IENDbGFzcyYpOyAv
LyBwcm9oaWJpdCBjb3B5aW5nCisgICAgQ0NsYXNzJiBvcGVyYXRvcj0oY29uc3QgQ0NsYXNzJik7
IC8vIHByb2hpYml0IGFzc2lnbm1lbnQKKworICAgIE5QQ2xhc3MqIF9pc2E7CisgICAgQ0ZNdXRh
YmxlRGljdGlvbmFyeVJlZiBfbWV0aG9kczsKKyAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIF9m
aWVsZHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwotCiB9IC8vIG5hbWVzcGFjZSBL
SlMKIAotI2VuZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorI2VuZGlmCkluZGV4OiBi
aW5kaW5ncy9OUF9qc29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL05QX2pzb2JqZWN0
LmgJKHJldmlzaW9uIDEzMjk3KQorKysgYmluZGluZ3MvTlBfanNvYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDEwICsyMywxMCBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCiAgKi8KIAotI2lmbmRlZiBfTlBfSlNPQkpFQ1RfSAotI2RlZmluZSBfTlBfSlNPQkpFQ1Rf
SAorI2lmbmRlZiBOUF9KU09CSkVDVF9ICisjZGVmaW5lIE5QX0pTT0JKRUNUX0gKIAotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL25wcnVudGltZS5oPgorI2luY2x1ZGUgIm5wcnVudGltZS5oIgog
CiBuYW1lc3BhY2UgS0pTIHsKICAgICBjbGFzcyBKU09iamVjdDsKQEAgLTM1LDE3ICszNSwxNyBA
QAogICAgIH0KIH0KIAotZXh0ZXJuIE5QQ2xhc3MgKk5QU2NyaXB0T2JqZWN0Q2xhc3M7CitleHRl
cm4gTlBDbGFzcyogTlBTY3JpcHRPYmplY3RDbGFzczsKIAogc3RydWN0IEphdmFTY3JpcHRPYmpl
Y3QKIHsKICAgICBOUE9iamVjdCBvYmplY3Q7Ci0gICAgS0pTOjpKU09iamVjdCAqaW1wOwotICAg
IGNvbnN0IEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QgKm9yaWdpbkV4ZWN1dGlvbkNvbnRleHQ7
Ci0gICAgY29uc3QgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCAqZXhlY3V0aW9uQ29udGV4dDsK
KyAgICBLSlM6OkpTT2JqZWN0KiBpbXA7CisgICAgY29uc3QgS0pTOjpCaW5kaW5nczo6Um9vdE9i
amVjdCogb3JpZ2luRXhlY3V0aW9uQ29udGV4dDsKKyAgICBjb25zdCBLSlM6OkJpbmRpbmdzOjpS
b290T2JqZWN0KiBleGVjdXRpb25Db250ZXh0OwogfTsKIAotTlBPYmplY3QgKl9OUE5fQ3JlYXRl
U2NyaXB0T2JqZWN0KE5QUCBucHAsIEtKUzo6SlNPYmplY3QgKmltcCwgY29uc3QgS0pTOjpCaW5k
aW5nczo6Um9vdE9iamVjdCAqb3JpZ2luRXhlY3V0aW9uQ29udGV4dCwgY29uc3QgS0pTOjpCaW5k
aW5nczo6Um9vdE9iamVjdCAqZXhlY3V0aW9uQ29udGV4dCk7Ci1OUE9iamVjdCAqX05QTl9DcmVh
dGVOb1NjcmlwdE9iamVjdCh2b2lkKTsKK05QT2JqZWN0KiBfTlBOX0NyZWF0ZVNjcmlwdE9iamVj
dChOUFAgbnBwLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVj
dCogb3JpZ2luRXhlY3V0aW9uQ29udGV4dCwgY29uc3QgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVj
dCogZXhlY3V0aW9uQ29udGV4dCk7CitOUE9iamVjdCogX05QTl9DcmVhdGVOb1NjcmlwdE9iamVj
dCh2b2lkKTsKIAogI2VuZGlmCkluZGV4OiBiaW5kaW5ncy9ucHJ1bnRpbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGJpbmRpbmdzL25wcnVudGltZS5jcHAJKHJldmlzaW9uIDEzMjk3KQorKysgYmluZGlu
Z3MvbnBydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIy
LDEwNCArMjIsODAgQEAKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KKwog
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIm5wcnVudGltZS5oIgorI2luY2x1ZGUgIm5w
cnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAibnBydW50aW1lX3ByaXYuaCIKKworI2luY2x1ZGUg
ImNfdXRpbGl0eS5oIgogI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+
CiAKLSNpbmNsdWRlIDxucHJ1bnRpbWUuaD4KLSNpbmNsdWRlIDxjX3V0aWxpdHkuaD4KLQotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL25wcnVudGltZV9pbXBsLmg+Ci0KIHVzaW5nIG5hbWVzcGFj
ZSBLSlM6OkJpbmRpbmdzOwogCi1zdGF0aWMgQm9vbGVhbiBzdHJpbmdJZGVudGlmaWVyRXF1YWwo
Y29uc3Qgdm9pZCAqdmFsdWUxLCBjb25zdCB2b2lkICp2YWx1ZTIpCitzdGF0aWMgQm9vbGVhbiBz
dHJpbmdJZGVudGlmaWVyRXF1YWwoY29uc3Qgdm9pZCogdmFsdWUxLCBjb25zdCB2b2lkKiB2YWx1
ZTIpCiB7Ci0gICAgcmV0dXJuIHN0cmNtcCgoY29uc3QgY2hhciAqKXZhbHVlMSwgKGNvbnN0IGNo
YXIgKil2YWx1ZTIpID09IDA7CisgICAgcmV0dXJuIHN0cmNtcCgoY29uc3QgY2hhciopdmFsdWUx
LCAoY29uc3QgY2hhciopdmFsdWUyKSA9PSAwOwogfQogCi1zdGF0aWMgQ0ZIYXNoQ29kZSBzdHJp
bmdJZGVudGlmaWVySGFzaCAoY29uc3Qgdm9pZCAqdmFsdWUpCitzdGF0aWMgQ0ZIYXNoQ29kZSBz
dHJpbmdJZGVudGlmaWVySGFzaChjb25zdCB2b2lkKiB2YWx1ZSkKIHsKLSAgICBjb25zdCBjaGFy
ICprZXkgPSAoY29uc3QgY2hhciAqKXZhbHVlOwotICAgIHVuc2lnbmVkIGludCBsZW4gPSBzdHJs
ZW4oa2V5KTsKLSAgICB1bnNpZ25lZCBpbnQgcmVzdWx0ID0gbGVuOworICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGtleSA9IChjb25zdCB1bnNpZ25lZCBjaGFyKil2YWx1ZTsKKyAgICB1bnNpZ25l
ZCBsZW4gPSBzdHJsZW4oKGNvbnN0IGNoYXIqKWtleSk7CisgICAgdW5zaWduZWQgcmVzdWx0ID0g
bGVuOwogCiAgICAgaWYgKGxlbiA8PSAxNikgewogICAgICAgICB1bnNpZ25lZCBjbnQgPSBsZW47
Ci0gICAgICAgIHdoaWxlIChjbnQtLSkgcmVzdWx0ID0gcmVzdWx0ICogMjU3ICsgKih1bnNpZ25l
ZCBjaGFyICopa2V5Kys7CisgICAgICAgIHdoaWxlIChjbnQtLSkKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHJlc3VsdCAqIDI1NyArICprZXkrKzsKICAgICB9IGVsc2UgewogICAgICAgICB1bnNpZ25l
ZCBjbnQ7Ci0gICAgICAgIGZvciAoY250ID0gODsgY250ID4gMDsgY250LS0pIHJlc3VsdCA9IHJl
c3VsdCAqIDI1NyArICoodW5zaWduZWQgY2hhciAqKWtleSsrOworICAgICAgICBmb3IgKGNudCA9
IDg7IGNudCA+IDA7IGNudC0tKQorICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMjU3ICsg
KmtleSsrOwogICAgICAgICBrZXkgKz0gKGxlbiAtIDE2KTsKLSAgICAgICAgZm9yIChjbnQgPSA4
OyBjbnQgPiAwOyBjbnQtLSkgcmVzdWx0ID0gcmVzdWx0ICogMjU3ICsgKih1bnNpZ25lZCBjaGFy
ICopa2V5Kys7CisgICAgICAgIGZvciAoY250ID0gODsgY250ID4gMDsgY250LS0pCisgICAgICAg
ICAgICByZXN1bHQgPSByZXN1bHQgKiAyNTcgKyAqa2V5Kys7CiAgICAgfQogICAgIHJlc3VsdCAr
PSAocmVzdWx0IDw8IChsZW4gJiAzMSkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3Rh
dGljIENGRGljdGlvbmFyeUtleUNhbGxCYWNrcyBzdHJpbmdJZGVudGlmaWVyQ2FsbGJhY2tzID0g
ewotICAgIDAsCi0gICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgc3RyaW5nSWRl
bnRpZmllckVxdWFsLAotICAgIHN0cmluZ0lkZW50aWZpZXJIYXNoCi19OwotCi1zdGF0aWMgQ0ZN
dXRhYmxlRGljdGlvbmFyeVJlZiBzdHJpbmdJZGVudGlmaWVyRGljdGlvbmFyeSA9IDA7Ci0KIHN0
YXRpYyBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGdldFN0cmluZ0lkZW50aWZpZXJEaWN0aW9uYXJ5
KCkKIHsKLSAgICBpZiAoIXN0cmluZ0lkZW50aWZpZXJEaWN0aW9uYXJ5KQorICAgIHN0YXRpYyBD
Rk11dGFibGVEaWN0aW9uYXJ5UmVmIHN0cmluZ0lkZW50aWZpZXJEaWN0aW9uYXJ5ID0gMDsKKyAg
ICBpZiAoIXN0cmluZ0lkZW50aWZpZXJEaWN0aW9uYXJ5KSB7CisgICAgICAgIENGRGljdGlvbmFy
eUtleUNhbGxCYWNrcyBzdHJpbmdJZGVudGlmaWVyQ2FsbGJhY2tzID0geyAwLCBOVUxMLCBOVUxM
LCBOVUxMLCBzdHJpbmdJZGVudGlmaWVyRXF1YWwsIHN0cmluZ0lkZW50aWZpZXJIYXNoIH07CiAg
ICAgICAgIHN0cmluZ0lkZW50aWZpZXJEaWN0aW9uYXJ5ID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0
YWJsZShOVUxMLCAwLCAmc3RyaW5nSWRlbnRpZmllckNhbGxiYWNrcywgTlVMTCk7CisgICAgfQog
ICAgIHJldHVybiBzdHJpbmdJZGVudGlmaWVyRGljdGlvbmFyeTsKIH0KIAotc3RhdGljIEJvb2xl
YW4gaW50SWRlbnRpZmllckVxdWFsKGNvbnN0IHZvaWQgKnZhbHVlMSwgY29uc3Qgdm9pZCAqdmFs
dWUyKQotewotICAgIHJldHVybiB2YWx1ZTEgPT0gdmFsdWUyOwotfQotCi1zdGF0aWMgQ0ZIYXNo
Q29kZSBpbnRJZGVudGlmaWVySGFzaCAoY29uc3Qgdm9pZCAqdmFsdWUpCi17Ci0gICAgcmV0dXJu
IChDRkhhc2hDb2RlKXZhbHVlOwotfQotCi1zdGF0aWMgQ0ZEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tz
IGludElkZW50aWZpZXJDYWxsYmFja3MgPSB7Ci0gICAgMCwKLSAgICBOVUxMLAotICAgIE5VTEws
Ci0gICAgTlVMTCwKLSAgICBpbnRJZGVudGlmaWVyRXF1YWwsCi0gICAgaW50SWRlbnRpZmllckhh
c2gKLX07Ci0KLXN0YXRpYyBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGludElkZW50aWZpZXJEaWN0
aW9uYXJ5ID0gMDsKLQogc3RhdGljIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgZ2V0SW50SWRlbnRp
ZmllckRpY3Rpb25hcnkoKQogeworICAgIHN0YXRpYyBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGlu
dElkZW50aWZpZXJEaWN0aW9uYXJ5ID0gMDsKICAgICBpZiAoIWludElkZW50aWZpZXJEaWN0aW9u
YXJ5KQotICAgICAgICBpbnRJZGVudGlmaWVyRGljdGlvbmFyeSA9IENGRGljdGlvbmFyeUNyZWF0
ZU11dGFibGUoTlVMTCwgMCwgJmludElkZW50aWZpZXJDYWxsYmFja3MsIE5VTEwpOworICAgICAg
ICBpbnRJZGVudGlmaWVyRGljdGlvbmFyeSA9IENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoTlVM
TCwgMCwgTlVMTCwgTlVMTCk7CiAgICAgcmV0dXJuIGludElkZW50aWZpZXJEaWN0aW9uYXJ5Owog
fQogCi1OUElkZW50aWZpZXIgX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyIChjb25zdCBOUFVURjgg
Km5hbWUpCitOUElkZW50aWZpZXIgX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyKGNvbnN0IE5QVVRG
OCogbmFtZSkKIHsKLSAgICBhc3NlcnQgKG5hbWUpOworICAgIGFzc2VydChuYW1lKTsKICAgICAK
ICAgICBpZiAobmFtZSkgewotICAgICAgICBQcml2YXRlSWRlbnRpZmllciAqaWRlbnRpZmllciA9
IDA7CisgICAgICAgIFByaXZhdGVJZGVudGlmaWVyKiBpZGVudGlmaWVyID0gMDsKICAgICAgICAg
Ci0gICAgICAgIGlkZW50aWZpZXIgPSAoUHJpdmF0ZUlkZW50aWZpZXIgKilDRkRpY3Rpb25hcnlH
ZXRWYWx1ZSAoZ2V0U3RyaW5nSWRlbnRpZmllckRpY3Rpb25hcnkoKSwgKGNvbnN0IHZvaWQgKilu
YW1lKTsKKyAgICAgICAgaWRlbnRpZmllciA9IChQcml2YXRlSWRlbnRpZmllciopQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUoZ2V0U3RyaW5nSWRlbnRpZmllckRpY3Rpb25hcnkoKSwgbmFtZSk7CiAgICAg
ICAgIGlmIChpZGVudGlmaWVyID09IDApIHsKLSAgICAgICAgICAgIGlkZW50aWZpZXIgPSAoUHJp
dmF0ZUlkZW50aWZpZXIgKiltYWxsb2MgKHNpemVvZihQcml2YXRlSWRlbnRpZmllcikpOworICAg
ICAgICAgICAgaWRlbnRpZmllciA9IChQcml2YXRlSWRlbnRpZmllciopbWFsbG9jKHNpemVvZihQ
cml2YXRlSWRlbnRpZmllcikpOwogICAgICAgICAgICAgLy8gV2UgbmV2ZXIgcmVsZWFzZSBpZGVu
dGlmaWVyIG5hbWVzLCBzbyB0aGlzIGRpY3Rpb25hcnkgd2lsbCBncm93LCBhcyB3aWxsCiAgICAg
ICAgICAgICAvLyB0aGUgbWVtb3J5IGZvciB0aGUgaWRlbnRpZmllciBuYW1lIHN0cmluZ3MuCiAg
ICAgICAgICAgICBpZGVudGlmaWVyLT5pc1N0cmluZyA9IHRydWU7Ci0gICAgICAgICAgICBjb25z
dCBjaGFyICppZGVudGlmaWVyTmFtZSA9IHN0cmR1cCAobmFtZSk7CisgICAgICAgICAgICBjb25z
dCBjaGFyKiBpZGVudGlmaWVyTmFtZSA9IHN0cmR1cChuYW1lKTsKICAgICAgICAgICAgIGlkZW50
aWZpZXItPnZhbHVlLnN0cmluZyA9IGlkZW50aWZpZXJOYW1lOwogCi0gICAgICAgICAgICBDRkRp
Y3Rpb25hcnlBZGRWYWx1ZSAoZ2V0U3RyaW5nSWRlbnRpZmllckRpY3Rpb25hcnkoKSwgaWRlbnRp
Zmllck5hbWUsIChjb25zdCB2b2lkICopaWRlbnRpZmllcik7CisgICAgICAgICAgICBDRkRpY3Rp
b25hcnlBZGRWYWx1ZShnZXRTdHJpbmdJZGVudGlmaWVyRGljdGlvbmFyeSgpLCBpZGVudGlmaWVy
TmFtZSwgaWRlbnRpZmllcik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIChOUElkZW50aWZp
ZXIpaWRlbnRpZmllcjsKICAgICB9CkBAIC0xMjcsNDUgKzEwMyw0MSBAQAogICAgIHJldHVybiAw
OwogfQogCi12b2lkIF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcnMgKGNvbnN0IE5QVVRGOCAqKm5h
bWVzLCBpbnQzMl90IG5hbWVDb3VudCwgTlBJZGVudGlmaWVyICppZGVudGlmaWVycykKK3ZvaWQg
X05QTl9HZXRTdHJpbmdJZGVudGlmaWVycyhjb25zdCBOUFVURjgqKiBuYW1lcywgaW50MzJfdCBu
YW1lQ291bnQsIE5QSWRlbnRpZmllciogaWRlbnRpZmllcnMpCiB7Ci0gICAgYXNzZXJ0IChuYW1l
cyk7Ci0gICAgYXNzZXJ0IChpZGVudGlmaWVycyk7CisgICAgYXNzZXJ0KG5hbWVzKTsKKyAgICBh
c3NlcnQoaWRlbnRpZmllcnMpOwogICAgIAotICAgIGlmIChuYW1lcyAmJiBpZGVudGlmaWVycykg
ewotICAgICAgICBpbnQgaTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBuYW1l
Q291bnQ7IGkrKykgewotICAgICAgICAgICAgaWRlbnRpZmllcnNbaV0gPSBfTlBOX0dldFN0cmlu
Z0lkZW50aWZpZXIgKG5hbWVzW2ldKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAobmFtZXMg
JiYgaWRlbnRpZmllcnMpCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZUNvdW50OyBp
KyspCisgICAgICAgICAgICBpZGVudGlmaWVyc1tpXSA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmll
cihuYW1lc1tpXSk7CiB9CiAKIE5QSWRlbnRpZmllciBfTlBOX0dldEludElkZW50aWZpZXIoaW50
MzJfdCBpbnRpZCkKIHsKLSAgICBQcml2YXRlSWRlbnRpZmllciAqaWRlbnRpZmllciA9IDA7Cisg
ICAgUHJpdmF0ZUlkZW50aWZpZXIqIGlkZW50aWZpZXIgPSAwOwogICAgIAotICAgIGlkZW50aWZp
ZXIgPSAoUHJpdmF0ZUlkZW50aWZpZXIgKilDRkRpY3Rpb25hcnlHZXRWYWx1ZSAoZ2V0SW50SWRl
bnRpZmllckRpY3Rpb25hcnkoKSwgKGNvbnN0IHZvaWQgKilpbnRpZCk7CisgICAgaWRlbnRpZmll
ciA9IChQcml2YXRlSWRlbnRpZmllciopQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZ2V0SW50SWRlbnRp
ZmllckRpY3Rpb25hcnkoKSwgKGNvbnN0IHZvaWQqKWludGlkKTsKICAgICBpZiAoaWRlbnRpZmll
ciA9PSAwKSB7Ci0gICAgICAgIGlkZW50aWZpZXIgPSAoUHJpdmF0ZUlkZW50aWZpZXIgKiltYWxs
b2MgKHNpemVvZihQcml2YXRlSWRlbnRpZmllcikpOworICAgICAgICBpZGVudGlmaWVyID0gKFBy
aXZhdGVJZGVudGlmaWVyKiltYWxsb2Moc2l6ZW9mKFByaXZhdGVJZGVudGlmaWVyKSk7CiAgICAg
ICAgIC8vIFdlIG5ldmVyIHJlbGVhc2UgaWRlbnRpZmllciBuYW1lcywgc28gdGhpcyBkaWN0aW9u
YXJ5IHdpbGwgZ3Jvdy4KICAgICAgICAgaWRlbnRpZmllci0+aXNTdHJpbmcgPSBmYWxzZTsKICAg
ICAgICAgaWRlbnRpZmllci0+dmFsdWUubnVtYmVyID0gaW50aWQ7CiAKLSAgICAgICAgQ0ZEaWN0
aW9uYXJ5QWRkVmFsdWUgKGdldEludElkZW50aWZpZXJEaWN0aW9uYXJ5KCksIChjb25zdCB2b2lk
ICopaW50aWQsIChjb25zdCB2b2lkICopaWRlbnRpZmllcik7CisgICAgICAgIENGRGljdGlvbmFy
eUFkZFZhbHVlKGdldEludElkZW50aWZpZXJEaWN0aW9uYXJ5KCksIChjb25zdCB2b2lkKilpbnRp
ZCwgaWRlbnRpZmllcik7CiAgICAgfQogICAgIHJldHVybiAoTlBJZGVudGlmaWVyKWlkZW50aWZp
ZXI7CiB9CiAKIGJvb2wgX05QTl9JZGVudGlmaWVySXNTdHJpbmcoTlBJZGVudGlmaWVyIGlkZW50
aWZpZXIpCiB7Ci0gICAgUHJpdmF0ZUlkZW50aWZpZXIgKmkgPSAoUHJpdmF0ZUlkZW50aWZpZXIg
KilpZGVudGlmaWVyOworICAgIFByaXZhdGVJZGVudGlmaWVyKiBpID0gKFByaXZhdGVJZGVudGlm
aWVyKilpZGVudGlmaWVyOwogICAgIHJldHVybiBpLT5pc1N0cmluZzsKIH0KIAotTlBVVEY4ICpf
TlBOX1VURjhGcm9tSWRlbnRpZmllciAoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpCitOUFVURjgg
Kl9OUE5fVVRGOEZyb21JZGVudGlmaWVyKE5QSWRlbnRpZmllciBpZGVudGlmaWVyKQogewotICAg
IFByaXZhdGVJZGVudGlmaWVyICppID0gKFByaXZhdGVJZGVudGlmaWVyICopaWRlbnRpZmllcjsK
KyAgICBQcml2YXRlSWRlbnRpZmllciogaSA9IChQcml2YXRlSWRlbnRpZmllciopaWRlbnRpZmll
cjsKICAgICBpZiAoIWktPmlzU3RyaW5nIHx8ICFpLT52YWx1ZS5zdHJpbmcpCiAgICAgICAgIHJl
dHVybiBOVUxMOwogICAgICAgICAKQEAgLTE3NCwyNDAgKzE0Niw1OSBAQAogCiBpbnQzMl90IF9O
UE5fSW50RnJvbUlkZW50aWZpZXIoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpCiB7Ci0gICAgUHJp
dmF0ZUlkZW50aWZpZXIgKmkgPSAoUHJpdmF0ZUlkZW50aWZpZXIgKilpZGVudGlmaWVyOworICAg
IFByaXZhdGVJZGVudGlmaWVyKiBpID0gKFByaXZhdGVJZGVudGlmaWVyKilpZGVudGlmaWVyOwog
ICAgIGlmICghaS0+aXNTdHJpbmcpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBpLT52
YWx1ZS5udW1iZXI7CiB9CiAKLU5QQm9vbCBOUE5fVmFyaWFudElzVm9pZCAoY29uc3QgTlBWYXJp
YW50ICp2YXJpYW50KQordm9pZCBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoU3RyaW5nQ29weShO
UFZhcmlhbnQqIHZhcmlhbnQsIGNvbnN0IE5QU3RyaW5nKiB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
dmFyaWFudC0+dHlwZSA9PSBOUFZhcmlhbnRUeXBlX1ZvaWQ7Ci19Ci0KLU5QQm9vbCBOUE5fVmFy
aWFudElzTnVsbCAoY29uc3QgTlBWYXJpYW50ICp2YXJpYW50KQotewotICAgIHJldHVybiB2YXJp
YW50LT50eXBlID09IE5QVmFyaWFudFR5cGVfTnVsbDsKLX0KLQotTlBCb29sIE5QTl9WYXJpYW50
SXNVbmRlZmluZWQgKGNvbnN0IE5QVmFyaWFudCAqdmFyaWFudCkKLXsKLSAgICByZXR1cm4gdmFy
aWFudC0+dHlwZSA9PSBOUFZhcmlhbnRUeXBlX1ZvaWQ7Ci19Ci0KLU5QQm9vbCBOUE5fVmFyaWFu
dElzQm9vbCAoY29uc3QgTlBWYXJpYW50ICp2YXJpYW50KQotewotICAgIHJldHVybiB2YXJpYW50
LT50eXBlID09IE5QVmFyaWFudFR5cGVfQm9vbDsKLX0KLQotTlBCb29sIE5QTl9WYXJpYW50SXNJ
bnQzMiAoY29uc3QgTlBWYXJpYW50ICp2YXJpYW50KQotewotICAgIHJldHVybiB2YXJpYW50LT50
eXBlID09IE5QVmFyaWFudFR5cGVfSW50MzI7Ci19Ci0KLU5QQm9vbCBOUE5fVmFyaWFudElzRG91
YmxlIChjb25zdCBOUFZhcmlhbnQgKnZhcmlhbnQpCi17Ci0gICAgcmV0dXJuIHZhcmlhbnQtPnR5
cGUgPT0gTlBWYXJpYW50VHlwZV9Eb3VibGU7Ci19Ci0KLU5QQm9vbCBOUE5fVmFyaWFudElzU3Ry
aW5nIChjb25zdCBOUFZhcmlhbnQgKnZhcmlhbnQpCi17Ci0gICAgcmV0dXJuIHZhcmlhbnQtPnR5
cGUgPT0gTlBWYXJpYW50VHlwZV9TdHJpbmc7Ci19Ci0KLU5QQm9vbCBOUE5fVmFyaWFudElzT2Jq
ZWN0IChjb25zdCBOUFZhcmlhbnQgKnZhcmlhbnQpCi17Ci0gICAgcmV0dXJuIHZhcmlhbnQtPnR5
cGUgPT0gTlBWYXJpYW50VHlwZV9PYmplY3Q7Ci19Ci0KLU5QQm9vbCBOUE5fVmFyaWFudFRvQm9v
bCAoY29uc3QgTlBWYXJpYW50ICp2YXJpYW50LCBOUEJvb2wgKnJlc3VsdCkKLXsKLSAgICBpZiAo
dmFyaWFudC0+dHlwZSAhPSBOUFZhcmlhbnRUeXBlX0Jvb2wpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgCi0gICAgKnJlc3VsdCA9IHZhcmlhbnQtPnZhbHVlLmJvb2xWYWx1ZTsKLSAg
ICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotTlBTdHJpbmcgTlBOX1ZhcmlhbnRUb1N0cmluZyAo
Y29uc3QgTlBWYXJpYW50ICp2YXJpYW50KQotewotICAgIGlmICh2YXJpYW50LT50eXBlICE9IE5Q
VmFyaWFudFR5cGVfU3RyaW5nKSB7Ci0gICAgICAgIE5QU3RyaW5nIGVtcHR5U3RyaW5nID0geyAw
LCAwIH07Ci0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZzsKLSAgICB9Ci0gICAgICAgICAgICAK
LSAgICByZXR1cm4gdmFyaWFudC0+dmFsdWUuc3RyaW5nVmFsdWU7Ci19Ci0KLU5QQm9vbCBOUE5f
VmFyaWFudFRvSW50MzIgKGNvbnN0IE5QVmFyaWFudCAqdmFyaWFudCwgaW50MzJfdCAqcmVzdWx0
KQotewotICAgIGlmICh2YXJpYW50LT50eXBlID09IE5QVmFyaWFudFR5cGVfSW50MzIpCi0gICAg
ICAgICpyZXN1bHQgPSB2YXJpYW50LT52YWx1ZS5pbnRWYWx1ZTsKLSAgICBlbHNlIGlmICh2YXJp
YW50LT50eXBlID09IE5QVmFyaWFudFR5cGVfRG91YmxlKQotICAgICAgICAqcmVzdWx0ID0gKGlu
dDMyX3QpdmFyaWFudC0+dmFsdWUuZG91YmxlVmFsdWU7Ci0gICAgZWxzZQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLU5QQm9vbCBOUE5fVmFyaWFu
dFRvRG91YmxlIChjb25zdCBOUFZhcmlhbnQgKnZhcmlhbnQsIGRvdWJsZSAqcmVzdWx0KQotewot
ICAgIGlmICh2YXJpYW50LT50eXBlID09IE5QVmFyaWFudFR5cGVfSW50MzIpCi0gICAgICAgICpy
ZXN1bHQgPSAoZG91YmxlKXZhcmlhbnQtPnZhbHVlLmludFZhbHVlOwotICAgIGVsc2UgaWYgKHZh
cmlhbnQtPnR5cGUgPT0gTlBWYXJpYW50VHlwZV9Eb3VibGUpCi0gICAgICAgICpyZXN1bHQgPSB2
YXJpYW50LT52YWx1ZS5kb3VibGVWYWx1ZTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotTlBCb29sIE5QTl9WYXJpYW50VG9PYmpl
Y3QgKGNvbnN0IE5QVmFyaWFudCAqdmFyaWFudCwgTlBPYmplY3QgKipyZXN1bHQpCi17Ci0gICAg
aWYgKHZhcmlhbnQtPnR5cGUgIT0gTlBWYXJpYW50VHlwZV9PYmplY3QpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICpyZXN1bHQgPSB2YXJpYW50LT52YWx1ZS5vYmpl
Y3RWYWx1ZTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBOUE5fSW5pdGlhbGl6
ZVZhcmlhbnRBc1ZvaWQgKE5QVmFyaWFudCAqdmFyaWFudCkKLXsKLSAgICB2YXJpYW50LT50eXBl
ID0gTlBWYXJpYW50VHlwZV9Wb2lkOwotfQotCi12b2lkIE5QTl9Jbml0aWFsaXplVmFyaWFudEFz
TnVsbCAoTlBWYXJpYW50ICp2YXJpYW50KQotewotICAgIHZhcmlhbnQtPnR5cGUgPSBOUFZhcmlh
bnRUeXBlX051bGw7Ci19Ci0KLXZvaWQgTlBOX0luaXRpYWxpemVWYXJpYW50QXNVbmRlZmluZWQg
KE5QVmFyaWFudCAqdmFyaWFudCkKLXsKLSAgICB2YXJpYW50LT50eXBlID0gTlBWYXJpYW50VHlw
ZV9Wb2lkOwotfQotCi12b2lkIE5QTl9Jbml0aWFsaXplVmFyaWFudFdpdGhCb29sIChOUFZhcmlh
bnQgKnZhcmlhbnQsIE5QQm9vbCB2YWx1ZSkKLXsKLSAgICB2YXJpYW50LT50eXBlID0gTlBWYXJp
YW50VHlwZV9Cb29sOwotICAgIHZhcmlhbnQtPnZhbHVlLmJvb2xWYWx1ZSA9IHZhbHVlOwotfQot
Ci12b2lkIE5QTl9Jbml0aWFsaXplVmFyaWFudFdpdGhJbnQzMiAoTlBWYXJpYW50ICp2YXJpYW50
LCBpbnQzMl90IHZhbHVlKQotewotICAgIHZhcmlhbnQtPnR5cGUgPSBOUFZhcmlhbnRUeXBlX0lu
dDMyOwotICAgIHZhcmlhbnQtPnZhbHVlLmludFZhbHVlID0gdmFsdWU7Ci19Ci0KLXZvaWQgTlBO
X0luaXRpYWxpemVWYXJpYW50V2l0aERvdWJsZSAoTlBWYXJpYW50ICp2YXJpYW50LCBkb3VibGUg
dmFsdWUpCi17Ci0gICAgdmFyaWFudC0+dHlwZSA9IE5QVmFyaWFudFR5cGVfRG91YmxlOwotICAg
IHZhcmlhbnQtPnZhbHVlLmRvdWJsZVZhbHVlID0gdmFsdWU7Ci19Ci0KLXZvaWQgTlBOX0luaXRp
YWxpemVWYXJpYW50V2l0aFN0cmluZyAoTlBWYXJpYW50ICp2YXJpYW50LCBjb25zdCBOUFN0cmlu
ZyAqdmFsdWUpCi17CiAgICAgdmFyaWFudC0+dHlwZSA9IE5QVmFyaWFudFR5cGVfU3RyaW5nOwot
ICAgIHZhcmlhbnQtPnZhbHVlLnN0cmluZ1ZhbHVlID0gKnZhbHVlOwotfQotCi12b2lkIE5QTl9J
bml0aWFsaXplVmFyaWFudFdpdGhTdHJpbmdDb3B5IChOUFZhcmlhbnQgKnZhcmlhbnQsIGNvbnN0
IE5QU3RyaW5nICp2YWx1ZSkKLXsKLSAgICB2YXJpYW50LT50eXBlID0gTlBWYXJpYW50VHlwZV9T
dHJpbmc7CiAgICAgdmFyaWFudC0+dmFsdWUuc3RyaW5nVmFsdWUuVVRGOExlbmd0aCA9IHZhbHVl
LT5VVEY4TGVuZ3RoOwogICAgIHZhcmlhbnQtPnZhbHVlLnN0cmluZ1ZhbHVlLlVURjhDaGFyYWN0
ZXJzID0gKE5QVVRGOCAqKW1hbGxvYyhzaXplb2YoTlBVVEY4KSAqIHZhbHVlLT5VVEY4TGVuZ3Ro
KTsKLSAgICBtZW1jcHkgKCh2b2lkICopdmFyaWFudC0+dmFsdWUuc3RyaW5nVmFsdWUuVVRGOENo
YXJhY3RlcnMsIHZhbHVlLT5VVEY4Q2hhcmFjdGVycywgc2l6ZW9mKE5QVVRGOCkgKiB2YWx1ZS0+
VVRGOExlbmd0aCk7CisgICAgbWVtY3B5KCh2b2lkKil2YXJpYW50LT52YWx1ZS5zdHJpbmdWYWx1
ZS5VVEY4Q2hhcmFjdGVycywgdmFsdWUtPlVURjhDaGFyYWN0ZXJzLCBzaXplb2YoTlBVVEY4KSAq
IHZhbHVlLT5VVEY4TGVuZ3RoKTsKIH0KIAotdm9pZCBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRo
T2JqZWN0IChOUFZhcmlhbnQgKnZhcmlhbnQsIE5QT2JqZWN0ICp2YWx1ZSkKK3ZvaWQgX05QTl9S
ZWxlYXNlVmFyaWFudFZhbHVlKE5QVmFyaWFudCogdmFyaWFudCkKIHsKLSAgICB2YXJpYW50LT50
eXBlID0gTlBWYXJpYW50VHlwZV9PYmplY3Q7Ci0gICAgdmFyaWFudC0+dmFsdWUub2JqZWN0VmFs
dWUgPSBfTlBOX1JldGFpbk9iamVjdCAodmFsdWUpOwotfQorICAgIGFzc2VydCh2YXJpYW50KTsK
IAotdm9pZCBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoVmFyaWFudCAoTlBWYXJpYW50ICpkZXN0
aW5hdGlvbiwgY29uc3QgTlBWYXJpYW50ICpzb3VyY2UpCi17Ci0gICAgc3dpdGNoIChzb3VyY2Ut
PnR5cGUpewotICAgICAgICBjYXNlIE5QVmFyaWFudFR5cGVfVm9pZDogewotICAgICAgICAgICAg
TlBOX0luaXRpYWxpemVWYXJpYW50QXNWb2lkIChkZXN0aW5hdGlvbik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE5QVmFyaWFudFR5cGVfTnVsbDogewotICAg
ICAgICAgICAgTlBOX0luaXRpYWxpemVWYXJpYW50QXNOdWxsIChkZXN0aW5hdGlvbik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE5QVmFyaWFudFR5cGVfQm9v
bDogewotICAgICAgICAgICAgTlBOX0luaXRpYWxpemVWYXJpYW50V2l0aEJvb2wgKGRlc3RpbmF0
aW9uLCBzb3VyY2UtPnZhbHVlLmJvb2xWYWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIE5QVmFyaWFudFR5cGVfSW50MzI6IHsKLSAgICAgICAgICAgIE5Q
Tl9Jbml0aWFsaXplVmFyaWFudFdpdGhJbnQzMiAoZGVzdGluYXRpb24sIHNvdXJjZS0+dmFsdWUu
aW50VmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBO
UFZhcmlhbnRUeXBlX0RvdWJsZTogewotICAgICAgICAgICAgTlBOX0luaXRpYWxpemVWYXJpYW50
V2l0aERvdWJsZSAoZGVzdGluYXRpb24sIHNvdXJjZS0+dmFsdWUuZG91YmxlVmFsdWUpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBOUFZhcmlhbnRUeXBlX1N0
cmluZzogewotICAgICAgICAgICAgTlBOX0luaXRpYWxpemVWYXJpYW50V2l0aFN0cmluZ0NvcHkg
KGRlc3RpbmF0aW9uLCAmc291cmNlLT52YWx1ZS5zdHJpbmdWYWx1ZSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE5QVmFyaWFudFR5cGVfT2JqZWN0OiB7Ci0g
ICAgICAgICAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoT2JqZWN0IChkZXN0aW5hdGlvbiwg
c291cmNlLT52YWx1ZS5vYmplY3RWYWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRB
c1VuZGVmaW5lZCAoZGVzdGluYXRpb24pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlIChOUFZhcmlhbnQgKnZh
cmlhbnQpCi17Ci0gICAgYXNzZXJ0ICh2YXJpYW50KTsKLSAgICAKICAgICBpZiAodmFyaWFudC0+
dHlwZSA9PSBOUFZhcmlhbnRUeXBlX09iamVjdCkgewotICAgICAgICBfTlBOX1JlbGVhc2VPYmpl
Y3QgKHZhcmlhbnQtPnZhbHVlLm9iamVjdFZhbHVlKTsKKyAgICAgICAgX05QTl9SZWxlYXNlT2Jq
ZWN0KHZhcmlhbnQtPnZhbHVlLm9iamVjdFZhbHVlKTsKICAgICAgICAgdmFyaWFudC0+dmFsdWUu
b2JqZWN0VmFsdWUgPSAwOwotICAgIH0KLSAgICBlbHNlIGlmICh2YXJpYW50LT50eXBlID09IE5Q
VmFyaWFudFR5cGVfU3RyaW5nKSB7Ci0gICAgICAgIGZyZWUgKCh2b2lkICopdmFyaWFudC0+dmFs
dWUuc3RyaW5nVmFsdWUuVVRGOENoYXJhY3RlcnMpOworICAgIH0gZWxzZSBpZiAodmFyaWFudC0+
dHlwZSA9PSBOUFZhcmlhbnRUeXBlX1N0cmluZykgeworICAgICAgICBmcmVlKCh2b2lkKil2YXJp
YW50LT52YWx1ZS5zdHJpbmdWYWx1ZS5VVEY4Q2hhcmFjdGVycyk7CiAgICAgICAgIHZhcmlhbnQt
PnZhbHVlLnN0cmluZ1ZhbHVlLlVURjhDaGFyYWN0ZXJzID0gMDsKICAgICAgICAgdmFyaWFudC0+
dmFsdWUuc3RyaW5nVmFsdWUuVVRGOExlbmd0aCA9IDA7CiAgICAgfQotICAgIAorCiAgICAgdmFy
aWFudC0+dHlwZSA9IE5QVmFyaWFudFR5cGVfVm9pZDsKIH0KIAotCi1OUE9iamVjdCAqX05QTl9D
cmVhdGVPYmplY3QgKE5QUCBucHAsIE5QQ2xhc3MgKmFDbGFzcykKK05QT2JqZWN0ICpfTlBOX0Ny
ZWF0ZU9iamVjdChOUFAgbnBwLCBOUENsYXNzKiBhQ2xhc3MpCiB7Ci0gICAgYXNzZXJ0IChhQ2xh
c3MpOworICAgIGFzc2VydChhQ2xhc3MpOwogCiAgICAgaWYgKGFDbGFzcykgewotICAgICAgICBO
UE9iamVjdCAqb2JqOwotICAgICAgICAKKyAgICAgICAgTlBPYmplY3QqIG9iajsKICAgICAgICAg
aWYgKGFDbGFzcy0+YWxsb2NhdGUgIT0gTlVMTCkKLSAgICAgICAgICAgIG9iaiA9IGFDbGFzcy0+
YWxsb2NhdGUgKG5wcCwgYUNsYXNzKTsKKyAgICAgICAgICAgIG9iaiA9IGFDbGFzcy0+YWxsb2Nh
dGUobnBwLCBhQ2xhc3MpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBvYmogPSAoTlBPYmpl
Y3QgKiltYWxsb2MgKHNpemVvZihOUE9iamVjdCkpOwotICAgICAgICAgICAgCisgICAgICAgICAg
ICBvYmogPSAoTlBPYmplY3QqKW1hbGxvYyhzaXplb2YoTlBPYmplY3QpKTsKKwogICAgICAgICBv
YmotPl9jbGFzcyA9IGFDbGFzczsKICAgICAgICAgb2JqLT5yZWZlcmVuY2VDb3VudCA9IDE7CiAK
ICAgICAgICAgcmV0dXJuIG9iajsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gMDsKIH0KIAot
Ci1OUE9iamVjdCAqX05QTl9SZXRhaW5PYmplY3QgKE5QT2JqZWN0ICpvYmopCitOUE9iamVjdCog
X05QTl9SZXRhaW5PYmplY3QoTlBPYmplY3QqIG9iaikKIHsKLSAgICBhc3NlcnQgKG9iaik7Cisg
ICAgYXNzZXJ0KG9iaik7CiAKICAgICBpZiAob2JqKQogICAgICAgICBvYmotPnJlZmVyZW5jZUNv
dW50Kys7CkBAIC00MTUsMTYgKzIwNiwxMyBAQAogICAgIHJldHVybiBvYmo7CiB9CiAKLQotdm9p
ZCBfTlBOX1JlbGVhc2VPYmplY3QgKE5QT2JqZWN0ICpvYmopCit2b2lkIF9OUE5fUmVsZWFzZU9i
amVjdChOUE9iamVjdCogb2JqKQogewotICAgIGFzc2VydCAob2JqKTsKLSAgICBhc3NlcnQgKG9i
ai0+cmVmZXJlbmNlQ291bnQgPj0gMSk7CisgICAgYXNzZXJ0KG9iaik7CisgICAgYXNzZXJ0KG9i
ai0+cmVmZXJlbmNlQ291bnQgPj0gMSk7CiAKICAgICBpZiAob2JqICYmIG9iai0+cmVmZXJlbmNl
Q291bnQgPj0gMSkgewotICAgICAgICBvYmotPnJlZmVyZW5jZUNvdW50LS07Ci0gICAgICAgIAot
ICAgICAgICBpZiAob2JqLT5yZWZlcmVuY2VDb3VudCA9PSAwKQorICAgICAgICBpZiAoLS1vYmot
PnJlZmVyZW5jZUNvdW50ID09IDApCiAgICAgICAgICAgICBfTlBOX0RlYWxsb2NhdGVPYmplY3Qo
b2JqKTsKICAgICB9CiB9CkluZGV4OiBiaW5kaW5ncy9ucHJ1bnRpbWVfcHJpdi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGJpbmRpbmdzL25wcnVudGltZV9wcml2LmgJKHJldmlzaW9uIDEzMjk3KQorKysgYmlu
ZGluZ3MvbnBydW50aW1lX3ByaXYuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTIyLDUzICsyMiwxNiBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAq
LwotI2lmbmRlZiBfTlBfUlVOVElNRV9QUklWX0hfCi0jZGVmaW5lIF9OUF9SVU5USU1FX1BSSVZf
SF8KIAotTlBCb29sIE5QTl9WYXJpYW50SXNWb2lkIChjb25zdCBOUFZhcmlhbnQgKnZhcmlhbnQp
OwotTlBCb29sIE5QTl9WYXJpYW50SXNOdWxsIChjb25zdCBOUFZhcmlhbnQgKnZhcmlhbnQpOwot
TlBCb29sIE5QTl9WYXJpYW50SXNVbmRlZmluZWQgKGNvbnN0IE5QVmFyaWFudCAqdmFyaWFudCk7
Ci1OUEJvb2wgTlBOX1ZhcmlhbnRJc0Jvb2wgKGNvbnN0IE5QVmFyaWFudCAqdmFyaWFudCk7Ci1O
UEJvb2wgTlBOX1ZhcmlhbnRJc0ludDMyIChjb25zdCBOUFZhcmlhbnQgKnZhcmlhbnQpOwotTlBC
b29sIE5QTl9WYXJpYW50SXNEb3VibGUgKGNvbnN0IE5QVmFyaWFudCAqdmFyaWFudCk7Ci1OUEJv
b2wgTlBOX1ZhcmlhbnRJc1N0cmluZyAoY29uc3QgTlBWYXJpYW50ICp2YXJpYW50KTsKLU5QQm9v
bCBOUE5fVmFyaWFudElzT2JqZWN0IChjb25zdCBOUFZhcmlhbnQgKnZhcmlhbnQpOwotTlBCb29s
IE5QTl9WYXJpYW50VG9Cb29sIChjb25zdCBOUFZhcmlhbnQgKnZhcmlhbnQsIE5QQm9vbCAqcmVz
dWx0KTsKLU5QQm9vbCBOUE5fVmFyaWFudFRvSW50MzIgKGNvbnN0IE5QVmFyaWFudCAqdmFyaWFu
dCwgaW50MzJfdCAqcmVzdWx0KTsKLU5QQm9vbCBOUE5fVmFyaWFudFRvRG91YmxlIChjb25zdCBO
UFZhcmlhbnQgKnZhcmlhbnQsIGRvdWJsZSAqcmVzdWx0KTsKLU5QU3RyaW5nIE5QTl9WYXJpYW50
VG9TdHJpbmcgKGNvbnN0IE5QVmFyaWFudCAqdmFyaWFudCk7Ci1OUFN0cmluZyBOUE5fVmFyaWFu
dFRvU3RyaW5nQ29weSAoY29uc3QgTlBWYXJpYW50ICp2YXJpYW50KTsKLU5QQm9vbCBOUE5fVmFy
aWFudFRvT2JqZWN0IChjb25zdCBOUFZhcmlhbnQgKnZhcmlhbnQsIE5QT2JqZWN0ICoqcmVzdWx0
KTsKKyNpZm5kZWYgTlBfUlVOVElNRV9QUklWX0hfCisjZGVmaW5lIE5QX1JVTlRJTUVfUFJJVl9I
XwogCi0vKgotICAgIE5QVmFyaWFudHMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgTlBOX0luaXRpYWxp
emVWYXJpYW50WFhYKCkgZnVuY3Rpb25zCi0gICAgbXVzdCBiZSByZWxlYXNlZCB1c2luZyB0aGUg
TlBOX1JlbGVhc2VWYXJpYW50VmFsdWUoKSBmdW5jdGlvbi4KLSovCi12b2lkIE5QTl9Jbml0aWFs
aXplVmFyaWFudEFzVm9pZCAoTlBWYXJpYW50ICp2YXJpYW50KTsKLXZvaWQgTlBOX0luaXRpYWxp
emVWYXJpYW50QXNOdWxsIChOUFZhcmlhbnQgKnZhcmlhbnQpOwotdm9pZCBOUE5fSW5pdGlhbGl6
ZVZhcmlhbnRBc1VuZGVmaW5lZCAoTlBWYXJpYW50ICp2YXJpYW50KTsKLXZvaWQgTlBOX0luaXRp
YWxpemVWYXJpYW50V2l0aEJvb2wgKE5QVmFyaWFudCAqdmFyaWFudCwgTlBCb29sIHZhbHVlKTsK
LXZvaWQgTlBOX0luaXRpYWxpemVWYXJpYW50V2l0aEludDMyIChOUFZhcmlhbnQgKnZhcmlhbnQs
IGludDMyX3QgdmFsdWUpOwotdm9pZCBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoRG91YmxlIChO
UFZhcmlhbnQgKnZhcmlhbnQsIGRvdWJsZSB2YWx1ZSk7CisjaW5jbHVkZSAibnBydW50aW1lLmgi
CiAKIC8qCi0gICAgTlBOX0luaXRpYWxpemVWYXJpYW50V2l0aFN0cmluZygpIGRvZXMgbm90IGNv
cHkgc3RyaW5nIGRhdGEuICBIb3dldmVyCi0gICAgdGhlIHN0cmluZyBkYXRhIHdpbGwgYmUgZGVh
bGxvY2F0ZWQgYnkgY2FsbHMgdG8gTlBSZWxlYXNlVmFyaWFudFZhbHVlKCkuCi0qLwotdm9pZCBO
UE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoU3RyaW5nIChOUFZhcmlhbnQgKnZhcmlhbnQsIGNvbnN0
IE5QU3RyaW5nICp2YWx1ZSk7Ci0KLS8qCiAgICAgTlBOX0luaXRpYWxpemVWYXJpYW50V2l0aFN0
cmluZ0NvcHkoKSB3aWxsIGNvcHkgc3RyaW5nIGRhdGEuICBUaGUgc3RyaW5nIGRhdGEKICAgICB3
aWxsIGJlIGRlYWxsb2NhdGVkIGJ5IGNhbGxzIHRvIE5QUmVsZWFzZVZhcmlhbnRWYWx1ZSgpLgog
Ki8KLXZvaWQgTlBOX0luaXRpYWxpemVWYXJpYW50V2l0aFN0cmluZ0NvcHkgKE5QVmFyaWFudCAq
dmFyaWFudCwgY29uc3QgTlBTdHJpbmcgKnZhbHVlKTsKK3ZvaWQgTlBOX0luaXRpYWxpemVWYXJp
YW50V2l0aFN0cmluZ0NvcHkoTlBWYXJpYW50KiwgY29uc3QgTlBTdHJpbmcqKTsKIAotLyoKLSAg
ICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoT2JqZWN0KCkgcmV0YWlucyB0aGUgTlBPYmplY3Qu
ICBUaGUgb2JqZWN0IHdpbGwgYmUgcmVsZWFzZWQKLSAgICBieSBjYWxscyB0byBOUFJlbGVhc2VW
YXJpYW50VmFsdWUoKTsKLSovCi12b2lkIE5QTl9Jbml0aWFsaXplVmFyaWFudFdpdGhPYmplY3Qg
KE5QVmFyaWFudCAqdmFyaWFudCwgTlBPYmplY3QgKnZhbHVlKTsKLQotdm9pZCBOUE5fSW5pdGlh
bGl6ZVZhcmlhbnRXaXRoVmFyaWFudCAoTlBWYXJpYW50ICpkZXN0aW5hdGlvbiwgY29uc3QgTlBW
YXJpYW50ICpzb3VyY2UpOwotCiAjZW5kaWYK
</data>
<flag name="review"
          id="1912"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>