<?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>55057</bug_id>
          
          <creation_ts>2011-02-23 09:39:40 -0800</creation_ts>
          <short_desc>Web Inspector: refactor inspect() workflow so that it did not push dom nodes.</short_desc>
          <delta_ts>2011-02-24 09:16:24 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>55155</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>dglazkov</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>356151</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-23 09:39:40 -0800</bug_when>
    <thetext>I am working on getting rig of DOM agent pushes - everything should happen upon request. This patch changes the way we handle inspect: instead of pushing nodes, we are telling front-end that inspect element has been requested. It is then up to front-end to request dom nodes and focus them in the tree. I also made inspect() work in a generic manner, using same routines for nodes, databases, storages and potentially new elements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356158</commentid>
    <comment_count>1</comment_count>
      <attachid>83494</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-23 09:50:28 -0800</bug_when>
    <thetext>Created attachment 83494
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356159</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-23 09:59:46 -0800</bug_when>
    <thetext>Attachment 83494 did not build on chromium:
Build output: http://queues.webkit.org/results/7982172</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356167</commentid>
    <comment_count>3</comment_count>
      <attachid>83496</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-23 10:09:36 -0800</bug_when>
    <thetext>Created attachment 83496
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356404</commentid>
    <comment_count>4</comment_count>
      <attachid>83546</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-23 14:08:12 -0800</bug_when>
    <thetext>Created attachment 83546
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356863</commentid>
    <comment_count>5</comment_count>
      <attachid>83546</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-02-24 04:28:21 -0800</bug_when>
    <thetext>Comment on attachment 83546
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=83546&amp;action=review

&gt; Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp:174
&gt; +#if ENABLE(DATABASE)

Should be 2 lines above?

&gt; Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp:186
&gt; +#if ENABLE(DOM_STORAGE)

same here

&gt; Source/WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp:218
&gt;      if (args.Length() &lt; 1)

Why is this not under the #if guard below?

&gt; Source/WebCore/inspector/InjectedScript.cpp:176
&gt; +void InjectedScript::inspectNode(Node* node)

There are no nodes in the worker context, we will need to find a way to get rid of this method along with Frame.h dependency there.

&gt; Source/WebCore/inspector/InjectedScript.cpp:182
&gt; +        function.appendArgument(InjectedScriptHost::nodeAsScriptValue(mainWorldScriptState(frame), node));

You should give the state from the m_injectedScriptObject, shouldn&apos;t you?

&gt; Source/WebCore/inspector/InjectedScriptSource.js:70
&gt; +        if (arguments.length === 0)

What is this check for? If you need to check whether the object is valid you should check it explicitely.

&gt; Source/WebCore/inspector/InjectedScriptSource.js:213
&gt; +    releaseObject: function(objectId)

Probably we could switch from the object groups to this method?

&gt; Source/WebCore/inspector/InspectorDatabaseResource.cpp:41
&gt; +static long nextUnusedId = 1;

What&apos;s the reason for this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356927</commentid>
    <comment_count>6</comment_count>
      <attachid>83546</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-24 06:26:35 -0800</bug_when>
    <thetext>Comment on attachment 83546
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=83546&amp;action=review

&gt;&gt; Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp:174
&gt;&gt; +#if ENABLE(DATABASE)
&gt; 
&gt; Should be 2 lines above?

No, this is a bug fix since these methods are called from within Javascript unconditionally. I actually fixed callframes as well.

&gt;&gt; Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp:186
&gt;&gt; +#if ENABLE(DOM_STORAGE)
&gt; 
&gt; same here

ditto

&gt;&gt; Source/WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp:218
&gt;&gt;      if (args.Length() &lt; 1)
&gt; 
&gt; Why is this not under the #if guard below?

ditto

&gt;&gt; Source/WebCore/inspector/InjectedScript.cpp:182
&gt;&gt; +        function.appendArgument(InjectedScriptHost::nodeAsScriptValue(mainWorldScriptState(frame), node));
&gt; 
&gt; You should give the state from the m_injectedScriptObject, shouldn&apos;t you?

Done.

&gt;&gt; Source/WebCore/inspector/InjectedScriptSource.js:70
&gt;&gt; +        if (arguments.length === 0)
&gt; 
&gt; What is this check for? If you need to check whether the object is valid you should check it explicitely.

This is correct - I should be able to inspect and dump undefined, null, etc. This check did not change.

&gt;&gt; Source/WebCore/inspector/InspectorDatabaseResource.cpp:41
&gt;&gt; +static long nextUnusedId = 1;
&gt; 
&gt; What&apos;s the reason for this change?

Consistency. All ids are 1-based longs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356944</commentid>
    <comment_count>7</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-24 06:43:47 -0800</bug_when>
    <thetext>Committed r79556: &lt;http://trac.webkit.org/changeset/79556&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83494</attachid>
            <date>2011-02-23 09:50:28 -0800</date>
            <delta_ts>2011-02-23 10:09:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55057-20110223205021.patch</filename>
            <type>text/plain</type>
            <size>44109</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk0MTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiNjc3MzlmNGRjY2NkNjE0
