<?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>123945</bug_id>
          
          <creation_ts>2013-11-06 17:40:30 -0800</creation_ts>
          <short_desc>Cosmetic: rename xxxId to xxxID for ScriptId, SourceId, and BreakpointId</short_desc>
          <delta_ts>2013-11-07 12:16:39 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>121796</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>mkwst</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>948018</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-06 17:40:30 -0800</bug_when>
    <thetext>Currently, these types and variable sometimes use &quot;Id&quot; in their names, and &quot;ID&quot; at other times.  I&apos;m changing these for Inspector and Debugger related files for consistency.  This will also make it easier to review changes for the patch for https://bugs.webkit.org/show_bug.cgi?id=121796 later.

There is one exception: the Inspector protocol (.json files) and JS code uses &quot;breakpointId&quot; and &quot;scriptId&quot;.  For backward compatibility, we should not change the .json protocol files.  So, as a rule, I left these .json and .js files alone, along with their relevant C++ files.

This change is purely cosmetic, and has been run on the layout tests without any regression.  Patch coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948027</commentid>
    <comment_count>1</comment_count>
      <attachid>216254</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-06 18:16:08 -0800</bug_when>
    <thetext>Created attachment 216254
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948028</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-06 18:17:01 -0800</bug_when>
    <thetext>Attachment 216254 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/debugger/DebuggerCallFrame.cpp&apos;, u&apos;Source/JavaScriptCore/debugger/DebuggerCallFrame.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JavaScriptCallFrame.h&apos;, u&apos;Source/WebCore/bindings/js/ScriptDebugServer.cpp&apos;, u&apos;Source/WebCore/bindings/js/ScriptDebugServer.h&apos;, u&apos;Source/WebCore/inspector/InspectorConsoleAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorConsoleAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorConsoleInstrumentation.h&apos;, u&apos;Source/WebCore/inspector/InspectorDOMAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorDebuggerAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorDebuggerAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorInstrumentation.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorInstrumentation.h&apos;, u&apos;Source/WebCore/inspector/ScriptDebugListener.h&apos;, u&apos;Source/WebKit/mac/ChangeLog&apos;, u&apos;Source/WebKit/mac/WebView/WebScriptDebugger.mm&apos;]&quot; exit_code: 1
Source/WebCore/inspector/InspectorDebuggerAgent.cpp:305:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948039</commentid>
    <comment_count>3</comment_count>
      <attachid>216254</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-11-06 19:32:31 -0800</bug_when>
    <thetext>Comment on attachment 216254
the patch.

I don&apos;t really like &quot;ID&quot;, it isn&apos;t any better than &quot;Id&quot;. Maybe even worse. I would prefer spelling out &quot;Identifier&quot; (WebKit style is to not abbreviate).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948282</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-11-07 09:07:00 -0800</bug_when>
    <thetext>Should we go with &quot;Identifier&quot;, then? (&quot;Id&quot; seems wrong according to WebKit style, since it&apos;s a shortening like an acronym.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948302</commentid>
    <comment_count>5</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-11-07 09:33:36 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Should we go with &quot;Identifier&quot;, then? (&quot;Id&quot; seems wrong according to WebKit style, since it&apos;s a shortening like an acronym.)

I agree, &quot;Id&quot; is wrong too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948316</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-07 10:00:19 -0800</bug_when>
    <thetext>OK, we have an agreement that &quot;Id&quot; is not the right choice.  However, there are benefits to go with &quot;ID&quot; as a pseudo-acronym instead of &quot;Identifier&quot;.  These benefits are:

1. &quot;ID&quot; is short.  This makes for less verbose code which is easier to read.  This is valuable unless it conflicts with 2 below ...

2. It should be easy to understand.  For the cases of ScriptID, SourceID, and BreakpointID, I believe the meaning is clear and anyone who works with this area of the code would commonly interpret &quot;ID&quot; here to mean &quot;Identifier&quot; without needing it to be spelled out.

3. On a more subjective level, in VM / parser / debugger type code, &quot;Identiier&quot; is often associated with a string / symbol value, whereas &quot;ID&quot; is often associated with a numeric cookie / token.  My intent is for SourceID and BreakpointID to become numeric tokens in the patch for https://bugs.webkit.org/show_bug.cgi?id=121796, and this current patch is meant to minimize the cosmetic changes ahead of time.

Per our offline discussion, we&apos;ll move forward with &quot;ID&quot;.  That said, I do see areas in this patch where I used &quot;ID&quot; where the value is intended to be a string.  I&apos;ll upload another patch so that it adheres to reason 3 above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948344</commentid>
    <comment_count>7</comment_count>
      <attachid>216317</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-07 11:14:06 -0800</bug_when>
    <thetext>Created attachment 216317
patch 2: changed some IDs to Identifiers in InspectorDebuggerAgent because those are meant to be strings.

There are some places where ScriptID or SourceID is a string.  I chose to keep those as &quot;ID&quot;s because they ultimately hold a numeric SourceID value, but just happened to be encoded in a string.  In contrast, the InspectorDebuggerAgent actually has a different representation of breakpoint ids which are string names.  I renamed the &quot;ID&quot;s here to &quot;Identifier&quot;.

As a reminder, this patch is meant to reduce the cosmetic changes that will come with https://bugs.webkit.org/show_bug.cgi?id=121796.  With https://bugs.webkit.org/show_bug.cgi?id=121796, all the SourceIDs and BreakpointIDs in JSC and in the ScriptDebugServer will be numeric.  This current patch makes use of that knowledge in choosing whether to use &quot;ID&quot; or &quot;Identifier&quot; in the names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948348</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-07 11:15:13 -0800</bug_when>
    <thetext>Attachment 216317 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/debugger/DebuggerCallFrame.cpp&apos;, u&apos;Source/JavaScriptCore/debugger/DebuggerCallFrame.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JavaScriptCallFrame.h&apos;, u&apos;Source/WebCore/bindings/js/ScriptDebugServer.cpp&apos;, u&apos;Source/WebCore/bindings/js/ScriptDebugServer.h&apos;, u&apos;Source/WebCore/inspector/InspectorConsoleAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorConsoleAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorConsoleInstrumentation.h&apos;, u&apos;Source/WebCore/inspector/InspectorDOMAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorDebuggerAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorDebuggerAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorInstrumentation.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorInstrumentation.h&apos;, u&apos;Source/WebCore/inspector/ScriptDebugListener.h&apos;, u&apos;Source/WebKit/mac/ChangeLog&apos;, u&apos;Source/WebKit/mac/WebView/WebScriptDebugger.mm&apos;]&quot; exit_code: 1
Source/WebCore/inspector/InspectorDebuggerAgent.cpp:305:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948371</commentid>
    <comment_count>9</comment_count>
      <attachid>216317</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-11-07 11:56:31 -0800</bug_when>
    <thetext>Comment on attachment 216317
patch 2: changed some IDs to Identifiers in InspectorDebuggerAgent because those are meant to be strings.

Looks like Tim signed off on this, so r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948380</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-07 12:16:39 -0800</bug_when>
    <thetext>Thanks for the review.  Landed in r158862: &lt;http://trac.webkit.org/r158862&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216254</attachid>
            <date>2013-11-06 18:16:08 -0800</date>
            <delta_ts>2013-11-07 11:14:06 -0800</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-123945.patch</filename>
            <type>text/plain</type>
            <size>53188</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4ODA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBA
CisyMDEzLTExLTA2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBD
b3NtZXRpYzogcmVuYW1lIHh4eElkIHRvIHh4eElEIGZvciBTY3JpcHRJZCwgU291cmNlSWQsIGFu
ZCBCcmVha3BvaW50SWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjM5NDUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6
OkRlYnVnZ2VyQ2FsbEZyYW1lOjpzb3VyY2VJRCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2Fs
bEZyYW1lOjpzb3VyY2VJREZvckNhbGxGcmFtZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdn
ZXJDYWxsRnJhbWUuaDoKKwogMjAxMy0xMS0wNiAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBs
ZS5jb20+CiAKICAgICAgICAgW2lPU10gVXBzdHJlYW0gTGV0dGVycHJlc3MgZWZmZWN0CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxG
cmFtZS5jcHAJKHJldmlzaW9uIDE1ODc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDEyICs4NSwx
MiBAQCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBEZWJ1Z2dlckNhbGxGcmFtZTo6CiAgICAgcmV0dXJu
IG1fY2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CiB9CiAKLWludHB0cl90IERlYnVn
Z2VyQ2FsbEZyYW1lOjpzb3VyY2VJZCgpIGNvbnN0CitpbnRwdHJfdCBEZWJ1Z2dlckNhbGxGcmFt
ZTo6c291cmNlSUQoKSBjb25zdAogewogICAgIEFTU0VSVChpc1ZhbGlkKCkpOwogICAgIGlmICgh
aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc291cmNlSWRGb3JDYWxs
RnJhbWUobV9jYWxsRnJhbWUpOworICAgIHJldHVybiBzb3VyY2VJREZvckNhbGxGcmFtZShtX2Nh
bGxGcmFtZSk7CiB9CiAKIFN0cmluZyBEZWJ1Z2dlckNhbGxGcmFtZTo6ZnVuY3Rpb25OYW1lKCkg
Y29uc3QKQEAgLTE4NSw3ICsxODUsNyBAQCBUZXh0UG9zaXRpb24gRGVidWdnZXJDYWxsRnJhbWU6
OnBvc2l0aW9uCiAgICAgcmV0dXJuIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25l
QmFzZWRJbnQoZnVuY3Rvci5saW5lKCkpLCBPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQo
ZnVuY3Rvci5jb2x1bW4oKSkpOwogfQogCi1pbnRwdHJfdCBEZWJ1Z2dlckNhbGxGcmFtZTo6c291
cmNlSWRGb3JDYWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitpbnRwdHJfdCBEZWJ1Z2dl
ckNhbGxGcmFtZTo6c291cmNlSURGb3JDYWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
CiAgICAgQVNTRVJUKGNhbGxGcmFtZSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
L0RlYnVnZ2VyQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDE1ODc5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY2FsbEZyYW1lOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGFz
c1JlZlB0cjxEZWJ1Z2dlckNhbGxGcmFtZT4gY2FsbGVyRnJhbWUoKTsKICAgICBFeGVjU3RhdGUq
IGV4ZWMoKSBjb25zdCB7IHJldHVybiBtX2NhbGxGcmFtZTsgfQotICAgIEpTX0VYUE9SVF9QUklW
QVRFIGludHB0cl90IHNvdXJjZUlkKCkgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgaW50
cHRyX3Qgc291cmNlSUQoKSBjb25zdDsKIAogICAgIC8vIGxpbmUgYW5kIGNvbHVtbiBhcmUgaW4g
YmFzZSAwIGUuZy4gdGhlIGZpcnN0IGxpbmUgaXMgbGluZSAwLgogICAgIGludCBsaW5lKCkgY29u
c3QgeyByZXR1cm4gbV9wb3NpdGlvbi5tX2xpbmUuemVyb0Jhc2VkSW50KCk7IH0KQEAgLTcyLDcg
KzcyLDcgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTVmFsdWUg
ZXZhbHVhdGVXaXRoQ2FsbEZyYW1lKENhbGxGcmFtZSosIGNvbnN0IFN0cmluZyYgc2NyaXB0LCBK
U1ZhbHVlJiBleGNlcHRpb24pOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUZXh0UG9z
aXRpb24gcG9zaXRpb25Gb3JDYWxsRnJhbWUoQ2FsbEZyYW1lKik7Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIGludHB0cl90IHNvdXJjZUlkRm9yQ2FsbEZyYW1lKENhbGxGcmFtZSopOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBpbnRwdHJfdCBzb3VyY2VJREZvckNhbGxGcmFt
ZShDYWxsRnJhbWUqKTsKICAgICBzdGF0aWMgSlNWYWx1ZSB0aGlzVmFsdWVGb3JDYWxsRnJhbWUo
Q2FsbEZyYW1lKik7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTg4MDgp
CisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1
NCBAQAorMjAxMy0xMS0wNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAg
ICAgQ29zbWV0aWM6IHJlbmFtZSB4eHhJZCB0byB4eHhJRCBmb3IgU2NyaXB0SWQsIFNvdXJjZUlk
LCBhbmQgQnJlYWtwb2ludElkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTIzOTQ1LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5q
ZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5qZWN0ZWRT
Y3JpcHRIb3N0OjpmdW5jdGlvbkRldGFpbHMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0phdmFT
Y3JpcHRDYWxsRnJhbWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHRDYWxsRnJhbWU6
OnNvdXJjZUlEKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6U2NyaXB0RGVidWdTZXJ2ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6Omhhc0JyZWFrcG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmNsZWFyQnJlYWtwb2ludHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnVwZGF0ZUNhbGxGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6cGF1c2VJZk5lZWRlZCk6CisgICAgICAg
ICogYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnNvbGVBZ2VudDo6YWRkTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnNvbGVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb25z
b2xlSW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
YnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMb2Nh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVh
a3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92
ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
Y29udGludWVUb0xvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnJlc29sdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZXRTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0U2NyaXB0U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbXBpbGVTY3JpcHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cnVuU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnJlc2V0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjph
ZGRNZXNzYWdlVG9Db25zb2xlSW1wbCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5oOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVy
Lmg6CisKIDIwMTMtMTEtMDYgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtpT1NdIFVwc3RyZWFtIExldHRlcnByZXNzIGVmZmVjdApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMTU4Nzk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksMTEg
KzE2OSwxMSBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpmdW5jdGlvbkRlCiAgICAg
aW50IGxpbmVOdW1iZXIgPSBzb3VyY2VDb2RlLT5maXJzdExpbmUoKTsKICAgICBpZiAobGluZU51
bWJlcikKICAgICAgICAgbGluZU51bWJlciAtPSAxOyAvLyBJbiB0aGUgaW5zcGVjdG9yIHByb3Rv
Y29sIGFsbCBwb3NpdGlvbnMgYXJlIDAtYmFzZWQgd2hpbGUgaW4gU291cmNlQ29kZSB0aGV5IGFy
ZSAxLWJhc2VkCi0gICAgU3RyaW5nIHNjcmlwdElkID0gU3RyaW5nOjpudW1iZXIoc291cmNlQ29k
ZS0+cHJvdmlkZXIoKS0+YXNJRCgpKTsKKyAgICBTdHJpbmcgc2NyaXB0SUQgPSBTdHJpbmc6Om51
bWJlcihzb3VyY2VDb2RlLT5wcm92aWRlcigpLT5hc0lEKCkpOwogCiAgICAgSlNPYmplY3QqIGxv
Y2F0aW9uID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAgICAgbG9jYXRpb24tPnB1dERp
cmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJsaW5lTnVtYmVyIiksIGpzTnVtYmVy
KGxpbmVOdW1iZXIpKTsKLSAgICBsb2NhdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50
aWZpZXIoZXhlYywgInNjcmlwdElkIiksIGpzU3RyaW5nKGV4ZWMsIHNjcmlwdElkKSk7CisgICAg
bG9jYXRpb24tPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJzY3JpcHRJ
ZCIpLCBqc1N0cmluZyhleGVjLCBzY3JpcHRJRCkpOwogCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMt
PnZtKCksIElkZW50aWZpZXIoZXhlYywgImxvY2F0aW9uIiksIGxvY2F0aW9uKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmgJKHJl
dmlzaW9uIDE1ODc5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRD
YWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgSmF2YVNjcmlwdENhbGxGcmFtZSogY2FsbGVyKCk7Ci0gICAgaW50cHRyX3Qgc291
cmNlSUQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLT5zb3VyY2VJZCgpOyB9
CisgICAgaW50cHRyX3Qgc291cmNlSUQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZy
YW1lLT5zb3VyY2VJRCgpOyB9CiAgICAgY29uc3QgVGV4dFBvc2l0aW9uIHBvc2l0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+cG9zaXRpb24oKTsgfQogICAgIGludCBs
aW5lKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+bGluZSgpOyB9CiAgICAg
aW50IGNvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUtPmNvbHVtbigp
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdT
ZXJ2ZXIuY3BwCShyZXZpc2lvbiAxNTg3OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAg
U2NyaXB0RGVidWdTZXJ2ZXI6OlNjcmlwdERlYnVnU2VydmVyKCkKICAgICAsIG1fY3VycmVudENh
bGxGcmFtZSgwKQogICAgICwgbV9yZWNvbXBpbGVUaW1lcih0aGlzLCAmU2NyaXB0RGVidWdTZXJ2
ZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKQogICAgICwgbV9sYXN0RXhlY3V0ZWRMaW5lKC0x
KQotICAgICwgbV9sYXN0RXhlY3V0ZWRTb3VyY2VJZCgtMSkKKyAgICAsIG1fbGFzdEV4ZWN1dGVk
U291cmNlSUQoLTEpCiB7CiB9CiAKQEAgLTEwMSw5ICsxMDEsOSBAQCBTdHJpbmcgU2NyaXB0RGVi
dWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoCiAgICAgaW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHNv
dXJjZUlELnRvSW50UHRyKCk7CiAgICAgaWYgKCFzb3VyY2VJRFZhbHVlKQogICAgICAgICByZXR1
cm4gIiI7Ci0gICAgU291cmNlSWRUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBpdCA9IG1fc291
cmNlSWRUb0JyZWFrcG9pbnRzLmZpbmQoc291cmNlSURWYWx1ZSk7Ci0gICAgaWYgKGl0ID09IG1f
c291cmNlSWRUb0JyZWFrcG9pbnRzLmVuZCgpKQotICAgICAgICBpdCA9IG1fc291cmNlSWRUb0Jy
ZWFrcG9pbnRzLnNldChzb3VyY2VJRFZhbHVlLCBMaW5lVG9CcmVha3BvaW50c01hcCgpKS5pdGVy
YXRvcjsKKyAgICBTb3VyY2VJRFRvQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zb3Vy
Y2VJRFRvQnJlYWtwb2ludHMuZmluZChzb3VyY2VJRFZhbHVlKTsKKyAgICBpZiAoaXQgPT0gbV9z
b3VyY2VJRFRvQnJlYWtwb2ludHMuZW5kKCkpCisgICAgICAgIGl0ID0gbV9zb3VyY2VJRFRvQnJl
YWtwb2ludHMuc2V0KHNvdXJjZUlEVmFsdWUsIExpbmVUb0JyZWFrcG9pbnRzTWFwKCkpLml0ZXJh
dG9yOwogICAgIExpbmVUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBicmVha3NJdCA9IGl0LT52
YWx1ZS5maW5kKHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlcik7CiAgICAgaWYgKGJyZWFrc0l0
ID09IGl0LT52YWx1ZS5lbmQoKSkKICAgICAgICAgYnJlYWtzSXQgPSBpdC0+dmFsdWUuc2V0KHNj
cmlwdEJyZWFrcG9pbnQubGluZU51bWJlciwgQnJlYWtwb2ludHNJbkxpbmUoKSkuaXRlcmF0b3I7
CkBAIC0xMjIsMTAgKzEyMiwxMCBAQCBTdHJpbmcgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFr
cG9pbnQoCiAgICAgcmV0dXJuIHNvdXJjZUlEICsgIjoiICsgU3RyaW5nOjpudW1iZXIoc2NyaXB0
QnJlYWtwb2ludC5saW5lTnVtYmVyKSArICI6IiArIFN0cmluZzo6bnVtYmVyKHNjcmlwdEJyZWFr
cG9pbnQuY29sdW1uTnVtYmVyKTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3Zl
QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCkKK3ZvaWQgU2NyaXB0RGVidWdT
ZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SUQpCiB7CiAg
ICAgVmVjdG9yPFN0cmluZz4gdG9rZW5zOwotICAgIGJyZWFrcG9pbnRJZC5zcGxpdCgiOiIsIHRv
a2Vucyk7CisgICAgYnJlYWtwb2ludElELnNwbGl0KCI6IiwgdG9rZW5zKTsKICAgICBpZiAodG9r
ZW5zLnNpemUoKSAhPSAzKQogICAgICAgICByZXR1cm47CiAgICAgYm9vbCBzdWNjZXNzOwpAQCAt
MTM5LDggKzEzOSw4IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQK
ICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNvdXJjZUlkVG9CcmVh
a3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5maW5kKHNv
dXJjZUlEVmFsdWUpOwotICAgIGlmIChpdCA9PSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5lbmQo
KSkKKyAgICBTb3VyY2VJRFRvQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zb3VyY2VJ
RFRvQnJlYWtwb2ludHMuZmluZChzb3VyY2VJRFZhbHVlKTsKKyAgICBpZiAoaXQgPT0gbV9zb3Vy
Y2VJRFRvQnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICBMaW5lVG9CcmVh
a3BvaW50c01hcDo6aXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmluZChsaW5lTnVtYmVy
KTsKICAgICBpZiAoYnJlYWtzSXQgPT0gaXQtPnZhbHVlLmVuZCgpKQpAQCAtMTYyLDggKzE2Miw4
IEBAIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6Omhhc0JyZWFrcG9pbnQoaW4KICAgICBpZiAoIW1f
YnJlYWtwb2ludHNBY3RpdmF0ZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNvdXJj
ZUlkVG9CcmVha3BvaW50c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3NvdXJjZUlkVG9CcmVh
a3BvaW50cy5maW5kKHNvdXJjZUlEKTsKLSAgICBpZiAoaXQgPT0gbV9zb3VyY2VJZFRvQnJlYWtw
b2ludHMuZW5kKCkpCisgICAgU291cmNlSURUb0JyZWFrcG9pbnRzTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fc291cmNlSURUb0JyZWFrcG9pbnRzLmZpbmQoc291cmNlSUQpOworICAgIGlmIChp
dCA9PSBtX3NvdXJjZUlEVG9CcmVha3BvaW50cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgaW50IGxpbmUgPSBwb3NpdGlvbi5tX2xpbmUuemVyb0Jhc2VkSW50KCk7CkBAIC0y
NDYsNyArMjQ2LDcgQEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVCcmVha3BvaQog
CiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpjbGVhckJyZWFrcG9pbnRzKCkKIHsKLSAgICBtX3Nv
dXJjZUlkVG9CcmVha3BvaW50cy5jbGVhcigpOworICAgIG1fc291cmNlSURUb0JyZWFrcG9pbnRz
LmNsZWFyKCk7CiAgICAgdXBkYXRlTnVtYmVyT2ZCcmVha3BvaW50cygwKTsKIH0KIApAQCAtNDc4
LDEwICs0NzgsMTAgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hGdW5jdGlvbgog
dm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6dXBkYXRlQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewogICAgIG1fY3VycmVudENhbGxGcmFtZSA9IGNhbGxGcmFtZTsKLSAgICBpbnRwdHJf
dCBzb3VyY2VJZCA9IERlYnVnZ2VyQ2FsbEZyYW1lOjpzb3VyY2VJZEZvckNhbGxGcmFtZShjYWxs
RnJhbWUpOwotICAgIGlmIChtX2xhc3RFeGVjdXRlZFNvdXJjZUlkICE9IHNvdXJjZUlkKSB7Cisg
ICAgaW50cHRyX3Qgc291cmNlSUQgPSBEZWJ1Z2dlckNhbGxGcmFtZTo6c291cmNlSURGb3JDYWxs
RnJhbWUoY2FsbEZyYW1lKTsKKyAgICBpZiAobV9sYXN0RXhlY3V0ZWRTb3VyY2VJRCAhPSBzb3Vy
Y2VJRCkgewogICAgICAgICBtX2xhc3RFeGVjdXRlZExpbmUgPSAtMTsKLSAgICAgICAgbV9sYXN0
RXhlY3V0ZWRTb3VyY2VJZCA9IHNvdXJjZUlkOworICAgICAgICBtX2xhc3RFeGVjdXRlZFNvdXJj
ZUlEID0gc291cmNlSUQ7CiAgICAgfQogfQogCkBAIC01MDcsOSArNTA3LDkgQEAgdm9pZCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6cGF1c2VJZk5lZWRlZChDYQogICAgIGJvb2wgcGF1c2VOb3cgPSBtX3Bh
dXNlT25OZXh0U3RhdGVtZW50OwogICAgIHBhdXNlTm93IHw9IChtX3BhdXNlT25DYWxsRnJhbWUg
PT0gbV9jdXJyZW50Q2FsbEZyYW1lKTsKIAotICAgIGludHB0cl90IHNvdXJjZUlkID0gRGVidWdn
ZXJDYWxsRnJhbWU6OnNvdXJjZUlkRm9yQ2FsbEZyYW1lKG1fY3VycmVudENhbGxGcmFtZSk7Cisg
ICAgaW50cHRyX3Qgc291cmNlSUQgPSBEZWJ1Z2dlckNhbGxGcmFtZTo6c291cmNlSURGb3JDYWxs
RnJhbWUobV9jdXJyZW50Q2FsbEZyYW1lKTsKICAgICBUZXh0UG9zaXRpb24gcG9zaXRpb24gPSBE
ZWJ1Z2dlckNhbGxGcmFtZTo6cG9zaXRpb25Gb3JDYWxsRnJhbWUobV9jdXJyZW50Q2FsbEZyYW1l
KTsKLSAgICBwYXVzZU5vdyB8PSBkaWRIaXRCcmVha3BvaW50ID0gaGFzQnJlYWtwb2ludChzb3Vy
Y2VJZCwgcG9zaXRpb24sICZicmVha3BvaW50KTsKKyAgICBwYXVzZU5vdyB8PSBkaWRIaXRCcmVh
a3BvaW50ID0gaGFzQnJlYWtwb2ludChzb3VyY2VJRCwgcG9zaXRpb24sICZicmVha3BvaW50KTsK
ICAgICBtX2xhc3RFeGVjdXRlZExpbmUgPSBwb3NpdGlvbi5tX2xpbmUuemVyb0Jhc2VkSW50KCk7
CiAgICAgaWYgKCFwYXVzZU5vdykKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCShyZXZpc2lvbiAxNTg3OTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIGNsYXNzIFNjcmlwdERlYnVnU2VydmVyIDogcHJv
dGVjdGVkIEpTQzoKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY3JpcHREZWJ1Z1NlcnZlcik7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFN0cmluZyBzZXRCcmVha3Bv
aW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmLCBpbnQq
IGFjdHVhbExpbmVOdW1iZXIsIGludCogYWN0dWFsQ29sdW1uTnVtYmVyKTsKLSAgICB2b2lkIHJl
bW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpOworICAgIHZvaWQgcmVt
b3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJRCk7CiAgICAgdm9pZCBjbGVh
ckJyZWFrcG9pbnRzKCk7CiAgICAgdm9pZCBzZXRCcmVha3BvaW50c0FjdGl2YXRlZChib29sIGFj
dGl2YXRlZCk7CiAgICAgdm9pZCBhY3RpdmF0ZUJyZWFrcG9pbnRzKCkgeyBzZXRCcmVha3BvaW50
c0FjdGl2YXRlZCh0cnVlKTsgfQpAQCAtOTcsOSArOTcsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c1BhdXNlZCgpIHsgcmV0dXJuIG1fcGF1c2VkOyB9CiAgICAgYm9vbCBydW5uaW5nTmVzdGVkTWVz
c2FnZUxvb3AoKSB7IHJldHVybiBtX3J1bm5pbmdOZXN0ZWRNZXNzYWdlTG9vcDsgfQogCi0gICAg
dm9pZCBjb21waWxlU2NyaXB0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiBleHByZXNz
aW9uLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgU3RyaW5nKiBzY3JpcHRJZCwgU3RyaW5nKiBl
eGNlcHRpb25NZXNzYWdlKTsKKyAgICB2b2lkIGNvbXBpbGVTY3JpcHQoSlNDOjpFeGVjU3RhdGUq
LCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBTdHJp
bmcqIHNjcmlwdElELCBTdHJpbmcqIGV4Y2VwdGlvbk1lc3NhZ2UpOwogICAgIHZvaWQgY2xlYXJD
b21waWxlZFNjcmlwdHMoKTsKLSAgICB2b2lkIHJ1blNjcmlwdChKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IFN0cmluZyYgc2NyaXB0SWQsIFNjcmlwdFZhbHVlKiByZXN1bHQsIGJvb2wqIHdhc1Rocm93
biwgU3RyaW5nKiBleGNlcHRpb25NZXNzYWdlKTsKKyAgICB2b2lkIHJ1blNjcmlwdChKU0M6OkV4
ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIFNjcmlwdFZhbHVlKiByZXN1bHQsIGJv
b2wqIHdhc1Rocm93biwgU3RyaW5nKiBleGNlcHRpb25NZXNzYWdlKTsKIAogICAgIGNsYXNzIFRh
c2sgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTE1OCw3ICsxNTgsNyBA
QCBwcm90ZWN0ZWQ6CiAKICAgICB0eXBlZGVmIFZlY3RvcjxTY3JpcHRCcmVha3BvaW50PiBCcmVh
a3BvaW50c0luTGluZTsKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBCcmVha3BvaW50c0luTGlu
ZSwgV1RGOjpJbnRIYXNoPGludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
aW50Pj4gTGluZVRvQnJlYWtwb2ludHNNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPGludHB0cl90
LCBMaW5lVG9CcmVha3BvaW50c01hcD4gU291cmNlSWRUb0JyZWFrcG9pbnRzTWFwOworICAgIHR5
cGVkZWYgSGFzaE1hcDxpbnRwdHJfdCwgTGluZVRvQnJlYWtwb2ludHNNYXA+IFNvdXJjZUlEVG9C
cmVha3BvaW50c01hcDsKIAogICAgIGJvb2wgbV9jYWxsaW5nTGlzdGVuZXJzOwogICAgIFBhdXNl
T25FeGNlcHRpb25zU3RhdGUgbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlOwpAQCAtMTcwLDExICsx
NzAsMTEgQEAgcHJvdGVjdGVkOgogICAgIEpTQzo6Q2FsbEZyYW1lKiBtX3BhdXNlT25DYWxsRnJh
bWU7CiAgICAgSlNDOjpDYWxsRnJhbWUqIG1fY3VycmVudENhbGxGcmFtZTsKICAgICBSZWZQdHI8
SlNDOjpEZWJ1Z2dlckNhbGxGcmFtZT4gbV9jdXJyZW50RGVidWdnZXJDYWxsRnJhbWU7Ci0gICAg
U291cmNlSWRUb0JyZWFrcG9pbnRzTWFwIG1fc291cmNlSWRUb0JyZWFrcG9pbnRzOworICAgIFNv
dXJjZUlEVG9CcmVha3BvaW50c01hcCBtX3NvdXJjZUlEVG9CcmVha3BvaW50czsKICAgICBUaW1l
cjxTY3JpcHREZWJ1Z1NlcnZlcj4gbV9yZWNvbXBpbGVUaW1lcjsKIAogICAgIGludCBtX2xhc3RF
eGVjdXRlZExpbmU7Ci0gICAgaW50cHRyX3QgbV9sYXN0RXhlY3V0ZWRTb3VyY2VJZDsKKyAgICBp
bnRwdHJfdCBtX2xhc3RFeGVjdXRlZFNvdXJjZUlEOwogCiAgICAgZnJpZW5kIGNsYXNzIERlYnVn
Z2VyQ2FsbEZyYW1lU2NvcGU7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAJKHJldmlzaW9uIDE1ODc5OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmFk
ZE1lc3NhZ2VUbwogICAgIGFkZENvbnNvbGVNZXNzYWdlKGFkb3B0UHRyKG5ldyBDb25zb2xlTWVz
c2FnZSghaXNXb3JrZXJBZ2VudCgpLCBzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBhcmd1
bWVudHMsIHN0YXRlLCByZXF1ZXN0SWRlbnRpZmllcikpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
b25zb2xlQWdlbnQ6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1l
c3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBj
b2x1bW5OdW1iZXIsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0
SWRlbnRpZmllcikKK3ZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRNZXNzYWdlVG9Db25z
b2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwg
bGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRCwgdW5z
aWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCiB7CiAgICAgaWYgKCFkZXZl
bG9wZXJFeHRyYXNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3Miw3ICsxNzIsNyBA
QCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6YWRkTWVzc2FnZVRvCiAgICAgfQogCiAgICAg
Ym9vbCBjYW5HZW5lcmF0ZUNhbGxTdGFjayA9ICFpc1dvcmtlckFnZW50KCkgJiYgbV9mcm9udGVu
ZDsKLSAgICBhZGRDb25zb2xlTWVzc2FnZShhZG9wdFB0cihuZXcgQ29uc29sZU1lc3NhZ2UoY2Fu
R2VuZXJhdGVDYWxsU3RhY2ssIHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIHNjcmlwdElk
LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHN0YXRlLCByZXF1ZXN0SWRlbnRpZmllcikpKTsK
KyAgICBhZGRDb25zb2xlTWVzc2FnZShhZG9wdFB0cihuZXcgQ29uc29sZU1lc3NhZ2UoY2FuR2Vu
ZXJhdGVDYWxsU3RhY2ssIHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIHNjcmlwdElELCBs
aW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHN0YXRlLCByZXF1ZXN0SWRlbnRpZmllcikpKTsKIH0K
IAogVmVjdG9yPHVuc2lnbmVkPiBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNvbnNvbGVNZXNzYWdl
QXJndW1lbnRDb3VudHMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnNvbGVBZ2VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb25zb2xlQWdlbnQuaAkocmV2aXNpb24gMTU4Nzk4KQorKysgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJGcm9udGVuZCgpOwog
CiAgICAgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBl
LCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgSlNDOjpFeGVjU3RhdGUqLCBQ
YXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4sIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZp
ZXIgPSAwKTsKLSAgICB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVz
c2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJp
bmcmIHNjcmlwdElkLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIs
IEpTQzo6RXhlY1N0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAw
KTsKKyAgICB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5
cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNj
cmlwdElELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIEpTQzo6
RXhlY1N0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKIAog
ICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSB3ZSBubyBsb25nZXIgZ2VuZXJhdGUgc3RhY2tzIG91
dHNpZGUgb2YgSW5zcGVjdG9yLgogICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdl
U291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRp
ZmllciA9IDApOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNv
bGVJbnN0cnVtZW50YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29uc29sZUluc3RydW1lbnRhdGlvbi5oCShyZXZpc2lvbiAxNTg3OTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUluc3RydW1lbnRhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxOCArNzIsMTggQEAgaW5saW5lIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjphZAogI2VuZGlmCiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShQYWdlKiBwYWdlLCBNZXNzYWdl
U291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIHVuc2lnbmVkIGxpbmVO
dW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB1bnNp
Z25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UqIHBhZ2UsIE1lc3NhZ2VTb3VyY2Ug
c291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRCwgdW5zaWduZWQgbGluZU51bWJlciwg
dW5zaWduZWQgY29sdW1uTnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxv
bmcgcmVxdWVzdElkZW50aWZpZXIpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAo
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdB
Z2VudHNGb3JQYWdlKHBhZ2UpKQotICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbChpbnN0
cnVtZW50aW5nQWdlbnRzLCBzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBzY3JpcHRJZCwg
bGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzdGF0ZSwgcmVxdWVzdElkZW50aWZpZXIpOworICAg
ICAgICBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBzb3VyY2Us
IHR5cGUsIGxldmVsLCBtZXNzYWdlLCBzY3JpcHRJRCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVy
LCBzdGF0ZSwgcmVxdWVzdElkZW50aWZpZXIpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFn
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNvdXJjZSk7CiAgICAgVU5VU0VEX1BBUkFNKHR5cGUpOwog
ICAgIFVOVVNFRF9QQVJBTShsZXZlbCk7CiAgICAgVU5VU0VEX1BBUkFNKG1lc3NhZ2UpOwotICAg
IFVOVVNFRF9QQVJBTShzY3JpcHRJZCk7CisgICAgVU5VU0VEX1BBUkFNKHNjcmlwdElEKTsKICAg
ICBVTlVTRURfUEFSQU0obGluZU51bWJlcik7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0ocmVxdWVzdElkZW50aWZpZXIpOwpAQCAtMTA3LDE4ICsxMDcsMTggQEAg
aW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZAogI2VuZGlmCiB9CiAKLWlu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShX
b3JrZXJHbG9iYWxTY29wZSogd29ya2VyR2xvYmFsU2NvcGUsIE1lc3NhZ2VTb3VyY2Ugc291cmNl
LCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWdu
ZWQgY29sdW1uTnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVx
dWVzdElkZW50aWZpZXIpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFk
ZE1lc3NhZ2VUb0NvbnNvbGUoV29ya2VyR2xvYmFsU2NvcGUqIHdvcmtlckdsb2JhbFNjb3BlLCBN
ZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVs
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogI2lmIEVOQUJMRShJTlNQRUNU
T1IpCiAgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBp
bnN0cnVtZW50aW5nQWdlbnRzRm9yV29ya2VyR2xvYmFsU2NvcGUod29ya2VyR2xvYmFsU2NvcGUp
KQotICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBz
b3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBzY3JpcHRJZCwgbGluZU51bWJlciwgY29sdW1u
TnVtYmVyLCBzdGF0ZSwgcmVxdWVzdElkZW50aWZpZXIpOworICAgICAgICBhZGRNZXNzYWdlVG9D
b25zb2xlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNz
YWdlLCBzY3JpcHRJRCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzdGF0ZSwgcmVxdWVzdElk
ZW50aWZpZXIpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0od29ya2VyR2xvYmFsU2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzb3VyY2UpOwogICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKICAgICBV
TlVTRURfUEFSQU0obGV2ZWwpOwogICAgIFVOVVNFRF9QQVJBTShtZXNzYWdlKTsKLSAgICBVTlVT
RURfUEFSQU0oc2NyaXB0SWQpOworICAgIFVOVVNFRF9QQVJBTShzY3JpcHRJRCk7CiAgICAgVU5V
U0VEX1BBUkFNKGxpbmVOdW1iZXIpOwogICAgIFVOVVNFRF9QQVJBTShjb2x1bW5OdW1iZXIpOwog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlzaW9uIDE1ODc5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0NzgsNyArMTQ3OCw3IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6RXZlbnRMaXN0
ZW4KICAgICBKU0M6OkpTT2JqZWN0KiBoYW5kbGVyID0gbnVsbHB0cjsKICAgICBTdHJpbmcgYm9k
eTsKICAgICBpbnQgbGluZU51bWJlciA9IDA7Ci0gICAgU3RyaW5nIHNjcmlwdElkOworICAgIFN0
cmluZyBzY3JpcHRJRDsKICAgICBTdHJpbmcgc291cmNlTmFtZTsKICAgICBpZiAoYXV0byBzY3Jp
cHRMaXN0ZW5lciA9IEpTRXZlbnRMaXN0ZW5lcjo6Y2FzdChldmVudExpc3RlbmVyLmdldCgpKSkg
ewogICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdExpc3RlbmVyLT5pc29sYXRl
ZFdvcmxkKCkudm0oKSk7CkBAIC0xNDkwLDcgKzE0OTAsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpET006OkV2ZW50TGlzdGVuCiAgICAgICAgICAgICAgICAgaWYgKCFmdW5jdGlvbi0+aXNI
b3N0RnVuY3Rpb24oKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byBleGVjdXRhYmxl
ID0gZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5lTnVtYmVyID0gZXhlY3V0YWJsZS0+bGluZU5vKCkgLSAxOwotICAgICAgICAgICAgICAgICAg
ICAgICAgc2NyaXB0SWQgPSBleGVjdXRhYmxlLT5zb3VyY2VJRCgpID09IEpTQzo6U291cmNlUHJv
dmlkZXI6Om51bGxJRCA/IGVtcHR5U3RyaW5nKCkgOiBTdHJpbmc6Om51bWJlcihleGVjdXRhYmxl
LT5zb3VyY2VJRCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdElEID0gZXhlY3V0
YWJsZS0+c291cmNlSUQoKSA9PSBKU0M6OlNvdXJjZVByb3ZpZGVyOjpudWxsSUQgPyBlbXB0eVN0
cmluZygpIDogU3RyaW5nOjpudW1iZXIoZXhlY3V0YWJsZS0+c291cmNlSUQoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBzb3VyY2VOYW1lID0gZXhlY3V0YWJsZS0+c291cmNlVVJMKCk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0xNTA5LDkgKzE1MDks
OSBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006OkV2ZW50TGlzdGVuCiAgICAgICAgIGlm
ICghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICAgICAgdmFsdWUtPnNldEhh
bmRsZXIoaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChTY3JpcHRWYWx1ZShzdGF0ZS0+dm0oKSwg
aGFuZGxlciksICpvYmplY3RHcm91cElkKSk7CiAgICAgfQotICAgIGlmICghc2NyaXB0SWQuaXNO
dWxsKCkpIHsKKyAgICBpZiAoIXNjcmlwdElELmlzTnVsbCgpKSB7CiAgICAgICAgIFJlZlB0cjxU
eXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9IFR5cGVCdWlsZGVyOjpE
ZWJ1Z2dlcjo6TG9jYXRpb246OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0U2NyaXB0SWQoc2Ny
aXB0SWQpCisgICAgICAgICAgICAuc2V0U2NyaXB0SWQoc2NyaXB0SUQpCiAgICAgICAgICAgICAu
c2V0TGluZU51bWJlcihsaW5lTnVtYmVyKTsKICAgICAgICAgdmFsdWUtPnNldExvY2F0aW9uKGxv
Y2F0aW9uLnJlbGVhc2UoKSk7CiAgICAgICAgIGlmICghc291cmNlTmFtZS5pc0VtcHR5KCkpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuY3BwCShyZXZpc2lvbiAxNTg3OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Niw3ICsyNTYs
NyBAQCBzdGF0aWMgYm9vbCBicmVha3BvaW50QWN0aW9uc0Zyb21Qcm90b2NvCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5
VXJsKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmlu
ZyogY29uc3Qgb3B0aW9uYWxVUkwsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxVUkxSZWdl
eCwgY29uc3QgaW50KiBjb25zdCBvcHRpb25hbENvbHVtbk51bWJlciwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4qIG9wdGlvbnMsIFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6QnJlYWtwb2lu
dElkKiBvdXRCcmVha3BvaW50SWQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxk
ZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBsb2NhdGlvbnMpCit2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGlu
dCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJMLCBjb25zdCBTdHJp
bmcqIGNvbnN0IG9wdGlvbmFsVVJMUmVnZXgsIGNvbnN0IGludCogY29uc3Qgb3B0aW9uYWxDb2x1
bW5OdW1iZXIsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvcHRpb25zLCBUeXBlQnVp
bGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCogb3V0QnJlYWtwb2ludElELCBSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+PiYgbG9jYXRp
b25zKQogewogICAgIGxvY2F0aW9ucyA9IEFycmF5PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9j
YXRpb24+OjpjcmVhdGUoKTsKICAgICBpZiAoIW9wdGlvbmFsVVJMID09ICFvcHRpb25hbFVSTFJl
Z2V4KSB7CkBAIC0yNjgsOCArMjY4LDggQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpz
ZXRCcmVha3BvaQogICAgIGludCBjb2x1bW5OdW1iZXIgPSBvcHRpb25hbENvbHVtbk51bWJlciA/
ICpvcHRpb25hbENvbHVtbk51bWJlciA6IDA7CiAgICAgYm9vbCBpc1JlZ2V4ID0gb3B0aW9uYWxV
UkxSZWdleDsKIAotICAgIFN0cmluZyBicmVha3BvaW50SWQgPSAoaXNSZWdleCA/ICIvIiArIHVy
bCArICIvIiA6IHVybCkgKyAnOicgKyBTdHJpbmc6Om51bWJlcihsaW5lTnVtYmVyKSArICc6JyAr
IFN0cmluZzo6bnVtYmVyKGNvbHVtbk51bWJlcik7Ci0gICAgaWYgKG1famF2YVNjcmlwdEJyZWFr
cG9pbnRzLmNvbnRhaW5zKGJyZWFrcG9pbnRJZCkpIHsKKyAgICBTdHJpbmcgYnJlYWtwb2ludElE
ID0gKGlzUmVnZXggPyAiLyIgKyB1cmwgKyAiLyIgOiB1cmwpICsgJzonICsgU3RyaW5nOjpudW1i
ZXIobGluZU51bWJlcikgKyAnOicgKyBTdHJpbmc6Om51bWJlcihjb2x1bW5OdW1iZXIpOworICAg
IGlmIChtX2phdmFTY3JpcHRCcmVha3BvaW50cy5jb250YWlucyhicmVha3BvaW50SUQpKSB7CiAg
ICAgICAgICplcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGF0IHNwZWNpZmllZCBsb2NhdGlvbiBh
bHJlYWR5IGV4aXN0cy4iOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjg3LDcgKzI4Nyw3
IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2kKICAgICBpZiAoIWJy
ZWFrcG9pbnRBY3Rpb25zRnJvbVByb3RvY29sKGVycm9yU3RyaW5nLCBhY3Rpb25zLCAmYnJlYWtw
b2ludEFjdGlvbnMpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2phdmFTY3JpcHRCcmVha3Bv
aW50cy5zZXQoYnJlYWtwb2ludElkLCBidWlsZE9iamVjdEZvckJyZWFrcG9pbnRDb29raWUodXJs
LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNvbmRpdGlvbiwgYWN0aW9ucywgaXNSZWdleCwg
YXV0b0NvbnRpbnVlKSk7CisgICAgbV9qYXZhU2NyaXB0QnJlYWtwb2ludHMuc2V0KGJyZWFrcG9p
bnRJRCwgYnVpbGRPYmplY3RGb3JCcmVha3BvaW50Q29va2llKHVybCwgbGluZU51bWJlciwgY29s
dW1uTnVtYmVyLCBjb25kaXRpb24sIGFjdGlvbnMsIGlzUmVnZXgsIGF1dG9Db250aW51ZSkpOwog
CiAgICAgU2NyaXB0QnJlYWtwb2ludCBicmVha3BvaW50KGxpbmVOdW1iZXIsIGNvbHVtbk51bWJl
ciwgY29uZGl0aW9uLCBicmVha3BvaW50QWN0aW9ucywgYXV0b0NvbnRpbnVlKTsKICAgICBmb3Ig
KFNjcmlwdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRzLmJlZ2luKCk7IGl0ICE9IG1fc2Ny
aXB0cy5lbmQoKTsgKytpdCkgewpAQCAtMjk1LDE2ICsyOTUsMTYgQEAgdm9pZCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaQogICAgICAgICBpZiAoIW1hdGNoZXMoc2NyaXB0VVJM
LCB1cmwsIGlzUmVnZXgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgUmVmUHRy
PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGxvY2F0aW9uID0gcmVzb2x2ZUJyZWFr
cG9pbnQoYnJlYWtwb2ludElkLCBpdC0+a2V5LCBicmVha3BvaW50KTsKKyAgICAgICAgUmVmUHRy
PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGxvY2F0aW9uID0gcmVzb2x2ZUJyZWFr
cG9pbnQoYnJlYWtwb2ludElELCBpdC0+a2V5LCBicmVha3BvaW50KTsKICAgICAgICAgaWYgKGxv
Y2F0aW9uKQogICAgICAgICAgICAgbG9jYXRpb25zLT5hZGRJdGVtKGxvY2F0aW9uKTsKICAgICB9
Ci0gICAgKm91dEJyZWFrcG9pbnRJZCA9IGJyZWFrcG9pbnRJZDsKKyAgICAqb3V0QnJlYWtwb2lu
dElEID0gYnJlYWtwb2ludElEOwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZUxvY2F0aW9uKEVycm9y
U3RyaW5nKiBlcnJvclN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbG9jYXRpb24sIFN0
cmluZyogc2NyaXB0SWQsIGludCogbGluZU51bWJlciwgaW50KiBjb2x1bW5OdW1iZXIpCitzdGF0
aWMgYm9vbCBwYXJzZUxvY2F0aW9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbG9jYXRpb24sIFN0cmluZyogc2NyaXB0SUQsIGludCogbGluZU51bWJl
ciwgaW50KiBjb2x1bW5OdW1iZXIpCiB7Ci0gICAgaWYgKCFsb2NhdGlvbi0+Z2V0U3RyaW5nKCJz
Y3JpcHRJZCIsIHNjcmlwdElkKSB8fCAhbG9jYXRpb24tPmdldE51bWJlcigibGluZU51bWJlciIs
IGxpbmVOdW1iZXIpKSB7CisgICAgaWYgKCFsb2NhdGlvbi0+Z2V0U3RyaW5nKCJzY3JpcHRJZCIs
IHNjcmlwdElEKSB8fCAhbG9jYXRpb24tPmdldE51bWJlcigibGluZU51bWJlciIsIGxpbmVOdW1i
ZXIpKSB7CiAgICAgICAgIC8vIEZJWE1FOiByZXBsYWNlIHdpdGggaW5wdXQgdmFsaWRhdGlvbi4K
ICAgICAgICAgKmVycm9yU3RyaW5nID0gInNjcmlwdElkIGFuZCBsaW5lTnVtYmVyIGFyZSByZXF1
aXJlZC4iOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTQsMTMgKzMxNCwxMyBAQCBzdGF0
aWMgYm9vbCBwYXJzZUxvY2F0aW9uKEVycm9yU3RyaW5nKiBlCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChFcnJvclN0cmlu
ZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlvbiwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIG9wdGlvbnMsIFR5cGVCdWlsZGVyOjpEZWJ1
Z2dlcjo6QnJlYWtwb2ludElkKiBvdXRCcmVha3BvaW50SWQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6
RGVidWdnZXI6OkxvY2F0aW9uPiYgYWN0dWFsTG9jYXRpb24pCit2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbG9jYXRpb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+KiBvcHRpb25zLCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCogb3V0
QnJlYWtwb2ludElELCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4mIGFj
dHVhbExvY2F0aW9uKQogewotICAgIFN0cmluZyBzY3JpcHRJZDsKKyAgICBTdHJpbmcgc2NyaXB0
SUQ7CiAgICAgaW50IGxpbmVOdW1iZXI7CiAgICAgaW50IGNvbHVtbk51bWJlcjsKIAotICAgIGlm
ICghcGFyc2VMb2NhdGlvbihlcnJvclN0cmluZywgbG9jYXRpb24sICZzY3JpcHRJZCwgJmxpbmVO
dW1iZXIsICZjb2x1bW5OdW1iZXIpKQorICAgIGlmICghcGFyc2VMb2NhdGlvbihlcnJvclN0cmlu
ZywgbG9jYXRpb24sICZzY3JpcHRJRCwgJmxpbmVOdW1iZXIsICZjb2x1bW5OdW1iZXIpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgY29uZGl0aW9uID0gZW1wdHlTdHJpbmcoKTsKQEAg
LTMzNiw1MyArMzM2LDUzIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtw
b2kKICAgICBpZiAoIWJyZWFrcG9pbnRBY3Rpb25zRnJvbVByb3RvY29sKGVycm9yU3RyaW5nLCBh
Y3Rpb25zLCAmYnJlYWtwb2ludEFjdGlvbnMpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJp
bmcgYnJlYWtwb2ludElkID0gc2NyaXB0SWQgKyAnOicgKyBTdHJpbmc6Om51bWJlcihsaW5lTnVt
YmVyKSArICc6JyArIFN0cmluZzo6bnVtYmVyKGNvbHVtbk51bWJlcik7Ci0gICAgaWYgKG1fYnJl
YWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZmluZChicmVha3BvaW50SWQpICE9
IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZW5kKCkpIHsKKyAgICBT
dHJpbmcgYnJlYWtwb2ludElEID0gc2NyaXB0SUQgKyAnOicgKyBTdHJpbmc6Om51bWJlcihsaW5l
TnVtYmVyKSArICc6JyArIFN0cmluZzo6bnVtYmVyKGNvbHVtbk51bWJlcik7CisgICAgaWYgKG1f
YnJlYWtwb2ludElEVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHMuZmluZChicmVha3BvaW50SUQp
ICE9IG1fYnJlYWtwb2ludElEVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHMuZW5kKCkpIHsKICAg
ICAgICAgKmVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgYXQgc3BlY2lmaWVkIGxvY2F0aW9uIGFs
cmVhZHkgZXhpc3RzLiI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgU2NyaXB0QnJlYWtw
b2ludCBicmVha3BvaW50KGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgY29uZGl0aW9uLCBicmVh
a3BvaW50QWN0aW9ucywgYXV0b0NvbnRpbnVlKTsKLSAgICBhY3R1YWxMb2NhdGlvbiA9IHJlc29s
dmVCcmVha3BvaW50KGJyZWFrcG9pbnRJZCwgc2NyaXB0SWQsIGJyZWFrcG9pbnQpOworICAgIGFj
dHVhbExvY2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElELCBzY3JpcHRJRCwg
YnJlYWtwb2ludCk7CiAgICAgaWYgKGFjdHVhbExvY2F0aW9uKQotICAgICAgICAqb3V0QnJlYWtw
b2ludElkID0gYnJlYWtwb2ludElkOworICAgICAgICAqb3V0QnJlYWtwb2ludElEID0gYnJlYWtw
b2ludElEOwogICAgIGVsc2UKICAgICAgICAgKmVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCByZXNv
bHZlIGJyZWFrcG9pbnQiOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92
ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCkKK3Zv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyos
IGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElEKQogewotICAgIG1famF2YVNjcmlwdEJyZWFrcG9p
bnRzLnJlbW92ZShicmVha3BvaW50SWQpOworICAgIG1famF2YVNjcmlwdEJyZWFrcG9pbnRzLnJl
bW92ZShicmVha3BvaW50SUQpOwogCi0gICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFr
cG9pbnRJZHNNYXA6Oml0ZXJhdG9yIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID0g
bV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5maW5kKGJyZWFrcG9pbnRJ
ZCk7Ci0gICAgaWYgKGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID09IG1fYnJlYWtw
b2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZW5kKCkpCisgICAgQnJlYWtwb2ludElE
VG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHNNYXA6Oml0ZXJhdG9yIGRlYnVnU2VydmVyQnJlYWtw
b2ludElEc0l0ZXJhdG9yID0gbV9icmVha3BvaW50SURUb0RlYnVnU2VydmVyQnJlYWtwb2ludElE
cy5maW5kKGJyZWFrcG9pbnRJRCk7CisgICAgaWYgKGRlYnVnU2VydmVyQnJlYWtwb2ludElEc0l0
ZXJhdG9yID09IG1fYnJlYWtwb2ludElEVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHMuZW5kKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlYnVnU2VydmVy
QnJlYWtwb2ludElkc0l0ZXJhdG9yLT52YWx1ZS5zaXplKCk7ICsraSkKLSAgICAgICAgc2NyaXB0
RGVidWdTZXJ2ZXIoKS5yZW1vdmVCcmVha3BvaW50KGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0
ZXJhdG9yLT52YWx1ZVtpXSk7Ci0gICAgbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtw
b2ludElkcy5yZW1vdmUoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVidWdTZXJ2ZXJCcmVha3BvaW50SURzSXRlcmF0b3ItPnZh
bHVlLnNpemUoKTsgKytpKQorICAgICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLnJlbW92ZUJyZWFr
cG9pbnQoZGVidWdTZXJ2ZXJCcmVha3BvaW50SURzSXRlcmF0b3ItPnZhbHVlW2ldKTsKKyAgICBt
X2JyZWFrcG9pbnRJRFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SURzLnJlbW92ZShkZWJ1Z1NlcnZl
ckJyZWFrcG9pbnRJRHNJdGVyYXRvcik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mIGxvY2F0aW9uKQogewotICAgIGlmICghbV9jb250aW51ZVRv
TG9jYXRpb25CcmVha3BvaW50SWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHNjcmlwdERlYnVnU2Vy
dmVyKCkucmVtb3ZlQnJlYWtwb2ludChtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJZCk7
Ci0gICAgICAgIG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElkID0gIiI7CisgICAgaWYg
KCFtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
c2NyaXB0RGVidWdTZXJ2ZXIoKS5yZW1vdmVCcmVha3BvaW50KG1fY29udGludWVUb0xvY2F0aW9u
QnJlYWtwb2ludElEKTsKKyAgICAgICAgbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SUQg
PSAiIjsKICAgICB9CiAKLSAgICBTdHJpbmcgc2NyaXB0SWQ7CisgICAgU3RyaW5nIHNjcmlwdElE
OwogICAgIGludCBsaW5lTnVtYmVyOwogICAgIGludCBjb2x1bW5OdW1iZXI7CiAKLSAgICBpZiAo
IXBhcnNlTG9jYXRpb24oZXJyb3JTdHJpbmcsIGxvY2F0aW9uLCAmc2NyaXB0SWQsICZsaW5lTnVt
YmVyLCAmY29sdW1uTnVtYmVyKSkKKyAgICBpZiAoIXBhcnNlTG9jYXRpb24oZXJyb3JTdHJpbmcs
IGxvY2F0aW9uLCAmc2NyaXB0SUQsICZsaW5lTnVtYmVyLCAmY29sdW1uTnVtYmVyKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgU2NyaXB0QnJlYWtwb2ludCBicmVha3BvaW50KGxpbmVOdW1iZXIs
IGNvbHVtbk51bWJlciwgIiIsIGZhbHNlKTsKLSAgICBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFr
cG9pbnRJZCA9IHNjcmlwdERlYnVnU2VydmVyKCkuc2V0QnJlYWtwb2ludChzY3JpcHRJZCwgYnJl
YWtwb2ludCwgJmxpbmVOdW1iZXIsICZjb2x1bW5OdW1iZXIpOworICAgIG1fY29udGludWVUb0xv
Y2F0aW9uQnJlYWtwb2ludElEID0gc2NyaXB0RGVidWdTZXJ2ZXIoKS5zZXRCcmVha3BvaW50KHNj
cmlwdElELCBicmVha3BvaW50LCAmbGluZU51bWJlciwgJmNvbHVtbk51bWJlcik7CiAgICAgcmVz
dW1lKGVycm9yU3RyaW5nKTsKIH0KIAotUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6
OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJlYWtwb2ludChjb25z
dCBTdHJpbmcmIGJyZWFrcG9pbnRJZCwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU2Ny
aXB0QnJlYWtwb2ludCYgYnJlYWtwb2ludCkKK1Bhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVn
Z2VyOjpMb2NhdGlvbj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzb2x2ZUJyZWFrcG9pbnQo
Y29uc3QgU3RyaW5nJiBicmVha3BvaW50SUQsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIGNvbnN0
IFNjcmlwdEJyZWFrcG9pbnQmIGJyZWFrcG9pbnQpCiB7Ci0gICAgU2NyaXB0c01hcDo6aXRlcmF0
b3Igc2NyaXB0SXRlcmF0b3IgPSBtX3NjcmlwdHMuZmluZChzY3JpcHRJZCk7CisgICAgU2NyaXB0
c01hcDo6aXRlcmF0b3Igc2NyaXB0SXRlcmF0b3IgPSBtX3NjcmlwdHMuZmluZChzY3JpcHRJRCk7
CiAgICAgaWYgKHNjcmlwdEl0ZXJhdG9yID09IG1fc2NyaXB0cy5lbmQoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgU2NyaXB0JiBzY3JpcHQgPSBzY3JpcHRJdGVyYXRvci0+dmFsdWU7CkBAIC0z
OTEsMTcgKzM5MSwxNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRp
CiAKICAgICBpbnQgYWN0dWFsTGluZU51bWJlcjsKICAgICBpbnQgYWN0dWFsQ29sdW1uTnVtYmVy
OwotICAgIFN0cmluZyBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZCA9IHNjcmlwdERlYnVnU2VydmVy
KCkuc2V0QnJlYWtwb2ludChzY3JpcHRJZCwgYnJlYWtwb2ludCwgJmFjdHVhbExpbmVOdW1iZXIs
ICZhY3R1YWxDb2x1bW5OdW1iZXIpOwotICAgIGlmIChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZC5p
c0VtcHR5KCkpCisgICAgU3RyaW5nIGRlYnVnU2VydmVyQnJlYWtwb2ludElEID0gc2NyaXB0RGVi
dWdTZXJ2ZXIoKS5zZXRCcmVha3BvaW50KHNjcmlwdElELCBicmVha3BvaW50LCAmYWN0dWFsTGlu
ZU51bWJlciwgJmFjdHVhbENvbHVtbk51bWJlcik7CisgICAgaWYgKGRlYnVnU2VydmVyQnJlYWtw
b2ludElELmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBCcmVha3BvaW50SWRU
b0RlYnVnU2VydmVyQnJlYWtwb2ludElkc01hcDo6aXRlcmF0b3IgZGVidWdTZXJ2ZXJCcmVha3Bv
aW50SWRzSXRlcmF0b3IgPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRz
LmZpbmQoYnJlYWtwb2ludElkKTsKLSAgICBpZiAoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRl
cmF0b3IgPT0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5lbmQoKSkK
LSAgICAgICAgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPSBtX2JyZWFrcG9pbnRJ
ZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLnNldChicmVha3BvaW50SWQsIFZlY3RvcjxTdHJp
bmc+KCkpLml0ZXJhdG9yOwotICAgIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT52
YWx1ZS5hcHBlbmQoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWQpOworICAgIEJyZWFrcG9pbnRJRFRv
RGVidWdTZXJ2ZXJCcmVha3BvaW50SURzTWFwOjppdGVyYXRvciBkZWJ1Z1NlcnZlckJyZWFrcG9p
bnRJRHNJdGVyYXRvciA9IG1fYnJlYWtwb2ludElEVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHMu
ZmluZChicmVha3BvaW50SUQpOworICAgIGlmIChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHNJdGVy
YXRvciA9PSBtX2JyZWFrcG9pbnRJRFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SURzLmVuZCgpKQor
ICAgICAgICBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHNJdGVyYXRvciA9IG1fYnJlYWtwb2ludElE
VG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHMuc2V0KGJyZWFrcG9pbnRJRCwgVmVjdG9yPFN0cmlu
Zz4oKSkuaXRlcmF0b3I7CisgICAgZGVidWdTZXJ2ZXJCcmVha3BvaW50SURzSXRlcmF0b3ItPnZh
bHVlLmFwcGVuZChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRCk7CiAKICAgICBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRpb24gPSBUeXBlQnVpbGRlcjo6RGVidWdn
ZXI6OkxvY2F0aW9uOjpjcmVhdGUoKQotICAgICAgICAuc2V0U2NyaXB0SWQoc2NyaXB0SWQpCisg
ICAgICAgIC5zZXRTY3JpcHRJZChzY3JpcHRJRCkKICAgICAgICAgLnNldExpbmVOdW1iZXIoYWN0
dWFsTGluZU51bWJlcik7CiAgICAgbG9jYXRpb24tPnNldENvbHVtbk51bWJlcihhY3R1YWxDb2x1
bW5OdW1iZXIpOwogICAgIHJldHVybiBsb2NhdGlvbjsKQEAgLTQxNywyMyArNDE3LDIzIEBAIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2NyaXAKICAgICByZXR1cm4gdmFsdWUt
PmFzT2JqZWN0KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2VhcmNoSW5D
b250ZW50KEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3Qg
U3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBj
b25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxBcnJheTxXZWJDb3JlOjpU
eXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoTWF0Y2g+PiYgcmVzdWx0cykKK3ZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6c2VhcmNoSW5Db250ZW50KEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3Qg
U3RyaW5nJiBzY3JpcHRJRCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogY29uc3Qg
b3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgs
IFJlZlB0cjxBcnJheTxXZWJDb3JlOjpUeXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoTWF0Y2g+PiYg
cmVzdWx0cykKIHsKICAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVnZXggPyAqb3B0aW9u
YWxJc1JlZ2V4IDogZmFsc2U7CiAgICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gb3B0aW9uYWxDYXNl
U2Vuc2l0aXZlID8gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA6IGZhbHNlOwogCi0gICAgU2NyaXB0
c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuZmluZChzY3JpcHRJZCk7CisgICAgU2NyaXB0
c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuZmluZChzY3JpcHRJRCk7CiAgICAgaWYgKGl0
ICE9IG1fc2NyaXB0cy5lbmQoKSkKICAgICAgICAgcmVzdWx0cyA9IENvbnRlbnRTZWFyY2hVdGls
czo6c2VhcmNoSW5UZXh0QnlMaW5lcyhpdC0+dmFsdWUuc291cmNlLCBxdWVyeSwgY2FzZVNlbnNp
dGl2ZSwgaXNSZWdleCk7CiAgICAgZWxzZQotICAgICAgICAqZXJyb3IgPSAiTm8gc2NyaXB0IGZv
ciBpZDogIiArIHNjcmlwdElkOworICAgICAgICAqZXJyb3IgPSAiTm8gc2NyaXB0IGZvciBpZDog
IiArIHNjcmlwdElEOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFNjcmlw
dFNvdXJjZShFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0
IFN0cmluZyYgbmV3Q29udGVudCwgY29uc3QgYm9vbCogY29uc3QgcHJldmlldywgUmVmUHRyPEFy
cmF5PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4mIG5ld0NhbGxGcmFtZXMsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnNldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgc2Ny
aXB0SUQsIGNvbnN0IFN0cmluZyYgbmV3Q29udGVudCwgY29uc3QgYm9vbCogY29uc3QgcHJldmll
dywgUmVmUHRyPEFycmF5PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4mIG5ld0Nh
bGxGcmFtZXMsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpCiB7CiAgICAgYm9vbCBw
cmV2aWV3T25seSA9IHByZXZpZXcgJiYgKnByZXZpZXc7CiAgICAgU2NyaXB0T2JqZWN0IHJlc3Vs
dE9iamVjdDsKLSAgICBpZiAoIXNjcmlwdERlYnVnU2VydmVyKCkuc2V0U2NyaXB0U291cmNlKHNj
cmlwdElkLCBuZXdDb250ZW50LCBwcmV2aWV3T25seSwgZXJyb3IsICZtX2N1cnJlbnRDYWxsU3Rh
Y2ssICZyZXN1bHRPYmplY3QpKQorICAgIGlmICghc2NyaXB0RGVidWdTZXJ2ZXIoKS5zZXRTY3Jp
cHRTb3VyY2Uoc2NyaXB0SUQsIG5ld0NvbnRlbnQsIHByZXZpZXdPbmx5LCBlcnJvciwgJm1fY3Vy
cmVudENhbGxTdGFjaywgJnJlc3VsdE9iamVjdCkpCiAgICAgICAgIHJldHVybjsKICAgICBuZXdD
YWxsRnJhbWVzID0gY3VycmVudENhbGxGcmFtZXMoKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBvYmplY3QgPSBzY3JpcHRUb0luc3BlY3Rvck9iamVjdChyZXN1bHRPYmplY3QpOwpAQCAt
NDQxLDEzICs0NDEsMTMgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRTY3JpcHRT
bwogICAgICAgICByZXN1bHQgPSBvYmplY3Q7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6Z2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBz
Y3JpcHRJZCwgU3RyaW5nKiBzY3JpcHRTb3VyY2UpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgc2Ny
aXB0SUQsIFN0cmluZyogc2NyaXB0U291cmNlKQogewotICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SWQpOworICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SUQpOwogICAgIGlmIChpdCAhPSBtX3NjcmlwdHMu
ZW5kKCkpCiAgICAgICAgICpzY3JpcHRTb3VyY2UgPSBpdC0+dmFsdWUuc291cmNlOwogICAgIGVs
c2UKLSAgICAgICAgKmVycm9yID0gIk5vIHNjcmlwdCBmb3IgaWQ6ICIgKyBzY3JpcHRJZDsKKyAg
ICAgICAgKmVycm9yID0gIk5vIHNjcmlwdCBmb3IgaWQ6ICIgKyBzY3JpcHRJRDsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxUeXBlQnVpbGRl
cjo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mIGRldGFpbHMpCkBAIC01NjYsNyArNTY2LDcg
QEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9uQwogICAgIH0KIH0KIAot
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb21waWxlU2NyaXB0KEVycm9yU3RyaW5nKiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZVVSTCwgVHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTY3JpcHRJZD4qIHNjcmlwdElkLCBUeXBlQnVp
bGRlcjo6T3B0T3V0cHV0PFN0cmluZz4qIHN5bnRheEVycm9yTWVzc2FnZSkKK3ZvaWQgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6Y29tcGlsZVNjcmlwdChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIFR5cGVC
dWlsZGVyOjpPcHRPdXRwdXQ8U2NyaXB0SWQ+KiBzY3JpcHRJRCwgVHlwZUJ1aWxkZXI6Ok9wdE91
dHB1dDxTdHJpbmc+KiBzeW50YXhFcnJvck1lc3NhZ2UpCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQg
aW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIDApOwog
ICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKQEAgLTU3NCwxOCArNTc0LDE4
IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29tcGlsZVNjcmkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIFN0cmluZyBzY3JpcHRJZFZhbHVlOworICAgIFN0cmluZyBzY3Jp
cHRJRFZhbHVlOwogICAgIFN0cmluZyBleGNlcHRpb25NZXNzYWdlOwotICAgIHNjcmlwdERlYnVn
U2VydmVyKCkuY29tcGlsZVNjcmlwdChpbmplY3RlZFNjcmlwdC5zY3JpcHRTdGF0ZSgpLCBleHBy
ZXNzaW9uLCBzb3VyY2VVUkwsICZzY3JpcHRJZFZhbHVlLCAmZXhjZXB0aW9uTWVzc2FnZSk7Ci0g
ICAgaWYgKCFzY3JpcHRJZFZhbHVlICYmICFleGNlcHRpb25NZXNzYWdlKSB7CisgICAgc2NyaXB0
RGVidWdTZXJ2ZXIoKS5jb21waWxlU2NyaXB0KGluamVjdGVkU2NyaXB0LnNjcmlwdFN0YXRlKCks
IGV4cHJlc3Npb24sIHNvdXJjZVVSTCwgJnNjcmlwdElEVmFsdWUsICZleGNlcHRpb25NZXNzYWdl
KTsKKyAgICBpZiAoIXNjcmlwdElEVmFsdWUgJiYgIWV4Y2VwdGlvbk1lc3NhZ2UpIHsKICAgICAg
ICAgKmVycm9yU3RyaW5nID0gIlNjcmlwdCBjb21waWxhdGlvbiBmYWlsZWQiOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgICpzeW50YXhFcnJvck1lc3NhZ2UgPSBleGNlcHRpb25NZXNzYWdl
OwotICAgICpzY3JpcHRJZCA9IHNjcmlwdElkVmFsdWU7CisgICAgKnNjcmlwdElEID0gc2NyaXB0
SURWYWx1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpydW5TY3JpcHQoRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTY3JpcHRJZCYgc2NyaXB0SWQsIGNvbnN0IGlu
dCogZXhlY3V0aW9uQ29udGV4dElkLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9iamVjdEdyb3VwLCBj
b25zdCBib29sKiBjb25zdCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIFJl
ZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBUeXBlQnVp
bGRlcjo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pCit2b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnJ1blNjcmlwdChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFNjcmlwdElk
JiBzY3JpcHRJRCwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IFN0cmluZyog
Y29uc3Qgb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGNvbnN0IGRvTm90UGF1c2VPbkV4Y2VwdGlv
bnNBbmRNdXRlQ29uc29sZSwgUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+JiByZXN1bHQsIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93bikKIHsK
ICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yRXZh
bChlcnJvclN0cmluZywgZXhlY3V0aW9uQ29udGV4dElkKTsKICAgICBpZiAoaW5qZWN0ZWRTY3Jp
cHQuaGFzTm9WYWx1ZSgpKSB7CkBAIC02MDMsNyArNjAzLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpydW5TY3JpcHQoRQogICAgIFNjcmlwdFZhbHVlIHZhbHVlOwogICAgIGJvb2wg
d2FzVGhyb3duVmFsdWU7CiAgICAgU3RyaW5nIGV4Y2VwdGlvbk1lc3NhZ2U7Ci0gICAgc2NyaXB0
RGVidWdTZXJ2ZXIoKS5ydW5TY3JpcHQoaW5qZWN0ZWRTY3JpcHQuc2NyaXB0U3RhdGUoKSwgc2Ny
aXB0SWQsICZ2YWx1ZSwgJndhc1Rocm93blZhbHVlLCAmZXhjZXB0aW9uTWVzc2FnZSk7CisgICAg
c2NyaXB0RGVidWdTZXJ2ZXIoKS5ydW5TY3JpcHQoaW5qZWN0ZWRTY3JpcHQuc2NyaXB0U3RhdGUo
KSwgc2NyaXB0SUQsICZ2YWx1ZSwgJndhc1Rocm93blZhbHVlLCAmZXhjZXB0aW9uTWVzc2FnZSk7
CiAgICAgKndhc1Rocm93biA9IHdhc1Rocm93blZhbHVlOwogICAgIGlmICh2YWx1ZS5oYXNOb1Zh
bHVlKCkpIHsKICAgICAgICAgKmVycm9yU3RyaW5nID0gIlNjcmlwdCBleGVjdXRpb24gZmFpbGVk
IjsKQEAgLTY3MCw3ICs2NzAsNyBAQCBTdHJpbmcgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c291
cmNlTWFwCiAKIC8vIEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyIGZ1bmN0aW9ucwogCi12b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0
SWQsIGNvbnN0IFNjcmlwdCYgaW5TY3JpcHQpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIGNvbnN0IFNjcmlwdCYgaW5T
Y3JpcHQpCiB7CiAgICAgU2NyaXB0IHNjcmlwdCA9IGluU2NyaXB0OwogICAgIGlmICghc2NyaXB0
LnN0YXJ0TGluZSAmJiAhc2NyaXB0LnN0YXJ0Q29sdW1uKQpAQCAtNjgyLDkgKzY4Miw5IEBAIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3UKICAgICBib29sKiBoYXNTb3Vy
Y2VVUkxQYXJhbSA9IGhhc1NvdXJjZVVSTCA/ICZoYXNTb3VyY2VVUkwgOiAwOwogICAgIFN0cmlu
Zyogc291cmNlTWFwVVJMUGFyYW0gPSBzY3JpcHQuc291cmNlTWFwcGluZ1VSTC5pc051bGwoKSA/
IDAgOiAmc2NyaXB0LnNvdXJjZU1hcHBpbmdVUkw7CiAgICAgY29uc3QgYm9vbCogaXNDb250ZW50
U2NyaXB0ID0gc2NyaXB0LmlzQ29udGVudFNjcmlwdCA/ICZzY3JpcHQuaXNDb250ZW50U2NyaXB0
IDogMDsKLSAgICBtX2Zyb250ZW5kLT5zY3JpcHRQYXJzZWQoc2NyaXB0SWQsIHNjcmlwdFVSTCwg
c2NyaXB0LnN0YXJ0TGluZSwgc2NyaXB0LnN0YXJ0Q29sdW1uLCBzY3JpcHQuZW5kTGluZSwgc2Ny
aXB0LmVuZENvbHVtbiwgaXNDb250ZW50U2NyaXB0LCBzb3VyY2VNYXBVUkxQYXJhbSwgaGFzU291
cmNlVVJMUGFyYW0pOworICAgIG1fZnJvbnRlbmQtPnNjcmlwdFBhcnNlZChzY3JpcHRJRCwgc2Ny
aXB0VVJMLCBzY3JpcHQuc3RhcnRMaW5lLCBzY3JpcHQuc3RhcnRDb2x1bW4sIHNjcmlwdC5lbmRM
aW5lLCBzY3JpcHQuZW5kQ29sdW1uLCBpc0NvbnRlbnRTY3JpcHQsIHNvdXJjZU1hcFVSTFBhcmFt
LCBoYXNTb3VyY2VVUkxQYXJhbSk7CiAKLSAgICBtX3NjcmlwdHMuc2V0KHNjcmlwdElkLCBzY3Jp
cHQpOworICAgIG1fc2NyaXB0cy5zZXQoc2NyaXB0SUQsIHNjcmlwdCk7CiAKICAgICBpZiAoc2Ny
aXB0VVJMLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzA5LDcgKzcwOSw3IEBAIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3UKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6
TG9jYXRpb24+IGxvY2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoaXQtPmtleSwgc2NyaXB0SWQs
IGJyZWFrcG9pbnQpOworICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2Nh
dGlvbj4gbG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChpdC0+a2V5LCBzY3JpcHRJRCwgYnJl
YWtwb2ludCk7CiAgICAgICAgIGlmIChsb2NhdGlvbikKICAgICAgICAgICAgIG1fZnJvbnRlbmQt
PmJyZWFrcG9pbnRSZXNvbHZlZChpdC0+a2V5LCBsb2NhdGlvbik7CiAgICAgfQpAQCAtNzM4LDkg
KzczOCw5IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UoSlMKICAgICBt
X2Zyb250ZW5kLT5wYXVzZWQoY3VycmVudENhbGxGcmFtZXMoKSwgbV9icmVha1JlYXNvbiwgbV9i
cmVha0F1eERhdGEpOwogICAgIG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkID0gZmFsc2U7CiAK
LSAgICBpZiAoIW1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElkLmlzRW1wdHkoKSkgewot
ICAgICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLnJlbW92ZUJyZWFrcG9pbnQobV9jb250aW51ZVRv
TG9jYXRpb25CcmVha3BvaW50SWQpOwotICAgICAgICBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFr
cG9pbnRJZCA9ICIiOworICAgIGlmICghbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SUQu
aXNFbXB0eSgpKSB7CisgICAgICAgIHNjcmlwdERlYnVnU2VydmVyKCkucmVtb3ZlQnJlYWtwb2lu
dChtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRCk7CisgICAgICAgIG1fY29udGludWVU
b0xvY2F0aW9uQnJlYWtwb2ludElEID0gIiI7CiAgICAgfQogICAgIGlmIChtX2xpc3RlbmVyKQog
ICAgICAgICBtX2xpc3RlbmVyLT5kaWRQYXVzZSgpOwpAQCAtNzY2LDggKzc2Niw4IEBAIHZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2xlYXIoKQogICAgIG1fcGF1c2VkU2NyaXB0U3RhdGUg
PSAwOwogICAgIG1fY3VycmVudENhbGxTdGFjayA9IFNjcmlwdFZhbHVlKCk7CiAgICAgbV9zY3Jp
cHRzLmNsZWFyKCk7Ci0gICAgbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElk
cy5jbGVhcigpOwotICAgIG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElkID0gU3RyaW5n
KCk7CisgICAgbV9icmVha3BvaW50SURUb0RlYnVnU2VydmVyQnJlYWtwb2ludElEcy5jbGVhcigp
OworICAgIG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElEID0gU3RyaW5nKCk7CiAgICAg
Y2xlYXJCcmVha0RldGFpbHMoKTsKICAgICBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZCA9IGZh
bHNlOwogICAgIEVycm9yU3RyaW5nIGVycm9yOwpAQCAtNzkzLDcgKzc5Myw3IEBAIHZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzZXQoKQogewogICAgIHNjcmlwdERlYnVnU2VydmVyKCku
Y2xlYXJCcmVha3BvaW50cygpOwogICAgIG1fc2NyaXB0cy5jbGVhcigpOwotICAgIG1fYnJlYWtw
b2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuY2xlYXIoKTsKKyAgICBtX2JyZWFrcG9p
bnRJRFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SURzLmNsZWFyKCk7CiAgICAgaWYgKG1fZnJvbnRl
bmQpCiAgICAgICAgIG1fZnJvbnRlbmQtPmdsb2JhbE9iamVjdENsZWFyZWQoKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
aAkocmV2aXNpb24gMTU4Nzk4KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODQsMTIgKzg0LDEyIEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcqLCBp
bnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTCwgY29uc3QgU3RyaW5nKiBv
cHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIG9wdGlvbmFsQ29sdW1uTnVtYmVyLCBjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3B0aW9ucywgVHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpC
cmVha3BvaW50SWQqLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpEZWJ1
Z2dlcjo6TG9jYXRpb24+PiYgbG9jYXRpb25zKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QnJlYWtw
b2ludChFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlv
biwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIG9wdGlvbnMsIFR5cGVCdWlsZGVyOjpE
ZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9j
YXRpb24+JiBhY3R1YWxMb2NhdGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUJyZWFrcG9p
bnQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCk7CisgICAgdmlydHVh
bCB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGJyZWFr
cG9pbnRJRCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmlu
ZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlvbik7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgc2VhcmNoSW5Db250ZW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzY3Jp
cHRJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0
aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJy
YXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaE1hdGNoPj4mKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29u
c3QgU3RyaW5nJiBuZXdDb250ZW50LCBjb25zdCBib29sKiBwcmV2aWV3LCBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4mIG5ld0NhbGxG
cmFtZXMsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpOwotICAgIHZpcnR1YWwgdm9p
ZCBnZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBT
dHJpbmcqIHNjcmlwdFNvdXJjZSk7CisgICAgdmlydHVhbCB2b2lkIHNlYXJjaEluQ29udGVudChF
cnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgcXVlcnks
IGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJ
c1JlZ2V4LCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpTZWFy
Y2hNYXRjaD4+Jik7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcmlwdFNvdXJjZShFcnJvclN0cmlu
ZyosIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgbmV3Q29udGVudCwgY29u
c3QgYm9vbCogcHJldmlldywgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6
RGVidWdnZXI6OkNhbGxGcmFtZT4+JiBuZXdDYWxsRnJhbWVzLCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYgcmVzdWx0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2NyaXB0U291cmNlKEVycm9yU3Ry
aW5nKiwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRCwgU3RyaW5nKiBzY3JpcHRTb3VyY2UpOwogICAg
IHZpcnR1YWwgdm9pZCBnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJp
bmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0
YWlscz4mKTsKICAgICB2aXJ0dWFsIHZvaWQgcGF1c2UoRXJyb3JTdHJpbmcqKTsKICAgICB2aXJ0
dWFsIHZvaWQgcmVzdW1lKEVycm9yU3RyaW5nKik7CkBAIC0xNDksMTIgKzE0OSwxMiBAQCBwcml2
YXRlOgogCiAgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkRl
YnVnZ2VyOjpDYWxsRnJhbWU+PiBjdXJyZW50Q2FsbEZyYW1lcygpOwogCi0gICAgdmlydHVhbCB2
b2lkIGRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFNjcmlwdCYp
IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBkaWRQYXJzZVNvdXJjZShjb25zdCBT
dHJpbmcmIHNjcmlwdElELCBjb25zdCBTY3JpcHQmKSBPVkVSUklERSBGSU5BTDsKICAgICB2aXJ0
dWFsIHZvaWQgZmFpbGVkVG9QYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3Ry
aW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSkgT1ZFUlJJREUgRklOQUw7CiAKICAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRp
b25zSW1wbChFcnJvclN0cmluZyosIGludCk7CiAKLSAgICBQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpEZWJ1Z2dlcjo6TG9jYXRpb24+IHJlc29sdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJl
YWtwb2ludElkLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTY3JpcHRCcmVha3BvaW50
Jik7CisgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiByZXNv
bHZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJRCwgY29uc3QgU3RyaW5nJiBz
Y3JpcHRJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYpOwogICAgIHZvaWQgY2xlYXIoKTsKICAg
ICBib29sIGFzc2VydFBhdXNlZChFcnJvclN0cmluZyopOwogICAgIHZvaWQgY2xlYXJCcmVha0Rl
dGFpbHMoKTsKQEAgLTE2MiwxNyArMTYyLDE3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIHNvdXJj
ZU1hcFVSTEZvclNjcmlwdChjb25zdCBTY3JpcHQmKTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxT
dHJpbmcsIFNjcmlwdD4gU2NyaXB0c01hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBW
ZWN0b3I8U3RyaW5nPj4gQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNNYXA7
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4+IEJy
ZWFrcG9pbnRJZFRvQnJlYWtwb2ludE1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBW
ZWN0b3I8U3RyaW5nPj4gQnJlYWtwb2ludElEVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHNNYXA7
CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4+IEJy
ZWFrcG9pbnRJRFRvQnJlYWtwb2ludE1hcDsKIAogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciog
bV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2Vy
KiBtX2Zyb250ZW5kOwogICAgIEpTQzo6RXhlY1N0YXRlKiBtX3BhdXNlZFNjcmlwdFN0YXRlOwog
ICAgIFNjcmlwdFZhbHVlIG1fY3VycmVudENhbGxTdGFjazsKICAgICBTY3JpcHRzTWFwIG1fc2Ny
aXB0czsKLSAgICBCcmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkc01hcCBtX2Jy
ZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzOwotICAgIEJyZWFrcG9pbnRJZFRv
QnJlYWtwb2ludE1hcCBtX2phdmFTY3JpcHRCcmVha3BvaW50czsKLSAgICBTdHJpbmcgbV9jb250
aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SWQ7CisgICAgQnJlYWtwb2ludElEVG9EZWJ1Z1NlcnZl
ckJyZWFrcG9pbnRJRHNNYXAgbV9icmVha3BvaW50SURUb0RlYnVnU2VydmVyQnJlYWtwb2ludElE
czsKKyAgICBCcmVha3BvaW50SURUb0JyZWFrcG9pbnRNYXAgbV9qYXZhU2NyaXB0QnJlYWtwb2lu
dHM7CisgICAgU3RyaW5nIG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElEOwogICAgIElu
c3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6UmVhc29uOjpFbnVtIG1fYnJlYWtSZWFzb247CiAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9icmVha0F1eERhdGE7CiAgICAgYm9vbCBtX2Vu
YWJsZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmNwcAkocmV2aXNpb24gMTU4Nzk4KQorKysgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMzIsMTAgKzEwMzIsMTAgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFk
ZE1lc3NhZwogI2VuZGlmCiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRN
ZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVs
IGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQordm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlw
ZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiBzY3JpcHRJRCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVt
YmVyLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZp
ZXIpCiB7CiAgICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5z
dHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQ29uc29sZUFnZW50KCkpCi0gICAgICAgIGNvbnNv
bGVBZ2VudC0+YWRkTWVzc2FnZVRvQ29uc29sZShzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdl
LCBzY3JpcHRJZCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzdGF0ZSwgcmVxdWVzdElkZW50
aWZpZXIpOworICAgICAgICBjb25zb2xlQWdlbnQtPmFkZE1lc3NhZ2VUb0NvbnNvbGUoc291cmNl
LCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgc2NyaXB0SUQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJl
ciwgc3RhdGUsIHJlcXVlc3RJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmNvbnNvbGVDb3VudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cywgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3Vt
ZW50cz4gYXJndW1lbnRzKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAkocmV2aXNpb24gMTU4Nzk4KQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzIsMTEgKzIzMiwxMSBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFJlbW92ZSBv
bmNlIHdlIG5vIGxvbmdlciBnZW5lcmF0ZSBzdGFja3Mgb3V0c2lkZSBvZiBJbnNwZWN0b3IuCiAg
ICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShQYWdlKiwgTWVzc2FnZVNvdXJjZSwg
TWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVm
UHRyPFNjcmlwdENhbGxTdGFjaz4sIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAw
KTsKICAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UqLCBNZXNzYWdlU291
cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEpT
Qzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+LCB1bnNpZ25lZCBsb25n
IHJlcXVlc3RJZGVudGlmaWVyID0gMCk7Ci0gICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29u
c29sZShQYWdlKiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCB1bnNpZ25lZCBsaW5l
TnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIEpTQzo6RXhlY1N0YXRlKiA9IDAsIHVuc2ln
bmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKKyAgICBzdGF0aWMgdm9pZCBhZGRNZXNz
YWdlVG9Db25zb2xlKFBhZ2UqLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxl
dmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIHVuc2ln
bmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUqID0g
MCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwogI2lmIEVOQUJMRShXT1JL
RVJTKQogICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRvIFNjcmlwdEFyZ3VtZW50cyB0byBtYXRjaCBu
b24td29ya2VyIGNvbnRleHQuCiAgICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShX
b3JrZXJHbG9iYWxTY29wZSosIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2
ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+LCB1
bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7Ci0gICAgc3RhdGljIHZvaWQgYWRk
TWVzc2FnZVRvQ29uc29sZShXb3JrZXJHbG9iYWxTY29wZSosIE1lc3NhZ2VTb3VyY2UsIE1lc3Nh
Z2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5n
JiBzY3JpcHRJZCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBK
U0M6OkV4ZWNTdGF0ZSogPSAwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7
CisgICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShXb3JrZXJHbG9iYWxTY29wZSos
IE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5z
aWduZWQgY29sdW1uTnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSogPSAwLCB1bnNpZ25lZCBsb25nIHJl
cXVlc3RJZGVudGlmaWVyID0gMCk7CiAjZW5kaWYKICAgICBzdGF0aWMgdm9pZCBjb25zb2xlQ291
bnQoUGFnZSosIEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsK
ICAgICBzdGF0aWMgdm9pZCBzdGFydENvbnNvbGVUaW1pbmcoRnJhbWUqLCBjb25zdCBTdHJpbmcm
IHRpdGxlKTsKQEAgLTQzNiw3ICs0MzYsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRp
ZFdyaXRlSFRNTEltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiwgdW5z
aWduZWQgZW5kTGluZSk7CiAKICAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzKiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3Nh
Z2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQ
dHI8U2NyaXB0QXJndW1lbnRzPiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcik7Ci0g
ICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyosIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgdW5zaWduZWQgbGluZU51bWJlciwg
dW5zaWduZWQgY29sdW1uTnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGxvbmcgcmVx
dWVzdElkZW50aWZpZXIpOworICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMqLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2Fn
ZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUq
LCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKTsKIAogICAgIC8vIEZJWE1FOiBSZW1v
dmUgb25jZSB3ZSBubyBsb25nZXIgZ2VuZXJhdGUgc3RhY2tzIG91dHNpZGUgb2YgSW5zcGVjdG9y
LgogICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMqLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiwgdW5zaWduZWQgbG9u
ZyByZXF1ZXN0SWRlbnRpZmllcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvU2Ny
aXB0RGVidWdMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmgJKHJldmlzaW9uIDE1ODc5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1
LDcgKzY1LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+U2NyaXB0RGVidWdMaXN0ZW5lcigp
IHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2Ny
aXB0SWQsIGNvbnN0IFNjcmlwdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGFyc2VTb3Vy
Y2UoY29uc3QgU3RyaW5nJiBzY3JpcHRJRCwgY29uc3QgU2NyaXB0JikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBmYWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIGRhdGEsIGludCBmaXJzdExpbmUsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJy
b3JNZXNzYWdlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZFBhdXNlKEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgU2NyaXB0VmFsdWUmIGNhbGxGcmFtZXMsIGNvbnN0IFNjcmlwdFZhbHVlJiBleGNl
cHRpb24pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoKSA9IDA7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTg4MDgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0xMS0wNiAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQ29zbWV0aWM6IHJlbmFtZSB4eHhJ
ZCB0byB4eHhJRCBmb3IgU2NyaXB0SWQsIFNvdXJjZUlkLCBhbmQgQnJlYWtwb2ludElkLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzOTQ1LgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy9X
ZWJTY3JpcHREZWJ1Z2dlci5tbToKKyAgICAgICAgKFdlYlNjcmlwdERlYnVnZ2VyOjpleGNlcHRp
b24pOgorCiAyMDEzLTExLTA2ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbaU9TXSBVcHN0cmVhbSBMZXR0ZXJwcmVzcyBlZmZlY3QKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbQkocmV2aXNpb24gMTU4
Nzk4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTMzLDkgKzEzMyw5IEBAIHZvaWQgV2ViU2NyaXB0RGVidWdnZXI6
OmV4Y2VwdGlvbihKU0M6OkMKICAgICBXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlSW1wbGVtZW50YXRp
b25DYWNoZSogY2FjaGUgPSBXZWJWaWV3R2V0U2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxlbWVudGF0
aW9ucyh3ZWJWaWV3KTsKICAgICBpZiAoY2FjaGUtPmV4Y2VwdGlvbldhc1JhaXNlZEZ1bmMpIHsK
ICAgICAgICAgaWYgKGNhY2hlLT5leGNlcHRpb25XYXNSYWlzZWRFeHBlY3RzSGFzSGFuZGxlckZs
YWcpCi0gICAgICAgICAgICBDYWxsU2NyaXB0RGVidWdEZWxlZ2F0ZShjYWNoZS0+ZXhjZXB0aW9u
V2FzUmFpc2VkRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6ZXhjZXB0aW9uV2FzUmFp
c2VkOmhhc0hhbmRsZXI6c291cmNlSWQ6bGluZTpmb3JXZWJGcmFtZTopLCB3ZWJDYWxsRnJhbWUu
Z2V0KCksIGhhc0hhbmRsZXIsIGRlYnVnZ2VyQ2FsbEZyYW1lLT5zb3VyY2VJZCgpLCBkZWJ1Z2dl
ckNhbGxGcmFtZS0+bGluZSgpLCB3ZWJGcmFtZSk7CisgICAgICAgICAgICBDYWxsU2NyaXB0RGVi
dWdEZWxlZ2F0ZShjYWNoZS0+ZXhjZXB0aW9uV2FzUmFpc2VkRnVuYywgd2ViVmlldywgQHNlbGVj
dG9yKHdlYlZpZXc6ZXhjZXB0aW9uV2FzUmFpc2VkOmhhc0hhbmRsZXI6c291cmNlSWQ6bGluZTpm
b3JXZWJGcmFtZTopLCB3ZWJDYWxsRnJhbWUuZ2V0KCksIGhhc0hhbmRsZXIsIGRlYnVnZ2VyQ2Fs
bEZyYW1lLT5zb3VyY2VJRCgpLCBkZWJ1Z2dlckNhbGxGcmFtZS0+bGluZSgpLCB3ZWJGcmFtZSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIENhbGxTY3JpcHREZWJ1Z0RlbGVnYXRlKGNhY2hl
LT5leGNlcHRpb25XYXNSYWlzZWRGdW5jLCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpleGNl
cHRpb25XYXNSYWlzZWQ6c291cmNlSWQ6bGluZTpmb3JXZWJGcmFtZTopLCB3ZWJDYWxsRnJhbWUu
Z2V0KCksIGRlYnVnZ2VyQ2FsbEZyYW1lLT5zb3VyY2VJZCgpLCBkZWJ1Z2dlckNhbGxGcmFtZS0+
bGluZSgpLCB3ZWJGcmFtZSk7CisgICAgICAgICAgICBDYWxsU2NyaXB0RGVidWdEZWxlZ2F0ZShj
YWNoZS0+ZXhjZXB0aW9uV2FzUmFpc2VkRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6
ZXhjZXB0aW9uV2FzUmFpc2VkOnNvdXJjZUlkOmxpbmU6Zm9yV2ViRnJhbWU6KSwgd2ViQ2FsbEZy
YW1lLmdldCgpLCBkZWJ1Z2dlckNhbGxGcmFtZS0+c291cmNlSUQoKSwgZGVidWdnZXJDYWxsRnJh
bWUtPmxpbmUoKSwgd2ViRnJhbWUpOwogICAgIH0KIAogICAgIG1fY2FsbGluZ0RlbGVnYXRlID0g
ZmFsc2U7Cg==
</data>
<flag name="review"
          id="239188"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216317</attachid>
            <date>2013-11-07 11:14:06 -0800</date>
            <delta_ts>2013-11-07 11:56:31 -0800</delta_ts>
            <desc>patch 2: changed some IDs to Identifiers in InspectorDebuggerAgent because those are meant to be strings.</desc>
            <filename>bug-123945.patch</filename>
            <type>text/plain</type>
            <size>53561</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4ODU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBA
CisyMDEzLTExLTA3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBD
b3NtZXRpYzogcmVuYW1lIHh4eElkIHRvIHh4eElEIGZvciBTY3JpcHRJZCwgU291cmNlSWQsIGFu
ZCBCcmVha3BvaW50SWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjM5NDUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6
OkRlYnVnZ2VyQ2FsbEZyYW1lOjpzb3VyY2VJRCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2Fs
bEZyYW1lOjpzb3VyY2VJREZvckNhbGxGcmFtZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdn
ZXJDYWxsRnJhbWUuaDoKKwogMjAxMy0xMS0wNyAgSnVsaWVuIEJyaWFuY2VhdSAgPGpicmlhbmNl
QGNpc2NvLmNvbT4KIAogICAgICAgICBGaXggYnVpbGQgZm9yIGFyY2hpdGVjdHVyZXMgd2l0aCA0
IGFyZ3VtZW50IHJlZ2lzdGVycyAoYnJva2VuIHNpbmNlIHIxNTg4MjApLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3Bw
CShyZXZpc2lvbiAxNTg4NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXJDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSwxMiArODUsMTIgQEAgSlND
OjpKU0dsb2JhbE9iamVjdCogRGVidWdnZXJDYWxsRnJhbWU6OgogICAgIHJldHVybiBtX2NhbGxG
cmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpOwogfQogCi1pbnRwdHJfdCBEZWJ1Z2dlckNhbGxG
cmFtZTo6c291cmNlSWQoKSBjb25zdAoraW50cHRyX3QgRGVidWdnZXJDYWxsRnJhbWU6OnNvdXJj
ZUlEKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKICAgICBpZiAoIWlzVmFsaWQo
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHNvdXJjZUlkRm9yQ2FsbEZyYW1lKG1f
Y2FsbEZyYW1lKTsKKyAgICByZXR1cm4gc291cmNlSURGb3JDYWxsRnJhbWUobV9jYWxsRnJhbWUp
OwogfQogCiBTdHJpbmcgRGVidWdnZXJDYWxsRnJhbWU6OmZ1bmN0aW9uTmFtZSgpIGNvbnN0CkBA
IC0xODUsNyArMTg1LDcgQEAgVGV4dFBvc2l0aW9uIERlYnVnZ2VyQ2FsbEZyYW1lOjpwb3NpdGlv
bgogICAgIHJldHVybiBUZXh0UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50
KGZ1bmN0b3IubGluZSgpKSwgT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGZ1bmN0b3Iu
Y29sdW1uKCkpKTsKIH0KIAotaW50cHRyX3QgRGVidWdnZXJDYWxsRnJhbWU6OnNvdXJjZUlkRm9y
Q2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lKQoraW50cHRyX3QgRGVidWdnZXJDYWxsRnJh
bWU6OnNvdXJjZUlERm9yQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEFT
U0VSVChjYWxsRnJhbWUpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dl
ckNhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlckNhbGxGcmFtZS5oCShyZXZpc2lvbiAxNTg4NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAt
NTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUoKSBjb25zdCB7
IHJldHVybiBtX2NhbGxGcmFtZTsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8
RGVidWdnZXJDYWxsRnJhbWU+IGNhbGxlckZyYW1lKCk7CiAgICAgRXhlY1N0YXRlKiBleGVjKCkg
Y29uc3QgeyByZXR1cm4gbV9jYWxsRnJhbWU7IH0KLSAgICBKU19FWFBPUlRfUFJJVkFURSBpbnRw
dHJfdCBzb3VyY2VJZCgpIGNvbnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRFIGludHB0cl90IHNv
dXJjZUlEKCkgY29uc3Q7CiAKICAgICAvLyBsaW5lIGFuZCBjb2x1bW4gYXJlIGluIGJhc2UgMCBl
LmcuIHRoZSBmaXJzdCBsaW5lIGlzIGxpbmUgMC4KICAgICBpbnQgbGluZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcG9zaXRpb24ubV9saW5lLnplcm9CYXNlZEludCgpOyB9CkBAIC03Miw3ICs3Miw3IEBA
IHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1ZhbHVlIGV2YWx1YXRl
V2l0aENhbGxGcmFtZShDYWxsRnJhbWUqLCBjb25zdCBTdHJpbmcmIHNjcmlwdCwgSlNWYWx1ZSYg
ZXhjZXB0aW9uKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGV4dFBvc2l0aW9uIHBv
c2l0aW9uRm9yQ2FsbEZyYW1lKENhbGxGcmFtZSopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBpbnRwdHJfdCBzb3VyY2VJZEZvckNhbGxGcmFtZShDYWxsRnJhbWUqKTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgaW50cHRyX3Qgc291cmNlSURGb3JDYWxsRnJhbWUoQ2FsbEZy
YW1lKik7CiAgICAgc3RhdGljIEpTVmFsdWUgdGhpc1ZhbHVlRm9yQ2FsbEZyYW1lKENhbGxGcmFt
ZSopOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4ODU1KQorKysgU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIw
MTMtMTEtMDcgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIENvc21l
dGljOiByZW5hbWUgeHh4SWQgdG8geHh4SUQgZm9yIFNjcmlwdElkLCBTb3VyY2VJZCwgYW5kIEJy
ZWFrcG9pbnRJZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyMzk0NS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0luamVjdGVkU2Ny
aXB0SG9zdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0luamVjdGVkU2NyaXB0SG9z
dDo6ZnVuY3Rpb25EZXRhaWxzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2Fs
bEZyYW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzb3VyY2VJ
RCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OlNjcmlwdERlYnVnU2VydmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3BvaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpoYXNCcmVha3BvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpjbGVhckJyZWFrcG9pbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjp1cGRhdGVDYWxsRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnBhdXNlSWZOZWVkZWQpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnNvbGVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb25zb2xlQWdl
bnQ6OmFkZE1lc3NhZ2VUb0NvbnNvbGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JD
b25zb2xlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUluc3Ry
dW1lbnRhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjphZGRNZXNzYWdlVG9Db25zb2xlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVn
Z2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c2V0QnJlYWtwb2ludEJ5VXJsKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTG9jYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3Bv
aW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVl
VG9Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpy
ZXNvbHZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpzZWFyY2hJbkNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6c2V0U2NyaXB0U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50Ojpjb21waWxlU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnJ1blNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpyZXNldCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2Fn
ZVRvQ29uc29sZUltcGwpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5oOgorCiAy
MDEzLTExLTA3ICBCZW0gSm9uZXMtQmV5ICA8YmpvbmVzYmVAYWRvYmUuY29tPgogCiAgICAgICAg
IFJlZmFjdG9yIGxvZ2ljYWwgbGVmdC9yaWdodCBvZmZzZXQgZm9yIGxpbmUgbWV0aG9kcwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRT
Y3JpcHRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU4ODU1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjksMTEgKzE2OSwxMSBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpmdW5j
dGlvbkRlCiAgICAgaW50IGxpbmVOdW1iZXIgPSBzb3VyY2VDb2RlLT5maXJzdExpbmUoKTsKICAg
ICBpZiAobGluZU51bWJlcikKICAgICAgICAgbGluZU51bWJlciAtPSAxOyAvLyBJbiB0aGUgaW5z
cGVjdG9yIHByb3RvY29sIGFsbCBwb3NpdGlvbnMgYXJlIDAtYmFzZWQgd2hpbGUgaW4gU291cmNl
Q29kZSB0aGV5IGFyZSAxLWJhc2VkCi0gICAgU3RyaW5nIHNjcmlwdElkID0gU3RyaW5nOjpudW1i
ZXIoc291cmNlQ29kZS0+cHJvdmlkZXIoKS0+YXNJRCgpKTsKKyAgICBTdHJpbmcgc2NyaXB0SUQg
PSBTdHJpbmc6Om51bWJlcihzb3VyY2VDb2RlLT5wcm92aWRlcigpLT5hc0lEKCkpOwogCiAgICAg
SlNPYmplY3QqIGxvY2F0aW9uID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAgICAgbG9j
YXRpb24tPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJsaW5lTnVtYmVy
IiksIGpzTnVtYmVyKGxpbmVOdW1iZXIpKTsKLSAgICBsb2NhdGlvbi0+cHV0RGlyZWN0KGV4ZWMt
PnZtKCksIElkZW50aWZpZXIoZXhlYywgInNjcmlwdElkIiksIGpzU3RyaW5nKGV4ZWMsIHNjcmlw
dElkKSk7CisgICAgbG9jYXRpb24tPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4
ZWMsICJzY3JpcHRJZCIpLCBqc1N0cmluZyhleGVjLCBzY3JpcHRJRCkpOwogCiAgICAgSlNPYmpl
Y3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgIHJlc3VsdC0+cHV0
RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgImxvY2F0aW9uIiksIGxvY2F0aW9u
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2Fs
bEZyYW1lLmgJKHJldmlzaW9uIDE1ODg1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0phdmFTY3JpcHRDYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgSmF2YVNjcmlwdENhbGxGcmFtZSogY2FsbGVyKCk7Ci0gICAg
aW50cHRyX3Qgc291cmNlSUQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLT5z
b3VyY2VJZCgpOyB9CisgICAgaW50cHRyX3Qgc291cmNlSUQoKSBjb25zdCB7IHJldHVybiBtX2Rl
YnVnZ2VyQ2FsbEZyYW1lLT5zb3VyY2VJRCgpOyB9CiAgICAgY29uc3QgVGV4dFBvc2l0aW9uIHBv
c2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+cG9zaXRpb24oKTsg
fQogICAgIGludCBsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+bGlu
ZSgpOyB9CiAgICAgaW50IGNvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJh
bWUtPmNvbHVtbigpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxNTg4NTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4
LDcgKzg4LDcgQEAgU2NyaXB0RGVidWdTZXJ2ZXI6OlNjcmlwdERlYnVnU2VydmVyKCkKICAgICAs
IG1fY3VycmVudENhbGxGcmFtZSgwKQogICAgICwgbV9yZWNvbXBpbGVUaW1lcih0aGlzLCAmU2Ny
aXB0RGVidWdTZXJ2ZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKQogICAgICwgbV9sYXN0RXhl
Y3V0ZWRMaW5lKC0xKQotICAgICwgbV9sYXN0RXhlY3V0ZWRTb3VyY2VJZCgtMSkKKyAgICAsIG1f
bGFzdEV4ZWN1dGVkU291cmNlSUQoLTEpCiB7CiB9CiAKQEAgLTEwMSw5ICsxMDEsOSBAQCBTdHJp
bmcgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoCiAgICAgaW50cHRyX3Qgc291cmNl
SURWYWx1ZSA9IHNvdXJjZUlELnRvSW50UHRyKCk7CiAgICAgaWYgKCFzb3VyY2VJRFZhbHVlKQog
ICAgICAgICByZXR1cm4gIiI7Ci0gICAgU291cmNlSWRUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRv
ciBpdCA9IG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLmZpbmQoc291cmNlSURWYWx1ZSk7Ci0gICAg
aWYgKGl0ID09IG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLmVuZCgpKQotICAgICAgICBpdCA9IG1f
c291cmNlSWRUb0JyZWFrcG9pbnRzLnNldChzb3VyY2VJRFZhbHVlLCBMaW5lVG9CcmVha3BvaW50
c01hcCgpKS5pdGVyYXRvcjsKKyAgICBTb3VyY2VJRFRvQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9zb3VyY2VJRFRvQnJlYWtwb2ludHMuZmluZChzb3VyY2VJRFZhbHVlKTsKKyAgICBp
ZiAoaXQgPT0gbV9zb3VyY2VJRFRvQnJlYWtwb2ludHMuZW5kKCkpCisgICAgICAgIGl0ID0gbV9z
b3VyY2VJRFRvQnJlYWtwb2ludHMuc2V0KHNvdXJjZUlEVmFsdWUsIExpbmVUb0JyZWFrcG9pbnRz
TWFwKCkpLml0ZXJhdG9yOwogICAgIExpbmVUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBicmVh
a3NJdCA9IGl0LT52YWx1ZS5maW5kKHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlcik7CiAgICAg
aWYgKGJyZWFrc0l0ID09IGl0LT52YWx1ZS5lbmQoKSkKICAgICAgICAgYnJlYWtzSXQgPSBpdC0+
dmFsdWUuc2V0KHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlciwgQnJlYWtwb2ludHNJbkxpbmUo
KSkuaXRlcmF0b3I7CkBAIC0xMjIsMTAgKzEyMiwxMCBAQCBTdHJpbmcgU2NyaXB0RGVidWdTZXJ2
ZXI6OnNldEJyZWFrcG9pbnQoCiAgICAgcmV0dXJuIHNvdXJjZUlEICsgIjoiICsgU3RyaW5nOjpu
dW1iZXIoc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVyKSArICI6IiArIFN0cmluZzo6bnVtYmVy
KHNjcmlwdEJyZWFrcG9pbnQuY29sdW1uTnVtYmVyKTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCkKK3ZvaWQg
U2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3Bv
aW50SUQpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gdG9rZW5zOwotICAgIGJyZWFrcG9pbnRJZC5z
cGxpdCgiOiIsIHRva2Vucyk7CisgICAgYnJlYWtwb2ludElELnNwbGl0KCI6IiwgdG9rZW5zKTsK
ICAgICBpZiAodG9rZW5zLnNpemUoKSAhPSAzKQogICAgICAgICByZXR1cm47CiAgICAgYm9vbCBz
dWNjZXNzOwpAQCAtMTM5LDggKzEzOSw4IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92
ZUJyZWFrcG9pbnQKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNv
dXJjZUlkVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NvdXJjZUlkVG9CcmVha3Bv
aW50cy5maW5kKHNvdXJjZUlEVmFsdWUpOwotICAgIGlmIChpdCA9PSBtX3NvdXJjZUlkVG9CcmVh
a3BvaW50cy5lbmQoKSkKKyAgICBTb3VyY2VJRFRvQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9zb3VyY2VJRFRvQnJlYWtwb2ludHMuZmluZChzb3VyY2VJRFZhbHVlKTsKKyAgICBpZiAo
aXQgPT0gbV9zb3VyY2VJRFRvQnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAg
ICBMaW5lVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmlu
ZChsaW5lTnVtYmVyKTsKICAgICBpZiAoYnJlYWtzSXQgPT0gaXQtPnZhbHVlLmVuZCgpKQpAQCAt
MTYyLDggKzE2Miw4IEBAIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6Omhhc0JyZWFrcG9pbnQoaW4K
ICAgICBpZiAoIW1fYnJlYWtwb2ludHNBY3RpdmF0ZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIFNvdXJjZUlkVG9CcmVha3BvaW50c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Nv
dXJjZUlkVG9CcmVha3BvaW50cy5maW5kKHNvdXJjZUlEKTsKLSAgICBpZiAoaXQgPT0gbV9zb3Vy
Y2VJZFRvQnJlYWtwb2ludHMuZW5kKCkpCisgICAgU291cmNlSURUb0JyZWFrcG9pbnRzTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fc291cmNlSURUb0JyZWFrcG9pbnRzLmZpbmQoc291cmNlSUQp
OworICAgIGlmIChpdCA9PSBtX3NvdXJjZUlEVG9CcmVha3BvaW50cy5lbmQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgaW50IGxpbmUgPSBwb3NpdGlvbi5tX2xpbmUuemVyb0Jhc2Vk
SW50KCk7CkBAIC0yNDYsNyArMjQ2LDcgQEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXZhbHVh
dGVCcmVha3BvaQogCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpjbGVhckJyZWFrcG9pbnRzKCkK
IHsKLSAgICBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5jbGVhcigpOworICAgIG1fc291cmNlSURU
b0JyZWFrcG9pbnRzLmNsZWFyKCk7CiAgICAgdXBkYXRlTnVtYmVyT2ZCcmVha3BvaW50cygwKTsK
IH0KIApAQCAtNDc4LDEwICs0NzgsMTAgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0
Y2hGdW5jdGlvbgogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6dXBkYXRlQ2FsbEZyYW1lKENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewogICAgIG1fY3VycmVudENhbGxGcmFtZSA9IGNhbGxGcmFtZTsK
LSAgICBpbnRwdHJfdCBzb3VyY2VJZCA9IERlYnVnZ2VyQ2FsbEZyYW1lOjpzb3VyY2VJZEZvckNh
bGxGcmFtZShjYWxsRnJhbWUpOwotICAgIGlmIChtX2xhc3RFeGVjdXRlZFNvdXJjZUlkICE9IHNv
dXJjZUlkKSB7CisgICAgaW50cHRyX3Qgc291cmNlSUQgPSBEZWJ1Z2dlckNhbGxGcmFtZTo6c291
cmNlSURGb3JDYWxsRnJhbWUoY2FsbEZyYW1lKTsKKyAgICBpZiAobV9sYXN0RXhlY3V0ZWRTb3Vy
Y2VJRCAhPSBzb3VyY2VJRCkgewogICAgICAgICBtX2xhc3RFeGVjdXRlZExpbmUgPSAtMTsKLSAg
ICAgICAgbV9sYXN0RXhlY3V0ZWRTb3VyY2VJZCA9IHNvdXJjZUlkOworICAgICAgICBtX2xhc3RF
eGVjdXRlZFNvdXJjZUlEID0gc291cmNlSUQ7CiAgICAgfQogfQogCkBAIC01MDcsOSArNTA3LDkg
QEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cGF1c2VJZk5lZWRlZChDYQogICAgIGJvb2wgcGF1
c2VOb3cgPSBtX3BhdXNlT25OZXh0U3RhdGVtZW50OwogICAgIHBhdXNlTm93IHw9IChtX3BhdXNl
T25DYWxsRnJhbWUgPT0gbV9jdXJyZW50Q2FsbEZyYW1lKTsKIAotICAgIGludHB0cl90IHNvdXJj
ZUlkID0gRGVidWdnZXJDYWxsRnJhbWU6OnNvdXJjZUlkRm9yQ2FsbEZyYW1lKG1fY3VycmVudENh
bGxGcmFtZSk7CisgICAgaW50cHRyX3Qgc291cmNlSUQgPSBEZWJ1Z2dlckNhbGxGcmFtZTo6c291
cmNlSURGb3JDYWxsRnJhbWUobV9jdXJyZW50Q2FsbEZyYW1lKTsKICAgICBUZXh0UG9zaXRpb24g
cG9zaXRpb24gPSBEZWJ1Z2dlckNhbGxGcmFtZTo6cG9zaXRpb25Gb3JDYWxsRnJhbWUobV9jdXJy
ZW50Q2FsbEZyYW1lKTsKLSAgICBwYXVzZU5vdyB8PSBkaWRIaXRCcmVha3BvaW50ID0gaGFzQnJl
YWtwb2ludChzb3VyY2VJZCwgcG9zaXRpb24sICZicmVha3BvaW50KTsKKyAgICBwYXVzZU5vdyB8
PSBkaWRIaXRCcmVha3BvaW50ID0gaGFzQnJlYWtwb2ludChzb3VyY2VJRCwgcG9zaXRpb24sICZi
cmVha3BvaW50KTsKICAgICBtX2xhc3RFeGVjdXRlZExpbmUgPSBwb3NpdGlvbi5tX2xpbmUuemVy
b0Jhc2VkSW50KCk7CiAgICAgaWYgKCFwYXVzZU5vdykKICAgICAgICAgcmV0dXJuOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCShyZXZp
c2lvbiAxNTg4NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1Nl
cnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIGNsYXNzIFNjcmlwdERlYnVn
U2VydmVyIDogcHJvdGVjdGVkIEpTQzoKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY3JpcHRE
ZWJ1Z1NlcnZlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFN0cmlu
ZyBzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFNjcmlwdEJyZWFr
cG9pbnQmLCBpbnQqIGFjdHVhbExpbmVOdW1iZXIsIGludCogYWN0dWFsQ29sdW1uTnVtYmVyKTsK
LSAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpOwor
ICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJRCk7CiAg
ICAgdm9pZCBjbGVhckJyZWFrcG9pbnRzKCk7CiAgICAgdm9pZCBzZXRCcmVha3BvaW50c0FjdGl2
YXRlZChib29sIGFjdGl2YXRlZCk7CiAgICAgdm9pZCBhY3RpdmF0ZUJyZWFrcG9pbnRzKCkgeyBz
ZXRCcmVha3BvaW50c0FjdGl2YXRlZCh0cnVlKTsgfQpAQCAtOTcsOSArOTcsOSBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc1BhdXNlZCgpIHsgcmV0dXJuIG1fcGF1c2VkOyB9CiAgICAgYm9vbCBydW5u
aW5nTmVzdGVkTWVzc2FnZUxvb3AoKSB7IHJldHVybiBtX3J1bm5pbmdOZXN0ZWRNZXNzYWdlTG9v
cDsgfQogCi0gICAgdm9pZCBjb21waWxlU2NyaXB0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3Ry
aW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgU3RyaW5nKiBzY3JpcHRJ
ZCwgU3RyaW5nKiBleGNlcHRpb25NZXNzYWdlKTsKKyAgICB2b2lkIGNvbXBpbGVTY3JpcHQoSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgc291
cmNlVVJMLCBTdHJpbmcqIHNjcmlwdElELCBTdHJpbmcqIGV4Y2VwdGlvbk1lc3NhZ2UpOwogICAg
IHZvaWQgY2xlYXJDb21waWxlZFNjcmlwdHMoKTsKLSAgICB2b2lkIHJ1blNjcmlwdChKU0M6OkV4
ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIFNjcmlwdFZhbHVlKiByZXN1bHQsIGJv
b2wqIHdhc1Rocm93biwgU3RyaW5nKiBleGNlcHRpb25NZXNzYWdlKTsKKyAgICB2b2lkIHJ1blNj
cmlwdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIFNjcmlwdFZhbHVl
KiByZXN1bHQsIGJvb2wqIHdhc1Rocm93biwgU3RyaW5nKiBleGNlcHRpb25NZXNzYWdlKTsKIAog
ICAgIGNsYXNzIFRhc2sgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTE1
OCw3ICsxNTgsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB0eXBlZGVmIFZlY3RvcjxTY3JpcHRCcmVh
a3BvaW50PiBCcmVha3BvaW50c0luTGluZTsKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBCcmVh
a3BvaW50c0luTGluZSwgV1RGOjpJbnRIYXNoPGludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8aW50Pj4gTGluZVRvQnJlYWtwb2ludHNNYXA7Ci0gICAgdHlwZWRlZiBIYXNo
TWFwPGludHB0cl90LCBMaW5lVG9CcmVha3BvaW50c01hcD4gU291cmNlSWRUb0JyZWFrcG9pbnRz
TWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRwdHJfdCwgTGluZVRvQnJlYWtwb2ludHNNYXA+
IFNvdXJjZUlEVG9CcmVha3BvaW50c01hcDsKIAogICAgIGJvb2wgbV9jYWxsaW5nTGlzdGVuZXJz
OwogICAgIFBhdXNlT25FeGNlcHRpb25zU3RhdGUgbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlOwpA
QCAtMTcwLDExICsxNzAsMTEgQEAgcHJvdGVjdGVkOgogICAgIEpTQzo6Q2FsbEZyYW1lKiBtX3Bh
dXNlT25DYWxsRnJhbWU7CiAgICAgSlNDOjpDYWxsRnJhbWUqIG1fY3VycmVudENhbGxGcmFtZTsK
ICAgICBSZWZQdHI8SlNDOjpEZWJ1Z2dlckNhbGxGcmFtZT4gbV9jdXJyZW50RGVidWdnZXJDYWxs
RnJhbWU7Ci0gICAgU291cmNlSWRUb0JyZWFrcG9pbnRzTWFwIG1fc291cmNlSWRUb0JyZWFrcG9p
bnRzOworICAgIFNvdXJjZUlEVG9CcmVha3BvaW50c01hcCBtX3NvdXJjZUlEVG9CcmVha3BvaW50
czsKICAgICBUaW1lcjxTY3JpcHREZWJ1Z1NlcnZlcj4gbV9yZWNvbXBpbGVUaW1lcjsKIAogICAg
IGludCBtX2xhc3RFeGVjdXRlZExpbmU7Ci0gICAgaW50cHRyX3QgbV9sYXN0RXhlY3V0ZWRTb3Vy
Y2VJZDsKKyAgICBpbnRwdHJfdCBtX2xhc3RFeGVjdXRlZFNvdXJjZUlEOwogCiAgICAgZnJpZW5k
IGNsYXNzIERlYnVnZ2VyQ2FsbEZyYW1lU2NvcGU7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAJKHJldmlzaW9uIDE1
ODg1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBJbnNwZWN0b3JDb25z
b2xlQWdlbnQ6OmFkZE1lc3NhZ2VUbwogICAgIGFkZENvbnNvbGVNZXNzYWdlKGFkb3B0UHRyKG5l
dyBDb25zb2xlTWVzc2FnZSghaXNXb3JrZXJBZ2VudCgpLCBzb3VyY2UsIHR5cGUsIGxldmVsLCBt
ZXNzYWdlLCBhcmd1bWVudHMsIHN0YXRlLCByZXF1ZXN0SWRlbnRpZmllcikpKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJj
ZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCB1bnNpZ25lZCBsaW5lTnVtYmVy
LCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQg
bG9uZyByZXF1ZXN0SWRlbnRpZmllcikKK3ZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRN
ZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBN
ZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBz
Y3JpcHRJRCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCiB7CiAg
ICAgaWYgKCFkZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3
Miw3ICsxNzIsNyBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6YWRkTWVzc2FnZVRvCiAg
ICAgfQogCiAgICAgYm9vbCBjYW5HZW5lcmF0ZUNhbGxTdGFjayA9ICFpc1dvcmtlckFnZW50KCkg
JiYgbV9mcm9udGVuZDsKLSAgICBhZGRDb25zb2xlTWVzc2FnZShhZG9wdFB0cihuZXcgQ29uc29s
ZU1lc3NhZ2UoY2FuR2VuZXJhdGVDYWxsU3RhY2ssIHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3Nh
Z2UsIHNjcmlwdElkLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHN0YXRlLCByZXF1ZXN0SWRl
bnRpZmllcikpKTsKKyAgICBhZGRDb25zb2xlTWVzc2FnZShhZG9wdFB0cihuZXcgQ29uc29sZU1l
c3NhZ2UoY2FuR2VuZXJhdGVDYWxsU3RhY2ssIHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2Us
IHNjcmlwdElELCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHN0YXRlLCByZXF1ZXN0SWRlbnRp
ZmllcikpKTsKIH0KIAogVmVjdG9yPHVuc2lnbmVkPiBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNv
bnNvbGVNZXNzYWdlQXJndW1lbnRDb3VudHMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaAkocmV2aXNpb24gMTU4ODU1KQorKysg
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJG
cm9udGVuZCgpOwogCiAgICAgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2Us
IE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgSlNDOjpF
eGVjU3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4sIHVuc2lnbmVkIGxvbmcgcmVx
dWVzdElkZW50aWZpZXIgPSAwKTsKLSAgICB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2Fn
ZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBj
b2x1bW5OdW1iZXIsIEpTQzo6RXhlY1N0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElk
ZW50aWZpZXIgPSAwKTsKKyAgICB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJj
ZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25z
dCBTdHJpbmcmIHNjcmlwdElELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5O
dW1iZXIsIEpTQzo6RXhlY1N0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZp
ZXIgPSAwKTsKIAogICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSB3ZSBubyBsb25nZXIgZ2VuZXJh
dGUgc3RhY2tzIG91dHNpZGUgb2YgSW5zcGVjdG9yLgogICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29u
c29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiwgdW5zaWduZWQgbG9uZyBy
ZXF1ZXN0SWRlbnRpZmllciA9IDApOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnNvbGVJbnN0cnVtZW50YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUluc3RydW1lbnRhdGlvbi5oCShyZXZpc2lv
biAxNTg4NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUlu
c3RydW1lbnRhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxOCArNzIsMTggQEAgaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZAogI2VuZGlmCiB9CiAKLWlubGluZSB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShQYWdlKiBw
YWdlLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVs
IGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQoraW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UqIHBhZ2UsIE1l
c3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWws
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRCwgdW5zaWduZWQg
bGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKICAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGlu
c3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQotICAgICAgICBhZGRNZXNzYWdlVG9Db25z
b2xlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdl
LCBzY3JpcHRJZCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzdGF0ZSwgcmVxdWVzdElkZW50
aWZpZXIpOworICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbChpbnN0cnVtZW50aW5nQWdl
bnRzLCBzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBzY3JpcHRJRCwgbGluZU51bWJlciwg
Y29sdW1uTnVtYmVyLCBzdGF0ZSwgcmVxdWVzdElkZW50aWZpZXIpOwogI2Vsc2UKICAgICBVTlVT
RURfUEFSQU0ocGFnZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNvdXJjZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHR5cGUpOwogICAgIFVOVVNFRF9QQVJBTShsZXZlbCk7CiAgICAgVU5VU0VEX1BBUkFNKG1l
c3NhZ2UpOwotICAgIFVOVVNFRF9QQVJBTShzY3JpcHRJZCk7CisgICAgVU5VU0VEX1BBUkFNKHNj
cmlwdElEKTsKICAgICBVTlVTRURfUEFSQU0obGluZU51bWJlcik7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0ocmVxdWVzdElkZW50aWZpZXIpOwpAQCAtMTA3LDE4
ICsxMDcsMTggQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZAogI2Vu
ZGlmCiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2Fn
ZVRvQ29uc29sZShXb3JrZXJHbG9iYWxTY29wZSogd29ya2VyR2xvYmFsU2NvcGUsIE1lc3NhZ2VT
b3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgdW5zaWduZWQgbGluZU51
bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2ln
bmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUoV29ya2VyR2xvYmFsU2NvcGUqIHdvcmtlckds
b2JhbFNjb3BlLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2Fn
ZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0
SUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogI2lmIEVO
QUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yV29ya2VyR2xvYmFsU2NvcGUod29ya2Vy
R2xvYmFsU2NvcGUpKQotICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbChpbnN0cnVtZW50
aW5nQWdlbnRzLCBzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBzY3JpcHRJZCwgbGluZU51
bWJlciwgY29sdW1uTnVtYmVyLCBzdGF0ZSwgcmVxdWVzdElkZW50aWZpZXIpOworICAgICAgICBh
ZGRNZXNzYWdlVG9Db25zb2xlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBzb3VyY2UsIHR5cGUs
IGxldmVsLCBtZXNzYWdlLCBzY3JpcHRJRCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzdGF0
ZSwgcmVxdWVzdElkZW50aWZpZXIpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0od29ya2VyR2xv
YmFsU2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzb3VyY2UpOwogICAgIFVOVVNFRF9QQVJBTSh0
eXBlKTsKICAgICBVTlVTRURfUEFSQU0obGV2ZWwpOwogICAgIFVOVVNFRF9QQVJBTShtZXNzYWdl
KTsKLSAgICBVTlVTRURfUEFSQU0oc2NyaXB0SWQpOworICAgIFVOVVNFRF9QQVJBTShzY3JpcHRJ
RCk7CiAgICAgVU5VU0VEX1BBUkFNKGxpbmVOdW1iZXIpOwogICAgIFVOVVNFRF9QQVJBTShjb2x1
bW5OdW1iZXIpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlzaW9uIDE1ODg1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0NzgsNyArMTQ3OCw3IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRP
TTo6RXZlbnRMaXN0ZW4KICAgICBKU0M6OkpTT2JqZWN0KiBoYW5kbGVyID0gbnVsbHB0cjsKICAg
ICBTdHJpbmcgYm9keTsKICAgICBpbnQgbGluZU51bWJlciA9IDA7Ci0gICAgU3RyaW5nIHNjcmlw
dElkOworICAgIFN0cmluZyBzY3JpcHRJRDsKICAgICBTdHJpbmcgc291cmNlTmFtZTsKICAgICBp
ZiAoYXV0byBzY3JpcHRMaXN0ZW5lciA9IEpTRXZlbnRMaXN0ZW5lcjo6Y2FzdChldmVudExpc3Rl
bmVyLmdldCgpKSkgewogICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdExpc3Rl
bmVyLT5pc29sYXRlZFdvcmxkKCkudm0oKSk7CkBAIC0xNDkwLDcgKzE0OTAsNyBAQCBQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpET006OkV2ZW50TGlzdGVuCiAgICAgICAgICAgICAgICAgaWYgKCFm
dW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24oKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoYXV0
byBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5lTnVtYmVyID0gZXhlY3V0YWJsZS0+bGluZU5vKCkgLSAxOwotICAgICAg
ICAgICAgICAgICAgICAgICAgc2NyaXB0SWQgPSBleGVjdXRhYmxlLT5zb3VyY2VJRCgpID09IEpT
Qzo6U291cmNlUHJvdmlkZXI6Om51bGxJRCA/IGVtcHR5U3RyaW5nKCkgOiBTdHJpbmc6Om51bWJl
cihleGVjdXRhYmxlLT5zb3VyY2VJRCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlw
dElEID0gZXhlY3V0YWJsZS0+c291cmNlSUQoKSA9PSBKU0M6OlNvdXJjZVByb3ZpZGVyOjpudWxs
SUQgPyBlbXB0eVN0cmluZygpIDogU3RyaW5nOjpudW1iZXIoZXhlY3V0YWJsZS0+c291cmNlSUQo
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VOYW1lID0gZXhlY3V0YWJsZS0+c291
cmNlVVJMKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0x
NTA5LDkgKzE1MDksOSBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006OkV2ZW50TGlzdGVu
CiAgICAgICAgIGlmICghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICAgICAg
dmFsdWUtPnNldEhhbmRsZXIoaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChTY3JpcHRWYWx1ZShz
dGF0ZS0+dm0oKSwgaGFuZGxlciksICpvYmplY3RHcm91cElkKSk7CiAgICAgfQotICAgIGlmICgh
c2NyaXB0SWQuaXNOdWxsKCkpIHsKKyAgICBpZiAoIXNjcmlwdElELmlzTnVsbCgpKSB7CiAgICAg
ICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9IFR5
cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0
U2NyaXB0SWQoc2NyaXB0SWQpCisgICAgICAgICAgICAuc2V0U2NyaXB0SWQoc2NyaXB0SUQpCiAg
ICAgICAgICAgICAuc2V0TGluZU51bWJlcihsaW5lTnVtYmVyKTsKICAgICAgICAgdmFsdWUtPnNl
dExvY2F0aW9uKGxvY2F0aW9uLnJlbGVhc2UoKSk7CiAgICAgICAgIGlmICghc291cmNlTmFtZS5p
c0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuY3BwCShyZXZpc2lvbiAxNTg4NTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1Niw3ICsyNTYsNyBAQCBzdGF0aWMgYm9vbCBicmVha3BvaW50QWN0aW9uc0Zyb21Qcm90b2Nv
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxVUkwsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0
aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBjb25zdCBvcHRpb25hbENvbHVtbk51bWJlciwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIG9wdGlvbnMsIFR5cGVCdWlsZGVyOjpEZWJ1Z2dl
cjo6QnJlYWtwb2ludElkKiBvdXRCcmVha3BvaW50SWQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJy
YXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBsb2NhdGlvbnMpCit2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJM
LCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJMUmVnZXgsIGNvbnN0IGludCogY29uc3Qg
b3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvcHRp
b25zLCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCogb3V0QnJlYWtwb2ludElk
ZW50aWZpZXIsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2Vy
OjpMb2NhdGlvbj4+JiBsb2NhdGlvbnMpCiB7CiAgICAgbG9jYXRpb25zID0gQXJyYXk8VHlwZUJ1
aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj46OmNyZWF0ZSgpOwogICAgIGlmICghb3B0aW9uYWxV
UkwgPT0gIW9wdGlvbmFsVVJMUmVnZXgpIHsKQEAgLTI2OCw4ICsyNjgsOCBAQCB2b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pCiAgICAgaW50IGNvbHVtbk51bWJlciA9IG9w
dGlvbmFsQ29sdW1uTnVtYmVyID8gKm9wdGlvbmFsQ29sdW1uTnVtYmVyIDogMDsKICAgICBib29s
IGlzUmVnZXggPSBvcHRpb25hbFVSTFJlZ2V4OwogCi0gICAgU3RyaW5nIGJyZWFrcG9pbnRJZCA9
IChpc1JlZ2V4ID8gIi8iICsgdXJsICsgIi8iIDogdXJsKSArICc6JyArIFN0cmluZzo6bnVtYmVy
KGxpbmVOdW1iZXIpICsgJzonICsgU3RyaW5nOjpudW1iZXIoY29sdW1uTnVtYmVyKTsKLSAgICBp
ZiAobV9qYXZhU2NyaXB0QnJlYWtwb2ludHMuY29udGFpbnMoYnJlYWtwb2ludElkKSkgeworICAg
IFN0cmluZyBicmVha3BvaW50SWRlbnRpZmllciA9IChpc1JlZ2V4ID8gIi8iICsgdXJsICsgIi8i
IDogdXJsKSArICc6JyArIFN0cmluZzo6bnVtYmVyKGxpbmVOdW1iZXIpICsgJzonICsgU3RyaW5n
OjpudW1iZXIoY29sdW1uTnVtYmVyKTsKKyAgICBpZiAobV9qYXZhU2NyaXB0QnJlYWtwb2ludHMu
Y29udGFpbnMoYnJlYWtwb2ludElkZW50aWZpZXIpKSB7CiAgICAgICAgICplcnJvclN0cmluZyA9
ICJCcmVha3BvaW50IGF0IHNwZWNpZmllZCBsb2NhdGlvbiBhbHJlYWR5IGV4aXN0cy4iOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMjg3LDcgKzI4Nyw3IEBAIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6c2V0QnJlYWtwb2kKICAgICBpZiAoIWJyZWFrcG9pbnRBY3Rpb25zRnJvbVBy
b3RvY29sKGVycm9yU3RyaW5nLCBhY3Rpb25zLCAmYnJlYWtwb2ludEFjdGlvbnMpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX2phdmFTY3JpcHRCcmVha3BvaW50cy5zZXQoYnJlYWtwb2ludElk
LCBidWlsZE9iamVjdEZvckJyZWFrcG9pbnRDb29raWUodXJsLCBsaW5lTnVtYmVyLCBjb2x1bW5O
dW1iZXIsIGNvbmRpdGlvbiwgYWN0aW9ucywgaXNSZWdleCwgYXV0b0NvbnRpbnVlKSk7CisgICAg
bV9qYXZhU2NyaXB0QnJlYWtwb2ludHMuc2V0KGJyZWFrcG9pbnRJZGVudGlmaWVyLCBidWlsZE9i
amVjdEZvckJyZWFrcG9pbnRDb29raWUodXJsLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNv
bmRpdGlvbiwgYWN0aW9ucywgaXNSZWdleCwgYXV0b0NvbnRpbnVlKSk7CiAKICAgICBTY3JpcHRC
cmVha3BvaW50IGJyZWFrcG9pbnQobGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjb25kaXRpb24s
IGJyZWFrcG9pbnRBY3Rpb25zLCBhdXRvQ29udGludWUpOwogICAgIGZvciAoU2NyaXB0c01hcDo6
aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuYmVnaW4oKTsgaXQgIT0gbV9zY3JpcHRzLmVuZCgpOyAr
K2l0KSB7CkBAIC0yOTUsMTYgKzI5NSwxNiBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnNldEJyZWFrcG9pCiAgICAgICAgIGlmICghbWF0Y2hlcyhzY3JpcHRVUkwsIHVybCwgaXNSZWdl
eCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6
OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChicmVha3Bv
aW50SWQsIGl0LT5rZXksIGJyZWFrcG9pbnQpOworICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6
OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChicmVha3Bv
aW50SWRlbnRpZmllciwgaXQtPmtleSwgYnJlYWtwb2ludCk7CiAgICAgICAgIGlmIChsb2NhdGlv
bikKICAgICAgICAgICAgIGxvY2F0aW9ucy0+YWRkSXRlbShsb2NhdGlvbik7CiAgICAgfQotICAg
ICpvdXRCcmVha3BvaW50SWQgPSBicmVha3BvaW50SWQ7CisgICAgKm91dEJyZWFrcG9pbnRJZGVu
dGlmaWVyID0gYnJlYWtwb2ludElkZW50aWZpZXI7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlTG9j
YXRpb24oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBs
b2NhdGlvbiwgU3RyaW5nKiBzY3JpcHRJZCwgaW50KiBsaW5lTnVtYmVyLCBpbnQqIGNvbHVtbk51
bWJlcikKK3N0YXRpYyBib29sIHBhcnNlTG9jYXRpb24oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2NhdGlvbiwgU3RyaW5nKiBzY3JpcHRJRCwgaW50
KiBsaW5lTnVtYmVyLCBpbnQqIGNvbHVtbk51bWJlcikKIHsKLSAgICBpZiAoIWxvY2F0aW9uLT5n
ZXRTdHJpbmcoInNjcmlwdElkIiwgc2NyaXB0SWQpIHx8ICFsb2NhdGlvbi0+Z2V0TnVtYmVyKCJs
aW5lTnVtYmVyIiwgbGluZU51bWJlcikpIHsKKyAgICBpZiAoIWxvY2F0aW9uLT5nZXRTdHJpbmco
InNjcmlwdElkIiwgc2NyaXB0SUQpIHx8ICFsb2NhdGlvbi0+Z2V0TnVtYmVyKCJsaW5lTnVtYmVy
IiwgbGluZU51bWJlcikpIHsKICAgICAgICAgLy8gRklYTUU6IHJlcGxhY2Ugd2l0aCBpbnB1dCB2
YWxpZGF0aW9uLgogICAgICAgICAqZXJyb3JTdHJpbmcgPSAic2NyaXB0SWQgYW5kIGxpbmVOdW1i
ZXIgYXJlIHJlcXVpcmVkLiI7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMxNCwxMyArMzE0
LDEzIEBAIHN0YXRpYyBib29sIHBhcnNlTG9jYXRpb24oRXJyb3JTdHJpbmcqIGUKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
IGxvY2F0aW9uLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3B0aW9ucywgVHlwZUJ1
aWxkZXI6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZCwgUmVmUHRyPFR5
cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBhY3R1YWxMb2NhdGlvbikKK3ZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChFcnJvclN0cmluZyogZXJyb3JTdHJp
bmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlvbiwgY29uc3QgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4qIG9wdGlvbnMsIFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6QnJlYWtw
b2ludElkKiBvdXRCcmVha3BvaW50SWRlbnRpZmllciwgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1
Z2dlcjo6TG9jYXRpb24+JiBhY3R1YWxMb2NhdGlvbikKIHsKLSAgICBTdHJpbmcgc2NyaXB0SWQ7
CisgICAgU3RyaW5nIHNjcmlwdElEOwogICAgIGludCBsaW5lTnVtYmVyOwogICAgIGludCBjb2x1
bW5OdW1iZXI7CiAKLSAgICBpZiAoIXBhcnNlTG9jYXRpb24oZXJyb3JTdHJpbmcsIGxvY2F0aW9u
LCAmc2NyaXB0SWQsICZsaW5lTnVtYmVyLCAmY29sdW1uTnVtYmVyKSkKKyAgICBpZiAoIXBhcnNl
TG9jYXRpb24oZXJyb3JTdHJpbmcsIGxvY2F0aW9uLCAmc2NyaXB0SUQsICZsaW5lTnVtYmVyLCAm
Y29sdW1uTnVtYmVyKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGNvbmRpdGlvbiA9
IGVtcHR5U3RyaW5nKCk7CkBAIC0zMzYsNTMgKzMzNiw1MyBAQCB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OnNldEJyZWFrcG9pCiAgICAgaWYgKCFicmVha3BvaW50QWN0aW9uc0Zyb21Qcm90
b2NvbChlcnJvclN0cmluZywgYWN0aW9ucywgJmJyZWFrcG9pbnRBY3Rpb25zKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgU3RyaW5nIGJyZWFrcG9pbnRJZCA9IHNjcmlwdElkICsgJzonICsgU3Ry
aW5nOjpudW1iZXIobGluZU51bWJlcikgKyAnOicgKyBTdHJpbmc6Om51bWJlcihjb2x1bW5OdW1i
ZXIpOwotICAgIGlmIChtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmZp
bmQoYnJlYWtwb2ludElkKSAhPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50
SWRzLmVuZCgpKSB7CisgICAgU3RyaW5nIGJyZWFrcG9pbnRJZGVudGlmaWVyID0gc2NyaXB0SUQg
KyAnOicgKyBTdHJpbmc6Om51bWJlcihsaW5lTnVtYmVyKSArICc6JyArIFN0cmluZzo6bnVtYmVy
KGNvbHVtbk51bWJlcik7CisgICAgaWYgKG1fYnJlYWtwb2ludElkZW50aWZpZXJUb0RlYnVnU2Vy
dmVyQnJlYWtwb2ludElEcy5maW5kKGJyZWFrcG9pbnRJZGVudGlmaWVyKSAhPSBtX2JyZWFrcG9p
bnRJZGVudGlmaWVyVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHMuZW5kKCkpIHsKICAgICAgICAg
KmVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgYXQgc3BlY2lmaWVkIGxvY2F0aW9uIGFscmVhZHkg
ZXhpc3RzLiI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgU2NyaXB0QnJlYWtwb2ludCBi
cmVha3BvaW50KGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgY29uZGl0aW9uLCBicmVha3BvaW50
QWN0aW9ucywgYXV0b0NvbnRpbnVlKTsKLSAgICBhY3R1YWxMb2NhdGlvbiA9IHJlc29sdmVCcmVh
a3BvaW50KGJyZWFrcG9pbnRJZCwgc2NyaXB0SWQsIGJyZWFrcG9pbnQpOworICAgIGFjdHVhbExv
Y2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkZW50aWZpZXIsIHNjcmlwdElE
LCBicmVha3BvaW50KTsKICAgICBpZiAoYWN0dWFsTG9jYXRpb24pCi0gICAgICAgICpvdXRCcmVh
a3BvaW50SWQgPSBicmVha3BvaW50SWQ7CisgICAgICAgICpvdXRCcmVha3BvaW50SWRlbnRpZmll
ciA9IGJyZWFrcG9pbnRJZGVudGlmaWVyOwogICAgIGVsc2UKICAgICAgICAgKmVycm9yU3RyaW5n
ID0gIkNvdWxkIG5vdCByZXNvbHZlIGJyZWFrcG9pbnQiOwogfQogCi12b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcm
IGJyZWFrcG9pbnRJZCkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtw
b2ludChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkZW50aWZpZXIpCiB7
Ci0gICAgbV9qYXZhU2NyaXB0QnJlYWtwb2ludHMucmVtb3ZlKGJyZWFrcG9pbnRJZCk7CisgICAg
bV9qYXZhU2NyaXB0QnJlYWtwb2ludHMucmVtb3ZlKGJyZWFrcG9pbnRJZGVudGlmaWVyKTsKIAot
ICAgIEJyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzTWFwOjppdGVyYXRvciBk
ZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1Nl
cnZlckJyZWFrcG9pbnRJZHMuZmluZChicmVha3BvaW50SWQpOwotICAgIGlmIChkZWJ1Z1NlcnZl
ckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9PSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVh
a3BvaW50SWRzLmVuZCgpKQorICAgIEJyZWFrcG9pbnRJZGVudGlmaWVyVG9EZWJ1Z1NlcnZlckJy
ZWFrcG9pbnRJRHNNYXA6Oml0ZXJhdG9yIGRlYnVnU2VydmVyQnJlYWtwb2ludElEc0l0ZXJhdG9y
ID0gbV9icmVha3BvaW50SWRlbnRpZmllclRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SURzLmZpbmQo
YnJlYWtwb2ludElkZW50aWZpZXIpOworICAgIGlmIChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHNJ
dGVyYXRvciA9PSBtX2JyZWFrcG9pbnRJZGVudGlmaWVyVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJ
RHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRl
YnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT52YWx1ZS5zaXplKCk7ICsraSkKLSAgICAg
ICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5yZW1vdmVCcmVha3BvaW50KGRlYnVnU2VydmVyQnJlYWtw
b2ludElkc0l0ZXJhdG9yLT52YWx1ZVtpXSk7Ci0gICAgbV9icmVha3BvaW50SWRUb0RlYnVnU2Vy
dmVyQnJlYWtwb2ludElkcy5yZW1vdmUoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3Ip
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVidWdTZXJ2ZXJCcmVha3BvaW50SURzSXRl
cmF0b3ItPnZhbHVlLnNpemUoKTsgKytpKQorICAgICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLnJl
bW92ZUJyZWFrcG9pbnQoZGVidWdTZXJ2ZXJCcmVha3BvaW50SURzSXRlcmF0b3ItPnZhbHVlW2ld
KTsKKyAgICBtX2JyZWFrcG9pbnRJZGVudGlmaWVyVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHMu
cmVtb3ZlKGRlYnVnU2VydmVyQnJlYWtwb2ludElEc0l0ZXJhdG9yKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcqIGVycm9y
U3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbG9jYXRpb24pCiB7Ci0gICAg
aWYgKCFtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJZC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5yZW1vdmVCcmVha3BvaW50KG1fY29udGludWVUb0xvY2F0
aW9uQnJlYWtwb2ludElkKTsKLSAgICAgICAgbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50
SWQgPSAiIjsKKyAgICBpZiAoIW1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElELmlzRW1w
dHkoKSkgeworICAgICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLnJlbW92ZUJyZWFrcG9pbnQobV9j
b250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SUQpOworICAgICAgICBtX2NvbnRpbnVlVG9Mb2Nh
dGlvbkJyZWFrcG9pbnRJRCA9ICIiOwogICAgIH0KIAotICAgIFN0cmluZyBzY3JpcHRJZDsKKyAg
ICBTdHJpbmcgc2NyaXB0SUQ7CiAgICAgaW50IGxpbmVOdW1iZXI7CiAgICAgaW50IGNvbHVtbk51
bWJlcjsKIAotICAgIGlmICghcGFyc2VMb2NhdGlvbihlcnJvclN0cmluZywgbG9jYXRpb24sICZz
Y3JpcHRJZCwgJmxpbmVOdW1iZXIsICZjb2x1bW5OdW1iZXIpKQorICAgIGlmICghcGFyc2VMb2Nh
dGlvbihlcnJvclN0cmluZywgbG9jYXRpb24sICZzY3JpcHRJRCwgJmxpbmVOdW1iZXIsICZjb2x1
bW5OdW1iZXIpKQogICAgICAgICByZXR1cm47CiAKICAgICBTY3JpcHRCcmVha3BvaW50IGJyZWFr
cG9pbnQobGluZU51bWJlciwgY29sdW1uTnVtYmVyLCAiIiwgZmFsc2UpOwotICAgIG1fY29udGlu
dWVUb0xvY2F0aW9uQnJlYWtwb2ludElkID0gc2NyaXB0RGVidWdTZXJ2ZXIoKS5zZXRCcmVha3Bv
aW50KHNjcmlwdElkLCBicmVha3BvaW50LCAmbGluZU51bWJlciwgJmNvbHVtbk51bWJlcik7Cisg
ICAgbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SUQgPSBzY3JpcHREZWJ1Z1NlcnZlcigp
LnNldEJyZWFrcG9pbnQoc2NyaXB0SUQsIGJyZWFrcG9pbnQsICZsaW5lTnVtYmVyLCAmY29sdW1u
TnVtYmVyKTsKICAgICByZXN1bWUoZXJyb3JTdHJpbmcpOwogfQogCi1QYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29s
dmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkLCBjb25zdCBTdHJpbmcmIHNj
cmlwdElkLCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiBicmVha3BvaW50KQorUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpy
ZXNvbHZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIHNjcmlwdElELCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiBicmVha3BvaW50KQog
ewotICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIHNjcmlwdEl0ZXJhdG9yID0gbV9zY3JpcHRzLmZp
bmQoc2NyaXB0SWQpOworICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIHNjcmlwdEl0ZXJhdG9yID0g
bV9zY3JpcHRzLmZpbmQoc2NyaXB0SUQpOwogICAgIGlmIChzY3JpcHRJdGVyYXRvciA9PSBtX3Nj
cmlwdHMuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIFNjcmlwdCYgc2NyaXB0ID0gc2Ny
aXB0SXRlcmF0b3ItPnZhbHVlOwpAQCAtMzkxLDE3ICszOTEsMTcgQEAgUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aQogCiAgICAgaW50IGFjdHVhbExpbmVOdW1iZXI7CiAg
ICAgaW50IGFjdHVhbENvbHVtbk51bWJlcjsKLSAgICBTdHJpbmcgZGVidWdTZXJ2ZXJCcmVha3Bv
aW50SWQgPSBzY3JpcHREZWJ1Z1NlcnZlcigpLnNldEJyZWFrcG9pbnQoc2NyaXB0SWQsIGJyZWFr
cG9pbnQsICZhY3R1YWxMaW5lTnVtYmVyLCAmYWN0dWFsQ29sdW1uTnVtYmVyKTsKLSAgICBpZiAo
ZGVidWdTZXJ2ZXJCcmVha3BvaW50SWQuaXNFbXB0eSgpKQorICAgIFN0cmluZyBkZWJ1Z1NlcnZl
ckJyZWFrcG9pbnRJRCA9IHNjcmlwdERlYnVnU2VydmVyKCkuc2V0QnJlYWtwb2ludChzY3JpcHRJ
RCwgYnJlYWtwb2ludCwgJmFjdHVhbExpbmVOdW1iZXIsICZhY3R1YWxDb2x1bW5OdW1iZXIpOwor
ICAgIGlmIChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNNYXA6Oml0
ZXJhdG9yIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID0gbV9icmVha3BvaW50SWRU
b0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5maW5kKGJyZWFrcG9pbnRJZCk7Ci0gICAgaWYgKGRl
YnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID09IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1Nl
cnZlckJyZWFrcG9pbnRJZHMuZW5kKCkpCi0gICAgICAgIGRlYnVnU2VydmVyQnJlYWtwb2ludElk
c0l0ZXJhdG9yID0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5zZXQo
YnJlYWtwb2ludElkLCBWZWN0b3I8U3RyaW5nPigpKS5pdGVyYXRvcjsKLSAgICBkZWJ1Z1NlcnZl
ckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+dmFsdWUuYXBwZW5kKGRlYnVnU2VydmVyQnJlYWtwb2lu
dElkKTsKKyAgICBCcmVha3BvaW50SWRlbnRpZmllclRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SURz
TWFwOjppdGVyYXRvciBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHNJdGVyYXRvciA9IG1fYnJlYWtw
b2ludElkZW50aWZpZXJUb0RlYnVnU2VydmVyQnJlYWtwb2ludElEcy5maW5kKGJyZWFrcG9pbnRJ
ZGVudGlmaWVyKTsKKyAgICBpZiAoZGVidWdTZXJ2ZXJCcmVha3BvaW50SURzSXRlcmF0b3IgPT0g
bV9icmVha3BvaW50SWRlbnRpZmllclRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SURzLmVuZCgpKQor
ICAgICAgICBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHNJdGVyYXRvciA9IG1fYnJlYWtwb2ludElk
ZW50aWZpZXJUb0RlYnVnU2VydmVyQnJlYWtwb2ludElEcy5zZXQoYnJlYWtwb2ludElkZW50aWZp
ZXIsIFZlY3RvcjxTdHJpbmc+KCkpLml0ZXJhdG9yOworICAgIGRlYnVnU2VydmVyQnJlYWtwb2lu
dElEc0l0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZGVidWdTZXJ2ZXJCcmVha3BvaW50SUQpOwogCiAg
ICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGxvY2F0aW9uID0gVHlw
ZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbjo6Y3JlYXRlKCkKLSAgICAgICAgLnNldFNjcmlw
dElkKHNjcmlwdElkKQorICAgICAgICAuc2V0U2NyaXB0SWQoc2NyaXB0SUQpCiAgICAgICAgIC5z
ZXRMaW5lTnVtYmVyKGFjdHVhbExpbmVOdW1iZXIpOwogICAgIGxvY2F0aW9uLT5zZXRDb2x1bW5O
dW1iZXIoYWN0dWFsQ29sdW1uTnVtYmVyKTsKICAgICByZXR1cm4gbG9jYXRpb247CkBAIC00MTcs
MjMgKzQxNywyMyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNjcmlwCiAg
ICAgcmV0dXJuIHZhbHVlLT5hc09iamVjdCgpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnNlYXJjaEluQ29udGVudChFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYg
c2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFs
Q2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8
QXJyYXk8V2ViQ29yZTo6VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaE1hdGNoPj4mIHJlc3VsdHMp
Cit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudChFcnJvclN0cmlu
ZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNv
bnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogY29uc3Qg
b3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8QXJyYXk8V2ViQ29yZTo6VHlwZUJ1aWxkZXI6OlBhZ2U6
OlNlYXJjaE1hdGNoPj4mIHJlc3VsdHMpCiB7CiAgICAgYm9vbCBpc1JlZ2V4ID0gb3B0aW9uYWxJ
c1JlZ2V4ID8gKm9wdGlvbmFsSXNSZWdleCA6IGZhbHNlOwogICAgIGJvb2wgY2FzZVNlbnNpdGl2
ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA/ICpvcHRpb25hbENhc2VTZW5zaXRpdmUgOiBmYWxz
ZTsKIAotICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0
SWQpOworICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0
SUQpOwogICAgIGlmIChpdCAhPSBtX3NjcmlwdHMuZW5kKCkpCiAgICAgICAgIHJlc3VsdHMgPSBD
b250ZW50U2VhcmNoVXRpbHM6OnNlYXJjaEluVGV4dEJ5TGluZXMoaXQtPnZhbHVlLnNvdXJjZSwg
cXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOwogICAgIGVsc2UKLSAgICAgICAgKmVycm9y
ID0gIk5vIHNjcmlwdCBmb3IgaWQ6ICIgKyBzY3JpcHRJZDsKKyAgICAgICAgKmVycm9yID0gIk5v
IHNjcmlwdCBmb3IgaWQ6ICIgKyBzY3JpcHRJRDsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpzZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcm
IHNjcmlwdElkLCBjb25zdCBTdHJpbmcmIG5ld0NvbnRlbnQsIGNvbnN0IGJvb2wqIGNvbnN0IHBy
ZXZpZXcsIFJlZlB0cjxBcnJheTxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkNhbGxGcmFtZT4+JiBu
ZXdDYWxsRnJhbWVzLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KQordm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqIGVycm9yLCBj
b25zdCBTdHJpbmcmIHNjcmlwdElELCBjb25zdCBTdHJpbmcmIG5ld0NvbnRlbnQsIGNvbnN0IGJv
b2wqIGNvbnN0IHByZXZpZXcsIFJlZlB0cjxBcnJheTxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkNh
bGxGcmFtZT4+JiBuZXdDYWxsRnJhbWVzLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0
KQogewogICAgIGJvb2wgcHJldmlld09ubHkgPSBwcmV2aWV3ICYmICpwcmV2aWV3OwogICAgIFNj
cmlwdE9iamVjdCByZXN1bHRPYmplY3Q7Ci0gICAgaWYgKCFzY3JpcHREZWJ1Z1NlcnZlcigpLnNl
dFNjcmlwdFNvdXJjZShzY3JpcHRJZCwgbmV3Q29udGVudCwgcHJldmlld09ubHksIGVycm9yLCAm
bV9jdXJyZW50Q2FsbFN0YWNrLCAmcmVzdWx0T2JqZWN0KSkKKyAgICBpZiAoIXNjcmlwdERlYnVn
U2VydmVyKCkuc2V0U2NyaXB0U291cmNlKHNjcmlwdElELCBuZXdDb250ZW50LCBwcmV2aWV3T25s
eSwgZXJyb3IsICZtX2N1cnJlbnRDYWxsU3RhY2ssICZyZXN1bHRPYmplY3QpKQogICAgICAgICBy
ZXR1cm47CiAgICAgbmV3Q2FsbEZyYW1lcyA9IGN1cnJlbnRDYWxsRnJhbWVzKCk7CiAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0gc2NyaXB0VG9JbnNwZWN0b3JPYmplY3QocmVz
dWx0T2JqZWN0KTsKQEAgLTQ0MSwxMyArNDQxLDEzIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6c2V0U2NyaXB0U28KICAgICAgICAgcmVzdWx0ID0gb2JqZWN0OwogfQogCi12b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyogZXJyb3Is
IGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIFN0cmluZyogc2NyaXB0U291cmNlKQordm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqIGVycm9yLCBj
b25zdCBTdHJpbmcmIHNjcmlwdElELCBTdHJpbmcqIHNjcmlwdFNvdXJjZSkKIHsKLSAgICBTY3Jp
cHRzTWFwOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkKTsKKyAgICBTY3Jp
cHRzTWFwOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElEKTsKICAgICBpZiAo
aXQgIT0gbV9zY3JpcHRzLmVuZCgpKQogICAgICAgICAqc2NyaXB0U291cmNlID0gaXQtPnZhbHVl
LnNvdXJjZTsKICAgICBlbHNlCi0gICAgICAgICplcnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAi
ICsgc2NyaXB0SWQ7CisgICAgICAgICplcnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2Ny
aXB0SUQ7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0RnVuY3Rpb25EZXRh
aWxzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiBkZXRhaWxzKQpA
QCAtNTY2LDcgKzU2Niw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVP
bkMKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29tcGlsZVNjcmlw
dChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwsIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U2NyaXB0SWQ+KiBz
Y3JpcHRJZCwgVHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBzeW50YXhFcnJvck1lc3Nh
Z2UpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbXBpbGVTY3JpcHQoRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYg
c291cmNlVVJMLCBUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFNjcmlwdElkPiogc2NyaXB0SUQsIFR5
cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogc3ludGF4RXJyb3JNZXNzYWdlKQogewogICAg
IEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVy
cm9yU3RyaW5nLCAwKTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7CkBA
IC01NzQsMTggKzU3NCwxOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbXBpbGVT
Y3JpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTdHJpbmcgc2NyaXB0SWRWYWx1ZTsK
KyAgICBTdHJpbmcgc2NyaXB0SURWYWx1ZTsKICAgICBTdHJpbmcgZXhjZXB0aW9uTWVzc2FnZTsK
LSAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLmNvbXBpbGVTY3JpcHQoaW5qZWN0ZWRTY3JpcHQuc2Ny
aXB0U3RhdGUoKSwgZXhwcmVzc2lvbiwgc291cmNlVVJMLCAmc2NyaXB0SWRWYWx1ZSwgJmV4Y2Vw
dGlvbk1lc3NhZ2UpOwotICAgIGlmICghc2NyaXB0SWRWYWx1ZSAmJiAhZXhjZXB0aW9uTWVzc2Fn
ZSkgeworICAgIHNjcmlwdERlYnVnU2VydmVyKCkuY29tcGlsZVNjcmlwdChpbmplY3RlZFNjcmlw
dC5zY3JpcHRTdGF0ZSgpLCBleHByZXNzaW9uLCBzb3VyY2VVUkwsICZzY3JpcHRJRFZhbHVlLCAm
ZXhjZXB0aW9uTWVzc2FnZSk7CisgICAgaWYgKCFzY3JpcHRJRFZhbHVlICYmICFleGNlcHRpb25N
ZXNzYWdlKSB7CiAgICAgICAgICplcnJvclN0cmluZyA9ICJTY3JpcHQgY29tcGlsYXRpb24gZmFp
bGVkIjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAqc3ludGF4RXJyb3JNZXNzYWdlID0g
ZXhjZXB0aW9uTWVzc2FnZTsKLSAgICAqc2NyaXB0SWQgPSBzY3JpcHRJZFZhbHVlOworICAgICpz
Y3JpcHRJRCA9IHNjcmlwdElEVmFsdWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6cnVuU2NyaXB0KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU2NyaXB0SWQmIHNj
cmlwdElkLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgY29uc3QgU3RyaW5nKiBjb25z
dCBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogY29uc3QgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0Fu
ZE11dGVDb25zb2xlLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4m
IHJlc3VsdCwgVHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKQordm9pZCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpydW5TY3JpcHQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
LCBjb25zdCBTY3JpcHRJZCYgc2NyaXB0SUQsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElk
LCBjb25zdCBTdHJpbmcqIGNvbnN0IG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBjb25zdCBkb05v
dFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIFJlZlB0cjxUeXBlQnVpbGRlcjo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGJvb2w+
KiB3YXNUaHJvd24pCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmpl
Y3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIGV4ZWN1dGlvbkNvbnRleHRJZCk7CiAgICAg
aWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewpAQCAtNjAzLDcgKzYwMyw3IEBAIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cnVuU2NyaXB0KEUKICAgICBTY3JpcHRWYWx1ZSB2
YWx1ZTsKICAgICBib29sIHdhc1Rocm93blZhbHVlOwogICAgIFN0cmluZyBleGNlcHRpb25NZXNz
YWdlOwotICAgIHNjcmlwdERlYnVnU2VydmVyKCkucnVuU2NyaXB0KGluamVjdGVkU2NyaXB0LnNj
cmlwdFN0YXRlKCksIHNjcmlwdElkLCAmdmFsdWUsICZ3YXNUaHJvd25WYWx1ZSwgJmV4Y2VwdGlv
bk1lc3NhZ2UpOworICAgIHNjcmlwdERlYnVnU2VydmVyKCkucnVuU2NyaXB0KGluamVjdGVkU2Ny
aXB0LnNjcmlwdFN0YXRlKCksIHNjcmlwdElELCAmdmFsdWUsICZ3YXNUaHJvd25WYWx1ZSwgJmV4
Y2VwdGlvbk1lc3NhZ2UpOwogICAgICp3YXNUaHJvd24gPSB3YXNUaHJvd25WYWx1ZTsKICAgICBp
ZiAodmFsdWUuaGFzTm9WYWx1ZSgpKSB7CiAgICAgICAgICplcnJvclN0cmluZyA9ICJTY3JpcHQg
ZXhlY3V0aW9uIGZhaWxlZCI7CkBAIC02NzAsNyArNjcwLDcgQEAgU3RyaW5nIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnNvdXJjZU1hcAogCiAvLyBKYXZhU2NyaXB0RGVidWdMaXN0ZW5lciBmdW5j
dGlvbnMKIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShjb25z
dCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTY3JpcHQmIGluU2NyaXB0KQordm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNjcmlwdElELCBj
b25zdCBTY3JpcHQmIGluU2NyaXB0KQogewogICAgIFNjcmlwdCBzY3JpcHQgPSBpblNjcmlwdDsK
ICAgICBpZiAoIXNjcmlwdC5zdGFydExpbmUgJiYgIXNjcmlwdC5zdGFydENvbHVtbikKQEAgLTY4
Miw5ICs2ODIsOSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291CiAg
ICAgYm9vbCogaGFzU291cmNlVVJMUGFyYW0gPSBoYXNTb3VyY2VVUkwgPyAmaGFzU291cmNlVVJM
IDogMDsKICAgICBTdHJpbmcqIHNvdXJjZU1hcFVSTFBhcmFtID0gc2NyaXB0LnNvdXJjZU1hcHBp
bmdVUkwuaXNOdWxsKCkgPyAwIDogJnNjcmlwdC5zb3VyY2VNYXBwaW5nVVJMOwogICAgIGNvbnN0
IGJvb2wqIGlzQ29udGVudFNjcmlwdCA9IHNjcmlwdC5pc0NvbnRlbnRTY3JpcHQgPyAmc2NyaXB0
LmlzQ29udGVudFNjcmlwdCA6IDA7Ci0gICAgbV9mcm9udGVuZC0+c2NyaXB0UGFyc2VkKHNjcmlw
dElkLCBzY3JpcHRVUkwsIHNjcmlwdC5zdGFydExpbmUsIHNjcmlwdC5zdGFydENvbHVtbiwgc2Ny
aXB0LmVuZExpbmUsIHNjcmlwdC5lbmRDb2x1bW4sIGlzQ29udGVudFNjcmlwdCwgc291cmNlTWFw
VVJMUGFyYW0sIGhhc1NvdXJjZVVSTFBhcmFtKTsKKyAgICBtX2Zyb250ZW5kLT5zY3JpcHRQYXJz
ZWQoc2NyaXB0SUQsIHNjcmlwdFVSTCwgc2NyaXB0LnN0YXJ0TGluZSwgc2NyaXB0LnN0YXJ0Q29s
dW1uLCBzY3JpcHQuZW5kTGluZSwgc2NyaXB0LmVuZENvbHVtbiwgaXNDb250ZW50U2NyaXB0LCBz
b3VyY2VNYXBVUkxQYXJhbSwgaGFzU291cmNlVVJMUGFyYW0pOwogCi0gICAgbV9zY3JpcHRzLnNl
dChzY3JpcHRJZCwgc2NyaXB0KTsKKyAgICBtX3NjcmlwdHMuc2V0KHNjcmlwdElELCBzY3JpcHQp
OwogCiAgICAgaWYgKHNjcmlwdFVSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTcw
OSw3ICs3MDksNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291CiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxUeXBlQnVp
bGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGl0
LT5rZXksIHNjcmlwdElkLCBicmVha3BvaW50KTsKKyAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVy
OjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGxvY2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoaXQtPmtl
eSwgc2NyaXB0SUQsIGJyZWFrcG9pbnQpOwogICAgICAgICBpZiAobG9jYXRpb24pCiAgICAgICAg
ICAgICBtX2Zyb250ZW5kLT5icmVha3BvaW50UmVzb2x2ZWQoaXQtPmtleSwgbG9jYXRpb24pOwog
ICAgIH0KQEAgLTczOCw5ICs3MzgsOSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRp
ZFBhdXNlKEpTCiAgICAgbV9mcm9udGVuZC0+cGF1c2VkKGN1cnJlbnRDYWxsRnJhbWVzKCksIG1f
YnJlYWtSZWFzb24sIG1fYnJlYWtBdXhEYXRhKTsKICAgICBtX2phdmFTY3JpcHRQYXVzZVNjaGVk
dWxlZCA9IGZhbHNlOwogCi0gICAgaWYgKCFtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJ
ZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5yZW1vdmVCcmVha3Bv
aW50KG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElkKTsKLSAgICAgICAgbV9jb250aW51
ZVRvTG9jYXRpb25CcmVha3BvaW50SWQgPSAiIjsKKyAgICBpZiAoIW1fY29udGludWVUb0xvY2F0
aW9uQnJlYWtwb2ludElELmlzRW1wdHkoKSkgeworICAgICAgICBzY3JpcHREZWJ1Z1NlcnZlcigp
LnJlbW92ZUJyZWFrcG9pbnQobV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SUQpOworICAg
ICAgICBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRCA9ICIiOwogICAgIH0KICAgICBp
ZiAobV9saXN0ZW5lcikKICAgICAgICAgbV9saXN0ZW5lci0+ZGlkUGF1c2UoKTsKQEAgLTc2Niw4
ICs3NjYsOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNsZWFyKCkKICAgICBtX3Bh
dXNlZFNjcmlwdFN0YXRlID0gMDsKICAgICBtX2N1cnJlbnRDYWxsU3RhY2sgPSBTY3JpcHRWYWx1
ZSgpOwogICAgIG1fc2NyaXB0cy5jbGVhcigpOwotICAgIG1fYnJlYWtwb2ludElkVG9EZWJ1Z1Nl
cnZlckJyZWFrcG9pbnRJZHMuY2xlYXIoKTsKLSAgICBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFr
cG9pbnRJZCA9IFN0cmluZygpOworICAgIG1fYnJlYWtwb2ludElkZW50aWZpZXJUb0RlYnVnU2Vy
dmVyQnJlYWtwb2ludElEcy5jbGVhcigpOworICAgIG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtw
b2ludElEID0gU3RyaW5nKCk7CiAgICAgY2xlYXJCcmVha0RldGFpbHMoKTsKICAgICBtX2phdmFT
Y3JpcHRQYXVzZVNjaGVkdWxlZCA9IGZhbHNlOwogICAgIEVycm9yU3RyaW5nIGVycm9yOwpAQCAt
NzkzLDcgKzc5Myw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzZXQoKQogewog
ICAgIHNjcmlwdERlYnVnU2VydmVyKCkuY2xlYXJCcmVha3BvaW50cygpOwogICAgIG1fc2NyaXB0
cy5jbGVhcigpOwotICAgIG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMu
Y2xlYXIoKTsKKyAgICBtX2JyZWFrcG9pbnRJZGVudGlmaWVyVG9EZWJ1Z1NlcnZlckJyZWFrcG9p
bnRJRHMuY2xlYXIoKTsKICAgICBpZiAobV9mcm9udGVuZCkKICAgICAgICAgbV9mcm9udGVuZC0+
Z2xvYmFsT2JqZWN0Q2xlYXJlZCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCShyZXZpc2lvbiAxNTg4NTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC04NCwxMiArODQsMTIgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNl
dEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyosIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcqIG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMUmVnZXgsIGNvbnN0IGlu
dCogb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBv
cHRpb25zLCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCosIFJlZlB0cjxUeXBl
QnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBsb2NhdGlv
bnMpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nKiwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGxvY2F0aW9uLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0Piogb3B0aW9ucywgVHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqLCBS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4mIGFjdHVhbExvY2F0aW9uKTsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyosIGNvbnN0IFN0
cmluZyYgYnJlYWtwb2ludElkKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChF
cnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkZW50aWZpZXIpOwogICAgIHZp
cnR1YWwgdm9pZCBjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYgbG9jYXRpb24pOwogCi0gICAgdmlydHVhbCB2b2lkIHNlYXJjaElu
Q29udGVudChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0cmlu
ZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCog
b3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQ
YWdlOjpTZWFyY2hNYXRjaD4+Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcmlwdFNvdXJjZShF
cnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgbmV3Q29u
dGVudCwgY29uc3QgYm9vbCogcHJldmlldywgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBl
QnVpbGRlcjo6RGVidWdnZXI6OkNhbGxGcmFtZT4+JiBuZXdDYWxsRnJhbWVzLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYgcmVzdWx0KTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0U2NyaXB0U291cmNl
KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgU3RyaW5nKiBzY3JpcHRTb3Vy
Y2UpOworICAgIHZpcnR1YWwgdm9pZCBzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcqLCBjb25z
dCBTdHJpbmcmIHNjcmlwdElELCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBvcHRp
b25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPFR5
cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoTWF0Y2g+PiYpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcm
IHNjcmlwdElELCBjb25zdCBTdHJpbmcmIG5ld0NvbnRlbnQsIGNvbnN0IGJvb2wqIHByZXZpZXcs
IFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJh
bWU+PiYgbmV3Q2FsbEZyYW1lcywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHJlc3VsdCk7Cisg
ICAgdmlydHVhbCB2b2lkIGdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmlu
ZyYgc2NyaXB0SUQsIFN0cmluZyogc2NyaXB0U291cmNlKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0
RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+Jik7CiAgICAgdmly
dHVhbCB2b2lkIHBhdXNlKEVycm9yU3RyaW5nKik7CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZShF
cnJvclN0cmluZyopOwpAQCAtMTQ5LDEyICsxNDksMTIgQEAgcHJpdmF0ZToKIAogICAgIFBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1l
Pj4gY3VycmVudENhbGxGcmFtZXMoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkaWRQYXJzZVNvdXJj
ZShjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTY3JpcHQmKSBPVkVSUklERSBGSU5BTDsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzY3JpcHRJRCwg
Y29uc3QgU2NyaXB0JikgT1ZFUlJJREUgRklOQUw7CiAgICAgdmlydHVhbCB2b2lkIGZhaWxlZFRv
UGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZp
cnN0TGluZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIE9WRVJS
SURFIEZJTkFMOwogCiAgICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9uc0ltcGwoRXJyb3JTdHJp
bmcqLCBpbnQpOwogCi0gICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0
aW9uPiByZXNvbHZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCwgY29uc3Qg
U3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYpOworICAgIFBhc3NSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gcmVzb2x2ZUJyZWFrcG9pbnQoY29u
c3QgU3RyaW5nJiBicmVha3BvaW50SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRCwg
Y29uc3QgU2NyaXB0QnJlYWtwb2ludCYpOwogICAgIHZvaWQgY2xlYXIoKTsKICAgICBib29sIGFz
c2VydFBhdXNlZChFcnJvclN0cmluZyopOwogICAgIHZvaWQgY2xlYXJCcmVha0RldGFpbHMoKTsK
QEAgLTE2MiwxNyArMTYyLDE3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIHNvdXJjZU1hcFVSTEZv
clNjcmlwdChjb25zdCBTY3JpcHQmKTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFNj
cmlwdD4gU2NyaXB0c01hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8U3Ry
aW5nPj4gQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNNYXA7Ci0gICAgdHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4+IEJyZWFrcG9pbnRJ
ZFRvQnJlYWtwb2ludE1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8U3Ry
aW5nPj4gQnJlYWtwb2ludElkZW50aWZpZXJUb0RlYnVnU2VydmVyQnJlYWtwb2ludElEc01hcDsK
KyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pj4gQnJl
YWtwb2ludElkZW50aWZpZXJUb0JyZWFrcG9pbnRNYXA7CiAKICAgICBJbmplY3RlZFNjcmlwdE1h
bmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogICAgIEluc3BlY3RvckZyb250ZW5kOjpE
ZWJ1Z2dlciogbV9mcm9udGVuZDsKICAgICBKU0M6OkV4ZWNTdGF0ZSogbV9wYXVzZWRTY3JpcHRT
dGF0ZTsKICAgICBTY3JpcHRWYWx1ZSBtX2N1cnJlbnRDYWxsU3RhY2s7CiAgICAgU2NyaXB0c01h
cCBtX3NjcmlwdHM7Ci0gICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNN
YXAgbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkczsKLSAgICBCcmVha3Bv
aW50SWRUb0JyZWFrcG9pbnRNYXAgbV9qYXZhU2NyaXB0QnJlYWtwb2ludHM7Ci0gICAgU3RyaW5n
IG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElkOworICAgIEJyZWFrcG9pbnRJZGVudGlm
aWVyVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHNNYXAgbV9icmVha3BvaW50SWRlbnRpZmllclRv
RGVidWdTZXJ2ZXJCcmVha3BvaW50SURzOworICAgIEJyZWFrcG9pbnRJZGVudGlmaWVyVG9CcmVh
a3BvaW50TWFwIG1famF2YVNjcmlwdEJyZWFrcG9pbnRzOworICAgIFN0cmluZyBtX2NvbnRpbnVl
VG9Mb2NhdGlvbkJyZWFrcG9pbnRJRDsKICAgICBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6
OlJlYXNvbjo6RW51bSBtX2JyZWFrUmVhc29uOwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG1fYnJlYWtBdXhEYXRhOwogICAgIGJvb2wgbV9lbmFibGVkOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAJKHJl
dmlzaW9uIDE1ODg1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMyLDEwICsxMDMyLDEwIEBAIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWcKICNlbmRpZgogfQogCi12b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgTWVzc2FnZVNvdXJjZSBzb3VyY2Us
IE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25l
ZCBjb2x1bW5OdW1iZXIsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1
ZXN0SWRlbnRpZmllcikKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdl
VG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBN
ZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVs
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogICAgIGlmIChJbnNwZWN0b3JD
b25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3Rv
ckNvbnNvbGVBZ2VudCgpKQotICAgICAgICBjb25zb2xlQWdlbnQtPmFkZE1lc3NhZ2VUb0NvbnNv
bGUoc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgc2NyaXB0SWQsIGxpbmVOdW1iZXIsIGNv
bHVtbk51bWJlciwgc3RhdGUsIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICAgICAgY29uc29sZUFn
ZW50LT5hZGRNZXNzYWdlVG9Db25zb2xlKHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIHNj
cmlwdElELCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHN0YXRlLCByZXF1ZXN0SWRlbnRpZmll
cik7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnRJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmgJKHJldmlzaW9uIDE1ODg1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDExICsyMzIsMTEgQEAg
cHVibGljOgogICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSB3ZSBubyBsb25nZXIgZ2VuZXJhdGUg
c3RhY2tzIG91dHNpZGUgb2YgSW5zcGVjdG9yLgogICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VU
b0NvbnNvbGUoUGFnZSosIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWws
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+LCB1bnNp
Z25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7CiAgICAgc3RhdGljIHZvaWQgYWRkTWVz
c2FnZVRvQ29uc29sZShQYWdlKiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VM
ZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8
U2NyaXB0QXJndW1lbnRzPiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwot
ICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSosIE1lc3NhZ2VTb3VyY2Us
IE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiBzY3JpcHRJZCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVt
YmVyLCBKU0M6OkV4ZWNTdGF0ZSogPSAwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVy
ID0gMCk7CisgICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShQYWdlKiwgTWVzc2Fn
ZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBjb25zdCBTdHJpbmcmIHNjcmlwdElELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBj
b2x1bW5OdW1iZXIsIEpTQzo6RXhlY1N0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElk
ZW50aWZpZXIgPSAwKTsKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICAvLyBGSVhNRTogQ29udmVy
dCB0byBTY3JpcHRBcmd1bWVudHMgdG8gbWF0Y2ggbm9uLXdvcmtlciBjb250ZXh0LgogICAgIHN0
YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoV29ya2VyR2xvYmFsU2NvcGUqLCBNZXNzYWdl
U291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRp
ZmllciA9IDApOwotICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoV29ya2VyR2xv
YmFsU2NvcGUqLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIHVuc2lnbmVkIGxpbmVO
dW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUqID0gMCwgdW5zaWdu
ZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOworICAgIHN0YXRpYyB2b2lkIGFkZE1lc3Nh
Z2VUb0NvbnNvbGUoV29ya2VyR2xvYmFsU2NvcGUqLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlw
ZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2Ny
aXB0SUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpF
eGVjU3RhdGUqID0gMCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwogI2Vu
ZGlmCiAgICAgc3RhdGljIHZvaWQgY29uc29sZUNvdW50KFBhZ2UqLCBKU0M6OkV4ZWNTdGF0ZSos
IFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPik7CiAgICAgc3RhdGljIHZvaWQgc3RhcnRDb25z
b2xlVGltaW5nKEZyYW1lKiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CkBAIC00MzYsNyArNDM2LDcg
QEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBkaWRXcml0ZUhUTUxJbXBsKGNvbnN0IEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYsIHVuc2lnbmVkIGVuZExpbmUpOwogCiAgICAgc3Rh
dGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIE1l
c3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4sIHVuc2ln
bmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpOwotICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VU
b0NvbnNvbGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBNZXNzYWdlU291cmNlLCBNZXNzYWdl
VHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYg
c2NyaXB0SWQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlND
OjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICBzdGF0
aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgTWVz
c2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBjb25zdCBTdHJpbmcmIHNjcmlwdElELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25l
ZCBjb2x1bW5OdW1iZXIsIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRl
bnRpZmllcik7CiAKICAgICAvLyBGSVhNRTogUmVtb3ZlIG9uY2Ugd2Ugbm8gbG9uZ2VyIGdlbmVy
YXRlIHN0YWNrcyBvdXRzaWRlIG9mIEluc3BlY3Rvci4KICAgICBzdGF0aWMgdm9pZCBhZGRNZXNz
YWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgTWVzc2FnZVNvdXJjZSwgTWVz
c2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRy
PFNjcmlwdENhbGxTdGFjaz4sIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnTGlzdGVuZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5oCShy
ZXZpc2lvbiAxNTg4NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdM
aXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgflNjcmlwdERlYnVnTGlzdGVuZXIoKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBk
aWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTY3JpcHQmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0SUQs
IGNvbnN0IFNjcmlwdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkVG9QYXJzZVNvdXJj
ZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBp
bnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBkaWRQYXVzZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFNjcmlwdFZhbHVlJiBjYWxs
RnJhbWVzLCBjb25zdCBTY3JpcHRWYWx1ZSYgZXhjZXB0aW9uKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGRpZENvbnRpbnVlKCkgPSAwOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4
ODU1KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMTMtMTEtMDcgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgor
CisgICAgICAgIENvc21ldGljOiByZW5hbWUgeHh4SWQgdG8geHh4SUQgZm9yIFNjcmlwdElkLCBT
b3VyY2VJZCwgYW5kIEJyZWFrcG9pbnRJZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyMzk0NS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW06CisgICAg
ICAgIChXZWJTY3JpcHREZWJ1Z2dlcjo6ZXhjZXB0aW9uKToKKwogMjAxMy0xMS0wNiAgRGFuaWVs
IEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gVXBzdHJlYW0gTGV0
dGVycHJlc3MgZWZmZWN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlw
dERlYnVnZ2VyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
U2NyaXB0RGVidWdnZXIubW0JKHJldmlzaW9uIDE1ODg1NSkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTEzMyw5ICsx
MzMsOSBAQCB2b2lkIFdlYlNjcmlwdERlYnVnZ2VyOjpleGNlcHRpb24oSlNDOjpDCiAgICAgV2Vi
U2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqIGNhY2hlID0gV2ViVmlld0dl
dFNjcmlwdERlYnVnRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMod2ViVmlldyk7CiAgICAgaWYgKGNh
Y2hlLT5leGNlcHRpb25XYXNSYWlzZWRGdW5jKSB7CiAgICAgICAgIGlmIChjYWNoZS0+ZXhjZXB0
aW9uV2FzUmFpc2VkRXhwZWN0c0hhc0hhbmRsZXJGbGFnKQotICAgICAgICAgICAgQ2FsbFNjcmlw
dERlYnVnRGVsZWdhdGUoY2FjaGUtPmV4Y2VwdGlvbldhc1JhaXNlZEZ1bmMsIHdlYlZpZXcsIEBz
ZWxlY3Rvcih3ZWJWaWV3OmV4Y2VwdGlvbldhc1JhaXNlZDpoYXNIYW5kbGVyOnNvdXJjZUlkOmxp
bmU6Zm9yV2ViRnJhbWU6KSwgd2ViQ2FsbEZyYW1lLmdldCgpLCBoYXNIYW5kbGVyLCBkZWJ1Z2dl
ckNhbGxGcmFtZS0+c291cmNlSWQoKSwgZGVidWdnZXJDYWxsRnJhbWUtPmxpbmUoKSwgd2ViRnJh
bWUpOworICAgICAgICAgICAgQ2FsbFNjcmlwdERlYnVnRGVsZWdhdGUoY2FjaGUtPmV4Y2VwdGlv
bldhc1JhaXNlZEZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmV4Y2VwdGlvbldhc1Jh
aXNlZDpoYXNIYW5kbGVyOnNvdXJjZUlkOmxpbmU6Zm9yV2ViRnJhbWU6KSwgd2ViQ2FsbEZyYW1l
LmdldCgpLCBoYXNIYW5kbGVyLCBkZWJ1Z2dlckNhbGxGcmFtZS0+c291cmNlSUQoKSwgZGVidWdn
ZXJDYWxsRnJhbWUtPmxpbmUoKSwgd2ViRnJhbWUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBDYWxsU2NyaXB0RGVidWdEZWxlZ2F0ZShjYWNoZS0+ZXhjZXB0aW9uV2FzUmFpc2VkRnVuYywg
d2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6ZXhjZXB0aW9uV2FzUmFpc2VkOnNvdXJjZUlkOmxp
bmU6Zm9yV2ViRnJhbWU6KSwgd2ViQ2FsbEZyYW1lLmdldCgpLCBkZWJ1Z2dlckNhbGxGcmFtZS0+
c291cmNlSWQoKSwgZGVidWdnZXJDYWxsRnJhbWUtPmxpbmUoKSwgd2ViRnJhbWUpOworICAgICAg
ICAgICAgQ2FsbFNjcmlwdERlYnVnRGVsZWdhdGUoY2FjaGUtPmV4Y2VwdGlvbldhc1JhaXNlZEZ1
bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmV4Y2VwdGlvbldhc1JhaXNlZDpzb3VyY2VJ
ZDpsaW5lOmZvcldlYkZyYW1lOiksIHdlYkNhbGxGcmFtZS5nZXQoKSwgZGVidWdnZXJDYWxsRnJh
bWUtPnNvdXJjZUlEKCksIGRlYnVnZ2VyQ2FsbEZyYW1lLT5saW5lKCksIHdlYkZyYW1lKTsKICAg
ICB9CiAKICAgICBtX2NhbGxpbmdEZWxlZ2F0ZSA9IGZhbHNlOwo=
</data>
<flag name="review"
          id="239271"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>