OTYyZWNlNWIyZTA3OWY2YzJiNGZmYzE1Li42N2FjZjA0NzVkYjRmMjExY2IxN2Y2ZThkYzY4MmY3
ZTkwYTkwNjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzYgQEAKKzIwMTEtMDItMjMgIFBhdmVs
IEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmVmYWN0b3IgaW5zcGVj
dCgpIHdvcmtmbG93IHNvIHRoYXQgaXQgZGlkIG5vdCBwdXNoIGRvbSBub2Rlcy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1MDU3CisKKyAgICAgICAg
SSBhbSB3b3JraW5nIG9uIGdldHRpbmcgcmlkIG9mIERPTSBhZ2VudCBwdXNoZXMgLSBldmVyeXRo
aW5nIHNob3VsZCBoYXBwZW4gdXBvbgorICAgICAgICBmcm9udC1lbmQgcmVxdWVzdC4gVGhpcyBw
YXRjaCBjaGFuZ2VzIHRoZSB3YXkgd2UgaGFuZGxlIGluc3BlY3QoKSBjb21tYW5kIGxpbmUKKyAg
ICAgICAgYXBpOiBpbnN0ZWFkIG9mIHB1c2hpbmcgbm9kZXMsIHdlIGFyZSB0ZWxsaW5nIGZyb250
LWVuZCB0aGF0IGluc3BlY3Qob2JqZWN0KSBoYXMKKyAgICAgICAgYmVlbiByZXF1ZXN0ZWQuIEl0
IGlzIHRoZW4gdXAgdG8gZnJvbnQtZW5kIHRvIHJlcXVlc3QgZG9tIG5vZGVzIGFuZCBmb2N1cyB0
aGVtIGluCisgICAgICAgIHRoZSB0cmVlLiBJIGFsc28gbWFkZSBpbnNwZWN0KCkgd29yayBpbiBh
IGdlbmVyaWMgbWFubmVyLCB1c2luZyBzYW1lIHJvdXRpbmVzIGZvcgorICAgICAgICBub2Rlcywg
ZGF0YWJhc2VzLCBzdG9yYWdlcyBhbmQgcG90ZW50aWFsbHkgbmV3IGVsZW1lbnRzLgorCisgICAg
ICAgIEFzIGEgc2lkZS1lZmZlY3QsIHdlIGRvbid0IGRvIGNvbnNvbGUubG9nIGZyb20gd2l0aGlu
IGluc3BlY3QoKSBhbnltb3JlLCBidXQgZHVtcAorICAgICAgICBpbnNwZWN0ZWQgdmFsdWUgYXMg
aW5zcGVjdCdzIHJlc3VsdC4KKworICAgICAgICBBbHNvLCBJIGFkZGVkIGluZGl2aWR1YWwgb2Jq
ZWN0IHJlbGVhc2UgbWV0aG9kIGFuZCBtYWRlIG9iamVjdCBncm91cHMgb3B0aW9uYWwuCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OnNjcmlwdFZhbHVlQXNOb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6bm9kZUFzU2NyaXB0VmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3BlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OmRhdGFiYXNlSWQpOgorICAgICAgICAo
V2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OnN0b3JhZ2VJZCk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6c2NyaXB0VmFsdWVBc05vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0Ojpub2RlQXNTY3JpcHRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpWOEluamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4SW5qZWN0ZWRTY3JpcHRIb3N0OjpkYXRhYmFzZUlkQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6VjhJbmplY3RlZFNjcmlwdEhvc3Q6OnN0b3JhZ2VJZENhbGxi
YWNrKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHQ6Om5vZGVGb3JPYmplY3RJZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbmplY3RlZFNjcmlwdDo6cmVsZWFzZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmplY3RlZFNjcmlwdDo6d3JhcEZvckNvbnNvbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0
ZWRTY3JpcHQ6Omluc3BlY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0SW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OmRhdGFiYXNlSWRJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6OkluamVjdGVkU2NyaXB0SG9zdDo6c3RvcmFnZUlkSW1wbCk6CisgICAgICAgICogaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0SG9zdC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNj
cmlwdEhvc3QuaWRsOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5q
czoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmlkbDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6
OmZvY3VzTm9kZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkVXNlRE9NU3RvcmFnZSk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFn
ZW50OjpkYXRhYmFzZUlkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNw
cDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpyZWxlYXNlT2JqZWN0KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9BdWRpdFJ1bGVzLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMu
ZXZhbHVhdGVJblRhcmdldFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxl
cy5JbWFnZURpbWVuc2lvbnNSdWxlLnByb3RvdHlwZS5kb1J1bik6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9ET01TdG9yYWdlLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvRGF0YWJhc2UuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25T
ZXJ2ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uU2VydmVyLnByb3RvdHlw
ZS5fb25FdmFsdWF0ZU9uSW5zcGVjdGVkUGFnZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuaW5zcGVjdCk6CisKIDIw
MTEtMDItMjIgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFuIEJlcm5zdGVpbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAppbmRleCBhMWRhNDM3ZTU3YzdlZTkzYmQ3
ZTllODAzNDYxZTk5OTQ5MjhjNjE2Li42NmI4MjFjZWZjMWVjNDU0NzEyYWUyZTkzN2FjNzhhY2Jk
YzBkMmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVk
U2NyaXB0SG9zdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAi
SlNSYW5nZS5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiU2NyaXB0VmFsdWUuaCIKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAjaW5jbHVkZSAiU3Rv
cmFnZS5oIgogI2luY2x1ZGUgIkpTU3RvcmFnZS5oIgpAQCAtNzAsMTggKzcxLDIyIEBACiAjaW5j
bHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTSmF2YVNjcmlwdENhbGxG
cmFtZS5oIgogI2luY2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0
VmFsdWUuaCIKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLU5vZGUqIEluamVjdGVkU2NyaXB0SG9zdDo6dG9Ob2RlKFNjcmlwdFZhbHVlIHZh
bHVlKQorTm9kZSogSW5qZWN0ZWRTY3JpcHRIb3N0OjpzY3JpcHRWYWx1ZUFzTm9kZShTY3JpcHRW
YWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkgfHwgdmFsdWUuaXNOdWxs
KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBXZWJDb3JlOjp0b05vZGUodmFsdWUu
anNWYWx1ZSgpKTsKKyAgICByZXR1cm4gdG9Ob2RlKHZhbHVlLmpzVmFsdWUoKSk7Cit9CisKK1Nj
cmlwdFZhbHVlIEluamVjdGVkU2NyaXB0SG9zdDo6bm9kZUFzU2NyaXB0VmFsdWUoU2NyaXB0U3Rh
dGUqIHN0YXRlLCBOb2RlKiBub2RlKQoreworICAgIHJldHVybiBTY3JpcHRWYWx1ZShzdGF0ZS0+
Z2xvYmFsRGF0YSgpLCB0b0pTKHN0YXRlLCBub2RlKSk7CiB9CiAKIFNjcmlwdE9iamVjdCBJbmpl
Y3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZUluamVjdGVkU2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNl
LCBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGxvbmcgaWQpCkBAIC0xNTQsNDEgKzE1OSwzNyBA
QCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnRlcm5hbENvbnN0cnVjdG9yTmFtZShF
eGVjU3RhdGUqIGV4ZWMpCiAKIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3BlY3Qo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMSkg
ewotICAgICAgICBOb2RlKiBub2RlID0gV2ViQ29yZTo6dG9Ob2RlKGV4ZWMtPmFyZ3VtZW50KDAp
KTsKLSAgICAgICAgaWYgKG5vZGUpCi0gICAgICAgICAgICBpbXBsKCktPmluc3BlY3Qobm9kZSk7
CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIFNjcmlwdFZh
bHVlIG9iamVjdElkKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+YXJndW1lbnQoMCkpOworICAg
ICAgICBTY3JpcHRWYWx1ZSBoaW50cyhleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmFyZ3VtZW50
KDEpKTsKKyAgICAgICAgaW1wbCgpLT5pbnNwZWN0SW1wbChvYmplY3RJZC50b0luc3BlY3RvclZh
bHVlKGV4ZWMpLCBoaW50cy50b0luc3BlY3RvclZhbHVlKGV4ZWMpKTsKICAgICB9CiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLSNpZiBFTkFCTEUoREFUQUJBU0UpCi1KU1ZhbHVlIEpT
SW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3REYXRhYmFzZShFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpkYXRhYmFzZUlkKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0KKyNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgRGF0YWJhc2UqIGRhdGFiYXNl
ID0gdG9EYXRhYmFzZShleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKGRhdGFiYXNlKQotICAg
ICAgICBpbXBsKCktPnNlbGVjdERhdGFiYXNlKGRhdGFiYXNlKTsKKyAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGltcGwoKS0+ZGF0YWJhc2VJZEltcGwoZGF0YWJhc2UpKTsKKyNlbmRpZgogICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogfQotI2VuZGlmCiAKLSNpZiBFTkFCTEUoRE9NX1NUT1JBR0Up
Ci1KU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3RET01TdG9yYWdlKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OnN0b3JhZ2VJZChFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGlmICghaW1wbCgpLT5pbnNwZWN0b3JBZ2VudCgp
KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQorI2lmIEVOQUJMRShET01fU1RPUkFH
RSkKICAgICBTdG9yYWdlKiBzdG9yYWdlID0gdG9TdG9yYWdlKGV4ZWMtPmFyZ3VtZW50KDApKTsK
ICAgICBpZiAoc3RvcmFnZSkKLSAgICAgICAgaW1wbCgpLT5zZWxlY3RET01TdG9yYWdlKHN0b3Jh
Z2UpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoaW1wbCgpLT5zdG9yYWdlSWRJbXBsKHN0b3Jh
Z2UpKTsKKyNlbmRpZgogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQotI2VuZGlmCiAKIElu
amVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0SG9zdDo6aW5qZWN0ZWRTY3JpcHRGb3IoU2NyaXB0
U3RhdGUqIHNjcmlwdFN0YXRlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKaW5k
ZXggMjI3NTY5MTM2NjhjYjIwM2Q5MGNlNmUyMmZmN2ZjYjM4ZDQ5NjZmNS4uMjAyNzk4NGE2ZWZi
NGMwNzA3YzYyYzRjODA1YjY0YmQ5YjcxNjk3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0
b20uY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKICNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgorI2luY2x1ZGUgIlNjcmlwdFZh
bHVlLmgiCiAKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdTdGF0
ZS5oIgpAQCAtNTQsMTMgKzU1LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTm9kZSog
SW5qZWN0ZWRTY3JpcHRIb3N0Ojp0b05vZGUoU2NyaXB0VmFsdWUgdmFsdWUpCitOb2RlKiBJbmpl
Y3RlZFNjcmlwdEhvc3Q6OnNjcmlwdFZhbHVlQXNOb2RlKFNjcmlwdFZhbHVlIHZhbHVlKQogewog
ICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSB8fCB2YWx1ZS5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgcmV0dXJuIFY4Tm9kZTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0
Pjo6Q2FzdCh2YWx1ZS52OFZhbHVlKCkpKTsKIH0KIAorU2NyaXB0VmFsdWUgSW5qZWN0ZWRTY3Jp
cHRIb3N0Ojpub2RlQXNTY3JpcHRWYWx1ZShTY3JpcHRTdGF0ZSogc3RhdGUsIE5vZGUqIG5vZGUp
Cit7CisgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHRvVjgobm9kZSkpOworfQorCiBzdGF0aWMgdm9p
ZCBXZWFrUmVmZXJlbmNlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBvYmplY3Qs
IHZvaWQqIHBhcmFtZXRlcikKIHsKICAgICBJbmplY3RlZFNjcmlwdEhvc3QqIG5hdGl2ZU9iamVj
dCA9IHN0YXRpY19jYXN0PEluamVjdGVkU2NyaXB0SG9zdCo+KHBhcmFtZXRlcik7CkBAIC0xNzQs
MTMgKzE4MCwxMyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJbmplY3RlZFNjcmlwdEhvc3Q6
OmludGVybmFsQ29uc3RydWN0b3JOYW1lQ2FsbGJhY2soY29ucwogdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4SW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkluamVjdGVkU2NyaXB0SG9zdC5pbnNwZWN0
KCkiKTsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkg
PCAyKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgSW5qZWN0ZWRTY3Jp
cHRIb3N0KiBob3N0ID0gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOwotICAgIE5vZGUqIG5vZGUgPSBWOE5vZGU6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QoYXJnc1swXSkpOwotICAgIGlmIChub2RlKQotICAgICAgICBob3N0LT5pbnNw
ZWN0KG5vZGUpOworICAgIFNjcmlwdE9iamVjdCBvYmplY3RJZChTY3JpcHRTdGF0ZTo6Y3VycmVu
dCgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKKyAgICBTY3JpcHRP
YmplY3QgaGludHMoU3RhdGVTdGF0ZTo6Y3VycmVudCgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
OjpDYXN0KGFyZ3NbMV0pKTsKKyAgICBob3N0LT5pbnNwZWN0SW1wbChvYmplY3RJZCwgaGludHMp
OwogCiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KQEAgLTE5MywzNyArMTk5LDMzIEBA
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEluamVjdGVkU2NyaXB0SG9zdDo6Y3VycmVudENhbGxG
cmFtZUNhbGxiYWNrKGNvbnN0IHY4OjpBCiB9CiAjZW5kaWYKIAotI2lmIEVOQUJMRShEQVRBQkFT
RSkKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEluamVjdGVkU2NyaXB0SG9zdDo6c2VsZWN0RGF0
YWJhc2VDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQordjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4SW5qZWN0ZWRTY3JpcHRIb3N0OjpkYXRhYmFzZUlkQ2FsbGJhY2soY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncykKIHsKLSAgICBJTkNfU1RBVFMoIkluamVjdGVkU2NyaXB0SG9zdC5z
ZWxlY3REYXRhYmFzZSgpIik7CisgICAgSU5DX1NUQVRTKCJJbmplY3RlZFNjcmlwdEhvc3QuZGF0
YWJhc2VJZCgpIik7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOwotCisjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgIEluamVjdGVkU2Ny
aXB0SG9zdCogaG9zdCA9IFY4SW5qZWN0ZWRTY3JpcHRIb3N0Ojp0b05hdGl2ZShhcmdzLkhvbGRl
cigpKTsKICAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSBWOERhdGFiYXNlOjp0b05hdGl2ZSh2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKICAgICBpZiAoZGF0YWJhc2UpCi0g
ICAgICAgIGhvc3QtPnNlbGVjdERhdGFiYXNlKGRhdGFiYXNlKTsKLQorICAgICAgICByZXR1cm4g
djg6Ok51bWJlcjo6TmV3KGhvc3QtPmRhdGFiYXNlSWRJbXBsKGRhdGFiYXNlKSk7CisjZW5kaWYK
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQotI2VuZGlmCiAKLSNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OnNl
bGVjdERPTVN0b3JhZ2VDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQordjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0ZWRTY3JpcHRIb3N0OjpzdG9yYWdlSWRDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewotICAgIElOQ19TVEFUUygiSW5qZWN0ZWRTY3Jp
cHRIb3N0LnNlbGVjdERPTVN0b3JhZ2UoKSIpOwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkK
ICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQorI2lmIEVOQUJMRShET01fU1RPUkFH
RSkKKyAgICBJTkNfU1RBVFMoIkluamVjdGVkU2NyaXB0SG9zdC5zdG9yYWdlSWQoKSIpOwogICAg
IEluamVjdGVkU2NyaXB0SG9zdCogaG9zdCA9IFY4SW5qZWN0ZWRTY3JpcHRIb3N0Ojp0b05hdGl2
ZShhcmdzLkhvbGRlcigpKTsKICAgICBTdG9yYWdlKiBzdG9yYWdlID0gVjhTdG9yYWdlOjp0b05h
dGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKICAgICBpZiAoc3Rv
cmFnZSkKLSAgICAgICAgaG9zdC0+c2VsZWN0RE9NU3RvcmFnZShzdG9yYWdlKTsKLQorICAgICAg
ICByZXR1cm4gcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhob3N0LT5zdG9yYWdlSWRJbXBsKHN0b3Jh
Z2UpKTsKKyNlbmRpZgogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9Ci0jZW5kaWYKIAog
SW5qZWN0ZWRTY3JpcHQgSW5qZWN0ZWRTY3JpcHRIb3N0OjppbmplY3RlZFNjcmlwdEZvcihTY3Jp
cHRTdGF0ZSogaW5zcGVjdGVkU2NyaXB0U3RhdGUpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0LmNwcAppbmRleCBkYjkwYmQ3NzY2MjdjZTJhN2JiNWFjNTJjNTBk
ZTBlMDM1N2I3ZWJjLi5lNzFlNmFjNjdlNDEwYWMzMjVmZmI1YmQ4Yjg2MzFjMGY3MWExNWZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKQEAgLTMzLDYg
KzMzLDcgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKKyNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkluamVjdGVkU2NyaXB0SG9zdC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVl
cy5oIgogI2luY2x1ZGUgIk5vZGUuaCIKQEAgLTEwNCw3ICsxMDUsNyBAQCBOb2RlKiBJbmplY3Rl
ZFNjcmlwdDo6bm9kZUZvck9iamVjdElkKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmpl
Y3RJZCkKICAgICBTY3JpcHRWYWx1ZSByZXN1bHRWYWx1ZSA9IGZ1bmN0aW9uLmNhbGwoaGFkRXhj
ZXB0aW9uKTsKICAgICBBU1NFUlQoIWhhZEV4Y2VwdGlvbik7CiAKLSAgICByZXR1cm4gSW5qZWN0
ZWRTY3JpcHRIb3N0Ojp0b05vZGUocmVzdWx0VmFsdWUpOworICAgIHJldHVybiBJbmplY3RlZFNj
cmlwdEhvc3Q6OnNjcmlwdFZhbHVlQXNOb2RlKHJlc3VsdFZhbHVlKTsKIH0KIAogdm9pZCBJbmpl
Y3RlZFNjcmlwdDo6cmVzb2x2ZU5vZGUobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4qIHJlc3VsdCkKQEAgLTEzOCw2ICsxMzksMTQgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6c2V0
UHJvcGVydHlWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0SWQsIGNvbnMK
ICAgICBtYWtlQ2FsbChmdW5jdGlvbiwgcmVzdWx0KTsKIH0KIAordm9pZCBJbmplY3RlZFNjcmlw
dDo6cmVsZWFzZU9iamVjdChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0SWQpCit7
CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1faW5qZWN0ZWRTY3JpcHRPYmplY3Qs
ICJyZWxlYXNlT2JqZWN0Iik7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQob2JqZWN0SWQt
PnRvSlNPTlN0cmluZygpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdDsKKyAg
ICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3VsdCk7Cit9CisKICNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluamVjdGVkU2NyaXB0Ojpj
YWxsRnJhbWVzKCkKIHsKQEAgLTE0OCwxNyArMTU3LDMyIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IEluamVjdGVkU2NyaXB0OjpjYWxsRnJhbWVzKCkKIH0KICNlbmRpZgogCi1QYXNzUmVm
UHRyPEluc3BlY3RvclZhbHVlPiBJbmplY3RlZFNjcmlwdDo6d3JhcEZvckNvbnNvbGUoU2NyaXB0
VmFsdWUgdmFsdWUpCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5qZWN0ZWRTY3JpcHQ6
OndyYXBGb3JDb25zb2xlKFNjcmlwdFZhbHVlIHZhbHVlKQogewogICAgIEFTU0VSVCghaGFzTm9W
YWx1ZSgpKTsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgd3JhcEZ1bmN0aW9uKG1faW5qZWN0ZWRT
Y3JpcHRPYmplY3QsICJ3cmFwT2JqZWN0Rm9yQ29uc29sZSIpOworICAgIFNjcmlwdEZ1bmN0aW9u
Q2FsbCB3cmFwRnVuY3Rpb24obV9pbmplY3RlZFNjcmlwdE9iamVjdCwgIndyYXBGb3JDb25zb2xl
Iik7CiAgICAgd3JhcEZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHZhbHVlKTsKICAgICB3cmFwRnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQoY2FuQWNjZXNzSW5zcGVjdGVkV2luZG93KCkpOwogICAgIGJv
b2wgaGFkRXhjZXB0aW9uID0gZmFsc2U7CiAgICAgU2NyaXB0VmFsdWUgciA9IHdyYXBGdW5jdGlv
bi5jYWxsKGhhZEV4Y2VwdGlvbik7Ci0gICAgaWYgKGhhZEV4Y2VwdGlvbikKLSAgICAgICAgcmV0
dXJuIEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKCI8ZXhjZXB0aW9uPiIpOwotICAgIHJldHVybiBy
LnRvSW5zcGVjdG9yVmFsdWUobV9pbmplY3RlZFNjcmlwdE9iamVjdC5zY3JpcHRTdGF0ZSgpKTsK
KyAgICBpZiAoaGFkRXhjZXB0aW9uKSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHJlc3VsdC0+c2V0
U3RyaW5nKCJkZXNjcmlwdGlvbiIsICI8ZXhjZXB0aW9uPiIpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICByZXR1cm4gci50b0luc3BlY3RvclZhbHVlKG1faW5qZWN0ZWRTY3Jp
cHRPYmplY3Quc2NyaXB0U3RhdGUoKSktPmFzT2JqZWN0KCk7Cit9CisKK3ZvaWQgSW5qZWN0ZWRT
Y3JpcHQ6Omluc3BlY3QoTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQoIWhhc05vVmFsdWUoKSk7
CisgICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+b3duZXJEb2N1bWVudCgpID8gbm9kZS0+b3duZXJE
b2N1bWVudCgpLT5mcmFtZSgpIDogMDsKKyAgICBpZiAoZnJhbWUpIHsKKyAgICAgICAgU2NyaXB0
RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1faW5qZWN0ZWRTY3JpcHRPYmplY3QsICJpbnNwZWN0Iik7
CisgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KEluamVjdGVkU2NyaXB0SG9zdDo6bm9k
ZUFzU2NyaXB0VmFsdWUobWFpbldvcmxkU2NyaXB0U3RhdGUoZnJhbWUpLCBub2RlKSk7CisgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0OworICAgICAgICBtYWtlQ2FsbChmdW5j
dGlvbiwgJnJlc3VsdCk7CisgICAgfQogfQogCiB2b2lkIEluamVjdGVkU2NyaXB0OjpyZWxlYXNl
V3JhcHBlck9iamVjdEdyb3VwKGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCmluZGV4IDFjNGMyMzZjOWQ0NGZiYTM4MDkw
OTQxMWViZWJlNTM1MDQwOTM1YWMuLmRlOTcwNzJmNWQ0ZTFjNjRiMjgwZGE1MjA4Yzk5YjU4ZWJj
ZWUxZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCkBAIC02
MSwyMCArNjEsMjIgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0Tm9kZVByb3BlcnRpZXMobG9uZyBu
b2RlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3BlcnRpZXNBcnJheSwgUmVmUHRy
PEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKICAgICB2b2lkIGdldE5vZGVQcm90b3R5cGVzKGxv
bmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOwogICAgIHZvaWQgc2V0
UHJvcGVydHlWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0SWQsIGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7Ci0KKyAgICB2b2lkIHJlbGVhc2VPYmplY3QoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdElkKTsKKyAgICAKICNpZiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKICAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBjYWxsRnJhbWVz
KCk7CiAjZW5kaWYKIAotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHdyYXBGb3JDb25z
b2xlKFNjcmlwdFZhbHVlKTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gd3JhcEZv
ckNvbnNvbGUoU2NyaXB0VmFsdWUpOworICAgIHZvaWQgaW5zcGVjdChOb2RlKik7CiAgICAgdm9p
ZCByZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwKGNvbnN0IFN0cmluZyYpOwogICAgIFNjcmlwdFN0
YXRlKiBzY3JpcHRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5qZWN0ZWRTY3JpcHRPYmplY3Qu
c2NyaXB0U3RhdGUoKTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBJbmplY3RlZFNjcmlwdCBJ
bmplY3RlZFNjcmlwdEhvc3Q6OmluamVjdGVkU2NyaXB0Rm9yKFNjcmlwdFN0YXRlKik7CiAgICAg
ZXhwbGljaXQgSW5qZWN0ZWRTY3JpcHQoU2NyaXB0T2JqZWN0KTsKLSAgICBib29sIGNhbkFjY2Vz
c0luc3BlY3RlZFdpbmRvdygpOwogCisgICAgYm9vbCBjYW5BY2Nlc3NJbnNwZWN0ZWRXaW5kb3co
KTsKICAgICB2b2lkIG1ha2VDYWxsKFNjcmlwdEZ1bmN0aW9uQ2FsbCYsIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4qIHJlc3VsdCk7CiAKICAgICBTY3JpcHRPYmplY3QgbV9pbmplY3RlZFNjcmlwdE9i
amVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dEhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5j
cHAKaW5kZXggNWIxMzc3ODEyMDVmNzAwYzAzZmY1MjIzZmRmODM1M2RlNmE0MTQwYS4uNjVkNzYw
NzU0ZTc2NTI3Y2EyODM4N2UwYzI4NzRiYWQ3MGUzMWZlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAKQEAgLTgwLDExICs4MCwxMCBAQCBJ
bmplY3RlZFNjcmlwdEhvc3Q6On5JbmplY3RlZFNjcmlwdEhvc3QoKQogewogfQogCi12b2lkIElu
amVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdChOb2RlKiBub2RlKQordm9pZCBJbmplY3RlZFNjcmlw
dEhvc3Q6Omluc3BlY3RJbXBsKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG9iamVjdElkLCBQ
YXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBoaW50cykKIHsKLSAgICBJbnNwZWN0b3JET01BZ2Vu
dCogZG9tQWdlbnQgPSBpbnNwZWN0b3JET01BZ2VudCgpOwotICAgIGlmIChkb21BZ2VudCkKLSAg
ICAgICAgZG9tQWdlbnQtPmluc3BlY3Qobm9kZSk7CisgICAgaWYgKEluc3BlY3RvckZyb250ZW5k
KiBmZSA9IGZyb250ZW5kKCkpCisgICAgICAgIGZlLT5pbnNwZWN0KG9iamVjdElkLT5hc09iamVj
dCgpLCBoaW50cy0+YXNPYmplY3QoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0Ojpj
bGVhckNvbnNvbGVNZXNzYWdlcygpCkBAIC0xMTUsMjUgKzExNCwyMCBAQCBsb25nIEluamVjdGVk
U2NyaXB0SG9zdDo6aW5zcGVjdGVkTm9kZSh1bnNpZ25lZCBsb25nIG51bSkKIH0KIAogI2lmIEVO
QUJMRShEQVRBQkFTRSkKLURhdGFiYXNlKiBJbmplY3RlZFNjcmlwdEhvc3Q6OmRhdGFiYXNlRm9y
SWQobG9uZyBkYXRhYmFzZUlkKQorbG9uZyBJbmplY3RlZFNjcmlwdEhvc3Q6OmRhdGFiYXNlSWRJ
bXBsKERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKICAgICBpZiAobV9pbnNwZWN0b3JBZ2VudCAmJiBt
X2luc3BlY3RvckFnZW50LT5kYXRhYmFzZUFnZW50KCkpCi0gICAgICAgIHJldHVybiBtX2luc3Bl
Y3RvckFnZW50LT5kYXRhYmFzZUFnZW50KCktPmRhdGFiYXNlRm9ySWQoZGF0YWJhc2VJZCk7Cisg
ICAgICAgIHJldHVybiBtX2luc3BlY3RvckFnZW50LT5kYXRhYmFzZUFnZW50KCktPmRhdGFiYXNl
SWQoZGF0YWJhc2UpOwogICAgIHJldHVybiAwOwogfQotCi12b2lkIEluamVjdGVkU2NyaXB0SG9z
dDo6c2VsZWN0RGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFiYXNlKQotewotICAgIGlmIChtX2luc3Bl
Y3RvckFnZW50ICYmIG1faW5zcGVjdG9yQWdlbnQtPmRhdGFiYXNlQWdlbnQoKSkKLSAgICAgICAg
bV9pbnNwZWN0b3JBZ2VudC0+ZGF0YWJhc2VBZ2VudCgpLT5zZWxlY3REYXRhYmFzZShkYXRhYmFz
ZSk7Ci19CiAjZW5kaWYKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLXZvaWQgSW5qZWN0ZWRT
Y3JpcHRIb3N0OjpzZWxlY3RET01TdG9yYWdlKFN0b3JhZ2UqIHN0b3JhZ2UpCitsb25nIEluamVj
dGVkU2NyaXB0SG9zdDo6c3RvcmFnZUlkSW1wbChTdG9yYWdlKiBzdG9yYWdlKQogewogICAgIGlm
IChtX2luc3BlY3RvckFnZW50ICYmIG1faW5zcGVjdG9yQWdlbnQtPmRvbVN0b3JhZ2VBZ2VudCgp
KQotICAgICAgICBtX2luc3BlY3RvckFnZW50LT5kb21TdG9yYWdlQWdlbnQoKS0+c2VsZWN0RE9N
U3RvcmFnZShzdG9yYWdlKTsKKyAgICAgICAgcmV0dXJuIG1faW5zcGVjdG9yQWdlbnQtPmRvbVN0
b3JhZ2VBZ2VudCgpLT5zdG9yYWdlSWQoc3RvcmFnZSk7CisgICAgcmV0dXJuIDA7CiB9CiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
SG9zdC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oCmlu
ZGV4IDA0NWE4NGI1MGEwNTUzZDEwYmJkZGI0OTM3N2E1ZDdhMTQ4MGRlZTkuLjc2OTI5MzkxMjQ4
NzQ3ZTU3Yzc4YjliNzFlZGI0NzY4YmU0MDY2YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgKQEAgLTU4LDE1ICs1OCwxNSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5qZWN0ZWRTY3JpcHRIb3N0KGluc3BlY3RvckFn
ZW50KSk7CiAgICAgfQogCi0gICAgc3RhdGljIE5vZGUqIHRvTm9kZShTY3JpcHRWYWx1ZSB2YWx1
ZSk7CisgICAgc3RhdGljIE5vZGUqIHNjcmlwdFZhbHVlQXNOb2RlKFNjcmlwdFZhbHVlKTsKKyAg
ICBzdGF0aWMgU2NyaXB0VmFsdWUgbm9kZUFzU2NyaXB0VmFsdWUoU2NyaXB0U3RhdGUqLCBOb2Rl
Kik7CiAKICAgICB+SW5qZWN0ZWRTY3JpcHRIb3N0KCk7CiAKLSAgICB2b2lkIGluc3BlY3QoTm9k
ZSogbm9kZSk7Ci0KICAgICBJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQoKSB7IHJldHVy
biBtX2luc3BlY3RvckFnZW50OyB9CiAgICAgdm9pZCBkaXNjb25uZWN0Q29udHJvbGxlcigpIHsg
bV9pbnNwZWN0b3JBZ2VudCA9IDA7IH0KIAorICAgIHZvaWQgaW5zcGVjdEltcGwoUGFzc1JlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gb2JqZWN0SWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGhp
bnRzKTsKICAgICB2b2lkIGNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CiAKICAgICB2b2lkIGNvcHlU
ZXh0KGNvbnN0IFN0cmluZyYgdGV4dCk7CkBAIC03NCwxMSArNzQsMTAgQEAgcHVibGljOgogICAg
IGxvbmcgaW5zcGVjdGVkTm9kZSh1bnNpZ25lZCBsb25nIG51bSk7CiAKICNpZiBFTkFCTEUoREFU
QUJBU0UpCi0gICAgRGF0YWJhc2UqIGRhdGFiYXNlRm9ySWQobG9uZyBkYXRhYmFzZUlkKTsKLSAg
ICB2b2lkIHNlbGVjdERhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSk7CisgICAgbG9uZyBkYXRh
YmFzZUlkSW1wbChEYXRhYmFzZSopOwogI2VuZGlmCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQot
ICAgIHZvaWQgc2VsZWN0RE9NU3RvcmFnZShTdG9yYWdlKiBzdG9yYWdlKTsKKyAgICBsb25nIHN0
b3JhZ2VJZEltcGwoU3RvcmFnZSopOwogI2VuZGlmCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAg
bG9uZyBuZXh0V29ya2VySWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdEhvc3QuaWRsIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0SG9zdC5pZGwKaW5kZXggOWYxYzJkYmU4NzBjMWJlZWI5NzlmYzgxNDY1MmFkYzNj
N2Q2Njc0NS4uMDI1OGY3ODE3NzQ0YjlkYjc4NTFhM2NhNGQ5NWM5MTM1Y2Q5MWRmNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5pZGwKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5pZGwKQEAgLTM2
LDcgKzM2LDcgQEAgbW9kdWxlIGNvcmUgewogCiAgICAgICAgIHZvaWQgY29weVRleHQoaW4gRE9N
U3RyaW5nIHRleHQpOwogICAgICAgICBbQ3VzdG9tXSBET01PYmplY3Qgbm9kZUZvcklkKGluIGxv
bmcgbm9kZUlkKTsKLSAgICAgICAgW0N1c3RvbV0gaW50IGluc3BlY3QoaW4gRE9NT2JqZWN0IG5v
ZGUpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIGluc3BlY3QoaW4gRE9NT2JqZWN0IG9iamVjdElk
LCBpbiBET01PYmplY3QgaGludHMpOwogICAgICAgICBsb25nIGluc3BlY3RlZE5vZGUoaW4gdW5z
aWduZWQgbG9uZyBudW0pOwogICAgICAgICBbQ3VzdG9tXSBET01PYmplY3QgaW50ZXJuYWxDb25z
dHJ1Y3Rvck5hbWUoaW4gRE9NT2JqZWN0IG9iamVjdCk7CiAKQEAgLTQ1LDExICs0NSwxMSBAQCBt
b2R1bGUgY29yZSB7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoRU5BQkxFX0RBVEFCQVNFKSAmJiBF
TkFCTEVfREFUQUJBU0UKLSAgICAgICAgW0N1c3RvbV0gdm9pZCBzZWxlY3REYXRhYmFzZShpbiBE
T01PYmplY3QgZGF0YWJhc2UpOworICAgICAgICBbQ3VzdG9tXSBsb25nIGRhdGFiYXNlSWQoaW4g
RE9NT2JqZWN0IGRhdGFiYXNlKTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChFTkFCTEVfRE9NX1NU
T1JBR0UpICYmIEVOQUJMRV9ET01fU1RPUkFHRQotICAgICAgICBbQ3VzdG9tXSB2b2lkIHNlbGVj
dERPTVN0b3JhZ2UoaW4gRE9NT2JqZWN0IHN0b3JhZ2UpOworICAgICAgICBbQ3VzdG9tXSBsb25n
IHN0b3JhZ2VJZChpbiBET01PYmplY3Qgc3RvcmFnZSk7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQo
RU5BQkxFX1dPUktFUlMpICYmIEVOQUJMRV9XT1JLRVJTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKaW5kZXggMGM3YTU2NGM1MDcxNDVjNmY5
YTE2OTgxOTc2YmUzM2I1NjNlOWYzMC4uNjRkNTU2NmMxNDVlZjkxYzEwZmE1ZDkzOTFiZTE5Mzkx
MjBiYWI5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0U291cmNlLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dFNvdXJjZS5qcwpAQCAtNTAsNyArNTAsNyBAQCB2YXIgSW5qZWN0ZWRTY3JpcHQgPSBmdW5jdGlv
bigpCiB9CiAKIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKLSAgICB3cmFwT2JqZWN0Rm9y
Q29uc29sZTogZnVuY3Rpb24ob2JqZWN0LCBjYW5BY2Nlc3NJbnNwZWN0ZWRXaW5kb3cpCisgICAg
d3JhcEZvckNvbnNvbGU6IGZ1bmN0aW9uKG9iamVjdCwgY2FuQWNjZXNzSW5zcGVjdGVkV2luZG93
KQogICAgIHsKICAgICAgICAgaWYgKGNhbkFjY2Vzc0luc3BlY3RlZFdpbmRvdykKICAgICAgICAg
ICAgIHJldHVybiB0aGlzLl93cmFwT2JqZWN0KG9iamVjdCwgImNvbnNvbGUiKTsKQEAgLTYwLDIz
ICs2MCw0NyBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfSwKIAorICAgIGluc3BlY3Q6IGZ1bmN0aW9uKG9iamVjdCkKKyAgICB7Cisg
ICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHZhciBvYmplY3RJZCA9IHRoaXMuX3dyYXBPYmplY3Qob2JqZWN0LCAiIiwgZmFs
c2UpOworICAgICAgICB2YXIgaGludHMgPSB7fTsKKworICAgICAgICBzd2l0Y2ggKGluamVjdGVk
U2NyaXB0Ll9kZXNjcmliZShvYmplY3QpKSB7CisgICAgICAgICAgICBjYXNlICJEYXRhYmFzZSI6
CisgICAgICAgICAgICAgICAgdmFyIGRhdGFiYXNlSWQgPSBJbmplY3RlZFNjcmlwdEhvc3QuZGF0
YWJhc2VJZChvYmplY3QpCisgICAgICAgICAgICAgICAgaWYgKGRhdGFiYXNlSWQpCisgICAgICAg
ICAgICAgICAgICAgIGhpbnRzLmRhdGFiYXNlSWQgPSBkYXRhYmFzZUlkOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiU3RvcmFnZSI6CisgICAgICAgICAgICAgICAg
dmFyIHN0b3JhZ2VJZCA9IEluamVjdGVkU2NyaXB0SG9zdC5zdG9yYWdlSWQob2JqZWN0KQorICAg
ICAgICAgICAgICAgIGlmIChzdG9yYWdlSWQpCisgICAgICAgICAgICAgICAgICAgIGhpbnRzLmRv
bVN0b3JhZ2VJZCA9IHN0b3JhZ2VJZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBJbmplY3RlZFNjcmlwdEhvc3QuaW5zcGVjdChvYmplY3RJZCwgaGludHMpOwor
ICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0sCisKICAgICBfd3JhcE9iamVjdDogZnVuY3Rp
b24ob2JqZWN0LCBvYmplY3RHcm91cE5hbWUsIGFiYnJldmlhdGUpCiAgICAgewogICAgICAgICB0
cnkgewotICAgICAgICAgICAgdmFyIG9iamVjdElkOwogICAgICAgICAgICAgaWYgKHR5cGVvZiBv
YmplY3QgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBvYmplY3QgPT09ICJmdW5jdGlvbiIgfHwgdGhp
cy5faXNIVE1MQWxsQ29sbGVjdGlvbihvYmplY3QpKSB7CiAgICAgICAgICAgICAgICAgdmFyIGlk
ID0gdGhpcy5fbGFzdEJvdW5kT2JqZWN0SWQrKzsKICAgICAgICAgICAgICAgICB0aGlzLl9pZFRv
V3JhcHBlZE9iamVjdFtpZF0gPSBvYmplY3Q7CisgICAgICAgICAgICAgICAgdmFyIG9iamVjdElk
ID0geyBpbmplY3RlZFNjcmlwdElkOiBpbmplY3RlZFNjcmlwdElkLCBpZDogaWQgfTsKICAgICAK
LSAgICAgICAgICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLl9vYmplY3RHcm91cHNbb2JqZWN0R3Jv
dXBOYW1lXTsKLSAgICAgICAgICAgICAgICBpZiAoIWdyb3VwKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGdyb3VwID0gW107Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX29iamVjdEdyb3Vwc1tv
YmplY3RHcm91cE5hbWVdID0gZ3JvdXA7CisgICAgICAgICAgICAgICAgaWYgKG9iamVjdEdyb3Vw
TmFtZSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLl9vYmplY3RHcm91
cHNbb2JqZWN0R3JvdXBOYW1lXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFncm91cCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX29iamVjdEdyb3Vwc1tvYmplY3RHcm91cE5hbWVdID0gZ3JvdXA7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZ3JvdXAucHVzaChpZCk7CisgICAg
ICAgICAgICAgICAgICAgIG9iamVjdElkLmdyb3VwTmFtZSA9IG9iamVjdEdyb3VwTmFtZTsKICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZ3JvdXAucHVzaChpZCk7Ci0gICAgICAg
ICAgICAgICAgb2JqZWN0SWQgPSB7IGluamVjdGVkU2NyaXB0SWQ6IGluamVjdGVkU2NyaXB0SWQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpZCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3JvdXBOYW1lOiBvYmplY3RHcm91cE5hbWUgfTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QuZnJvbU9iamVj
dChvYmplY3QsIG9iamVjdElkLCBhYmJyZXZpYXRlKTsKICAgICAgICAgfSBjYXRjaCAoZSkgewpA
QCAtMTgxLDYgKzIwNSwxMiBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAg
IH0KICAgICB9LAogCisgICAgcmVsZWFzZU9iamVjdDogZnVuY3Rpb24ob2JqZWN0SWQpCisgICAg
eworICAgICAgICB2YXIgcGFyc2VkT2JqZWN0SWQgPSB0aGlzLl9wYXJzZU9iamVjdElkKG9iamVj
dElkKTsKKyAgICAgICAgZGVsZXRlIHRoaXMuX2lkVG9XcmFwcGVkT2JqZWN0W3BhcnNlZE9iamVj
dElkLmlkXTsKKyAgICB9LAorCiAgICAgX3BvcHVsYXRlUHJvcGVydHlOYW1lczogZnVuY3Rpb24o
b2JqZWN0LCByZXN1bHRTZXQpCiAgICAgewogICAgICAgICBmb3IgKHZhciBvID0gb2JqZWN0OyBv
OyBvID0gby5fX3Byb3RvX18pIHsKQEAgLTQ5OSw3ICs1MjksNyBAQCBJbmplY3RlZFNjcmlwdC5S
ZW1vdGVPYmplY3QuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKG9iamVjdCwgb2JqZWN0SWQsIGFiYnJl
dmlhdGUpCiB7CiAgICAgdmFyIHR5cGUgPSBpbmplY3RlZFNjcmlwdC5fdHlwZShvYmplY3QpOwog
ICAgIHZhciByYXdUeXBlID0gdHlwZW9mIG9iamVjdDsKLSAgICB2YXIgaGFzQ2hpbGRyZW4gPSAo
cmF3VHlwZSA9PT0gIm9iamVjdCIgJiYgb2JqZWN0ICE9PSBudWxsICYmIChPYmplY3QuZ2V0T3du
UHJvcGVydHlOYW1lcyhvYmplY3QpLmxlbmd0aCB8fCAhIW9iamVjdC5fX3Byb3RvX18pKSB8fCBy
YXdUeXBlID09PSAiZnVuY3Rpb24iOworICAgIHZhciBoYXNDaGlsZHJlbiA9IChyYXdUeXBlID09
PSAib2JqZWN0IiAmJiBvYmplY3QgIT09IG51bGwgJiYgKCEhT2JqZWN0LmdldE93blByb3BlcnR5
TmFtZXMob2JqZWN0KS5sZW5ndGggfHwgISFvYmplY3QuX19wcm90b19fKSkgfHwgcmF3VHlwZSA9
PT0gImZ1bmN0aW9uIjsKICAgICB2YXIgZGVzY3JpcHRpb24gPSAiIjsKICAgICB0cnkgewogICAg
ICAgICB2YXIgZGVzY3JpcHRpb24gPSBpbmplY3RlZFNjcmlwdC5fZGVzY3JpYmUob2JqZWN0LCBh
YmJyZXZpYXRlKTsKQEAgLTY4NiwyMiArNzE2LDcgQEAgQ29tbWFuZExpbmVBUElJbXBsLnByb3Rv
dHlwZSA9IHsKIAogICAgIGluc3BlY3Q6IGZ1bmN0aW9uKG9iamVjdCkKICAgICB7Ci0gICAgICAg
IGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIGluc3BlY3RlZFdpbmRvdy5jb25zb2xlLmxvZyhvYmplY3QpOwotICAgICAgICBpZiAoaW5q
ZWN0ZWRTY3JpcHQuX3R5cGUob2JqZWN0KSA9PT0gIm5vZGUiKQotICAgICAgICAgICAgSW5qZWN0
ZWRTY3JpcHRIb3N0Lmluc3BlY3Qob2JqZWN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGluamVjdGVkU2NyaXB0Ll9kZXNjcmliZShvYmplY3QpKSB7Ci0gICAgICAgICAg
ICAgICAgY2FzZSAiRGF0YWJhc2UiOgotICAgICAgICAgICAgICAgICAgICBJbmplY3RlZFNjcmlw
dEhvc3Quc2VsZWN0RGF0YWJhc2Uob2JqZWN0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSAiU3RvcmFnZSI6Ci0gICAgICAgICAgICAgICAgICAgIElu
amVjdGVkU2NyaXB0SG9zdC5zZWxlY3RET01TdG9yYWdlKG9iamVjdCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIHJldHVybiBp
bmplY3RlZFNjcmlwdC5pbnNwZWN0KG9iamVjdCk7CiAgICAgfSwKIAogICAgIGNvcHk6IGZ1bmN0
aW9uKG9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3IuaWRsIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKaW5kZXggZjBj
MGNmMjdjM2E2ODU0YWJjMGMwOTgxYjhkMzc5ZTdlODZjZDQxYy4uNzU2Y2E1MjQ5MzI4NWQ0Mzg3
OTBhNGRlY2JiMGVkMTEyNGMwMzRiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ci5pZGwKQEAgLTYxLDYgKzYxLDggQEAgbW9kdWxlIGNvcmUgewogICAgICAgICB2b2lkIGdldENv
b2tpZXMob3V0IEFycmF5IGNvb2tpZXMsIG91dCBTdHJpbmcgY29va2llc1N0cmluZyk7CiAgICAg
ICAgIHZvaWQgZGVsZXRlQ29va2llKGluIFN0cmluZyBjb29raWVOYW1lLCBpbiBTdHJpbmcgZG9t
YWluKTsKIAorICAgICAgICBbZXZlbnRdIHZvaWQgaW5zcGVjdChvdXQgT2JqZWN0IG9iamVjdElk
LCBvdXQgT2JqZWN0IGhpbnRzKTsKKwogICAgICAgICAvLyBGSVhNRTogZGlzcGF0Y2ggb24gYWdl
bnRzLgogI2lmIGRlZmluZWQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJMRV9K
QVZBU0NSSVBUX0RFQlVHR0VSCiAgICAgICAgIHZvaWQgZW5hYmxlRGVidWdnZXIoKTsKQEAgLTc3
LDYgKzc5LDcgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICB2b2lkIGdldENvbXBsZXRpb25zKGlu
IFN0cmluZyBleHByZXNzaW9uLCBpbiBib29sZWFuIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgb3V0
IFZhbHVlIHJlc3VsdCk7CiAgICAgICAgIHZvaWQgZ2V0UHJvcGVydGllcyhpbiBPYmplY3Qgb2Jq
ZWN0SWQsIGluIGJvb2xlYW4gaWdub3JlSGFzT3duUHJvcGVydHksIGluIGJvb2xlYW4gYWJicmV2
aWF0ZSwgb3V0IFZhbHVlIHJlc3VsdCk7CiAgICAgICAgIHZvaWQgc2V0UHJvcGVydHlWYWx1ZShp
biBPYmplY3Qgb2JqZWN0SWQsIGluIFN0cmluZyBwcm9wZXJ0eU5hbWUsIGluIFN0cmluZyBleHBy
ZXNzaW9uLCBvdXQgVmFsdWUgcmVzdWx0KTsKKyAgICAgICAgdm9pZCByZWxlYXNlT2JqZWN0KGlu
IE9iamVjdCBvYmplY3RJZCk7CiAgICAgICAgIHZvaWQgcmVsZWFzZVdyYXBwZXJPYmplY3RHcm91
cChpbiBsb25nIGluamVjdGVkU2NyaXB0SWQsIGluIFN0cmluZyBvYmplY3RHcm91cCk7CiAgICAg
fTsKIApAQCAtMTE4LDcgKzEyMSw2IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgdm9pZCBleGVj
dXRlU1FMKGluIGxvbmcgZGF0YWJhc2VJZCwgaW4gU3RyaW5nIHF1ZXJ5LCBvdXQgYm9vbGVhbiBz
dWNjZXNzLCBvdXQgbG9uZyB0cmFuc2FjdGlvbklkKTsKIAogICAgICAgICBbZXZlbnRdIHZvaWQg
YWRkRGF0YWJhc2Uob3V0IE9iamVjdCBkYXRhYmFzZSk7Ci0gICAgICAgIFtldmVudF0gdm9pZCBz
ZWxlY3REYXRhYmFzZShvdXQgaW50IGRhdGFiYXNlSWQpOwogICAgICAgICBbZXZlbnRdIHZvaWQg
c3FsVHJhbnNhY3Rpb25TdWNjZWVkZWQob3V0IGxvbmcgdHJhbnNhY3Rpb25JZCwgb3V0IFZhbHVl
IGNvbHVtbk5hbWVzLCBvdXQgVmFsdWUgdmFsdWVzKTsKICAgICAgICAgW2V2ZW50XSB2b2lkIHNx
bFRyYW5zYWN0aW9uRmFpbGVkKG91dCBsb25nIHRyYW5zYWN0aW9uSWQsIG91dCBWYWx1ZSBzcWxF
cnJvcik7CiAgICAgfTsKQEAgLTEzMSw3ICsxMzMsNiBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAg
IHZvaWQgcmVtb3ZlRE9NU3RvcmFnZUl0ZW0oaW4gbG9uZyBzdG9yYWdlSWQsIGluIFN0cmluZyBr
ZXksIG91dCBib29sZWFuIHN1Y2Nlc3MpOwogICAgICAgICBbZXZlbnRdIHZvaWQgYWRkRE9NU3Rv
cmFnZShvdXQgT2JqZWN0IHN0b3JhZ2UpOwogICAgICAgICBbZXZlbnRdIHZvaWQgdXBkYXRlRE9N
U3RvcmFnZShvdXQgaW50IHN0b3JhZ2VJZCk7Ci0gICAgICAgIFtldmVudF0gdm9pZCBzZWxlY3RE
T01TdG9yYWdlKG91dCBpbnQgc3RvcmFnZUlkKTsKICAgICB9OwogI2VuZGlmCiAKQEAgLTE3MSw3
ICsxNzIsNiBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtldmVudF0gdm9pZCBjaGlsZE5vZGVD
b3VudFVwZGF0ZWQob3V0IGxvbmcgaWQsIG91dCBpbnQgbmV3VmFsdWUpOwogICAgICAgICBbZXZl
bnRdIHZvaWQgY2hpbGROb2RlSW5zZXJ0ZWQob3V0IGxvbmcgcGFyZW50SWQsIG91dCBsb25nIHBy
ZXZJZCwgb3V0IE9iamVjdCBub2RlKTsKICAgICAgICAgW2V2ZW50XSB2b2lkIGNoaWxkTm9kZVJl
bW92ZWQob3V0IGxvbmcgcGFyZW50SWQsIG91dCBsb25nIGlkKTsKLSAgICAgICAgW2V2ZW50XSB2
b2lkIGluc3BlY3RFbGVtZW50UmVxdWVzdGVkKG91dCBsb25nIG5vZGVJZCk7CiAgICAgfTsKIAog
ICAgIGludGVyZmFjZSBbQ29uZGl0aW9uYWw9SU5TUEVDVE9SXSBDU1MgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAKaW5kZXggM2NiNzdkMGZmNjM5MTE3ZjFk
MjQ4ZjJiZTBjYzRkMjAyYjkzN2U3NS4uOTM4OGM2ZmRhMTUwZWU2ZjJhNTM0MDFhZTk0YTc3NmEz
OTY3MDcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3Bw
CkBAIC0yMzMsOCArMjMzLDIxIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmZvY3VzTm9kZSgpCiAg
ICAgQVNTRVJUKG1fZnJvbnRlbmQpOwogICAgIEFTU0VSVChtX25vZGVUb0ZvY3VzKTsKIAotICAg
IG1fZG9tQWdlbnQtPmluc3BlY3QobV9ub2RlVG9Gb2N1cy5nZXQoKSk7CisgICAgUmVmUHRyPE5v
ZGU+IG5vZGUgPSBtX25vZGVUb0ZvY3VzLmdldCgpOwogICAgIG1fbm9kZVRvRm9jdXMgPSAwOwor
CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbm9kZS0+b3duZXJEb2N1bWVudCgpOworICAgIGlm
ICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVu
dC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBJbmpl
Y3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5pbmplY3Rl
ZFNjcmlwdEZvcihtYWluV29ybGRTY3JpcHRTdGF0ZShmcmFtZSkpOworICAgIGlmIChpbmplY3Rl
ZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGluamVjdGVkU2Ny
aXB0Lmluc3BlY3Qobm9kZS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmhpZ2hs
aWdodChOb2RlKiBub2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHAKaW5kZXggY2Y2ZmMxMTJjODZmMDNlNjRiOGQxOGEyNTk5YjFkMWVkZjY3OTll
MS4uY2NjMmUzYjY1MDI0NDcwZDVkNGY3MzU1N2Q1YmIzYzNjNDRmMTlkMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC0zODAsMTYgKzM4
MCw2IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChs
b25nIG5vZGVJZCkKICAgICBtX2Zyb250ZW5kLT5zZXRDaGlsZE5vZGVzKG5vZGVJZCwgY2hpbGRy
ZW4ucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aW5zcGVjdChOb2Rl
KiBub2RlKQotewotICAgIGlmICghbV9mcm9udGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bG9uZyBpZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSk7Ci0gICAgaWYgKGlkKQotICAg
ICAgICBtX2Zyb250ZW5kLT5pbnNwZWN0RWxlbWVudFJlcXVlc3RlZChpZCk7Ci19Ci0KIGxvbmcg
SW5zcGVjdG9yRE9NQWdlbnQ6Omluc3BlY3RlZE5vZGUodW5zaWduZWQgbG9uZyBudW0pCiB7CiAg
ICAgaWYgKG51bSA8IG1faW5zcGVjdGVkTm9kZXMuc2l6ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCBmYjQ5ZTE2NWE1ZGIyNjY0ODQ3OGVi
YTRjNzUwNTkyMGIyYTZjYTkyLi4xNzliMGU4NjRhNWE5NTZjZmYwODYxMGUxM2E3OWZjMzBlZmYx
N2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApA
QCAtMTM0LDcgKzEzNCw2IEBAIHB1YmxpYzoKICAgICBsb25nIHB1c2hOb2RlUGF0aFRvRnJvbnRl
bmQoTm9kZSopOwogICAgIHZvaWQgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKGxvbmcgbm9kZUlk
KTsKICAgICB2b2lkIHB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHBhdGgs
IGxvbmcqIG5vZGVJZCk7Ci0gICAgdm9pZCBpbnNwZWN0KE5vZGUqKTsKICAgICBsb25nIGluc3Bl
Y3RlZE5vZGUodW5zaWduZWQgbG9uZyBudW0pOwogICAgIHZvaWQgY29weU5vZGUobG9uZyBub2Rl
SWQpOwogICAgIHZvaWQgc2V0RE9NTGlzdGVuZXIoRE9NTGlzdGVuZXIqKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKaW5k
ZXggNWMxODZiODdjNjY0Yjg2OTUyMTQ5Y2IyYmExYTcxY2E5YzJiMzllOS4uOTAyYjIzMzEzODk4
MDQ2YmZiMmRjNjBmYzZhOWQ0OWU0MzAyM2NhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKQEAgLTExNSwyNSArMTE1
LDE4IEBAIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpyZW1vdmVET01TdG9yYWdlSXRl
bShsb25nIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nCiAgICAgfQogfQogCi12b2lkIEluc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudDo6c2VsZWN0RE9NU3RvcmFnZShTdG9yYWdlKiBzdG9yYWdlKQorbG9u
ZyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChTdG9yYWdlKiBzdG9yYWdlKQog
ewogICAgIEFTU0VSVChzdG9yYWdlKTsKLSAgICBpZiAoIW1fZnJvbnRlbmQpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIEZyYW1lKiBmcmFtZSA9IHN0b3JhZ2UtPmZyYW1lKCk7CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgYm9vbCBpc0xvY2FsU3RvcmFnZSA9IChmcmFtZS0+ZG9tV2lu
ZG93KCktPmxvY2FsU3RvcmFnZShlYykgPT0gc3RvcmFnZSAmJiAhZWMpOwotICAgIGxvbmcgc3Rv
cmFnZVJlc291cmNlSWQgPSAwOwogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9y
IGRvbVN0b3JhZ2VFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERPTVN0b3JhZ2VS
ZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9t
U3RvcmFnZUVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aXNTYW1lSG9zdEFu
ZFR5cGUoZnJhbWUsIGlzTG9jYWxTdG9yYWdlKSkgewotICAgICAgICAgICAgc3RvcmFnZVJlc291
cmNlSWQgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAg
ICBpZiAoaXQtPnNlY29uZC0+aXNTYW1lSG9zdEFuZFR5cGUoZnJhbWUsIGlzTG9jYWxTdG9yYWdl
KSkKKyAgICAgICAgICAgIHJldHVybiBpdC0+Zmlyc3Q7CiAgICAgfQotICAgIGlmIChzdG9yYWdl
UmVzb3VyY2VJZCkKLSAgICAgICAgbV9mcm9udGVuZC0+c2VsZWN0RE9NU3RvcmFnZShzdG9yYWdl
UmVzb3VyY2VJZCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNv
dXJjZSogSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJ
ZChsb25nIHN0b3JhZ2VJZCkKQEAgLTE0Nyw5ICsxNDAsMTAgQEAgSW5zcGVjdG9yRE9NU3RvcmFn
ZVJlc291cmNlKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VSZXNvdXJj
ZUZvckkKIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpkaWRVc2VET01TdG9yYWdlKFN0
b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqIGZyYW1l
KQogewogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQg
PSBtX3Jlc291cmNlcy5lbmQoKTsKLSAgICBmb3IgKERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytp
dCkKKyAgICBmb3IgKERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNv
dXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkgewogICAgICAgICBpZiAo
aXQtPnNlY29uZC0+aXNTYW1lSG9zdEFuZFR5cGUoZnJhbWUsIGlzTG9jYWxTdG9yYWdlKSkKICAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBSZWZQdHI8U3RvcmFnZT4gZG9tU3RvcmFn
ZSA9IFN0b3JhZ2U6OmNyZWF0ZShmcmFtZSwgc3RvcmFnZUFyZWEpOwogICAgIFJlZlB0cjxJbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2U+IHJlc291cmNlID0gSW5zcGVjdG9yRE9NU3RvcmFnZVJl
c291cmNlOjpjcmVhdGUoZG9tU3RvcmFnZS5nZXQoKSwgaXNMb2NhbFN0b3JhZ2UsIGZyYW1lKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQuaAppbmRleCA4NWZiOTVkZTdmZTA2Y2UzYTlhYmNmZjM2ZDg3Yzg1MWEzZjc3OWVmLi44NmVi
NTEwNGNlYzA4Y2IyZmM2NmViOTc3ZjJiNGFlNjk4YzRhODAwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oCkBAIC02Miw3ICs2
Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZURPTVN0b3JhZ2VJdGVtKGxvbmcgc3RvcmFn
ZUlkLCBjb25zdCBTdHJpbmcmIGtleSwgYm9vbCogc3VjY2Vzcyk7CiAKICAgICAvLyBDYWxsZWQg
ZnJvbSB0aGUgaW5qZWN0ZWQgc2NyaXB0LgotICAgIHZvaWQgc2VsZWN0RE9NU3RvcmFnZShTdG9y
YWdlKiBzdG9yYWdlKTsKKyAgICBsb25nIHN0b3JhZ2VJZChTdG9yYWdlKik7CiAKICAgICAvLyBD
YWxsZWQgZnJvbSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGRpZFVzZURPTVN0
b3JhZ2UoU3RvcmFnZUFyZWEqLCBib29sIGlzTG9jYWxTdG9yYWdlLCBGcmFtZSopOwpAQCAtNzMs
NyArNzMsNyBAQCBwcml2YXRlOgogICAgIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSogZ2V0
RE9NU3RvcmFnZVJlc291cmNlRm9ySWQobG9uZyBzdG9yYWdlSWQpOwogCiAgICAgSW5zdHJ1bWVu
dGluZ0FnZW50cyogbV9pbnN0cnVtZW50aW5nQWdlbnRzOwotICAgIHR5cGVkZWYgSGFzaE1hcDxp
bnQsIFJlZlB0cjxJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U+ID4gRE9NU3RvcmFnZVJlc291
cmNlc01hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8bG9uZywgUmVmUHRyPEluc3BlY3RvckRPTVN0
b3JhZ2VSZXNvdXJjZT4gPiBET01TdG9yYWdlUmVzb3VyY2VzTWFwOwogICAgIERPTVN0b3JhZ2VS
ZXNvdXJjZXNNYXAgbV9yZXNvdXJjZXM7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQqIG1fZnJvbnRl
bmQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TVN0b3JhZ2VSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NU3RvcmFnZVJlc291cmNlLmNwcAppbmRleCBjZmQ1ZjlmZDhiYTA1M2ZhNzNlMWNkYzE4OGFh
OTNlMmI5ZGM0ZDIxLi5iNjA3YTNkMzNiOTU4OWExNTg3YTAwNGE0Njk2ZDQ4NDhjYzViN2M0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJl
c291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3Rv
cmFnZVJlc291cmNlLmNwcApAQCAtNDYsNyArNDYsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWludCBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U6
OnNfbmV4dFVudXNlZElkID0gMTsKK2xvbmcgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOjpz
X25leHRVbnVzZWRJZCA9IDE7CiAKIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTo6SW5zcGVj
dG9yRE9NU3RvcmFnZVJlc291cmNlKFN0b3JhZ2UqIGRvbVN0b3JhZ2UsIGJvb2wgaXNMb2NhbFN0
b3JhZ2UsIEZyYW1lKiBmcmFtZSkKICAgICA6ICBFdmVudExpc3RlbmVyKEluc3BlY3RvckRPTVN0
b3JhZ2VSZXNvdXJjZVR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgKaW5kZXggZjA5NzViYTJmYzJiNzlhOWRiM2Ri
Yzk4NzkzNTA0MDM2Y2Y1MzRlNy4uMWQ4ZjkyMjZhOTZlZjVmNWY0NzM3ZGZjZjU3OWFhOGIxODMx
MWJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0
b3JhZ2VSZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01TdG9yYWdlUmVzb3VyY2UuaApAQCAtNzYsMTAgKzc2LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgYm9vbCBtX2lzTG9jYWxTdG9yYWdlOwogICAgICAgICBSZWZQdHI8RnJhbWU+
IG1fZnJhbWU7CiAgICAgICAgIEluc3BlY3RvckZyb250ZW5kKiBtX2Zyb250ZW5kOwotICAgICAg
ICBpbnQgbV9pZDsKKyAgICAgICAgbG9uZyBtX2lkOwogICAgICAgICBib29sIG1fcmVwb3J0aW5n
Q2hhbmdlc1RvRnJvbnRlbmQ7CiAKLSAgICAgICAgc3RhdGljIGludCBzX25leHRVbnVzZWRJZDsK
KyAgICAgICAgc3RhdGljIGxvbmcgc19uZXh0VW51c2VkSWQ7CiAgICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRhdGFiYXNlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRhdGFiYXNlQWdlbnQuY3BwCmluZGV4IDM3ZmYwYWVkZjQ1ODk1YTliMjcxODhkNmQ2Yzk5Yzkz
MTY5NTk2MzguLjY3MGUwMGJiMDA5MzFlZTA1MjU0YjAwMzRkYTllYjVhOTE3OWQ4ZDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5j
cHAKQEAgLTI4Niw2ICsyODYsMTUgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpleGVj
dXRlU1FMKGxvbmcgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgYm8KICAgICAqc3Vj
Y2VzcyA9IHRydWU7CiB9CiAKK2xvbmcgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VJ
ZChEYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6
aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX3Jlc291cmNlcy5lbmQo
KTsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnNlY29uZC0+ZGF0YWJhc2UoKSA9PSBkYXRhYmFz
ZSkKKyAgICAgICAgICAgIHJldHVybiBpdC0+Zmlyc3Q7CisgICAgfQorICAgIHJldHVybiAwOwor
fQorCiBEYXRhYmFzZSogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VGb3JJZChsb25n
IGRhdGFiYXNlSWQpCiB7CiAgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9yZXNvdXJjZXMuZmluZChkYXRhYmFzZUlkKTsKQEAgLTI5NCwxOSArMzAzLDYgQEAgRGF0YWJh
c2UqIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlRm9ySWQobG9uZyBkYXRhYmFzZUlk
KQogICAgIHJldHVybiBpdC0+c2Vjb25kLT5kYXRhYmFzZSgpOwogfQogCi12b2lkIEluc3BlY3Rv
ckRhdGFiYXNlQWdlbnQ6OnNlbGVjdERhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSkKLXsKLSAg
ICBpZiAoIW1fZnJvbnRlbmRQcm92aWRlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChE
YXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBp
dCAhPSBtX3Jlc291cmNlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+
ZGF0YWJhc2UoKSA9PSBkYXRhYmFzZSkgewotICAgICAgICAgICAgbV9mcm9udGVuZFByb3ZpZGVy
LT5mcm9udGVuZCgpLT5zZWxlY3REYXRhYmFzZShpdC0+Zmlyc3QpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpICYmIEVOQUJMRShEQVRBQkFTRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCmluZGV4IGRmYjA1
MTAyZWM5YWNiOTBmZWU5NWI5YTM0Mjg0MDBlZmFiMzkwZWMuLjQxNDNiNGU2ZGU5M2Y1ZjFhNDNm
ZGNiZWQzOTQxMDI3ZTI0ZjZkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaApAQCAtNjEsMTMgKzYxLDE0IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGV4ZWN1dGVTUUwobG9uZyBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBi
b29sKiBzdWNjZXNzLCBsb25nKiB0cmFuc2FjdGlvbklkKTsKIAogICAgIC8vIENhbGxlZCBmcm9t
IHRoZSBpbmplY3RlZCBzY3JpcHQuCi0gICAgRGF0YWJhc2UqIGRhdGFiYXNlRm9ySWQobG9uZyBk
YXRhYmFzZUlkKTsKLSAgICB2b2lkIHNlbGVjdERhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSk7
CisgICAgbG9uZyBkYXRhYmFzZUlkKERhdGFiYXNlKik7CiAKICAgICB2b2lkIGRpZE9wZW5EYXRh
YmFzZShQYXNzUmVmUHRyPERhdGFiYXNlPiwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKIHByaXZhdGU6CiAgICAgZXhwbGlj
aXQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKik7CiAKKyAgICBE
YXRhYmFzZSogZGF0YWJhc2VGb3JJZChsb25nIGRhdGFiYXNlSWQpOworCiAgICAgSW5zdHJ1bWVu
dGluZ0FnZW50cyogbV9pbnN0cnVtZW50aW5nQWdlbnRzOwogICAgIHR5cGVkZWYgSGFzaE1hcDxp
bnQsIFJlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlPiA+IERhdGFiYXNlUmVzb3VyY2Vz
TWFwOwogICAgIERhdGFiYXNlUmVzb3VyY2VzTWFwIG1fcmVzb3VyY2VzOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwCmlu
ZGV4IGUyZDJmODFkYzE0N2ZjMGI2ZGQ1NWUxZjBlYTBiMzc5NmMyOWFlMzYuLjgyOWQwZmM3Mzgz
YjM4OWUyMzlhZGY0NGFlOTg1NDQ3NGJiZjUzNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAKQEAgLTM4LDcgKzM4
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgaW50IG5leHRVbnVzZWRJZCA9
IDE7CitzdGF0aWMgbG9uZyBuZXh0VW51c2VkSWQgPSAxOwogCiBQYXNzUmVmUHRyPEluc3BlY3Rv
ckRhdGFiYXNlUmVzb3VyY2U+IEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U6OmNyZWF0ZShQYXNz
UmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQogewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgKaW5kZXggMjRkNGYx
YzZlYWFiOWRlMzUwOGViMDE2MmEwZTRhODRjNmYyN2MyMS4uZGJhMTE2YTAxYzhjMzZiZDVjZjhh
N2Q2ZjJlYTU2MGM5Y2JhMjVmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oCkBAIC00OCwxMSArNDgsMTIgQEAgcHVibGlj
OgogICAgIHZvaWQgYmluZChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpOwogICAgIERhdGFi
YXNlKiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0KICAgICBsb25nIGlk
KCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorCiBwcml2YXRlOgogICAgIEluc3BlY3RvckRhdGFi
YXNlUmVzb3VyY2UoUGFzc1JlZlB0cjxEYXRhYmFzZT4sIGNvbnN0IFN0cmluZyYgZG9tYWluLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CiAKICAgICBSZWZQdHI8
RGF0YWJhc2U+IG1fZGF0YWJhc2U7Ci0gICAgaW50IG1faWQ7CisgICAgbG9uZyBtX2lkOwogICAg
IFN0cmluZyBtX2RvbWFpbjsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFN0cmluZyBtX3ZlcnNp
b247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUnVudGlt
ZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSdW50aW1lQWdl
bnQuY3BwCmluZGV4IDc5MzhhZmRjNzc4NDE3MWY5YzkxZmIxYzY3NzAxYmJiZWFkZWM1ODEuLmQ4
MDRiZDdhZTQxMmNhMDA2MWU0NTI1ODk5YTMzNzQ2Y2FkMzZiYzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCkBAIC03Myw2ICs3
MywxMyBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6c2V0UHJvcGVydHlWYWx1ZShQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0SQogICAgICAgICBpbmplY3RlZFNjcmlwdC5z
ZXRQcm9wZXJ0eVZhbHVlKG9iamVjdElkLCBwcm9wZXJ0eU5hbWUsIGV4cHJlc3Npb24sIHJlc3Vs
dCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpyZWxlYXNlT2JqZWN0KFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3RJZCkKK3sKKyAgICBJbmplY3RlZFNjcmlwdCBp
bmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5pbmplY3RlZFNjcmlwdEZvck9i
amVjdElkKG9iamVjdElkLmdldCgpKTsKKyAgICBpZiAoIWluamVjdGVkU2NyaXB0Lmhhc05vVmFs
dWUoKSkKKyAgICAgICAgaW5qZWN0ZWRTY3JpcHQucmVsZWFzZU9iamVjdChvYmplY3RJZCk7Cit9
CisKIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpyZWxlYXNlV3JhcHBlck9iamVjdEdyb3Vw
KGxvbmcgaW5qZWN0ZWRTY3JpcHRJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsKICAg
ICBtX2luamVjdGVkU2NyaXB0SG9zdC0+cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChpbmplY3Rl
ZFNjcmlwdElkLCBvYmplY3RHcm91cCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUnVudGltZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUnVudGltZUFnZW50LmgKaW5kZXggOWZiMjcxNmZmZjMzNTI4NmYzN2QxY2EzNjRk
M2ZkNTI1MjAwNjEzNS4uZGQ1ZGJmZDQwY2I2ZDUyYzFhZjY2OGRhOTlhNTE4YzhhYjBmOGM0NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSdW50aW1lQWdlbnQu
aApAQCAtNjEsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRDb21wbGV0aW9ucyhjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24sIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOwogICAgIHZvaWQgZ2V0UHJvcGVydGllcyhQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0SWQsIGJvb2wgaWdub3JlSGFzT3duUHJvcGVydHks
IGJvb2wgYWJicmV2aWF0ZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKICAgICB2
b2lkIHNldFByb3BlcnR5VmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdElk
LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOworICAgIHZvaWQgcmVsZWFzZU9iamVjdChQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0SWQpOwogICAgIHZvaWQgcmVsZWFzZVdy
YXBwZXJPYmplY3RHcm91cChsb25nIGluamVjdGVkU2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0R3JvdXApOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9BdWRpdFJ1bGVzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9BdWRpdFJ1bGVzLmpzCmluZGV4IDA3ZGZkNWJmMTc4ZDY2NGYwYmQ2YjE1NjNhYzkz
ZDA0Y2ViMjY0MzcuLmJkY2NiZmUxODM4YTNhYTY3MmE2YjM1ZDdiOTI0NzQzNmNjNTVkNTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRSdWxlcy5q
cworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVsZXMuanMK
QEAgLTcyLDcgKzcyLDcgQEAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuZXZhbHVhdGVJblRhcmdl
dFdpbmRvdyA9IGZ1bmN0aW9uKGZ1bmMsIGFyZ3MsIGNhbGxiYWNrKQogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBjYWxsYmFjayhudWxsKTsKICAgICB9Ci0gICAgUnVudGltZUFnZW50LmV2YWx1
YXRlKCJKU09OLnN0cmluZ2lmeSgoIiArIGZ1bmMgKyAiKSgiICsgSlNPTi5zdHJpbmdpZnkoYXJn
cykgKyAiKSkiLCAibm9uZSIsIGZhbHNlLCBteWNhbGxiYWNrKTsKKyAgICBSdW50aW1lQWdlbnQu
ZXZhbHVhdGUoIkpTT04uc3RyaW5naWZ5KCgiICsgZnVuYyArICIpKCIgKyBKU09OLnN0cmluZ2lm
eShhcmdzKSArICIpKSIsICIiLCBmYWxzZSwgbXljYWxsYmFjayk7CiB9CiAKIFdlYkluc3BlY3Rv
ci5BdWRpdFJ1bGVzLkd6aXBSdWxlID0gZnVuY3Rpb24oKQpAQCAtNzUwLDcgKzc1MCw3IEBAIFdl
Ykluc3BlY3Rvci5BdWRpdFJ1bGVzLkltYWdlRGltZW5zaW9uc1J1bGUucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgaWYgKCFwYXlsb2FkKQogICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFj
ayhudWxsKTsKIAotICAgICAgICAgICAgdmFyIG5vZGVJZHNBcnJheSA9IFdlYkluc3BlY3Rvci5S
ZW1vdGVPYmplY3QuZnJvbVBheWxvYWQocGF5bG9hZCkKKyAgICAgICAgICAgIHZhciBub2RlSWRz
QXJyYXkgPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkKHBheWxvYWQpOwog
ICAgICAgICAgICAgbm9kZUlkc0FycmF5LmdldE93blByb3BlcnRpZXMoZmFsc2UsIHJlY2VpdmVk
SW1hZ2VzKTsKICAgICAgICAgfQogCkBAIC03NjYsNyArNzY2LDcgQEAgV2ViSW5zcGVjdG9yLkF1
ZGl0UnVsZXMuSW1hZ2VEaW1lbnNpb25zUnVsZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAKLSAgICAgICAgUnVudGltZUFnZW50LmV2YWx1YXRl
KCIoIiArIHB1c2hJbWFnZU5vZGVzICsgIikoKSIsICJub25lIiwgZmFsc2UsIHJlY2VpdmVkSW1h
Z2VzQXJyYXkpOworICAgICAgICBSdW50aW1lQWdlbnQuZXZhbHVhdGUoIigiICsgcHVzaEltYWdl
Tm9kZXMgKyAiKSgpIiwgIiIsIGZhbHNlLCByZWNlaXZlZEltYWdlc0FycmF5KTsKICAgICB9CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NU3Rv
cmFnZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NU3RvcmFnZS5q
cwppbmRleCA2ZWU4OTlmNDZhYjViMTc5OTVhYmU2NjJjOTgyNmRlZWJhNzM2OTNhLi5lYTI0OTIx
ZjZkMTZlZWE1NjBkMTIyMTljZTI3ZjE0YThiMjU4MzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTVN0b3JhZ2UuanMKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01TdG9yYWdlLmpzCkBAIC04MiwxMiArODIsNiBAQCBX
ZWJJbnNwZWN0b3IuRE9NU3RvcmFnZURpc3BhdGNoZXIucHJvdG90eXBlID0gewogICAgICAgICBX
ZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcy5hZGRET01TdG9yYWdlKGRvbVN0b3JhZ2UpOwog
ICAgIH0sCiAKLSAgICBzZWxlY3RET01TdG9yYWdlOiBmdW5jdGlvbihvKQotICAgIHsKLSAgICAg
ICAgV2ViSW5zcGVjdG9yLnNob3dQYW5lbCgicmVzb3VyY2VzIik7Ci0gICAgICAgIFdlYkluc3Bl
Y3Rvci5wYW5lbHMucmVzb3VyY2VzLnNlbGVjdERPTVN0b3JhZ2Uobyk7Ci0gICAgfSwKLQogICAg
IHVwZGF0ZURPTVN0b3JhZ2U6IGZ1bmN0aW9uKHN0b3JhZ2VJZCkKICAgICB7CiAgICAgICAgIFdl
Ykluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzLnVwZGF0ZURPTVN0b3JhZ2Uoc3RvcmFnZUlkKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2Uu
anMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlLmpzCmluZGV4
IDcyY2M1OTE5YjExOTY2Y2IwNDZmYjk0NWNlYjViNjkxMTQ2NjgzZmQuLmU0YmFmZWE4MmZiOGZm
Y2E5YjAzM2FlZmE1NWQyZjk0NWY3OTJhNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2UuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9EYXRhYmFzZS5qcwpAQCAtMTE1LDEyICsxMTUsNiBAQCBXZWJJbnNwZWN0
b3IuRGF0YWJhc2VEaXNwYXRjaGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgV2ViSW5zcGVjdG9y
LnBhbmVscy5yZXNvdXJjZXMuYWRkRGF0YWJhc2UoZGF0YWJhc2UpOwogICAgIH0sCiAKLSAgICBz
ZWxlY3REYXRhYmFzZTogZnVuY3Rpb24obykKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5z
aG93UGFuZWwoInJlc291cmNlcyIpOwotICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291
cmNlcy5zZWxlY3REYXRhYmFzZShvKTsKLSAgICB9LAotCiAgICAgc3FsVHJhbnNhY3Rpb25TdWNj
ZWVkZWQ6IGZ1bmN0aW9uKHRyYW5zYWN0aW9uSWQsIGNvbHVtbk5hbWVzLCB2YWx1ZXMpCiAgICAg
ewogICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5EYXRhYmFzZURpc3BhdGNoZXIuX2NhbGxiYWNr
c1t0cmFuc2FjdGlvbklkXSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRXh0ZW5zaW9uU2VydmVyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanMKaW5kZXggY2EyZTg1NjgxMGM0NGZmZmQ2M2U3Yzlh
M2IxNDM2OGZiYzdiN2FjMy4uODAzZDk1ODliYTdhNGVhYjcyN2RjMDdmNjFjZWQ2YzQyZWQ1ZDFh
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNp
b25TZXJ2ZXIuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRl
bnNpb25TZXJ2ZXIuanMKQEAgLTI3Miw3ICsyNzIsNyBAQCBXZWJJbnNwZWN0b3IuRXh0ZW5zaW9u
U2VydmVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoQ2FsbGJhY2so
bWVzc2FnZS5yZXF1ZXN0SWQsIHBvcnQsIHJlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgdmFy
IGV2YWxFeHByZXNzaW9uID0gIkpTT04uc3RyaW5naWZ5KGV2YWwodW5lc2NhcGUoJyIgKyBlc2Nh
cGUobWVzc2FnZS5leHByZXNzaW9uKSArICInKSkpOyI7Ci0gICAgICAgIFJ1bnRpbWVBZ2VudC5l
dmFsdWF0ZShldmFsRXhwcmVzc2lvbiwgIm5vbmUiLCB0cnVlLCBjYWxsYmFjay5iaW5kKHRoaXMp
KTsKKyAgICAgICAgUnVudGltZUFnZW50LmV2YWx1YXRlKGV2YWxFeHByZXNzaW9uLCAiIiwgdHJ1
ZSwgY2FsbGJhY2suYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIF9vblJldmVhbEFuZFNlbGVj
dDogZnVuY3Rpb24obWVzc2FnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggNGViOWE3MGYyMjU1ZWJlMTYyMGM4ZGVkOTI0ODQ4OTdl
OWQwMGY1MS4uOTEyNWUxNDI4ZDg4ZGRiNWUzMDAyZThiYzk0MGVlMTY1OGQ4YjJlOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTEy
NDAsNiArMTI0MCwyMyBAQCBXZWJJbnNwZWN0b3IuZHJhd0xvYWRpbmdQaWVDaGFydCA9IGZ1bmN0
aW9uKGNhbnZhcywgcGVyY2VudCkgewogICAgIGcuZmlsbCgpOwogfQogCitXZWJJbnNwZWN0b3Iu
aW5zcGVjdCA9IGZ1bmN0aW9uKG9iamVjdElkLCBoaW50cykKK3sKKyAgICB2YXIgb2JqZWN0ID0g
V2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9hZChvYmplY3RJZCk7CisgICAgaWYg
KG9iamVjdC50eXBlID09PSAibm9kZSIpIHsKKyAgICAgICAgLy8gUmVxdWVzdCBub2RlIGZyb20g
YmFja2VuZCBhbmQgZm9jdXMgaXQuCisgICAgICAgIG9iamVjdC5wdXNoTm9kZVRvRnJvbnRlbmQo
V2ViSW5zcGVjdG9yLnVwZGF0ZUZvY3VzZWROb2RlLmJpbmQoV2ViSW5zcGVjdG9yKSk7CisgICAg
fSBlbHNlIGlmIChoaW50cy5kYXRhYmFzZUlkKSB7CisgICAgICAgIFdlYkluc3BlY3Rvci5jdXJy
ZW50UGFuZWwgPSBXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlczsKKyAgICAgICAgV2ViSW5z
cGVjdG9yLnBhbmVscy5yZXNvdXJjZXMuc2VsZWN0RGF0YWJhc2UoaGludHMuZGF0YWJhc2VJZCk7
CisgICAgfSBlbHNlIGlmIChoaW50cy5kb21TdG9yYWdlSWQpIHsKKyAgICAgICAgV2ViSW5zcGVj
dG9yLmN1cnJlbnRQYW5lbCA9IFdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzOworICAgICAg
ICBXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcy5zZWxlY3RET01TdG9yYWdlKGhpbnRzLmRv
bVN0b3JhZ2VJZCk7CisgICAgfQorCisgICAgUnVudGltZUFnZW50LnJlbGVhc2VPYmplY3Qob2Jq
ZWN0SWQpOworfQorCiBXZWJJbnNwZWN0b3IudXBkYXRlRm9jdXNlZE5vZGUgPSBmdW5jdGlvbihu
b2RlSWQpCiB7CiAgICAgdGhpcy5fdXBkYXRlRm9jdXNlZE5vZGUobm9kZUlkKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83496</attachid>
            <date>2011-02-23 10:09:36 -0800</date>
            <delta_ts>2011-02-23 14:08:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55057-20110223210932.patch</filename>
            <type>text/plain</type>
            <size>44177</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk0MTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiNjc3MzlmNGRjY2NkNjE0
OTYyZWNlNWIyZTA3OWY2YzJiNGZmYzE1Li42N2FjZjA0NzVkYjRmMjExY2IxN2Y2ZThkYzY4MmY3
ZTkwYTkwNjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzYgQEAKKzIwMTEtMDItMjMgIFBhdmVs
IEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmVmYWN0b3IgaW5zcGVj
dCgpIHdvcmtmbG93IHNvIHRoYXQgaXQgZGlkIG5vdCBwdXNoIGRvbSBub2Rlcy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1MDU3CisKKyAgICAgICAg
SSBhbSB3b3JraW5nIG9uIGdldHRpbmcgcmlkIG9mIERPTSBhZ2VudCBwdXNoZXMgLSBldmVyeXRo
aW5nIHNob3VsZCBoYXBwZW4gdXBvbgorICAgICAgICBmcm9udC1lbmQgcmVxdWVzdC4gVGhpcyBw
YXRjaCBjaGFuZ2VzIHRoZSB3YXkgd2UgaGFuZGxlIGluc3BlY3QoKSBjb21tYW5kIGxpbmUKKyAg
ICAgICAgYXBpOiBpbnN0ZWFkIG9mIHB1c2hpbmcgbm9kZXMsIHdlIGFyZSB0ZWxsaW5nIGZyb250
LWVuZCB0aGF0IGluc3BlY3Qob2JqZWN0KSBoYXMKKyAgICAgICAgYmVlbiByZXF1ZXN0ZWQuIEl0
IGlzIHRoZW4gdXAgdG8gZnJvbnQtZW5kIHRvIHJlcXVlc3QgZG9tIG5vZGVzIGFuZCBmb2N1cyB0
aGVtIGluCisgICAgICAgIHRoZSB0cmVlLiBJIGFsc28gbWFkZSBpbnNwZWN0KCkgd29yayBpbiBh
IGdlbmVyaWMgbWFubmVyLCB1c2luZyBzYW1lIHJvdXRpbmVzIGZvcgorICAgICAgICBub2Rlcywg
ZGF0YWJhc2VzLCBzdG9yYWdlcyBhbmQgcG90ZW50aWFsbHkgbmV3IGVsZW1lbnRzLgorCisgICAg
ICAgIEFzIGEgc2lkZS1lZmZlY3QsIHdlIGRvbid0IGRvIGNvbnNvbGUubG9nIGZyb20gd2l0aGlu
IGluc3BlY3QoKSBhbnltb3JlLCBidXQgZHVtcAorICAgICAgICBpbnNwZWN0ZWQgdmFsdWUgYXMg
aW5zcGVjdCdzIHJlc3VsdC4KKworICAgICAgICBBbHNvLCBJIGFkZGVkIGluZGl2aWR1YWwgb2Jq
ZWN0IHJlbGVhc2UgbWV0aG9kIGFuZCBtYWRlIG9iamVjdCBncm91cHMgb3B0aW9uYWwuCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OnNjcmlwdFZhbHVlQXNOb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6bm9kZUFzU2NyaXB0VmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3BlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OmRhdGFiYXNlSWQpOgorICAgICAgICAo
V2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OnN0b3JhZ2VJZCk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6c2NyaXB0VmFsdWVBc05vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0Ojpub2RlQXNTY3JpcHRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpWOEluamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4SW5qZWN0ZWRTY3JpcHRIb3N0OjpkYXRhYmFzZUlkQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6VjhJbmplY3RlZFNjcmlwdEhvc3Q6OnN0b3JhZ2VJZENhbGxi
YWNrKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHQ6Om5vZGVGb3JPYmplY3RJZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbmplY3RlZFNjcmlwdDo6cmVsZWFzZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmplY3RlZFNjcmlwdDo6d3JhcEZvckNvbnNvbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0
ZWRTY3JpcHQ6Omluc3BlY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0SW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OmRhdGFiYXNlSWRJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6OkluamVjdGVkU2NyaXB0SG9zdDo6c3RvcmFnZUlkSW1wbCk6CisgICAgICAgICogaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0SG9zdC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNj
cmlwdEhvc3QuaWRsOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5q
czoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmlkbDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6
OmZvY3VzTm9kZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkVXNlRE9NU3RvcmFnZSk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFn
ZW50OjpkYXRhYmFzZUlkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNw
cDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpyZWxlYXNlT2JqZWN0KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9BdWRpdFJ1bGVzLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMu
ZXZhbHVhdGVJblRhcmdldFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxl
cy5JbWFnZURpbWVuc2lvbnNSdWxlLnByb3RvdHlwZS5kb1J1bik6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9ET01TdG9yYWdlLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvRGF0YWJhc2UuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25T
ZXJ2ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uU2VydmVyLnByb3RvdHlw
ZS5fb25FdmFsdWF0ZU9uSW5zcGVjdGVkUGFnZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuaW5zcGVjdCk6CisKIDIw
MTEtMDItMjIgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFuIEJlcm5zdGVpbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAppbmRleCBhMWRhNDM3ZTU3YzdlZTkzYmQ3
ZTllODAzNDYxZTk5OTQ5MjhjNjE2Li42NmI4MjFjZWZjMWVjNDU0NzEyYWUyZTkzN2FjNzhhY2Jk
YzBkMmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVk
U2NyaXB0SG9zdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAi
SlNSYW5nZS5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiU2NyaXB0VmFsdWUuaCIKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAjaW5jbHVkZSAiU3Rv
cmFnZS5oIgogI2luY2x1ZGUgIkpTU3RvcmFnZS5oIgpAQCAtNzAsMTggKzcxLDIyIEBACiAjaW5j
bHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTSmF2YVNjcmlwdENhbGxG
cmFtZS5oIgogI2luY2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0
VmFsdWUuaCIKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLU5vZGUqIEluamVjdGVkU2NyaXB0SG9zdDo6dG9Ob2RlKFNjcmlwdFZhbHVlIHZh
bHVlKQorTm9kZSogSW5qZWN0ZWRTY3JpcHRIb3N0OjpzY3JpcHRWYWx1ZUFzTm9kZShTY3JpcHRW
YWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkgfHwgdmFsdWUuaXNOdWxs
KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBXZWJDb3JlOjp0b05vZGUodmFsdWUu
anNWYWx1ZSgpKTsKKyAgICByZXR1cm4gdG9Ob2RlKHZhbHVlLmpzVmFsdWUoKSk7Cit9CisKK1Nj
cmlwdFZhbHVlIEluamVjdGVkU2NyaXB0SG9zdDo6bm9kZUFzU2NyaXB0VmFsdWUoU2NyaXB0U3Rh
dGUqIHN0YXRlLCBOb2RlKiBub2RlKQoreworICAgIHJldHVybiBTY3JpcHRWYWx1ZShzdGF0ZS0+
Z2xvYmFsRGF0YSgpLCB0b0pTKHN0YXRlLCBub2RlKSk7CiB9CiAKIFNjcmlwdE9iamVjdCBJbmpl
Y3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZUluamVjdGVkU2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNl
LCBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGxvbmcgaWQpCkBAIC0xNTQsNDEgKzE1OSwzNyBA
QCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnRlcm5hbENvbnN0cnVjdG9yTmFtZShF
eGVjU3RhdGUqIGV4ZWMpCiAKIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3BlY3Qo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMSkg
ewotICAgICAgICBOb2RlKiBub2RlID0gV2ViQ29yZTo6dG9Ob2RlKGV4ZWMtPmFyZ3VtZW50KDAp
KTsKLSAgICAgICAgaWYgKG5vZGUpCi0gICAgICAgICAgICBpbXBsKCktPmluc3BlY3Qobm9kZSk7
CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIFNjcmlwdFZh
bHVlIG9iamVjdElkKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+YXJndW1lbnQoMCkpOworICAg
ICAgICBTY3JpcHRWYWx1ZSBoaW50cyhleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmFyZ3VtZW50
KDEpKTsKKyAgICAgICAgaW1wbCgpLT5pbnNwZWN0SW1wbChvYmplY3RJZC50b0luc3BlY3RvclZh
bHVlKGV4ZWMpLCBoaW50cy50b0luc3BlY3RvclZhbHVlKGV4ZWMpKTsKICAgICB9CiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLSNpZiBFTkFCTEUoREFUQUJBU0UpCi1KU1ZhbHVlIEpT
SW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3REYXRhYmFzZShFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpkYXRhYmFzZUlkKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0KKyNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgRGF0YWJhc2UqIGRhdGFiYXNl
ID0gdG9EYXRhYmFzZShleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKGRhdGFiYXNlKQotICAg
ICAgICBpbXBsKCktPnNlbGVjdERhdGFiYXNlKGRhdGFiYXNlKTsKKyAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGltcGwoKS0+ZGF0YWJhc2VJZEltcGwoZGF0YWJhc2UpKTsKKyNlbmRpZgogICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogfQotI2VuZGlmCiAKLSNpZiBFTkFCTEUoRE9NX1NUT1JBR0Up
Ci1KU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3RET01TdG9yYWdlKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OnN0b3JhZ2VJZChFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGlmICghaW1wbCgpLT5pbnNwZWN0b3JBZ2VudCgp
KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQorI2lmIEVOQUJMRShET01fU1RPUkFH
RSkKICAgICBTdG9yYWdlKiBzdG9yYWdlID0gdG9TdG9yYWdlKGV4ZWMtPmFyZ3VtZW50KDApKTsK
ICAgICBpZiAoc3RvcmFnZSkKLSAgICAgICAgaW1wbCgpLT5zZWxlY3RET01TdG9yYWdlKHN0b3Jh
Z2UpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoaW1wbCgpLT5zdG9yYWdlSWRJbXBsKHN0b3Jh
Z2UpKTsKKyNlbmRpZgogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQotI2VuZGlmCiAKIElu
amVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0SG9zdDo6aW5qZWN0ZWRTY3JpcHRGb3IoU2NyaXB0
U3RhdGUqIHNjcmlwdFN0YXRlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKaW5k
ZXggMjI3NTY5MTM2NjhjYjIwM2Q5MGNlNmUyMmZmN2ZjYjM4ZDQ5NjZmNS4uYzUwYjk1MDUwZjAw
YWEzNzljNWMyYjBhYzM3NjhhMWE5NDI0ZDk1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0
b20uY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKICNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgorI2luY2x1ZGUgIlNjcmlwdFZh
bHVlLmgiCiAKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdTdGF0
ZS5oIgpAQCAtNTQsMTMgKzU1LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTm9kZSog
SW5qZWN0ZWRTY3JpcHRIb3N0Ojp0b05vZGUoU2NyaXB0VmFsdWUgdmFsdWUpCitOb2RlKiBJbmpl
Y3RlZFNjcmlwdEhvc3Q6OnNjcmlwdFZhbHVlQXNOb2RlKFNjcmlwdFZhbHVlIHZhbHVlKQogewog
ICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSB8fCB2YWx1ZS5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgcmV0dXJuIFY4Tm9kZTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0
Pjo6Q2FzdCh2YWx1ZS52OFZhbHVlKCkpKTsKIH0KIAorU2NyaXB0VmFsdWUgSW5qZWN0ZWRTY3Jp
cHRIb3N0Ojpub2RlQXNTY3JpcHRWYWx1ZShTY3JpcHRTdGF0ZSogc3RhdGUsIE5vZGUqIG5vZGUp
Cit7CisgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHRvVjgobm9kZSkpOworfQorCiBzdGF0aWMgdm9p
ZCBXZWFrUmVmZXJlbmNlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBvYmplY3Qs
IHZvaWQqIHBhcmFtZXRlcikKIHsKICAgICBJbmplY3RlZFNjcmlwdEhvc3QqIG5hdGl2ZU9iamVj
dCA9IHN0YXRpY19jYXN0PEluamVjdGVkU2NyaXB0SG9zdCo+KHBhcmFtZXRlcik7CkBAIC0xNzQs
MTMgKzE4MCwxMyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJbmplY3RlZFNjcmlwdEhvc3Q6
OmludGVybmFsQ29uc3RydWN0b3JOYW1lQ2FsbGJhY2soY29ucwogdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4SW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkluamVjdGVkU2NyaXB0SG9zdC5pbnNwZWN0
KCkiKTsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkg
PCAyKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgSW5qZWN0ZWRTY3Jp
cHRIb3N0KiBob3N0ID0gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOwotICAgIE5vZGUqIG5vZGUgPSBWOE5vZGU6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QoYXJnc1swXSkpOwotICAgIGlmIChub2RlKQotICAgICAgICBob3N0LT5pbnNw
ZWN0KG5vZGUpOworICAgIFNjcmlwdFZhbHVlIG9iamVjdElkKGFyZ3NbMF0pOworICAgIFNjcmlw
dFZhbHVlIGhpbnRzKGFyZ3NbMV0pOworICAgIGhvc3QtPmluc3BlY3RJbXBsKG9iamVjdElkLnRv
SW5zcGVjdG9yVmFsdWUoU2NyaXB0U3RhdGU6OmN1cnJlbnQoKSksIGhpbnRzLnRvSW5zcGVjdG9y
VmFsdWUoU2NyaXB0U3RhdGU6OmN1cnJlbnQoKSkpOwogCiAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKIH0KQEAgLTE5MywzNyArMTk5LDMzIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOElu
amVjdGVkU2NyaXB0SG9zdDo6Y3VycmVudENhbGxGcmFtZUNhbGxiYWNrKGNvbnN0IHY4OjpBCiB9
CiAjZW5kaWYKIAotI2lmIEVOQUJMRShEQVRBQkFTRSkKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OEluamVjdGVkU2NyaXB0SG9zdDo6c2VsZWN0RGF0YWJhc2VDYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0ZWRTY3JpcHRIb3N0
OjpkYXRhYmFzZUlkQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKLSAgICBJ
TkNfU1RBVFMoIkluamVjdGVkU2NyaXB0SG9zdC5zZWxlY3REYXRhYmFzZSgpIik7CisgICAgSU5D
X1NUQVRTKCJJbmplY3RlZFNjcmlwdEhvc3QuZGF0YWJhc2VJZCgpIik7CiAgICAgaWYgKGFyZ3Mu
TGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCisjaWYgRU5B
QkxFKERBVEFCQVNFKQogICAgIEluamVjdGVkU2NyaXB0SG9zdCogaG9zdCA9IFY4SW5qZWN0ZWRT
Y3JpcHRIb3N0Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBEYXRhYmFzZSogZGF0YWJh
c2UgPSBWOERhdGFiYXNlOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFy
Z3NbMF0pKTsKICAgICBpZiAoZGF0YWJhc2UpCi0gICAgICAgIGhvc3QtPnNlbGVjdERhdGFiYXNl
KGRhdGFiYXNlKTsKLQorICAgICAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KGhvc3QtPmRhdGFi
YXNlSWRJbXBsKGRhdGFiYXNlKSk7CisjZW5kaWYKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OwogfQotI2VuZGlmCiAKLSNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi12ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OnNlbGVjdERPTVN0b3JhZ2VDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0ZWRT
Y3JpcHRIb3N0OjpzdG9yYWdlSWRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQog
ewotICAgIElOQ19TVEFUUygiSW5qZWN0ZWRTY3JpcHRIb3N0LnNlbGVjdERPTVN0b3JhZ2UoKSIp
OwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKLQorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICBJTkNfU1RBVFMoIkluamVjdGVk
U2NyaXB0SG9zdC5zdG9yYWdlSWQoKSIpOwogICAgIEluamVjdGVkU2NyaXB0SG9zdCogaG9zdCA9
IFY4SW5qZWN0ZWRTY3JpcHRIb3N0Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBTdG9y
YWdlKiBzdG9yYWdlID0gVjhTdG9yYWdlOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
OjpDYXN0KGFyZ3NbMF0pKTsKICAgICBpZiAoc3RvcmFnZSkKLSAgICAgICAgaG9zdC0+c2VsZWN0
RE9NU3RvcmFnZShzdG9yYWdlKTsKLQorICAgICAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KGhv
c3QtPnN0b3JhZ2VJZEltcGwoc3RvcmFnZSkpOworI2VuZGlmCiAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKIH0KLSNlbmRpZgogCiBJbmplY3RlZFNjcmlwdCBJbmplY3RlZFNjcmlwdEhvc3Q6
OmluamVjdGVkU2NyaXB0Rm9yKFNjcmlwdFN0YXRlKiBpbnNwZWN0ZWRTY3JpcHRTdGF0ZSkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCmluZGV4IGRiOTBi
ZDc3NjYyN2NlMmE3YmI1YWM1MmM1MGRlMGUwMzU3YjdlYmMuLjNkZDcyOTNlNjgyMzI0MzliZWFk
Yzc3ZDgyYzdlOTkyZGM3ZWQyZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0LmNwcApAQCAtMzMsNiArMzMsNyBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
IAorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgpAQCAtMTA0LDcg
KzEwNSw3IEBAIE5vZGUqIEluamVjdGVkU2NyaXB0Ojpub2RlRm9yT2JqZWN0SWQoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdElkKQogICAgIFNjcmlwdFZhbHVlIHJlc3VsdFZhbHVl
ID0gZnVuY3Rpb24uY2FsbChoYWRFeGNlcHRpb24pOwogICAgIEFTU0VSVCghaGFkRXhjZXB0aW9u
KTsKIAotICAgIHJldHVybiBJbmplY3RlZFNjcmlwdEhvc3Q6OnRvTm9kZShyZXN1bHRWYWx1ZSk7
CisgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdDo6c2NyaXB0VmFsdWVBc05vZGUocmVzdWx0
VmFsdWUpOwogfQogCiB2b2lkIEluamVjdGVkU2NyaXB0OjpyZXNvbHZlTm9kZShsb25nIG5vZGVJ
ZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQpAQCAtMTM4LDYgKzEzOSwxNCBAQCB2
b2lkIEluamVjdGVkU2NyaXB0OjpzZXRQcm9wZXJ0eVZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBvYmplY3RJZCwgY29ucwogICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCByZXN1bHQpOwog
fQogCit2b2lkIEluamVjdGVkU2NyaXB0OjpyZWxlYXNlT2JqZWN0KFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBvYmplY3RJZCkKK3sKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24o
bV9pbmplY3RlZFNjcmlwdE9iamVjdCwgInJlbGVhc2VPYmplY3QiKTsKKyAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudChvYmplY3RJZC0+dG9KU09OU3RyaW5nKCkpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gcmVzdWx0OworICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVzdWx0KTsKK30K
KwogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gSW5qZWN0ZWRTY3JpcHQ6OmNhbGxGcmFtZXMoKQogewpAQCAtMTQ4LDE3ICsxNTcsMzIg
QEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5qZWN0ZWRTY3JpcHQ6OmNhbGxGcmFtZXMo
KQogfQogI2VuZGlmCiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluamVjdGVkU2NyaXB0
Ojp3cmFwRm9yQ29uc29sZShTY3JpcHRWYWx1ZSB2YWx1ZSkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcEZvckNvbnNvbGUoU2NyaXB0VmFsdWUgdmFsdWUp
CiB7CiAgICAgQVNTRVJUKCFoYXNOb1ZhbHVlKCkpOwotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCB3
cmFwRnVuY3Rpb24obV9pbmplY3RlZFNjcmlwdE9iamVjdCwgIndyYXBPYmplY3RGb3JDb25zb2xl
Iik7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIHdyYXBGdW5jdGlvbihtX2luamVjdGVkU2NyaXB0
T2JqZWN0LCAid3JhcEZvckNvbnNvbGUiKTsKICAgICB3cmFwRnVuY3Rpb24uYXBwZW5kQXJndW1l
bnQodmFsdWUpOwogICAgIHdyYXBGdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYW5BY2Nlc3NJbnNw
ZWN0ZWRXaW5kb3coKSk7CiAgICAgYm9vbCBoYWRFeGNlcHRpb24gPSBmYWxzZTsKICAgICBTY3Jp
cHRWYWx1ZSByID0gd3JhcEZ1bmN0aW9uLmNhbGwoaGFkRXhjZXB0aW9uKTsKLSAgICBpZiAoaGFk
RXhjZXB0aW9uKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUoIjxleGNl
cHRpb24+Iik7Ci0gICAgcmV0dXJuIHIudG9JbnNwZWN0b3JWYWx1ZShtX2luamVjdGVkU2NyaXB0
T2JqZWN0LnNjcmlwdFN0YXRlKCkpOworICAgIGlmIChoYWRFeGNlcHRpb24pIHsKKyAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoImRlc2NyaXB0aW9uIiwgIjxleGNlcHRpb24+
Iik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiByLnRvSW5zcGVj
dG9yVmFsdWUobV9pbmplY3RlZFNjcmlwdE9iamVjdC5zY3JpcHRTdGF0ZSgpKS0+YXNPYmplY3Qo
KTsKK30KKwordm9pZCBJbmplY3RlZFNjcmlwdDo6aW5zcGVjdE5vZGUoTm9kZSogbm9kZSkKK3sK
KyAgICBBU1NFUlQoIWhhc05vVmFsdWUoKSk7CisgICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+b3du
ZXJEb2N1bWVudCgpID8gbm9kZS0+b3duZXJEb2N1bWVudCgpLT5mcmFtZSgpIDogMDsKKyAgICBp
ZiAoZnJhbWUpIHsKKyAgICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1faW5qZWN0
ZWRTY3JpcHRPYmplY3QsICJpbnNwZWN0Tm9kZSIpOworICAgICAgICBmdW5jdGlvbi5hcHBlbmRB
cmd1bWVudChJbmplY3RlZFNjcmlwdEhvc3Q6Om5vZGVBc1NjcmlwdFZhbHVlKG1haW5Xb3JsZFNj
cmlwdFN0YXRlKGZyYW1lKSwgbm9kZSkpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IHJlc3VsdDsKKyAgICAgICAgbWFrZUNhbGwoZnVuY3Rpb24sICZyZXN1bHQpOworICAgIH0KIH0K
IAogdm9pZCBJbmplY3RlZFNjcmlwdDo6cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChjb25zdCBT
dHJpbmcmIG9iamVjdEdyb3VwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHQuaAppbmRleCAxYzRjMjM2YzlkNDRmYmEzODA5MDk0MTFlYmViZTUzNTA0MDkzNWFjLi5iZDVh
NWE2OGQ0NjNlMzQ3NGQxNzUzYmJkZjhiYzhlODQ1ODU1Y2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaApAQCAtNjEsMjAgKzYxLDIyIEBAIHB1YmxpYzoKICAg
ICB2b2lkIGdldE5vZGVQcm9wZXJ0aWVzKGxvbmcgbm9kZUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm9wZXJ0aWVzQXJyYXksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7
CiAgICAgdm9pZCBnZXROb2RlUHJvdG90eXBlcyhsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiogcmVzdWx0KTsKICAgICB2b2lkIHNldFByb3BlcnR5VmFsdWUoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG9iamVjdElkLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29u
c3QgU3RyaW5nJiBleHByZXNzaW9uLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOwot
CisgICAgdm9pZCByZWxlYXNlT2JqZWN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmpl
Y3RJZCk7CisgICAgCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gY2FsbEZyYW1lcygpOwogI2VuZGlmCiAKLSAgICBQYXNzUmVm
UHRyPEluc3BlY3RvclZhbHVlPiB3cmFwRm9yQ29uc29sZShTY3JpcHRWYWx1ZSk7CisgICAgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHdyYXBGb3JDb25zb2xlKFNjcmlwdFZhbHVlKTsKKyAg
ICB2b2lkIGluc3BlY3ROb2RlKE5vZGUqKTsKICAgICB2b2lkIHJlbGVhc2VXcmFwcGVyT2JqZWN0
R3JvdXAoY29uc3QgU3RyaW5nJik7CiAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKCkgY29u
c3QgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlwdE9iamVjdC5zY3JpcHRTdGF0ZSgpOyB9CiAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIEluamVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0SG9zdDo6aW5q
ZWN0ZWRTY3JpcHRGb3IoU2NyaXB0U3RhdGUqKTsKICAgICBleHBsaWNpdCBJbmplY3RlZFNjcmlw
dChTY3JpcHRPYmplY3QpOwotICAgIGJvb2wgY2FuQWNjZXNzSW5zcGVjdGVkV2luZG93KCk7CiAK
KyAgICBib29sIGNhbkFjY2Vzc0luc3BlY3RlZFdpbmRvdygpOwogICAgIHZvaWQgbWFrZUNhbGwo
U2NyaXB0RnVuY3Rpb25DYWxsJiwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKIAog
ICAgIFNjcmlwdE9iamVjdCBtX2luamVjdGVkU2NyaXB0T2JqZWN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAppbmRleCA1YjEzNzc4MTIwNWY3
MDBjMDNmZjUyMjNmZGY4MzUzZGU2YTQxNDBhLi42NWQ3NjA3NTRlNzY1MjdjYTI4Mzg3ZTBjMjg3
NGJhZDcwZTMxZmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRIb3N0LmNwcApAQCAtODAsMTEgKzgwLDEwIEBAIEluamVjdGVkU2NyaXB0SG9zdDo6fklu
amVjdGVkU2NyaXB0SG9zdCgpCiB7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNw
ZWN0KE5vZGUqIG5vZGUpCit2b2lkIEluamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdEltcGwoUGFz
c1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gb2JqZWN0SWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IGhpbnRzKQogewotICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3Rv
ckRPTUFnZW50KCk7Ci0gICAgaWYgKGRvbUFnZW50KQotICAgICAgICBkb21BZ2VudC0+aW5zcGVj
dChub2RlKTsKKyAgICBpZiAoSW5zcGVjdG9yRnJvbnRlbmQqIGZlID0gZnJvbnRlbmQoKSkKKyAg
ICAgICAgZmUtPmluc3BlY3Qob2JqZWN0SWQtPmFzT2JqZWN0KCksIGhpbnRzLT5hc09iamVjdCgp
KTsKIH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKCkK
QEAgLTExNSwyNSArMTE0LDIwIEBAIGxvbmcgSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0ZWRO
b2RlKHVuc2lnbmVkIGxvbmcgbnVtKQogfQogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQotRGF0YWJh
c2UqIEluamVjdGVkU2NyaXB0SG9zdDo6ZGF0YWJhc2VGb3JJZChsb25nIGRhdGFiYXNlSWQpCits
b25nIEluamVjdGVkU2NyaXB0SG9zdDo6ZGF0YWJhc2VJZEltcGwoRGF0YWJhc2UqIGRhdGFiYXNl
KQogewogICAgIGlmIChtX2luc3BlY3RvckFnZW50ICYmIG1faW5zcGVjdG9yQWdlbnQtPmRhdGFi
YXNlQWdlbnQoKSkKLSAgICAgICAgcmV0dXJuIG1faW5zcGVjdG9yQWdlbnQtPmRhdGFiYXNlQWdl
bnQoKS0+ZGF0YWJhc2VGb3JJZChkYXRhYmFzZUlkKTsKKyAgICAgICAgcmV0dXJuIG1faW5zcGVj
dG9yQWdlbnQtPmRhdGFiYXNlQWdlbnQoKS0+ZGF0YWJhc2VJZChkYXRhYmFzZSk7CiAgICAgcmV0
dXJuIDA7CiB9Ci0KLXZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3REYXRhYmFzZShEYXRh
YmFzZSogZGF0YWJhc2UpCi17Ci0gICAgaWYgKG1faW5zcGVjdG9yQWdlbnQgJiYgbV9pbnNwZWN0
b3JBZ2VudC0+ZGF0YWJhc2VBZ2VudCgpKQotICAgICAgICBtX2luc3BlY3RvckFnZW50LT5kYXRh
YmFzZUFnZW50KCktPnNlbGVjdERhdGFiYXNlKGRhdGFiYXNlKTsKLX0KICNlbmRpZgogCiAjaWYg
RU5BQkxFKERPTV9TVE9SQUdFKQotdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OnNlbGVjdERPTVN0
b3JhZ2UoU3RvcmFnZSogc3RvcmFnZSkKK2xvbmcgSW5qZWN0ZWRTY3JpcHRIb3N0OjpzdG9yYWdl
SWRJbXBsKFN0b3JhZ2UqIHN0b3JhZ2UpCiB7CiAgICAgaWYgKG1faW5zcGVjdG9yQWdlbnQgJiYg
bV9pbnNwZWN0b3JBZ2VudC0+ZG9tU3RvcmFnZUFnZW50KCkpCi0gICAgICAgIG1faW5zcGVjdG9y
QWdlbnQtPmRvbVN0b3JhZ2VBZ2VudCgpLT5zZWxlY3RET01TdG9yYWdlKHN0b3JhZ2UpOworICAg
ICAgICByZXR1cm4gbV9pbnNwZWN0b3JBZ2VudC0+ZG9tU3RvcmFnZUFnZW50KCktPnN0b3JhZ2VJ
ZChzdG9yYWdlKTsKKyAgICByZXR1cm4gMDsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgKaW5kZXggMDQ1YTg0YjUwYTA1NTNkMTBi
YmRkYjQ5Mzc3YTVkN2ExNDgwZGVlOS4uNzY5MjkzOTEyNDg3NDdlNTdjNzhiOWI3MWVkYjQ3Njhi
ZTQwNjZhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0SG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhv
c3QuaApAQCAtNTgsMTUgKzU4LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJbmplY3RlZFNjcmlwdEhvc3QoaW5zcGVjdG9yQWdlbnQpKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgTm9kZSogdG9Ob2RlKFNjcmlwdFZhbHVlIHZhbHVlKTsKKyAgICBzdGF0aWMgTm9kZSog
c2NyaXB0VmFsdWVBc05vZGUoU2NyaXB0VmFsdWUpOworICAgIHN0YXRpYyBTY3JpcHRWYWx1ZSBu
b2RlQXNTY3JpcHRWYWx1ZShTY3JpcHRTdGF0ZSosIE5vZGUqKTsKIAogICAgIH5JbmplY3RlZFNj
cmlwdEhvc3QoKTsKIAotICAgIHZvaWQgaW5zcGVjdChOb2RlKiBub2RlKTsKLQogICAgIEluc3Bl
Y3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yQWdlbnQ7IH0K
ICAgICB2b2lkIGRpc2Nvbm5lY3RDb250cm9sbGVyKCkgeyBtX2luc3BlY3RvckFnZW50ID0gMDsg
fQogCisgICAgdm9pZCBpbnNwZWN0SW1wbChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBvYmpl
Y3RJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gaGludHMpOwogICAgIHZvaWQgY2xlYXJD
b25zb2xlTWVzc2FnZXMoKTsKIAogICAgIHZvaWQgY29weVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0
KTsKQEAgLTc0LDExICs3NCwxMCBAQCBwdWJsaWM6CiAgICAgbG9uZyBpbnNwZWN0ZWROb2RlKHVu
c2lnbmVkIGxvbmcgbnVtKTsKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICBEYXRhYmFzZSog
ZGF0YWJhc2VGb3JJZChsb25nIGRhdGFiYXNlSWQpOwotICAgIHZvaWQgc2VsZWN0RGF0YWJhc2Uo
RGF0YWJhc2UqIGRhdGFiYXNlKTsKKyAgICBsb25nIGRhdGFiYXNlSWRJbXBsKERhdGFiYXNlKik7
CiAjZW5kaWYKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0gICAgdm9pZCBzZWxlY3RET01TdG9y
YWdlKFN0b3JhZ2UqIHN0b3JhZ2UpOworICAgIGxvbmcgc3RvcmFnZUlkSW1wbChTdG9yYWdlKik7
CiAjZW5kaWYKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICBsb25nIG5leHRXb3JrZXJJZCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmlkbAppbmRl
eCA5ZjFjMmRiZTg3MGMxYmVlYjk3OWZjODE0NjUyYWRjM2M3ZDY2NzQ1Li4wMjU4Zjc4MTc3NDRi
OWRiNzg1MWEzY2E0ZDk1YzkxMzVjZDkxZGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmlkbApAQCAtMzYsNyArMzYsNyBAQCBtb2R1bGUgY29y
ZSB7CiAKICAgICAgICAgdm9pZCBjb3B5VGV4dChpbiBET01TdHJpbmcgdGV4dCk7CiAgICAgICAg
IFtDdXN0b21dIERPTU9iamVjdCBub2RlRm9ySWQoaW4gbG9uZyBub2RlSWQpOwotICAgICAgICBb
Q3VzdG9tXSBpbnQgaW5zcGVjdChpbiBET01PYmplY3Qgbm9kZSk7CisgICAgICAgIFtDdXN0b21d
IHZvaWQgaW5zcGVjdChpbiBET01PYmplY3Qgb2JqZWN0SWQsIGluIERPTU9iamVjdCBoaW50cyk7
CiAgICAgICAgIGxvbmcgaW5zcGVjdGVkTm9kZShpbiB1bnNpZ25lZCBsb25nIG51bSk7CiAgICAg
ICAgIFtDdXN0b21dIERPTU9iamVjdCBpbnRlcm5hbENvbnN0cnVjdG9yTmFtZShpbiBET01PYmpl
Y3Qgb2JqZWN0KTsKIApAQCAtNDUsMTEgKzQ1LDExIEBAIG1vZHVsZSBjb3JlIHsKICNlbmRpZgog
CiAjaWYgZGVmaW5lZChFTkFCTEVfREFUQUJBU0UpICYmIEVOQUJMRV9EQVRBQkFTRQotICAgICAg
ICBbQ3VzdG9tXSB2b2lkIHNlbGVjdERhdGFiYXNlKGluIERPTU9iamVjdCBkYXRhYmFzZSk7Cisg
ICAgICAgIFtDdXN0b21dIGxvbmcgZGF0YWJhc2VJZChpbiBET01PYmplY3QgZGF0YWJhc2UpOwog
I2VuZGlmCiAKICNpZiBkZWZpbmVkKEVOQUJMRV9ET01fU1RPUkFHRSkgJiYgRU5BQkxFX0RPTV9T
VE9SQUdFCi0gICAgICAgIFtDdXN0b21dIHZvaWQgc2VsZWN0RE9NU3RvcmFnZShpbiBET01PYmpl
Y3Qgc3RvcmFnZSk7CisgICAgICAgIFtDdXN0b21dIGxvbmcgc3RvcmFnZUlkKGluIERPTU9iamVj
dCBzdG9yYWdlKTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChFTkFCTEVfV09SS0VSUykgJiYgRU5B
QkxFX1dPUktFUlMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdFNvdXJjZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dFNvdXJjZS5qcwppbmRleCAwYzdhNTY0YzUwNzE0NWM2ZjlhMTY5ODE5NzZiZTMzYjU2M2U5ZjMw
Li5mZjZlMDc2NTBlYmUzM2U1Yzc1ZjYwZmQ2YmU0NmIzZDY1YWNjYzA3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzCkBAIC01MCw3ICs1
MCw3IEBAIHZhciBJbmplY3RlZFNjcmlwdCA9IGZ1bmN0aW9uKCkKIH0KIAogSW5qZWN0ZWRTY3Jp
cHQucHJvdG90eXBlID0gewotICAgIHdyYXBPYmplY3RGb3JDb25zb2xlOiBmdW5jdGlvbihvYmpl
Y3QsIGNhbkFjY2Vzc0luc3BlY3RlZFdpbmRvdykKKyAgICB3cmFwRm9yQ29uc29sZTogZnVuY3Rp
b24ob2JqZWN0LCBjYW5BY2Nlc3NJbnNwZWN0ZWRXaW5kb3cpCiAgICAgewogICAgICAgICBpZiAo
Y2FuQWNjZXNzSW5zcGVjdGVkV2luZG93KQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dyYXBP
YmplY3Qob2JqZWN0LCAiY29uc29sZSIpOwpAQCAtNjAsMjMgKzYwLDUyIEBAIEluamVjdGVkU2Ny
aXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9LAogCisgICAg
aW5zcGVjdE5vZGU6IGZ1bmN0aW9uKG9iamVjdCkKKyAgICB7CisgICAgICAgIHRoaXMuX2luc3Bl
Y3Qob2JqZWN0KTsKKyAgICB9LAorCisgICAgX2luc3BlY3Q6IGZ1bmN0aW9uKG9iamVjdCkKKyAg
ICB7CisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHZhciBvYmplY3RJZCA9IHRoaXMuX3dyYXBPYmplY3Qob2JqZWN0LCAi
IiwgZmFsc2UpOworICAgICAgICB2YXIgaGludHMgPSB7fTsKKworICAgICAgICBzd2l0Y2ggKGlu
amVjdGVkU2NyaXB0Ll9kZXNjcmliZShvYmplY3QpKSB7CisgICAgICAgICAgICBjYXNlICJEYXRh
YmFzZSI6CisgICAgICAgICAgICAgICAgdmFyIGRhdGFiYXNlSWQgPSBJbmplY3RlZFNjcmlwdEhv
c3QuZGF0YWJhc2VJZChvYmplY3QpCisgICAgICAgICAgICAgICAgaWYgKGRhdGFiYXNlSWQpCisg
ICAgICAgICAgICAgICAgICAgIGhpbnRzLmRhdGFiYXNlSWQgPSBkYXRhYmFzZUlkOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiU3RvcmFnZSI6CisgICAgICAgICAg
ICAgICAgdmFyIHN0b3JhZ2VJZCA9IEluamVjdGVkU2NyaXB0SG9zdC5zdG9yYWdlSWQob2JqZWN0
KQorICAgICAgICAgICAgICAgIGlmIChzdG9yYWdlSWQpCisgICAgICAgICAgICAgICAgICAgIGhp
bnRzLmRvbVN0b3JhZ2VJZCA9IHN0b3JhZ2VJZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBJbmplY3RlZFNjcmlwdEhvc3QuaW5zcGVjdChvYmplY3RJZCwgaGlu
dHMpOworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0sCisKICAgICBfd3JhcE9iamVjdDog
ZnVuY3Rpb24ob2JqZWN0LCBvYmplY3RHcm91cE5hbWUsIGFiYnJldmlhdGUpCiAgICAgewogICAg
ICAgICB0cnkgewotICAgICAgICAgICAgdmFyIG9iamVjdElkOwogICAgICAgICAgICAgaWYgKHR5
cGVvZiBvYmplY3QgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBvYmplY3QgPT09ICJmdW5jdGlvbiIg
fHwgdGhpcy5faXNIVE1MQWxsQ29sbGVjdGlvbihvYmplY3QpKSB7CiAgICAgICAgICAgICAgICAg
dmFyIGlkID0gdGhpcy5fbGFzdEJvdW5kT2JqZWN0SWQrKzsKICAgICAgICAgICAgICAgICB0aGlz
Ll9pZFRvV3JhcHBlZE9iamVjdFtpZF0gPSBvYmplY3Q7CisgICAgICAgICAgICAgICAgdmFyIG9i
amVjdElkID0geyBpbmplY3RlZFNjcmlwdElkOiBpbmplY3RlZFNjcmlwdElkLCBpZDogaWQgfTsK
ICAgICAKLSAgICAgICAgICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLl9vYmplY3RHcm91cHNbb2Jq
ZWN0R3JvdXBOYW1lXTsKLSAgICAgICAgICAgICAgICBpZiAoIWdyb3VwKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGdyb3VwID0gW107Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX29iamVjdEdy
b3Vwc1tvYmplY3RHcm91cE5hbWVdID0gZ3JvdXA7CisgICAgICAgICAgICAgICAgaWYgKG9iamVj
dEdyb3VwTmFtZSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLl9vYmpl
Y3RHcm91cHNbb2JqZWN0R3JvdXBOYW1lXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFncm91
cCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBbXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX29iamVjdEdyb3Vwc1tvYmplY3RHcm91cE5hbWVdID0gZ3JvdXA7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZ3JvdXAucHVzaChpZCk7
CisgICAgICAgICAgICAgICAgICAgIG9iamVjdElkLmdyb3VwTmFtZSA9IG9iamVjdEdyb3VwTmFt
ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZ3JvdXAucHVzaChpZCk7Ci0g
ICAgICAgICAgICAgICAgb2JqZWN0SWQgPSB7IGluamVjdGVkU2NyaXB0SWQ6IGluamVjdGVkU2Ny
aXB0SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3JvdXBOYW1lOiBvYmplY3RHcm91cE5hbWUgfTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QuZnJv
bU9iamVjdChvYmplY3QsIG9iamVjdElkLCBhYmJyZXZpYXRlKTsKICAgICAgICAgfSBjYXRjaCAo
ZSkgewpAQCAtMTgxLDYgKzIxMCwxMiBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIH0KICAgICB9LAogCisgICAgcmVsZWFzZU9iamVjdDogZnVuY3Rpb24ob2JqZWN0SWQp
CisgICAgeworICAgICAgICB2YXIgcGFyc2VkT2JqZWN0SWQgPSB0aGlzLl9wYXJzZU9iamVjdElk
KG9iamVjdElkKTsKKyAgICAgICAgZGVsZXRlIHRoaXMuX2lkVG9XcmFwcGVkT2JqZWN0W3BhcnNl
ZE9iamVjdElkLmlkXTsKKyAgICB9LAorCiAgICAgX3BvcHVsYXRlUHJvcGVydHlOYW1lczogZnVu
Y3Rpb24ob2JqZWN0LCByZXN1bHRTZXQpCiAgICAgewogICAgICAgICBmb3IgKHZhciBvID0gb2Jq
ZWN0OyBvOyBvID0gby5fX3Byb3RvX18pIHsKQEAgLTQ5OSw3ICs1MzQsNyBAQCBJbmplY3RlZFNj
cmlwdC5SZW1vdGVPYmplY3QuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKG9iamVjdCwgb2JqZWN0SWQs
IGFiYnJldmlhdGUpCiB7CiAgICAgdmFyIHR5cGUgPSBpbmplY3RlZFNjcmlwdC5fdHlwZShvYmpl
Y3QpOwogICAgIHZhciByYXdUeXBlID0gdHlwZW9mIG9iamVjdDsKLSAgICB2YXIgaGFzQ2hpbGRy
ZW4gPSAocmF3VHlwZSA9PT0gIm9iamVjdCIgJiYgb2JqZWN0ICE9PSBudWxsICYmIChPYmplY3Qu
Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpLmxlbmd0aCB8fCAhIW9iamVjdC5fX3Byb3RvX18p
KSB8fCByYXdUeXBlID09PSAiZnVuY3Rpb24iOworICAgIHZhciBoYXNDaGlsZHJlbiA9IChyYXdU
eXBlID09PSAib2JqZWN0IiAmJiBvYmplY3QgIT09IG51bGwgJiYgKCEhT2JqZWN0LmdldE93blBy
b3BlcnR5TmFtZXMob2JqZWN0KS5sZW5ndGggfHwgISFvYmplY3QuX19wcm90b19fKSkgfHwgcmF3
VHlwZSA9PT0gImZ1bmN0aW9uIjsKICAgICB2YXIgZGVzY3JpcHRpb24gPSAiIjsKICAgICB0cnkg
ewogICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSBpbmplY3RlZFNjcmlwdC5fZGVzY3JpYmUob2Jq
ZWN0LCBhYmJyZXZpYXRlKTsKQEAgLTY4NiwyMiArNzIxLDcgQEAgQ29tbWFuZExpbmVBUElJbXBs
LnByb3RvdHlwZSA9IHsKIAogICAgIGluc3BlY3Q6IGZ1bmN0aW9uKG9iamVjdCkKICAgICB7Ci0g
ICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGluc3BlY3RlZFdpbmRvdy5jb25zb2xlLmxvZyhvYmplY3QpOwotICAgICAgICBp
ZiAoaW5qZWN0ZWRTY3JpcHQuX3R5cGUob2JqZWN0KSA9PT0gIm5vZGUiKQotICAgICAgICAgICAg
SW5qZWN0ZWRTY3JpcHRIb3N0Lmluc3BlY3Qob2JqZWN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKGluamVjdGVkU2NyaXB0Ll9kZXNjcmliZShvYmplY3QpKSB7Ci0gICAg
ICAgICAgICAgICAgY2FzZSAiRGF0YWJhc2UiOgotICAgICAgICAgICAgICAgICAgICBJbmplY3Rl
ZFNjcmlwdEhvc3Quc2VsZWN0RGF0YWJhc2Uob2JqZWN0KTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAiU3RvcmFnZSI6Ci0gICAgICAgICAgICAgICAg
ICAgIEluamVjdGVkU2NyaXB0SG9zdC5zZWxlY3RET01TdG9yYWdlKG9iamVjdCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIHJl
dHVybiBpbmplY3RlZFNjcmlwdC5faW5zcGVjdChvYmplY3QpOwogICAgIH0sCiAKICAgICBjb3B5
OiBmdW5jdGlvbihvYmplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCmlu
ZGV4IGYwYzBjZjI3YzNhNjg1NGFiYzBjMDk4MWI4ZDM3OWU3ZTg2Y2Q0MWMuLjc1NmNhNTI0OTMy
ODVkNDM4NzkwYTRkZWNiYjBlZDExMjRjMDM0YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3IuaWRsCkBAIC02MSw2ICs2MSw4IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgdm9p
ZCBnZXRDb29raWVzKG91dCBBcnJheSBjb29raWVzLCBvdXQgU3RyaW5nIGNvb2tpZXNTdHJpbmcp
OwogICAgICAgICB2b2lkIGRlbGV0ZUNvb2tpZShpbiBTdHJpbmcgY29va2llTmFtZSwgaW4gU3Ry
aW5nIGRvbWFpbik7CiAKKyAgICAgICAgW2V2ZW50XSB2b2lkIGluc3BlY3Qob3V0IE9iamVjdCBv
YmplY3RJZCwgb3V0IE9iamVjdCBoaW50cyk7CisKICAgICAgICAgLy8gRklYTUU6IGRpc3BhdGNo
IG9uIGFnZW50cy4KICNpZiBkZWZpbmVkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBF
TkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUgogICAgICAgICB2b2lkIGVuYWJsZURlYnVnZ2VyKCk7
CkBAIC03Nyw2ICs3OSw3IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgdm9pZCBnZXRDb21wbGV0
aW9ucyhpbiBTdHJpbmcgZXhwcmVzc2lvbiwgaW4gYm9vbGVhbiBpbmNsdWRlQ29tbWFuZExpbmVB
UEksIG91dCBWYWx1ZSByZXN1bHQpOwogICAgICAgICB2b2lkIGdldFByb3BlcnRpZXMoaW4gT2Jq
ZWN0IG9iamVjdElkLCBpbiBib29sZWFuIGlnbm9yZUhhc093blByb3BlcnR5LCBpbiBib29sZWFu
IGFiYnJldmlhdGUsIG91dCBWYWx1ZSByZXN1bHQpOwogICAgICAgICB2b2lkIHNldFByb3BlcnR5
VmFsdWUoaW4gT2JqZWN0IG9iamVjdElkLCBpbiBTdHJpbmcgcHJvcGVydHlOYW1lLCBpbiBTdHJp
bmcgZXhwcmVzc2lvbiwgb3V0IFZhbHVlIHJlc3VsdCk7CisgICAgICAgIHZvaWQgcmVsZWFzZU9i
amVjdChpbiBPYmplY3Qgb2JqZWN0SWQpOwogICAgICAgICB2b2lkIHJlbGVhc2VXcmFwcGVyT2Jq
ZWN0R3JvdXAoaW4gbG9uZyBpbmplY3RlZFNjcmlwdElkLCBpbiBTdHJpbmcgb2JqZWN0R3JvdXAp
OwogICAgIH07CiAKQEAgLTExOCw3ICsxMjEsNiBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIHZv
aWQgZXhlY3V0ZVNRTChpbiBsb25nIGRhdGFiYXNlSWQsIGluIFN0cmluZyBxdWVyeSwgb3V0IGJv
b2xlYW4gc3VjY2Vzcywgb3V0IGxvbmcgdHJhbnNhY3Rpb25JZCk7CiAKICAgICAgICAgW2V2ZW50
XSB2b2lkIGFkZERhdGFiYXNlKG91dCBPYmplY3QgZGF0YWJhc2UpOwotICAgICAgICBbZXZlbnRd
IHZvaWQgc2VsZWN0RGF0YWJhc2Uob3V0IGludCBkYXRhYmFzZUlkKTsKICAgICAgICAgW2V2ZW50
XSB2b2lkIHNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkKG91dCBsb25nIHRyYW5zYWN0aW9uSWQsIG91
dCBWYWx1ZSBjb2x1bW5OYW1lcywgb3V0IFZhbHVlIHZhbHVlcyk7CiAgICAgICAgIFtldmVudF0g
dm9pZCBzcWxUcmFuc2FjdGlvbkZhaWxlZChvdXQgbG9uZyB0cmFuc2FjdGlvbklkLCBvdXQgVmFs
dWUgc3FsRXJyb3IpOwogICAgIH07CkBAIC0xMzEsNyArMTMzLDYgQEAgbW9kdWxlIGNvcmUgewog
ICAgICAgICB2b2lkIHJlbW92ZURPTVN0b3JhZ2VJdGVtKGluIGxvbmcgc3RvcmFnZUlkLCBpbiBT
dHJpbmcga2V5LCBvdXQgYm9vbGVhbiBzdWNjZXNzKTsKICAgICAgICAgW2V2ZW50XSB2b2lkIGFk
ZERPTVN0b3JhZ2Uob3V0IE9iamVjdCBzdG9yYWdlKTsKICAgICAgICAgW2V2ZW50XSB2b2lkIHVw
ZGF0ZURPTVN0b3JhZ2Uob3V0IGludCBzdG9yYWdlSWQpOwotICAgICAgICBbZXZlbnRdIHZvaWQg
c2VsZWN0RE9NU3RvcmFnZShvdXQgaW50IHN0b3JhZ2VJZCk7CiAgICAgfTsKICNlbmRpZgogCkBA
IC0xNzEsNyArMTcyLDYgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICBbZXZlbnRdIHZvaWQgY2hp
bGROb2RlQ291bnRVcGRhdGVkKG91dCBsb25nIGlkLCBvdXQgaW50IG5ld1ZhbHVlKTsKICAgICAg
ICAgW2V2ZW50XSB2b2lkIGNoaWxkTm9kZUluc2VydGVkKG91dCBsb25nIHBhcmVudElkLCBvdXQg
bG9uZyBwcmV2SWQsIG91dCBPYmplY3Qgbm9kZSk7CiAgICAgICAgIFtldmVudF0gdm9pZCBjaGls
ZE5vZGVSZW1vdmVkKG91dCBsb25nIHBhcmVudElkLCBvdXQgbG9uZyBpZCk7Ci0gICAgICAgIFtl
dmVudF0gdm9pZCBpbnNwZWN0RWxlbWVudFJlcXVlc3RlZChvdXQgbG9uZyBub2RlSWQpOwogICAg
IH07CiAKICAgICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPUlOU1BFQ1RPUl0gQ1NTIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCmluZGV4IDNjYjc3ZDBmZjYz
OTExN2YxZDI0OGYyYmUwY2M0ZDIwMmI5MzdlNzUuLjQ4ZTJmOThmOTg3Njc4NjJmZjQ4YWNkYzdj
YzU5ZTc3OGVhNjY4YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFn
ZW50LmNwcApAQCAtMjMzLDggKzIzMywyMSBAQCB2b2lkIEluc3BlY3RvckFnZW50Ojpmb2N1c05v
ZGUoKQogICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKICAgICBBU1NFUlQobV9ub2RlVG9Gb2N1cyk7
CiAKLSAgICBtX2RvbUFnZW50LT5pbnNwZWN0KG1fbm9kZVRvRm9jdXMuZ2V0KCkpOworICAgIFJl
ZlB0cjxOb2RlPiBub2RlID0gbV9ub2RlVG9Gb2N1cy5nZXQoKTsKICAgICBtX25vZGVUb0ZvY3Vz
ID0gMDsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG5vZGUtPm93bmVyRG9jdW1lbnQoKTsK
KyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm47CisgICAgRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0SG9zdC0+
aW5qZWN0ZWRTY3JpcHRGb3IobWFpbldvcmxkU2NyaXB0U3RhdGUoZnJhbWUpKTsKKyAgICBpZiAo
aW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbmpl
Y3RlZFNjcmlwdC5pbnNwZWN0Tm9kZShub2RlLmdldCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JB
Z2VudDo6aGlnaGxpZ2h0KE5vZGUqIG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBjZjZmYzExMmM4NmYwM2U2NGI4ZDE4YTI1OTli
MWQxZWRmNjc5OWUxLi5jY2MyZTNiNjUwMjQ0NzBkNWQ0ZjczNTU3ZDViYjNjM2M0NGYxOWQzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAg
LTM4MCwxNiArMzgwLDYgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaENoaWxkTm9kZXNU
b0Zyb250ZW5kKGxvbmcgbm9kZUlkKQogICAgIG1fZnJvbnRlbmQtPnNldENoaWxkTm9kZXMobm9k
ZUlkLCBjaGlsZHJlbi5yZWxlYXNlKCkpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojpp
bnNwZWN0KE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFtX2Zyb250ZW5kKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBsb25nIGlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlKTsKLSAgICBp
ZiAoaWQpCi0gICAgICAgIG1fZnJvbnRlbmQtPmluc3BlY3RFbGVtZW50UmVxdWVzdGVkKGlkKTsK
LX0KLQogbG9uZyBJbnNwZWN0b3JET01BZ2VudDo6aW5zcGVjdGVkTm9kZSh1bnNpZ25lZCBsb25n
IG51bSkKIHsKICAgICBpZiAobnVtIDwgbV9pbnNwZWN0ZWROb2Rlcy5zaXplKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4IGZiNDllMTY1YTVk
YjI2NjQ4NDc4ZWJhNGM3NTA1OTIwYjJhNmNhOTIuLjE3OWIwZTg2NGE1YTk1NmNmZjA4NjEwZTEz
YTc5ZmMzMGVmZjE3ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5oCkBAIC0xMzQsNyArMTM0LDYgQEAgcHVibGljOgogICAgIGxvbmcgcHVzaE5vZGVQ
YXRoVG9Gcm9udGVuZChOb2RlKik7CiAgICAgdm9pZCBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQo
bG9uZyBub2RlSWQpOwogICAgIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGNvbnN0IFN0
cmluZyYgcGF0aCwgbG9uZyogbm9kZUlkKTsKLSAgICB2b2lkIGluc3BlY3QoTm9kZSopOwogICAg
IGxvbmcgaW5zcGVjdGVkTm9kZSh1bnNpZ25lZCBsb25nIG51bSk7CiAgICAgdm9pZCBjb3B5Tm9k
ZShsb25nIG5vZGVJZCk7CiAgICAgdm9pZCBzZXRET01MaXN0ZW5lcihET01MaXN0ZW5lciopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50LmNwcAppbmRleCA1YzE4NmI4N2M2NjRiODY5NTIxNDljYjJiYTFhNzFjYTljMmIzOWU5Li45
MDJiMjMzMTM4OTgwNDZiZmIyZGM2MGZjNmE5ZDQ5ZTQzMDIzY2ExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcApAQCAt
MTE1LDI1ICsxMTUsMTggQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnJlbW92ZURP
TVN0b3JhZ2VJdGVtKGxvbmcgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcKICAgICB9CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzZWxlY3RET01TdG9yYWdlKFN0b3JhZ2UqIHN0
b3JhZ2UpCitsb25nIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFN0b3JhZ2Uq
IHN0b3JhZ2UpCiB7CiAgICAgQVNTRVJUKHN0b3JhZ2UpOwotICAgIGlmICghbV9mcm9udGVuZCkK
LSAgICAgICAgcmV0dXJuOwotCiAgICAgRnJhbWUqIGZyYW1lID0gc3RvcmFnZS0+ZnJhbWUoKTsK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBib29sIGlzTG9jYWxTdG9yYWdlID0gKGZy
YW1lLT5kb21XaW5kb3coKS0+bG9jYWxTdG9yYWdlKGVjKSA9PSBzdG9yYWdlICYmICFlYyk7Ci0g
ICAgbG9uZyBzdG9yYWdlUmVzb3VyY2VJZCA9IDA7CiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01h
cDo6aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAo
RE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigp
OyBpdCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5p
c1NhbWVIb3N0QW5kVHlwZShmcmFtZSwgaXNMb2NhbFN0b3JhZ2UpKSB7Ci0gICAgICAgICAgICBz
dG9yYWdlUmVzb3VyY2VJZCA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9CisgICAgICAgIGlmIChpdC0+c2Vjb25kLT5pc1NhbWVIb3N0QW5kVHlwZShmcmFtZSwgaXNM
b2NhbFN0b3JhZ2UpKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKICAgICB9Ci0gICAg
aWYgKHN0b3JhZ2VSZXNvdXJjZUlkKQotICAgICAgICBtX2Zyb250ZW5kLT5zZWxlY3RET01TdG9y
YWdlKHN0b3JhZ2VSZXNvdXJjZUlkKTsKKyAgICByZXR1cm4gMDsKIH0KIAogSW5zcGVjdG9yRE9N
U3RvcmFnZVJlc291cmNlKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VS
ZXNvdXJjZUZvcklkKGxvbmcgc3RvcmFnZUlkKQpAQCAtMTQ3LDkgKzE0MCwxMCBAQCBJbnNwZWN0
b3JET01TdG9yYWdlUmVzb3VyY2UqIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3Rv
cmFnZVJlc291cmNlRm9ySQogdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRpZFVzZURP
TVN0b3JhZ2UoU3RvcmFnZUFyZWEqIHN0b3JhZ2VBcmVhLCBib29sIGlzTG9jYWxTdG9yYWdlLCBG
cmFtZSogZnJhbWUpCiB7CiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZG9t
U3RvcmFnZUVuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwotICAgIGZvciAoRE9NU3RvcmFnZVJlc291
cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9y
YWdlRW5kOyArK2l0KQorICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3Ig
aXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KSB7CiAg
ICAgICAgIGlmIChpdC0+c2Vjb25kLT5pc1NhbWVIb3N0QW5kVHlwZShmcmFtZSwgaXNMb2NhbFN0
b3JhZ2UpKQogICAgICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIFJlZlB0cjxTdG9yYWdl
PiBkb21TdG9yYWdlID0gU3RvcmFnZTo6Y3JlYXRlKGZyYW1lLCBzdG9yYWdlQXJlYSk7CiAgICAg
UmVmUHRyPEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gcmVzb3VyY2UgPSBJbnNwZWN0b3JE
T01TdG9yYWdlUmVzb3VyY2U6OmNyZWF0ZShkb21TdG9yYWdlLmdldCgpLCBpc0xvY2FsU3RvcmFn
ZSwgZnJhbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudC5oCmluZGV4IDg1ZmI5NWRlN2ZlMDZjZTNhOWFiY2ZmMzZkODdjODUxYTNm
Nzc5ZWYuLjg2ZWI1MTA0Y2VjMDhjYjJmYzY2ZWI5NzdmMmI0YWU2OThjNGE4MDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgK
QEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlRE9NU3RvcmFnZUl0ZW0o
bG9uZyBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBib29sKiBzdWNjZXNzKTsKIAogICAg
IC8vIENhbGxlZCBmcm9tIHRoZSBpbmplY3RlZCBzY3JpcHQuCi0gICAgdm9pZCBzZWxlY3RET01T
dG9yYWdlKFN0b3JhZ2UqIHN0b3JhZ2UpOworICAgIGxvbmcgc3RvcmFnZUlkKFN0b3JhZ2UqKTsK
IAogICAgIC8vIENhbGxlZCBmcm9tIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQg
ZGlkVXNlRE9NU3RvcmFnZShTdG9yYWdlQXJlYSosIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1l
Kik7CkBAIC03Myw3ICs3Myw3IEBAIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yRE9NU3RvcmFnZVJl
c291cmNlKiBnZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJZChsb25nIHN0b3JhZ2VJZCk7CiAKICAg
ICBJbnN0cnVtZW50aW5nQWdlbnRzKiBtX2luc3RydW1lbnRpbmdBZ2VudHM7Ci0gICAgdHlwZWRl
ZiBIYXNoTWFwPGludCwgUmVmUHRyPEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gPiBET01T
dG9yYWdlUmVzb3VyY2VzTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxsb25nLCBSZWZQdHI8SW5z
cGVjdG9yRE9NU3RvcmFnZVJlc291cmNlPiA+IERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA7CiAgICAg
RE9NU3RvcmFnZVJlc291cmNlc01hcCBtX3Jlc291cmNlczsKICAgICBJbnNwZWN0b3JGcm9udGVu
ZCogbV9mcm9udGVuZDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwCmluZGV4IGNmZDVmOWZkOGJhMDUzZmE3
M2UxY2RjMTg4YWE5M2UyYjlkYzRkMjEuLmI2MDdhM2QzM2I5NTg5YTE1ODdhMDA0YTQ2OTZkNDg0
OGNjNWI3YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01TdG9yYWdlUmVzb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwCkBAIC00Niw3ICs0Niw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotaW50IEluc3BlY3RvckRPTVN0b3Jh
Z2VSZXNvdXJjZTo6c19uZXh0VW51c2VkSWQgPSAxOworbG9uZyBJbnNwZWN0b3JET01TdG9yYWdl
UmVzb3VyY2U6OnNfbmV4dFVudXNlZElkID0gMTsKIAogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291
cmNlOjpJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UoU3RvcmFnZSogZG9tU3RvcmFnZSwgYm9v
bCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqIGZyYW1lKQogICAgIDogIEV2ZW50TGlzdGVuZXIoSW5z
cGVjdG9yRE9NU3RvcmFnZVJlc291cmNlVHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaAppbmRleCBmMDk3NWJhMmZj
MmI3OWE5ZGIzZGJjOTg3OTM1MDQwMzZjZjUzNGU3Li4xZDhmOTIyNmE5NmVmNWY1ZjQ3MzdkZmNm
NTc5YWE4YjE4MzExYmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oCkBAIC03NiwxMCArNzYsMTAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1faXNMb2NhbFN0b3JhZ2U7CiAgICAgICAgIFJl
ZlB0cjxGcmFtZT4gbV9mcmFtZTsKICAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmQqIG1fZnJvbnRl
bmQ7Ci0gICAgICAgIGludCBtX2lkOworICAgICAgICBsb25nIG1faWQ7CiAgICAgICAgIGJvb2wg
bV9yZXBvcnRpbmdDaGFuZ2VzVG9Gcm9udGVuZDsKIAotICAgICAgICBzdGF0aWMgaW50IHNfbmV4
dFVudXNlZElkOworICAgICAgICBzdGF0aWMgbG9uZyBzX25leHRVbnVzZWRJZDsKICAgICB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKaW5kZXggMzdmZjBhZWRmNDU4OTVhOWIyNzE4
OGQ2ZDZjOTljOTMxNjk1OTYzOC4uNjcwZTAwYmIwMDkzMWVlMDUyNTRiMDAzNGRhOWViNWE5MTc5
ZDhkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFi
YXNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRh
YmFzZUFnZW50LmNwcApAQCAtMjg2LDYgKzI4NiwxNSBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNl
QWdlbnQ6OmV4ZWN1dGVTUUwobG9uZyBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBi
bwogICAgICpzdWNjZXNzID0gdHJ1ZTsKIH0KIAorbG9uZyBJbnNwZWN0b3JEYXRhYmFzZUFnZW50
OjpkYXRhYmFzZUlkKERhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBmb3IgKERhdGFiYXNlUmVz
b3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVz
b3VyY2VzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+c2Vjb25kLT5kYXRhYmFzZSgp
ID09IGRhdGFiYXNlKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICB9CisgICAg
cmV0dXJuIDA7Cit9CisKIERhdGFiYXNlKiBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRhYmFz
ZUZvcklkKGxvbmcgZGF0YWJhc2VJZCkKIHsKICAgICBEYXRhYmFzZVJlc291cmNlc01hcDo6aXRl
cmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGRhdGFiYXNlSWQpOwpAQCAtMjk0LDE5ICszMDMs
NiBAQCBEYXRhYmFzZSogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VGb3JJZChsb25n
IGRhdGFiYXNlSWQpCiAgICAgcmV0dXJuIGl0LT5zZWNvbmQtPmRhdGFiYXNlKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6c2VsZWN0RGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFi
YXNlKQotewotICAgIGlmICghbV9mcm9udGVuZFByb3ZpZGVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBmb3IgKERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2Vz
LmJlZ2luKCk7IGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChp
dC0+c2Vjb25kLT5kYXRhYmFzZSgpID09IGRhdGFiYXNlKSB7Ci0gICAgICAgICAgICBtX2Zyb250
ZW5kUHJvdmlkZXItPmZyb250ZW5kKCktPnNlbGVjdERhdGFiYXNlKGl0LT5maXJzdCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikgJiYgRU5BQkxFKERBVEFCQVNFKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgK
aW5kZXggZGZiMDUxMDJlYzlhY2I5MGZlZTk1YjlhMzQyODQwMGVmYWIzOTBlYy4uNDE0M2I0ZTZk
ZTkzZjVmMWE0M2ZkY2JlZDM5NDEwMjdlMjRmNmQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCkBAIC02MSwxMyArNjEsMTQgQEAg
cHVibGljOgogICAgIHZvaWQgZXhlY3V0ZVNRTChsb25nIGRhdGFiYXNlSWQsIGNvbnN0IFN0cmlu
ZyYgcXVlcnksIGJvb2wqIHN1Y2Nlc3MsIGxvbmcqIHRyYW5zYWN0aW9uSWQpOwogCiAgICAgLy8g
Q2FsbGVkIGZyb20gdGhlIGluamVjdGVkIHNjcmlwdC4KLSAgICBEYXRhYmFzZSogZGF0YWJhc2VG
b3JJZChsb25nIGRhdGFiYXNlSWQpOwotICAgIHZvaWQgc2VsZWN0RGF0YWJhc2UoRGF0YWJhc2Uq
IGRhdGFiYXNlKTsKKyAgICBsb25nIGRhdGFiYXNlSWQoRGF0YWJhc2UqKTsKIAogICAgIHZvaWQg
ZGlkT3BlbkRhdGFiYXNlKFBhc3NSZWZQdHI8RGF0YWJhc2U+LCBjb25zdCBTdHJpbmcmIGRvbWFp
biwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwogcHJpdmF0ZToK
ICAgICBleHBsaWNpdCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMq
KTsKIAorICAgIERhdGFiYXNlKiBkYXRhYmFzZUZvcklkKGxvbmcgZGF0YWJhc2VJZCk7CisKICAg
ICBJbnN0cnVtZW50aW5nQWdlbnRzKiBtX2luc3RydW1lbnRpbmdBZ2VudHM7CiAgICAgdHlwZWRl
ZiBIYXNoTWFwPGludCwgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+ID4gRGF0YWJh
c2VSZXNvdXJjZXNNYXA7CiAgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXAgbV9yZXNvdXJjZXM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNv
dXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNv
dXJjZS5jcHAKaW5kZXggZTJkMmY4MWRjMTQ3ZmMwYjZkZDU1ZTFmMGVhMGIzNzk2YzI5YWUzNi4u
ODI5ZDBmYzczODNiMzg5ZTIzOWFkZjQ0YWU5ODU0NDc0YmJmNTM1ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcApA
QCAtMzgsNyArMzgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbnQgbmV4
dFVudXNlZElkID0gMTsKK3N0YXRpYyBsb25nIG5leHRVbnVzZWRJZCA9IDE7CiAKIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZT4gSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTo6
Y3JlYXRlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGRvbWFp
biwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaApp
bmRleCAyNGQ0ZjFjNmVhYWI5ZGUzNTA4ZWIwMTYyYTBlNGE4NGM2ZjI3YzIxLi5kYmExMTZhMDFj
OGMzNmJkNWNmOGE3ZDZmMmVhNTYwYzljYmEyNWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgKQEAgLTQ4LDExICs0OCwx
MiBAQCBwdWJsaWM6CiAgICAgdm9pZCBiaW5kKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCk7
CiAgICAgRGF0YWJhc2UqIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQog
ICAgIGxvbmcgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisKIHByaXZhdGU6CiAgICAgSW5z
cGVjdG9yRGF0YWJhc2VSZXNvdXJjZShQYXNzUmVmUHRyPERhdGFiYXNlPiwgY29uc3QgU3RyaW5n
JiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKIAog
ICAgIFJlZlB0cjxEYXRhYmFzZT4gbV9kYXRhYmFzZTsKLSAgICBpbnQgbV9pZDsKKyAgICBsb25n
IG1faWQ7CiAgICAgU3RyaW5nIG1fZG9tYWluOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgU3Ry
aW5nIG1fdmVyc2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggNzkzOGFmZGM3Nzg0MTcxZjljOTFmYjFjNjc3MDFiYmJl
YWRlYzU4MS4uZDgwNGJkN2FlNDEyY2EwMDYxZTQ1MjU4OTlhMzM3NDZjYWQzNmJjNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAK
QEAgLTczLDYgKzczLDEzIEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpzZXRQcm9wZXJ0
eVZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3RJCiAgICAgICAgIGluamVj
dGVkU2NyaXB0LnNldFByb3BlcnR5VmFsdWUob2JqZWN0SWQsIHByb3BlcnR5TmFtZSwgZXhwcmVz
c2lvbiwgcmVzdWx0KTsKIH0KIAordm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVhc2VP
YmplY3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdElkKQoreworICAgIEluamVj
dGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdEhvc3QtPmluamVjdGVk
U2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQuZ2V0KCkpOworICAgIGlmICghaW5qZWN0ZWRTY3Jp
cHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICBpbmplY3RlZFNjcmlwdC5yZWxlYXNlT2JqZWN0KG9i
amVjdElkKTsKK30KKwogdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVhc2VXcmFwcGVy
T2JqZWN0R3JvdXAobG9uZyBpbmplY3RlZFNjcmlwdElkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdy
b3VwKQogewogICAgIG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5yZWxlYXNlV3JhcHBlck9iamVjdEdy
b3VwKGluamVjdGVkU2NyaXB0SWQsIG9iamVjdEdyb3VwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAppbmRleCA5ZmIyNzE2ZmZmMzM1Mjg2
ZjM3ZDFjYTM2NGQzZmQ1MjUyMDA2MTM1Li5kZDVkYmZkNDBjYjZkNTJjMWFmNjY4ZGE5OWE1MThj
OGFiMGY4YzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UnVudGltZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1
bnRpbWVBZ2VudC5oCkBAIC02MSw2ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGdldENvbXBs
ZXRpb25zKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVB
UEksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CiAgICAgdm9pZCBnZXRQcm9wZXJ0
aWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3RJZCwgYm9vbCBpZ25vcmVIYXNP
d25Qcm9wZXJ0eSwgYm9vbCBhYmJyZXZpYXRlLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1
bHQpOwogICAgIHZvaWQgc2V0UHJvcGVydHlWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIGV4
cHJlc3Npb24sIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CisgICAgdm9pZCByZWxl
YXNlT2JqZWN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3RJZCk7CiAgICAgdm9p
ZCByZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwKGxvbmcgaW5qZWN0ZWRTY3JpcHRJZCwgY29uc3Qg
U3RyaW5nJiBvYmplY3RHcm91cCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVsZXMuanMgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVsZXMuanMKaW5kZXggMDdkZmQ1YmYxNzhkNjY0ZjBi
ZDZiMTU2M2FjOTNkMDRjZWIyNjQzNy4uYmRjY2JmZTE4MzhhM2FhNjcyYTZiMzVkN2I5MjQ3NDM2
Y2M1NWQ1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9B
dWRpdFJ1bGVzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXVk
aXRSdWxlcy5qcwpAQCAtNzIsNyArNzIsNyBAQCBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5ldmFs
dWF0ZUluVGFyZ2V0V2luZG93ID0gZnVuY3Rpb24oZnVuYywgYXJncywgY2FsbGJhY2spCiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpOwogICAgIH0KLSAgICBSdW50aW1l
QWdlbnQuZXZhbHVhdGUoIkpTT04uc3RyaW5naWZ5KCgiICsgZnVuYyArICIpKCIgKyBKU09OLnN0
cmluZ2lmeShhcmdzKSArICIpKSIsICJub25lIiwgZmFsc2UsIG15Y2FsbGJhY2spOworICAgIFJ1
bnRpbWVBZ2VudC5ldmFsdWF0ZSgiSlNPTi5zdHJpbmdpZnkoKCIgKyBmdW5jICsgIikoIiArIEpT
T04uc3RyaW5naWZ5KGFyZ3MpICsgIikpIiwgIiIsIGZhbHNlLCBteWNhbGxiYWNrKTsKIH0KIAog
V2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuR3ppcFJ1bGUgPSBmdW5jdGlvbigpCkBAIC03NTAsNyAr
NzUwLDcgQEAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuSW1hZ2VEaW1lbnNpb25zUnVsZS5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICBpZiAoIXBheWxvYWQpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGNhbGxiYWNrKG51bGwpOwogCi0gICAgICAgICAgICB2YXIgbm9kZUlkc0FycmF5ID0gV2Vi
SW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9hZChwYXlsb2FkKQorICAgICAgICAgICAg
dmFyIG5vZGVJZHNBcnJheSA9IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QuZnJvbVBheWxvYWQo
cGF5bG9hZCk7CiAgICAgICAgICAgICBub2RlSWRzQXJyYXkuZ2V0T3duUHJvcGVydGllcyhmYWxz
ZSwgcmVjZWl2ZWRJbWFnZXMpOwogICAgICAgICB9CiAKQEAgLTc2Niw3ICs3NjYsNyBAQCBXZWJJ
bnNwZWN0b3IuQXVkaXRSdWxlcy5JbWFnZURpbWVuc2lvbnNSdWxlLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAotICAgICAgICBSdW50aW1lQWdl
bnQuZXZhbHVhdGUoIigiICsgcHVzaEltYWdlTm9kZXMgKyAiKSgpIiwgIm5vbmUiLCBmYWxzZSwg
cmVjZWl2ZWRJbWFnZXNBcnJheSk7CisgICAgICAgIFJ1bnRpbWVBZ2VudC5ldmFsdWF0ZSgiKCIg
KyBwdXNoSW1hZ2VOb2RlcyArICIpKCkiLCAiIiwgZmFsc2UsIHJlY2VpdmVkSW1hZ2VzQXJyYXkp
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9ET01TdG9yYWdlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9E
T01TdG9yYWdlLmpzCmluZGV4IDZlZTg5OWY0NmFiNWIxNzk5NWFiZTY2MmM5ODI2ZGVlYmE3MzY5
M2EuLmVhMjQ5MjFmNmQxNmVlYTU2MGQxMjIxOWNlMjdmMTRhOGIyNTgzMDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NU3RvcmFnZS5qcworKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTVN0b3JhZ2UuanMKQEAgLTgyLDEy
ICs4Miw2IEBAIFdlYkluc3BlY3Rvci5ET01TdG9yYWdlRGlzcGF0Y2hlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzLmFkZERPTVN0b3JhZ2UoZG9t
U3RvcmFnZSk7CiAgICAgfSwKIAotICAgIHNlbGVjdERPTVN0b3JhZ2U6IGZ1bmN0aW9uKG8pCi0g
ICAgewotICAgICAgICBXZWJJbnNwZWN0b3Iuc2hvd1BhbmVsKCJyZXNvdXJjZXMiKTsKLSAgICAg
ICAgV2ViSW5zcGVjdG9yLnBhbmVscy5yZXNvdXJjZXMuc2VsZWN0RE9NU3RvcmFnZShvKTsKLSAg
ICB9LAotCiAgICAgdXBkYXRlRE9NU3RvcmFnZTogZnVuY3Rpb24oc3RvcmFnZUlkKQogICAgIHsK
ICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5yZXNvdXJjZXMudXBkYXRlRE9NU3RvcmFnZShz
dG9yYWdlSWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9EYXRhYmFzZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJh
c2UuanMKaW5kZXggNzJjYzU5MTliMTE5NjZjYjA0NmZiOTQ1Y2ViNWI2OTExNDY2ODNmZC4uZTRi
YWZlYTgyZmI4ZmZjYTliMDMzYWVmYTU1ZDJmOTQ1Zjc5MmE1NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZS5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlLmpzCkBAIC0xMTUsMTIgKzExNSw2IEBA
IFdlYkluc3BlY3Rvci5EYXRhYmFzZURpc3BhdGNoZXIucHJvdG90eXBlID0gewogICAgICAgICBX
ZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcy5hZGREYXRhYmFzZShkYXRhYmFzZSk7CiAgICAg
fSwKIAotICAgIHNlbGVjdERhdGFiYXNlOiBmdW5jdGlvbihvKQotICAgIHsKLSAgICAgICAgV2Vi
SW5zcGVjdG9yLnNob3dQYW5lbCgicmVzb3VyY2VzIik7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5w
YW5lbHMucmVzb3VyY2VzLnNlbGVjdERhdGFiYXNlKG8pOwotICAgIH0sCi0KICAgICBzcWxUcmFu
c2FjdGlvblN1Y2NlZWRlZDogZnVuY3Rpb24odHJhbnNhY3Rpb25JZCwgY29sdW1uTmFtZXMsIHZh
bHVlcykKICAgICB7CiAgICAgICAgIGlmICghV2ViSW5zcGVjdG9yLkRhdGFiYXNlRGlzcGF0Y2hl
ci5fY2FsbGJhY2tzW3RyYW5zYWN0aW9uSWRdKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvblNlcnZlci5qcwppbmRleCBjYTJlODU2ODEwYzQ0
ZmZmZDYzZTdjOWEzYjE0MzY4ZmJjN2I3YWMzLi44MDNkOTU4OWJhN2E0ZWFiNzI3ZGMwN2Y2MWNl
ZDZjNDJlZDVkMWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0V4dGVuc2lvblNlcnZlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0V4dGVuc2lvblNlcnZlci5qcwpAQCAtMjcyLDcgKzI3Miw3IEBAIFdlYkluc3BlY3Rv
ci5FeHRlbnNpb25TZXJ2ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fZGlzcGF0
Y2hDYWxsYmFjayhtZXNzYWdlLnJlcXVlc3RJZCwgcG9ydCwgcmVzdWx0KTsKICAgICAgICAgfQog
ICAgICAgICB2YXIgZXZhbEV4cHJlc3Npb24gPSAiSlNPTi5zdHJpbmdpZnkoZXZhbCh1bmVzY2Fw
ZSgnIiArIGVzY2FwZShtZXNzYWdlLmV4cHJlc3Npb24pICsgIicpKSk7IjsKLSAgICAgICAgUnVu
dGltZUFnZW50LmV2YWx1YXRlKGV2YWxFeHByZXNzaW9uLCAibm9uZSIsIHRydWUsIGNhbGxiYWNr
LmJpbmQodGhpcykpOworICAgICAgICBSdW50aW1lQWdlbnQuZXZhbHVhdGUoZXZhbEV4cHJlc3Np
b24sICIiLCB0cnVlLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKICAgICB9LAogCiAgICAgX29uUmV2
ZWFsQW5kU2VsZWN0OiBmdW5jdGlvbihtZXNzYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCA0ZWI5YTcwZjIyNTVlYmUxNjIwYzhk
ZWQ5MjQ4NDg5N2U5ZDAwZjUxLi45MTI1ZTE0MjhkODhkZGI1ZTMwMDJlOGJjOTQwZWUxNjU4ZDhi
MmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3Bl
Y3Rvci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5qcwpAQCAtMTI0MCw2ICsxMjQwLDIzIEBAIFdlYkluc3BlY3Rvci5kcmF3TG9hZGluZ1BpZUNo
YXJ0ID0gZnVuY3Rpb24oY2FudmFzLCBwZXJjZW50KSB7CiAgICAgZy5maWxsKCk7CiB9CiAKK1dl
Ykluc3BlY3Rvci5pbnNwZWN0ID0gZnVuY3Rpb24ob2JqZWN0SWQsIGhpbnRzKQoreworICAgIHZh
ciBvYmplY3QgPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkKG9iamVjdElk
KTsKKyAgICBpZiAob2JqZWN0LnR5cGUgPT09ICJub2RlIikgeworICAgICAgICAvLyBSZXF1ZXN0
IG5vZGUgZnJvbSBiYWNrZW5kIGFuZCBmb2N1cyBpdC4KKyAgICAgICAgb2JqZWN0LnB1c2hOb2Rl
VG9Gcm9udGVuZChXZWJJbnNwZWN0b3IudXBkYXRlRm9jdXNlZE5vZGUuYmluZChXZWJJbnNwZWN0
b3IpKTsKKyAgICB9IGVsc2UgaWYgKGhpbnRzLmRhdGFiYXNlSWQpIHsKKyAgICAgICAgV2ViSW5z
cGVjdG9yLmN1cnJlbnRQYW5lbCA9IFdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzOworICAg
ICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcy5zZWxlY3REYXRhYmFzZShoaW50cy5k
YXRhYmFzZUlkKTsKKyAgICB9IGVsc2UgaWYgKGhpbnRzLmRvbVN0b3JhZ2VJZCkgeworICAgICAg
ICBXZWJJbnNwZWN0b3IuY3VycmVudFBhbmVsID0gV2ViSW5zcGVjdG9yLnBhbmVscy5yZXNvdXJj
ZXM7CisgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzLnNlbGVjdERPTVN0b3Jh
Z2UoaGludHMuZG9tU3RvcmFnZUlkKTsKKyAgICB9CisKKyAgICBSdW50aW1lQWdlbnQucmVsZWFz
ZU9iamVjdChvYmplY3RJZCk7Cit9CisKIFdlYkluc3BlY3Rvci51cGRhdGVGb2N1c2VkTm9kZSA9
IGZ1bmN0aW9uKG5vZGVJZCkKIHsKICAgICB0aGlzLl91cGRhdGVGb2N1c2VkTm9kZShub2RlSWQp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83546</attachid>
            <date>2011-02-23 14:08:12 -0800</date>
            <delta_ts>2011-02-24 06:26:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55057-20110224010809.patch</filename>
            <type>text/plain</type>
            <size>49424</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk0MTIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBiZDlhOGJmM2NkMDdiN2JkMzFhMGUz
YjIyZjk3ZmUyOGM3YzhkMzFkLi4zZWRhMzI5NmJlOWRlZDNhYjkxZmJmMzg3YmJhZWU2YWFiZGFm
YzEwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDItMjMgIFBhdmVsIEZlbGRtYW4gIDxw
ZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmVmYWN0b3IgaW5zcGVjdCgpIHdvcmtmbG93
IHNvIHRoYXQgaXQgZGlkIG5vdCBwdXNoIGRvbSBub2Rlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1MDU3CisKKyAgICAgICAgKiBodHRwL3Rlc3Rz
L2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qczoKKyAgICAgICAgKGluaXRpYWxpemVfSW5zcGVj
dG9yVGVzdC5JbnNwZWN0b3JUZXN0LnJ1blRlc3RTdWl0ZS5ydW5uZXIpOgorICAgICAgICAoaW5p
dGlhbGl6ZV9JbnNwZWN0b3JUZXN0Lkluc3BlY3RvclRlc3QucnVuVGVzdFN1aXRlKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvY29uc29sZS9jb21tYW5kLWxpbmUtYXBpLWluc3BlY3QtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvY29uc29sZS9jb21tYW5kLWxpbmUtYXBp
LWluc3BlY3QuaHRtbDogQWRkZWQuCisKIDIwMTEtMDItMjIgIE1PUklUQSBIYWppbWUgPG1vcnJp
dGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIHRlc3RfZXhwZWN0YXRpb25zLnR4
dCB1cGRhdGUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9p
bnNwZWN0b3ItdGVzdC5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3Bl
Y3Rvci10ZXN0LmpzCmluZGV4IGIxMDM5NTg3MGU5MDhkYmFjODRkMjU2YjYxMzBlZDE2OGQyZjNi
YjQuLjFjNmI0MzViZTExNmEzOGI4MDYwODJmYTdkNGNjNWMyYjIwODdiZGIgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzCisrKyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzCkBAIC0x
NDksNyArMTQ5LDggQEAgSW5zcGVjdG9yVGVzdC5ydW5UZXN0U3VpdGUgPSBmdW5jdGlvbih0ZXN0
U3VpdGUpCiAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIEluc3BlY3RvclRlc3Quc2FmZVdyYXAo
dGVzdFN1aXRlVGVzdHMuc2hpZnQoKSkocnVubmVyLCBydW5uZXIpOworICAgICAgICB2YXIgbmV4
dFRlc3QgPSB0ZXN0U3VpdGVUZXN0cy5zaGlmdCgpOworICAgICAgICBJbnNwZWN0b3JUZXN0LnNh
ZmVXcmFwKG5leHRUZXN0KShydW5uZXIsIHJ1bm5lcik7CiAgICAgfQogICAgIHJ1bm5lcigpOwog
fQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUvY29tbWFuZC1saW5l
LWFwaS1pbnNwZWN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xl
L2NvbW1hbmQtbGluZS1hcGktaW5zcGVjdC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTMzYzZh
ZmY2OTA4MTE3YzliZDcwMTNmOWE4NzBkYjZmZjI5NDgxOAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlL2NvbW1hbmQtbGluZS1hcGktaW5zcGVjdC1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwyOSBAQAorVGVzdHMgdGhhdCBpbnNwZWN0KCkgY29tbWFuZCBs
aW5lIGFwaSB3b3Jrcy4KKworCisKK1dlYkluc3BlY3Rvci5pbnNwZWN0IGNhbGxlZCB3aXRoOiBI
VE1MUGFyYWdyYXBoRWxlbWVudAorV2ViSW5zcGVjdG9yLmluc3BlY3QncyBoaW50cyBhcmU6IHt9
CitpbnNwZWN0KCQoJ3AxJykpID0gCitTZWxlY3RlZCBub2RlIGlkOiAncDEnLgorCisKK1dlYklu
c3BlY3Rvci5pbnNwZWN0IGNhbGxlZCB3aXRoOiBEYXRhYmFzZQorV2ViSW5zcGVjdG9yLmluc3Bl
Y3QncyBoaW50cyBhcmU6IHsiZGF0YWJhc2VJZCI6MX0KK2luc3BlY3QoZGIpID0gRGF0YWJhc2UK
KworCitXZWJJbnNwZWN0b3IuaW5zcGVjdCBjYWxsZWQgd2l0aDogRGF0YWJhc2UKK1dlYkluc3Bl
Y3Rvci5pbnNwZWN0J3MgaGludHMgYXJlOiB7ImRhdGFiYXNlSWQiOjJ9CitpbnNwZWN0KGRiMikg
PSBEYXRhYmFzZQorCisKK1dlYkluc3BlY3Rvci5pbnNwZWN0IGNhbGxlZCB3aXRoOiBTdG9yYWdl
CitXZWJJbnNwZWN0b3IuaW5zcGVjdCdzIGhpbnRzIGFyZTogeyJkb21TdG9yYWdlSWQiOjF9Citp
bnNwZWN0KGxvY2FsU3RvcmFnZSkgPSBTdG9yYWdlCisKKworV2ViSW5zcGVjdG9yLmluc3BlY3Qg
Y2FsbGVkIHdpdGg6IFN0b3JhZ2UKK1dlYkluc3BlY3Rvci5pbnNwZWN0J3MgaGludHMgYXJlOiB7
ImRvbVN0b3JhZ2VJZCI6Mn0KK2luc3BlY3Qoc2Vzc2lvblN0b3JhZ2UpID0gU3RvcmFnZQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS9jb21tYW5kLWxpbmUtYXBp
LWluc3BlY3QuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlL2NvbW1hbmQtbGlu
ZS1hcGktaW5zcGVjdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhMzhkYzA2OWFhMjBlYjlkY2Q1ODVmM2Y3
MTJmM2I2NDJiMGEzMDIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
Y29uc29sZS9jb21tYW5kLWxpbmUtYXBpLWluc3BlY3QuaHRtbApAQCAtMCwwICsxLDc2IEBACis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2lu
c3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rlc3Rz
L2luc3BlY3Rvci9jb25zb2xlLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworZnVuY3Rp
b24gb25sb2FkKCkKK3sKKyAgICB3aW5kb3cuZGIgPSBvcGVuRGF0YWJhc2UoIkluc3BlY3RvckRh
dGFiYXNlVGVzdCIsICIxLjAiLCAiVGVzdCBvZiBkYXRhYmFzZSByZXZlYWwgaW4gaW5zcGVjdG9y
IiwgMSk7CisgICAgd2luZG93LmRiMiA9IG9wZW5EYXRhYmFzZSgiSW5zcGVjdG9yRGF0YWJhc2VU
ZXN0MiIsICIxLjAiLCAiVGVzdCBvZiBkYXRhYmFzZSByZXZlYWwgaW4gaW5zcGVjdG9yIiwgMSk7
CisgICAgbG9jYWxTdG9yYWdlWyJpbnNwZWN0b3IiXSA9ICJUZXN0IG9mIGxvY2FsIHN0b3JhZ2Ug
cmV2ZWFsIGluIGluc3BlY3RvciI7CisgICAgc2Vzc2lvblN0b3JhZ2VbImluc3BlY3RvciJdID0g
IlRlc3Qgb2Ygc2Vzc2lvbiBzdG9yYWdlIHJldmVhbCBpbiBpbnNwZWN0b3IiOworICAgIHJ1blRl
c3QoKTsKK30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgSW5zcGVjdG9yVGVzdC5hZGRTbmlm
ZmVyKFdlYkluc3BlY3RvciwgImluc3BlY3QiLCBzbmlmZkluc3BlY3QsIHRydWUpOworCisgICAg
ZnVuY3Rpb24gc25pZmZJbnNwZWN0KG9iamVjdElkLCBoaW50cykKKyAgICB7CisgICAgICAgIElu
c3BlY3RvclRlc3QuYWRkUmVzdWx0KCJXZWJJbnNwZWN0b3IuaW5zcGVjdCBjYWxsZWQgd2l0aDog
IiArIG9iamVjdElkLmRlc2NyaXB0aW9uKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1
bHQoIldlYkluc3BlY3Rvci5pbnNwZWN0J3MgaGludHMgYXJlOiAiICsgSlNPTi5zdHJpbmdpZnko
aGludHMpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBldmFsQW5kRHVtcChleHByZXNzaW9uLCBu
ZXh0KQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlxuIik7CisgICAg
ICAgIEluc3BlY3RvclRlc3QuZXZhbHVhdGVJbkNvbnNvbGVBbmREdW1wKGV4cHJlc3Npb24sIG5l
eHQpOworCX0KKworICAgIEluc3BlY3RvclRlc3QucnVuVGVzdFN1aXRlKFsKKyAgICAgICAgZnVu
Y3Rpb24gdGVzdFJldmVhbEVsZW1lbnQobmV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5hZGRTbmlmZmVyKFdlYkluc3BlY3RvciwgInVwZGF0ZUZvY3VzZWROb2RlIiwg
c3RlcDIpOworICAgICAgICAgICAgZXZhbEFuZER1bXAoImluc3BlY3QoJCgncDEnKSkiKTsKKwor
ICAgICAgICAgICAgZnVuY3Rpb24gc3RlcDIoKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJTZWxlY3RlZCBub2RlIGlkOiAnIiArIFdlYklu
c3BlY3Rvci5wYW5lbHMuZWxlbWVudHMuZm9jdXNlZERPTU5vZGUuZ2V0QXR0cmlidXRlKCJpZCIp
ICsgIicuIik7CisgICAgICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9LAorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RSZXZlYWxEYXRhYmFzZShuZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBldmFsQW5kRHVtcCgiaW5zcGVjdChkYikiLCBuZXh0KTsKKyAgICAg
ICAgfSwKKworICAgICAgICBmdW5jdGlvbiB0ZXN0UmV2ZWFsRGF0YWJhc2UyKG5leHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGV2YWxBbmREdW1wKCJpbnNwZWN0KGRiMikiLCBuZXh0KTsKKyAg
ICAgICAgfSwKKworICAgICAgICBmdW5jdGlvbiB0ZXN0UmV2ZWFsTG9jYWxTdG9yYWdlKG5leHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGV2YWxBbmREdW1wKCJpbnNwZWN0KGxvY2FsU3RvcmFn
ZSkiLCBuZXh0KTsKKyAgICAgICAgfSwKKworICAgICAgICBmdW5jdGlvbiB0ZXN0UmV2ZWFsU2Vz
c2lvblN0b3JhZ2UobmV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZXZhbEFuZER1bXAoImlu
c3BlY3Qoc2Vzc2lvblN0b3JhZ2UpIiwgbmV4dCk7CisgICAgICAgIH0KKyAgICBdKTsKK30KKwor
PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0ib25sb2FkKCkiPgorPHAgaWQ9InAx
Ij4KK1Rlc3RzIHRoYXQgaW5zcGVjdCgpIGNvbW1hbmQgbGluZSBhcGkgd29ya3MuCis8L3A+CisK
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiNjc3MzlmNGRjY2NkNjE0OTYyZWNlNWIy
ZTA3OWY2YzJiNGZmYzE1Li41Y2I1ZDMwNjUyNDE4NzI4Y2IyMDIzNjc5YWY0ZmYzMzBhZDg3MmU1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzggQEAKKzIwMTEtMDItMjMgIFBhdmVsIEZlbGRtYW4g
IDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmVmYWN0b3IgaW5zcGVjdCgpIHdvcmtm
bG93IHNvIHRoYXQgaXQgZGlkIG5vdCBwdXNoIGRvbSBub2Rlcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1MDU3CisKKyAgICAgICAgVGVzdDogaW5z
cGVjdG9yL2NvbnNvbGUvY29tbWFuZC1saW5lLWFwaS1pbnNwZWN0Lmh0bWwKKworICAgICAgICBJ
IGFtIHdvcmtpbmcgb24gZ2V0dGluZyByaWQgb2YgRE9NIGFnZW50IHB1c2hlcyAtIGV2ZXJ5dGhp
bmcgc2hvdWxkIGhhcHBlbiB1cG9uCisgICAgICAgIGZyb250LWVuZCByZXF1ZXN0LiBUaGlzIHBh
dGNoIGNoYW5nZXMgdGhlIHdheSB3ZSBoYW5kbGUgaW5zcGVjdCgpIGNvbW1hbmQgbGluZQorICAg
ICAgICBhcGk6IGluc3RlYWQgb2YgcHVzaGluZyBub2Rlcywgd2UgYXJlIHRlbGxpbmcgZnJvbnQt
ZW5kIHRoYXQgaW5zcGVjdChvYmplY3QpIGhhcworICAgICAgICBiZWVuIHJlcXVlc3RlZC4gSXQg
aXMgdGhlbiB1cCB0byBmcm9udC1lbmQgdG8gcmVxdWVzdCBkb20gbm9kZXMgYW5kIGZvY3VzIHRo
ZW0gaW4KKyAgICAgICAgdGhlIHRyZWUuIEkgYWxzbyBtYWRlIGluc3BlY3QoKSB3b3JrIGluIGEg
Z2VuZXJpYyBtYW5uZXIsIHVzaW5nIHNhbWUgcm91dGluZXMgZm9yCisgICAgICAgIG5vZGVzLCBk
YXRhYmFzZXMsIHN0b3JhZ2VzIGFuZCBwb3RlbnRpYWxseSBuZXcgZWxlbWVudHMuCisKKyAgICAg
ICAgQXMgYSBzaWRlLWVmZmVjdCwgd2UgZG9uJ3QgZG8gY29uc29sZS5sb2cgZnJvbSB3aXRoaW4g
aW5zcGVjdCgpIGFueW1vcmUsIGJ1dCBkdW1wCisgICAgICAgIGluc3BlY3RlZCB2YWx1ZSBhcyBp
bnNwZWN0J3MgcmVzdWx0LgorCisgICAgICAgIEFsc28sIEkgYWRkZWQgaW5kaXZpZHVhbCBvYmpl
Y3QgcmVsZWFzZSBtZXRob2QgYW5kIG1hZGUgb2JqZWN0IGdyb3VwcyBvcHRpb25hbC4KKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6c2NyaXB0VmFsdWVBc05vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0Ojpub2RlQXNTY3JpcHRWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6ZGF0YWJhc2VJZCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6c3RvcmFnZUlkKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0OjpzY3JpcHRWYWx1ZUFzTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6Om5vZGVBc1NjcmlwdFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4SW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0Q2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6VjhJbmplY3RlZFNjcmlwdEhvc3Q6OmRhdGFiYXNlSWRDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpWOEluamVjdGVkU2NyaXB0SG9zdDo6c3RvcmFnZUlkQ2FsbGJh
Y2spOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbmplY3RlZFNjcmlwdDo6bm9kZUZvck9iamVjdElkKToKKyAgICAgICAgKFdlYkNv
cmU6OkluamVjdGVkU2NyaXB0OjpyZWxlYXNlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
amVjdGVkU2NyaXB0Ojp3cmFwRm9yQ29uc29sZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3Rl
ZFNjcmlwdDo6aW5zcGVjdE5vZGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlw
dC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0SW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OmRhdGFiYXNlSWRJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6c3RvcmFnZUlkSW1wbCk6CisgICAgICAgICogaW5z
cGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdEhvc3QuaWRsOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJj
ZS5qczoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmlkbDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdl
bnQ6OmZvY3VzTm9kZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNw
cDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkVXNlRE9NU3RvcmFnZSk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yRGF0YWJhc2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFz
ZUFnZW50OjpkYXRhYmFzZUlkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJh
c2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNl
LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpyZWxlYXNlT2JqZWN0KToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9BdWRpdFJ1bGVzLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVs
ZXMuZXZhbHVhdGVJblRhcmdldFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRS
dWxlcy5JbWFnZURpbWVuc2lvbnNSdWxlLnByb3RvdHlwZS5kb1J1bik6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9ET01TdG9yYWdlLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvRGF0YWJhc2UuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNp
b25TZXJ2ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uU2VydmVyLnByb3Rv
dHlwZS5fb25FdmFsdWF0ZU9uSW5zcGVjdGVkUGFnZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuaW5zcGVjdCk6CisK
IDIwMTEtMDItMjIgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFuIEJlcm5zdGVpbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAppbmRleCBhMWRhNDM3ZTU3YzdlZTkz
YmQ3ZTllODAzNDYxZTk5OTQ5MjhjNjE2Li42NmI4MjFjZWZjMWVjNDU0NzEyYWUyZTkzN2FjNzhh
Y2JkYzBkMmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVj
dGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVk
ZSAiSlNSYW5nZS5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAjaW5jbHVkZSAi
U3RvcmFnZS5oIgogI2luY2x1ZGUgIkpTU3RvcmFnZS5oIgpAQCAtNzAsMTggKzcxLDIyIEBACiAj
aW5jbHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTSmF2YVNjcmlwdENh
bGxGcmFtZS5oIgogI2luY2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgiCi0jaW5jbHVkZSAiU2Ny
aXB0VmFsdWUuaCIKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLU5vZGUqIEluamVjdGVkU2NyaXB0SG9zdDo6dG9Ob2RlKFNjcmlwdFZhbHVl
IHZhbHVlKQorTm9kZSogSW5qZWN0ZWRTY3JpcHRIb3N0OjpzY3JpcHRWYWx1ZUFzTm9kZShTY3Jp
cHRWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkgfHwgdmFsdWUuaXNO
dWxsKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBXZWJDb3JlOjp0b05vZGUodmFs
dWUuanNWYWx1ZSgpKTsKKyAgICByZXR1cm4gdG9Ob2RlKHZhbHVlLmpzVmFsdWUoKSk7Cit9CisK
K1NjcmlwdFZhbHVlIEluamVjdGVkU2NyaXB0SG9zdDo6bm9kZUFzU2NyaXB0VmFsdWUoU2NyaXB0
U3RhdGUqIHN0YXRlLCBOb2RlKiBub2RlKQoreworICAgIHJldHVybiBTY3JpcHRWYWx1ZShzdGF0
ZS0+Z2xvYmFsRGF0YSgpLCB0b0pTKHN0YXRlLCBub2RlKSk7CiB9CiAKIFNjcmlwdE9iamVjdCBJ
bmplY3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZUluamVjdGVkU2NyaXB0KGNvbnN0IFN0cmluZyYgc291
cmNlLCBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGxvbmcgaWQpCkBAIC0xNTQsNDEgKzE1OSwz
NyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnRlcm5hbENvbnN0cnVjdG9yTmFt
ZShFeGVjU3RhdGUqIGV4ZWMpCiAKIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3Bl
Y3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0g
MSkgewotICAgICAgICBOb2RlKiBub2RlID0gV2ViQ29yZTo6dG9Ob2RlKGV4ZWMtPmFyZ3VtZW50
KDApKTsKLSAgICAgICAgaWYgKG5vZGUpCi0gICAgICAgICAgICBpbXBsKCktPmluc3BlY3Qobm9k
ZSk7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIFNjcmlw
dFZhbHVlIG9iamVjdElkKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+YXJndW1lbnQoMCkpOwor
ICAgICAgICBTY3JpcHRWYWx1ZSBoaW50cyhleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmFyZ3Vt
ZW50KDEpKTsKKyAgICAgICAgaW1wbCgpLT5pbnNwZWN0SW1wbChvYmplY3RJZC50b0luc3BlY3Rv
clZhbHVlKGV4ZWMpLCBoaW50cy50b0luc3BlY3RvclZhbHVlKGV4ZWMpKTsKICAgICB9CiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLSNpZiBFTkFCTEUoREFUQUJBU0UpCi1KU1ZhbHVl
IEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3REYXRhYmFzZShFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpkYXRhYmFzZUlkKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0KKyNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgRGF0YWJhc2UqIGRhdGFi
YXNlID0gdG9EYXRhYmFzZShleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKGRhdGFiYXNlKQot
ICAgICAgICBpbXBsKCktPnNlbGVjdERhdGFiYXNlKGRhdGFiYXNlKTsKKyAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKGltcGwoKS0+ZGF0YWJhc2VJZEltcGwoZGF0YWJhc2UpKTsKKyNlbmRpZgogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQotI2VuZGlmCiAKLSNpZiBFTkFCTEUoRE9NX1NUT1JB
R0UpCi1KU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3RET01TdG9yYWdlKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OnN0b3JhZ2VJZChFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGlmICghaW1wbCgpLT5pbnNwZWN0b3JBZ2Vu
dCgpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQorI2lmIEVOQUJMRShET01fU1RP
UkFHRSkKICAgICBTdG9yYWdlKiBzdG9yYWdlID0gdG9TdG9yYWdlKGV4ZWMtPmFyZ3VtZW50KDAp
KTsKICAgICBpZiAoc3RvcmFnZSkKLSAgICAgICAgaW1wbCgpLT5zZWxlY3RET01TdG9yYWdlKHN0
b3JhZ2UpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoaW1wbCgpLT5zdG9yYWdlSWRJbXBsKHN0
b3JhZ2UpKTsKKyNlbmRpZgogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQotI2VuZGlmCiAK
IEluamVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0SG9zdDo6aW5qZWN0ZWRTY3JpcHRGb3IoU2Ny
aXB0U3RhdGUqIHNjcmlwdFN0YXRlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAK
aW5kZXggMjI3NTY5MTM2NjhjYjIwM2Q5MGNlNmUyMmZmN2ZjYjM4ZDQ5NjZmNS4uYzUwYjk1MDUw
ZjAwYWEzNzljNWMyYjBhYzM3NjhhMWE5NDI0ZDk1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RD
dXN0b20uY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKICNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgorI2luY2x1ZGUgIlNjcmlw
dFZhbHVlLmgiCiAKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdT
dGF0ZS5oIgpAQCAtNTQsMTMgKzU1LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTm9k
ZSogSW5qZWN0ZWRTY3JpcHRIb3N0Ojp0b05vZGUoU2NyaXB0VmFsdWUgdmFsdWUpCitOb2RlKiBJ
bmplY3RlZFNjcmlwdEhvc3Q6OnNjcmlwdFZhbHVlQXNOb2RlKFNjcmlwdFZhbHVlIHZhbHVlKQog
ewogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSB8fCB2YWx1ZS5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgcmV0dXJuIFY4Tm9kZTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Pjo6Q2FzdCh2YWx1ZS52OFZhbHVlKCkpKTsKIH0KIAorU2NyaXB0VmFsdWUgSW5qZWN0ZWRT
Y3JpcHRIb3N0Ojpub2RlQXNTY3JpcHRWYWx1ZShTY3JpcHRTdGF0ZSogc3RhdGUsIE5vZGUqIG5v
ZGUpCit7CisgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHRvVjgobm9kZSkpOworfQorCiBzdGF0aWMg
dm9pZCBXZWFrUmVmZXJlbmNlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBvYmpl
Y3QsIHZvaWQqIHBhcmFtZXRlcikKIHsKICAgICBJbmplY3RlZFNjcmlwdEhvc3QqIG5hdGl2ZU9i
amVjdCA9IHN0YXRpY19jYXN0PEluamVjdGVkU2NyaXB0SG9zdCo+KHBhcmFtZXRlcik7CkBAIC0x
NzQsMTMgKzE4MCwxMyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJbmplY3RlZFNjcmlwdEhv
c3Q6OmludGVybmFsQ29uc3RydWN0b3JOYW1lQ2FsbGJhY2soY29ucwogdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4SW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0Q2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkluamVjdGVkU2NyaXB0SG9zdC5pbnNw
ZWN0KCkiKTsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCisgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPCAyKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgSW5qZWN0ZWRT
Y3JpcHRIb3N0KiBob3N0ID0gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OnRvTmF0aXZlKGFyZ3MuSG9s
ZGVyKCkpOwotICAgIE5vZGUqIG5vZGUgPSBWOE5vZGU6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpOwotICAgIGlmIChub2RlKQotICAgICAgICBob3N0LT5p
bnNwZWN0KG5vZGUpOworICAgIFNjcmlwdFZhbHVlIG9iamVjdElkKGFyZ3NbMF0pOworICAgIFNj
cmlwdFZhbHVlIGhpbnRzKGFyZ3NbMV0pOworICAgIGhvc3QtPmluc3BlY3RJbXBsKG9iamVjdElk
LnRvSW5zcGVjdG9yVmFsdWUoU2NyaXB0U3RhdGU6OmN1cnJlbnQoKSksIGhpbnRzLnRvSW5zcGVj
dG9yVmFsdWUoU2NyaXB0U3RhdGU6OmN1cnJlbnQoKSkpOwogCiAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKIH0KQEAgLTE5MywzNyArMTk5LDMzIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OEluamVjdGVkU2NyaXB0SG9zdDo6Y3VycmVudENhbGxGcmFtZUNhbGxiYWNrKGNvbnN0IHY4OjpB
CiB9CiAjZW5kaWYKIAotI2lmIEVOQUJMRShEQVRBQkFTRSkKLXY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOEluamVjdGVkU2NyaXB0SG9zdDo6c2VsZWN0RGF0YWJhc2VDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0ZWRTY3JpcHRI
b3N0OjpkYXRhYmFzZUlkQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKLSAg
ICBJTkNfU1RBVFMoIkluamVjdGVkU2NyaXB0SG9zdC5zZWxlY3REYXRhYmFzZSgpIik7CisgICAg
SU5DX1NUQVRTKCJJbmplY3RlZFNjcmlwdEhvc3QuZGF0YWJhc2VJZCgpIik7CiAgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCisjaWYg
RU5BQkxFKERBVEFCQVNFKQogICAgIEluamVjdGVkU2NyaXB0SG9zdCogaG9zdCA9IFY4SW5qZWN0
ZWRTY3JpcHRIb3N0Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBEYXRhYmFzZSogZGF0
YWJhc2UgPSBWOERhdGFiYXNlOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0
KGFyZ3NbMF0pKTsKICAgICBpZiAoZGF0YWJhc2UpCi0gICAgICAgIGhvc3QtPnNlbGVjdERhdGFi
YXNlKGRhdGFiYXNlKTsKLQorICAgICAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KGhvc3QtPmRh
dGFiYXNlSWRJbXBsKGRhdGFiYXNlKSk7CisjZW5kaWYKICAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOwogfQotI2VuZGlmCiAKLSNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi12ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OnNlbGVjdERPTVN0b3JhZ2VDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0
ZWRTY3JpcHRIb3N0OjpzdG9yYWdlSWRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KQogewotICAgIElOQ19TVEFUUygiSW5qZWN0ZWRTY3JpcHRIb3N0LnNlbGVjdERPTVN0b3JhZ2Uo
KSIpOwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKLQorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICBJTkNfU1RBVFMoIkluamVj
dGVkU2NyaXB0SG9zdC5zdG9yYWdlSWQoKSIpOwogICAgIEluamVjdGVkU2NyaXB0SG9zdCogaG9z
dCA9IFY4SW5qZWN0ZWRTY3JpcHRIb3N0Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBT
dG9yYWdlKiBzdG9yYWdlID0gVjhTdG9yYWdlOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+OjpDYXN0KGFyZ3NbMF0pKTsKICAgICBpZiAoc3RvcmFnZSkKLSAgICAgICAgaG9zdC0+c2Vs
ZWN0RE9NU3RvcmFnZShzdG9yYWdlKTsKLQorICAgICAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3
KGhvc3QtPnN0b3JhZ2VJZEltcGwoc3RvcmFnZSkpOworI2VuZGlmCiAgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKIH0KLSNlbmRpZgogCiBJbmplY3RlZFNjcmlwdCBJbmplY3RlZFNjcmlwdEhv
c3Q6OmluamVjdGVkU2NyaXB0Rm9yKFNjcmlwdFN0YXRlKiBpbnNwZWN0ZWRTY3JpcHRTdGF0ZSkK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCmluZGV4IGRi
OTBiZDc3NjYyN2NlMmE3YmI1YWM1MmM1MGRlMGUwMzU3YjdlYmMuLjNkZDcyOTNlNjgyMzI0Mzli
ZWFkYzc3ZDgyYzdlOTkyZGM3ZWQyZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0LmNwcApAQCAtMzMsNiArMzMsNyBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKIAorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0Lmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgpAQCAtMTA0
LDcgKzEwNSw3IEBAIE5vZGUqIEluamVjdGVkU2NyaXB0Ojpub2RlRm9yT2JqZWN0SWQoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdElkKQogICAgIFNjcmlwdFZhbHVlIHJlc3VsdFZh
bHVlID0gZnVuY3Rpb24uY2FsbChoYWRFeGNlcHRpb24pOwogICAgIEFTU0VSVCghaGFkRXhjZXB0
aW9uKTsKIAotICAgIHJldHVybiBJbmplY3RlZFNjcmlwdEhvc3Q6OnRvTm9kZShyZXN1bHRWYWx1
ZSk7CisgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdDo6c2NyaXB0VmFsdWVBc05vZGUocmVz
dWx0VmFsdWUpOwogfQogCiB2b2lkIEluamVjdGVkU2NyaXB0OjpyZXNvbHZlTm9kZShsb25nIG5v
ZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQpAQCAtMTM4LDYgKzEzOSwxNCBA
QCB2b2lkIEluamVjdGVkU2NyaXB0OjpzZXRQcm9wZXJ0eVZhbHVlKFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBvYmplY3RJZCwgY29ucwogICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCByZXN1bHQp
OwogfQogCit2b2lkIEluamVjdGVkU2NyaXB0OjpyZWxlYXNlT2JqZWN0KFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBvYmplY3RJZCkKK3sKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rp
b24obV9pbmplY3RlZFNjcmlwdE9iamVjdCwgInJlbGVhc2VPYmplY3QiKTsKKyAgICBmdW5jdGlv
bi5hcHBlbmRBcmd1bWVudChvYmplY3RJZC0+dG9KU09OU3RyaW5nKCkpOworICAgIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gcmVzdWx0OworICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVzdWx0KTsK
K30KKwogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gSW5qZWN0ZWRTY3JpcHQ6OmNhbGxGcmFtZXMoKQogewpAQCAtMTQ4LDE3ICsxNTcs
MzIgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5qZWN0ZWRTY3JpcHQ6OmNhbGxGcmFt
ZXMoKQogfQogI2VuZGlmCiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluamVjdGVkU2Ny
aXB0Ojp3cmFwRm9yQ29uc29sZShTY3JpcHRWYWx1ZSB2YWx1ZSkKK1Bhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcEZvckNvbnNvbGUoU2NyaXB0VmFsdWUgdmFs
dWUpCiB7CiAgICAgQVNTRVJUKCFoYXNOb1ZhbHVlKCkpOwotICAgIFNjcmlwdEZ1bmN0aW9uQ2Fs
bCB3cmFwRnVuY3Rpb24obV9pbmplY3RlZFNjcmlwdE9iamVjdCwgIndyYXBPYmplY3RGb3JDb25z
b2xlIik7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIHdyYXBGdW5jdGlvbihtX2luamVjdGVkU2Ny
aXB0T2JqZWN0LCAid3JhcEZvckNvbnNvbGUiKTsKICAgICB3cmFwRnVuY3Rpb24uYXBwZW5kQXJn
dW1lbnQodmFsdWUpOwogICAgIHdyYXBGdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYW5BY2Nlc3NJ
bnNwZWN0ZWRXaW5kb3coKSk7CiAgICAgYm9vbCBoYWRFeGNlcHRpb24gPSBmYWxzZTsKICAgICBT
Y3JpcHRWYWx1ZSByID0gd3JhcEZ1bmN0aW9uLmNhbGwoaGFkRXhjZXB0aW9uKTsKLSAgICBpZiAo
aGFkRXhjZXB0aW9uKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUoIjxl
eGNlcHRpb24+Iik7Ci0gICAgcmV0dXJuIHIudG9JbnNwZWN0b3JWYWx1ZShtX2luamVjdGVkU2Ny
aXB0T2JqZWN0LnNjcmlwdFN0YXRlKCkpOworICAgIGlmIChoYWRFeGNlcHRpb24pIHsKKyAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoImRlc2NyaXB0aW9uIiwgIjxleGNlcHRp
b24+Iik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiByLnRvSW5z
cGVjdG9yVmFsdWUobV9pbmplY3RlZFNjcmlwdE9iamVjdC5zY3JpcHRTdGF0ZSgpKS0+YXNPYmpl
Y3QoKTsKK30KKwordm9pZCBJbmplY3RlZFNjcmlwdDo6aW5zcGVjdE5vZGUoTm9kZSogbm9kZSkK
K3sKKyAgICBBU1NFUlQoIWhhc05vVmFsdWUoKSk7CisgICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+
b3duZXJEb2N1bWVudCgpID8gbm9kZS0+b3duZXJEb2N1bWVudCgpLT5mcmFtZSgpIDogMDsKKyAg
ICBpZiAoZnJhbWUpIHsKKyAgICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1faW5q
ZWN0ZWRTY3JpcHRPYmplY3QsICJpbnNwZWN0Tm9kZSIpOworICAgICAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudChJbmplY3RlZFNjcmlwdEhvc3Q6Om5vZGVBc1NjcmlwdFZhbHVlKG1haW5Xb3Js
ZFNjcmlwdFN0YXRlKGZyYW1lKSwgbm9kZSkpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IHJlc3VsdDsKKyAgICAgICAgbWFrZUNhbGwoZnVuY3Rpb24sICZyZXN1bHQpOworICAgIH0K
IH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdDo6cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChjb25z
dCBTdHJpbmcmIG9iamVjdEdyb3VwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHQuaAppbmRleCAxYzRjMjM2YzlkNDRmYmEzODA5MDk0MTFlYmViZTUzNTA0MDkzNWFjLi5i
ZDVhNWE2OGQ0NjNlMzQ3NGQxNzUzYmJkZjhiYzhlODQ1ODU1Y2Q5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaApAQCAtNjEsMjAgKzYxLDIyIEBAIHB1YmxpYzoK
ICAgICB2b2lkIGdldE5vZGVQcm9wZXJ0aWVzKGxvbmcgbm9kZUlkLCBQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm9wZXJ0aWVzQXJyYXksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3Vs
dCk7CiAgICAgdm9pZCBnZXROb2RlUHJvdG90eXBlcyhsb25nIG5vZGVJZCwgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiogcmVzdWx0KTsKICAgICB2b2lkIHNldFByb3BlcnR5VmFsdWUoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdElkLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwg
Y29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQp
OwotCisgICAgdm9pZCByZWxlYXNlT2JqZWN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBv
YmplY3RJZCk7CisgICAgCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgUGFz
c1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gY2FsbEZyYW1lcygpOwogI2VuZGlmCiAKLSAgICBQYXNz
UmVmUHRyPEluc3BlY3RvclZhbHVlPiB3cmFwRm9yQ29uc29sZShTY3JpcHRWYWx1ZSk7CisgICAg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHdyYXBGb3JDb25zb2xlKFNjcmlwdFZhbHVlKTsK
KyAgICB2b2lkIGluc3BlY3ROb2RlKE5vZGUqKTsKICAgICB2b2lkIHJlbGVhc2VXcmFwcGVyT2Jq
ZWN0R3JvdXAoY29uc3QgU3RyaW5nJik7CiAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlwdE9iamVjdC5zY3JpcHRTdGF0ZSgpOyB9CiAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIEluamVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0SG9zdDo6
aW5qZWN0ZWRTY3JpcHRGb3IoU2NyaXB0U3RhdGUqKTsKICAgICBleHBsaWNpdCBJbmplY3RlZFNj
cmlwdChTY3JpcHRPYmplY3QpOwotICAgIGJvb2wgY2FuQWNjZXNzSW5zcGVjdGVkV2luZG93KCk7
CiAKKyAgICBib29sIGNhbkFjY2Vzc0luc3BlY3RlZFdpbmRvdygpOwogICAgIHZvaWQgbWFrZUNh
bGwoU2NyaXB0RnVuY3Rpb25DYWxsJiwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsK
IAogICAgIFNjcmlwdE9iamVjdCBtX2luamVjdGVkU2NyaXB0T2JqZWN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAppbmRleCA1YjEzNzc4MTIw
NWY3MDBjMDNmZjUyMjNmZGY4MzUzZGU2YTQxNDBhLi42NWQ3NjA3NTRlNzY1MjdjYTI4Mzg3ZTBj
Mjg3NGJhZDcwZTMxZmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRIb3N0LmNwcApAQCAtODAsMTEgKzgwLDEwIEBAIEluamVjdGVkU2NyaXB0SG9zdDo6
fkluamVjdGVkU2NyaXB0SG9zdCgpCiB7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0Ojpp
bnNwZWN0KE5vZGUqIG5vZGUpCit2b2lkIEluamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdEltcGwo
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gb2JqZWN0SWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IGhpbnRzKQogewotICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3Bl
Y3RvckRPTUFnZW50KCk7Ci0gICAgaWYgKGRvbUFnZW50KQotICAgICAgICBkb21BZ2VudC0+aW5z
cGVjdChub2RlKTsKKyAgICBpZiAoSW5zcGVjdG9yRnJvbnRlbmQqIGZlID0gZnJvbnRlbmQoKSkK
KyAgICAgICAgZmUtPmluc3BlY3Qob2JqZWN0SWQtPmFzT2JqZWN0KCksIGhpbnRzLT5hc09iamVj
dCgpKTsKIH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmNsZWFyQ29uc29sZU1lc3NhZ2Vz
KCkKQEAgLTExNSwyNSArMTE0LDIwIEBAIGxvbmcgSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0
ZWROb2RlKHVuc2lnbmVkIGxvbmcgbnVtKQogfQogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQotRGF0
YWJhc2UqIEluamVjdGVkU2NyaXB0SG9zdDo6ZGF0YWJhc2VGb3JJZChsb25nIGRhdGFiYXNlSWQp
Citsb25nIEluamVjdGVkU2NyaXB0SG9zdDo6ZGF0YWJhc2VJZEltcGwoRGF0YWJhc2UqIGRhdGFi
YXNlKQogewogICAgIGlmIChtX2luc3BlY3RvckFnZW50ICYmIG1faW5zcGVjdG9yQWdlbnQtPmRh
dGFiYXNlQWdlbnQoKSkKLSAgICAgICAgcmV0dXJuIG1faW5zcGVjdG9yQWdlbnQtPmRhdGFiYXNl
QWdlbnQoKS0+ZGF0YWJhc2VGb3JJZChkYXRhYmFzZUlkKTsKKyAgICAgICAgcmV0dXJuIG1faW5z
cGVjdG9yQWdlbnQtPmRhdGFiYXNlQWdlbnQoKS0+ZGF0YWJhc2VJZChkYXRhYmFzZSk7CiAgICAg
cmV0dXJuIDA7CiB9Ci0KLXZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3REYXRhYmFzZShE
YXRhYmFzZSogZGF0YWJhc2UpCi17Ci0gICAgaWYgKG1faW5zcGVjdG9yQWdlbnQgJiYgbV9pbnNw
ZWN0b3JBZ2VudC0+ZGF0YWJhc2VBZ2VudCgpKQotICAgICAgICBtX2luc3BlY3RvckFnZW50LT5k
YXRhYmFzZUFnZW50KCktPnNlbGVjdERhdGFiYXNlKGRhdGFiYXNlKTsKLX0KICNlbmRpZgogCiAj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQotdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OnNlbGVjdERP
TVN0b3JhZ2UoU3RvcmFnZSogc3RvcmFnZSkKK2xvbmcgSW5qZWN0ZWRTY3JpcHRIb3N0OjpzdG9y
YWdlSWRJbXBsKFN0b3JhZ2UqIHN0b3JhZ2UpCiB7CiAgICAgaWYgKG1faW5zcGVjdG9yQWdlbnQg
JiYgbV9pbnNwZWN0b3JBZ2VudC0+ZG9tU3RvcmFnZUFnZW50KCkpCi0gICAgICAgIG1faW5zcGVj
dG9yQWdlbnQtPmRvbVN0b3JhZ2VBZ2VudCgpLT5zZWxlY3RET01TdG9yYWdlKHN0b3JhZ2UpOwor
ICAgICAgICByZXR1cm4gbV9pbnNwZWN0b3JBZ2VudC0+ZG9tU3RvcmFnZUFnZW50KCktPnN0b3Jh
Z2VJZChzdG9yYWdlKTsKKyAgICByZXR1cm4gMDsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgKaW5kZXggMDQ1YTg0YjUwYTA1NTNk
MTBiYmRkYjQ5Mzc3YTVkN2ExNDgwZGVlOS4uNzY5MjkzOTEyNDg3NDdlNTdjNzhiOWI3MWVkYjQ3
NjhiZTQwNjZhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0SG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dEhvc3QuaApAQCAtNTgsMTUgKzU4LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbmplY3RlZFNjcmlwdEhvc3QoaW5zcGVjdG9yQWdlbnQpKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgTm9kZSogdG9Ob2RlKFNjcmlwdFZhbHVlIHZhbHVlKTsKKyAgICBzdGF0aWMgTm9k
ZSogc2NyaXB0VmFsdWVBc05vZGUoU2NyaXB0VmFsdWUpOworICAgIHN0YXRpYyBTY3JpcHRWYWx1
ZSBub2RlQXNTY3JpcHRWYWx1ZShTY3JpcHRTdGF0ZSosIE5vZGUqKTsKIAogICAgIH5JbmplY3Rl
ZFNjcmlwdEhvc3QoKTsKIAotICAgIHZvaWQgaW5zcGVjdChOb2RlKiBub2RlKTsKLQogICAgIElu
c3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yQWdlbnQ7
IH0KICAgICB2b2lkIGRpc2Nvbm5lY3RDb250cm9sbGVyKCkgeyBtX2luc3BlY3RvckFnZW50ID0g
MDsgfQogCisgICAgdm9pZCBpbnNwZWN0SW1wbChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBv
YmplY3RJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gaGludHMpOwogICAgIHZvaWQgY2xl
YXJDb25zb2xlTWVzc2FnZXMoKTsKIAogICAgIHZvaWQgY29weVRleHQoY29uc3QgU3RyaW5nJiB0
ZXh0KTsKQEAgLTc0LDExICs3NCwxMCBAQCBwdWJsaWM6CiAgICAgbG9uZyBpbnNwZWN0ZWROb2Rl
KHVuc2lnbmVkIGxvbmcgbnVtKTsKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICBEYXRhYmFz
ZSogZGF0YWJhc2VGb3JJZChsb25nIGRhdGFiYXNlSWQpOwotICAgIHZvaWQgc2VsZWN0RGF0YWJh
c2UoRGF0YWJhc2UqIGRhdGFiYXNlKTsKKyAgICBsb25nIGRhdGFiYXNlSWRJbXBsKERhdGFiYXNl
Kik7CiAjZW5kaWYKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0gICAgdm9pZCBzZWxlY3RET01T
dG9yYWdlKFN0b3JhZ2UqIHN0b3JhZ2UpOworICAgIGxvbmcgc3RvcmFnZUlkSW1wbChTdG9yYWdl
Kik7CiAjZW5kaWYKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICBsb25nIG5leHRXb3JrZXJJZCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9z
dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmlkbApp
bmRleCA5ZjFjMmRiZTg3MGMxYmVlYjk3OWZjODE0NjUyYWRjM2M3ZDY2NzQ1Li4wMjU4Zjc4MTc3
NDRiOWRiNzg1MWEzY2E0ZDk1YzkxMzVjZDkxZGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmlkbApAQCAtMzYsNyArMzYsNyBAQCBtb2R1bGUg
Y29yZSB7CiAKICAgICAgICAgdm9pZCBjb3B5VGV4dChpbiBET01TdHJpbmcgdGV4dCk7CiAgICAg
ICAgIFtDdXN0b21dIERPTU9iamVjdCBub2RlRm9ySWQoaW4gbG9uZyBub2RlSWQpOwotICAgICAg
ICBbQ3VzdG9tXSBpbnQgaW5zcGVjdChpbiBET01PYmplY3Qgbm9kZSk7CisgICAgICAgIFtDdXN0
b21dIHZvaWQgaW5zcGVjdChpbiBET01PYmplY3Qgb2JqZWN0SWQsIGluIERPTU9iamVjdCBoaW50
cyk7CiAgICAgICAgIGxvbmcgaW5zcGVjdGVkTm9kZShpbiB1bnNpZ25lZCBsb25nIG51bSk7CiAg
ICAgICAgIFtDdXN0b21dIERPTU9iamVjdCBpbnRlcm5hbENvbnN0cnVjdG9yTmFtZShpbiBET01P
YmplY3Qgb2JqZWN0KTsKIApAQCAtNDUsMTEgKzQ1LDExIEBAIG1vZHVsZSBjb3JlIHsKICNlbmRp
ZgogCiAjaWYgZGVmaW5lZChFTkFCTEVfREFUQUJBU0UpICYmIEVOQUJMRV9EQVRBQkFTRQotICAg
ICAgICBbQ3VzdG9tXSB2b2lkIHNlbGVjdERhdGFiYXNlKGluIERPTU9iamVjdCBkYXRhYmFzZSk7
CisgICAgICAgIFtDdXN0b21dIGxvbmcgZGF0YWJhc2VJZChpbiBET01PYmplY3QgZGF0YWJhc2Up
OwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKEVOQUJMRV9ET01fU1RPUkFHRSkgJiYgRU5BQkxFX0RP
TV9TVE9SQUdFCi0gICAgICAgIFtDdXN0b21dIHZvaWQgc2VsZWN0RE9NU3RvcmFnZShpbiBET01P
YmplY3Qgc3RvcmFnZSk7CisgICAgICAgIFtDdXN0b21dIGxvbmcgc3RvcmFnZUlkKGluIERPTU9i
amVjdCBzdG9yYWdlKTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChFTkFCTEVfV09SS0VSUykgJiYg
RU5BQkxFX1dPUktFUlMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdFNvdXJjZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdFNvdXJjZS5qcwppbmRleCAwYzdhNTY0YzUwNzE0NWM2ZjlhMTY5ODE5NzZiZTMzYjU2M2U5
ZjMwLi5mZjZlMDc2NTBlYmUzM2U1Yzc1ZjYwZmQ2YmU0NmIzZDY1YWNjYzA3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzCkBAIC01MCw3
ICs1MCw3IEBAIHZhciBJbmplY3RlZFNjcmlwdCA9IGZ1bmN0aW9uKCkKIH0KIAogSW5qZWN0ZWRT
Y3JpcHQucHJvdG90eXBlID0gewotICAgIHdyYXBPYmplY3RGb3JDb25zb2xlOiBmdW5jdGlvbihv
YmplY3QsIGNhbkFjY2Vzc0luc3BlY3RlZFdpbmRvdykKKyAgICB3cmFwRm9yQ29uc29sZTogZnVu
Y3Rpb24ob2JqZWN0LCBjYW5BY2Nlc3NJbnNwZWN0ZWRXaW5kb3cpCiAgICAgewogICAgICAgICBp
ZiAoY2FuQWNjZXNzSW5zcGVjdGVkV2luZG93KQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dy
YXBPYmplY3Qob2JqZWN0LCAiY29uc29sZSIpOwpAQCAtNjAsMjMgKzYwLDUyIEBAIEluamVjdGVk
U2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9LAogCisg
ICAgaW5zcGVjdE5vZGU6IGZ1bmN0aW9uKG9iamVjdCkKKyAgICB7CisgICAgICAgIHRoaXMuX2lu
c3BlY3Qob2JqZWN0KTsKKyAgICB9LAorCisgICAgX2luc3BlY3Q6IGZ1bmN0aW9uKG9iamVjdCkK
KyAgICB7CisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHZhciBvYmplY3RJZCA9IHRoaXMuX3dyYXBPYmplY3Qob2JqZWN0
LCAiIiwgZmFsc2UpOworICAgICAgICB2YXIgaGludHMgPSB7fTsKKworICAgICAgICBzd2l0Y2gg
KGluamVjdGVkU2NyaXB0Ll9kZXNjcmliZShvYmplY3QpKSB7CisgICAgICAgICAgICBjYXNlICJE
YXRhYmFzZSI6CisgICAgICAgICAgICAgICAgdmFyIGRhdGFiYXNlSWQgPSBJbmplY3RlZFNjcmlw
dEhvc3QuZGF0YWJhc2VJZChvYmplY3QpCisgICAgICAgICAgICAgICAgaWYgKGRhdGFiYXNlSWQp
CisgICAgICAgICAgICAgICAgICAgIGhpbnRzLmRhdGFiYXNlSWQgPSBkYXRhYmFzZUlkOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiU3RvcmFnZSI6CisgICAgICAg
ICAgICAgICAgdmFyIHN0b3JhZ2VJZCA9IEluamVjdGVkU2NyaXB0SG9zdC5zdG9yYWdlSWQob2Jq
ZWN0KQorICAgICAgICAgICAgICAgIGlmIChzdG9yYWdlSWQpCisgICAgICAgICAgICAgICAgICAg
IGhpbnRzLmRvbVN0b3JhZ2VJZCA9IHN0b3JhZ2VJZDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBJbmplY3RlZFNjcmlwdEhvc3QuaW5zcGVjdChvYmplY3RJZCwg
aGludHMpOworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0sCisKICAgICBfd3JhcE9iamVj
dDogZnVuY3Rpb24ob2JqZWN0LCBvYmplY3RHcm91cE5hbWUsIGFiYnJldmlhdGUpCiAgICAgewog
ICAgICAgICB0cnkgewotICAgICAgICAgICAgdmFyIG9iamVjdElkOwogICAgICAgICAgICAgaWYg
KHR5cGVvZiBvYmplY3QgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBvYmplY3QgPT09ICJmdW5jdGlv
biIgfHwgdGhpcy5faXNIVE1MQWxsQ29sbGVjdGlvbihvYmplY3QpKSB7CiAgICAgICAgICAgICAg
ICAgdmFyIGlkID0gdGhpcy5fbGFzdEJvdW5kT2JqZWN0SWQrKzsKICAgICAgICAgICAgICAgICB0
aGlzLl9pZFRvV3JhcHBlZE9iamVjdFtpZF0gPSBvYmplY3Q7CisgICAgICAgICAgICAgICAgdmFy
IG9iamVjdElkID0geyBpbmplY3RlZFNjcmlwdElkOiBpbmplY3RlZFNjcmlwdElkLCBpZDogaWQg
fTsKICAgICAKLSAgICAgICAgICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLl9vYmplY3RHcm91cHNb
b2JqZWN0R3JvdXBOYW1lXTsKLSAgICAgICAgICAgICAgICBpZiAoIWdyb3VwKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGdyb3VwID0gW107Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX29iamVj
dEdyb3Vwc1tvYmplY3RHcm91cE5hbWVdID0gZ3JvdXA7CisgICAgICAgICAgICAgICAgaWYgKG9i
amVjdEdyb3VwTmFtZSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLl9v
YmplY3RHcm91cHNbb2JqZWN0R3JvdXBOYW1lXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFn
cm91cCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBbXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuX29iamVjdEdyb3Vwc1tvYmplY3RHcm91cE5hbWVdID0gZ3JvdXA7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZ3JvdXAucHVzaChp
ZCk7CisgICAgICAgICAgICAgICAgICAgIG9iamVjdElkLmdyb3VwTmFtZSA9IG9iamVjdEdyb3Vw
TmFtZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZ3JvdXAucHVzaChpZCk7
Ci0gICAgICAgICAgICAgICAgb2JqZWN0SWQgPSB7IGluamVjdGVkU2NyaXB0SWQ6IGluamVjdGVk
U2NyaXB0SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3JvdXBOYW1lOiBvYmplY3RHcm91cE5hbWUgfTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3Qu
ZnJvbU9iamVjdChvYmplY3QsIG9iamVjdElkLCBhYmJyZXZpYXRlKTsKICAgICAgICAgfSBjYXRj
aCAoZSkgewpAQCAtMTgxLDYgKzIxMCwxMiBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7
CiAgICAgICAgIH0KICAgICB9LAogCisgICAgcmVsZWFzZU9iamVjdDogZnVuY3Rpb24ob2JqZWN0
SWQpCisgICAgeworICAgICAgICB2YXIgcGFyc2VkT2JqZWN0SWQgPSB0aGlzLl9wYXJzZU9iamVj
dElkKG9iamVjdElkKTsKKyAgICAgICAgZGVsZXRlIHRoaXMuX2lkVG9XcmFwcGVkT2JqZWN0W3Bh
cnNlZE9iamVjdElkLmlkXTsKKyAgICB9LAorCiAgICAgX3BvcHVsYXRlUHJvcGVydHlOYW1lczog
ZnVuY3Rpb24ob2JqZWN0LCByZXN1bHRTZXQpCiAgICAgewogICAgICAgICBmb3IgKHZhciBvID0g
b2JqZWN0OyBvOyBvID0gby5fX3Byb3RvX18pIHsKQEAgLTQ5OSw3ICs1MzQsNyBAQCBJbmplY3Rl
ZFNjcmlwdC5SZW1vdGVPYmplY3QuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKG9iamVjdCwgb2JqZWN0
SWQsIGFiYnJldmlhdGUpCiB7CiAgICAgdmFyIHR5cGUgPSBpbmplY3RlZFNjcmlwdC5fdHlwZShv
YmplY3QpOwogICAgIHZhciByYXdUeXBlID0gdHlwZW9mIG9iamVjdDsKLSAgICB2YXIgaGFzQ2hp
bGRyZW4gPSAocmF3VHlwZSA9PT0gIm9iamVjdCIgJiYgb2JqZWN0ICE9PSBudWxsICYmIChPYmpl
Y3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpLmxlbmd0aCB8fCAhIW9iamVjdC5fX3Byb3Rv
X18pKSB8fCByYXdUeXBlID09PSAiZnVuY3Rpb24iOworICAgIHZhciBoYXNDaGlsZHJlbiA9IChy
YXdUeXBlID09PSAib2JqZWN0IiAmJiBvYmplY3QgIT09IG51bGwgJiYgKCEhT2JqZWN0LmdldE93
blByb3BlcnR5TmFtZXMob2JqZWN0KS5sZW5ndGggfHwgISFvYmplY3QuX19wcm90b19fKSkgfHwg
cmF3VHlwZSA9PT0gImZ1bmN0aW9uIjsKICAgICB2YXIgZGVzY3JpcHRpb24gPSAiIjsKICAgICB0
cnkgewogICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSBpbmplY3RlZFNjcmlwdC5fZGVzY3JpYmUo
b2JqZWN0LCBhYmJyZXZpYXRlKTsKQEAgLTY4NiwyMiArNzIxLDcgQEAgQ29tbWFuZExpbmVBUElJ
bXBsLnByb3RvdHlwZSA9IHsKIAogICAgIGluc3BlY3Q6IGZ1bmN0aW9uKG9iamVjdCkKICAgICB7
Ci0gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGluc3BlY3RlZFdpbmRvdy5jb25zb2xlLmxvZyhvYmplY3QpOwotICAgICAg
ICBpZiAoaW5qZWN0ZWRTY3JpcHQuX3R5cGUob2JqZWN0KSA9PT0gIm5vZGUiKQotICAgICAgICAg
ICAgSW5qZWN0ZWRTY3JpcHRIb3N0Lmluc3BlY3Qob2JqZWN0KTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKGluamVjdGVkU2NyaXB0Ll9kZXNjcmliZShvYmplY3QpKSB7Ci0g
ICAgICAgICAgICAgICAgY2FzZSAiRGF0YWJhc2UiOgotICAgICAgICAgICAgICAgICAgICBJbmpl
Y3RlZFNjcmlwdEhvc3Quc2VsZWN0RGF0YWJhc2Uob2JqZWN0KTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAiU3RvcmFnZSI6Ci0gICAgICAgICAgICAg
ICAgICAgIEluamVjdGVkU2NyaXB0SG9zdC5zZWxlY3RET01TdG9yYWdlKG9iamVjdCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAg
IHJldHVybiBpbmplY3RlZFNjcmlwdC5faW5zcGVjdChvYmplY3QpOwogICAgIH0sCiAKICAgICBj
b3B5OiBmdW5jdGlvbihvYmplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRs
CmluZGV4IGYwYzBjZjI3YzNhNjg1NGFiYzBjMDk4MWI4ZDM3OWU3ZTg2Y2Q0MWMuLjc1NmNhNTI0
OTMyODVkNDM4NzkwYTRkZWNiYjBlZDExMjRjMDM0YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3IuaWRsCkBAIC02MSw2ICs2MSw4IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAg
dm9pZCBnZXRDb29raWVzKG91dCBBcnJheSBjb29raWVzLCBvdXQgU3RyaW5nIGNvb2tpZXNTdHJp
bmcpOwogICAgICAgICB2b2lkIGRlbGV0ZUNvb2tpZShpbiBTdHJpbmcgY29va2llTmFtZSwgaW4g
U3RyaW5nIGRvbWFpbik7CiAKKyAgICAgICAgW2V2ZW50XSB2b2lkIGluc3BlY3Qob3V0IE9iamVj
dCBvYmplY3RJZCwgb3V0IE9iamVjdCBoaW50cyk7CisKICAgICAgICAgLy8gRklYTUU6IGRpc3Bh
dGNoIG9uIGFnZW50cy4KICNpZiBkZWZpbmVkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAm
JiBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUgogICAgICAgICB2b2lkIGVuYWJsZURlYnVnZ2Vy
KCk7CkBAIC03Nyw2ICs3OSw3IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgdm9pZCBnZXRDb21w
bGV0aW9ucyhpbiBTdHJpbmcgZXhwcmVzc2lvbiwgaW4gYm9vbGVhbiBpbmNsdWRlQ29tbWFuZExp
bmVBUEksIG91dCBWYWx1ZSByZXN1bHQpOwogICAgICAgICB2b2lkIGdldFByb3BlcnRpZXMoaW4g
T2JqZWN0IG9iamVjdElkLCBpbiBib29sZWFuIGlnbm9yZUhhc093blByb3BlcnR5LCBpbiBib29s
ZWFuIGFiYnJldmlhdGUsIG91dCBWYWx1ZSByZXN1bHQpOwogICAgICAgICB2b2lkIHNldFByb3Bl
cnR5VmFsdWUoaW4gT2JqZWN0IG9iamVjdElkLCBpbiBTdHJpbmcgcHJvcGVydHlOYW1lLCBpbiBT
dHJpbmcgZXhwcmVzc2lvbiwgb3V0IFZhbHVlIHJlc3VsdCk7CisgICAgICAgIHZvaWQgcmVsZWFz
ZU9iamVjdChpbiBPYmplY3Qgb2JqZWN0SWQpOwogICAgICAgICB2b2lkIHJlbGVhc2VXcmFwcGVy
T2JqZWN0R3JvdXAoaW4gbG9uZyBpbmplY3RlZFNjcmlwdElkLCBpbiBTdHJpbmcgb2JqZWN0R3Jv
dXApOwogICAgIH07CiAKQEAgLTExOCw3ICsxMjEsNiBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAg
IHZvaWQgZXhlY3V0ZVNRTChpbiBsb25nIGRhdGFiYXNlSWQsIGluIFN0cmluZyBxdWVyeSwgb3V0
IGJvb2xlYW4gc3VjY2Vzcywgb3V0IGxvbmcgdHJhbnNhY3Rpb25JZCk7CiAKICAgICAgICAgW2V2
ZW50XSB2b2lkIGFkZERhdGFiYXNlKG91dCBPYmplY3QgZGF0YWJhc2UpOwotICAgICAgICBbZXZl
bnRdIHZvaWQgc2VsZWN0RGF0YWJhc2Uob3V0IGludCBkYXRhYmFzZUlkKTsKICAgICAgICAgW2V2
ZW50XSB2b2lkIHNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkKG91dCBsb25nIHRyYW5zYWN0aW9uSWQs
IG91dCBWYWx1ZSBjb2x1bW5OYW1lcywgb3V0IFZhbHVlIHZhbHVlcyk7CiAgICAgICAgIFtldmVu
dF0gdm9pZCBzcWxUcmFuc2FjdGlvbkZhaWxlZChvdXQgbG9uZyB0cmFuc2FjdGlvbklkLCBvdXQg
VmFsdWUgc3FsRXJyb3IpOwogICAgIH07CkBAIC0xMzEsNyArMTMzLDYgQEAgbW9kdWxlIGNvcmUg
ewogICAgICAgICB2b2lkIHJlbW92ZURPTVN0b3JhZ2VJdGVtKGluIGxvbmcgc3RvcmFnZUlkLCBp
biBTdHJpbmcga2V5LCBvdXQgYm9vbGVhbiBzdWNjZXNzKTsKICAgICAgICAgW2V2ZW50XSB2b2lk
IGFkZERPTVN0b3JhZ2Uob3V0IE9iamVjdCBzdG9yYWdlKTsKICAgICAgICAgW2V2ZW50XSB2b2lk
IHVwZGF0ZURPTVN0b3JhZ2Uob3V0IGludCBzdG9yYWdlSWQpOwotICAgICAgICBbZXZlbnRdIHZv
aWQgc2VsZWN0RE9NU3RvcmFnZShvdXQgaW50IHN0b3JhZ2VJZCk7CiAgICAgfTsKICNlbmRpZgog
CkBAIC0xNzEsNyArMTcyLDYgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICBbZXZlbnRdIHZvaWQg
Y2hpbGROb2RlQ291bnRVcGRhdGVkKG91dCBsb25nIGlkLCBvdXQgaW50IG5ld1ZhbHVlKTsKICAg
ICAgICAgW2V2ZW50XSB2b2lkIGNoaWxkTm9kZUluc2VydGVkKG91dCBsb25nIHBhcmVudElkLCBv
dXQgbG9uZyBwcmV2SWQsIG91dCBPYmplY3Qgbm9kZSk7CiAgICAgICAgIFtldmVudF0gdm9pZCBj
aGlsZE5vZGVSZW1vdmVkKG91dCBsb25nIHBhcmVudElkLCBvdXQgbG9uZyBpZCk7Ci0gICAgICAg
IFtldmVudF0gdm9pZCBpbnNwZWN0RWxlbWVudFJlcXVlc3RlZChvdXQgbG9uZyBub2RlSWQpOwog
ICAgIH07CiAKICAgICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPUlOU1BFQ1RPUl0gQ1NTIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCmluZGV4IDNjYjc3ZDBm
ZjYzOTExN2YxZDI0OGYyYmUwY2M0ZDIwMmI5MzdlNzUuLjQ4ZTJmOThmOTg3Njc4NjJmZjQ4YWNk
YzdjYzU5ZTc3OGVhNjY4YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckFnZW50LmNwcApAQCAtMjMzLDggKzIzMywyMSBAQCB2b2lkIEluc3BlY3RvckFnZW50Ojpmb2N1
c05vZGUoKQogICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKICAgICBBU1NFUlQobV9ub2RlVG9Gb2N1
cyk7CiAKLSAgICBtX2RvbUFnZW50LT5pbnNwZWN0KG1fbm9kZVRvRm9jdXMuZ2V0KCkpOworICAg
IFJlZlB0cjxOb2RlPiBub2RlID0gbV9ub2RlVG9Gb2N1cy5nZXQoKTsKICAgICBtX25vZGVUb0Zv
Y3VzID0gMDsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG5vZGUtPm93bmVyRG9jdW1lbnQo
KTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm47CisgICAgRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0SG9z
dC0+aW5qZWN0ZWRTY3JpcHRGb3IobWFpbldvcmxkU2NyaXB0U3RhdGUoZnJhbWUpKTsKKyAgICBp
ZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
bmplY3RlZFNjcmlwdC5pbnNwZWN0Tm9kZShub2RlLmdldCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JBZ2VudDo6aGlnaGxpZ2h0KE5vZGUqIG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBjZjZmYzExMmM4NmYwM2U2NGI4ZDE4YTI1
OTliMWQxZWRmNjc5OWUxLi5jY2MyZTNiNjUwMjQ0NzBkNWQ0ZjczNTU3ZDViYjNjM2M0NGYxOWQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAK
QEAgLTM4MCwxNiArMzgwLDYgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaENoaWxkTm9k
ZXNUb0Zyb250ZW5kKGxvbmcgbm9kZUlkKQogICAgIG1fZnJvbnRlbmQtPnNldENoaWxkTm9kZXMo
bm9kZUlkLCBjaGlsZHJlbi5yZWxlYXNlKCkpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50
OjppbnNwZWN0KE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFtX2Zyb250ZW5kKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBsb25nIGlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlKTsKLSAg
ICBpZiAoaWQpCi0gICAgICAgIG1fZnJvbnRlbmQtPmluc3BlY3RFbGVtZW50UmVxdWVzdGVkKGlk
KTsKLX0KLQogbG9uZyBJbnNwZWN0b3JET01BZ2VudDo6aW5zcGVjdGVkTm9kZSh1bnNpZ25lZCBs
b25nIG51bSkKIHsKICAgICBpZiAobnVtIDwgbV9pbnNwZWN0ZWROb2Rlcy5zaXplKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4IGZiNDllMTY1
YTVkYjI2NjQ4NDc4ZWJhNGM3NTA1OTIwYjJhNmNhOTIuLjE3OWIwZTg2NGE1YTk1NmNmZjA4NjEw
ZTEzYTc5ZmMzMGVmZjE3ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5oCkBAIC0xMzQsNyArMTM0LDYgQEAgcHVibGljOgogICAgIGxvbmcgcHVzaE5v
ZGVQYXRoVG9Gcm9udGVuZChOb2RlKik7CiAgICAgdm9pZCBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRl
bmQobG9uZyBub2RlSWQpOwogICAgIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGNvbnN0
IFN0cmluZyYgcGF0aCwgbG9uZyogbm9kZUlkKTsKLSAgICB2b2lkIGluc3BlY3QoTm9kZSopOwog
ICAgIGxvbmcgaW5zcGVjdGVkTm9kZSh1bnNpZ25lZCBsb25nIG51bSk7CiAgICAgdm9pZCBjb3B5
Tm9kZShsb25nIG5vZGVJZCk7CiAgICAgdm9pZCBzZXRET01MaXN0ZW5lcihET01MaXN0ZW5lciop
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50LmNwcAppbmRleCA1YzE4NmI4N2M2NjRiODY5NTIxNDljYjJiYTFhNzFjYTljMmIzOWU5
Li45MDJiMjMzMTM4OTgwNDZiZmIyZGM2MGZjNmE5ZDQ5ZTQzMDIzY2ExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcApA
QCAtMTE1LDI1ICsxMTUsMTggQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnJlbW92
ZURPTVN0b3JhZ2VJdGVtKGxvbmcgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcKICAgICB9CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzZWxlY3RET01TdG9yYWdlKFN0b3JhZ2Uq
IHN0b3JhZ2UpCitsb25nIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFN0b3Jh
Z2UqIHN0b3JhZ2UpCiB7CiAgICAgQVNTRVJUKHN0b3JhZ2UpOwotICAgIGlmICghbV9mcm9udGVu
ZCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgRnJhbWUqIGZyYW1lID0gc3RvcmFnZS0+ZnJhbWUo
KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBib29sIGlzTG9jYWxTdG9yYWdlID0g
KGZyYW1lLT5kb21XaW5kb3coKS0+bG9jYWxTdG9yYWdlKGVjKSA9PSBzdG9yYWdlICYmICFlYyk7
Ci0gICAgbG9uZyBzdG9yYWdlUmVzb3VyY2VJZCA9IDA7CiAgICAgRE9NU3RvcmFnZVJlc291cmNl
c01hcDo6aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZv
ciAoRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdp
bigpOyBpdCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25k
LT5pc1NhbWVIb3N0QW5kVHlwZShmcmFtZSwgaXNMb2NhbFN0b3JhZ2UpKSB7Ci0gICAgICAgICAg
ICBzdG9yYWdlUmVzb3VyY2VJZCA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9CisgICAgICAgIGlmIChpdC0+c2Vjb25kLT5pc1NhbWVIb3N0QW5kVHlwZShmcmFtZSwg
aXNMb2NhbFN0b3JhZ2UpKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKICAgICB9Ci0g
ICAgaWYgKHN0b3JhZ2VSZXNvdXJjZUlkKQotICAgICAgICBtX2Zyb250ZW5kLT5zZWxlY3RET01T
dG9yYWdlKHN0b3JhZ2VSZXNvdXJjZUlkKTsKKyAgICByZXR1cm4gMDsKIH0KIAogSW5zcGVjdG9y
RE9NU3RvcmFnZVJlc291cmNlKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3Jh
Z2VSZXNvdXJjZUZvcklkKGxvbmcgc3RvcmFnZUlkKQpAQCAtMTQ3LDkgKzE0MCwxMCBAQCBJbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2UqIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9N
U3RvcmFnZVJlc291cmNlRm9ySQogdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRpZFVz
ZURPTVN0b3JhZ2UoU3RvcmFnZUFyZWEqIHN0b3JhZ2VBcmVhLCBib29sIGlzTG9jYWxTdG9yYWdl
LCBGcmFtZSogZnJhbWUpCiB7CiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3Ig
ZG9tU3RvcmFnZUVuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwotICAgIGZvciAoRE9NU3RvcmFnZVJl
c291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkb21T
dG9yYWdlRW5kOyArK2l0KQorICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0
b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KSB7
CiAgICAgICAgIGlmIChpdC0+c2Vjb25kLT5pc1NhbWVIb3N0QW5kVHlwZShmcmFtZSwgaXNMb2Nh
bFN0b3JhZ2UpKQogICAgICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIFJlZlB0cjxTdG9y
YWdlPiBkb21TdG9yYWdlID0gU3RvcmFnZTo6Y3JlYXRlKGZyYW1lLCBzdG9yYWdlQXJlYSk7CiAg
ICAgUmVmUHRyPEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gcmVzb3VyY2UgPSBJbnNwZWN0
b3JET01TdG9yYWdlUmVzb3VyY2U6OmNyZWF0ZShkb21TdG9yYWdlLmdldCgpLCBpc0xvY2FsU3Rv
cmFnZSwgZnJhbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudC5oCmluZGV4IDg1ZmI5NWRlN2ZlMDZjZTNhOWFiY2ZmMzZkODdjODUx
YTNmNzc5ZWYuLjg2ZWI1MTA0Y2VjMDhjYjJmYzY2ZWI5NzdmMmI0YWU2OThjNGE4MDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
LmgKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlRE9NU3RvcmFnZUl0
ZW0obG9uZyBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBib29sKiBzdWNjZXNzKTsKIAog
ICAgIC8vIENhbGxlZCBmcm9tIHRoZSBpbmplY3RlZCBzY3JpcHQuCi0gICAgdm9pZCBzZWxlY3RE
T01TdG9yYWdlKFN0b3JhZ2UqIHN0b3JhZ2UpOworICAgIGxvbmcgc3RvcmFnZUlkKFN0b3JhZ2Uq
KTsKIAogICAgIC8vIENhbGxlZCBmcm9tIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZv
aWQgZGlkVXNlRE9NU3RvcmFnZShTdG9yYWdlQXJlYSosIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZy
YW1lKik7CkBAIC03Myw3ICs3Myw3IEBAIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yRE9NU3RvcmFn
ZVJlc291cmNlKiBnZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJZChsb25nIHN0b3JhZ2VJZCk7CiAK
ICAgICBJbnN0cnVtZW50aW5nQWdlbnRzKiBtX2luc3RydW1lbnRpbmdBZ2VudHM7Ci0gICAgdHlw
ZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gPiBE
T01TdG9yYWdlUmVzb3VyY2VzTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxsb25nLCBSZWZQdHI8
SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlPiA+IERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA7CiAg
ICAgRE9NU3RvcmFnZVJlc291cmNlc01hcCBtX3Jlc291cmNlczsKICAgICBJbnNwZWN0b3JGcm9u
dGVuZCogbV9mcm9udGVuZDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwCmluZGV4IGNmZDVmOWZkOGJhMDUz
ZmE3M2UxY2RjMTg4YWE5M2UyYjlkYzRkMjEuLmI2MDdhM2QzM2I5NTg5YTE1ODdhMDA0YTQ2OTZk
NDg0OGNjNWI3YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwCkBAIC00Niw3ICs0Niw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotaW50IEluc3BlY3RvckRPTVN0
b3JhZ2VSZXNvdXJjZTo6c19uZXh0VW51c2VkSWQgPSAxOworbG9uZyBJbnNwZWN0b3JET01TdG9y
YWdlUmVzb3VyY2U6OnNfbmV4dFVudXNlZElkID0gMTsKIAogSW5zcGVjdG9yRE9NU3RvcmFnZVJl
c291cmNlOjpJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UoU3RvcmFnZSogZG9tU3RvcmFnZSwg
Ym9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqIGZyYW1lKQogICAgIDogIEV2ZW50TGlzdGVuZXIo
SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlVHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaAppbmRleCBmMDk3NWJh
MmZjMmI3OWE5ZGIzZGJjOTg3OTM1MDQwMzZjZjUzNGU3Li4xZDhmOTIyNmE5NmVmNWY1ZjQ3Mzdk
ZmNmNTc5YWE4YjE4MzExYmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oCkBAIC03NiwxMCArNzYsMTAgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1faXNMb2NhbFN0b3JhZ2U7CiAgICAgICAg
IFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsKICAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmQqIG1fZnJv
bnRlbmQ7Ci0gICAgICAgIGludCBtX2lkOworICAgICAgICBsb25nIG1faWQ7CiAgICAgICAgIGJv
b2wgbV9yZXBvcnRpbmdDaGFuZ2VzVG9Gcm9udGVuZDsKIAotICAgICAgICBzdGF0aWMgaW50IHNf
bmV4dFVudXNlZElkOworICAgICAgICBzdGF0aWMgbG9uZyBzX25leHRVbnVzZWRJZDsKICAgICB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKaW5kZXggMzdmZjBhZWRmNDU4OTVhOWIy
NzE4OGQ2ZDZjOTljOTMxNjk1OTYzOC4uNjcwZTAwYmIwMDkzMWVlMDUyNTRiMDAzNGRhOWViNWE5
MTc5ZDhkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRh
dGFiYXNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
YXRhYmFzZUFnZW50LmNwcApAQCAtMjg2LDYgKzI4NiwxNSBAQCB2b2lkIEluc3BlY3RvckRhdGFi
YXNlQWdlbnQ6OmV4ZWN1dGVTUUwobG9uZyBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5
LCBibwogICAgICpzdWNjZXNzID0gdHJ1ZTsKIH0KIAorbG9uZyBJbnNwZWN0b3JEYXRhYmFzZUFn
ZW50OjpkYXRhYmFzZUlkKERhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBmb3IgKERhdGFiYXNl
UmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1f
cmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+c2Vjb25kLT5kYXRhYmFz
ZSgpID09IGRhdGFiYXNlKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICB9Cisg
ICAgcmV0dXJuIDA7Cit9CisKIERhdGFiYXNlKiBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRh
YmFzZUZvcklkKGxvbmcgZGF0YWJhc2VJZCkKIHsKICAgICBEYXRhYmFzZVJlc291cmNlc01hcDo6
aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGRhdGFiYXNlSWQpOwpAQCAtMjk0LDE5ICsz
MDMsNiBAQCBEYXRhYmFzZSogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VGb3JJZChs
b25nIGRhdGFiYXNlSWQpCiAgICAgcmV0dXJuIGl0LT5zZWNvbmQtPmRhdGFiYXNlKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6c2VsZWN0RGF0YWJhc2UoRGF0YWJhc2UqIGRh
dGFiYXNlKQotewotICAgIGlmICghbV9mcm9udGVuZFByb3ZpZGVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBmb3IgKERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3Vy
Y2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlm
IChpdC0+c2Vjb25kLT5kYXRhYmFzZSgpID09IGRhdGFiYXNlKSB7Ci0gICAgICAgICAgICBtX2Zy
b250ZW5kUHJvdmlkZXItPmZyb250ZW5kKCktPnNlbGVjdERhdGFiYXNlKGl0LT5maXJzdCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikgJiYgRU5BQkxFKERBVEFCQVNF
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNl
QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50
LmgKaW5kZXggZGZiMDUxMDJlYzlhY2I5MGZlZTk1YjlhMzQyODQwMGVmYWIzOTBlYy4uNDE0M2I0
ZTZkZTkzZjVmMWE0M2ZkY2JlZDM5NDEwMjdlMjRmNmQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCkBAIC02MSwxMyArNjEsMTQg
QEAgcHVibGljOgogICAgIHZvaWQgZXhlY3V0ZVNRTChsb25nIGRhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgcXVlcnksIGJvb2wqIHN1Y2Nlc3MsIGxvbmcqIHRyYW5zYWN0aW9uSWQpOwogCiAgICAg
Ly8gQ2FsbGVkIGZyb20gdGhlIGluamVjdGVkIHNjcmlwdC4KLSAgICBEYXRhYmFzZSogZGF0YWJh
c2VGb3JJZChsb25nIGRhdGFiYXNlSWQpOwotICAgIHZvaWQgc2VsZWN0RGF0YWJhc2UoRGF0YWJh
c2UqIGRhdGFiYXNlKTsKKyAgICBsb25nIGRhdGFiYXNlSWQoRGF0YWJhc2UqKTsKIAogICAgIHZv
aWQgZGlkT3BlbkRhdGFiYXNlKFBhc3NSZWZQdHI8RGF0YWJhc2U+LCBjb25zdCBTdHJpbmcmIGRv
bWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwogcHJpdmF0
ZToKICAgICBleHBsaWNpdCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50KEluc3RydW1lbnRpbmdBZ2Vu
dHMqKTsKIAorICAgIERhdGFiYXNlKiBkYXRhYmFzZUZvcklkKGxvbmcgZGF0YWJhc2VJZCk7CisK
ICAgICBJbnN0cnVtZW50aW5nQWdlbnRzKiBtX2luc3RydW1lbnRpbmdBZ2VudHM7CiAgICAgdHlw
ZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+ID4gRGF0
YWJhc2VSZXNvdXJjZXNNYXA7CiAgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXAgbV9yZXNvdXJjZXM7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VS
ZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VS
ZXNvdXJjZS5jcHAKaW5kZXggZTJkMmY4MWRjMTQ3ZmMwYjZkZDU1ZTFmMGVhMGIzNzk2YzI5YWUz
Ni4uODI5ZDBmYzczODNiMzg5ZTIzOWFkZjQ0YWU5ODU0NDc0YmJmNTM1ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNw
cApAQCAtMzgsNyArMzgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbnQg
bmV4dFVudXNlZElkID0gMTsKK3N0YXRpYyBsb25nIG5leHRVbnVzZWRJZCA9IDE7CiAKIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZT4gSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJj
ZTo6Y3JlYXRlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGRv
bWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJj
ZS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2Uu
aAppbmRleCAyNGQ0ZjFjNmVhYWI5ZGUzNTA4ZWIwMTYyYTBlNGE4NGM2ZjI3YzIxLi5kYmExMTZh
MDFjOGMzNmJkNWNmOGE3ZDZmMmVhNTYwYzljYmEyNWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgKQEAgLTQ4LDExICs0
OCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBiaW5kKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVu
ZCk7CiAgICAgRGF0YWJhc2UqIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsg
fQogICAgIGxvbmcgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisKIHByaXZhdGU6CiAgICAg
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZShQYXNzUmVmUHRyPERhdGFiYXNlPiwgY29uc3QgU3Ry
aW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsK
IAogICAgIFJlZlB0cjxEYXRhYmFzZT4gbV9kYXRhYmFzZTsKLSAgICBpbnQgbV9pZDsKKyAgICBs
b25nIG1faWQ7CiAgICAgU3RyaW5nIG1fZG9tYWluOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAg
U3RyaW5nIG1fdmVyc2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggNzkzOGFmZGM3Nzg0MTcxZjljOTFmYjFjNjc3MDFi
YmJlYWRlYzU4MS4uZDgwNGJkN2FlNDEyY2EwMDYxZTQ1MjU4OTlhMzM3NDZjYWQzNmJjNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5j
cHAKQEAgLTczLDYgKzczLDEzIEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpzZXRQcm9w
ZXJ0eVZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3RJCiAgICAgICAgIGlu
amVjdGVkU2NyaXB0LnNldFByb3BlcnR5VmFsdWUob2JqZWN0SWQsIHByb3BlcnR5TmFtZSwgZXhw
cmVzc2lvbiwgcmVzdWx0KTsKIH0KIAordm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVh
c2VPYmplY3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdElkKQoreworICAgIElu
amVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdEhvc3QtPmluamVj
dGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQuZ2V0KCkpOworICAgIGlmICghaW5qZWN0ZWRT
Y3JpcHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICBpbmplY3RlZFNjcmlwdC5yZWxlYXNlT2JqZWN0
KG9iamVjdElkKTsKK30KKwogdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVhc2VXcmFw
cGVyT2JqZWN0R3JvdXAobG9uZyBpbmplY3RlZFNjcmlwdElkLCBjb25zdCBTdHJpbmcmIG9iamVj
dEdyb3VwKQogewogICAgIG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5yZWxlYXNlV3JhcHBlck9iamVj
dEdyb3VwKGluamVjdGVkU2NyaXB0SWQsIG9iamVjdEdyb3VwKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAppbmRleCA5ZmIyNzE2ZmZmMzM1
Mjg2ZjM3ZDFjYTM2NGQzZmQ1MjUyMDA2MTM1Li5kZDVkYmZkNDBjYjZkNTJjMWFmNjY4ZGE5OWE1
MThjOGFiMGY4YzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUnVudGltZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clJ1bnRpbWVBZ2VudC5oCkBAIC02MSw2ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGdldENv
bXBsZXRpb25zKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgYm9vbCBpbmNsdWRlQ29tbWFuZExp
bmVBUEksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CiAgICAgdm9pZCBnZXRQcm9w
ZXJ0aWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3RJZCwgYm9vbCBpZ25vcmVI
YXNPd25Qcm9wZXJ0eSwgYm9vbCBhYmJyZXZpYXRlLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBy
ZXN1bHQpOwogICAgIHZvaWQgc2V0UHJvcGVydHlWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcm
IGV4cHJlc3Npb24sIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CisgICAgdm9pZCBy
ZWxlYXNlT2JqZWN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3RJZCk7CiAgICAg
dm9pZCByZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwKGxvbmcgaW5qZWN0ZWRTY3JpcHRJZCwgY29u
c3QgU3RyaW5nJiBvYmplY3RHcm91cCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVsZXMuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVsZXMuanMKaW5kZXggMDdkZmQ1YmYxNzhkNjY0
ZjBiZDZiMTU2M2FjOTNkMDRjZWIyNjQzNy4uYmRjY2JmZTE4MzhhM2FhNjcyYTZiMzVkN2I5MjQ3
NDM2Y2M1NWQ1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9BdWRpdFJ1bGVzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
QXVkaXRSdWxlcy5qcwpAQCAtNzIsNyArNzIsNyBAQCBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5l
dmFsdWF0ZUluVGFyZ2V0V2luZG93ID0gZnVuY3Rpb24oZnVuYywgYXJncywgY2FsbGJhY2spCiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpOwogICAgIH0KLSAgICBSdW50
aW1lQWdlbnQuZXZhbHVhdGUoIkpTT04uc3RyaW5naWZ5KCgiICsgZnVuYyArICIpKCIgKyBKU09O
LnN0cmluZ2lmeShhcmdzKSArICIpKSIsICJub25lIiwgZmFsc2UsIG15Y2FsbGJhY2spOworICAg
IFJ1bnRpbWVBZ2VudC5ldmFsdWF0ZSgiSlNPTi5zdHJpbmdpZnkoKCIgKyBmdW5jICsgIikoIiAr
IEpTT04uc3RyaW5naWZ5KGFyZ3MpICsgIikpIiwgIiIsIGZhbHNlLCBteWNhbGxiYWNrKTsKIH0K
IAogV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuR3ppcFJ1bGUgPSBmdW5jdGlvbigpCkBAIC03NTAs
NyArNzUwLDcgQEAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuSW1hZ2VEaW1lbnNpb25zUnVsZS5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICBpZiAoIXBheWxvYWQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGNhbGxiYWNrKG51bGwpOwogCi0gICAgICAgICAgICB2YXIgbm9kZUlkc0FycmF5ID0g
V2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9hZChwYXlsb2FkKQorICAgICAgICAg
ICAgdmFyIG5vZGVJZHNBcnJheSA9IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QuZnJvbVBheWxv
YWQocGF5bG9hZCk7CiAgICAgICAgICAgICBub2RlSWRzQXJyYXkuZ2V0T3duUHJvcGVydGllcyhm
YWxzZSwgcmVjZWl2ZWRJbWFnZXMpOwogICAgICAgICB9CiAKQEAgLTc2Niw3ICs3NjYsNyBAQCBX
ZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5JbWFnZURpbWVuc2lvbnNSdWxlLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAotICAgICAgICBSdW50aW1l
QWdlbnQuZXZhbHVhdGUoIigiICsgcHVzaEltYWdlTm9kZXMgKyAiKSgpIiwgIm5vbmUiLCBmYWxz
ZSwgcmVjZWl2ZWRJbWFnZXNBcnJheSk7CisgICAgICAgIFJ1bnRpbWVBZ2VudC5ldmFsdWF0ZSgi
KCIgKyBwdXNoSW1hZ2VOb2RlcyArICIpKCkiLCAiIiwgZmFsc2UsIHJlY2VpdmVkSW1hZ2VzQXJy
YXkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9ET01TdG9yYWdlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9ET01TdG9yYWdlLmpzCmluZGV4IDZlZTg5OWY0NmFiNWIxNzk5NWFiZTY2MmM5ODI2ZGVlYmE3
MzY5M2EuLmVhMjQ5MjFmNmQxNmVlYTU2MGQxMjIxOWNlMjdmMTRhOGIyNTgzMDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NU3RvcmFnZS5qcworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTVN0b3JhZ2UuanMKQEAgLTgy
LDEyICs4Miw2IEBAIFdlYkluc3BlY3Rvci5ET01TdG9yYWdlRGlzcGF0Y2hlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzLmFkZERPTVN0b3JhZ2Uo
ZG9tU3RvcmFnZSk7CiAgICAgfSwKIAotICAgIHNlbGVjdERPTVN0b3JhZ2U6IGZ1bmN0aW9uKG8p
Ci0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3Iuc2hvd1BhbmVsKCJyZXNvdXJjZXMiKTsKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5yZXNvdXJjZXMuc2VsZWN0RE9NU3RvcmFnZShvKTsK
LSAgICB9LAotCiAgICAgdXBkYXRlRE9NU3RvcmFnZTogZnVuY3Rpb24oc3RvcmFnZUlkKQogICAg
IHsKICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5yZXNvdXJjZXMudXBkYXRlRE9NU3RvcmFn
ZShzdG9yYWdlSWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9EYXRhYmFzZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGF0
YWJhc2UuanMKaW5kZXggNzJjYzU5MTliMTE5NjZjYjA0NmZiOTQ1Y2ViNWI2OTExNDY2ODNmZC4u
ZTRiYWZlYTgyZmI4ZmZjYTliMDMzYWVmYTU1ZDJmOTQ1Zjc5MmE1NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZS5qcworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlLmpzCkBAIC0xMTUsMTIgKzExNSw2
IEBAIFdlYkluc3BlY3Rvci5EYXRhYmFzZURpc3BhdGNoZXIucHJvdG90eXBlID0gewogICAgICAg
ICBXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcy5hZGREYXRhYmFzZShkYXRhYmFzZSk7CiAg
ICAgfSwKIAotICAgIHNlbGVjdERhdGFiYXNlOiBmdW5jdGlvbihvKQotICAgIHsKLSAgICAgICAg
V2ViSW5zcGVjdG9yLnNob3dQYW5lbCgicmVzb3VyY2VzIik7Ci0gICAgICAgIFdlYkluc3BlY3Rv
ci5wYW5lbHMucmVzb3VyY2VzLnNlbGVjdERhdGFiYXNlKG8pOwotICAgIH0sCi0KICAgICBzcWxU
cmFuc2FjdGlvblN1Y2NlZWRlZDogZnVuY3Rpb24odHJhbnNhY3Rpb25JZCwgY29sdW1uTmFtZXMs
IHZhbHVlcykKICAgICB7CiAgICAgICAgIGlmICghV2ViSW5zcGVjdG9yLkRhdGFiYXNlRGlzcGF0
Y2hlci5fY2FsbGJhY2tzW3RyYW5zYWN0aW9uSWRdKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvblNlcnZlci5qcwppbmRleCBjYTJlODU2ODEw
YzQ0ZmZmZDYzZTdjOWEzYjE0MzY4ZmJjN2I3YWMzLi44MDNkOTU4OWJhN2E0ZWFiNzI3ZGMwN2Y2
MWNlZDZjNDJlZDVkMWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0V4dGVuc2lvblNlcnZlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0V4dGVuc2lvblNlcnZlci5qcwpAQCAtMjcyLDcgKzI3Miw3IEBAIFdlYkluc3Bl
Y3Rvci5FeHRlbnNpb25TZXJ2ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fZGlz
cGF0Y2hDYWxsYmFjayhtZXNzYWdlLnJlcXVlc3RJZCwgcG9ydCwgcmVzdWx0KTsKICAgICAgICAg
fQogICAgICAgICB2YXIgZXZhbEV4cHJlc3Npb24gPSAiSlNPTi5zdHJpbmdpZnkoZXZhbCh1bmVz
Y2FwZSgnIiArIGVzY2FwZShtZXNzYWdlLmV4cHJlc3Npb24pICsgIicpKSk7IjsKLSAgICAgICAg
UnVudGltZUFnZW50LmV2YWx1YXRlKGV2YWxFeHByZXNzaW9uLCAibm9uZSIsIHRydWUsIGNhbGxi
YWNrLmJpbmQodGhpcykpOworICAgICAgICBSdW50aW1lQWdlbnQuZXZhbHVhdGUoZXZhbEV4cHJl
c3Npb24sICIiLCB0cnVlLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKICAgICB9LAogCiAgICAgX29u
UmV2ZWFsQW5kU2VsZWN0OiBmdW5jdGlvbihtZXNzYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCA0ZWI5YTcwZjIyNTVlYmUxNjIw
YzhkZWQ5MjQ4NDg5N2U5ZDAwZjUxLi45MTI1ZTE0MjhkODhkZGI1ZTMwMDJlOGJjOTQwZWUxNjU4
ZDhiMmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2lu
c3BlY3Rvci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3Bl
Y3Rvci5qcwpAQCAtMTI0MCw2ICsxMjQwLDIzIEBAIFdlYkluc3BlY3Rvci5kcmF3TG9hZGluZ1Bp
ZUNoYXJ0ID0gZnVuY3Rpb24oY2FudmFzLCBwZXJjZW50KSB7CiAgICAgZy5maWxsKCk7CiB9CiAK
K1dlYkluc3BlY3Rvci5pbnNwZWN0ID0gZnVuY3Rpb24ob2JqZWN0SWQsIGhpbnRzKQoreworICAg
IHZhciBvYmplY3QgPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkKG9iamVj
dElkKTsKKyAgICBpZiAob2JqZWN0LnR5cGUgPT09ICJub2RlIikgeworICAgICAgICAvLyBSZXF1
ZXN0IG5vZGUgZnJvbSBiYWNrZW5kIGFuZCBmb2N1cyBpdC4KKyAgICAgICAgb2JqZWN0LnB1c2hO
b2RlVG9Gcm9udGVuZChXZWJJbnNwZWN0b3IudXBkYXRlRm9jdXNlZE5vZGUuYmluZChXZWJJbnNw
ZWN0b3IpKTsKKyAgICB9IGVsc2UgaWYgKGhpbnRzLmRhdGFiYXNlSWQpIHsKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLmN1cnJlbnRQYW5lbCA9IFdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzOwor
ICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcy5zZWxlY3REYXRhYmFzZShoaW50
cy5kYXRhYmFzZUlkKTsKKyAgICB9IGVsc2UgaWYgKGhpbnRzLmRvbVN0b3JhZ2VJZCkgeworICAg
ICAgICBXZWJJbnNwZWN0b3IuY3VycmVudFBhbmVsID0gV2ViSW5zcGVjdG9yLnBhbmVscy5yZXNv
dXJjZXM7CisgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzLnNlbGVjdERPTVN0
b3JhZ2UoaGludHMuZG9tU3RvcmFnZUlkKTsKKyAgICB9CisKKyAgICBSdW50aW1lQWdlbnQucmVs
ZWFzZU9iamVjdChvYmplY3RJZCk7Cit9CisKIFdlYkluc3BlY3Rvci51cGRhdGVGb2N1c2VkTm9k
ZSA9IGZ1bmN0aW9uKG5vZGVJZCkKIHsKICAgICB0aGlzLl91cGRhdGVGb2N1c2VkTm9kZShub2Rl
SWQpOwo=
</data>
<flag name="review"
          id="75381"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
      

    </bug>

</bugzilla>