<?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>80789</bug_id>
          
          <creation_ts>2012-03-11 09:21:50 -0700</creation_ts>
          <short_desc>Web Inspector: TypeBuilder: Introduce OptOutput class for optional output parameters</short_desc>
          <delta_ts>2012-03-16 07:44:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>81090</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Peter Rybin">prybin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>ossy</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>prybin</cc>
    
    <cc>rik</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>575741</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-03-11 09:21:50 -0700</bug_when>
    <thetext>Currently there is not proper support for optional output parameters.
It only works with RefPtr-based types (they can contain null values) and with boolean type (false is incorrectly treated as &quot;not set&quot; value).

A dedicated OptOutput class should be provided to support all types values plus &quot;not set&quot; state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575829</commentid>
    <comment_count>1</comment_count>
      <attachid>131257</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-03-11 14:24:52 -0700</bug_when>
    <thetext>Created attachment 131257
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575830</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-11 14:27:52 -0700</bug_when>
    <thetext>Attachment 131257 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/inspector/InjectedScript.cpp:65:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InjectedScript.cpp:75:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InjectedScript.cpp:85:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InjectedScript.cpp:261:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InjectedScript.h:108:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 5 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576036</commentid>
    <comment_count>3</comment_count>
      <attachid>131257</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-12 03:00:53 -0700</bug_when>
    <thetext>Comment on attachment 131257
Patch

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

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:2244
&gt; +class OptOutput {

Please make this class non-copyable to avoid passing it by value.

&gt; Source/WebCore/inspector/InspectorDOMDebuggerAgent.cpp:67
&gt; +static const InspectorFrontend::Debugger::Reason::Enum domNativeBreakpointType = InspectorFrontend::Debugger::Reason::DOM;

Is there a reason for not inlining the new constant values?

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:508
&gt; +        *cookiesString = &quot;&quot;;

The protocol description says it should contain result of document.cookies even if the cookies array is present. Please file a bug on this and put FIXME here.

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:839
&gt; +    frameObject-&gt;setSecurityOrigin(frame-&gt;document()-&gt;securityOrigin()-&gt;toString());

Should this parameter be required if it is always present anyway? The type is still hidden anyway so I think we may want to fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576286</commentid>
    <comment_count>4</comment_count>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-03-12 11:08:13 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:2244
&gt; &gt; +class OptOutput {

&gt; Please make this class non-copyable to avoid passing it by value.

Done

&gt; &gt; Source/WebCore/inspector/InspectorDOMDebuggerAgent.cpp:67
&gt; &gt; +static const InspectorFrontend::Debugger::Reason::Enum domNativeBreakpointType = InspectorFrontend::Debugger::Reason::DOM;

&gt; Is there a reason for not inlining the new constant values?

Done

&gt; &gt; Source/WebCore/inspector/InspectorPageAgent.cpp:508
&gt; &gt; +        *cookiesString = &quot;&quot;;
&gt; 
&gt; The protocol description says it should contain result of document.cookies even if the cookies array is present. Please file a bug on this and put FIXME here.

Done

&gt; &gt; Source/WebCore/inspector/InspectorPageAgent.cpp:839
&gt; &gt; +    frameObject-&gt;setSecurityOrigin(frame-&gt;document()-&gt;securityOrigin()-&gt;toString());
&gt; 
&gt; Should this parameter be required if it is always present anyway? The type is still hidden anyway so I think we may want to fix this.

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576289</commentid>
    <comment_count>5</comment_count>
      <attachid>131354</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-03-12 11:10:37 -0700</bug_when>
    <thetext>Created attachment 131354
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576292</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-12 11:12:35 -0700</bug_when>
    <thetext>Attachment 131354 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/inspector/InjectedScript.cpp:65:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InjectedScript.cpp:75:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InjectedScript.cpp:85:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InjectedScript.cpp:261:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InjectedScript.h:108:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 5 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577033</commentid>
    <comment_count>7</comment_count>
      <attachid>131354</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-12 22:19:33 -0700</bug_when>
    <thetext>Comment on attachment 131354
Patch

Attachment 131354 did not pass win-ews (win):
Output: http://queues.webkit.org/results/11945302</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577135</commentid>
    <comment_count>8</comment_count>
      <attachid>131354</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-13 00:38:50 -0700</bug_when>
    <thetext>Comment on attachment 131354
Patch

The change appears to break Windows build, r- for this. Please fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577136</commentid>
    <comment_count>9</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-13 00:39:13 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 131354 [details])
&gt; The change appears to break Windows build, r- for this. Please fix.

4&gt;Generating Code...
4&gt;c:\cygwin\home\buildbot\webkit\webkitbuild\debug\obj\webcore\derivedsources\inspectorbackenddispatcher.cpp(827) : error C2220: warning treated as error - no &apos;object&apos; file generated
4&gt;c:\cygwin\home\buildbot\webkit\webkitbuild\debug\obj\webcore\derivedsources\inspectorbackenddispatcher.cpp(827) : warning C4701: potentially uninitialized local variable &apos;out_base64Encoded&apos; used
4&gt;c:\cygwin\home\buildbot\webkit\webkitbuild\debug\obj\webcore\derivedsources\inspectorbackenddispatcher.cpp(3039) : warning C4701: potentially uninitialized local variable &apos;out_result&apos; used
4&gt;c:\cygwin\home\buildbot\webkit\webkitbuild\debug\obj\webcore\derivedsources\inspectorbackenddispatcher.cpp(3060) : warning C4701: potentially uninitialized local variable &apos;out_result&apos; used
4&gt;c:\cygwin\home\buildbot\webkit\webkitbuild\debug\obj\webcore\derivedsources\inspectorbackenddispatcher.cpp(3354) : warning C4701: potentially uninitialized local variable &apos;out_result&apos; used</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577951</commentid>
    <comment_count>10</comment_count>
      <attachid>131740</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-03-13 16:11:43 -0700</bug_when>
    <thetext>Created attachment 131740
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577959</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-13 16:16:20 -0700</bug_when>
    <thetext>Attachment 131740 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/inspector/InjectedScript.cpp:65:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InjectedScript.cpp:75:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InjectedScript.cpp:85:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InjectedScript.cpp:261:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InjectedScript.h:108:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 5 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578224</commentid>
    <comment_count>12</comment_count>
      <attachid>131740</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-14 01:04:37 -0700</bug_when>
    <thetext>Comment on attachment 131740
Patch

Clearing flags on attachment: 131740

Committed r110673: &lt;http://trac.webkit.org/changeset/110673&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578225</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-14 01:04:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578243</commentid>
    <comment_count>14</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-03-14 01:45:16 -0700</bug_when>
    <thetext>Reopen, because it broke the Qt minimal bot, I think all !ENABLE(INSPECTOR) build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578259</commentid>
    <comment_count>15</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-14 02:03:40 -0700</bug_when>
    <thetext>From the IRC channel:
&lt;Ossy&gt;: yurys,  benjaminp said:&quot; for the Inspector build, it looks like ContentSearchUtils.h needs #if ENABLE(INSPECTOR)&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578987</commentid>
    <comment_count>16</comment_count>
      <attachid>131963</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-03-14 17:42:45 -0700</bug_when>
    <thetext>Created attachment 131963
Only merge. Do not commit before 81132</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578988</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-14 17:45:48 -0700</bug_when>
    <thetext>Attachment 131963 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/inspector/InjectedScript.cpp:65:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InjectedScript.cpp:75:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InjectedScript.cpp:85:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InjectedScript.cpp:261:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InjectedScript.h:108:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 5 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580503</commentid>
    <comment_count>18</comment_count>
      <attachid>131963</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-16 07:43:44 -0700</bug_when>
    <thetext>Comment on attachment 131963
Only merge. Do not commit before 81132

Clearing flags on attachment: 131963

Committed r111005: &lt;http://trac.webkit.org/changeset/111005&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580504</commentid>
    <comment_count>19</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-16 07:44:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131257</attachid>
            <date>2012-03-11 14:24:52 -0700</date>
            <delta_ts>2012-03-12 11:10:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80789-20120312012446.patch</filename>
            <type>text/plain</type>
            <size>48912</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTdkYmViZDEzYTQ0MDdi
NTFlZTE5MWViMzZmNDhmYmVlZDIyYWIyZC4uOGI4YTY4OWQ0NTU4ZGEyNzgyY2M2ZDk4NmRkYzY2
YjIwYzhmOTMyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDEyLTAzLTExICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBUeXBlQnVpbGRlcjogSW50cm9kdWNlIE9wdE91dHB1dCBjbGFzcyBmb3Igb3B0aW9uYWwgb3V0
cHV0IHBhcmFtZXRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTgwNzg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgT3B0T3V0cHV0IGNsYXNzIGlzIGFkZGVkIGZvciBvcHRpb25hbCByZXR1cm4gcGFyYW1l
dGVycy4KKworICAgICAgICBTdHJpY3QgbW9kZSBhZGRlZCB0byBHZW5lcmF0b3IgdGhhdCBtYWtl
cyBhbGwgcGFyYW1ldGVyIHR5cGVzIHN0cmljdAorICAgICAgICBhbmQgZHJvcCBwcmUtc2V0IGRl
ZmF1bHQgdmFsdWVzIGZvciByZXR1cm4gcGFyYW1ldGVycy4KKworICAgICAgICBEZWJ1Z2dlciBh
bmQgUGFnZSBkb21haW4gaXMgc3dpdGNoZWQgdG8gc3RyaWN0IG1vZGUuCisKKworICAgICAgICAq
IGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OgorICAgICAgICAoQ29tbWFuZFJl
dHVyblBhc3NNb2RlbC5CeVBvaW50ZXIpOgorICAgICAgICAoQ29tbWFuZFJldHVyblBhc3NNb2Rl
bCk6CisgICAgICAgIChDb21tYW5kUmV0dXJuUGFzc01vZGVsLk9wdE91dHB1dCk6CisgICAgICAg
IChDb21tYW5kUmV0dXJuUGFzc01vZGVsLk9wdE91dHB1dC5fX2luaXRfXyk6CisgICAgICAgIChD
b21tYW5kUmV0dXJuUGFzc01vZGVsLk9wdE91dHB1dC5nZXRfcmV0dXJuX3Zhcl90eXBlKToKKyAg
ICAgICAgKENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuT3B0T3V0cHV0LmdldF9vdXRwdXRfYXJndW1l
bnRfcHJlZml4KToKKyAgICAgICAgKENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuT3B0T3V0cHV0Lmdl
dF9vdXRwdXRfdG9fcmF3X2V4cHJlc3Npb24pOgorICAgICAgICAoQ29tbWFuZFJldHVyblBhc3NN
b2RlbC5PcHRPdXRwdXQuZ2V0X291dHB1dF9wYXJhbWV0ZXJfdHlwZSk6CisgICAgICAgIChDb21t
YW5kUmV0dXJuUGFzc01vZGVsLk9wdE91dHB1dC5nZXRfc2V0X3JldHVybl9jb25kaXRpb24pOgor
ICAgICAgICAoVHlwZU1vZGVsLkVudW0uZ2V0X29wdGlvbmFsLkVudW1PcHRpb25hbC5nZXRfY29t
bWFuZF9yZXR1cm5fcGFzc19tb2RlbCk6CisgICAgICAgIChUeXBlTW9kZWwuVmFsdWVUeXBlLlZh
bHVlT3B0aW9uYWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwpOgorICAgICAgICAoT3B0
T3V0cHV0KToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX2V2ZW50KToKKyAgICAgICAgKEdl
bmVyYXRvci5wcm9jZXNzX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9Db250ZW50U2Vh
cmNoVXRpbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlYXJjaFV0aWxzOjpidWls
ZE9iamVjdEZvclNlYXJjaE1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWFyY2hV
dGlsczo6c2VhcmNoSW5UZXh0QnlMaW5lcyk6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnRlbnRT
ZWFyY2hVdGlscy5oOgorICAgICAgICAoQ29udGVudFNlYXJjaFV0aWxzKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRT
Y3JpcHQ6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0OjpjYWxs
RnVuY3Rpb25Pbik6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGVP
bkNhbGxGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdDo6bWFrZUV2YWxD
YWxsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaDoKKyAgICAgICAgKElu
amVjdGVkU2NyaXB0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0U2NyaXB0U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uRGV0YWlscyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRl
T25DYWxsRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
ZGlkUGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJl
YWtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNs
ZWFyQnJlYWtEZXRhaWxzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJB
Z2VudC5oOgorICAgICAgICAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9i
amVjdEZvckNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZEFycmF5Rm9yQ29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRSZXNvdXJjZVRyZWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JG
cmFtZVRyZWUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25Pbik6CisKIDIwMTItMDMtMTEg
IFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQ1NTIGNvbnRlbnQgaXMgbm90IHNob3duIHdoZW4gc3R5bGVzaGVldCBpcyBsb2Fk
ZWQgd2l0aCBpbnZhbGlkIG1pbWUgdHlwZSBpbiBxdWlya3MgbW9kZS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggMGJjN2Ey
NTRiYzhiYjhkNTIxOWMxOTBhMzcwYzEzZTZhMWE2YzQyMC4uMmE3M2ZmNGMwZmJhMzdmZDRlYWZi
NDcwYWEzYzgxOGMwNmMxNTkzZSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKQEAgLTU5LDYgKzU5LDggQEAgVFlQRV9OQU1FX0ZJ
WF9NQVAgPSB7CiBUWVBFU19XSVRIX1JVTlRJTUVfQ0FTVF9TRVQgPSBmcm96ZW5zZXQoWyJSdW50
aW1lLlJlbW90ZU9iamVjdCIsICJSdW50aW1lLlByb3BlcnR5RGVzY3JpcHRvciIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZWJ1Z2dlci5GdW5jdGlvbkRldGFp
bHMiLCAiRGVidWdnZXIuQ2FsbEZyYW1lIl0pCiAKK1NUUklDVF9FTkFCTEVEX0RPTUFJTlMgPSBb
IkRlYnVnZ2VyIiwgIlBhZ2UiXQorCiAKIGNtZGxpbmVfcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9u
UGFyc2VyKCkKIGNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tb3V0cHV0X2hfZGlyIikKQEAg
LTU3OSw2ICs1ODEsMjggQEAgY2xhc3MgQ29tbWFuZFJldHVyblBhc3NNb2RlbDoKICAgICAgICAg
ZGVmIGdldF9zZXRfcmV0dXJuX2NvbmRpdGlvbigpOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUK
IAorICAgIGNsYXNzIE9wdE91dHB1dDoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhcl90
eXBlKToKKyAgICAgICAgICAgIHNlbGYudmFyX3R5cGUgPSB2YXJfdHlwZQorCisgICAgICAgIGRl
ZiBnZXRfcmV0dXJuX3Zhcl90eXBlKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICJUeXBlQnVp
bGRlcjo6T3B0T3V0cHV0PCVzPiIgJSBzZWxmLnZhcl90eXBlCisKKyAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKKyAgICAgICAg
ICAgIHJldHVybiAiJiIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRf
b3V0cHV0X3RvX3Jhd19leHByZXNzaW9uKCk6CisgICAgICAgICAgICByZXR1cm4gIiVzLmdldFZh
bHVlKCkiCisKKyAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFyYW1ldGVyX3R5cGUoc2VsZik6Cisg
ICAgICAgICAgICByZXR1cm4gIlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8JXM+KiIgJSBzZWxmLnZh
cl90eXBlCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3NldF9yZXR1
cm5fY29uZGl0aW9uKCk6CisgICAgICAgICAgICByZXR1cm4gIiVzLmlzQXNzaWduZWQoKSIKKwog
CiBjbGFzcyBUeXBlTW9kZWw6CiAgICAgY2xhc3MgUmVmUHRyQmFzZWQ6CkBAIC02MTcsOCArNjQx
LDcgQEAgY2xhc3MgVHlwZU1vZGVsOgogCiAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAog
ICAgICAgICAgICAgICAgIGRlZiBnZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpOgotICAg
ICAgICAgICAgICAgICAgICAjIEZJWE1FOiB0byBiZSByZXBsYWNlZCB3aXRoIE9wdE91dHB1dCBt
b2RlbC4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbW1hbmRSZXR1cm5QYXNzTW9kZWwu
QnlQb2ludGVyKGJhc2Vfc2VsZi50eXBlX25hbWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBDb21tYW5kUmV0dXJuUGFzc01vZGVsLk9wdE91dHB1dChiYXNlX3NlbGYudHlwZV9uYW1lKQog
CiAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgIGRlZiBnZXRf
aW5wdXRfcGFyYW1fdHlwZV90ZXh0KCk6CkBAIC02NjgsOCArNjkxLDcgQEAgY2xhc3MgVHlwZU1v
ZGVsOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICAgICAgICAgIGRlZiBnZXRf
Y29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbChzZWxmKToKLSAgICAgICAgICAgICAgICAjIEZJWE1F
OiB0byBiZSByZXBsYWNlZCB3aXRoIE9wdE91dHB1dCBtb2RlbC4KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gQ29tbWFuZFJldHVyblBhc3NNb2RlbC5CeVBvaW50ZXIoc2VsZi5iYXNlLnR5cGVfbmFt
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29tbWFuZFJldHVyblBhc3NNb2RlbC5PcHRPdXRw
dXQoc2VsZi5iYXNlLnR5cGVfbmFtZSkKIAogICAgICAgICAgICAgZGVmIGdldF9pbnB1dF9wYXJh
bV90eXBlX3RleHQoc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJjb25zdCAlcyogY29u
c3QiICUgc2VsZi5iYXNlLnR5cGVfbmFtZQpAQCAtMjIxMSwxMiArMjIzMywzOCBAQCAkbWV0aG9k
cwogCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSA8UGxhdGZvcm1TdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsK
IAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIE9wdE91dHB1dCB7CitwdWJsaWM6CisgIE9w
dE91dHB1dCgpIDogbV9hc3NpZ25lZChmYWxzZSkgeyB9CisKKyAgdm9pZCBvcGVyYXRvcj0oVCB2
YWx1ZSkKKyAgeworICAgICAgbV92YWx1ZSA9IHZhbHVlOworICAgICAgbV9hc3NpZ25lZCA9IHRy
dWU7CisgIH0KKworICBib29sIGlzQXNzaWduZWQoKSB7IHJldHVybiBtX2Fzc2lnbmVkOyB9CisK
KyAgVCBnZXRWYWx1ZSgpCisgIHsKKyAgICAgIEFTU0VSVChpc0Fzc2lnbmVkKCkpOworICAgICAg
cmV0dXJuIG1fdmFsdWU7CisgIH0KKworcHJpdmF0ZToKKyAgVCBtX3ZhbHVlOworICBib29sIG1f
YXNzaWduZWQ7Cit9OworCisKIC8vIFRoaXMgY2xhc3MgcHJvdmlkZXMgIlRyYWl0cyIgdHlwZSBm
b3IgdGhlIGlucHV0IHR5cGUgVC4gSXQgaXMgcHJvZ3JhbW1lZCB1c2luZyBDKysgdGVtcGxhdGUg
c3BlY2lhbGl6YXRpb24KIC8vIHRlY2huaXF1ZS4gQnkgZGVmYXVsdCBpdCBzaW1wbHkgdGFrZXMg
Ikl0ZW1UcmFpdHMiIHR5cGUgZnJvbSBULCBidXQgaXQgZG9lc24ndCB3b3JrIHdpdGggdGhlIGJh
c2UgdHlwZXMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMjYwNyw2ICsyNjU1LDkgQEAgY2xh
c3MgR2VuZXJhdG9yOgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgcHJvY2Vzc19ldmVudChq
c29uX2V2ZW50LCBkb21haW5fbmFtZSwgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVz
KToKICAgICAgICAgZXZlbnRfbmFtZSA9IGpzb25fZXZlbnRbIm5hbWUiXQorCisgICAgICAgIHN0
cmljdF9tb2RlID0gZG9tYWluX25hbWUgaW4gU1RSSUNUX0VOQUJMRURfRE9NQUlOUworCiAgICAg
ICAgIHBhcmFtZXRlcl9saXN0ID0gW10KICAgICAgICAgbWV0aG9kX2xpbmVfbGlzdCA9IFtdCiAg
ICAgICAgIGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlzdCA9IFtdCkBAIC0yNjMzLDEzICsyNjg0
LDIwIEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgICAgICAgICAgICAgdHlwZV9tb2RlbCA9
IHR5cGVfbW9kZWwuZ2V0X29wdGlvbmFsKCkKICAgICAgICAgICAgICAgICAgICAgcmF3X3R5cGVf
bW9kZWwgPSByYXdfdHlwZV9tb2RlbC5nZXRfb3B0aW9uYWwoKQogCi0gICAgICAgICAgICAgICAg
YW5ub3RhdGVkX3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4dChyYXdfdHlwZV9tb2RlbC5n
ZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KCksIHR5cGVfbW9kZWwuZ2V0X2lucHV0X3BhcmFtX3R5
cGVfdGV4dCgpKQorICAgICAgICAgICAgICAgIGlmIHN0cmljdF9tb2RlOgorICAgICAgICAgICAg
ICAgICAgICAjIEFsbCB0eXBlcyBhcmUgc3RyaWN0LgorICAgICAgICAgICAgICAgICAgICBhbm5v
dGF0ZWRfdHlwZSA9IHR5cGVfbW9kZWwuZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dCgpCisgICAg
ICAgICAgICAgICAgICAgIG1vZGVfdHlwZV9iaW5kaW5nID0gcGFyYW1fdHlwZV9iaW5kaW5nCisg
ICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBBbGwgdHlwZXMgYXJl
IHJhdy4KKyAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSBnZXRfYW5ub3RhdGVk
X3R5cGVfdGV4dChyYXdfdHlwZV9tb2RlbC5nZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KCksIHR5
cGVfbW9kZWwuZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dCgpKQorICAgICAgICAgICAgICAgICAg
ICBtb2RlX3R5cGVfYmluZGluZyA9IHJhd190eXBlX2JpbmRpbmcKIAogICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl9saXN0LmFwcGVuZCgiJXMgJXMiICUgKGFubm90YXRlZF90eXBlLCBwYXJhbWV0
ZXJfbmFtZSkpCiAKICAgICAgICAgICAgICAgICBzZXR0ZXJfYXJndW1lbnQgPSByYXdfdHlwZV9t
b2RlbC5nZXRfZXZlbnRfc2V0dGVyX2V4cHJlc3Npb25fcGF0dGVybigpICUgcGFyYW1ldGVyX25h
bWUKLSAgICAgICAgICAgICAgICBpZiByYXdfdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVf
ZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1bWVu
dCA9IHJhd190eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4o
KSAlIHNldHRlcl9hcmd1bWVudAorICAgICAgICAgICAgICAgIGlmIG1vZGVfdHlwZV9iaW5kaW5n
LmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6CisgICAgICAgICAgICAgICAg
ICAgIHNldHRlcl9hcmd1bWVudCA9IG1vZGVfdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVf
ZXhwcmVzc2lvbl9wYXR0ZXJuKCkgJSBzZXR0ZXJfYXJndW1lbnQKIAogICAgICAgICAgICAgICAg
IHNldHRlcl9jb2RlID0gIiAgICBwYXJhbXNPYmplY3QtPnNldCVzKFwiJXNcIiwgJXMpO1xuIiAl
IChzZXR0ZXJfdHlwZSwgcGFyYW1ldGVyX25hbWUsIHNldHRlcl9hcmd1bWVudCkKICAgICAgICAg
ICAgICAgICBpZiBvcHRpb25hbDoKQEAgLTI2NjIsNiArMjcyMCw5IEBAIGNsYXNzIEdlbmVyYXRv
cjoKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIHByb2Nlc3NfY29tbWFuZChqc29uX2NvbW1h
bmQsIGRvbWFpbl9uYW1lLCBhZ2VudF9maWVsZF9uYW1lLCBhZ2VudF9pbnRlcmZhY2VfbmFtZSk6
CiAgICAgICAgIGpzb25fY29tbWFuZF9uYW1lID0ganNvbl9jb21tYW5kWyJuYW1lIl0KKworICAg
ICAgICBzdHJpY3RfbW9kZSA9IGRvbWFpbl9uYW1lIGluIFNUUklDVF9FTkFCTEVEX0RPTUFJTlMK
KwogICAgICAgICBHZW5lcmF0b3IubWV0aG9kX25hbWVfZW51bV9saXN0LmFwcGVuZCgiICAgICAg
ICBrJXNfJXNDbWQsIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kWyJuYW1lIl0pKQogICAg
ICAgICBHZW5lcmF0b3IubWV0aG9kX2hhbmRsZXJfbGlzdC5hcHBlbmQoIiAgICAgICAgICAgICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OiVzXyVzLCIgJSAoZG9tYWluX25hbWUsIGpz
b25fY29tbWFuZF9uYW1lKSkKICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2RlY2xh
cmF0aW9uX2xpc3QuYXBwZW5kKCIgICAgdm9pZCAlc18lcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7IiAlIChkb21haW5fbmFtZSwganNvbl9jb21t
YW5kX25hbWUpKQpAQCAtMjc1MCwyNCArMjgxMSw0MiBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAg
ICAgICAgICAgICAgaWYgb3B0aW9uYWw6CiAgICAgICAgICAgICAgICAgICAgIHR5cGVfbW9kZWwg
PSB0eXBlX21vZGVsLmdldF9vcHRpb25hbCgpCiAKLSAgICAgICAgICAgICAgICByYXdfdHlwZV9t
b2RlbCA9IHJldHVybl90eXBlX2JpbmRpbmcuZ2V0X3R5cGVfbW9kZWwoKQotICAgICAgICAgICAg
ICAgIGlmIG9wdGlvbmFsOgotICAgICAgICAgICAgICAgICAgICByYXdfdHlwZV9tb2RlbCA9IHJh
d190eXBlX21vZGVsLmdldF9vcHRpb25hbCgpCi0KLSAgICAgICAgICAgICAgICBjb2RlID0gIiAg
ICAlcyBvdXRfJXMgPSAlcztcbiIgJSAocmF3X3R5cGUuZ2V0X3Jhd190eXBlX21vZGVsKCkuZ2V0
X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBlKCksIGpzb25f
cmV0dXJuX25hbWUsIGluaXRpYWxpemVyKQotICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgJXNv
dXRfJXMiICUgKHJhd190eXBlLmdldF9vdXRwdXRfcGFzc19tb2RlbCgpLmdldF9hcmd1bWVudF9w
cmVmaXgoKSwganNvbl9yZXR1cm5fbmFtZSkKLSAgICAgICAgICAgICAgICBjb29rID0gIiAgICAg
ICAgcmVzdWx0LT5zZXQlcyhcIiVzXCIsIG91dF8lcyk7XG4iICUgKHNldHRlcl90eXBlLCBqc29u
X3JldHVybl9uYW1lLCBqc29uX3JldHVybl9uYW1lKQotICAgICAgICAgICAgICAgIGlmIG9wdGlv
bmFsOgotICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBzdXBwb3J0IG9wdGlvbmFsIHByb3Bl
cmx5LiBQcm9iYWJseSBhbiBhZGRpdGlvbmFsIG91dHB1dCBwYXJhbWV0ZXIgc2hvdWxkIGJlIGlu
IGVhY2ggY2FzZS4KLSAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogcmVmYWN0b3IgdGhpcyBj
b25kaXRpb247IGl0J3MgYSBoYWNrIG5vdy4KLSAgICAgICAgICAgICAgICAgICAgdmFyX3R5cGVf
dGV4dCA9IHJhd190eXBlLmdldF9yYXdfdHlwZV9tb2RlbCgpLmdldF9jb21tYW5kX3JldHVybl9w
YXNzX21vZGVsKCkuZ2V0X3JldHVybl92YXJfdHlwZSgpCi0gICAgICAgICAgICAgICAgICAgIGlm
IHZhcl90eXBlX3RleHQgPT0gImJvb2wiIG9yIHZhcl90eXBlX3RleHQuc3RhcnRzd2l0aCgiUmVm
UHRyPCIpOgotICAgICAgICAgICAgICAgICAgICAgICAgY29vayA9ICgiICAgICAgICBpZiAob3V0
XyVzKVxuICAgICIgJSBqc29uX3JldHVybl9uYW1lKSArIGNvb2sKLSAgICAgICAgICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvb2sgPSAiICAgICAgICAvLyBGSVhN
RTogc3VwcG9ydCBvcHRpb25hbCBoZXJlLlxuIiArIGNvb2sKKyAgICAgICAgICAgICAgICBpZiBz
dHJpY3RfbW9kZToKKyAgICAgICAgICAgICAgICAgICAgIyBBbGwgdHlwZXMgYXJlIHN0cmljdC4g
VmFsdWVzIGRvIG5vdCBoYXZlIGRlZmF1bHQgdmFsdWVzLgorICAgICAgICAgICAgICAgICAgICBj
b2RlID0gIiAgICAlcyBvdXRfJXM7XG4iICUgKHR5cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJu
X3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBlKCksIGpzb25fcmV0dXJuX25hbWUpCisg
ICAgICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgJXNvdXRfJXMiICUgKHR5cGVfbW9kZWwuZ2V0
X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZpeCgp
LCBqc29uX3JldHVybl9uYW1lKQorICAgICAgICAgICAgICAgICAgICB2YXJfbmFtZSA9ICJvdXRf
JXMiICUganNvbl9yZXR1cm5fbmFtZQorICAgICAgICAgICAgICAgICAgICBzZXR0ZXJfYXJndW1l
bnQgPSB0eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X291dHB1
dF90b19yYXdfZXhwcmVzc2lvbigpICUgdmFyX25hbWUKKyAgICAgICAgICAgICAgICAgICAgaWYg
cmV0dXJuX3R5cGVfYmluZGluZy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigp
OgorICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyX2FyZ3VtZW50ID0gcmV0dXJuX3R5cGVf
YmluZGluZy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpICUgc2V0dGVyX2Fy
Z3VtZW50CisKKyAgICAgICAgICAgICAgICAgICAgY29vayA9ICIgICAgICAgIHJlc3VsdC0+c2V0
JXMoXCIlc1wiLCAlcyk7XG4iICUgKHNldHRlcl90eXBlLCBqc29uX3JldHVybl9uYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0dGVyX2FyZ3VtZW50KQorCisgICAgICAgICAgICAgICAgICAgIHNldF9jb25k
aXRpb25fcGF0dGVybiA9IHR5cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwo
KS5nZXRfc2V0X3JldHVybl9jb25kaXRpb24oKQorICAgICAgICAgICAgICAgICAgICBpZiBzZXRf
Y29uZGl0aW9uX3BhdHRlcm46CisgICAgICAgICAgICAgICAgICAgICAgICBjb29rID0gKCIgICAg
ICAgIGlmICglcylcbiAgICAiICUgKHNldF9jb25kaXRpb25fcGF0dGVybiAlIHZhcl9uYW1lKSkg
KyBjb29rCisgICAgICAgICAgICAgICAgICAgIGFubm90YXRlZF90eXBlID0gdHlwZV9tb2RlbC5n
ZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9vdXRwdXRfcGFyYW1ldGVyX3R5cGUo
KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgQWxsIHR5cGVz
IGFyZSByYXcuIFZhbHVlcyBhbHdheXMgaGF2ZSBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgICAg
ICAgICAgICAgcmF3X3R5cGVfbW9kZWwgPSByZXR1cm5fdHlwZV9iaW5kaW5nLmdldF90eXBlX21v
ZGVsKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgb3B0aW9uYWw6CisgICAgICAgICAgICAgICAg
ICAgICAgICByYXdfdHlwZV9tb2RlbCA9IHJhd190eXBlX21vZGVsLmdldF9vcHRpb25hbCgpCisK
KyAgICAgICAgICAgICAgICAgICAgY29kZSA9ICIgICAgJXMgb3V0XyVzID0gJXM7XG4iICUgKHJh
d190eXBlLmdldF9yYXdfdHlwZV9tb2RlbCgpLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVs
KCkuZ2V0X3JldHVybl92YXJfdHlwZSgpLCBqc29uX3JldHVybl9uYW1lLCBpbml0aWFsaXplcikK
KyAgICAgICAgICAgICAgICAgICAgcGFyYW0gPSAiLCAlc291dF8lcyIgJSAocmF3X3R5cGUuZ2V0
X291dHB1dF9wYXNzX21vZGVsKCkuZ2V0X2FyZ3VtZW50X3ByZWZpeCgpLCBqc29uX3JldHVybl9u
YW1lKQorICAgICAgICAgICAgICAgICAgICBjb29rID0gIiAgICAgICAgcmVzdWx0LT5zZXQlcyhc
IiVzXCIsIG91dF8lcyk7XG4iICUgKHNldHRlcl90eXBlLCBqc29uX3JldHVybl9uYW1lLCBqc29u
X3JldHVybl9uYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICMgRklYTUU6IHN1cHBvcnQgb3B0aW9uYWwgcHJvcGVybHkuIFByb2Jh
Ymx5IGFuIGFkZGl0aW9uYWwgb3V0cHV0IHBhcmFtZXRlciBzaG91bGQgYmUgaW4gZWFjaCBjYXNl
LgorICAgICAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogcmVmYWN0b3IgdGhpcyBjb25kaXRp
b247IGl0J3MgYSBoYWNrIG5vdy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcl90eXBlX3Rl
eHQgPSByYXdfdHlwZS5nZXRfcmF3X3R5cGVfbW9kZWwoKS5nZXRfY29tbWFuZF9yZXR1cm5fcGFz
c19tb2RlbCgpLmdldF9yZXR1cm5fdmFyX3R5cGUoKQorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgdmFyX3R5cGVfdGV4dCA9PSAiYm9vbCIgb3IgdmFyX3R5cGVfdGV4dC5zdGFydHN3aXRoKCJS
ZWZQdHI8Iik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vayA9ICgiICAgICAgICBp
ZiAob3V0XyVzKVxuICAgICIgJSBqc29uX3JldHVybl9uYW1lKSArIGNvb2sKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vayA9ICIg
ICAgICAgIC8vIEZJWE1FOiBzdXBwb3J0IG9wdGlvbmFsIGhlcmUuXG4iICsgY29vawogCi0gICAg
ICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4dChyYXdf
dHlwZS5nZXRfcmF3X3R5cGVfbW9kZWwoKS5nZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgp
LmdldF9yZXR1cm5fdmFyX3R5cGUoKSArIHJhd190eXBlLmdldF9vdXRwdXRfcGFzc19tb2RlbCgp
LmdldF9wYXJhbWV0ZXJfdHlwZV9zdWZmaXgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0
dXJuX3Bhc3NfbW9kZWwoKS5nZXRfb3V0cHV0X3BhcmFtZXRlcl90eXBlKCkpCisgICAgICAgICAg
ICAgICAgICAgIGFubm90YXRlZF90eXBlID0gZ2V0X2Fubm90YXRlZF90eXBlX3RleHQocmF3X3R5
cGUuZ2V0X3Jhd190eXBlX21vZGVsKCkuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5n
ZXRfcmV0dXJuX3Zhcl90eXBlKCkgKyByYXdfdHlwZS5nZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKS5n
ZXRfcGFyYW1ldGVyX3R5cGVfc3VmZml4KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9tb2RlbC5nZXRfY29tbWFuZF9y
ZXR1cm5fcGFzc19tb2RlbCgpLmdldF9vdXRwdXRfcGFyYW1ldGVyX3R5cGUoKSkKIAogICAgICAg
ICAgICAgICAgIHBhcmFtX25hbWUgPSAib3V0XyVzIiAlIGpzb25fcmV0dXJuX25hbWUKICAgICAg
ICAgICAgICAgICBpZiBvcHRpb25hbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9Db250ZW50U2VhcmNoVXRpbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
bnRlbnRTZWFyY2hVdGlscy5jcHAKaW5kZXggZDBlMTI4YjIzODM4ZWYwOTQyY2I3Njg0ODg0YWU5
YzllY2EyMzE1OC4uOTI4MTgxMzdhZGZkZjEyNjEzYzI4YjBlMTYxN2JiZDQ0MDcyNzRlOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlscy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlscy5jcHAKQEAg
LTkzLDEzICs5MywxMSBAQCBzdGF0aWMgVmVjdG9yPHBhaXI8aW50LCBTdHJpbmc+ID4gZ2V0UmVn
dWxhckV4cHJlc3Npb25NYXRjaGVzQnlMaW5lcyhjb25zdCBSZWd1bAogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RG
b3JTZWFyY2hNYXRjaChpbnQgbGluZU51bWJlciwgU3RyaW5nIGxpbmVDb250ZW50KQorc3RhdGlj
IFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaE1hdGNoPiBidWlsZE9iamVjdEZv
clNlYXJjaE1hdGNoKGludCBsaW5lTnVtYmVyLCBTdHJpbmcgbGluZUNvbnRlbnQpCiB7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKLSAgICByZXN1bHQtPnNldE51bWJlcigibGluZU51bWJlciIsIGxpbmVOdW1iZXIpOwotICAg
IHJlc3VsdC0+c2V0U3RyaW5nKCJsaW5lQ29udGVudCIsIGxpbmVDb250ZW50KTsKLQotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgcmV0dXJuIFR5cGVCdWlsZGVyOjpQYWdlOjpTZWFyY2hNYXRjaDo6
Y3JlYXRlKCkKKyAgICAgICAgLnNldExpbmVOdW1iZXIobGluZU51bWJlcikKKyAgICAgICAgLnNl
dExpbmVDb250ZW50KGxpbmVDb250ZW50KTsKIH0KIAogUmVndWxhckV4cHJlc3Npb24gY3JlYXRl
U2VhcmNoUmVnZXgoY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29s
IGlzUmVnZXgpCkBAIC0xMjcsMTUgKzEyNSwxNSBAQCBpbnQgY291bnRSZWd1bGFyRXhwcmVzc2lv
bk1hdGNoZXMoY29uc3QgUmVndWxhckV4cHJlc3Npb24mIHJlZ2V4LCBjb25zdCBTdHJpbmcmCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gc2VhcmNo
SW5UZXh0QnlMaW5lcyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNv
bnN0IGJvb2wgY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCBpc1JlZ2V4KQorUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaE1hdGNoPiA+IHNlYXJj
aEluVGV4dEJ5TGluZXMoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBj
b25zdCBib29sIGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wgaXNSZWdleCkKIHsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHJlc3VsdCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpTZWFyY2hNYXRj
aD4gPiByZXN1bHQgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJj
aE1hdGNoPjo6Y3JlYXRlKCk7CiAKICAgICBSZWd1bGFyRXhwcmVzc2lvbiByZWdleCA9IENvbnRl
bnRTZWFyY2hVdGlsczo6Y3JlYXRlU2VhcmNoUmVnZXgocXVlcnksIGNhc2VTZW5zaXRpdmUsIGlz
UmVnZXgpOwogICAgIFZlY3RvcjxwYWlyPGludCwgU3RyaW5nPiA+IG1hdGNoZXMgPSBnZXRSZWd1
bGFyRXhwcmVzc2lvbk1hdGNoZXNCeUxpbmVzKHJlZ2V4LCB0ZXh0KTsKIAogICAgIGZvciAoVmVj
dG9yPHBhaXI8aW50LCBTdHJpbmc+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWF0Y2hlcy5iZWdp
bigpOyBpdCAhPSBtYXRjaGVzLmVuZCgpOyArK2l0KQotICAgICAgICByZXN1bHQtPnB1c2hWYWx1
ZShidWlsZE9iamVjdEZvclNlYXJjaE1hdGNoKGl0LT5maXJzdCwgaXQtPnNlY29uZCkpOworICAg
ICAgICByZXN1bHQtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JTZWFyY2hNYXRjaChpdC0+Zmlyc3Qs
IGl0LT5zZWNvbmQpKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxzLmgKaW5kZXggZjRiMWVkYTJkMzVkYWU4ZGIx
OTE5ZWQyZjNjZTA0OTJiN2E2YzBkYy4uZDJjMjcyNTM2NDBhYzdkMmY3YWY0N2I2YzVkZjA2M2Iw
MDlkYmZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFy
Y2hVdGlscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRp
bHMuaApAQCAtMjksNiArMjksNyBAQAogI2lmbmRlZiBDb250ZW50U2VhcmNoVXRpbHNfaAogI2Rl
ZmluZSBDb250ZW50U2VhcmNoVXRpbHNfaAogCisjaW5jbHVkZSAiSW5zcGVjdG9yVHlwZUJ1aWxk
ZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgpAQCAtNDIsNyArNDMsNyBAQCBuYW1lc3BhY2UgQ29udGVudFNlYXJjaFV0aWxzIHsKIAog
UmVndWxhckV4cHJlc3Npb24gY3JlYXRlU2VhcmNoUmVnZXgoY29uc3QgU3RyaW5nJiBxdWVyeSwg
Ym9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGlzUmVnZXgpOwogaW50IGNvdW50UmVndWxhckV4cHJl
c3Npb25NYXRjaGVzKGNvbnN0IFJlZ3VsYXJFeHByZXNzaW9uJiwgY29uc3QgU3RyaW5nJik7Ci1Q
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBzZWFyY2hJblRleHRCeUxpbmVzKGNvbnN0IFN0cmlu
ZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCBjYXNlU2Vuc2l0aXZlLCBj
b25zdCBib29sIGlzUmVnZXgpOworUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1
aWxkZXI6OlBhZ2U6OlNlYXJjaE1hdGNoPiA+IHNlYXJjaEluVGV4dEJ5TGluZXMoY29uc3QgU3Ry
aW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sIGNhc2VTZW5zaXRpdmUs
IGNvbnN0IGJvb2wgaXNSZWdleCk7CiAKIFN0cmluZyBmaW5kU291cmNlVVJMKGNvbnN0IFN0cmlu
ZyYgY29udGVudCk7CiBTdHJpbmcgZmluZFNvdXJjZU1hcFVSTChjb25zdCBTdHJpbmcmIGNvbnRl
bnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKaW5kZXgg
MTczMmE3ZWYzZDFjYzI3ZTg4MjZhYjgxNGRiMmYyNGMyOTQ3NzYwOC4uM2Y1MDBkNjhmNWZhYjI4
ZjIxNGI5NmZlMzNmNmVmZGZlZjBmYTBmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHQuY3BwCkBAIC02Miw3ICs2Miw3IEBAIEluamVjdGVkU2NyaXB0OjpJbmpl
Y3RlZFNjcmlwdChTY3JpcHRPYmplY3QgaW5qZWN0ZWRTY3JpcHRPYmplY3QsIEluc3BlY3RlZFN0
YXRlCiB7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlKEVycm9yU3RyaW5nKiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVj
dEdyb3VwLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZhbHVlLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0LCBib29sKiB3YXNUaHJvd24pCit2b2lkIElu
amVjdGVkU2NyaXB0OjpldmFsdWF0ZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0
cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRl
Q29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4qIHJlc3VsdCwgVHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKQogewog
ICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX2luamVjdGVkU2NyaXB0T2JqZWN0LCAi
ZXZhbHVhdGUiKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChleHByZXNzaW9uKTsKQEAg
LTcyLDcgKzcyLDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24KICAgICBtYWtlRXZhbENhbGwo
ZXJyb3JTdHJpbmcsIGZ1bmN0aW9uLCByZXN1bHQsIHdhc1Rocm93bik7CiB9CiAKLXZvaWQgSW5q
ZWN0ZWRTY3JpcHQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJp
bmcmIGFyZ3VtZW50cywgYm9vbCByZXR1cm5CeVZhbHVlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiogcmVzdWx0LCBib29sKiB3YXNUaHJvd24pCit2b2lkIEluamVjdGVkU2NyaXB0OjpjYWxsRnVu
Y3Rpb25PbihFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQs
IGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBhcmd1bWVudHMsIGJvb2wg
cmV0dXJuQnlWYWx1ZSwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCwgVHlwZUJ1aWxk
ZXI6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKQogewogICAgIFNjcmlwdEZ1bmN0aW9uQ2Fs
bCBmdW5jdGlvbihtX2luamVjdGVkU2NyaXB0T2JqZWN0LCAiY2FsbEZ1bmN0aW9uT24iKTsKICAg
ICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3RJZCk7CkBAIC04Miw3ICs4Miw3IEBAIHZv
aWQgSW5qZWN0ZWRTY3JpcHQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBvYmplCiAgICAgbWFrZUV2YWxDYWxsKGVycm9yU3RyaW5nLCBmdW5j
dGlvbiwgcmVzdWx0LCB3YXNUaHJvd24pOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpldmFs
dWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU2NyaXB0VmFs
dWUmIGNhbGxGcmFtZXMsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYg
ZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFu
ZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgUmVmUHRyPFJlbW90ZU9iamVjdD4qIHJlc3Vs
dCwgYm9vbCogd2FzVGhyb3duKQordm9pZCBJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGVPbkNhbGxG
cmFtZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFNjcmlwdFZhbHVlJiBjYWxsRnJh
bWVzLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBi
b29sIHJldHVybkJ5VmFsdWUsIFJlZlB0cjxSZW1vdGVPYmplY3Q+KiByZXN1bHQsIFR5cGVCdWls
ZGVyOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93bikKIHsKICAgICBTY3JpcHRGdW5jdGlvbkNh
bGwgZnVuY3Rpb24obV9pbmplY3RlZFNjcmlwdE9iamVjdCwgImV2YWx1YXRlT25DYWxsRnJhbWUi
KTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsRnJhbWVzKTsKQEAgLTI1OCw3ICsy
NTgsNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjptYWtlQ2FsbChTY3JpcHRGdW5jdGlvbkNhbGwm
IGZ1bmN0aW9uLCBSZWZQdHI8SW5zcGVjdG9yVmFsdQogICAgICAgICAqcmVzdWx0ID0gSW5zcGVj
dG9yU3RyaW5nOjpjcmVhdGUoIkV4Y2VwdGlvbiB3aGlsZSBtYWtpbmcgYSBjYWxsLiIpOwogfQog
Ci12b2lkIEluamVjdGVkU2NyaXB0OjptYWtlRXZhbENhbGwoRXJyb3JTdHJpbmcqIGVycm9yU3Ry
aW5nLCBTY3JpcHRGdW5jdGlvbkNhbGwmIGZ1bmN0aW9uLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
Piogb2JqZWN0UmVzdWx0LCBib29sKiB3YXNUaHJvd24pCit2b2lkIEluamVjdGVkU2NyaXB0Ojpt
YWtlRXZhbENhbGwoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTY3JpcHRGdW5jdGlvbkNhbGwm
IGZ1bmN0aW9uLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb2JqZWN0UmVzdWx0LCBUeXBlQnVp
bGRlcjo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pCiB7CiAgICAgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiByZXN1bHQ7CiAgICAgbWFrZUNhbGwoZnVuY3Rpb24sICZyZXN1bHQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaAppbmRleCA4NGQ5YTc4ZWQzNmYwYzhh
NTg1NmFjODA1MjVjODUxMmRjNTc2YTY3Li5mYWQxNjQ1NjU5M2VhZjFmZjNlYWNmMDQ3NTAxMTJl
YjI5MmE4NTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaApA
QCAtNjQsMTQgKzY0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVk
ZUNvbW1hbmRMaW5lQVBJLAogICAgICAgICAgICAgICAgICAgYm9vbCByZXR1cm5CeVZhbHVlLAog
ICAgICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCwKLSAgICAg
ICAgICAgICAgICAgIGJvb2wqIHdhc1Rocm93bik7CisgICAgICAgICAgICAgICAgICBUeXBlQnVp
bGRlcjo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pOwogICAgIHZvaWQgY2FsbEZ1bmN0aW9u
T24oRXJyb3JTdHJpbmcqLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBv
YmplY3RJZCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lv
biwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXR1cm5CeVZhbHVlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wqIHdhc1Rocm93bik7CisgICAgICAgICAgICAgICAgICAgICAgICBUeXBl
QnVpbGRlcjo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pOwogICAgIHZvaWQgZXZhbHVhdGVP
bkNhbGxGcmFtZShFcnJvclN0cmluZyosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFNjcmlwdFZhbHVlJiBjYWxsRnJhbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLApAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJldHVybkJ5VmFsdWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiogcmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiB3YXNU
aHJvd24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlQnVpbGRlcjo6T3B0T3V0
cHV0PGJvb2w+KiB3YXNUaHJvd24pOwogICAgIHZvaWQgZ2V0RnVuY3Rpb25EZXRhaWxzKEVycm9y
U3RyaW5nKiwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRl
YnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+KiByZXN1bHQpOwogICAgIHZvaWQgZ2V0UHJvcGVydGll
cyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVydGll
cywgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0KTsKICAgICBOb2RlKiBub2RlRm9yT2Jq
ZWN0SWQoY29uc3QgU3RyaW5nJiBvYmplY3RJZCk7CkBAIC0xMDUsNyArMTA1LDcgQEAgcHJpdmF0
ZToKICAgICBib29sIGNhbkFjY2Vzc0luc3BlY3RlZFdpbmRvdygpIGNvbnN0OwogICAgIFNjcmlw
dFZhbHVlIGNhbGxGdW5jdGlvbldpdGhFdmFsRW5hYmxlZChTY3JpcHRGdW5jdGlvbkNhbGwmLCBi
b29sJiBoYWRFeGNlcHRpb24pIGNvbnN0OwogICAgIHZvaWQgbWFrZUNhbGwoU2NyaXB0RnVuY3Rp
b25DYWxsJiwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKLSAgICB2b2lkIG1ha2VF
dmFsQ2FsbChFcnJvclN0cmluZyosIFNjcmlwdEZ1bmN0aW9uQ2FsbCYsIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+KiByZXN1bHQsIGJvb2wqIHdhc1Rocm93bik7CisgICAgdm9pZCBtYWtlRXZhbENh
bGwoRXJyb3JTdHJpbmcqLCBTY3JpcHRGdW5jdGlvbkNhbGwmLCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiogcmVzdWx0LCBUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pOwog
ICAgIFNjcmlwdFZhbHVlIG5vZGVBc1NjcmlwdFZhbHVlKE5vZGUqKTsKIAogICAgIFNjcmlwdE9i
amVjdCBtX2luamVjdGVkU2NyaXB0T2JqZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDliYTZiYzkzODkx
MTNmYmYwYWQ1OTEwYjZhMzNhMzA3MTFjZDAwNTkuLmNmYjM1NzYxOGUxZWZmODViYjNlN2Q2NDcx
NTM0Y2I5ZWQ1YThlMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRl
ICJJbnNwZWN0b3JBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250
ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yU3RhdGUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKQEAgLTU2LDEw
ICs1Nyw2IEBAIGVudW0gRE9NQnJlYWtwb2ludFR5cGUgewogc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IGxpc3RlbmVyRXZlbnRDYXRlZ29yeVR5cGUgPSAibGlzdGVuZXI6IjsKIHN0YXRpYyBjb25z
dCBjaGFyKiBjb25zdCBpbnN0cnVtZW50YXRpb25FdmVudENhdGVnb3J5VHlwZSA9ICJpbnN0cnVt
ZW50YXRpb246IjsKIAotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRvbU5hdGl2ZUJyZWFrcG9p
bnRUeXBlID0gIkRPTSI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZXZlbnRMaXN0ZW5lck5h
dGl2ZUJyZWFrcG9pbnRUeXBlID0gIkV2ZW50TGlzdGVuZXIiOwotc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IHhock5hdGl2ZUJyZWFrcG9pbnRUeXBlID0gIlhIUiI7Ci0KIGNvbnN0IHVpbnQzMl90
IGluaGVyaXRhYmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzayA9ICgxIDw8IFN1YnRyZWVNb2RpZmll
ZCk7CiBjb25zdCBpbnQgZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQgPSAxNjsKIApAQCAt
NjcsNiArNjQsMTAgQEAgY29uc3QgaW50IGRvbUJyZWFrcG9pbnREZXJpdmVkVHlwZVNoaWZ0ID0g
MTY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGNvbnN0IEluc3BlY3RvckZyb250
ZW5kOjpEZWJ1Z2dlcjo6UmVhc29uOjpFbnVtIGRvbU5hdGl2ZUJyZWFrcG9pbnRUeXBlID0gSW5z
cGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpSZWFzb246OkRPTTsKK3N0YXRpYyBjb25zdCBJbnNw
ZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OlJlYXNvbjo6RW51bSBldmVudExpc3RlbmVyTmF0aXZl
QnJlYWtwb2ludFR5cGUgPSBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OlJlYXNvbjo6RXZl
bnRMaXN0ZW5lcjsKK3N0YXRpYyBjb25zdCBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OlJl
YXNvbjo6RW51bSB4aHJOYXRpdmVCcmVha3BvaW50VHlwZSA9IEluc3BlY3RvckZyb250ZW5kOjpE
ZWJ1Z2dlcjo6UmVhc29uOjpYSFI7CisKIG5hbWVzcGFjZSBET01EZWJ1Z2dlckFnZW50U3RhdGUg
ewogc3RhdGljIGNvbnN0IGNoYXIgZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzW10gPSAiZXZlbnRM
aXN0ZW5lckJyZWFrcG9pbnRzIjsKIHN0YXRpYyBjb25zdCBjaGFyIHBhdXNlT25BbGxYSFJzW10g
PSAicGF1c2VPbkFsbFhIUnMiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDY2MDllNjRlZDZkMTUxZDA4MzE0ZjkwYWVl
YjJiNDE1MDhhYzI4ODAuLmEzM2RhODJhMzRkNmVhZjU2YzRlNGNmYWM0ZjE0MzE4MmZiY2VjMmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJB
Z2VudC5jcHAKQEAgLTIxNCwxMCArMjE0LDkgQEAgc3RhdGljIGJvb2wgbWF0Y2hlcyhjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuLCBib29sIGlzUmVnZXgpCiAgICAgcmV0
dXJuIHVybCA9PSBwYXR0ZXJuOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
dEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBsaW5lTnVtYmVy
LCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9w
dGlvbmFsVVJMUmVnZXgsIGNvbnN0IGludCogY29uc3Qgb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNv
bnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxDb25kaXRpb24sIFN0cmluZyogb3V0QnJlYWtwb2lu
dElkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBsb2NhdGlvbnNSYXcpCit2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyogZXJyb3JTdHJp
bmcsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJMLCBjb25z
dCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJMUmVnZXgsIGNvbnN0IGludCogY29uc3Qgb3B0aW9u
YWxDb2x1bW5OdW1iZXIsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxDb25kaXRpb24sIFR5
cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBvdXRCcmVha3BvaW50SWQsIFJlZlB0
cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gPiYg
bG9jYXRpb25zKQogewotICAgIFJlZlB0cjxBcnJheTxUeXBlQnVpbGRlcjo6RGVidWdnZXI6Okxv
Y2F0aW9uPiA+IGxvY2F0aW9ucyA9IEFycmF5PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRp
b24+OjpjcmVhdGUoKTsKLSAgICBsb2NhdGlvbnNSYXcgPSBsb2NhdGlvbnM7CisgICAgbG9jYXRp
b25zID0gQXJyYXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj46OmNyZWF0ZSgpOwog
ICAgIGlmICghb3B0aW9uYWxVUkwgPT0gIW9wdGlvbmFsVVJMUmVnZXgpIHsKICAgICAgICAgKmVy
cm9yU3RyaW5nID0gIkVpdGhlciB1cmwgb3IgdXJsUmVnZXggbXVzdCBiZSBzcGVjaWZpZWQuIjsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjYxLDcgKzI2MCw3IEBAIHN0YXRpYyBib29sIHBhcnNlTG9j
YXRpb24oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBs
b2NhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c2V0QnJlYWtwb2ludChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiBsb2NhdGlvbiwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbENvbmRp
dGlvbiwgU3RyaW5nKiBvdXRCcmVha3BvaW50SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBh
Y3R1YWxMb2NhdGlvbikKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2lu
dChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiBsb2NhdGlvbiwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbENvbmRpdGlvbiwgVHlwZUJ1
aWxkZXI6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZCwgUmVmUHRyPFR5
cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBhY3R1YWxMb2NhdGlvbikKIHsKICAgICBT
dHJpbmcgc2NyaXB0SWQ7CiAgICAgaW50IGxpbmVOdW1iZXI7CkBAIC0zNTMsNyArMzUyLDcgQEAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzY3JpcHRUb0luc3BlY3Rvck9iamVj
dChTY3JpcHRPYmplY3Qgc2NyaXB0T2IKICAgICByZXR1cm4gdmFsdWUtPmFzT2JqZWN0KCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2VhcmNoSW5Db250ZW50KEVycm9yU3Ry
aW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwg
Y29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBjb25z
dCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIHJlc3VsdHMpCit2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudChFcnJvclN0cmluZyogZXJy
b3IsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJv
b2wqIGNvbnN0IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9u
YWxJc1JlZ2V4LCBSZWZQdHI8QXJyYXk8V2ViQ29yZTo6VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJj
aE1hdGNoPiA+JiByZXN1bHRzKQogewogICAgIGJvb2wgaXNSZWdleCA9IG9wdGlvbmFsSXNSZWdl
eCA/ICpvcHRpb25hbElzUmVnZXggOiBmYWxzZTsKICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBv
cHRpb25hbENhc2VTZW5zaXRpdmUgPyAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZlIDogZmFsc2U7CkBA
IC0zNjUsNyArMzY0LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNv
bnRlbnQoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHMKICAgICAgICAgKmVycm9y
ID0gIk5vIHNjcmlwdCBmb3IgaWQ6ICIgKyBzY3JpcHRJZDsKIH0KIAotdm9pZCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpzZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBT
dHJpbmcmIHNjcmlwdElkLCBjb25zdCBTdHJpbmcmIG5ld0NvbnRlbnQsIGNvbnN0IGJvb2wqIGNv
bnN0IHByZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIG5ld0NhbGxGcmFtZXMsIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnNldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyaXB0
SWQsIGNvbnN0IFN0cmluZyYgbmV3Q29udGVudCwgY29uc3QgYm9vbCogY29uc3QgcHJldmlldywg
UmVmUHRyPEFycmF5PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPiA+JiBuZXdDYWxs
RnJhbWVzLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KQogewogICAgIGJvb2wgcHJl
dmlld09ubHkgPSBwcmV2aWV3ICYmICpwcmV2aWV3OwogICAgIFNjcmlwdE9iamVjdCByZXN1bHRP
YmplY3Q7CkBAIC0zODYsMTkgKzM4NSwxNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgcwogICAg
ICAgICAqZXJyb3IgPSAiTm8gc2NyaXB0IGZvciBpZDogIiArIHNjcmlwdElkOwogfQogCi12b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyog
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mIGRldGFpbHNSYXcpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldEZ1bmN0
aW9uRGV0YWlscyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnVuY3Rp
b25JZCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgZGV0
YWlscykKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKGZ1bmN0aW9uSWQpOwogICAg
IGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKICAgICAgICAgKmVycm9yU3RyaW5n
ID0gIkluc3BlY3RlZCBmcmFtZSBoYXMgZ29uZSI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgUmVmUHRyPEZ1bmN0aW9uRGV0YWlscz4gZGV0YWlsczsKICAgICBpbmplY3RlZFNjcmlwdC5n
ZXRGdW5jdGlvbkRldGFpbHMoZXJyb3JTdHJpbmcsIGZ1bmN0aW9uSWQsICZkZXRhaWxzKTsKLSAg
ICBkZXRhaWxzUmF3ID0gZGV0YWlsczsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KGNvbnN0IFN0cmluZyYgYnJlYWtSZWFzb24s
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KEluc3BlY3RvckZyb250ZW5kOjpE
ZWJ1Z2dlcjo6UmVhc29uOjpFbnVtIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gZGF0YSkKIHsKICAgICBpZiAobV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQpCiAgICAg
ICAgIHJldHVybjsKQEAgLTQ3OCwxNiArNDc1LDE0IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6c2V0UGF1c2VPbkV4Y2VwdGlvbnNJbXBsKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywK
ICAgICAgICAgbV9zdGF0ZS0+c2V0TG9uZyhEZWJ1Z2dlckFnZW50U3RhdGU6OnBhdXNlT25FeGNl
cHRpb25zU3RhdGUsIHBhdXNlU3RhdGUpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmlu
ZyogY29uc3Qgb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGNvbnN0IGluY2x1ZGVDb21tYW5kTGlu
ZUFQSSwgY29uc3QgYm9vbCogY29uc3QgcmV0dXJuQnlWYWx1ZSwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mIHJlc3VsdFJhdywgYm9vbCogd2FzVGhyb3duKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBT
dHJpbmcqIGNvbnN0IG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBjb25zdCBpbmNsdWRlQ29tbWFu
ZExpbmVBUEksIGNvbnN0IGJvb2wqIGNvbnN0IHJldHVybkJ5VmFsdWUsIFJlZlB0cjxUeXBlQnVp
bGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBUeXBlQnVpbGRlcjo6T3B0T3V0
cHV0PGJvb2w+KiB3YXNUaHJvd24pCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChj
YWxsRnJhbWVJZCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewogICAg
ICAgICAqZXJyb3JTdHJpbmcgPSAiSW5zcGVjdGVkIGZyYW1lIGhhcyBnb25lIjsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBSZWZQdHI8UmVtb3RlT2JqZWN0PiByZXN1bHQ7CiAgICAgaW5q
ZWN0ZWRTY3JpcHQuZXZhbHVhdGVPbkNhbGxGcmFtZShlcnJvclN0cmluZywgbV9jdXJyZW50Q2Fs
bFN0YWNrLCBjYWxsRnJhbWVJZCwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3Jv
dXAgOiAiIiwgaW5jbHVkZUNvbW1hbmRMaW5lQVBJID8gKmluY2x1ZGVDb21tYW5kTGluZUFQSSA6
IGZhbHNlLCByZXR1cm5CeVZhbHVlID8gKnJldHVybkJ5VmFsdWUgOiBmYWxzZSwgJnJlc3VsdCwg
d2FzVGhyb3duKTsKLSAgICByZXN1bHRSYXcgPSByZXN1bHQ7CiB9CiAKIFBhc3NSZWZQdHI8QXJy
YXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+ID4gSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6Y3VycmVudENhbGxGcmFtZXMoKQpAQCAtNTcxLDcgKzU2Niw3IEBAIHZvaWQgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25z
dCBTY3JpcHRWYWx1CiAgICAgaWYgKCFleGNlcHRpb24uaGFzTm9WYWx1ZSgpKSB7CiAgICAgICAg
IEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIt
PmluamVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRlKTsKICAgICAgICAgaWYgKCFpbmplY3RlZFNj
cmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIG1fYnJlYWtSZWFzb24gPSAiZXhjZXB0
aW9uIjsKKyAgICAgICAgICAgIG1fYnJlYWtSZWFzb24gPSBJbnNwZWN0b3JGcm9udGVuZDo6RGVi
dWdnZXI6OlJlYXNvbjo6RXhjZXB0aW9uOwogICAgICAgICAgICAgbV9icmVha0F1eERhdGEgPSBp
bmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGV4Y2VwdGlvbiwgImJhY2t0cmFjZSIpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtNTkzLDcgKzU4OCw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6ZGlkQ29udGludWUoKQogICAgIG1fZnJvbnRlbmQtPnJlc3VtZWQoKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha1Byb2dyYW0oY29uc3QgU3RyaW5nJiBicmVha1Jl
YXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpCit2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OlJl
YXNvbjo6RW51bSBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEp
CiB7CiAgICAgbV9icmVha1JlYXNvbiA9IGJyZWFrUmVhc29uOwogICAgIG1fYnJlYWtBdXhEYXRh
ID0gZGF0YTsKQEAgLTYyMiw3ICs2MTcsNyBAQCBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmFzc2VydFBhdXNlZChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcpCiAKIHZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6Y2xlYXJCcmVha0RldGFpbHMoKQogewotICAgIG1fYnJlYWtSZWFzb24g
PSAib3RoZXIiOworICAgIG1fYnJlYWtSZWFzb24gPSBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdn
ZXI6OlJlYXNvbjo6T3RoZXI7CiAgICAgbV9icmVha0F1eERhdGEgPSAwOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCBh
NmFiZmE0MzUzMGEyOTdlZWZkNjM4NmU4YWRmZTBkNDUzYzNiOWU0Li40NmUzYTMzMTUxMGFkZTRk
ZDg3OTljNWYwNWU5Y2E2Nzk5NjRlZDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTgyLDE4ICs4MiwxOCBAQCBwdWJsaWM6
CiAgICAgLy8gUGFydCBvZiB0aGUgcHJvdG9jb2wuCiAgICAgdmlydHVhbCB2b2lkIHNldEJyZWFr
cG9pbnRzQWN0aXZlKEVycm9yU3RyaW5nKiwgYm9vbCBhY3RpdmUpOwogCi0gICAgdmlydHVhbCB2
b2lkIHNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyosIGludCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcqIG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMUmVnZXgsIGNv
bnN0IGludCogb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxDb25k
aXRpb24sIFN0cmluZyogYnJlYWtwb2ludElkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBsb2Nh
dGlvbnMpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nKiwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGxvY2F0aW9uLCBjb25zdCBTdHJpbmcqIG9wdGlv
bmFsQ29uZGl0aW9uLCBTdHJpbmcqIGJyZWFrcG9pbnRJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mIGFjdHVhbExvY2F0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QnJlYWtwb2ludEJ5VXJs
KEVycm9yU3RyaW5nKiwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkws
IGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBvcHRpb25hbENvbHVt
bk51bWJlciwgY29uc3QgU3RyaW5nKiBvcHRpb25hbENvbmRpdGlvbiwgVHlwZUJ1aWxkZXI6OkRl
YnVnZ2VyOjpCcmVha3BvaW50SWQqLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWls
ZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+ID4mIGxvY2F0aW9ucyk7CisgICAgdmlydHVhbCB2b2lk
IHNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYgbG9jYXRpb24sIGNvbnN0IFN0cmluZyogb3B0aW9uYWxDb25kaXRpb24sIFR5cGVCdWlsZGVy
OjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6
TG9jYXRpb24+JiBhY3R1YWxMb2NhdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUJyZWFr
cG9pbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCk7CiAgICAgdmly
dHVhbCB2b2lkIGNvbnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlvbik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2VhcmNoSW5D
b250ZW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU3RyaW5n
JiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBv
cHRpb25hbElzUmVnZXgsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwg
Y29uc3QgU3RyaW5nJiBuZXdDb250ZW50LCBjb25zdCBib29sKiBwcmV2aWV3LCBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+JiBuZXdDYWxsRnJhbWVzLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVz
dWx0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VhcmNoSW5Db250ZW50KEVycm9yU3RyaW5nKiwgY29u
c3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0
aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxU
eXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaE1hdGNoPiA+Jik7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmlu
ZyYgc2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgbmV3Q29udGVudCwgY29uc3QgYm9vbCogcHJldmll
dywgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkNhbGxG
cmFtZT4gPiYgbmV3Q2FsbEZyYW1lcywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHJlc3VsdCk7
CiAgICAgdmlydHVhbCB2b2lkIGdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyosIGNvbnN0IFN0
cmluZyYgc2NyaXB0SWQsIFN0cmluZyogc2NyaXB0U291cmNlKTsKLSAgICB2aXJ0dWFsIHZvaWQg
Z2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklk
LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZGV0YWlscyk7Ci0gICAgdm9pZCBzY2hlZHVsZVBh
dXNlT25OZXh0U3RhdGVtZW50KGNvbnN0IFN0cmluZyYgYnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RnVuY3Rpb25EZXRh
aWxzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+Jik7CisgICAgdm9pZCBzY2hlZHVsZVBh
dXNlT25OZXh0U3RhdGVtZW50KEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6UmVhc29uOjpF
bnVtIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSk7CiAgICAg
dm9pZCBjYW5jZWxQYXVzZU9uTmV4dFN0YXRlbWVudCgpOwotICAgIHZvaWQgYnJlYWtQcm9ncmFt
KGNvbnN0IFN0cmluZyYgYnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBk
YXRhKTsKKyAgICB2b2lkIGJyZWFrUHJvZ3JhbShJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6
OlJlYXNvbjo6RW51bSBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRh
dGEpOwogICAgIHZpcnR1YWwgdm9pZCBwYXVzZShFcnJvclN0cmluZyopOwogICAgIHZpcnR1YWwg
dm9pZCByZXN1bWUoRXJyb3JTdHJpbmcqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RlcE92ZXIoRXJy
b3JTdHJpbmcqKTsKQEAgLTEwNiw4ICsxMDYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGJvb2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHJlc3VsdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogd2FzVGhyb3duKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+JiByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVCdWlsZGVyOjpP
cHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93bik7CiAKICAgICBjbGFzcyBMaXN0ZW5lciB7CiAgICAg
cHVibGljOgpAQCAtMTU2LDcgKzE1Niw3IEBAIHByaXZhdGU6CiAgICAgU2NyaXB0c01hcCBtX3Nj
cmlwdHM7CiAgICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNNYXAgbV9i
cmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkczsKICAgICBTdHJpbmcgbV9jb250
aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SWQ7Ci0gICAgU3RyaW5nIG1fYnJlYWtSZWFzb247Cisg
ICAgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpSZWFzb246OkVudW0gbV9icmVha1JlYXNv
bjsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2JyZWFrQXV4RGF0YTsKICAgICBib29s
IG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkOwogICAgIExpc3RlbmVyKiBtX2xpc3RlbmVyOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAppbmRl
eCA3MTg0MzM0MGM3MTljMGE5ZmJlZDY3ZDM0YmJjYjYxYmIzODNiYWY3Li5kZDA4NTVmM2Q3YTky
ZTM4Y2ZmOTk4Y2IzYWVkZWEzNjU3MTI2YTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtMzk3LDI5ICszOTcsMjggQEAgdm9pZCBJ
bnNwZWN0b3JQYWdlQWdlbnQ6Om5hdmlnYXRlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiB1
cmwpCiAgICAgZnJhbWUtPmxvYWRlcigpLT5jaGFuZ2VMb2NhdGlvbihmcmFtZS0+ZG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKSwgZnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCks
ICIiLCBmYWxzZSwgZmFsc2UpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGJ1aWxkT2JqZWN0Rm9yQ29va2llKGNvbnN0IENvb2tpZSYgY29va2llKQorc3RhdGljIFBh
c3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkNvb2tpZT4gYnVpbGRPYmplY3RGb3JDb29raWUo
Y29uc3QgQ29va2llJiBjb29raWUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFs
dWUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHZhbHVlLT5zZXRTdHJpbmcoIm5h
bWUiLCBjb29raWUubmFtZSk7Ci0gICAgdmFsdWUtPnNldFN0cmluZygidmFsdWUiLCBjb29raWUu
dmFsdWUpOwotICAgIHZhbHVlLT5zZXRTdHJpbmcoImRvbWFpbiIsIGNvb2tpZS5kb21haW4pOwot
ICAgIHZhbHVlLT5zZXRTdHJpbmcoInBhdGgiLCBjb29raWUucGF0aCk7Ci0gICAgdmFsdWUtPnNl
dE51bWJlcigiZXhwaXJlcyIsIGNvb2tpZS5leHBpcmVzKTsKLSAgICB2YWx1ZS0+c2V0TnVtYmVy
KCJzaXplIiwgKGNvb2tpZS5uYW1lLmxlbmd0aCgpICsgY29va2llLnZhbHVlLmxlbmd0aCgpKSk7
Ci0gICAgdmFsdWUtPnNldEJvb2xlYW4oImh0dHBPbmx5IiwgY29va2llLmh0dHBPbmx5KTsKLSAg
ICB2YWx1ZS0+c2V0Qm9vbGVhbigic2VjdXJlIiwgY29va2llLnNlY3VyZSk7Ci0gICAgdmFsdWUt
PnNldEJvb2xlYW4oInNlc3Npb24iLCBjb29raWUuc2Vzc2lvbik7Ci0gICAgcmV0dXJuIHZhbHVl
OworICAgIHJldHVybiBUeXBlQnVpbGRlcjo6UGFnZTo6Q29va2llOjpjcmVhdGUoKQorICAgICAg
ICAuc2V0TmFtZShjb29raWUubmFtZSkKKyAgICAgICAgLnNldFZhbHVlKGNvb2tpZS52YWx1ZSkK
KyAgICAgICAgLnNldERvbWFpbihjb29raWUuZG9tYWluKQorICAgICAgICAuc2V0UGF0aChjb29r
aWUucGF0aCkKKyAgICAgICAgLnNldEV4cGlyZXMoY29va2llLmV4cGlyZXMpCisgICAgICAgIC5z
ZXRTaXplKChjb29raWUubmFtZS5sZW5ndGgoKSArIGNvb2tpZS52YWx1ZS5sZW5ndGgoKSkpCisg
ICAgICAgIC5zZXRIdHRwT25seShjb29raWUuaHR0cE9ubHkpCisgICAgICAgIC5zZXRTZWN1cmUo
Y29va2llLnNlY3VyZSkKKyAgICAgICAgLnNldFNlc3Npb24oY29va2llLnNlc3Npb24pOwogfQog
Ci1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvckNvb2tpZXMo
TGlzdEhhc2hTZXQ8Q29va2llPiYgY29va2llc0xpc3QpCitzdGF0aWMgUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OkNvb2tpZT4gPiBidWlsZEFycmF5Rm9y
Q29va2llcyhMaXN0SGFzaFNldDxDb29raWU+JiBjb29raWVzTGlzdCkKIHsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGNvb2tpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6UGFnZTo6Q29va2llPiA+IGNv
b2tpZXMgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OkNvb2tpZT46OmNy
ZWF0ZSgpOwogCiAgICAgTGlzdEhhc2hTZXQ8Q29va2llPjo6aXRlcmF0b3IgZW5kID0gY29va2ll
c0xpc3QuZW5kKCk7CiAgICAgTGlzdEhhc2hTZXQ8Q29va2llPjo6aXRlcmF0b3IgaXQgPSBjb29r
aWVzTGlzdC5iZWdpbigpOwogICAgIGZvciAoaW50IGkgPSAwOyBpdCAhPSBlbmQ7ICsraXQsIGkr
KykKLSAgICAgICAgY29va2llcy0+cHVzaE9iamVjdChidWlsZE9iamVjdEZvckNvb2tpZSgqaXQp
KTsKKyAgICAgICAgY29va2llcy0+YWRkSXRlbShidWlsZE9iamVjdEZvckNvb2tpZSgqaXQpKTsK
IAogICAgIHJldHVybiBjb29raWVzOwogfQpAQCAtNDY4LDcgKzQ2Nyw3IEBAIHN0YXRpYyBWZWN0
b3I8S1VSTD4gYWxsUmVzb3VyY2VzVVJMc0ZvckZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyhFcnJv
clN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGNvb2tpZXMsIFdURjo6U3RyaW5nKiBj
b29raWVzU3RyaW5nKQordm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJyb3JT
dHJpbmcqLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpDb29r
aWU+ID4mIGNvb2tpZXMsIFdURjo6U3RyaW5nKiBjb29raWVzU3RyaW5nKQogewogICAgIC8vIElm
IHdlIGNhbiBnZXQgcmF3IGNvb2tpZXMuCiAgICAgTGlzdEhhc2hTZXQ8Q29va2llPiByYXdDb29r
aWVzTGlzdDsKQEAgLTUwNCwxMCArNTAzLDEzIEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpn
ZXRDb29raWVzKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgY29va2llCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAocmF3Q29va2llc0ltcGxlbWVudGVkKQorICAgIGlm
IChyYXdDb29raWVzSW1wbGVtZW50ZWQpIHsKICAgICAgICAgY29va2llcyA9IGJ1aWxkQXJyYXlG
b3JDb29raWVzKHJhd0Nvb2tpZXNMaXN0KTsKLSAgICBlbHNlCisgICAgICAgICpjb29raWVzU3Ry
aW5nID0gIiI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29va2llcyA9IFR5cGVCdWlsZGVyOjpB
cnJheTxUeXBlQnVpbGRlcjo6UGFnZTo6Q29va2llPjo6Y3JlYXRlKCk7CiAgICAgICAgICpjb29r
aWVzU3RyaW5nID0gc3RyaW5nQ29va2llc0xpc3Q7CisgICAgfQogfQogCiB2b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBjb29r
aWVOYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbikKQEAgLTUyMyw3ICs1MjUsNyBAQCB2b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5n
JiBjb29raWVOYW1lLCBjbwogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6Omdl
dFJlc291cmNlVHJlZShFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBvYmpl
Y3QpCit2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VUcmVlKEVycm9yU3RyaW5n
KiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4mIG9iamVjdCkK
IHsKICAgICBvYmplY3QgPSBidWlsZE9iamVjdEZvckZyYW1lVHJlZShtX3BhZ2UtPm1haW5GcmFt
ZSgpKTsKIH0KQEAgLTU1MCw5ICs1NTIsOSBAQCBzdGF0aWMgYm9vbCB0ZXh0Q29udGVudEZvckNh
Y2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSwgU3RyaW5nKgogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVz
b3VyY2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbENhc2VT
ZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiYgcmVzdWx0cykKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJl
c291cmNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxDYXNl
U2Vuc2l0aXZlLCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxUeXBl
QnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaE1hdGNoPiA+JiByZXN1bHRz
KQogewotICAgIHJlc3VsdHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgcmVzdWx0
cyA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoTWF0Y2g+Ojpj
cmVhdGUoKTsKIAogICAgIGJvb2wgaXNSZWdleCA9IG9wdGlvbmFsSXNSZWdleCA/ICpvcHRpb25h
bElzUmVnZXggOiBmYWxzZTsKICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENhc2VT
ZW5zaXRpdmUgPyAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZlIDogZmFsc2U7CkBAIC01OTIsOSArNTk0
LDkgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclNl
YXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIGZyYW0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZXMoRXJyb3JTdHJpbmcqLCBj
b25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsQ2FzZVNlbnNpdGl2
ZSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+JiByZXN1bHRzKQordm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2Vz
KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBib29sKiBjb25zdCBvcHRp
b25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSXNSZWdleCwgUmVm
UHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoUmVzdWx0PiA+
JiByZXN1bHRzKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gc2VhcmNoUmVzdWx0cyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5
PFR5cGVCdWlsZGVyOjpQYWdlOjpTZWFyY2hSZXN1bHQ+ID4gc2VhcmNoUmVzdWx0cyA9IFR5cGVC
dWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoUmVzdWx0Pjo6Y3JlYXRlKCk7
CiAKICAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVnZXggPyAqb3B0aW9uYWxJc1JlZ2V4
IDogZmFsc2U7CiAgICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gb3B0aW9uYWxDYXNlU2Vuc2l0aXZl
ID8gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA6IGZhbHNlOwpAQCAtODE5LDM0ICs4MjEsMzMgQEAg
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZFBhaW50KCkKICAgICBtX2xhc3RQYWludENvbnRl
eHQgPSAwOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yUGFnZUFn
ZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKK1Bhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OlBhZ2U6OkZyYW1lPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJh
bWUoRnJhbWUqIGZyYW1lKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGZyYW1lT2Jq
ZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBmcmFtZU9iamVjdC0+c2V0U3Ry
aW5nKCJpZCIsIGZyYW1lSWQoZnJhbWUpKTsKKyAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6
OkZyYW1lPiBmcmFtZU9iamVjdCA9IFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZTo6Y3JlYXRlKCkK
KyAgICAgICAgIC5zZXRJZChmcmFtZUlkKGZyYW1lKSkKKyAgICAgICAgIC5zZXRMb2FkZXJJZChs
b2FkZXJJZChmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpKQorICAgICAgICAgLnNl
dFVybChmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpCisgICAgICAgICAuc2V0TWlt
ZVR5cGUoZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXNwb25zZU1JTUVUeXBl
KCkpOwogICAgIGlmIChmcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKLSAgICAgICAgZnJhbWVPYmpl
Y3QtPnNldFN0cmluZygicGFyZW50SWQiLCBmcmFtZUlkKGZyYW1lLT50cmVlKCktPnBhcmVudCgp
KSk7CisgICAgICAgIGZyYW1lT2JqZWN0LT5zZXRQYXJlbnRJZChmcmFtZUlkKGZyYW1lLT50cmVl
KCktPnBhcmVudCgpKSk7CiAgICAgaWYgKGZyYW1lLT5vd25lckVsZW1lbnQoKSkgewogICAgICAg
ICBTdHJpbmcgbmFtZSA9IGZyYW1lLT5vd25lckVsZW1lbnQoKS0+Z2V0TmFtZUF0dHJpYnV0ZSgp
OwogICAgICAgICBpZiAobmFtZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBuYW1lID0gZnJhbWUt
Pm93bmVyRWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpOwotICAgICAg
ICBmcmFtZU9iamVjdC0+c2V0U3RyaW5nKCJuYW1lIiwgbmFtZSk7CisgICAgICAgIGZyYW1lT2Jq
ZWN0LT5zZXROYW1lKG5hbWUpOwogICAgIH0KLSAgICBmcmFtZU9iamVjdC0+c2V0U3RyaW5nKCJ1
cmwiLCBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpOwotICAgIGZyYW1lT2JqZWN0
LT5zZXRTdHJpbmcoImxvYWRlcklkIiwgbG9hZGVySWQoZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVu
dExvYWRlcigpKSk7Ci0gICAgZnJhbWVPYmplY3QtPnNldFN0cmluZygic2VjdXJpdHlPcmlnaW4i
LCBmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7Ci0gICAg
ZnJhbWVPYmplY3QtPnNldFN0cmluZygibWltZVR5cGUiLCBmcmFtZS0+bG9hZGVyKCktPmRvY3Vt
ZW50TG9hZGVyKCktPnJlc3BvbnNlTUlNRVR5cGUoKSk7CisgICAgZnJhbWVPYmplY3QtPnNldFNl
Y3VyaXR5T3JpZ2luKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmlu
ZygpKTsKIAogICAgIHJldHVybiBmcmFtZU9iamVjdDsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZVRyZWUoRnJh
bWUqIGZyYW1lKQorUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZVRy
ZWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZVRyZWUoRnJhbWUqIGZy
YW1lKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZnJhbWVPYmplY3Qg
PSBidWlsZE9iamVjdEZvckZyYW1lKGZyYW1lKTsKLSAgICByZXN1bHQtPnNldE9iamVjdCgiZnJh
bWUiLCBmcmFtZU9iamVjdCk7Ci0KICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHN1YnJlc291
cmNlcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICByZXN1bHQtPnNldEFycmF5KCJy
ZXNvdXJjZXMiLCBzdWJyZXNvdXJjZXMpOworICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6UGFnZTo6
RnJhbWVSZXNvdXJjZVRyZWU+IHJlc3VsdCA9IFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291
cmNlVHJlZTo6Y3JlYXRlKCkKKyAgICAgICAgIC5zZXRGcmFtZShmcmFtZU9iamVjdCkKKyAgICAg
ICAgIC5zZXRSZXNvdXJjZXMoc3VicmVzb3VyY2VzKTsKIAogICAgIFZlY3RvcjxDYWNoZWRSZXNv
dXJjZSo+IGFsbFJlc291cmNlcyA9IGNhY2hlZFJlc291cmNlc0ZvckZyYW1lKGZyYW1lKTsKICAg
ICBmb3IgKFZlY3RvcjxDYWNoZWRSZXNvdXJjZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFsbFJl
c291cmNlcy5iZWdpbigpOyBpdCAhPSBhbGxSZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAppbmRleCA4ZmQ3YjQy
MDhjZmU5OWZlNDBmMjQzMmFiZGQzMTgwODdiMDI0YzQ4Li45ZDhjOTJjZWI4M2ZiMzA3ZGQ1YWU4
NjBjMDFjNzMwMjc1YWIxOGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUGFnZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclBhZ2VBZ2VudC5oCkBAIC05NiwxMiArOTYsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiBpZGVudGlmaWVyKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVsb2FkKEVycm9yU3RyaW5nKiwg
Y29uc3QgYm9vbCogb3B0aW9uYWxJZ25vcmVDYWNoZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFNj
cmlwdFRvRXZhbHVhdGVPbkxvYWQpOwogICAgIHZpcnR1YWwgdm9pZCBuYXZpZ2F0ZShFcnJvclN0
cmluZyosIGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0Q29va2llcyhF
cnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGNvb2tpZXMsIFdURjo6U3RyaW5n
KiBjb29raWVzU3RyaW5nKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0Q29va2llcyhFcnJvclN0cmlu
ZyosIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OkNvb2tpZT4g
PiYgY29va2llcywgV1RGOjpTdHJpbmcqIGNvb2tpZXNTdHJpbmcpOwogICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVDb29raWUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNv
bnN0IFN0cmluZyYgZG9tYWluKTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVzb3VyY2VUcmVlKEVy
cm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mKTsKKyAgICB2aXJ0dWFsIHZvaWQg
Z2V0UmVzb3VyY2VUcmVlKEVycm9yU3RyaW5nKiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpG
cmFtZVJlc291cmNlVHJlZT4mKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVzb3VyY2VDb250ZW50
KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwg
U3RyaW5nKiBjb250ZW50LCBib29sKiBiYXNlNjRFbmNvZGVkKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2VhcmNoSW5SZXNvdXJjZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9wdGlvbmFs
Q2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3Ry
aW5nKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgYm9vbCogY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9v
bCogaXNSZWdleCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYpOworICAgIHZpcnR1YWwgdm9pZCBz
ZWFyY2hJblJlc291cmNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxD
YXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxUeXBlQnVp
bGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaE1hdGNoPiA+Jik7CisgICAgdmly
dHVhbCB2b2lkIHNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgYm9vbCogY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaXNSZWdleCwgUmVmUHRyPFR5
cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoUmVzdWx0PiA+Jik7CiAg
ICAgdmlydHVhbCB2b2lkIHNldERvY3VtZW50Q29udGVudChFcnJvclN0cmluZyosIGNvbnN0IFN0
cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBodG1sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
U2NyZWVuU2l6ZU92ZXJyaWRlKEVycm9yU3RyaW5nKiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvd1BhaW50UmVjdHMoRXJyb3JTdHJpbmcqLCBib29sIHNo
b3cpOwpAQCAtMTM4LDggKzEzOCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRGcmFtZVZpZXdG
aXhlZExheW91dChpbnQsIGludCk7CiAgICAgdm9pZCBjbGVhckZyYW1lVmlld0ZpeGVkTGF5b3V0
KCk7CiAKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JGcmFt
ZShGcmFtZSopOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZv
ckZyYW1lVHJlZShGcmFtZSopOworICAgIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkZy
YW1lPiBidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKik7CisgICAgUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+IGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZy
YW1lKik7CiAgICAgUGFnZSogbV9wYWdlOwogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9p
bmplY3RlZFNjcmlwdE1hbmFnZXI7CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSdW50aW1lQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAK
aW5kZXggNzQxN2Y4ZWMwMjA3OTQ4ZWFkZmYxMGZhNjFjZjBmY2VjYzExNzE1YS4uNWNmYzk0ODEx
MmZhZjNmZjgyNTZjZDUzMjI0NGQ5ZDJjMGQyY2VjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKQEAgLTk3LDcgKzk3LDkgQEAg
dm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmV2YWx1YXRlKEVycm9yU3RyaW5nKiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBleHAKICAgICB9CiAjZW5kaWYKIAotICAgIGluamVjdGVkU2Ny
aXB0LmV2YWx1YXRlKGVycm9yU3RyaW5nLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCA/ICpvYmpl
Y3RHcm91cCA6ICIiLCBhc0Jvb2woaW5jbHVkZUNvbW1hbmRMaW5lQVBJKSwgYXNCb29sKHJldHVy
bkJ5VmFsdWUpLCAmcmVzdWx0LCB3YXNUaHJvd24pOworICAgIFR5cGVCdWlsZGVyOjpPcHRPdXRw
dXQ8Ym9vbD4gd2FzVGhyb3duT3B0OworICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlKGVycm9y
U3RyaW5nLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6ICIiLCBhc0Jv
b2woaW5jbHVkZUNvbW1hbmRMaW5lQVBJKSwgYXNCb29sKHJldHVybkJ5VmFsdWUpLCAmcmVzdWx0
LCAmd2FzVGhyb3duT3B0KTsKKyAgICAqd2FzVGhyb3duID0gd2FzVGhyb3duT3B0LmlzQXNzaWdu
ZWQoKSA/IHdhc1Rocm93bk9wdC5nZXRWYWx1ZSgpIDogZmFsc2U7CiAKICNpZiBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikKICAgICBpZiAocGF1c2VTdGF0ZUNoYW5nZWQpCkBAIC0xMTUsNyAr
MTE3LDEwIEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25PbihFcnJv
clN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluCiAgICAgU3RyaW5nIGFyZ3VtZW50czsK
ICAgICBpZiAob3B0aW9uYWxBcmd1bWVudHMpCiAgICAgICAgIGFyZ3VtZW50cyA9ICgqb3B0aW9u
YWxBcmd1bWVudHMpLT50b0pTT05TdHJpbmcoKTsKLSAgICBpbmplY3RlZFNjcmlwdC5jYWxsRnVu
Y3Rpb25PbihlcnJvclN0cmluZywgb2JqZWN0SWQsIGV4cHJlc3Npb24sIGFyZ3VtZW50cywgYXNC
b29sKHJldHVybkJ5VmFsdWUpLCAmcmVzdWx0LCB3YXNUaHJvd24pOworCisgICAgVHlwZUJ1aWxk
ZXI6Ok9wdE91dHB1dDxib29sPiB3YXNUaHJvd25PcHQ7CisgICAgaW5qZWN0ZWRTY3JpcHQuY2Fs
bEZ1bmN0aW9uT24oZXJyb3JTdHJpbmcsIG9iamVjdElkLCBleHByZXNzaW9uLCBhcmd1bWVudHMs
IGFzQm9vbChyZXR1cm5CeVZhbHVlKSwgJnJlc3VsdCwgJndhc1Rocm93bk9wdCk7CisgICAgKndh
c1Rocm93biA9IHdhc1Rocm93bk9wdC5pc0Fzc2lnbmVkKCkgPyB3YXNUaHJvd25PcHQuZ2V0VmFs
dWUoKSA6IGZhbHNlOwogfQogCiB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UHJvcGVy
dGllcyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNv
bnN0IGJvb2wqIGNvbnN0IG93blByb3BlcnRpZXMsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIHJl
c3VsdCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131354</attachid>
            <date>2012-03-12 11:10:37 -0700</date>
            <delta_ts>2012-03-13 16:11:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80789-20120312221034.patch</filename>
            <type>text/plain</type>
            <size>52217</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTdkYmViZDEzYTQ0MDdi
NTFlZTE5MWViMzZmNDhmYmVlZDIyYWIyZC4uOGI4YTY4OWQ0NTU4ZGEyNzgyY2M2ZDk4NmRkYzY2
YjIwYzhmOTMyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDEyLTAzLTExICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBUeXBlQnVpbGRlcjogSW50cm9kdWNlIE9wdE91dHB1dCBjbGFzcyBmb3Igb3B0aW9uYWwgb3V0
cHV0IHBhcmFtZXRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTgwNzg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgT3B0T3V0cHV0IGNsYXNzIGlzIGFkZGVkIGZvciBvcHRpb25hbCByZXR1cm4gcGFyYW1l
dGVycy4KKworICAgICAgICBTdHJpY3QgbW9kZSBhZGRlZCB0byBHZW5lcmF0b3IgdGhhdCBtYWtl
cyBhbGwgcGFyYW1ldGVyIHR5cGVzIHN0cmljdAorICAgICAgICBhbmQgZHJvcCBwcmUtc2V0IGRl
ZmF1bHQgdmFsdWVzIGZvciByZXR1cm4gcGFyYW1ldGVycy4KKworICAgICAgICBEZWJ1Z2dlciBh
bmQgUGFnZSBkb21haW4gaXMgc3dpdGNoZWQgdG8gc3RyaWN0IG1vZGUuCisKKworICAgICAgICAq
IGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OgorICAgICAgICAoQ29tbWFuZFJl
dHVyblBhc3NNb2RlbC5CeVBvaW50ZXIpOgorICAgICAgICAoQ29tbWFuZFJldHVyblBhc3NNb2Rl
bCk6CisgICAgICAgIChDb21tYW5kUmV0dXJuUGFzc01vZGVsLk9wdE91dHB1dCk6CisgICAgICAg
IChDb21tYW5kUmV0dXJuUGFzc01vZGVsLk9wdE91dHB1dC5fX2luaXRfXyk6CisgICAgICAgIChD
b21tYW5kUmV0dXJuUGFzc01vZGVsLk9wdE91dHB1dC5nZXRfcmV0dXJuX3Zhcl90eXBlKToKKyAg
ICAgICAgKENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuT3B0T3V0cHV0LmdldF9vdXRwdXRfYXJndW1l
bnRfcHJlZml4KToKKyAgICAgICAgKENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuT3B0T3V0cHV0Lmdl
dF9vdXRwdXRfdG9fcmF3X2V4cHJlc3Npb24pOgorICAgICAgICAoQ29tbWFuZFJldHVyblBhc3NN
b2RlbC5PcHRPdXRwdXQuZ2V0X291dHB1dF9wYXJhbWV0ZXJfdHlwZSk6CisgICAgICAgIChDb21t
YW5kUmV0dXJuUGFzc01vZGVsLk9wdE91dHB1dC5nZXRfc2V0X3JldHVybl9jb25kaXRpb24pOgor
ICAgICAgICAoVHlwZU1vZGVsLkVudW0uZ2V0X29wdGlvbmFsLkVudW1PcHRpb25hbC5nZXRfY29t
bWFuZF9yZXR1cm5fcGFzc19tb2RlbCk6CisgICAgICAgIChUeXBlTW9kZWwuVmFsdWVUeXBlLlZh
bHVlT3B0aW9uYWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwpOgorICAgICAgICAoT3B0
T3V0cHV0KToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX2V2ZW50KToKKyAgICAgICAgKEdl
bmVyYXRvci5wcm9jZXNzX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9Db250ZW50U2Vh
cmNoVXRpbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlYXJjaFV0aWxzOjpidWls
ZE9iamVjdEZvclNlYXJjaE1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWFyY2hV
dGlsczo6c2VhcmNoSW5UZXh0QnlMaW5lcyk6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnRlbnRT
ZWFyY2hVdGlscy5oOgorICAgICAgICAoQ29udGVudFNlYXJjaFV0aWxzKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRT
Y3JpcHQ6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0OjpjYWxs
RnVuY3Rpb25Pbik6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGVP
bkNhbGxGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdDo6bWFrZUV2YWxD
YWxsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaDoKKyAgICAgICAgKElu
amVjdGVkU2NyaXB0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0U2NyaXB0U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uRGV0YWlscyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRl
T25DYWxsRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
ZGlkUGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJl
YWtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNs
ZWFyQnJlYWtEZXRhaWxzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJB
Z2VudC5oOgorICAgICAgICAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9i
amVjdEZvckNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZEFycmF5Rm9yQ29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRSZXNvdXJjZVRyZWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JG
cmFtZVRyZWUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25Pbik6CisKIDIwMTItMDMtMTEg
IFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQ1NTIGNvbnRlbnQgaXMgbm90IHNob3duIHdoZW4gc3R5bGVzaGVldCBpcyBsb2Fk
ZWQgd2l0aCBpbnZhbGlkIG1pbWUgdHlwZSBpbiBxdWlya3MgbW9kZS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggMGJjN2Ey
NTRiYzhiYjhkNTIxOWMxOTBhMzcwYzEzZTZhMWE2YzQyMC4uZDUzMzA0ZTY1OGQ3NmIyZjY1ZDc4
MTMwZGMzMDAwMWZiNjZiMzI0OSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKQEAgLTU5LDYgKzU5LDggQEAgVFlQRV9OQU1FX0ZJ
WF9NQVAgPSB7CiBUWVBFU19XSVRIX1JVTlRJTUVfQ0FTVF9TRVQgPSBmcm96ZW5zZXQoWyJSdW50
aW1lLlJlbW90ZU9iamVjdCIsICJSdW50aW1lLlByb3BlcnR5RGVzY3JpcHRvciIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZWJ1Z2dlci5GdW5jdGlvbkRldGFp
bHMiLCAiRGVidWdnZXIuQ2FsbEZyYW1lIl0pCiAKK1NUUklDVF9FTkFCTEVEX0RPTUFJTlMgPSBb
IkRlYnVnZ2VyIiwgIlBhZ2UiXQorCiAKIGNtZGxpbmVfcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9u
UGFyc2VyKCkKIGNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tb3V0cHV0X2hfZGlyIikKQEAg
LTU3OSw2ICs1ODEsMjggQEAgY2xhc3MgQ29tbWFuZFJldHVyblBhc3NNb2RlbDoKICAgICAgICAg
ZGVmIGdldF9zZXRfcmV0dXJuX2NvbmRpdGlvbigpOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUK
IAorICAgIGNsYXNzIE9wdE91dHB1dDoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhcl90
eXBlKToKKyAgICAgICAgICAgIHNlbGYudmFyX3R5cGUgPSB2YXJfdHlwZQorCisgICAgICAgIGRl
ZiBnZXRfcmV0dXJuX3Zhcl90eXBlKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICJUeXBlQnVp
bGRlcjo6T3B0T3V0cHV0PCVzPiIgJSBzZWxmLnZhcl90eXBlCisKKyAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKKyAgICAgICAg
ICAgIHJldHVybiAiJiIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRf
b3V0cHV0X3RvX3Jhd19leHByZXNzaW9uKCk6CisgICAgICAgICAgICByZXR1cm4gIiVzLmdldFZh
bHVlKCkiCisKKyAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFyYW1ldGVyX3R5cGUoc2VsZik6Cisg
ICAgICAgICAgICByZXR1cm4gIlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8JXM+KiIgJSBzZWxmLnZh
cl90eXBlCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3NldF9yZXR1
cm5fY29uZGl0aW9uKCk6CisgICAgICAgICAgICByZXR1cm4gIiVzLmlzQXNzaWduZWQoKSIKKwog
CiBjbGFzcyBUeXBlTW9kZWw6CiAgICAgY2xhc3MgUmVmUHRyQmFzZWQ6CkBAIC02MTcsOCArNjQx
LDcgQEAgY2xhc3MgVHlwZU1vZGVsOgogCiAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAog
ICAgICAgICAgICAgICAgIGRlZiBnZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpOgotICAg
ICAgICAgICAgICAgICAgICAjIEZJWE1FOiB0byBiZSByZXBsYWNlZCB3aXRoIE9wdE91dHB1dCBt
b2RlbC4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbW1hbmRSZXR1cm5QYXNzTW9kZWwu
QnlQb2ludGVyKGJhc2Vfc2VsZi50eXBlX25hbWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBDb21tYW5kUmV0dXJuUGFzc01vZGVsLk9wdE91dHB1dChiYXNlX3NlbGYudHlwZV9uYW1lKQog
CiAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgIGRlZiBnZXRf
aW5wdXRfcGFyYW1fdHlwZV90ZXh0KCk6CkBAIC02NjgsOCArNjkxLDcgQEAgY2xhc3MgVHlwZU1v
ZGVsOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICAgICAgICAgIGRlZiBnZXRf
Y29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbChzZWxmKToKLSAgICAgICAgICAgICAgICAjIEZJWE1F
OiB0byBiZSByZXBsYWNlZCB3aXRoIE9wdE91dHB1dCBtb2RlbC4KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gQ29tbWFuZFJldHVyblBhc3NNb2RlbC5CeVBvaW50ZXIoc2VsZi5iYXNlLnR5cGVfbmFt
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29tbWFuZFJldHVyblBhc3NNb2RlbC5PcHRPdXRw
dXQoc2VsZi5iYXNlLnR5cGVfbmFtZSkKIAogICAgICAgICAgICAgZGVmIGdldF9pbnB1dF9wYXJh
bV90eXBlX3RleHQoc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJjb25zdCAlcyogY29u
c3QiICUgc2VsZi5iYXNlLnR5cGVfbmFtZQpAQCAtMjIxMSwxMiArMjIzMyw0MCBAQCAkbWV0aG9k
cwogCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSA8UGxhdGZvcm1TdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsK
IAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIE9wdE91dHB1dCB7CitwdWJsaWM6CisgICAg
T3B0T3V0cHV0KCkgOiBtX2Fzc2lnbmVkKGZhbHNlKSB7IH0KKworICAgIHZvaWQgb3BlcmF0b3I9
KFQgdmFsdWUpCisgICAgeworICAgICAgICBtX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIG1fYXNz
aWduZWQgPSB0cnVlOworICAgIH0KKworICAgIGJvb2wgaXNBc3NpZ25lZCgpIHsgcmV0dXJuIG1f
YXNzaWduZWQ7IH0KKworICAgIFQgZ2V0VmFsdWUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
QXNzaWduZWQoKSk7CisgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBUIG1fdmFsdWU7CisgICAgYm9vbCBtX2Fzc2lnbmVkOworCisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoT3B0T3V0cHV0KTsKK307CisKKwogLy8gVGhpcyBjbGFzcyBwcm92aWRlcyAiVHJh
aXRzIiB0eXBlIGZvciB0aGUgaW5wdXQgdHlwZSBULiBJdCBpcyBwcm9ncmFtbWVkIHVzaW5nIEMr
KyB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbgogLy8gdGVjaG5pcXVlLiBCeSBkZWZhdWx0IGl0IHNp
bXBseSB0YWtlcyAiSXRlbVRyYWl0cyIgdHlwZSBmcm9tIFQsIGJ1dCBpdCBkb2Vzbid0IHdvcmsg
d2l0aCB0aGUgYmFzZSB0eXBlcy4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0yNjA3LDYgKzI2
NTcsOSBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBwcm9j
ZXNzX2V2ZW50KGpzb25fZXZlbnQsIGRvbWFpbl9uYW1lLCBmcm9udGVuZF9tZXRob2RfZGVjbGFy
YXRpb25fbGluZXMpOgogICAgICAgICBldmVudF9uYW1lID0ganNvbl9ldmVudFsibmFtZSJdCisK
KyAgICAgICAgc3RyaWN0X21vZGUgPSBkb21haW5fbmFtZSBpbiBTVFJJQ1RfRU5BQkxFRF9ET01B
SU5TCisKICAgICAgICAgcGFyYW1ldGVyX2xpc3QgPSBbXQogICAgICAgICBtZXRob2RfbGluZV9s
aXN0ID0gW10KICAgICAgICAgYmFja2VuZF9qc19ldmVudF9wYXJhbV9saXN0ID0gW10KQEAgLTI2
MzMsMTMgKzI2ODYsMjAgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICAgICAgICAgICAgICB0
eXBlX21vZGVsID0gdHlwZV9tb2RlbC5nZXRfb3B0aW9uYWwoKQogICAgICAgICAgICAgICAgICAg
ICByYXdfdHlwZV9tb2RlbCA9IHJhd190eXBlX21vZGVsLmdldF9vcHRpb25hbCgpCiAKLSAgICAg
ICAgICAgICAgICBhbm5vdGF0ZWRfdHlwZSA9IGdldF9hbm5vdGF0ZWRfdHlwZV90ZXh0KHJhd190
eXBlX21vZGVsLmdldF9pbnB1dF9wYXJhbV90eXBlX3RleHQoKSwgdHlwZV9tb2RlbC5nZXRfaW5w
dXRfcGFyYW1fdHlwZV90ZXh0KCkpCisgICAgICAgICAgICAgICAgaWYgc3RyaWN0X21vZGU6Cisg
ICAgICAgICAgICAgICAgICAgICMgQWxsIHR5cGVzIGFyZSBzdHJpY3QuCisgICAgICAgICAgICAg
ICAgICAgIGFubm90YXRlZF90eXBlID0gdHlwZV9tb2RlbC5nZXRfaW5wdXRfcGFyYW1fdHlwZV90
ZXh0KCkKKyAgICAgICAgICAgICAgICAgICAgbW9kZV90eXBlX2JpbmRpbmcgPSBwYXJhbV90eXBl
X2JpbmRpbmcKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIEFs
bCB0eXBlcyBhcmUgcmF3LgorICAgICAgICAgICAgICAgICAgICBhbm5vdGF0ZWRfdHlwZSA9IGdl
dF9hbm5vdGF0ZWRfdHlwZV90ZXh0KHJhd190eXBlX21vZGVsLmdldF9pbnB1dF9wYXJhbV90eXBl
X3RleHQoKSwgdHlwZV9tb2RlbC5nZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KCkpCisgICAgICAg
ICAgICAgICAgICAgIG1vZGVfdHlwZV9iaW5kaW5nID0gcmF3X3R5cGVfYmluZGluZwogCiAgICAg
ICAgICAgICAgICAgcGFyYW1ldGVyX2xpc3QuYXBwZW5kKCIlcyAlcyIgJSAoYW5ub3RhdGVkX3R5
cGUsIHBhcmFtZXRlcl9uYW1lKSkKIAogICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1bWVudCA9
IHJhd190eXBlX21vZGVsLmdldF9ldmVudF9zZXR0ZXJfZXhwcmVzc2lvbl9wYXR0ZXJuKCkgJSBw
YXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAgICAgIGlmIHJhd190eXBlX2JpbmRpbmcuZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgICAgICAgICAgc2V0
dGVyX2FyZ3VtZW50ID0gcmF3X3R5cGVfYmluZGluZy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Np
b25fcGF0dGVybigpICUgc2V0dGVyX2FyZ3VtZW50CisgICAgICAgICAgICAgICAgaWYgbW9kZV90
eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAg
ICAgICAgICAgICAgICAgc2V0dGVyX2FyZ3VtZW50ID0gbW9kZV90eXBlX2JpbmRpbmcuZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKSAlIHNldHRlcl9hcmd1bWVudAogCiAgICAg
ICAgICAgICAgICAgc2V0dGVyX2NvZGUgPSAiICAgIHBhcmFtc09iamVjdC0+c2V0JXMoXCIlc1wi
LCAlcyk7XG4iICUgKHNldHRlcl90eXBlLCBwYXJhbWV0ZXJfbmFtZSwgc2V0dGVyX2FyZ3VtZW50
KQogICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgpAQCAtMjY2Miw2ICsyNzIyLDkgQEAgY2xh
c3MgR2VuZXJhdG9yOgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgcHJvY2Vzc19jb21tYW5k
KGpzb25fY29tbWFuZCwgZG9tYWluX25hbWUsIGFnZW50X2ZpZWxkX25hbWUsIGFnZW50X2ludGVy
ZmFjZV9uYW1lKToKICAgICAgICAganNvbl9jb21tYW5kX25hbWUgPSBqc29uX2NvbW1hbmRbIm5h
bWUiXQorCisgICAgICAgIHN0cmljdF9tb2RlID0gZG9tYWluX25hbWUgaW4gU1RSSUNUX0VOQUJM
RURfRE9NQUlOUworCiAgICAgICAgIEdlbmVyYXRvci5tZXRob2RfbmFtZV9lbnVtX2xpc3QuYXBw
ZW5kKCIgICAgICAgIGslc18lc0NtZCwiICUgKGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRbIm5h
bWUiXSkpCiAgICAgICAgIEdlbmVyYXRvci5tZXRob2RfaGFuZGxlcl9saXN0LmFwcGVuZCgiICAg
ICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6JXNfJXMsIiAlIChkb21h
aW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUpKQogICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9t
ZXRob2RfZGVjbGFyYXRpb25fbGlzdC5hcHBlbmQoIiAgICB2b2lkICVzXyVzKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsiICUgKGRvbWFpbl9uYW1l
LCBqc29uX2NvbW1hbmRfbmFtZSkpCkBAIC0yNzUwLDI0ICsyODEzLDQyIEBAIGNsYXNzIEdlbmVy
YXRvcjoKICAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKICAgICAgICAgICAgICAgICAgICAg
dHlwZV9tb2RlbCA9IHR5cGVfbW9kZWwuZ2V0X29wdGlvbmFsKCkKIAotICAgICAgICAgICAgICAg
IHJhd190eXBlX21vZGVsID0gcmV0dXJuX3R5cGVfYmluZGluZy5nZXRfdHlwZV9tb2RlbCgpCi0g
ICAgICAgICAgICAgICAgaWYgb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIHJhd190eXBl
X21vZGVsID0gcmF3X3R5cGVfbW9kZWwuZ2V0X29wdGlvbmFsKCkKLQotICAgICAgICAgICAgICAg
IGNvZGUgPSAiICAgICVzIG91dF8lcyA9ICVzO1xuIiAlIChyYXdfdHlwZS5nZXRfcmF3X3R5cGVf
bW9kZWwoKS5nZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9yZXR1cm5fdmFyX3R5
cGUoKSwganNvbl9yZXR1cm5fbmFtZSwgaW5pdGlhbGl6ZXIpCi0gICAgICAgICAgICAgICAgcGFy
YW0gPSAiLCAlc291dF8lcyIgJSAocmF3X3R5cGUuZ2V0X291dHB1dF9wYXNzX21vZGVsKCkuZ2V0
X2FyZ3VtZW50X3ByZWZpeCgpLCBqc29uX3JldHVybl9uYW1lKQotICAgICAgICAgICAgICAgIGNv
b2sgPSAiICAgICAgICByZXN1bHQtPnNldCVzKFwiJXNcIiwgb3V0XyVzKTtcbiIgJSAoc2V0dGVy
X3R5cGUsIGpzb25fcmV0dXJuX25hbWUsIGpzb25fcmV0dXJuX25hbWUpCi0gICAgICAgICAgICAg
ICAgaWYgb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgICMgRklYTUU6IHN1cHBvcnQgb3B0
aW9uYWwgcHJvcGVybHkuIFByb2JhYmx5IGFuIGFkZGl0aW9uYWwgb3V0cHV0IHBhcmFtZXRlciBz
aG91bGQgYmUgaW4gZWFjaCBjYXNlLgotICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiByZWZh
Y3RvciB0aGlzIGNvbmRpdGlvbjsgaXQncyBhIGhhY2sgbm93LgotICAgICAgICAgICAgICAgICAg
ICB2YXJfdHlwZV90ZXh0ID0gcmF3X3R5cGUuZ2V0X3Jhd190eXBlX21vZGVsKCkuZ2V0X2NvbW1h
bmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBlKCkKLSAgICAgICAgICAg
ICAgICAgICAgaWYgdmFyX3R5cGVfdGV4dCA9PSAiYm9vbCIgb3IgdmFyX3R5cGVfdGV4dC5zdGFy
dHN3aXRoKCJSZWZQdHI8Iik6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb29rID0gKCIgICAg
ICAgIGlmIChvdXRfJXMpXG4gICAgIiAlIGpzb25fcmV0dXJuX25hbWUpICsgY29vawotICAgICAg
ICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgY29vayA9ICIgICAg
ICAgIC8vIEZJWE1FOiBzdXBwb3J0IG9wdGlvbmFsIGhlcmUuXG4iICsgY29vaworICAgICAgICAg
ICAgICAgIGlmIHN0cmljdF9tb2RlOgorICAgICAgICAgICAgICAgICAgICAjIEFsbCB0eXBlcyBh
cmUgc3RyaWN0LiBWYWx1ZXMgZG8gbm90IGhhdmUgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICAg
ICAgICAgICAgIGNvZGUgPSAiICAgICVzIG91dF8lcztcbiIgJSAodHlwZV9tb2RlbC5nZXRfY29t
bWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9yZXR1cm5fdmFyX3R5cGUoKSwganNvbl9yZXR1
cm5fbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgcGFyYW0gPSAiLCAlc291dF8lcyIgJSAodHlw
ZV9tb2RlbC5nZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9vdXRwdXRfYXJndW1l
bnRfcHJlZml4KCksIGpzb25fcmV0dXJuX25hbWUpCisgICAgICAgICAgICAgICAgICAgIHZhcl9u
YW1lID0gIm91dF8lcyIgJSBqc29uX3JldHVybl9uYW1lCisgICAgICAgICAgICAgICAgICAgIHNl
dHRlcl9hcmd1bWVudCA9IHR5cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwo
KS5nZXRfb3V0cHV0X3RvX3Jhd19leHByZXNzaW9uKCkgJSB2YXJfbmFtZQorICAgICAgICAgICAg
ICAgICAgICBpZiByZXR1cm5fdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lv
bl9wYXR0ZXJuKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJfYXJndW1lbnQgPSBy
ZXR1cm5fdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCkg
JSBzZXR0ZXJfYXJndW1lbnQKKworICAgICAgICAgICAgICAgICAgICBjb29rID0gIiAgICAgICAg
cmVzdWx0LT5zZXQlcyhcIiVzXCIsICVzKTtcbiIgJSAoc2V0dGVyX3R5cGUsIGpzb25fcmV0dXJu
X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZXR0ZXJfYXJndW1lbnQpCisKKyAgICAgICAgICAgICAgICAg
ICAgc2V0X2NvbmRpdGlvbl9wYXR0ZXJuID0gdHlwZV9tb2RlbC5nZXRfY29tbWFuZF9yZXR1cm5f
cGFzc19tb2RlbCgpLmdldF9zZXRfcmV0dXJuX2NvbmRpdGlvbigpCisgICAgICAgICAgICAgICAg
ICAgIGlmIHNldF9jb25kaXRpb25fcGF0dGVybjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
b2sgPSAoIiAgICAgICAgaWYgKCVzKVxuICAgICIgJSAoc2V0X2NvbmRpdGlvbl9wYXR0ZXJuICUg
dmFyX25hbWUpKSArIGNvb2sKKyAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSB0
eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X291dHB1dF9wYXJh
bWV0ZXJfdHlwZSgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg
IyBBbGwgdHlwZXMgYXJlIHJhdy4gVmFsdWVzIGFsd2F5cyBoYXZlIGRlZmF1bHQgdmFsdWVzLgor
ICAgICAgICAgICAgICAgICAgICByYXdfdHlwZV9tb2RlbCA9IHJldHVybl90eXBlX2JpbmRpbmcu
Z2V0X3R5cGVfbW9kZWwoKQorICAgICAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJhd190eXBlX21vZGVsID0gcmF3X3R5cGVfbW9kZWwuZ2V0X29w
dGlvbmFsKCkKKworICAgICAgICAgICAgICAgICAgICBjb2RlID0gIiAgICAlcyBvdXRfJXMgPSAl
cztcbiIgJSAocmF3X3R5cGUuZ2V0X3Jhd190eXBlX21vZGVsKCkuZ2V0X2NvbW1hbmRfcmV0dXJu
X3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBlKCksIGpzb25fcmV0dXJuX25hbWUsIGlu
aXRpYWxpemVyKQorICAgICAgICAgICAgICAgICAgICBwYXJhbSA9ICIsICVzb3V0XyVzIiAlIChy
YXdfdHlwZS5nZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKS5nZXRfYXJndW1lbnRfcHJlZml4KCksIGpz
b25fcmV0dXJuX25hbWUpCisgICAgICAgICAgICAgICAgICAgIGNvb2sgPSAiICAgICAgICByZXN1
bHQtPnNldCVzKFwiJXNcIiwgb3V0XyVzKTtcbiIgJSAoc2V0dGVyX3R5cGUsIGpzb25fcmV0dXJu
X25hbWUsIGpzb25fcmV0dXJuX25hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFs
OgorICAgICAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogc3VwcG9ydCBvcHRpb25hbCBwcm9w
ZXJseS4gUHJvYmFibHkgYW4gYWRkaXRpb25hbCBvdXRwdXQgcGFyYW1ldGVyIHNob3VsZCBiZSBp
biBlYWNoIGNhc2UuCisgICAgICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiByZWZhY3RvciB0
aGlzIGNvbmRpdGlvbjsgaXQncyBhIGhhY2sgbm93LgorICAgICAgICAgICAgICAgICAgICAgICAg
dmFyX3R5cGVfdGV4dCA9IHJhd190eXBlLmdldF9yYXdfdHlwZV9tb2RlbCgpLmdldF9jb21tYW5k
X3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X3JldHVybl92YXJfdHlwZSgpCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiB2YXJfdHlwZV90ZXh0ID09ICJib29sIiBvciB2YXJfdHlwZV90ZXh0LnN0
YXJ0c3dpdGgoIlJlZlB0cjwiKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rID0g
KCIgICAgICAgIGlmIChvdXRfJXMpXG4gICAgIiAlIGpzb25fcmV0dXJuX25hbWUpICsgY29vawor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb29rID0gIiAgICAgICAgLy8gRklYTUU6IHN1cHBvcnQgb3B0aW9uYWwgaGVyZS5cbiIgKyBj
b29rCiAKLSAgICAgICAgICAgICAgICBhbm5vdGF0ZWRfdHlwZSA9IGdldF9hbm5vdGF0ZWRfdHlw
ZV90ZXh0KHJhd190eXBlLmdldF9yYXdfdHlwZV9tb2RlbCgpLmdldF9jb21tYW5kX3JldHVybl9w
YXNzX21vZGVsKCkuZ2V0X3JldHVybl92YXJfdHlwZSgpICsgcmF3X3R5cGUuZ2V0X291dHB1dF9w
YXNzX21vZGVsKCkuZ2V0X3BhcmFtZXRlcl90eXBlX3N1ZmZpeCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9tb2RlbC5nZXRf
Y29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9vdXRwdXRfcGFyYW1ldGVyX3R5cGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5cGVf
dGV4dChyYXdfdHlwZS5nZXRfcmF3X3R5cGVfbW9kZWwoKS5nZXRfY29tbWFuZF9yZXR1cm5fcGFz
c19tb2RlbCgpLmdldF9yZXR1cm5fdmFyX3R5cGUoKSArIHJhd190eXBlLmdldF9vdXRwdXRfcGFz
c19tb2RlbCgpLmdldF9wYXJhbWV0ZXJfdHlwZV9zdWZmaXgoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlX21vZGVsLmdl
dF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X291dHB1dF9wYXJhbWV0ZXJfdHlwZSgp
KQogCiAgICAgICAgICAgICAgICAgcGFyYW1fbmFtZSA9ICJvdXRfJXMiICUganNvbl9yZXR1cm5f
bmFtZQogICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxzLmNwcAppbmRleCBkMGUxMjhiMjM4MzhlZjA5NDJj
Yjc2ODQ4ODRhZTljOWVjYTIzMTU4Li45MjgxODEzN2FkZmRmMTI2MTNjMjhiMGUxNjE3YmJkNDQw
NzI3NGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJj
aFV0aWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0
aWxzLmNwcApAQCAtOTMsMTMgKzkzLDExIEBAIHN0YXRpYyBWZWN0b3I8cGFpcjxpbnQsIFN0cmlu
Zz4gPiBnZXRSZWd1bGFyRXhwcmVzc2lvbk1hdGNoZXNCeUxpbmVzKGNvbnN0IFJlZ3VsCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBi
dWlsZE9iamVjdEZvclNlYXJjaE1hdGNoKGludCBsaW5lTnVtYmVyLCBTdHJpbmcgbGluZUNvbnRl
bnQpCitzdGF0aWMgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoTWF0Y2g+IGJ1
aWxkT2JqZWN0Rm9yU2VhcmNoTWF0Y2goaW50IGxpbmVOdW1iZXIsIFN0cmluZyBsaW5lQ29udGVu
dCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgbGluZU51
bWJlcik7Ci0gICAgcmVzdWx0LT5zZXRTdHJpbmcoImxpbmVDb250ZW50IiwgbGluZUNvbnRlbnQp
OwotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gVHlwZUJ1aWxkZXI6OlBhZ2U6OlNl
YXJjaE1hdGNoOjpjcmVhdGUoKQorICAgICAgICAuc2V0TGluZU51bWJlcihsaW5lTnVtYmVyKQor
ICAgICAgICAuc2V0TGluZUNvbnRlbnQobGluZUNvbnRlbnQpOwogfQogCiBSZWd1bGFyRXhwcmVz
c2lvbiBjcmVhdGVTZWFyY2hSZWdleChjb25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sIGNhc2VTZW5z
aXRpdmUsIGJvb2wgaXNSZWdleCkKQEAgLTEyNywxNSArMTI1LDE1IEBAIGludCBjb3VudFJlZ3Vs
YXJFeHByZXNzaW9uTWF0Y2hlcyhjb25zdCBSZWd1bGFyRXhwcmVzc2lvbiYgcmVnZXgsIGNvbnN0
IFN0cmluZyYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBzZWFyY2hJblRleHRCeUxpbmVzKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5n
JiBxdWVyeSwgY29uc3QgYm9vbCBjYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sIGlzUmVnZXgpCitQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoTWF0
Y2g+ID4gc2VhcmNoSW5UZXh0QnlMaW5lcyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmlu
ZyYgcXVlcnksIGNvbnN0IGJvb2wgY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCBpc1JlZ2V4KQog
ewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcmVzdWx0ID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6
OlNlYXJjaE1hdGNoPiA+IHJlc3VsdCA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6
UGFnZTo6U2VhcmNoTWF0Y2g+OjpjcmVhdGUoKTsKIAogICAgIFJlZ3VsYXJFeHByZXNzaW9uIHJl
Z2V4ID0gQ29udGVudFNlYXJjaFV0aWxzOjpjcmVhdGVTZWFyY2hSZWdleChxdWVyeSwgY2FzZVNl
bnNpdGl2ZSwgaXNSZWdleCk7CiAgICAgVmVjdG9yPHBhaXI8aW50LCBTdHJpbmc+ID4gbWF0Y2hl
cyA9IGdldFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlc0J5TGluZXMocmVnZXgsIHRleHQpOwogCiAg
ICAgZm9yIChWZWN0b3I8cGFpcjxpbnQsIFN0cmluZz4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
YXRjaGVzLmJlZ2luKCk7IGl0ICE9IG1hdGNoZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIHJlc3Vs
dC0+cHVzaFZhbHVlKGJ1aWxkT2JqZWN0Rm9yU2VhcmNoTWF0Y2goaXQtPmZpcnN0LCBpdC0+c2Vj
b25kKSk7CisgICAgICAgIHJlc3VsdC0+YWRkSXRlbShidWlsZE9iamVjdEZvclNlYXJjaE1hdGNo
KGl0LT5maXJzdCwgaXQtPnNlY29uZCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbHMuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbHMuaAppbmRleCBmNGIxZWRh
MmQzNWRhZThkYjE5MTllZDJmM2NlMDQ5MmI3YTZjMGRjLi5kMmMyNzI1MzY0MGFjN2QyZjdhZjQ3
YjZjNWRmMDYzYjAwOWRiZmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
Q29udGVudFNlYXJjaFV0aWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnRl
bnRTZWFyY2hVdGlscy5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaWZuZGVmIENvbnRlbnRTZWFyY2hV
dGlsc19oCiAjZGVmaW5lIENvbnRlbnRTZWFyY2hVdGlsc19oCiAKKyNpbmNsdWRlICJJbnNwZWN0
b3JUeXBlQnVpbGRlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CkBAIC00Miw3ICs0Myw3IEBAIG5hbWVzcGFjZSBDb250ZW50U2VhcmNo
VXRpbHMgewogCiBSZWd1bGFyRXhwcmVzc2lvbiBjcmVhdGVTZWFyY2hSZWdleChjb25zdCBTdHJp
bmcmIHF1ZXJ5LCBib29sIGNhc2VTZW5zaXRpdmUsIGJvb2wgaXNSZWdleCk7CiBpbnQgY291bnRS
ZWd1bGFyRXhwcmVzc2lvbk1hdGNoZXMoY29uc3QgUmVndWxhckV4cHJlc3Npb24mLCBjb25zdCBT
dHJpbmcmKTsKLVBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHNlYXJjaEluVGV4dEJ5TGluZXMo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sIGNhc2VT
ZW5zaXRpdmUsIGNvbnN0IGJvb2wgaXNSZWdleCk7CitQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpB
cnJheTxUeXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoTWF0Y2g+ID4gc2VhcmNoSW5UZXh0QnlMaW5l
cyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wgY2Fz
ZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCBpc1JlZ2V4KTsKIAogU3RyaW5nIGZpbmRTb3VyY2VVUkwo
Y29uc3QgU3RyaW5nJiBjb250ZW50KTsKIFN0cmluZyBmaW5kU291cmNlTWFwVVJMKGNvbnN0IFN0
cmluZyYgY29udGVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
LmNwcAppbmRleCAxNzMyYTdlZjNkMWNjMjdlODgyNmFiODE0ZGIyZjI0YzI5NDc3NjA4Li4zZjUw
MGQ2OGY1ZmFiMjhmMjE0Yjk2ZmUzM2Y2ZWZkZmVmMGZhMGY4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgSW5qZWN0ZWRT
Y3JpcHQ6OkluamVjdGVkU2NyaXB0KFNjcmlwdE9iamVjdCBpbmplY3RlZFNjcmlwdE9iamVjdCwg
SW5zcGVjdGVkU3RhdGUKIHsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGUoRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0
cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVy
bkJ5VmFsdWUsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiByZXN1bHQsIGJvb2wqIHdhc1Rocm93
bikKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlKEVycm9yU3RyaW5nKiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBi
b29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZhbHVlLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiogcmVzdWx0LCBUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGJvb2w+KiB3YXNU
aHJvd24pCiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1faW5qZWN0ZWRTY3Jp
cHRPYmplY3QsICJldmFsdWF0ZSIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGV4cHJl
c3Npb24pOwpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpldmFsdWF0ZShF
cnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbgogICAgIG1h
a2VFdmFsQ2FsbChlcnJvclN0cmluZywgZnVuY3Rpb24sIHJlc3VsdCwgd2FzVGhyb3duKTsKIH0K
IAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcqIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29sIHJldHVybkJ5VmFsdWUsIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+KiByZXN1bHQsIGJvb2wqIHdhc1Rocm93bikKK3ZvaWQgSW5qZWN0ZWRTY3Jp
cHQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIGFyZ3Vt
ZW50cywgYm9vbCByZXR1cm5CeVZhbHVlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0
LCBUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pCiB7CiAgICAgU2NyaXB0
RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1faW5qZWN0ZWRTY3JpcHRPYmplY3QsICJjYWxsRnVuY3Rp
b25PbiIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG9iamVjdElkKTsKQEAgLTgyLDcg
KzgyLDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamUKICAgICBtYWtlRXZhbENhbGwoZXJyb3JT
dHJpbmcsIGZ1bmN0aW9uLCByZXN1bHQsIHdhc1Rocm93bik7CiB9CiAKLXZvaWQgSW5qZWN0ZWRT
Y3JpcHQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25z
dCBTY3JpcHRWYWx1ZSYgY2FsbEZyYW1lcywgY29uc3QgU3RyaW5nJiBjYWxsRnJhbWVJZCwgY29u
c3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBib29sIGlu
Y2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZhbHVlLCBSZWZQdHI8UmVtb3RlT2Jq
ZWN0PiogcmVzdWx0LCBib29sKiB3YXNUaHJvd24pCit2b2lkIEluamVjdGVkU2NyaXB0OjpldmFs
dWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU2NyaXB0VmFs
dWUmIGNhbGxGcmFtZXMsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYg
ZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFu
ZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgUmVmUHRyPFJlbW90ZU9iamVjdD4qIHJlc3Vs
dCwgVHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKQogewogICAgIFNjcmlw
dEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX2luamVjdGVkU2NyaXB0T2JqZWN0LCAiZXZhbHVhdGVP
bkNhbGxGcmFtZSIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxGcmFtZXMpOwpA
QCAtMjU4LDcgKzI1OCw3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6Om1ha2VDYWxsKFNjcmlwdEZ1
bmN0aW9uQ2FsbCYgZnVuY3Rpb24sIFJlZlB0cjxJbnNwZWN0b3JWYWx1CiAgICAgICAgICpyZXN1
bHQgPSBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZSgiRXhjZXB0aW9uIHdoaWxlIG1ha2luZyBhIGNh
bGwuIik7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6Om1ha2VFdmFsQ2FsbChFcnJvclN0cmlu
ZyogZXJyb3JTdHJpbmcsIFNjcmlwdEZ1bmN0aW9uQ2FsbCYgZnVuY3Rpb24sIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+KiBvYmplY3RSZXN1bHQsIGJvb2wqIHdhc1Rocm93bikKK3ZvaWQgSW5qZWN0
ZWRTY3JpcHQ6Om1ha2VFdmFsQ2FsbChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFNjcmlwdEZ1
bmN0aW9uQ2FsbCYgZnVuY3Rpb24sIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvYmplY3RSZXN1
bHQsIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93bikKIHsKICAgICBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdDsKICAgICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3Vs
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQu
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCmluZGV4IDg0ZDlh
NzhlZDM2ZjBjOGE1ODU2YWM4MDUyNWM4NTEyZGM1NzZhNjcuLmZhZDE2NDU2NTkzZWFmMWZmM2Vh
Y2YwNDc1MDExMmViMjkyYTg1NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdC5oCkBAIC02NCwxNCArNjQsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
Ym9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksCiAgICAgICAgICAgICAgICAgICBib29sIHJldHVy
bkJ5VmFsdWUsCiAgICAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVz
dWx0LAotICAgICAgICAgICAgICAgICAgYm9vbCogd2FzVGhyb3duKTsKKyAgICAgICAgICAgICAg
ICAgIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93bik7CiAgICAgdm9pZCBj
YWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyosCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIG9iamVjdElkLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBleHByZXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBhcmd1
bWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJldHVybkJ5VmFsdWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCogd2FzVGhyb3duKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93bik7CiAgICAgdm9p
ZCBldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU2NyaXB0VmFsdWUmIGNhbGxGcmFtZXMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsCkBAIC04MCw3ICs4MCw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbmNsdWRlQ29tbWFu
ZExpbmVBUEksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmV0dXJuQnlWYWx1
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+KiByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wqIHdhc1Rocm93bik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVCdWls
ZGVyOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93bik7CiAgICAgdm9pZCBnZXRGdW5jdGlvbkRl
dGFpbHMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxUeXBl
QnVpbGRlcjo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4qIHJlc3VsdCk7CiAgICAgdm9pZCBn
ZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9vbCBv
d25Qcm9wZXJ0aWVzLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiByZXN1bHQpOwogICAgIE5vZGUq
IG5vZGVGb3JPYmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVjdElkKTsKQEAgLTEwNSw3ICsxMDUs
NyBAQCBwcml2YXRlOgogICAgIGJvb2wgY2FuQWNjZXNzSW5zcGVjdGVkV2luZG93KCkgY29uc3Q7
CiAgICAgU2NyaXB0VmFsdWUgY2FsbEZ1bmN0aW9uV2l0aEV2YWxFbmFibGVkKFNjcmlwdEZ1bmN0
aW9uQ2FsbCYsIGJvb2wmIGhhZEV4Y2VwdGlvbikgY29uc3Q7CiAgICAgdm9pZCBtYWtlQ2FsbChT
Y3JpcHRGdW5jdGlvbkNhbGwmLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOwotICAg
IHZvaWQgbWFrZUV2YWxDYWxsKEVycm9yU3RyaW5nKiwgU2NyaXB0RnVuY3Rpb25DYWxsJiwgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCwgYm9vbCogd2FzVGhyb3duKTsKKyAgICB2b2lk
IG1ha2VFdmFsQ2FsbChFcnJvclN0cmluZyosIFNjcmlwdEZ1bmN0aW9uQ2FsbCYsIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+KiByZXN1bHQsIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4qIHdh
c1Rocm93bik7CiAgICAgU2NyaXB0VmFsdWUgbm9kZUFzU2NyaXB0VmFsdWUoTm9kZSopOwogCiAg
ICAgU2NyaXB0T2JqZWN0IG1faW5qZWN0ZWRTY3JpcHRPYmplY3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKaW5kZXgg
OWJhNmJjOTM4OTExM2ZiZjBhZDU5MTBiNmEzM2EzMDcxMWNkMDA1OS4uY2Q4YzczYTQwNzVmMTY1
OWMwYjNjYmVjMzQ3MjU3M2ZhMGEzYTUxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcApAQCAtMzgsNiArMzgsNyBA
QAogI2luY2x1ZGUgIkluc3BlY3RvckFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdl
bnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yRnJvbnRlbmQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5o
IgpAQCAtNTYsMTAgKzU3LDYgQEAgZW51bSBET01CcmVha3BvaW50VHlwZSB7CiBzdGF0aWMgY29u
c3QgY2hhciogY29uc3QgbGlzdGVuZXJFdmVudENhdGVnb3J5VHlwZSA9ICJsaXN0ZW5lcjoiOwog
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGluc3RydW1lbnRhdGlvbkV2ZW50Q2F0ZWdvcnlUeXBl
ID0gImluc3RydW1lbnRhdGlvbjoiOwogCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZG9tTmF0
aXZlQnJlYWtwb2ludFR5cGUgPSAiRE9NIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBldmVu
dExpc3RlbmVyTmF0aXZlQnJlYWtwb2ludFR5cGUgPSAiRXZlbnRMaXN0ZW5lciI7Ci1zdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgeGhyTmF0aXZlQnJlYWtwb2ludFR5cGUgPSAiWEhSIjsKLQogY29u
c3QgdWludDMyX3QgaW5oZXJpdGFibGVET01CcmVha3BvaW50VHlwZXNNYXNrID0gKDEgPDwgU3Vi
dHJlZU1vZGlmaWVkKTsKIGNvbnN0IGludCBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVTaGlmdCA9
IDE2OwogCkBAIC0xNzUsNyArMTcyLDcgQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50
OjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKE5vZGUqIG5vZGUpCiAgICAgaWYgKGhhc0JyZWFrcG9p
bnQobm9kZSwgQXR0cmlidXRlTW9kaWZpZWQpKSB7CiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIGRl
c2NyaXB0aW9uRm9yRE9NRXZlbnQobm9kZSwgQXR0cmlidXRlTW9kaWZpZWQsIGZhbHNlLCBldmVu
dERhdGEuZ2V0KCkpOwotICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShkb21O
YXRpdmVCcmVha3BvaW50VHlwZSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIG1fZGVi
dWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6UmVh
c29uOjpET00sIGV2ZW50RGF0YS5yZWxlYXNlKCkpOwogICAgIH0KIH0KIApAQCAtMjc1LDcgKzI3
Miw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbEluc2VydERPTU5vZGUo
Tm9kZSosIE5vZGUqIHBhcmVudCkKICAgICBpZiAoaGFzQnJlYWtwb2ludChwYXJlbnQsIFN1YnRy
ZWVNb2RpZmllZCkpIHsKICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRh
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgZGVzY3JpcHRpb25Gb3JET01F
dmVudChwYXJlbnQsIFN1YnRyZWVNb2RpZmllZCwgdHJ1ZSwgZXZlbnREYXRhLmdldCgpKTsKLSAg
ICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oZG9tTmF0aXZlQnJlYWtwb2ludFR5
cGUsIGV2ZW50RGF0YS5yZWxlYXNlKCkpOworICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFr
UHJvZ3JhbShJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OlJlYXNvbjo6RE9NLCBldmVudERh
dGEucmVsZWFzZSgpKTsKICAgICB9CiB9CiAKQEAgLTI4NSwxMSArMjgyLDExIEBAIHZvaWQgSW5z
cGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKICAg
ICBpZiAoaGFzQnJlYWtwb2ludChub2RlLCBOb2RlUmVtb3ZlZCkpIHsKICAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICAgZGVzY3JpcHRpb25Gb3JET01FdmVudChub2RlLCBOb2RlUmVtb3ZlZCwgZmFsc2Us
IGV2ZW50RGF0YS5nZXQoKSk7Ci0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFt
KGRvbU5hdGl2ZUJyZWFrcG9pbnRUeXBlLCBldmVudERhdGEucmVsZWFzZSgpKTsKKyAgICAgICAg
bV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2Vy
OjpSZWFzb246OkRPTSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CiAgICAgfSBlbHNlIGlmIChwYXJl
bnROb2RlICYmIGhhc0JyZWFrcG9pbnQocGFyZW50Tm9kZSwgU3VidHJlZU1vZGlmaWVkKSkgewog
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KG5vZGUsIFN1YnRy
ZWVNb2RpZmllZCwgZmFsc2UsIGV2ZW50RGF0YS5nZXQoKSk7Ci0gICAgICAgIG1fZGVidWdnZXJB
Z2VudC0+YnJlYWtQcm9ncmFtKGRvbU5hdGl2ZUJyZWFrcG9pbnRUeXBlLCBldmVudERhdGEucmVs
ZWFzZSgpKTsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVjdG9y
RnJvbnRlbmQ6OkRlYnVnZ2VyOjpSZWFzb246OkRPTSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CiAg
ICAgfQogfQogCkBAIC0yOTgsNyArMjk1LDcgQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFn
ZW50Ojp3aWxsTW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVtZW50KQogICAgIGlmIChoYXNCcmVh
a3BvaW50KGVsZW1lbnQsIEF0dHJpYnV0ZU1vZGlmaWVkKSkgewogICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KGVsZW1lbnQsIEF0dHJpYnV0ZU1vZGlmaWVkLCBm
YWxzZSwgZXZlbnREYXRhLmdldCgpKTsKLSAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1By
b2dyYW0oZG9tTmF0aXZlQnJlYWtwb2ludFR5cGUsIGV2ZW50RGF0YS5yZWxlYXNlKCkpOworICAg
ICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JGcm9udGVuZDo6RGVi
dWdnZXI6OlJlYXNvbjo6RE9NLCBldmVudERhdGEucmVsZWFzZSgpKTsKICAgICB9CiB9CiAKQEAg
LTM2Nyw5ICszNjQsOSBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnBhdXNlT25O
YXRpdmVFdmVudElmTmVlZGVkKGJvb2wgaXNET01FdmVudCwgY29ucwogICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
ZXZlbnREYXRhLT5zZXRTdHJpbmcoImV2ZW50TmFtZSIsIGZ1bGxFdmVudE5hbWUpOwogICAgIGlm
IChzeW5jaHJvbm91cykKLSAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oZXZl
bnRMaXN0ZW5lck5hdGl2ZUJyZWFrcG9pbnRUeXBlLCBldmVudERhdGEucmVsZWFzZSgpKTsKKyAg
ICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yRnJvbnRlbmQ6OkRl
YnVnZ2VyOjpSZWFzb246OkV2ZW50TGlzdGVuZXIsIGV2ZW50RGF0YS5yZWxlYXNlKCkpOwogICAg
IGVsc2UKLSAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVt
ZW50KGV2ZW50TGlzdGVuZXJOYXRpdmVCcmVha3BvaW50VHlwZSwgZXZlbnREYXRhLnJlbGVhc2Uo
KSk7CisgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVu
dChJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OlJlYXNvbjo6RXZlbnRMaXN0ZW5lciwgZXZl
bnREYXRhLnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6
c2V0WEhSQnJlYWtwb2ludChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgdXJsKQpAQCAtNDE3
LDcgKzQxNCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbFNlbmRYTUxI
dHRwUmVxdWVzdChjb25zdCBTdHJpbmcmIHVybCkKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGV2ZW50RGF0YS0+
c2V0U3RyaW5nKCJicmVha3BvaW50VVJMIiwgYnJlYWtwb2ludFVSTCk7CiAgICAgZXZlbnREYXRh
LT5zZXRTdHJpbmcoInVybCIsIHVybCk7Ci0gICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dy
YW0oeGhyTmF0aXZlQnJlYWtwb2ludFR5cGUsIGV2ZW50RGF0YS5yZWxlYXNlKCkpOworICAgIG1f
ZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6
UmVhc29uOjpYSFIsIGV2ZW50RGF0YS5yZWxlYXNlKCkpOwogfQogCiB2b2lkIEluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQ6OmNsZWFyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCA2NjA5ZTY0ZWQ2ZDE1MWQwODMxNGY5
MGFlZWIyYjQxNTA4YWMyODgwLi5hMzNkYTgyYTM0ZDZlYWY1NmM0ZTRjZmFjNGYxNDMxODJmYmNl
YzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVn
Z2VyQWdlbnQuY3BwCkBAIC0yMTQsMTAgKzIxNCw5IEBAIHN0YXRpYyBib29sIG1hdGNoZXMoY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcGF0dGVybiwgYm9vbCBpc1JlZ2V4KQogICAg
IHJldHVybiB1cmwgPT0gcGF0dGVybjsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbGluZU51
bWJlciwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbFVSTCwgY29uc3QgU3RyaW5nKiBjb25z
dCBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIGNvbnN0IG9wdGlvbmFsQ29sdW1uTnVtYmVy
LCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsQ29uZGl0aW9uLCBTdHJpbmcqIG91dEJyZWFr
cG9pbnRJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgbG9jYXRpb25zUmF3KQordm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcqIGVycm9y
U3RyaW5nLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbFVSTCwg
Y29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIGNvbnN0IG9w
dGlvbmFsQ29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsQ29uZGl0aW9u
LCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCogb3V0QnJlYWtwb2ludElkLCBS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+
ID4mIGxvY2F0aW9ucykKIHsKLSAgICBSZWZQdHI8QXJyYXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2Vy
OjpMb2NhdGlvbj4gPiBsb2NhdGlvbnMgPSBBcnJheTxUeXBlQnVpbGRlcjo6RGVidWdnZXI6Okxv
Y2F0aW9uPjo6Y3JlYXRlKCk7Ci0gICAgbG9jYXRpb25zUmF3ID0gbG9jYXRpb25zOworICAgIGxv
Y2F0aW9ucyA9IEFycmF5PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+OjpjcmVhdGUo
KTsKICAgICBpZiAoIW9wdGlvbmFsVVJMID09ICFvcHRpb25hbFVSTFJlZ2V4KSB7CiAgICAgICAg
ICplcnJvclN0cmluZyA9ICJFaXRoZXIgdXJsIG9yIHVybFJlZ2V4IG11c3QgYmUgc3BlY2lmaWVk
LiI7CiAgICAgICAgIHJldHVybjsKQEAgLTI2MSw3ICsyNjAsNyBAQCBzdGF0aWMgYm9vbCBwYXJz
ZUxvY2F0aW9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbG9jYQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYgbG9jYXRpb24sIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxD
b25kaXRpb24sIFN0cmluZyogb3V0QnJlYWtwb2ludElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYgYWN0dWFsTG9jYXRpb24pCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFr
cG9pbnQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYgbG9jYXRpb24sIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxDb25kaXRpb24sIFR5
cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBvdXRCcmVha3BvaW50SWQsIFJlZlB0
cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiYgYWN0dWFsTG9jYXRpb24pCiB7CiAg
ICAgU3RyaW5nIHNjcmlwdElkOwogICAgIGludCBsaW5lTnVtYmVyOwpAQCAtMzUzLDcgKzM1Miw3
IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2NyaXB0VG9JbnNwZWN0b3JP
YmplY3QoU2NyaXB0T2JqZWN0IHNjcmlwdE9iCiAgICAgcmV0dXJuIHZhbHVlLT5hc09iamVjdCgp
OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudChFcnJv
clN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgcXVl
cnksIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCog
Y29uc3Qgb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiByZXN1bHRzKQor
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcq
IGVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25z
dCBib29sKiBjb25zdCBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IG9w
dGlvbmFsSXNSZWdleCwgUmVmUHRyPEFycmF5PFdlYkNvcmU6OlR5cGVCdWlsZGVyOjpQYWdlOjpT
ZWFyY2hNYXRjaD4gPiYgcmVzdWx0cykKIHsKICAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElz
UmVnZXggPyAqb3B0aW9uYWxJc1JlZ2V4IDogZmFsc2U7CiAgICAgYm9vbCBjYXNlU2Vuc2l0aXZl
ID0gb3B0aW9uYWxDYXNlU2Vuc2l0aXZlID8gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA6IGZhbHNl
OwpAQCAtMzY1LDcgKzM2NCw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2VhcmNo
SW5Db250ZW50KEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzCiAgICAgICAgICpl
cnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2NyaXB0SWQ7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6c2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5nKiBlcnJvciwgY29u
c3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU3RyaW5nJiBuZXdDb250ZW50LCBjb25zdCBib29s
KiBjb25zdCBwcmV2aWV3LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBuZXdDYWxsRnJhbWVzLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpzZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHNj
cmlwdElkLCBjb25zdCBTdHJpbmcmIG5ld0NvbnRlbnQsIGNvbnN0IGJvb2wqIGNvbnN0IHByZXZp
ZXcsIFJlZlB0cjxBcnJheTxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkNhbGxGcmFtZT4gPiYgbmV3
Q2FsbEZyYW1lcywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHJlc3VsdCkKIHsKICAgICBib29s
IHByZXZpZXdPbmx5ID0gcHJldmlldyAmJiAqcHJldmlldzsKICAgICBTY3JpcHRPYmplY3QgcmVz
dWx0T2JqZWN0OwpAQCAtMzg2LDE5ICszODUsMTcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpnZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHMK
ICAgICAgICAgKmVycm9yID0gIk5vIHNjcmlwdCBmb3IgaWQ6ICIgKyBzY3JpcHRJZDsKIH0KIAot
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiBkZXRhaWxzUmF3KQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRG
dW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1
bmN0aW9uSWQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4m
IGRldGFpbHMpCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChmdW5jdGlvbklkKTsK
ICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7CiAgICAgICAgICplcnJvclN0
cmluZyA9ICJJbnNwZWN0ZWQgZnJhbWUgaGFzIGdvbmUiOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIFJlZlB0cjxGdW5jdGlvbkRldGFpbHM+IGRldGFpbHM7CiAgICAgaW5qZWN0ZWRTY3Jp
cHQuZ2V0RnVuY3Rpb25EZXRhaWxzKGVycm9yU3RyaW5nLCBmdW5jdGlvbklkLCAmZGV0YWlscyk7
Ci0gICAgZGV0YWlsc1JhdyA9IGRldGFpbHM7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChjb25zdCBTdHJpbmcmIGJyZWFrUmVh
c29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSkKK3ZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJbnNwZWN0b3JGcm9udGVu
ZDo6RGVidWdnZXI6OlJlYXNvbjo6RW51bSBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGRhdGEpCiB7CiAgICAgaWYgKG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkKQog
ICAgICAgICByZXR1cm47CkBAIC00NzgsMTYgKzQ3NSwxNCBAQCB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OnNldFBhdXNlT25FeGNlcHRpb25zSW1wbChFcnJvclN0cmluZyogZXJyb3JTdHJp
bmcsCiAgICAgICAgIG1fc3RhdGUtPnNldExvbmcoRGVidWdnZXJBZ2VudFN0YXRlOjpwYXVzZU9u
RXhjZXB0aW9uc1N0YXRlLCBwYXVzZVN0YXRlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBT
dHJpbmcqIGNvbnN0IG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBjb25zdCBpbmNsdWRlQ29tbWFu
ZExpbmVBUEksIGNvbnN0IGJvb2wqIGNvbnN0IHJldHVybkJ5VmFsdWUsIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiByZXN1bHRSYXcsIGJvb2wqIHdhc1Rocm93bikKK3ZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29u
c3QgU3RyaW5nKiBjb25zdCBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogY29uc3QgaW5jbHVkZUNv
bW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBjb25zdCByZXR1cm5CeVZhbHVlLCBSZWZQdHI8VHlw
ZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgVHlwZUJ1aWxkZXI6Ok9w
dE91dHB1dDxib29sPiogd2FzVGhyb3duKQogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVk
U2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0
SWQoY2FsbEZyYW1lSWQpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsK
ICAgICAgICAgKmVycm9yU3RyaW5nID0gIkluc3BlY3RlZCBmcmFtZSBoYXMgZ29uZSI7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgUmVmUHRyPFJlbW90ZU9iamVjdD4gcmVzdWx0OwogICAg
IGluamVjdGVkU2NyaXB0LmV2YWx1YXRlT25DYWxsRnJhbWUoZXJyb3JTdHJpbmcsIG1fY3VycmVu
dENhbGxTdGFjaywgY2FsbEZyYW1lSWQsIGV4cHJlc3Npb24sIG9iamVjdEdyb3VwID8gKm9iamVj
dEdyb3VwIDogIiIsIGluY2x1ZGVDb21tYW5kTGluZUFQSSA/ICppbmNsdWRlQ29tbWFuZExpbmVB
UEkgOiBmYWxzZSwgcmV0dXJuQnlWYWx1ZSA/ICpyZXR1cm5CeVZhbHVlIDogZmFsc2UsICZyZXN1
bHQsIHdhc1Rocm93bik7Ci0gICAgcmVzdWx0UmF3ID0gcmVzdWx0OwogfQogCiBQYXNzUmVmUHRy
PEFycmF5PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPiA+IEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmN1cnJlbnRDYWxsRnJhbWVzKCkKQEAgLTU3MSw3ICs1NjYsNyBAQCB2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwg
Y29uc3QgU2NyaXB0VmFsdQogICAgIGlmICghZXhjZXB0aW9uLmhhc05vVmFsdWUoKSkgewogICAg
ICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLT5pbmplY3RlZFNjcmlwdEZvcihzY3JpcHRTdGF0ZSk7CiAgICAgICAgIGlmICghaW5qZWN0
ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgICAgICBtX2JyZWFrUmVhc29uID0gImV4
Y2VwdGlvbiI7CisgICAgICAgICAgICBtX2JyZWFrUmVhc29uID0gSW5zcGVjdG9yRnJvbnRlbmQ6
OkRlYnVnZ2VyOjpSZWFzb246OkV4Y2VwdGlvbjsKICAgICAgICAgICAgIG1fYnJlYWtBdXhEYXRh
ID0gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChleGNlcHRpb24sICJiYWNrdHJhY2UiKTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTU5Myw3ICs1ODgsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmRpZENvbnRpbnVlKCkKICAgICBtX2Zyb250ZW5kLT5yZXN1bWVkKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9ncmFtKGNvbnN0IFN0cmluZyYgYnJl
YWtSZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKQordm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpicmVha1Byb2dyYW0oSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2Vy
OjpSZWFzb246OkVudW0gYnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBk
YXRhKQogewogICAgIG1fYnJlYWtSZWFzb24gPSBicmVha1JlYXNvbjsKICAgICBtX2JyZWFrQXV4
RGF0YSA9IGRhdGE7CkBAIC02MjIsNyArNjE3LDcgQEAgYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50Ojphc3NlcnRQYXVzZWQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQogCiB2b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmNsZWFyQnJlYWtEZXRhaWxzKCkKIHsKLSAgICBtX2JyZWFrUmVh
c29uID0gIm90aGVyIjsKKyAgICBtX2JyZWFrUmVhc29uID0gSW5zcGVjdG9yRnJvbnRlbmQ6OkRl
YnVnZ2VyOjpSZWFzb246Ok90aGVyOwogICAgIG1fYnJlYWtBdXhEYXRhID0gMDsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKaW5k
ZXggYTZhYmZhNDM1MzBhMjk3ZWVmZDYzODZlOGFkZmUwZDQ1M2MzYjllNC4uNDZlM2EzMzE1MTBh
ZGU0ZGQ4Nzk5YzVmMDVlOWNhNjc5OTY0ZWQ5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCkBAIC04MiwxOCArODIsMTggQEAgcHVi
bGljOgogICAgIC8vIFBhcnQgb2YgdGhlIHByb3RvY29sLgogICAgIHZpcnR1YWwgdm9pZCBzZXRC
cmVha3BvaW50c0FjdGl2ZShFcnJvclN0cmluZyosIGJvb2wgYWN0aXZlKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcqLCBpbnQgbGluZU51bWJlciwg
Y29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTFJlZ2V4
LCBjb25zdCBpbnQqIG9wdGlvbmFsQ29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFs
Q29uZGl0aW9uLCBTdHJpbmcqIGJyZWFrcG9pbnRJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYg
bG9jYXRpb25zKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QnJlYWtwb2ludChFcnJvclN0cmluZyos
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlvbiwgY29uc3QgU3RyaW5nKiBv
cHRpb25hbENvbmRpdGlvbiwgU3RyaW5nKiBicmVha3BvaW50SWQsIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiBhY3R1YWxMb2NhdGlvbik7CisgICAgdmlydHVhbCB2b2lkIHNldEJyZWFrcG9pbnRC
eVVybChFcnJvclN0cmluZyosIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFs
VVJMLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMUmVnZXgsIGNvbnN0IGludCogb3B0aW9uYWxD
b2x1bW5OdW1iZXIsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxDb25kaXRpb24sIFR5cGVCdWlsZGVy
OjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBl
QnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiA+JiBsb2NhdGlvbnMpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mIGxvY2F0aW9uLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsQ29uZGl0aW9uLCBUeXBlQnVp
bGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCosIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdn
ZXI6OkxvY2F0aW9uPiYgYWN0dWFsTG9jYXRpb24pOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVC
cmVha3BvaW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpOwogICAg
IHZpcnR1YWwgdm9pZCBjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYgbG9jYXRpb24pOwogCi0gICAgdmlydHVhbCB2b2lkIHNlYXJj
aEluQ29udGVudChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0
cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9v
bCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+Jik7Ci0gICAgdmlydHVh
bCB2b2lkIHNldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgc2NyaXB0
SWQsIGNvbnN0IFN0cmluZyYgbmV3Q29udGVudCwgY29uc3QgYm9vbCogcHJldmlldywgUmVmUHRy
PEluc3BlY3RvckFycmF5PiYgbmV3Q2FsbEZyYW1lcywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
IHJlc3VsdCk7CisgICAgdmlydHVhbCB2b2lkIHNlYXJjaEluQ29udGVudChFcnJvclN0cmluZyos
IGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wq
IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpTZWFyY2hNYXRjaD4gPiYp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqLCBjb25zdCBT
dHJpbmcmIHNjcmlwdElkLCBjb25zdCBTdHJpbmcmIG5ld0NvbnRlbnQsIGNvbnN0IGJvb2wqIHBy
ZXZpZXcsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpD
YWxsRnJhbWU+ID4mIG5ld0NhbGxGcmFtZXMsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1
bHQpOwogICAgIHZpcnR1YWwgdm9pZCBnZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqLCBjb25z
dCBTdHJpbmcmIHNjcmlwdElkLCBTdHJpbmcqIHNjcmlwdFNvdXJjZSk7Ci0gICAgdmlydHVhbCB2
b2lkIGdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZnVuY3Rp
b25JZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGRldGFpbHMpOwotICAgIHZvaWQgc2NoZWR1
bGVQYXVzZU9uTmV4dFN0YXRlbWVudChjb25zdCBTdHJpbmcmIGJyZWFrUmVhc29uLCBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSk7CisgICAgdmlydHVhbCB2b2lkIGdldEZ1bmN0aW9u
RGV0YWlscyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPFR5
cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYpOworICAgIHZvaWQgc2NoZWR1
bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OlJlYXNv
bjo6RW51bSBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpOwog
ICAgIHZvaWQgY2FuY2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQoKTsKLSAgICB2b2lkIGJyZWFrUHJv
Z3JhbShjb25zdCBTdHJpbmcmIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZGF0YSk7CisgICAgdm9pZCBicmVha1Byb2dyYW0oSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVn
Z2VyOjpSZWFzb246OkVudW0gYnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBkYXRhKTsKICAgICB2aXJ0dWFsIHZvaWQgcGF1c2UoRXJyb3JTdHJpbmcqKTsKICAgICB2aXJ0
dWFsIHZvaWQgcmVzdW1lKEVycm9yU3RyaW5nKik7CiAgICAgdmlydHVhbCB2b2lkIHN0ZXBPdmVy
KEVycm9yU3RyaW5nKik7CkBAIC0xMDYsOCArMTA2LDggQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIHdhc1Rocm93bik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiYgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlQnVpbGRl
cjo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pOwogCiAgICAgY2xhc3MgTGlzdGVuZXIgewog
ICAgIHB1YmxpYzoKQEAgLTE1Niw3ICsxNTYsNyBAQCBwcml2YXRlOgogICAgIFNjcmlwdHNNYXAg
bV9zY3JpcHRzOwogICAgIEJyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzTWFw
IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHM7CiAgICAgU3RyaW5nIG1f
Y29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElkOwotICAgIFN0cmluZyBtX2JyZWFrUmVhc29u
OworICAgIEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6UmVhc29uOjpFbnVtIG1fYnJlYWtS
ZWFzb247CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9icmVha0F1eERhdGE7CiAgICAg
Ym9vbCBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZDsKICAgICBMaXN0ZW5lciogbV9saXN0ZW5l
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAK
aW5kZXggNzE4NDMzNDBjNzE5YzBhOWZiZWQ2N2QzNGJiY2I2MWJiMzgzYmFmNy4uZDFiNjQ4Y2Yz
OWU2YWIyMDY2OTJhNDBjNGVjMWFjYzdhNzg2ZTExZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTM5NywyOSArMzk3LDI4IEBAIHZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpuYXZpZ2F0ZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmlu
ZyYgdXJsKQogICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2hhbmdlTG9jYXRpb24oZnJhbWUtPmRvY3Vt
ZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIGZyYW1lLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1
cmwpLCAiIiwgZmFsc2UsIGZhbHNlKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBidWlsZE9iamVjdEZvckNvb2tpZShjb25zdCBDb29raWUmIGNvb2tpZSkKK3N0YXRp
YyBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpDb29raWU+IGJ1aWxkT2JqZWN0Rm9yQ29v
a2llKGNvbnN0IENvb2tpZSYgY29va2llKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHZhbHVlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICB2YWx1ZS0+c2V0U3RyaW5n
KCJuYW1lIiwgY29va2llLm5hbWUpOwotICAgIHZhbHVlLT5zZXRTdHJpbmcoInZhbHVlIiwgY29v
a2llLnZhbHVlKTsKLSAgICB2YWx1ZS0+c2V0U3RyaW5nKCJkb21haW4iLCBjb29raWUuZG9tYWlu
KTsKLSAgICB2YWx1ZS0+c2V0U3RyaW5nKCJwYXRoIiwgY29va2llLnBhdGgpOwotICAgIHZhbHVl
LT5zZXROdW1iZXIoImV4cGlyZXMiLCBjb29raWUuZXhwaXJlcyk7Ci0gICAgdmFsdWUtPnNldE51
bWJlcigic2l6ZSIsIChjb29raWUubmFtZS5sZW5ndGgoKSArIGNvb2tpZS52YWx1ZS5sZW5ndGgo
KSkpOwotICAgIHZhbHVlLT5zZXRCb29sZWFuKCJodHRwT25seSIsIGNvb2tpZS5odHRwT25seSk7
Ci0gICAgdmFsdWUtPnNldEJvb2xlYW4oInNlY3VyZSIsIGNvb2tpZS5zZWN1cmUpOwotICAgIHZh
bHVlLT5zZXRCb29sZWFuKCJzZXNzaW9uIiwgY29va2llLnNlc3Npb24pOwotICAgIHJldHVybiB2
YWx1ZTsKKyAgICByZXR1cm4gVHlwZUJ1aWxkZXI6OlBhZ2U6OkNvb2tpZTo6Y3JlYXRlKCkKKyAg
ICAgICAgLnNldE5hbWUoY29va2llLm5hbWUpCisgICAgICAgIC5zZXRWYWx1ZShjb29raWUudmFs
dWUpCisgICAgICAgIC5zZXREb21haW4oY29va2llLmRvbWFpbikKKyAgICAgICAgLnNldFBhdGgo
Y29va2llLnBhdGgpCisgICAgICAgIC5zZXRFeHBpcmVzKGNvb2tpZS5leHBpcmVzKQorICAgICAg
ICAuc2V0U2l6ZSgoY29va2llLm5hbWUubGVuZ3RoKCkgKyBjb29raWUudmFsdWUubGVuZ3RoKCkp
KQorICAgICAgICAuc2V0SHR0cE9ubHkoY29va2llLmh0dHBPbmx5KQorICAgICAgICAuc2V0U2Vj
dXJlKGNvb2tpZS5zZWN1cmUpCisgICAgICAgIC5zZXRTZXNzaW9uKGNvb2tpZS5zZXNzaW9uKTsK
IH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlGb3JDb29r
aWVzKExpc3RIYXNoU2V0PENvb2tpZT4mIGNvb2tpZXNMaXN0KQorc3RhdGljIFBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpDb29raWU+ID4gYnVpbGRBcnJh
eUZvckNvb2tpZXMoTGlzdEhhc2hTZXQ8Q29va2llPiYgY29va2llc0xpc3QpCiB7Ci0gICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBjb29raWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OkNvb2tpZT4g
PiBjb29raWVzID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpDb29raWU+
OjpjcmVhdGUoKTsKIAogICAgIExpc3RIYXNoU2V0PENvb2tpZT46Oml0ZXJhdG9yIGVuZCA9IGNv
b2tpZXNMaXN0LmVuZCgpOwogICAgIExpc3RIYXNoU2V0PENvb2tpZT46Oml0ZXJhdG9yIGl0ID0g
Y29va2llc0xpc3QuYmVnaW4oKTsKICAgICBmb3IgKGludCBpID0gMDsgaXQgIT0gZW5kOyArK2l0
LCBpKyspCi0gICAgICAgIGNvb2tpZXMtPnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JDb29raWUo
Kml0KSk7CisgICAgICAgIGNvb2tpZXMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JDb29raWUoKml0
KSk7CiAKICAgICByZXR1cm4gY29va2llczsKIH0KQEAgLTQ2OCw3ICs0NjcsNyBAQCBzdGF0aWMg
VmVjdG9yPEtVUkw+IGFsbFJlc291cmNlc1VSTHNGb3JGcmFtZShGcmFtZSogZnJhbWUpCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMo
RXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBjb29raWVzLCBXVEY6OlN0cmlu
ZyogY29va2llc1N0cmluZykKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKEVy
cm9yU3RyaW5nKiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6UGFnZTo6
Q29va2llPiA+JiBjb29raWVzLCBXVEY6OlN0cmluZyogY29va2llc1N0cmluZykKIHsKICAgICAv
LyBJZiB3ZSBjYW4gZ2V0IHJhdyBjb29raWVzLgogICAgIExpc3RIYXNoU2V0PENvb2tpZT4gcmF3
Q29va2llc0xpc3Q7CkBAIC01MDQsMTAgKzUwMywxNCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6Z2V0Q29va2llcyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGNvb2tp
ZQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHJhd0Nvb2tpZXNJbXBsZW1lbnRlZCkKKyAg
ICAvLyBGSVhNRTogRG8gbm90IHJldHVybiBlbXB0eSBzdHJpbmcvZW1wdHkgYXJyYXkuIE1ha2Ug
cmV0dXJucyBvcHRpb25hbCBpbnN0ZWFkLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODA4NTUKKyAgICBpZiAocmF3Q29va2llc0ltcGxlbWVudGVkKSB7CiAgICAgICAg
IGNvb2tpZXMgPSBidWlsZEFycmF5Rm9yQ29va2llcyhyYXdDb29raWVzTGlzdCk7Ci0gICAgZWxz
ZQorICAgICAgICAqY29va2llc1N0cmluZyA9ICIiOworICAgIH0gZWxzZSB7CisgICAgICAgIGNv
b2tpZXMgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OkNvb2tpZT46OmNy
ZWF0ZSgpOwogICAgICAgICAqY29va2llc1N0cmluZyA9IHN0cmluZ0Nvb2tpZXNMaXN0OworICAg
IH0KIH0KIAogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShFcnJvclN0cmlu
ZyosIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pCkBAIC01
MjMsNyArNTI2LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShFcnJv
clN0cmluZyosIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY28KICAgICB9CiB9CiAKLXZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRSZXNvdXJjZVRyZWUoRXJyb3JTdHJpbmcqLCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYgb2JqZWN0KQordm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFJl
c291cmNlVHJlZShFcnJvclN0cmluZyosIFJlZlB0cjxUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVS
ZXNvdXJjZVRyZWU+JiBvYmplY3QpCiB7CiAgICAgb2JqZWN0ID0gYnVpbGRPYmplY3RGb3JGcmFt
ZVRyZWUobV9wYWdlLT5tYWluRnJhbWUoKSk7CiB9CkBAIC01NTAsOSArNTUzLDkgQEAgc3RhdGlj
IGJvb2wgdGV4dENvbnRlbnRGb3JDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogY2FjaGVk
UmVzb3VyY2UsIFN0cmluZyoKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
UGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBm
cmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9v
bCogY29uc3Qgb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBjb25zdCBvcHRpb25h
bElzUmVnZXgsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIHJlc3VsdHMpCit2b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYg
ZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJv
b2wqIGNvbnN0IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9u
YWxJc1JlZ2V4LCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpT
ZWFyY2hNYXRjaD4gPiYgcmVzdWx0cykKIHsKLSAgICByZXN1bHRzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOworICAgIHJlc3VsdHMgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6
OlBhZ2U6OlNlYXJjaE1hdGNoPjo6Y3JlYXRlKCk7CiAKICAgICBib29sIGlzUmVnZXggPSBvcHRp
b25hbElzUmVnZXggPyAqb3B0aW9uYWxJc1JlZ2V4IDogZmFsc2U7CiAgICAgYm9vbCBjYXNlU2Vu
c2l0aXZlID0gb3B0aW9uYWxDYXNlU2Vuc2l0aXZlID8gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA6
IGZhbHNlOwpAQCAtNTkyLDkgKzU5NSw5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gYnVpbGRPYmplY3RGb3JTZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBmcmFtCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVz
b3VyY2VzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBib29sKiBjb25z
dCBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSXNSZWdl
eCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgcmVzdWx0cykKK3ZvaWQgSW5zcGVjdG9yUGFnZUFn
ZW50OjpzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBjb25z
dCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6
OlBhZ2U6OlNlYXJjaFJlc3VsdD4gPiYgcmVzdWx0cykKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHNlYXJjaFJlc3VsdHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoUmVzdWx0PiA+
IHNlYXJjaFJlc3VsdHMgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OlNl
YXJjaFJlc3VsdD46OmNyZWF0ZSgpOwogCiAgICAgYm9vbCBpc1JlZ2V4ID0gb3B0aW9uYWxJc1Jl
Z2V4ID8gKm9wdGlvbmFsSXNSZWdleCA6IGZhbHNlOwogICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSA9
IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA/ICpvcHRpb25hbENhc2VTZW5zaXRpdmUgOiBmYWxzZTsK
QEAgLTgxOSwzNCArODIyLDM0IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaWRQYWludCgp
CiAgICAgbV9sYXN0UGFpbnRDb250ZXh0ID0gMDsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZShGcmFtZSogZnJh
bWUpCitQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFnZUFn
ZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKIHsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBmcmFtZU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAgZnJhbWVPYmplY3QtPnNldFN0cmluZygiaWQiLCBmcmFtZUlkKGZyYW1lKSk7CisgICAgUmVm
UHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4gZnJhbWVPYmplY3QgPSBUeXBlQnVpbGRlcjo6
UGFnZTo6RnJhbWU6OmNyZWF0ZSgpCisgICAgICAgICAuc2V0SWQoZnJhbWVJZChmcmFtZSkpCisg
ICAgICAgICAuc2V0TG9hZGVySWQobG9hZGVySWQoZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExv
YWRlcigpKSkKKyAgICAgICAgIC5zZXRVcmwoZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmlu
ZygpKQorICAgICAgICAgLnNldE1pbWVUeXBlKGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKS0+cmVzcG9uc2VNSU1FVHlwZSgpKTsKICAgICBpZiAoZnJhbWUtPnRyZWUoKS0+cGFyZW50
KCkpCi0gICAgICAgIGZyYW1lT2JqZWN0LT5zZXRTdHJpbmcoInBhcmVudElkIiwgZnJhbWVJZChm
cmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkpOworICAgICAgICBmcmFtZU9iamVjdC0+c2V0UGFyZW50
SWQoZnJhbWVJZChmcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkpOwogICAgIGlmIChmcmFtZS0+b3du
ZXJFbGVtZW50KCkpIHsKICAgICAgICAgU3RyaW5nIG5hbWUgPSBmcmFtZS0+b3duZXJFbGVtZW50
KCktPmdldE5hbWVBdHRyaWJ1dGUoKTsKICAgICAgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgbmFtZSA9IGZyYW1lLT5vd25lckVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKEhUTUxO
YW1lczo6aWRBdHRyKTsKLSAgICAgICAgZnJhbWVPYmplY3QtPnNldFN0cmluZygibmFtZSIsIG5h
bWUpOworICAgICAgICBmcmFtZU9iamVjdC0+c2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgZnJh
bWVPYmplY3QtPnNldFN0cmluZygidXJsIiwgZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmlu
ZygpKTsKLSAgICBmcmFtZU9iamVjdC0+c2V0U3RyaW5nKCJsb2FkZXJJZCIsIGxvYWRlcklkKGZy
YW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSkpOwotICAgIGZyYW1lT2JqZWN0LT5zZXRT
dHJpbmcoInNlY3VyaXR5T3JpZ2luIiwgZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2lu
KCktPnRvU3RyaW5nKCkpOwotICAgIGZyYW1lT2JqZWN0LT5zZXRTdHJpbmcoIm1pbWVUeXBlIiwg
ZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXNwb25zZU1JTUVUeXBlKCkpOwor
ICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgZmllbGQgbm9uLW9wdGlvbmFsLiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA4NTcKKyAgICBmcmFtZU9iamVjdC0+c2V0U2Vj
dXJpdHlPcmlnaW4oZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5n
KCkpOwogCiAgICAgcmV0dXJuIGZyYW1lT2JqZWN0OwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFt
ZSogZnJhbWUpCitQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJl
ZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFtZSogZnJh
bWUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFtZU9iamVjdCA9
IGJ1aWxkT2JqZWN0Rm9yRnJhbWUoZnJhbWUpOwotICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJmcmFt
ZSIsIGZyYW1lT2JqZWN0KTsKLQogICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gc3VicmVzb3Vy
Y2VzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIHJlc3VsdC0+c2V0QXJyYXkoInJl
c291cmNlcyIsIHN1YnJlc291cmNlcyk7CisgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpG
cmFtZVJlc291cmNlVHJlZT4gcmVzdWx0ID0gVHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3Vy
Y2VUcmVlOjpjcmVhdGUoKQorICAgICAgICAgLnNldEZyYW1lKGZyYW1lT2JqZWN0KQorICAgICAg
ICAgLnNldFJlc291cmNlcyhzdWJyZXNvdXJjZXMpOwogCiAgICAgVmVjdG9yPENhY2hlZFJlc291
cmNlKj4gYWxsUmVzb3VyY2VzID0gY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoZnJhbWUpOwogICAg
IGZvciAoVmVjdG9yPENhY2hlZFJlc291cmNlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVz
b3VyY2VzLmJlZ2luKCk7IGl0ICE9IGFsbFJlc291cmNlcy5lbmQoKTsgKytpdCkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCmluZGV4IDhmZDdiNDIw
OGNmZTk5ZmU0MGYyNDMyYWJkZDMxODA4N2IwMjRjNDguLjlkOGM5MmNlYjgzZmIzMDdkZDVhZTg2
MGMwMWM3MzAyNzVhYjE4ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUGFnZUFnZW50LmgKQEAgLTk2LDEyICs5NiwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHJlbW92ZVNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJp
bmcmIGlkZW50aWZpZXIpOwogICAgIHZpcnR1YWwgdm9pZCByZWxvYWQoRXJyb3JTdHJpbmcqLCBj
b25zdCBib29sKiBvcHRpb25hbElnbm9yZUNhY2hlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsU2Ny
aXB0VG9FdmFsdWF0ZU9uTG9hZCk7CiAgICAgdmlydHVhbCB2b2lkIG5hdmlnYXRlKEVycm9yU3Ry
aW5nKiwgY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZpcnR1YWwgdm9pZCBnZXRDb29raWVzKEVy
cm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgY29va2llcywgV1RGOjpTdHJpbmcq
IGNvb2tpZXNTdHJpbmcpOworICAgIHZpcnR1YWwgdm9pZCBnZXRDb29raWVzKEVycm9yU3RyaW5n
KiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6UGFnZTo6Q29va2llPiA+
JiBjb29raWVzLCBXVEY6OlN0cmluZyogY29va2llc1N0cmluZyk7CiAgICAgdmlydHVhbCB2b2lk
IGRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY29u
c3QgU3RyaW5nJiBkb21haW4pOwotICAgIHZpcnR1YWwgdm9pZCBnZXRSZXNvdXJjZVRyZWUoRXJy
b3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYpOworICAgIHZpcnR1YWwgdm9pZCBn
ZXRSZXNvdXJjZVRyZWUoRXJyb3JTdHJpbmcqLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkZy
YW1lUmVzb3VyY2VUcmVlPiYpOwogICAgIHZpcnR1YWwgdm9pZCBnZXRSZXNvdXJjZUNvbnRlbnQo
RXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBT
dHJpbmcqIGNvbnRlbnQsIGJvb2wqIGJhc2U2NEVuY29kZWQpOwotICAgIHZpcnR1YWwgdm9pZCBz
ZWFyY2hJblJlc291cmNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxD
YXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2VhcmNoSW5SZXNvdXJjZXMoRXJyb3JTdHJp
bmcqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBib29sKiBjYXNlU2Vuc2l0aXZlLCBjb25zdCBib29s
KiBpc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+Jik7CisgICAgdmlydHVhbCB2b2lkIHNl
YXJjaEluUmVzb3VyY2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0
IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBvcHRpb25hbENh
c2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPFR5cGVCdWls
ZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoTWF0Y2g+ID4mKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2VhcmNoSW5SZXNvdXJjZXMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmLCBj
b25zdCBib29sKiBjYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBpc1JlZ2V4LCBSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpTZWFyY2hSZXN1bHQ+ID4mKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0RG9jdW1lbnRDb250ZW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIGh0bWwpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRT
Y3JlZW5TaXplT3ZlcnJpZGUoRXJyb3JTdHJpbmcqLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRTaG93UGFpbnRSZWN0cyhFcnJvclN0cmluZyosIGJvb2wgc2hv
dyk7CkBAIC0xMzgsOCArMTM4LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldEZyYW1lVmlld0Zp
eGVkTGF5b3V0KGludCwgaW50KTsKICAgICB2b2lkIGNsZWFyRnJhbWVWaWV3Rml4ZWRMYXlvdXQo
KTsKIAotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckZyYW1l
KEZyYW1lKik7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9y
RnJhbWVUcmVlKEZyYW1lKik7CisgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UGFnZTo6RnJh
bWU+IGJ1aWxkT2JqZWN0Rm9yRnJhbWUoRnJhbWUqKTsKKyAgICBQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4gYnVpbGRPYmplY3RGb3JGcmFtZVRyZWUoRnJh
bWUqKTsKICAgICBQYWdlKiBtX3BhZ2U7CiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2lu
amVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcApp
bmRleCA3NDE3ZjhlYzAyMDc5NDhlYWRmZjEwZmE2MWNmMGZjZWNjMTE3MTVhLi41Y2ZjOTQ4MTEy
ZmFmM2ZmODI1NmNkNTMyMjQ0ZDlkMmMwZDJjZWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcApAQCAtOTcsNyArOTcsOSBAQCB2
b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcqIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIGV4cAogICAgIH0KICNlbmRpZgogCi0gICAgaW5qZWN0ZWRTY3Jp
cHQuZXZhbHVhdGUoZXJyb3JTdHJpbmcsIGV4cHJlc3Npb24sIG9iamVjdEdyb3VwID8gKm9iamVj
dEdyb3VwIDogIiIsIGFzQm9vbChpbmNsdWRlQ29tbWFuZExpbmVBUEkpLCBhc0Jvb2wocmV0dXJu
QnlWYWx1ZSksICZyZXN1bHQsIHdhc1Rocm93bik7CisgICAgVHlwZUJ1aWxkZXI6Ok9wdE91dHB1
dDxib29sPiB3YXNUaHJvd25PcHQ7CisgICAgaW5qZWN0ZWRTY3JpcHQuZXZhbHVhdGUoZXJyb3JT
dHJpbmcsIGV4cHJlc3Npb24sIG9iamVjdEdyb3VwID8gKm9iamVjdEdyb3VwIDogIiIsIGFzQm9v
bChpbmNsdWRlQ29tbWFuZExpbmVBUEkpLCBhc0Jvb2wocmV0dXJuQnlWYWx1ZSksICZyZXN1bHQs
ICZ3YXNUaHJvd25PcHQpOworICAgICp3YXNUaHJvd24gPSB3YXNUaHJvd25PcHQuaXNBc3NpZ25l
ZCgpID8gd2FzVGhyb3duT3B0LmdldFZhbHVlKCkgOiBmYWxzZTsKIAogI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQogICAgIGlmIChwYXVzZVN0YXRlQ2hhbmdlZCkKQEAgLTExNSw3ICsx
MTcsMTAgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKEVycm9y
U3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW4KICAgICBTdHJpbmcgYXJndW1lbnRzOwog
ICAgIGlmIChvcHRpb25hbEFyZ3VtZW50cykKICAgICAgICAgYXJndW1lbnRzID0gKCpvcHRpb25h
bEFyZ3VtZW50cyktPnRvSlNPTlN0cmluZygpOwotICAgIGluamVjdGVkU2NyaXB0LmNhbGxGdW5j
dGlvbk9uKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgZXhwcmVzc2lvbiwgYXJndW1lbnRzLCBhc0Jv
b2wocmV0dXJuQnlWYWx1ZSksICZyZXN1bHQsIHdhc1Rocm93bik7CisKKyAgICBUeXBlQnVpbGRl
cjo6T3B0T3V0cHV0PGJvb2w+IHdhc1Rocm93bk9wdDsKKyAgICBpbmplY3RlZFNjcmlwdC5jYWxs
RnVuY3Rpb25PbihlcnJvclN0cmluZywgb2JqZWN0SWQsIGV4cHJlc3Npb24sIGFyZ3VtZW50cywg
YXNCb29sKHJldHVybkJ5VmFsdWUpLCAmcmVzdWx0LCAmd2FzVGhyb3duT3B0KTsKKyAgICAqd2Fz
VGhyb3duID0gd2FzVGhyb3duT3B0LmlzQXNzaWduZWQoKSA/IHdhc1Rocm93bk9wdC5nZXRWYWx1
ZSgpIDogZmFsc2U7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRQcm9wZXJ0
aWVzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29u
c3QgYm9vbCogY29uc3Qgb3duUHJvcGVydGllcywgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgcmVz
dWx0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131740</attachid>
            <date>2012-03-13 16:11:43 -0700</date>
            <delta_ts>2012-03-14 17:41:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80789-20120314031140.patch</filename>
            <type>text/plain</type>
            <size>53676</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTdkYmViZDEzYTQ0MDdi
NTFlZTE5MWViMzZmNDhmYmVlZDIyYWIyZC4uOGI4YTY4OWQ0NTU4ZGEyNzgyY2M2ZDk4NmRkYzY2
YjIwYzhmOTMyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDEyLTAzLTExICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBUeXBlQnVpbGRlcjogSW50cm9kdWNlIE9wdE91dHB1dCBjbGFzcyBmb3Igb3B0aW9uYWwgb3V0
cHV0IHBhcmFtZXRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTgwNzg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgT3B0T3V0cHV0IGNsYXNzIGlzIGFkZGVkIGZvciBvcHRpb25hbCByZXR1cm4gcGFyYW1l
dGVycy4KKworICAgICAgICBTdHJpY3QgbW9kZSBhZGRlZCB0byBHZW5lcmF0b3IgdGhhdCBtYWtl
cyBhbGwgcGFyYW1ldGVyIHR5cGVzIHN0cmljdAorICAgICAgICBhbmQgZHJvcCBwcmUtc2V0IGRl
ZmF1bHQgdmFsdWVzIGZvciByZXR1cm4gcGFyYW1ldGVycy4KKworICAgICAgICBEZWJ1Z2dlciBh
bmQgUGFnZSBkb21haW4gaXMgc3dpdGNoZWQgdG8gc3RyaWN0IG1vZGUuCisKKworICAgICAgICAq
IGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OgorICAgICAgICAoQ29tbWFuZFJl
dHVyblBhc3NNb2RlbC5CeVBvaW50ZXIpOgorICAgICAgICAoQ29tbWFuZFJldHVyblBhc3NNb2Rl
bCk6CisgICAgICAgIChDb21tYW5kUmV0dXJuUGFzc01vZGVsLk9wdE91dHB1dCk6CisgICAgICAg
IChDb21tYW5kUmV0dXJuUGFzc01vZGVsLk9wdE91dHB1dC5fX2luaXRfXyk6CisgICAgICAgIChD
b21tYW5kUmV0dXJuUGFzc01vZGVsLk9wdE91dHB1dC5nZXRfcmV0dXJuX3Zhcl90eXBlKToKKyAg
ICAgICAgKENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuT3B0T3V0cHV0LmdldF9vdXRwdXRfYXJndW1l
bnRfcHJlZml4KToKKyAgICAgICAgKENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuT3B0T3V0cHV0Lmdl
dF9vdXRwdXRfdG9fcmF3X2V4cHJlc3Npb24pOgorICAgICAgICAoQ29tbWFuZFJldHVyblBhc3NN
b2RlbC5PcHRPdXRwdXQuZ2V0X291dHB1dF9wYXJhbWV0ZXJfdHlwZSk6CisgICAgICAgIChDb21t
YW5kUmV0dXJuUGFzc01vZGVsLk9wdE91dHB1dC5nZXRfc2V0X3JldHVybl9jb25kaXRpb24pOgor
ICAgICAgICAoVHlwZU1vZGVsLkVudW0uZ2V0X29wdGlvbmFsLkVudW1PcHRpb25hbC5nZXRfY29t
bWFuZF9yZXR1cm5fcGFzc19tb2RlbCk6CisgICAgICAgIChUeXBlTW9kZWwuVmFsdWVUeXBlLlZh
bHVlT3B0aW9uYWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwpOgorICAgICAgICAoT3B0
T3V0cHV0KToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX2V2ZW50KToKKyAgICAgICAgKEdl
bmVyYXRvci5wcm9jZXNzX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9Db250ZW50U2Vh
cmNoVXRpbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlYXJjaFV0aWxzOjpidWls
ZE9iamVjdEZvclNlYXJjaE1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWFyY2hV
dGlsczo6c2VhcmNoSW5UZXh0QnlMaW5lcyk6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnRlbnRT
ZWFyY2hVdGlscy5oOgorICAgICAgICAoQ29udGVudFNlYXJjaFV0aWxzKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRT
Y3JpcHQ6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0OjpjYWxs
RnVuY3Rpb25Pbik6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGVP
bkNhbGxGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdDo6bWFrZUV2YWxD
YWxsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaDoKKyAgICAgICAgKElu
amVjdGVkU2NyaXB0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0U2NyaXB0U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uRGV0YWlscyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRl
T25DYWxsRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
ZGlkUGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJl
YWtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNs
ZWFyQnJlYWtEZXRhaWxzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJB
Z2VudC5oOgorICAgICAgICAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9i
amVjdEZvckNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZEFycmF5Rm9yQ29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRSZXNvdXJjZVRyZWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JG
cmFtZVRyZWUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25Pbik6CisKIDIwMTItMDMtMTEg
IFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQ1NTIGNvbnRlbnQgaXMgbm90IHNob3duIHdoZW4gc3R5bGVzaGVldCBpcyBsb2Fk
ZWQgd2l0aCBpbnZhbGlkIG1pbWUgdHlwZSBpbiBxdWlya3MgbW9kZS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggMGJjN2Ey
NTRiYzhiYjhkNTIxOWMxOTBhMzcwYzEzZTZhMWE2YzQyMC4uNWE3MzE1OTdmNWE5MGU3MGExYWE1
ZjUyNDNhNDcxOGRiOTJiN2U1NyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKQEAgLTU5LDYgKzU5LDggQEAgVFlQRV9OQU1FX0ZJ
WF9NQVAgPSB7CiBUWVBFU19XSVRIX1JVTlRJTUVfQ0FTVF9TRVQgPSBmcm96ZW5zZXQoWyJSdW50
aW1lLlJlbW90ZU9iamVjdCIsICJSdW50aW1lLlByb3BlcnR5RGVzY3JpcHRvciIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZWJ1Z2dlci5GdW5jdGlvbkRldGFp
bHMiLCAiRGVidWdnZXIuQ2FsbEZyYW1lIl0pCiAKK1NUUklDVF9FTkFCTEVEX0RPTUFJTlMgPSBb
IkRlYnVnZ2VyIiwgIlBhZ2UiXQorCiAKIGNtZGxpbmVfcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9u
UGFyc2VyKCkKIGNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tb3V0cHV0X2hfZGlyIikKQEAg
LTU3OSw2ICs1ODEsMjggQEAgY2xhc3MgQ29tbWFuZFJldHVyblBhc3NNb2RlbDoKICAgICAgICAg
ZGVmIGdldF9zZXRfcmV0dXJuX2NvbmRpdGlvbigpOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUK
IAorICAgIGNsYXNzIE9wdE91dHB1dDoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhcl90
eXBlKToKKyAgICAgICAgICAgIHNlbGYudmFyX3R5cGUgPSB2YXJfdHlwZQorCisgICAgICAgIGRl
ZiBnZXRfcmV0dXJuX3Zhcl90eXBlKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICJUeXBlQnVp
bGRlcjo6T3B0T3V0cHV0PCVzPiIgJSBzZWxmLnZhcl90eXBlCisKKyAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKKyAgICAgICAg
ICAgIHJldHVybiAiJiIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRf
b3V0cHV0X3RvX3Jhd19leHByZXNzaW9uKCk6CisgICAgICAgICAgICByZXR1cm4gIiVzLmdldFZh
bHVlKCkiCisKKyAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFyYW1ldGVyX3R5cGUoc2VsZik6Cisg
ICAgICAgICAgICByZXR1cm4gIlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8JXM+KiIgJSBzZWxmLnZh
cl90eXBlCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3NldF9yZXR1
cm5fY29uZGl0aW9uKCk6CisgICAgICAgICAgICByZXR1cm4gIiVzLmlzQXNzaWduZWQoKSIKKwog
CiBjbGFzcyBUeXBlTW9kZWw6CiAgICAgY2xhc3MgUmVmUHRyQmFzZWQ6CkBAIC02MTcsOCArNjQx
LDcgQEAgY2xhc3MgVHlwZU1vZGVsOgogCiAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAog
ICAgICAgICAgICAgICAgIGRlZiBnZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpOgotICAg
ICAgICAgICAgICAgICAgICAjIEZJWE1FOiB0byBiZSByZXBsYWNlZCB3aXRoIE9wdE91dHB1dCBt
b2RlbC4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbW1hbmRSZXR1cm5QYXNzTW9kZWwu
QnlQb2ludGVyKGJhc2Vfc2VsZi50eXBlX25hbWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBDb21tYW5kUmV0dXJuUGFzc01vZGVsLk9wdE91dHB1dChiYXNlX3NlbGYudHlwZV9uYW1lKQog
CiAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgIGRlZiBnZXRf
aW5wdXRfcGFyYW1fdHlwZV90ZXh0KCk6CkBAIC02NjgsOCArNjkxLDcgQEAgY2xhc3MgVHlwZU1v
ZGVsOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICAgICAgICAgIGRlZiBnZXRf
Y29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbChzZWxmKToKLSAgICAgICAgICAgICAgICAjIEZJWE1F
OiB0byBiZSByZXBsYWNlZCB3aXRoIE9wdE91dHB1dCBtb2RlbC4KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gQ29tbWFuZFJldHVyblBhc3NNb2RlbC5CeVBvaW50ZXIoc2VsZi5iYXNlLnR5cGVfbmFt
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29tbWFuZFJldHVyblBhc3NNb2RlbC5PcHRPdXRw
dXQoc2VsZi5iYXNlLnR5cGVfbmFtZSkKIAogICAgICAgICAgICAgZGVmIGdldF9pbnB1dF9wYXJh
bV90eXBlX3RleHQoc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJjb25zdCAlcyogY29u
c3QiICUgc2VsZi5iYXNlLnR5cGVfbmFtZQpAQCAtMTY5NywxMyArMTcxOSwxNiBAQCAke2Zyb250
ZW5kRG9tYWluTWV0aG9kRGVjbGFyYXRpb25zfSAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoSW5zcAogICAgIGlmICghJGFnZW50RmllbGQpCiAgICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKCIke2RvbWFpbk5hbWV9IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKICRtZXRob2RPdXRDb2RlCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAkbWV0aG9kSW5D
b2RlCi0gICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCisgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBFcnJv
clN0cmluZyBlcnJvcjsKKyAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAg
ICAgICAkYWdlbnRGaWVsZC0+JG1ldGhvZE5hbWUoJmVycm9yJGFnZW50Q2FsbFBhcmFtcyk7CiAK
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwotJHtyZXNwb25zZUNvb2t9ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwg
U3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHBy
b2Nlc3NlZCIsICIkZG9tYWluTmFtZS4kbWV0aG9kTmFtZSIpLCBwcm90b2NvbEVycm9ycywgZXJy
b3IpOworICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ciske3Jlc3BvbnNlQ29va30gICAg
ICAgIH0KKyAgICB9CisgICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZv
cm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwg
IiRkb21haW5OYW1lLiRtZXRob2ROYW1lIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7CiB9CiAi
IiIpCiAKQEAgLTIyMTEsMTIgKzIyMzYsNDAgQEAgJG1ldGhvZHMKIAogI2luY2x1ZGUgIkluc3Bl
Y3RvclZhbHVlcy5oIgogI2luY2x1ZGUgPFBsYXRmb3JtU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBUeXBlQnVpbGRlciB7CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitjbGFzcyBPcHRPdXRwdXQgeworcHVibGljOgorICAgIE9wdE91dHB1dCgpIDogbV9hc3Np
Z25lZChmYWxzZSkgeyB9CisKKyAgICB2b2lkIG9wZXJhdG9yPShUIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgbV92YWx1ZSA9IHZhbHVlOworICAgICAgICBtX2Fzc2lnbmVkID0gdHJ1ZTsKKyAgICB9
CisKKyAgICBib29sIGlzQXNzaWduZWQoKSB7IHJldHVybiBtX2Fzc2lnbmVkOyB9CisKKyAgICBU
IGdldFZhbHVlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0Fzc2lnbmVkKCkpOworICAgICAg
ICByZXR1cm4gbV92YWx1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVCBtX3ZhbHVlOworICAg
IGJvb2wgbV9hc3NpZ25lZDsKKworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9wdE91dHB1dCk7
Cit9OworCisKIC8vIFRoaXMgY2xhc3MgcHJvdmlkZXMgIlRyYWl0cyIgdHlwZSBmb3IgdGhlIGlu
cHV0IHR5cGUgVC4gSXQgaXMgcHJvZ3JhbW1lZCB1c2luZyBDKysgdGVtcGxhdGUgc3BlY2lhbGl6
YXRpb24KIC8vIHRlY2huaXF1ZS4gQnkgZGVmYXVsdCBpdCBzaW1wbHkgdGFrZXMgIkl0ZW1UcmFp
dHMiIHR5cGUgZnJvbSBULCBidXQgaXQgZG9lc24ndCB3b3JrIHdpdGggdGhlIGJhc2UgdHlwZXMu
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMjYwNyw2ICsyNjYwLDkgQEAgY2xhc3MgR2VuZXJh
dG9yOgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgcHJvY2Vzc19ldmVudChqc29uX2V2ZW50
LCBkb21haW5fbmFtZSwgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzKToKICAgICAg
ICAgZXZlbnRfbmFtZSA9IGpzb25fZXZlbnRbIm5hbWUiXQorCisgICAgICAgIHN0cmljdF9tb2Rl
ID0gZG9tYWluX25hbWUgaW4gU1RSSUNUX0VOQUJMRURfRE9NQUlOUworCiAgICAgICAgIHBhcmFt
ZXRlcl9saXN0ID0gW10KICAgICAgICAgbWV0aG9kX2xpbmVfbGlzdCA9IFtdCiAgICAgICAgIGJh
Y2tlbmRfanNfZXZlbnRfcGFyYW1fbGlzdCA9IFtdCkBAIC0yNjMzLDEzICsyNjg5LDIwIEBAIGNs
YXNzIEdlbmVyYXRvcjoKICAgICAgICAgICAgICAgICAgICAgdHlwZV9tb2RlbCA9IHR5cGVfbW9k
ZWwuZ2V0X29wdGlvbmFsKCkKICAgICAgICAgICAgICAgICAgICAgcmF3X3R5cGVfbW9kZWwgPSBy
YXdfdHlwZV9tb2RlbC5nZXRfb3B0aW9uYWwoKQogCi0gICAgICAgICAgICAgICAgYW5ub3RhdGVk
X3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4dChyYXdfdHlwZV9tb2RlbC5nZXRfaW5wdXRf
cGFyYW1fdHlwZV90ZXh0KCksIHR5cGVfbW9kZWwuZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dCgp
KQorICAgICAgICAgICAgICAgIGlmIHN0cmljdF9tb2RlOgorICAgICAgICAgICAgICAgICAgICAj
IEFsbCB0eXBlcyBhcmUgc3RyaWN0LgorICAgICAgICAgICAgICAgICAgICBhbm5vdGF0ZWRfdHlw
ZSA9IHR5cGVfbW9kZWwuZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dCgpCisgICAgICAgICAgICAg
ICAgICAgIG1vZGVfdHlwZV9iaW5kaW5nID0gcGFyYW1fdHlwZV9iaW5kaW5nCisgICAgICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBBbGwgdHlwZXMgYXJlIHJhdy4KKyAg
ICAgICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4
dChyYXdfdHlwZV9tb2RlbC5nZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KCksIHR5cGVfbW9kZWwu
Z2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dCgpKQorICAgICAgICAgICAgICAgICAgICBtb2RlX3R5
cGVfYmluZGluZyA9IHJhd190eXBlX2JpbmRpbmcKIAogICAgICAgICAgICAgICAgIHBhcmFtZXRl
cl9saXN0LmFwcGVuZCgiJXMgJXMiICUgKGFubm90YXRlZF90eXBlLCBwYXJhbWV0ZXJfbmFtZSkp
CiAKICAgICAgICAgICAgICAgICBzZXR0ZXJfYXJndW1lbnQgPSByYXdfdHlwZV9tb2RlbC5nZXRf
ZXZlbnRfc2V0dGVyX2V4cHJlc3Npb25fcGF0dGVybigpICUgcGFyYW1ldGVyX25hbWUKLSAgICAg
ICAgICAgICAgICBpZiByYXdfdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lv
bl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1bWVudCA9IHJhd190
eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKSAlIHNldHRl
cl9hcmd1bWVudAorICAgICAgICAgICAgICAgIGlmIG1vZGVfdHlwZV9iaW5kaW5nLmdldF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6CisgICAgICAgICAgICAgICAgICAgIHNldHRl
cl9hcmd1bWVudCA9IG1vZGVfdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lv
bl9wYXR0ZXJuKCkgJSBzZXR0ZXJfYXJndW1lbnQKIAogICAgICAgICAgICAgICAgIHNldHRlcl9j
b2RlID0gIiAgICBwYXJhbXNPYmplY3QtPnNldCVzKFwiJXNcIiwgJXMpO1xuIiAlIChzZXR0ZXJf
dHlwZSwgcGFyYW1ldGVyX25hbWUsIHNldHRlcl9hcmd1bWVudCkKICAgICAgICAgICAgICAgICBp
ZiBvcHRpb25hbDoKQEAgLTI2NjIsNiArMjcyNSw5IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICBA
c3RhdGljbWV0aG9kCiAgICAgZGVmIHByb2Nlc3NfY29tbWFuZChqc29uX2NvbW1hbmQsIGRvbWFp
bl9uYW1lLCBhZ2VudF9maWVsZF9uYW1lLCBhZ2VudF9pbnRlcmZhY2VfbmFtZSk6CiAgICAgICAg
IGpzb25fY29tbWFuZF9uYW1lID0ganNvbl9jb21tYW5kWyJuYW1lIl0KKworICAgICAgICBzdHJp
Y3RfbW9kZSA9IGRvbWFpbl9uYW1lIGluIFNUUklDVF9FTkFCTEVEX0RPTUFJTlMKKwogICAgICAg
ICBHZW5lcmF0b3IubWV0aG9kX25hbWVfZW51bV9saXN0LmFwcGVuZCgiICAgICAgICBrJXNfJXND
bWQsIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kWyJuYW1lIl0pKQogICAgICAgICBHZW5l
cmF0b3IubWV0aG9kX2hhbmRsZXJfbGlzdC5hcHBlbmQoIiAgICAgICAgICAgICZJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OiVzXyVzLCIgJSAoZG9tYWluX25hbWUsIGpzb25fY29tbWFu
ZF9uYW1lKSkKICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xp
c3QuYXBwZW5kKCIgICAgdm9pZCAlc18lcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdCk7IiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUp
KQpAQCAtMjc1MCwyNCArMjgxNiw0MiBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgICAgICAg
ICAgaWYgb3B0aW9uYWw6CiAgICAgICAgICAgICAgICAgICAgIHR5cGVfbW9kZWwgPSB0eXBlX21v
ZGVsLmdldF9vcHRpb25hbCgpCiAKLSAgICAgICAgICAgICAgICByYXdfdHlwZV9tb2RlbCA9IHJl
dHVybl90eXBlX2JpbmRpbmcuZ2V0X3R5cGVfbW9kZWwoKQotICAgICAgICAgICAgICAgIGlmIG9w
dGlvbmFsOgotICAgICAgICAgICAgICAgICAgICByYXdfdHlwZV9tb2RlbCA9IHJhd190eXBlX21v
ZGVsLmdldF9vcHRpb25hbCgpCi0KLSAgICAgICAgICAgICAgICBjb2RlID0gIiAgICAlcyBvdXRf
JXMgPSAlcztcbiIgJSAocmF3X3R5cGUuZ2V0X3Jhd190eXBlX21vZGVsKCkuZ2V0X2NvbW1hbmRf
cmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBlKCksIGpzb25fcmV0dXJuX25h
bWUsIGluaXRpYWxpemVyKQotICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgJXNvdXRfJXMiICUg
KHJhd190eXBlLmdldF9vdXRwdXRfcGFzc19tb2RlbCgpLmdldF9hcmd1bWVudF9wcmVmaXgoKSwg
anNvbl9yZXR1cm5fbmFtZSkKLSAgICAgICAgICAgICAgICBjb29rID0gIiAgICAgICAgcmVzdWx0
LT5zZXQlcyhcIiVzXCIsIG91dF8lcyk7XG4iICUgKHNldHRlcl90eXBlLCBqc29uX3JldHVybl9u
YW1lLCBqc29uX3JldHVybl9uYW1lKQotICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgotICAg
ICAgICAgICAgICAgICAgICAjIEZJWE1FOiBzdXBwb3J0IG9wdGlvbmFsIHByb3Blcmx5LiBQcm9i
YWJseSBhbiBhZGRpdGlvbmFsIG91dHB1dCBwYXJhbWV0ZXIgc2hvdWxkIGJlIGluIGVhY2ggY2Fz
ZS4KLSAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogcmVmYWN0b3IgdGhpcyBjb25kaXRpb247
IGl0J3MgYSBoYWNrIG5vdy4KLSAgICAgICAgICAgICAgICAgICAgdmFyX3R5cGVfdGV4dCA9IHJh
d190eXBlLmdldF9yYXdfdHlwZV9tb2RlbCgpLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVs
KCkuZ2V0X3JldHVybl92YXJfdHlwZSgpCi0gICAgICAgICAgICAgICAgICAgIGlmIHZhcl90eXBl
X3RleHQgPT0gImJvb2wiIG9yIHZhcl90eXBlX3RleHQuc3RhcnRzd2l0aCgiUmVmUHRyPCIpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgY29vayA9ICgiICAgICAgICBpZiAob3V0XyVzKVxuICAg
ICIgJSBqc29uX3JldHVybl9uYW1lKSArIGNvb2sKLSAgICAgICAgICAgICAgICAgICAgZWxzZToK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvb2sgPSAiICAgICAgICAvLyBGSVhNRTogc3VwcG9y
dCBvcHRpb25hbCBoZXJlLlxuIiArIGNvb2sKKyAgICAgICAgICAgICAgICBpZiBzdHJpY3RfbW9k
ZToKKyAgICAgICAgICAgICAgICAgICAgIyBBbGwgdHlwZXMgYXJlIHN0cmljdC4gVmFsdWVzIGRv
IG5vdCBoYXZlIGRlZmF1bHQgdmFsdWVzLgorICAgICAgICAgICAgICAgICAgICBjb2RlID0gIiAg
ICAlcyBvdXRfJXM7XG4iICUgKHR5cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9k
ZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBlKCksIGpzb25fcmV0dXJuX25hbWUpCisgICAgICAgICAg
ICAgICAgICAgIHBhcmFtID0gIiwgJXNvdXRfJXMiICUgKHR5cGVfbW9kZWwuZ2V0X2NvbW1hbmRf
cmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZpeCgpLCBqc29uX3Jl
dHVybl9uYW1lKQorICAgICAgICAgICAgICAgICAgICB2YXJfbmFtZSA9ICJvdXRfJXMiICUganNv
bl9yZXR1cm5fbmFtZQorICAgICAgICAgICAgICAgICAgICBzZXR0ZXJfYXJndW1lbnQgPSB0eXBl
X21vZGVsLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X291dHB1dF90b19yYXdf
ZXhwcmVzc2lvbigpICUgdmFyX25hbWUKKyAgICAgICAgICAgICAgICAgICAgaWYgcmV0dXJuX3R5
cGVfYmluZGluZy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgorICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0dGVyX2FyZ3VtZW50ID0gcmV0dXJuX3R5cGVfYmluZGluZy5n
ZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpICUgc2V0dGVyX2FyZ3VtZW50CisK
KyAgICAgICAgICAgICAgICAgICAgY29vayA9ICIgICAgICAgICAgICByZXN1bHQtPnNldCVzKFwi
JXNcIiwgJXMpO1xuIiAlIChzZXR0ZXJfdHlwZSwganNvbl9yZXR1cm5fbmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNldHRlcl9hcmd1bWVudCkKKworICAgICAgICAgICAgICAgICAgICBzZXRfY29uZGl0aW9u
X3BhdHRlcm4gPSB0eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0
X3NldF9yZXR1cm5fY29uZGl0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgc2V0X2NvbmRp
dGlvbl9wYXR0ZXJuOgorICAgICAgICAgICAgICAgICAgICAgICAgY29vayA9ICgiICAgICAgICAg
ICAgaWYgKCVzKVxuICAgICIgJSAoc2V0X2NvbmRpdGlvbl9wYXR0ZXJuICUgdmFyX25hbWUpKSAr
IGNvb2sKKyAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSB0eXBlX21vZGVsLmdl
dF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X291dHB1dF9wYXJhbWV0ZXJfdHlwZSgp
CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBBbGwgdHlwZXMg
YXJlIHJhdy4gVmFsdWVzIGFsd2F5cyBoYXZlIGRlZmF1bHQgdmFsdWVzLgorICAgICAgICAgICAg
ICAgICAgICByYXdfdHlwZV9tb2RlbCA9IHJldHVybl90eXBlX2JpbmRpbmcuZ2V0X3R5cGVfbW9k
ZWwoKQorICAgICAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJhd190eXBlX21vZGVsID0gcmF3X3R5cGVfbW9kZWwuZ2V0X29wdGlvbmFsKCkKKwor
ICAgICAgICAgICAgICAgICAgICBjb2RlID0gIiAgICAlcyBvdXRfJXMgPSAlcztcbiIgJSAocmF3
X3R5cGUuZ2V0X3Jhd190eXBlX21vZGVsKCkuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwo
KS5nZXRfcmV0dXJuX3Zhcl90eXBlKCksIGpzb25fcmV0dXJuX25hbWUsIGluaXRpYWxpemVyKQor
ICAgICAgICAgICAgICAgICAgICBwYXJhbSA9ICIsICVzb3V0XyVzIiAlIChyYXdfdHlwZS5nZXRf
b3V0cHV0X3Bhc3NfbW9kZWwoKS5nZXRfYXJndW1lbnRfcHJlZml4KCksIGpzb25fcmV0dXJuX25h
bWUpCisgICAgICAgICAgICAgICAgICAgIGNvb2sgPSAiICAgICAgICAgICAgcmVzdWx0LT5zZXQl
cyhcIiVzXCIsIG91dF8lcyk7XG4iICUgKHNldHRlcl90eXBlLCBqc29uX3JldHVybl9uYW1lLCBq
c29uX3JldHVybl9uYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICMgRklYTUU6IHN1cHBvcnQgb3B0aW9uYWwgcHJvcGVybHkuIFBy
b2JhYmx5IGFuIGFkZGl0aW9uYWwgb3V0cHV0IHBhcmFtZXRlciBzaG91bGQgYmUgaW4gZWFjaCBj
YXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogcmVmYWN0b3IgdGhpcyBjb25k
aXRpb247IGl0J3MgYSBoYWNrIG5vdy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcl90eXBl
X3RleHQgPSByYXdfdHlwZS5nZXRfcmF3X3R5cGVfbW9kZWwoKS5nZXRfY29tbWFuZF9yZXR1cm5f
cGFzc19tb2RlbCgpLmdldF9yZXR1cm5fdmFyX3R5cGUoKQorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgdmFyX3R5cGVfdGV4dCA9PSAiYm9vbCIgb3IgdmFyX3R5cGVfdGV4dC5zdGFydHN3aXRo
KCJSZWZQdHI8Iik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vayA9ICgiICAgICAg
ICAgICAgaWYgKG91dF8lcylcbiAgICAiICUganNvbl9yZXR1cm5fbmFtZSkgKyBjb29rCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
b2sgPSAiICAgICAgICAgICAgLy8gRklYTUU6IHN1cHBvcnQgb3B0aW9uYWwgaGVyZS5cbiIgKyBj
b29rCiAKLSAgICAgICAgICAgICAgICBhbm5vdGF0ZWRfdHlwZSA9IGdldF9hbm5vdGF0ZWRfdHlw
ZV90ZXh0KHJhd190eXBlLmdldF9yYXdfdHlwZV9tb2RlbCgpLmdldF9jb21tYW5kX3JldHVybl9w
YXNzX21vZGVsKCkuZ2V0X3JldHVybl92YXJfdHlwZSgpICsgcmF3X3R5cGUuZ2V0X291dHB1dF9w
YXNzX21vZGVsKCkuZ2V0X3BhcmFtZXRlcl90eXBlX3N1ZmZpeCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9tb2RlbC5nZXRf
Y29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9vdXRwdXRfcGFyYW1ldGVyX3R5cGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5cGVf
dGV4dChyYXdfdHlwZS5nZXRfcmF3X3R5cGVfbW9kZWwoKS5nZXRfY29tbWFuZF9yZXR1cm5fcGFz
c19tb2RlbCgpLmdldF9yZXR1cm5fdmFyX3R5cGUoKSArIHJhd190eXBlLmdldF9vdXRwdXRfcGFz
c19tb2RlbCgpLmdldF9wYXJhbWV0ZXJfdHlwZV9zdWZmaXgoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlX21vZGVsLmdl
dF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X291dHB1dF9wYXJhbWV0ZXJfdHlwZSgp
KQogCiAgICAgICAgICAgICAgICAgcGFyYW1fbmFtZSA9ICJvdXRfJXMiICUganNvbl9yZXR1cm5f
bmFtZQogICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgpAQCAtMjc4Myw3ICsyODY3LDcgQEAg
Y2xhc3MgR2VuZXJhdG9yOgogCiAgICAgICAgICAgICBqc19yZXBseV9saXN0ID0gIlslc10iICUg
am9pbihiYWNrZW5kX2pzX3JlcGx5X3BhcmFtX2xpc3QsICIsICIpCiAKLSAgICAgICAgICAgIHJl
c3BvbnNlX2Nvb2tfdGV4dCA9ICIgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYg
IWVycm9yLmxlbmd0aCgpKSB7XG4lcyAgICB9XG4iICUgam9pbihyZXNwb25zZV9jb29rX2xpc3Qs
ICIiKQorICAgICAgICAgICAgcmVzcG9uc2VfY29va190ZXh0ID0gam9pbihyZXNwb25zZV9jb29r
X2xpc3QsICIiKQogCiAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRh
dGlvbl9saXN0LmFwcGVuZChUZW1wbGF0ZXMuYmFja2VuZF9tZXRob2Quc3Vic3RpdHV0ZShOb25l
LAogICAgICAgICAgICAgZG9tYWluTmFtZT1kb21haW5fbmFtZSwgbWV0aG9kTmFtZT1qc29uX2Nv
bW1hbmRfbmFtZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db250ZW50
U2VhcmNoVXRpbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hV
dGlscy5jcHAKaW5kZXggZDBlMTI4YjIzODM4ZWYwOTQyY2I3Njg0ODg0YWU5YzllY2EyMzE1OC4u
OTI4MTgxMzdhZGZkZjEyNjEzYzI4YjBlMTYxN2JiZDQ0MDcyNzRlOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlscy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlscy5jcHAKQEAgLTkzLDEzICs5Mywx
MSBAQCBzdGF0aWMgVmVjdG9yPHBhaXI8aW50LCBTdHJpbmc+ID4gZ2V0UmVndWxhckV4cHJlc3Np
b25NYXRjaGVzQnlMaW5lcyhjb25zdCBSZWd1bAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTZWFyY2hNYXRj
aChpbnQgbGluZU51bWJlciwgU3RyaW5nIGxpbmVDb250ZW50KQorc3RhdGljIFBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaE1hdGNoPiBidWlsZE9iamVjdEZvclNlYXJjaE1hdGNo
KGludCBsaW5lTnVtYmVyLCBTdHJpbmcgbGluZUNvbnRlbnQpCiB7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICByZXN1
bHQtPnNldE51bWJlcigibGluZU51bWJlciIsIGxpbmVOdW1iZXIpOwotICAgIHJlc3VsdC0+c2V0
U3RyaW5nKCJsaW5lQ29udGVudCIsIGxpbmVDb250ZW50KTsKLQotICAgIHJldHVybiByZXN1bHQ7
CisgICAgcmV0dXJuIFR5cGVCdWlsZGVyOjpQYWdlOjpTZWFyY2hNYXRjaDo6Y3JlYXRlKCkKKyAg
ICAgICAgLnNldExpbmVOdW1iZXIobGluZU51bWJlcikKKyAgICAgICAgLnNldExpbmVDb250ZW50
KGxpbmVDb250ZW50KTsKIH0KIAogUmVndWxhckV4cHJlc3Npb24gY3JlYXRlU2VhcmNoUmVnZXgo
Y29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGlzUmVnZXgpCkBA
IC0xMjcsMTUgKzEyNSwxNSBAQCBpbnQgY291bnRSZWd1bGFyRXhwcmVzc2lvbk1hdGNoZXMoY29u
c3QgUmVndWxhckV4cHJlc3Npb24mIHJlZ2V4LCBjb25zdCBTdHJpbmcmCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gc2VhcmNoSW5UZXh0QnlMaW5l
cyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wgY2Fz
ZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCBpc1JlZ2V4KQorUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaE1hdGNoPiA+IHNlYXJjaEluVGV4dEJ5TGlu
ZXMoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sIGNh
c2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wgaXNSZWdleCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHJlc3VsdCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpTZWFyY2hNYXRjaD4gPiByZXN1bHQg
PSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaE1hdGNoPjo6Y3Jl
YXRlKCk7CiAKICAgICBSZWd1bGFyRXhwcmVzc2lvbiByZWdleCA9IENvbnRlbnRTZWFyY2hVdGls
czo6Y3JlYXRlU2VhcmNoUmVnZXgocXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOwogICAg
IFZlY3RvcjxwYWlyPGludCwgU3RyaW5nPiA+IG1hdGNoZXMgPSBnZXRSZWd1bGFyRXhwcmVzc2lv
bk1hdGNoZXNCeUxpbmVzKHJlZ2V4LCB0ZXh0KTsKIAogICAgIGZvciAoVmVjdG9yPHBhaXI8aW50
LCBTdHJpbmc+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWF0Y2hlcy5iZWdpbigpOyBpdCAhPSBt
YXRjaGVzLmVuZCgpOyArK2l0KQotICAgICAgICByZXN1bHQtPnB1c2hWYWx1ZShidWlsZE9iamVj
dEZvclNlYXJjaE1hdGNoKGl0LT5maXJzdCwgaXQtPnNlY29uZCkpOworICAgICAgICByZXN1bHQt
PmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JTZWFyY2hNYXRjaChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQp
KTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
Q29udGVudFNlYXJjaFV0aWxzLmgKaW5kZXggZjRiMWVkYTJkMzVkYWU4ZGIxOTE5ZWQyZjNjZTA0
OTJiN2E2YzBkYy4uZDJjMjcyNTM2NDBhYzdkMmY3YWY0N2I2YzVkZjA2M2IwMDlkYmZlYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlscy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbHMuaApAQCAtMjks
NiArMjksNyBAQAogI2lmbmRlZiBDb250ZW50U2VhcmNoVXRpbHNfaAogI2RlZmluZSBDb250ZW50
U2VhcmNoVXRpbHNfaAogCisjaW5jbHVkZSAiSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDIs
NyArNDMsNyBAQCBuYW1lc3BhY2UgQ29udGVudFNlYXJjaFV0aWxzIHsKIAogUmVndWxhckV4cHJl
c3Npb24gY3JlYXRlU2VhcmNoUmVnZXgoY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCBjYXNlU2Vu
c2l0aXZlLCBib29sIGlzUmVnZXgpOwogaW50IGNvdW50UmVndWxhckV4cHJlc3Npb25NYXRjaGVz
KGNvbnN0IFJlZ3VsYXJFeHByZXNzaW9uJiwgY29uc3QgU3RyaW5nJik7Ci1QYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiBzZWFyY2hJblRleHRCeUxpbmVzKGNvbnN0IFN0cmluZyYgdGV4dCwgY29u
c3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCBjYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sIGlz
UmVnZXgpOworUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6
OlNlYXJjaE1hdGNoPiA+IHNlYXJjaEluVGV4dEJ5TGluZXMoY29uc3QgU3RyaW5nJiB0ZXh0LCBj
b25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sIGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wg
aXNSZWdleCk7CiAKIFN0cmluZyBmaW5kU291cmNlVVJMKGNvbnN0IFN0cmluZyYgY29udGVudCk7
CiBTdHJpbmcgZmluZFNvdXJjZU1hcFVSTChjb25zdCBTdHJpbmcmIGNvbnRlbnQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKaW5kZXggMTczMmE3ZWYzZDFj
YzI3ZTg4MjZhYjgxNGRiMmYyNGMyOTQ3NzYwOC4uM2Y1MDBkNjhmNWZhYjI4ZjIxNGI5NmZlMzNm
NmVmZGZlZjBmYTBmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHQuY3BwCkBAIC02Miw3ICs2Miw3IEBAIEluamVjdGVkU2NyaXB0OjpJbmplY3RlZFNjcmlwdChT
Y3JpcHRPYmplY3QgaW5qZWN0ZWRTY3JpcHRPYmplY3QsIEluc3BlY3RlZFN0YXRlCiB7CiB9CiAK
LXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBib29s
IGluY2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZhbHVlLCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiogcmVzdWx0LCBib29sKiB3YXNUaHJvd24pCit2b2lkIEluamVjdGVkU2NyaXB0
OjpldmFsdWF0ZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhwcmVz
c2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVB
UEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCwg
VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKQogewogICAgIFNjcmlwdEZ1
bmN0aW9uQ2FsbCBmdW5jdGlvbihtX2luamVjdGVkU2NyaXB0T2JqZWN0LCAiZXZhbHVhdGUiKTsK
ICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChleHByZXNzaW9uKTsKQEAgLTcyLDcgKzcyLDcg
QEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24KICAgICBtYWtlRXZhbENhbGwoZXJyb3JTdHJpbmcs
IGZ1bmN0aW9uLCByZXN1bHQsIHdhc1Rocm93bik7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6
OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBv
YmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50
cywgYm9vbCByZXR1cm5CeVZhbHVlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0LCBi
b29sKiB3YXNUaHJvd24pCit2b2lkIEluamVjdGVkU2NyaXB0OjpjYWxsRnVuY3Rpb25PbihFcnJv
clN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmlu
ZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBhcmd1bWVudHMsIGJvb2wgcmV0dXJuQnlWYWx1
ZSwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCwgVHlwZUJ1aWxkZXI6Ok9wdE91dHB1
dDxib29sPiogd2FzVGhyb3duKQogewogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbiht
X2luamVjdGVkU2NyaXB0T2JqZWN0LCAiY2FsbEZ1bmN0aW9uT24iKTsKICAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudChvYmplY3RJZCk7CkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgSW5qZWN0ZWRT
Y3JpcHQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBvYmplCiAgICAgbWFrZUV2YWxDYWxsKGVycm9yU3RyaW5nLCBmdW5jdGlvbiwgcmVzdWx0
LCB3YXNUaHJvd24pOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpldmFsdWF0ZU9uQ2FsbEZy
YW1lKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU2NyaXB0VmFsdWUmIGNhbGxGcmFt
ZXMsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwg
Y29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJv
b2wgcmV0dXJuQnlWYWx1ZSwgUmVmUHRyPFJlbW90ZU9iamVjdD4qIHJlc3VsdCwgYm9vbCogd2Fz
VGhyb3duKQordm9pZCBJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0
cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFNjcmlwdFZhbHVlJiBjYWxsRnJhbWVzLCBjb25zdCBT
dHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5
VmFsdWUsIFJlZlB0cjxSZW1vdGVPYmplY3Q+KiByZXN1bHQsIFR5cGVCdWlsZGVyOjpPcHRPdXRw
dXQ8Ym9vbD4qIHdhc1Rocm93bikKIHsKICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24o
bV9pbmplY3RlZFNjcmlwdE9iamVjdCwgImV2YWx1YXRlT25DYWxsRnJhbWUiKTsKICAgICBmdW5j
dGlvbi5hcHBlbmRBcmd1bWVudChjYWxsRnJhbWVzKTsKQEAgLTI1OCw3ICsyNTgsNyBAQCB2b2lk
IEluamVjdGVkU2NyaXB0OjptYWtlQ2FsbChTY3JpcHRGdW5jdGlvbkNhbGwmIGZ1bmN0aW9uLCBS
ZWZQdHI8SW5zcGVjdG9yVmFsdQogICAgICAgICAqcmVzdWx0ID0gSW5zcGVjdG9yU3RyaW5nOjpj
cmVhdGUoIkV4Y2VwdGlvbiB3aGlsZSBtYWtpbmcgYSBjYWxsLiIpOwogfQogCi12b2lkIEluamVj
dGVkU2NyaXB0OjptYWtlRXZhbENhbGwoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTY3JpcHRG
dW5jdGlvbkNhbGwmIGZ1bmN0aW9uLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb2JqZWN0UmVz
dWx0LCBib29sKiB3YXNUaHJvd24pCit2b2lkIEluamVjdGVkU2NyaXB0OjptYWtlRXZhbENhbGwo
RXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTY3JpcHRGdW5jdGlvbkNhbGwmIGZ1bmN0aW9uLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb2JqZWN0UmVzdWx0LCBUeXBlQnVpbGRlcjo6T3B0T3V0
cHV0PGJvb2w+KiB3YXNUaHJvd24pCiB7CiAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1
bHQ7CiAgICAgbWFrZUNhbGwoZnVuY3Rpb24sICZyZXN1bHQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaAppbmRleCA4NGQ5YTc4ZWQzNmYwYzhhNTg1NmFjODA1MjVj
ODUxMmRjNTc2YTY3Li5mYWQxNjQ1NjU5M2VhZjFmZjNlYWNmMDQ3NTAxMTJlYjI5MmE4NTVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaApAQCAtNjQsMTQgKzY0
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5l
QVBJLAogICAgICAgICAgICAgICAgICAgYm9vbCByZXR1cm5CeVZhbHVlLAogICAgICAgICAgICAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCwKLSAgICAgICAgICAgICAgICAg
IGJvb2wqIHdhc1Rocm93bik7CisgICAgICAgICAgICAgICAgICBUeXBlQnVpbGRlcjo6T3B0T3V0
cHV0PGJvb2w+KiB3YXNUaHJvd24pOwogICAgIHZvaWQgY2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJp
bmcqLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCByZXR1cm5CeVZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wqIHdhc1Rocm93bik7CisgICAgICAgICAgICAgICAgICAgICAgICBUeXBlQnVpbGRlcjo6T3B0
T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pOwogICAgIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFtZShF
cnJvclN0cmluZyosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNjcmlwdFZh
bHVlJiBjYWxsRnJhbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIGNhbGxGcmFtZUlkLApAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHJldHVybkJ5VmFsdWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiogcmVz
dWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiB3YXNUaHJvd24pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGJvb2w+KiB3
YXNUaHJvd24pOwogICAgIHZvaWQgZ2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nKiwgY29u
c3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpGdW5j
dGlvbkRldGFpbHM+KiByZXN1bHQpOwogICAgIHZvaWQgZ2V0UHJvcGVydGllcyhFcnJvclN0cmlu
ZyosIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVydGllcywgUmVmUHRyPElu
c3BlY3RvckFycmF5PiogcmVzdWx0KTsKICAgICBOb2RlKiBub2RlRm9yT2JqZWN0SWQoY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCk7CkBAIC0xMDUsNyArMTA1LDcgQEAgcHJpdmF0ZToKICAgICBib29s
IGNhbkFjY2Vzc0luc3BlY3RlZFdpbmRvdygpIGNvbnN0OwogICAgIFNjcmlwdFZhbHVlIGNhbGxG
dW5jdGlvbldpdGhFdmFsRW5hYmxlZChTY3JpcHRGdW5jdGlvbkNhbGwmLCBib29sJiBoYWRFeGNl
cHRpb24pIGNvbnN0OwogICAgIHZvaWQgbWFrZUNhbGwoU2NyaXB0RnVuY3Rpb25DYWxsJiwgUmVm
UHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKLSAgICB2b2lkIG1ha2VFdmFsQ2FsbChFcnJv
clN0cmluZyosIFNjcmlwdEZ1bmN0aW9uQ2FsbCYsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBy
ZXN1bHQsIGJvb2wqIHdhc1Rocm93bik7CisgICAgdm9pZCBtYWtlRXZhbENhbGwoRXJyb3JTdHJp
bmcqLCBTY3JpcHRGdW5jdGlvbkNhbGwmLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0
LCBUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pOwogICAgIFNjcmlwdFZh
bHVlIG5vZGVBc1NjcmlwdFZhbHVlKE5vZGUqKTsKIAogICAgIFNjcmlwdE9iamVjdCBtX2luamVj
dGVkU2NyaXB0T2JqZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDliYTZiYzkzODkxMTNmYmYwYWQ1OTEw
YjZhMzNhMzA3MTFjZDAwNTkuLmNkOGM3M2E0MDc1ZjE2NTljMGIzY2JlYzM0NzI1NzNmYTBhM2E1
MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
RGVidWdnZXJBZ2VudC5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JB
Z2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3Rh
dGUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKQEAgLTU2LDEwICs1Nyw2IEBAIGVu
dW0gRE9NQnJlYWtwb2ludFR5cGUgewogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGxpc3RlbmVy
RXZlbnRDYXRlZ29yeVR5cGUgPSAibGlzdGVuZXI6IjsKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBpbnN0cnVtZW50YXRpb25FdmVudENhdGVnb3J5VHlwZSA9ICJpbnN0cnVtZW50YXRpb246IjsK
IAotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRvbU5hdGl2ZUJyZWFrcG9pbnRUeXBlID0gIkRP
TSI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZXZlbnRMaXN0ZW5lck5hdGl2ZUJyZWFrcG9p
bnRUeXBlID0gIkV2ZW50TGlzdGVuZXIiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHhock5h
dGl2ZUJyZWFrcG9pbnRUeXBlID0gIlhIUiI7Ci0KIGNvbnN0IHVpbnQzMl90IGluaGVyaXRhYmxl
RE9NQnJlYWtwb2ludFR5cGVzTWFzayA9ICgxIDw8IFN1YnRyZWVNb2RpZmllZCk7CiBjb25zdCBp
bnQgZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQgPSAxNjsKIApAQCAtMTc1LDcgKzE3Miw3
IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGlkSW52YWxpZGF0ZVN0eWxlQXR0
cihOb2RlKiBub2RlKQogICAgIGlmIChoYXNCcmVha3BvaW50KG5vZGUsIEF0dHJpYnV0ZU1vZGlm
aWVkKSkgewogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KG5v
ZGUsIEF0dHJpYnV0ZU1vZGlmaWVkLCBmYWxzZSwgZXZlbnREYXRhLmdldCgpKTsKLSAgICAgICAg
bV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oZG9tTmF0aXZlQnJlYWtwb2ludFR5cGUsIGV2
ZW50RGF0YS5yZWxlYXNlKCkpOworICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3Jh
bShJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OlJlYXNvbjo6RE9NLCBldmVudERhdGEucmVs
ZWFzZSgpKTsKICAgICB9CiB9CiAKQEAgLTI3NSw3ICsyNzIsNyBAQCB2b2lkIEluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQ6OndpbGxJbnNlcnRET01Ob2RlKE5vZGUqLCBOb2RlKiBwYXJlbnQpCiAg
ICAgaWYgKGhhc0JyZWFrcG9pbnQocGFyZW50LCBTdWJ0cmVlTW9kaWZpZWQpKSB7CiAgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQocGFyZW50LCBTdWJ0cmVlTW9k
aWZpZWQsIHRydWUsIGV2ZW50RGF0YS5nZXQoKSk7Ci0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+
YnJlYWtQcm9ncmFtKGRvbU5hdGl2ZUJyZWFrcG9pbnRUeXBlLCBldmVudERhdGEucmVsZWFzZSgp
KTsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yRnJvbnRl
bmQ6OkRlYnVnZ2VyOjpSZWFzb246OkRPTSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CiAgICAgfQog
fQogCkBAIC0yODUsMTEgKzI4MiwxMSBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6
OndpbGxSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiAgICAgaWYgKGhhc0JyZWFrcG9pbnQobm9k
ZSwgTm9kZVJlbW92ZWQpKSB7CiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50
RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIGRlc2NyaXB0aW9uRm9y
RE9NRXZlbnQobm9kZSwgTm9kZVJlbW92ZWQsIGZhbHNlLCBldmVudERhdGEuZ2V0KCkpOwotICAg
ICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShkb21OYXRpdmVCcmVha3BvaW50VHlw
ZSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQ
cm9ncmFtKEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6UmVhc29uOjpET00sIGV2ZW50RGF0
YS5yZWxlYXNlKCkpOwogICAgIH0gZWxzZSBpZiAocGFyZW50Tm9kZSAmJiBoYXNCcmVha3BvaW50
KHBhcmVudE5vZGUsIFN1YnRyZWVNb2RpZmllZCkpIHsKICAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAg
ZGVzY3JpcHRpb25Gb3JET01FdmVudChub2RlLCBTdWJ0cmVlTW9kaWZpZWQsIGZhbHNlLCBldmVu
dERhdGEuZ2V0KCkpOwotICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShkb21O
YXRpdmVCcmVha3BvaW50VHlwZSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIG1fZGVi
dWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6UmVh
c29uOjpET00sIGV2ZW50RGF0YS5yZWxlYXNlKCkpOwogICAgIH0KIH0KIApAQCAtMjk4LDcgKzI5
NSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbE1vZGlmeURPTUF0dHIo
RWxlbWVudCogZWxlbWVudCkKICAgICBpZiAoaGFzQnJlYWtwb2ludChlbGVtZW50LCBBdHRyaWJ1
dGVNb2RpZmllZCkpIHsKICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRh
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgZGVzY3JpcHRpb25Gb3JET01F
dmVudChlbGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCwgZmFsc2UsIGV2ZW50RGF0YS5nZXQoKSk7
Ci0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKGRvbU5hdGl2ZUJyZWFrcG9p
bnRUeXBlLCBldmVudERhdGEucmVsZWFzZSgpKTsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5i
cmVha1Byb2dyYW0oSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpSZWFzb246OkRPTSwgZXZl
bnREYXRhLnJlbGVhc2UoKSk7CiAgICAgfQogfQogCkBAIC0zNjcsOSArMzY0LDkgQEAgdm9pZCBJ
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChib29s
IGlzRE9NRXZlbnQsIGNvbnMKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGV2ZW50RGF0YS0+c2V0U3RyaW5nKCJl
dmVudE5hbWUiLCBmdWxsRXZlbnROYW1lKTsKICAgICBpZiAoc3luY2hyb25vdXMpCi0gICAgICAg
IG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKGV2ZW50TGlzdGVuZXJOYXRpdmVCcmVha3Bv
aW50VHlwZSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+
YnJlYWtQcm9ncmFtKEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6UmVhc29uOjpFdmVudExp
c3RlbmVyLCBldmVudERhdGEucmVsZWFzZSgpKTsKICAgICBlbHNlCi0gICAgICAgIG1fZGVidWdn
ZXJBZ2VudC0+c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChldmVudExpc3RlbmVyTmF0aXZl
QnJlYWtwb2ludFR5cGUsIGV2ZW50RGF0YS5yZWxlYXNlKCkpOworICAgICAgICBtX2RlYnVnZ2Vy
QWdlbnQtPnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRnJvbnRlbmQ6OkRl
YnVnZ2VyOjpSZWFzb246OkV2ZW50TGlzdGVuZXIsIGV2ZW50RGF0YS5yZWxlYXNlKCkpOwogfQog
CiB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnNldFhIUkJyZWFrcG9pbnQoRXJyb3JT
dHJpbmcqLCBjb25zdCBTdHJpbmcmIHVybCkKQEAgLTQxNyw3ICs0MTQsNyBAQCB2b2lkIEluc3Bl
Y3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxTZW5kWE1MSHR0cFJlcXVlc3QoY29uc3QgU3RyaW5n
JiB1cmwpCiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgICBldmVudERhdGEtPnNldFN0cmluZygiYnJlYWtwb2ludFVS
TCIsIGJyZWFrcG9pbnRVUkwpOwogICAgIGV2ZW50RGF0YS0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwp
OwotICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKHhock5hdGl2ZUJyZWFrcG9pbnRU
eXBlLCBldmVudERhdGEucmVsZWFzZSgpKTsKKyAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJv
Z3JhbShJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OlJlYXNvbjo6WEhSLCBldmVudERhdGEu
cmVsZWFzZSgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpjbGVhcigp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJB
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5jcHAKaW5kZXggNjYwOWU2NGVkNmQxNTFkMDgzMTRmOTBhZWViMmI0MTUwOGFjMjg4MC4uYTMz
ZGE4MmEzNGQ2ZWFmNTZjNGU0Y2ZhYzRmMTQzMTgyZmJjZWMyYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAtMjE0LDEw
ICsyMTQsOSBAQCBzdGF0aWMgYm9vbCBtYXRjaGVzKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIHBhdHRlcm4sIGJvb2wgaXNSZWdleCkKICAgICByZXR1cm4gdXJsID09IHBhdHRlcm47
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKEVy
cm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyogY29u
c3Qgb3B0aW9uYWxVUkwsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxVUkxSZWdleCwgY29u
c3QgaW50KiBjb25zdCBvcHRpb25hbENvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nKiBjb25zdCBv
cHRpb25hbENvbmRpdGlvbiwgU3RyaW5nKiBvdXRCcmVha3BvaW50SWQsIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4mIGxvY2F0aW9uc1JhdykKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxVUkwsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0
aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBjb25zdCBvcHRpb25hbENvbHVtbk51bWJlciwgY29u
c3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbENvbmRpdGlvbiwgVHlwZUJ1aWxkZXI6OkRlYnVnZ2Vy
OjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJh
eTxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiA+JiBsb2NhdGlvbnMpCiB7Ci0gICAg
UmVmUHRyPEFycmF5PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+ID4gbG9jYXRpb25z
ID0gQXJyYXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj46OmNyZWF0ZSgpOwotICAg
IGxvY2F0aW9uc1JhdyA9IGxvY2F0aW9uczsKKyAgICBsb2NhdGlvbnMgPSBBcnJheTxUeXBlQnVp
bGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPjo6Y3JlYXRlKCk7CiAgICAgaWYgKCFvcHRpb25hbFVS
TCA9PSAhb3B0aW9uYWxVUkxSZWdleCkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSAiRWl0aGVy
IHVybCBvciB1cmxSZWdleCBtdXN0IGJlIHNwZWNpZmllZC4iOwogICAgICAgICByZXR1cm47CkBA
IC0yNjEsNyArMjYwLDcgQEAgc3RhdGljIGJvb2wgcGFyc2VMb2NhdGlvbihFcnJvclN0cmluZyog
ZXJyb3JTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGxvY2EKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KEVycm9y
U3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGxvY2F0
aW9uLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsQ29uZGl0aW9uLCBTdHJpbmcqIG91dEJy
ZWFrcG9pbnRJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGFjdHVhbExvY2F0aW9uKQordm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGxvY2F0aW9uLCBjb25zdCBT
dHJpbmcqIGNvbnN0IG9wdGlvbmFsQ29uZGl0aW9uLCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJy
ZWFrcG9pbnRJZCogb3V0QnJlYWtwb2ludElkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2Vy
OjpMb2NhdGlvbj4mIGFjdHVhbExvY2F0aW9uKQogewogICAgIFN0cmluZyBzY3JpcHRJZDsKICAg
ICBpbnQgbGluZU51bWJlcjsKQEAgLTM1Myw3ICszNTIsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHNjcmlwdFRvSW5zcGVjdG9yT2JqZWN0KFNjcmlwdE9iamVjdCBzY3Jp
cHRPYgogICAgIHJldHVybiB2YWx1ZS0+YXNPYmplY3QoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBT
dHJpbmcmIHNjcmlwdElkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBjb25zdCBv
cHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSXNSZWdleCwg
UmVmUHRyPEluc3BlY3RvckFycmF5PiYgcmVzdWx0cykKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6c2VhcmNoSW5Db250ZW50KEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBz
Y3JpcHRJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxD
YXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxB
cnJheTxXZWJDb3JlOjpUeXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoTWF0Y2g+ID4mIHJlc3VsdHMp
CiB7CiAgICAgYm9vbCBpc1JlZ2V4ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9wdGlvbmFsSXNSZWdl
eCA6IGZhbHNlOwogICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2
ZSA/ICpvcHRpb25hbENhc2VTZW5zaXRpdmUgOiBmYWxzZTsKQEAgLTM2NSw3ICszNjQsNyBAQCB2
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudChFcnJvclN0cmluZyog
ZXJyb3IsIGNvbnN0IFN0cmluZyYgcwogICAgICAgICAqZXJyb3IgPSAiTm8gc2NyaXB0IGZvciBp
ZDogIiArIHNjcmlwdElkOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFNj
cmlwdFNvdXJjZShFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNv
bnN0IFN0cmluZyYgbmV3Q29udGVudCwgY29uc3QgYm9vbCogY29uc3QgcHJldmlldywgUmVmUHRy
PEluc3BlY3RvckFycmF5PiYgbmV3Q2FsbEZyYW1lcywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
IHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0U2NyaXB0U291cmNlKEVy
cm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU3RyaW5nJiBu
ZXdDb250ZW50LCBjb25zdCBib29sKiBjb25zdCBwcmV2aWV3LCBSZWZQdHI8QXJyYXk8VHlwZUJ1
aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+ID4mIG5ld0NhbGxGcmFtZXMsIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiByZXN1bHQpCiB7CiAgICAgYm9vbCBwcmV2aWV3T25seSA9IHByZXZpZXcg
JiYgKnByZXZpZXc7CiAgICAgU2NyaXB0T2JqZWN0IHJlc3VsdE9iamVjdDsKQEAgLTM4NiwxOSAr
Mzg1LDE3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0U2NyaXB0U291cmNlKEVy
cm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzCiAgICAgICAgICplcnJvciA9ICJObyBz
Y3JpcHQgZm9yIGlkOiAiICsgc2NyaXB0SWQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6Z2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZGV0YWlsc1JhdykK
K3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3Ry
aW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiBkZXRhaWxzKQogewogICAgIEluamVj
dGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVj
dGVkU2NyaXB0Rm9yT2JqZWN0SWQoZnVuY3Rpb25JZCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0
Lmhhc05vVmFsdWUoKSkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW5zcGVjdGVkIGZyYW1l
IGhhcyBnb25lIjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBSZWZQdHI8RnVuY3Rpb25E
ZXRhaWxzPiBkZXRhaWxzOwogICAgIGluamVjdGVkU2NyaXB0LmdldEZ1bmN0aW9uRGV0YWlscyhl
cnJvclN0cmluZywgZnVuY3Rpb25JZCwgJmRldGFpbHMpOwotICAgIGRldGFpbHNSYXcgPSBkZXRh
aWxzOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNjaGVkdWxlUGF1c2VPbk5l
eHRTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGRhdGEpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNjaGVkdWxlUGF1
c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpSZWFzb246OkVu
dW0gYnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKQogewogICAg
IGlmIChtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNDc4
LDE2ICs0NzUsMTQgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uRXhj
ZXB0aW9uc0ltcGwoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLAogICAgICAgICBtX3N0YXRlLT5z
ZXRMb25nKERlYnVnZ2VyQWdlbnRTdGF0ZTo6cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSwgcGF1c2VT
dGF0ZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxG
cmFtZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQs
IGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBjb25zdCBvYmplY3RHcm91
cCwgY29uc3QgYm9vbCogY29uc3QgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBj
b25zdCByZXR1cm5CeVZhbHVlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0UmF3LCBi
b29sKiB3YXNUaHJvd24pCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25D
YWxsRnJhbWUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFt
ZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogY29uc3Qgb2JqZWN0
R3JvdXAsIGNvbnN0IGJvb2wqIGNvbnN0IGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9v
bCogY29uc3QgcmV0dXJuQnlWYWx1ZSwgUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+JiByZXN1bHQsIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93
bikKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKGNhbGxGcmFtZUlkKTsKICAgICBp
ZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7CiAgICAgICAgICplcnJvclN0cmluZyA9
ICJJbnNwZWN0ZWQgZnJhbWUgaGFzIGdvbmUiOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IFJlZlB0cjxSZW1vdGVPYmplY3Q+IHJlc3VsdDsKICAgICBpbmplY3RlZFNjcmlwdC5ldmFsdWF0
ZU9uQ2FsbEZyYW1lKGVycm9yU3RyaW5nLCBtX2N1cnJlbnRDYWxsU3RhY2ssIGNhbGxGcmFtZUlk
LCBleHByZXNzaW9uLCBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6ICIiLCBpbmNsdWRlQ29t
bWFuZExpbmVBUEkgPyAqaW5jbHVkZUNvbW1hbmRMaW5lQVBJIDogZmFsc2UsIHJldHVybkJ5VmFs
dWUgPyAqcmV0dXJuQnlWYWx1ZSA6IGZhbHNlLCAmcmVzdWx0LCB3YXNUaHJvd24pOwotICAgIHJl
c3VsdFJhdyA9IHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxBcnJheTxUeXBlQnVpbGRlcjo6RGVi
dWdnZXI6OkNhbGxGcmFtZT4gPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjdXJyZW50Q2FsbEZy
YW1lcygpCkBAIC01NzEsNyArNTY2LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpk
aWRQYXVzZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IFNjcmlwdFZhbHUKICAgICBp
ZiAoIWV4Y2VwdGlvbi5oYXNOb1ZhbHVlKCkpIHsKICAgICAgICAgSW5qZWN0ZWRTY3JpcHQgaW5q
ZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3Io
c2NyaXB0U3RhdGUpOwogICAgICAgICBpZiAoIWluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkg
ewotICAgICAgICAgICAgbV9icmVha1JlYXNvbiA9ICJleGNlcHRpb24iOworICAgICAgICAgICAg
bV9icmVha1JlYXNvbiA9IEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6UmVhc29uOjpFeGNl
cHRpb247CiAgICAgICAgICAgICBtX2JyZWFrQXV4RGF0YSA9IGluamVjdGVkU2NyaXB0LndyYXBP
YmplY3QoZXhjZXB0aW9uLCAiYmFja3RyYWNlIik7CiAgICAgICAgIH0KICAgICB9CkBAIC01OTMs
NyArNTg4LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSgpCiAg
ICAgbV9mcm9udGVuZC0+cmVzdW1lZCgpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmJyZWFrUHJvZ3JhbShjb25zdCBTdHJpbmcmIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gZGF0YSkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQ
cm9ncmFtKEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6UmVhc29uOjpFbnVtIGJyZWFrUmVh
c29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSkKIHsKICAgICBtX2JyZWFrUmVh
c29uID0gYnJlYWtSZWFzb247CiAgICAgbV9icmVha0F1eERhdGEgPSBkYXRhOwpAQCAtNjIyLDcg
KzYxNyw3IEBAIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YXNzZXJ0UGF1c2VkKEVycm9y
U3RyaW5nKiBlcnJvclN0cmluZykKIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjbGVh
ckJyZWFrRGV0YWlscygpCiB7Ci0gICAgbV9icmVha1JlYXNvbiA9ICJvdGhlciI7CisgICAgbV9i
cmVha1JlYXNvbiA9IEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6UmVhc29uOjpPdGhlcjsK
ICAgICBtX2JyZWFrQXV4RGF0YSA9IDA7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IGE2YWJmYTQzNTMwYTI5N2VlZmQ2
Mzg2ZThhZGZlMGQ0NTNjM2I5ZTQuLjQ2ZTNhMzMxNTEwYWRlNGRkODc5OWM1ZjA1ZTljYTY3OTk2
NGVkOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVn
Z2VyQWdlbnQuaApAQCAtODIsMTggKzgyLDE4IEBAIHB1YmxpYzoKICAgICAvLyBQYXJ0IG9mIHRo
ZSBwcm90b2NvbC4KICAgICB2aXJ0dWFsIHZvaWQgc2V0QnJlYWtwb2ludHNBY3RpdmUoRXJyb3JT
dHJpbmcqLCBib29sIGFjdGl2ZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QnJlYWtwb2ludEJ5
VXJsKEVycm9yU3RyaW5nKiwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxV
UkwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBvcHRpb25hbENv
bHVtbk51bWJlciwgY29uc3QgU3RyaW5nKiBvcHRpb25hbENvbmRpdGlvbiwgU3RyaW5nKiBicmVh
a3BvaW50SWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGxvY2F0aW9ucyk7Ci0gICAgdmlydHVh
bCB2b2lkIHNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYgbG9jYXRpb24sIGNvbnN0IFN0cmluZyogb3B0aW9uYWxDb25kaXRpb24sIFN0cmlu
ZyogYnJlYWtwb2ludElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgYWN0dWFsTG9jYXRpb24p
OworICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcqLCBpbnQg
bGluZU51bWJlciwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTCwgY29uc3QgU3RyaW5nKiBvcHRp
b25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIG9wdGlvbmFsQ29sdW1uTnVtYmVyLCBjb25zdCBTdHJp
bmcqIG9wdGlvbmFsQ29uZGl0aW9uLCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJ
ZCosIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2Nh
dGlvbj4gPiYgbG9jYXRpb25zKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QnJlYWtwb2ludChFcnJv
clN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlvbiwgY29uc3Qg
U3RyaW5nKiBvcHRpb25hbENvbmRpdGlvbiwgVHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpCcmVha3Bv
aW50SWQqLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4mIGFjdHVhbExv
Y2F0aW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyos
IGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGludWVU
b0xvY2F0aW9uKEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGxv
Y2F0aW9uKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcq
LCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29s
KiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCwgUmVm
UHRyPEluc3BlY3RvckFycmF5PiYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JpcHRTb3VyY2Uo
RXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTdHJpbmcmIG5ld0Nv
bnRlbnQsIGNvbnN0IGJvb2wqIHByZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIG5ld0Nh
bGxGcmFtZXMsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpOworICAgIHZpcnR1YWwg
dm9pZCBzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHNjcmlwdElk
LCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUs
IGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxU
eXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoTWF0Y2g+ID4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
U2NyaXB0U291cmNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3Qg
U3RyaW5nJiBuZXdDb250ZW50LCBjb25zdCBib29sKiBwcmV2aWV3LCBSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPiA+JiBuZXdDYWxsRnJh
bWVzLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KTsKICAgICB2aXJ0dWFsIHZvaWQg
Z2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgU3Ry
aW5nKiBzY3JpcHRTb3VyY2UpOwotICAgIHZpcnR1YWwgdm9pZCBnZXRGdW5jdGlvbkRldGFpbHMo
RXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiBkZXRhaWxzKTsKLSAgICB2b2lkIHNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQo
Y29uc3QgU3RyaW5nJiBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRh
dGEpOworICAgIHZpcnR1YWwgdm9pZCBnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcqLCBj
b25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkZ1
bmN0aW9uRGV0YWlscz4mKTsKKyAgICB2b2lkIHNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQo
SW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpSZWFzb246OkVudW0gYnJlYWtSZWFzb24sIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKICAgICB2b2lkIGNhbmNlbFBhdXNlT25O
ZXh0U3RhdGVtZW50KCk7Ci0gICAgdm9pZCBicmVha1Byb2dyYW0oY29uc3QgU3RyaW5nJiBicmVh
a1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpOworICAgIHZvaWQgYnJl
YWtQcm9ncmFtKEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6UmVhc29uOjpFbnVtIGJyZWFr
UmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSk7CiAgICAgdmlydHVhbCB2
b2lkIHBhdXNlKEVycm9yU3RyaW5nKik7CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZShFcnJvclN0
cmluZyopOwogICAgIHZpcnR1YWwgdm9pZCBzdGVwT3ZlcihFcnJvclN0cmluZyopOwpAQCAtMTA2
LDggKzEwNiw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nKiBvYmplY3RHcm91cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Ym9vbCogaW5jbHVkZUNvbW1hbmRMaW5lQVBJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sKiB3YXNUaHJvd24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
ZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxib29sPiogd2Fz
VGhyb3duKTsKIAogICAgIGNsYXNzIExpc3RlbmVyIHsKICAgICBwdWJsaWM6CkBAIC0xNTYsNyAr
MTU2LDcgQEAgcHJpdmF0ZToKICAgICBTY3JpcHRzTWFwIG1fc2NyaXB0czsKICAgICBCcmVha3Bv
aW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkc01hcCBtX2JyZWFrcG9pbnRJZFRvRGVidWdT
ZXJ2ZXJCcmVha3BvaW50SWRzOwogICAgIFN0cmluZyBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFr
cG9pbnRJZDsKLSAgICBTdHJpbmcgbV9icmVha1JlYXNvbjsKKyAgICBJbnNwZWN0b3JGcm9udGVu
ZDo6RGVidWdnZXI6OlJlYXNvbjo6RW51bSBtX2JyZWFrUmVhc29uOwogICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG1fYnJlYWtBdXhEYXRhOwogICAgIGJvb2wgbV9qYXZhU2NyaXB0UGF1c2VT
Y2hlZHVsZWQ7CiAgICAgTGlzdGVuZXIqIG1fbGlzdGVuZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IDcxODQzMzQwYzcxOWMwYTlm
YmVkNjdkMzRiYmNiNjFiYjM4M2JhZjcuLmQxYjY0OGNmMzllNmFiMjA2NjkyYTQwYzRlYzFhY2M3
YTc4NmUxMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
YWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdl
QWdlbnQuY3BwCkBAIC0zOTcsMjkgKzM5NywyOCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
bmF2aWdhdGUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHVybCkKICAgICBmcmFtZS0+bG9h
ZGVyKCktPmNoYW5nZUxvY2F0aW9uKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigp
LCBmcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKSwgIiIsIGZhbHNlLCBmYWxzZSk7
CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JD
b29raWUoY29uc3QgQ29va2llJiBjb29raWUpCitzdGF0aWMgUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6UGFnZTo6Q29va2llPiBidWlsZE9iamVjdEZvckNvb2tpZShjb25zdCBDb29raWUmIGNvb2tp
ZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgdmFsdWUtPnNldFN0cmluZygibmFtZSIsIGNvb2tpZS5uYW1lKTsK
LSAgICB2YWx1ZS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIGNvb2tpZS52YWx1ZSk7Ci0gICAgdmFsdWUt
PnNldFN0cmluZygiZG9tYWluIiwgY29va2llLmRvbWFpbik7Ci0gICAgdmFsdWUtPnNldFN0cmlu
ZygicGF0aCIsIGNvb2tpZS5wYXRoKTsKLSAgICB2YWx1ZS0+c2V0TnVtYmVyKCJleHBpcmVzIiwg
Y29va2llLmV4cGlyZXMpOwotICAgIHZhbHVlLT5zZXROdW1iZXIoInNpemUiLCAoY29va2llLm5h
bWUubGVuZ3RoKCkgKyBjb29raWUudmFsdWUubGVuZ3RoKCkpKTsKLSAgICB2YWx1ZS0+c2V0Qm9v
bGVhbigiaHR0cE9ubHkiLCBjb29raWUuaHR0cE9ubHkpOwotICAgIHZhbHVlLT5zZXRCb29sZWFu
KCJzZWN1cmUiLCBjb29raWUuc2VjdXJlKTsKLSAgICB2YWx1ZS0+c2V0Qm9vbGVhbigic2Vzc2lv
biIsIGNvb2tpZS5zZXNzaW9uKTsKLSAgICByZXR1cm4gdmFsdWU7CisgICAgcmV0dXJuIFR5cGVC
dWlsZGVyOjpQYWdlOjpDb29raWU6OmNyZWF0ZSgpCisgICAgICAgIC5zZXROYW1lKGNvb2tpZS5u
YW1lKQorICAgICAgICAuc2V0VmFsdWUoY29va2llLnZhbHVlKQorICAgICAgICAuc2V0RG9tYWlu
KGNvb2tpZS5kb21haW4pCisgICAgICAgIC5zZXRQYXRoKGNvb2tpZS5wYXRoKQorICAgICAgICAu
c2V0RXhwaXJlcyhjb29raWUuZXhwaXJlcykKKyAgICAgICAgLnNldFNpemUoKGNvb2tpZS5uYW1l
Lmxlbmd0aCgpICsgY29va2llLnZhbHVlLmxlbmd0aCgpKSkKKyAgICAgICAgLnNldEh0dHBPbmx5
KGNvb2tpZS5odHRwT25seSkKKyAgICAgICAgLnNldFNlY3VyZShjb29raWUuc2VjdXJlKQorICAg
ICAgICAuc2V0U2Vzc2lvbihjb29raWUuc2Vzc2lvbik7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBidWlsZEFycmF5Rm9yQ29va2llcyhMaXN0SGFzaFNldDxDb29raWU+
JiBjb29raWVzTGlzdCkKK3N0YXRpYyBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBl
QnVpbGRlcjo6UGFnZTo6Q29va2llPiA+IGJ1aWxkQXJyYXlGb3JDb29raWVzKExpc3RIYXNoU2V0
PENvb2tpZT4mIGNvb2tpZXNMaXN0KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29v
a2llcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6
OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpDb29raWU+ID4gY29va2llcyA9IFR5cGVCdWlsZGVy
OjpBcnJheTxUeXBlQnVpbGRlcjo6UGFnZTo6Q29va2llPjo6Y3JlYXRlKCk7CiAKICAgICBMaXN0
SGFzaFNldDxDb29raWU+OjppdGVyYXRvciBlbmQgPSBjb29raWVzTGlzdC5lbmQoKTsKICAgICBM
aXN0SGFzaFNldDxDb29raWU+OjppdGVyYXRvciBpdCA9IGNvb2tpZXNMaXN0LmJlZ2luKCk7CiAg
ICAgZm9yIChpbnQgaSA9IDA7IGl0ICE9IGVuZDsgKytpdCwgaSsrKQotICAgICAgICBjb29raWVz
LT5wdXNoT2JqZWN0KGJ1aWxkT2JqZWN0Rm9yQ29va2llKCppdCkpOworICAgICAgICBjb29raWVz
LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yQ29va2llKCppdCkpOwogCiAgICAgcmV0dXJuIGNvb2tp
ZXM7CiB9CkBAIC00NjgsNyArNDY3LDcgQEAgc3RhdGljIFZlY3RvcjxLVVJMPiBhbGxSZXNvdXJj
ZXNVUkxzRm9yRnJhbWUoRnJhbWUqIGZyYW1lKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm9yU3RyaW5nKiwgUmVmUHRyPElu
c3BlY3RvckFycmF5PiYgY29va2llcywgV1RGOjpTdHJpbmcqIGNvb2tpZXNTdHJpbmcpCit2b2lk
IEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyhFcnJvclN0cmluZyosIFJlZlB0cjxUeXBl
QnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OkNvb2tpZT4gPiYgY29va2llcywgV1RG
OjpTdHJpbmcqIGNvb2tpZXNTdHJpbmcpCiB7CiAgICAgLy8gSWYgd2UgY2FuIGdldCByYXcgY29v
a2llcy4KICAgICBMaXN0SGFzaFNldDxDb29raWU+IHJhd0Nvb2tpZXNMaXN0OwpAQCAtNTA0LDEw
ICs1MDMsMTQgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJyb3JTdHJp
bmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBjb29raWUKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGlmIChyYXdDb29raWVzSW1wbGVtZW50ZWQpCisgICAgLy8gRklYTUU6IERvIG5vdCByZXR1
cm4gZW1wdHkgc3RyaW5nL2VtcHR5IGFycmF5LiBNYWtlIHJldHVybnMgb3B0aW9uYWwgaW5zdGVh
ZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwODU1CisgICAgaWYg
KHJhd0Nvb2tpZXNJbXBsZW1lbnRlZCkgewogICAgICAgICBjb29raWVzID0gYnVpbGRBcnJheUZv
ckNvb2tpZXMocmF3Q29va2llc0xpc3QpOwotICAgIGVsc2UKKyAgICAgICAgKmNvb2tpZXNTdHJp
bmcgPSAiIjsKKyAgICB9IGVsc2UgeworICAgICAgICBjb29raWVzID0gVHlwZUJ1aWxkZXI6OkFy
cmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpDb29raWU+OjpjcmVhdGUoKTsKICAgICAgICAgKmNvb2tp
ZXNTdHJpbmcgPSBzdHJpbmdDb29raWVzTGlzdDsKKyAgICB9CiB9CiAKIHZvaWQgSW5zcGVjdG9y
UGFnZUFnZW50OjpkZWxldGVDb29raWUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGNvb2tp
ZU5hbWUsIGNvbnN0IFN0cmluZyYgZG9tYWluKQpAQCAtNTIzLDcgKzUyNiw3IEBAIHZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpkZWxldGVDb29raWUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcm
IGNvb2tpZU5hbWUsIGNvCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0
UmVzb3VyY2VUcmVlKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG9iamVj
dCkKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRSZXNvdXJjZVRyZWUoRXJyb3JTdHJpbmcq
LCBSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiYgb2JqZWN0KQog
ewogICAgIG9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKG1fcGFnZS0+bWFpbkZyYW1l
KCkpOwogfQpAQCAtNTUwLDkgKzU1Myw5IEBAIHN0YXRpYyBib29sIHRleHRDb250ZW50Rm9yQ2Fj
aGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlLCBTdHJpbmcqCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNv
dXJjZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsQ2FzZVNl
bnNpdGl2ZSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+JiByZXN1bHRzKQordm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVz
b3VyY2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbENhc2VT
ZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPFR5cGVC
dWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoTWF0Y2g+ID4mIHJlc3VsdHMp
CiB7Ci0gICAgcmVzdWx0cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICByZXN1bHRz
ID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpTZWFyY2hNYXRjaD46OmNy
ZWF0ZSgpOwogCiAgICAgYm9vbCBpc1JlZ2V4ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9wdGlvbmFs
SXNSZWdleCA6IGZhbHNlOwogICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNl
bnNpdGl2ZSA/ICpvcHRpb25hbENhc2VTZW5zaXRpdmUgOiBmYWxzZTsKQEAgLTU5Miw5ICs1OTUs
OSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU2Vh
cmNoUmVzdWx0KGNvbnN0IFN0cmluZyYgZnJhbQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyosIGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxDYXNlU2Vuc2l0aXZl
LCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4mIHJlc3VsdHMpCit2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZXMo
RXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlv
bmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxJc1JlZ2V4LCBSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpTZWFyY2hSZXN1bHQ+ID4m
IHJlc3VsdHMpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBzZWFyY2hSZXN1bHRzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8
VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaFJlc3VsdD4gPiBzZWFyY2hSZXN1bHRzID0gVHlwZUJ1
aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpTZWFyY2hSZXN1bHQ+OjpjcmVhdGUoKTsK
IAogICAgIGJvb2wgaXNSZWdleCA9IG9wdGlvbmFsSXNSZWdleCA/ICpvcHRpb25hbElzUmVnZXgg
OiBmYWxzZTsKICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENhc2VTZW5zaXRpdmUg
PyAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZlIDogZmFsc2U7CkBAIC04MTksMzQgKzgyMiwzNCBAQCB2
b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkUGFpbnQoKQogICAgIG1fbGFzdFBhaW50Q29udGV4
dCA9IDA7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JQYWdlQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWUoRnJhbWUqIGZyYW1lKQorUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6UGFnZTo6RnJhbWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFt
ZShGcmFtZSogZnJhbWUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZnJhbWVPYmpl
Y3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGZyYW1lT2JqZWN0LT5zZXRTdHJp
bmcoImlkIiwgZnJhbWVJZChmcmFtZSkpOworICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6UGFnZTo6
RnJhbWU+IGZyYW1lT2JqZWN0ID0gVHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lOjpjcmVhdGUoKQor
ICAgICAgICAgLnNldElkKGZyYW1lSWQoZnJhbWUpKQorICAgICAgICAgLnNldExvYWRlcklkKGxv
YWRlcklkKGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSkpCisgICAgICAgICAuc2V0
VXJsKGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSkKKyAgICAgICAgIC5zZXRNaW1l
VHlwZShmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlTUlNRVR5cGUo
KSk7CiAgICAgaWYgKGZyYW1lLT50cmVlKCktPnBhcmVudCgpKQotICAgICAgICBmcmFtZU9iamVj
dC0+c2V0U3RyaW5nKCJwYXJlbnRJZCIsIGZyYW1lSWQoZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkp
KTsKKyAgICAgICAgZnJhbWVPYmplY3QtPnNldFBhcmVudElkKGZyYW1lSWQoZnJhbWUtPnRyZWUo
KS0+cGFyZW50KCkpKTsKICAgICBpZiAoZnJhbWUtPm93bmVyRWxlbWVudCgpKSB7CiAgICAgICAg
IFN0cmluZyBuYW1lID0gZnJhbWUtPm93bmVyRWxlbWVudCgpLT5nZXROYW1lQXR0cmlidXRlKCk7
CiAgICAgICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKICAgICAgICAgICAgIG5hbWUgPSBmcmFtZS0+
b3duZXJFbGVtZW50KCktPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0cik7Ci0gICAgICAg
IGZyYW1lT2JqZWN0LT5zZXRTdHJpbmcoIm5hbWUiLCBuYW1lKTsKKyAgICAgICAgZnJhbWVPYmpl
Y3QtPnNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIGZyYW1lT2JqZWN0LT5zZXRTdHJpbmcoInVy
bCIsIGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgZnJhbWVPYmplY3Qt
PnNldFN0cmluZygibG9hZGVySWQiLCBsb2FkZXJJZChmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50
TG9hZGVyKCkpKTsKLSAgICBmcmFtZU9iamVjdC0+c2V0U3RyaW5nKCJzZWN1cml0eU9yaWdpbiIs
IGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKLSAgICBm
cmFtZU9iamVjdC0+c2V0U3RyaW5nKCJtaW1lVHlwZSIsIGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1l
bnRMb2FkZXIoKS0+cmVzcG9uc2VNSU1FVHlwZSgpKTsKKyAgICAvLyBGSVhNRTogTWFrZSB0aGlz
IGZpZWxkIG5vbi1vcHRpb25hbC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTgwODU3CisgICAgZnJhbWVPYmplY3QtPnNldFNlY3VyaXR5T3JpZ2luKGZyYW1lLT5kb2N1
bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKIAogICAgIHJldHVybiBmcmFt
ZU9iamVjdDsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclBhZ2VB
Z2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZVRyZWUoRnJhbWUqIGZyYW1lKQorUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6
YnVpbGRPYmplY3RGb3JGcmFtZVRyZWUoRnJhbWUqIGZyYW1lKQogewotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gZnJhbWVPYmplY3QgPSBidWlsZE9iamVjdEZvckZyYW1lKGZy
YW1lKTsKLSAgICByZXN1bHQtPnNldE9iamVjdCgiZnJhbWUiLCBmcmFtZU9iamVjdCk7Ci0KICAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHN1YnJlc291cmNlcyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKLSAgICByZXN1bHQtPnNldEFycmF5KCJyZXNvdXJjZXMiLCBzdWJyZXNvdXJjZXMp
OworICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+IHJlc3Vs
dCA9IFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZTo6Y3JlYXRlKCkKKyAgICAg
ICAgIC5zZXRGcmFtZShmcmFtZU9iamVjdCkKKyAgICAgICAgIC5zZXRSZXNvdXJjZXMoc3VicmVz
b3VyY2VzKTsKIAogICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZSo+IGFsbFJlc291cmNlcyA9IGNh
Y2hlZFJlc291cmNlc0ZvckZyYW1lKGZyYW1lKTsKICAgICBmb3IgKFZlY3RvcjxDYWNoZWRSZXNv
dXJjZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBh
bGxSZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuaAppbmRleCA4ZmQ3YjQyMDhjZmU5OWZlNDBmMjQzMmFiZGQzMTgw
ODdiMDI0YzQ4Li45ZDhjOTJjZWI4M2ZiMzA3ZGQ1YWU4NjBjMDFjNzMwMjc1YWIxOGU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCkBAIC05Niwx
MiArOTYsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVTY3JpcHRUb0V2YWx1
YXRlT25Mb2FkKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVsb2FkKEVycm9yU3RyaW5nKiwgY29uc3QgYm9vbCogb3B0aW9uYWxJZ25v
cmVDYWNoZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQpOwog
ICAgIHZpcnR1YWwgdm9pZCBuYXZpZ2F0ZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgdXJs
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0Q29va2llcyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4mIGNvb2tpZXMsIFdURjo6U3RyaW5nKiBjb29raWVzU3RyaW5nKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0Q29va2llcyhFcnJvclN0cmluZyosIFJlZlB0cjxUeXBlQnVpbGRlcjo6
QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OkNvb2tpZT4gPiYgY29va2llcywgV1RGOjpTdHJpbmcq
IGNvb2tpZXNTdHJpbmcpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29raWUoRXJyb3JTdHJp
bmcqLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0cmluZyYgZG9tYWluKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZ2V0UmVzb3VyY2VUcmVlKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVzb3VyY2VUcmVlKEVycm9yU3Ry
aW5nKiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4mKTsKICAg
ICB2aXJ0dWFsIHZvaWQgZ2V0UmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgU3RyaW5nKiBjb250ZW50LCBib29sKiBi
YXNlNjRFbmNvZGVkKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2VhcmNoSW5SZXNvdXJjZShFcnJvclN0
cmluZyosIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0
cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9v
bCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+Jik7Ci0gICAgdmlydHVh
bCB2b2lkIHNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiwgY29u
c3QgYm9vbCogY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaXNSZWdleCwgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiYpOworICAgIHZpcnR1YWwgdm9pZCBzZWFyY2hJblJlc291cmNlKEVycm9yU3Ry
aW5nKiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3Ry
aW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29s
KiBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6
OlBhZ2U6OlNlYXJjaE1hdGNoPiA+Jik7CisgICAgdmlydHVhbCB2b2lkIHNlYXJjaEluUmVzb3Vy
Y2VzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgYm9vbCogY2FzZVNlbnNpdGl2
ZSwgY29uc3QgYm9vbCogaXNSZWdleCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVp
bGRlcjo6UGFnZTo6U2VhcmNoUmVzdWx0PiA+Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldERvY3Vt
ZW50Q29udGVudChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3Ry
aW5nJiBodG1sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2NyZWVuU2l6ZU92ZXJyaWRlKEVycm9y
U3RyaW5nKiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2hv
d1BhaW50UmVjdHMoRXJyb3JTdHJpbmcqLCBib29sIHNob3cpOwpAQCAtMTM4LDggKzEzOCw4IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBzZXRGcmFtZVZpZXdGaXhlZExheW91dChpbnQsIGludCk7CiAg
ICAgdm9pZCBjbGVhckZyYW1lVmlld0ZpeGVkTGF5b3V0KCk7CiAKLSAgICBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JGcmFtZShGcmFtZSopOwotICAgIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFtZSopOworICAg
IFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lPiBidWlsZE9iamVjdEZvckZyYW1l
KEZyYW1lKik7CisgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJj
ZVRyZWU+IGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKik7CiAgICAgUGFnZSogbV9wYWdl
OwogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CiAg
ICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggNzQxN2Y4ZWMwMjA3OTQ4ZWFk
ZmYxMGZhNjFjZjBmY2VjYzExNzE1YS4uNWNmYzk0ODExMmZhZjNmZjgyNTZjZDUzMjI0NGQ5ZDJj
MGQyY2VjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1
bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1
bnRpbWVBZ2VudC5jcHAKQEAgLTk3LDcgKzk3LDkgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdl
bnQ6OmV2YWx1YXRlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBleHAK
ICAgICB9CiAjZW5kaWYKIAotICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlKGVycm9yU3RyaW5n
LCBleHByZXNzaW9uLCBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6ICIiLCBhc0Jvb2woaW5j
bHVkZUNvbW1hbmRMaW5lQVBJKSwgYXNCb29sKHJldHVybkJ5VmFsdWUpLCAmcmVzdWx0LCB3YXNU
aHJvd24pOworICAgIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4gd2FzVGhyb3duT3B0Owor
ICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlKGVycm9yU3RyaW5nLCBleHByZXNzaW9uLCBvYmpl
Y3RHcm91cCA/ICpvYmplY3RHcm91cCA6ICIiLCBhc0Jvb2woaW5jbHVkZUNvbW1hbmRMaW5lQVBJ
KSwgYXNCb29sKHJldHVybkJ5VmFsdWUpLCAmcmVzdWx0LCAmd2FzVGhyb3duT3B0KTsKKyAgICAq
d2FzVGhyb3duID0gd2FzVGhyb3duT3B0LmlzQXNzaWduZWQoKSA/IHdhc1Rocm93bk9wdC5nZXRW
YWx1ZSgpIDogZmFsc2U7CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBp
ZiAocGF1c2VTdGF0ZUNoYW5nZWQpCkBAIC0xMTUsNyArMTE3LDEwIEBAIHZvaWQgSW5zcGVjdG9y
UnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluCiAgICAgU3RyaW5nIGFyZ3VtZW50czsKICAgICBpZiAob3B0aW9uYWxBcmd1bWVu
dHMpCiAgICAgICAgIGFyZ3VtZW50cyA9ICgqb3B0aW9uYWxBcmd1bWVudHMpLT50b0pTT05TdHJp
bmcoKTsKLSAgICBpbmplY3RlZFNjcmlwdC5jYWxsRnVuY3Rpb25PbihlcnJvclN0cmluZywgb2Jq
ZWN0SWQsIGV4cHJlc3Npb24sIGFyZ3VtZW50cywgYXNCb29sKHJldHVybkJ5VmFsdWUpLCAmcmVz
dWx0LCB3YXNUaHJvd24pOworCisgICAgVHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxib29sPiB3YXNU
aHJvd25PcHQ7CisgICAgaW5qZWN0ZWRTY3JpcHQuY2FsbEZ1bmN0aW9uT24oZXJyb3JTdHJpbmcs
IG9iamVjdElkLCBleHByZXNzaW9uLCBhcmd1bWVudHMsIGFzQm9vbChyZXR1cm5CeVZhbHVlKSwg
JnJlc3VsdCwgJndhc1Rocm93bk9wdCk7CisgICAgKndhc1Rocm93biA9IHdhc1Rocm93bk9wdC5p
c0Fzc2lnbmVkKCkgPyB3YXNUaHJvd25PcHQuZ2V0VmFsdWUoKSA6IGZhbHNlOwogfQogCiB2b2lk
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyogZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IGJvb2wqIGNvbnN0IG93blByb3Bl
cnRpZXMsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIHJlc3VsdCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131963</attachid>
            <date>2012-03-14 17:42:45 -0700</date>
            <delta_ts>2012-03-16 07:43:44 -0700</delta_ts>
            <desc>Only merge. Do not commit before 81132</desc>
            <filename>bug-80789-20120315044242.patch</filename>
            <type>text/plain</type>
            <size>53964</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNzI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGUyNDQwNTQ0MjQ0N2E2
NDRhNTc0OTllMWU0OThhZGNlOWNhZTk0Mi4uODBhZDNjODgzNzAxOWRkYTBiZDBmYzRlNWY3YTFh
MjNhMjNmMzg3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDEyLTAzLTE0ICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBUeXBlQnVpbGRlcjogSW50cm9kdWNlIE9wdE91dHB1dCBjbGFzcyBmb3Igb3B0aW9uYWwgb3V0
cHV0IHBhcmFtZXRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTgwNzg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgT3B0T3V0cHV0IGNsYXNzIGlzIGFkZGVkIGZvciBvcHRpb25hbCByZXR1cm4gcGFyYW1l
dGVycy4KKworICAgICAgICBTdHJpY3QgbW9kZSBhZGRlZCB0byBHZW5lcmF0b3IgdGhhdCBtYWtl
cyBhbGwgcGFyYW1ldGVyIHR5cGVzIHN0cmljdAorICAgICAgICBhbmQgZHJvcCBwcmUtc2V0IGRl
ZmF1bHQgdmFsdWVzIGZvciByZXR1cm4gcGFyYW1ldGVycy4KKworICAgICAgICBEZWJ1Z2dlciBh
bmQgUGFnZSBkb21haW4gaXMgc3dpdGNoZWQgdG8gc3RyaWN0IG1vZGUuCisKKyAgICAgICAgKiBp
bnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weToKKyAgICAgICAgKENvbW1hbmRSZXR1
cm5QYXNzTW9kZWwuT3B0T3V0cHV0KToKKyAgICAgICAgKENvbW1hbmRSZXR1cm5QYXNzTW9kZWwu
T3B0T3V0cHV0Ll9faW5pdF9fKToKKyAgICAgICAgKENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuT3B0
T3V0cHV0LmdldF9yZXR1cm5fdmFyX3R5cGUpOgorICAgICAgICAoQ29tbWFuZFJldHVyblBhc3NN
b2RlbC5PcHRPdXRwdXQuZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgpOgorICAgICAgICAoQ29t
bWFuZFJldHVyblBhc3NNb2RlbC5PcHRPdXRwdXQuZ2V0X291dHB1dF90b19yYXdfZXhwcmVzc2lv
bik6CisgICAgICAgIChDb21tYW5kUmV0dXJuUGFzc01vZGVsLk9wdE91dHB1dC5nZXRfb3V0cHV0
X3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAgKENvbW1hbmRSZXR1cm5QYXNzTW9kZWwpOgorICAg
ICAgICAoQ29tbWFuZFJldHVyblBhc3NNb2RlbC5PcHRPdXRwdXQuZ2V0X3NldF9yZXR1cm5fY29u
ZGl0aW9uKToKKyAgICAgICAgKFR5cGVNb2RlbC5FbnVtLmdldF9vcHRpb25hbC5FbnVtT3B0aW9u
YWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwpOgorICAgICAgICAoVHlwZU1vZGVsLlZh
bHVlVHlwZS5WYWx1ZU9wdGlvbmFsLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKToKKyAg
ICAgICAgKE9wdE91dHB1dCk6CisgICAgICAgIChHZW5lcmF0b3IucHJvY2Vzc19ldmVudCk6Cisg
ICAgICAgIChHZW5lcmF0b3IucHJvY2Vzc19jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
Q29udGVudFNlYXJjaFV0aWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWFyY2hV
dGlsczo6YnVpbGRPYmplY3RGb3JTZWFyY2hNYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50U2VhcmNoVXRpbHM6OnNlYXJjaEluVGV4dEJ5TGluZXMpOgorICAgICAgICAqIGluc3BlY3Rv
ci9Db250ZW50U2VhcmNoVXRpbHMuaDoKKyAgICAgICAgKENvbnRlbnRTZWFyY2hVdGlscyk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkluamVjdGVkU2NyaXB0OjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNj
cmlwdDo6Y2FsbEZ1bmN0aW9uT24pOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHQ6
OmV2YWx1YXRlT25DYWxsRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHQ6
Om1ha2VFdmFsQ2FsbCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Lmg6Cisg
ICAgICAgIChJbmplY3RlZFNjcmlwdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NRGVidWdn
ZXJBZ2VudDo6ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsSW5zZXJ0RE9NTm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsUmVtb3ZlRE9NTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsTW9kaWZ5RE9NQXR0
cik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpwYXVzZU9u
TmF0aXZlRXZlbnRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50Ojp3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0U2NyaXB0U291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uRGV0YWlscyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlT25OZXh0
U3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmV2
YWx1YXRlT25DYWxsRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6ZGlkUGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6YnJlYWtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmNsZWFyQnJlYWtEZXRhaWxzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5oOgorICAgICAgICAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpi
dWlsZE9iamVjdEZvckNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZEFycmF5Rm9yQ29v
a2llcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRSZXNvdXJjZVRyZWUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJj
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZv
ckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmpl
Y3RGb3JGcmFtZVRyZWUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
aDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25Pbik6CisKIDIwMTIt
MDMtMTQgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViUHJv
Y2VzcyBzcGlucyBiZW5lYXRoIFtRVE1vdmllIG1vdmllRmlsZVR5cGVzOl0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggODQz
NzcxYThhYTViNWQ0ZjIwMGNlZjJjMzkxMzdhYzVhY2RiN2NiNS4uY2E4YTY3NTNlOTI4N2RhMTc4
MGYxZGM3MjJiZTNmZTJlZTYyNTMyNyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKQEAgLTU5LDYgKzU5LDggQEAgVFlQRV9OQU1F
X0ZJWF9NQVAgPSB7CiBUWVBFU19XSVRIX1JVTlRJTUVfQ0FTVF9TRVQgPSBmcm96ZW5zZXQoWyJS
dW50aW1lLlJlbW90ZU9iamVjdCIsICJSdW50aW1lLlByb3BlcnR5RGVzY3JpcHRvciIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZWJ1Z2dlci5GdW5jdGlvbkRl
dGFpbHMiLCAiRGVidWdnZXIuQ2FsbEZyYW1lIl0pCiAKK1NUUklDVF9FTkFCTEVEX0RPTUFJTlMg
PSBbIkRlYnVnZ2VyIiwgIlBhZ2UiXQorCiAKIGNtZGxpbmVfcGFyc2VyID0gb3B0cGFyc2UuT3B0
aW9uUGFyc2VyKCkKIGNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tb3V0cHV0X2hfZGlyIikK
QEAgLTU3OSw2ICs1ODEsMjggQEAgY2xhc3MgQ29tbWFuZFJldHVyblBhc3NNb2RlbDoKICAgICAg
ICAgZGVmIGdldF9zZXRfcmV0dXJuX2NvbmRpdGlvbigpOgogICAgICAgICAgICAgcmV0dXJuIE5v
bmUKIAorICAgIGNsYXNzIE9wdE91dHB1dDoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZh
cl90eXBlKToKKyAgICAgICAgICAgIHNlbGYudmFyX3R5cGUgPSB2YXJfdHlwZQorCisgICAgICAg
IGRlZiBnZXRfcmV0dXJuX3Zhcl90eXBlKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICJUeXBl
QnVpbGRlcjo6T3B0T3V0cHV0PCVzPiIgJSBzZWxmLnZhcl90eXBlCisKKyAgICAgICAgQHN0YXRp
Y21ldGhvZAorICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKKyAgICAg
ICAgICAgIHJldHVybiAiJiIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBn
ZXRfb3V0cHV0X3RvX3Jhd19leHByZXNzaW9uKCk6CisgICAgICAgICAgICByZXR1cm4gIiVzLmdl
dFZhbHVlKCkiCisKKyAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFyYW1ldGVyX3R5cGUoc2VsZik6
CisgICAgICAgICAgICByZXR1cm4gIlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8JXM+KiIgJSBzZWxm
LnZhcl90eXBlCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3NldF9y
ZXR1cm5fY29uZGl0aW9uKCk6CisgICAgICAgICAgICByZXR1cm4gIiVzLmlzQXNzaWduZWQoKSIK
KwogCiBjbGFzcyBUeXBlTW9kZWw6CiAgICAgY2xhc3MgUmVmUHRyQmFzZWQ6CkBAIC02MTcsOCAr
NjQxLDcgQEAgY2xhc3MgVHlwZU1vZGVsOgogCiAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAogICAgICAgICAgICAgICAgIGRlZiBnZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpOgot
ICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiB0byBiZSByZXBsYWNlZCB3aXRoIE9wdE91dHB1
dCBtb2RlbC4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbW1hbmRSZXR1cm5QYXNzTW9k
ZWwuQnlQb2ludGVyKGJhc2Vfc2VsZi50eXBlX25hbWUpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBDb21tYW5kUmV0dXJuUGFzc01vZGVsLk9wdE91dHB1dChiYXNlX3NlbGYudHlwZV9uYW1l
KQogCiAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgIGRlZiBn
ZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KCk6CkBAIC02NjgsOCArNjkxLDcgQEAgY2xhc3MgVHlw
ZU1vZGVsOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICAgICAgICAgIGRlZiBn
ZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbChzZWxmKToKLSAgICAgICAgICAgICAgICAjIEZJ
WE1FOiB0byBiZSByZXBsYWNlZCB3aXRoIE9wdE91dHB1dCBtb2RlbC4KLSAgICAgICAgICAgICAg
ICByZXR1cm4gQ29tbWFuZFJldHVyblBhc3NNb2RlbC5CeVBvaW50ZXIoc2VsZi5iYXNlLnR5cGVf
bmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29tbWFuZFJldHVyblBhc3NNb2RlbC5PcHRP
dXRwdXQoc2VsZi5iYXNlLnR5cGVfbmFtZSkKIAogICAgICAgICAgICAgZGVmIGdldF9pbnB1dF9w
YXJhbV90eXBlX3RleHQoc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJjb25zdCAlcyog
Y29uc3QiICUgc2VsZi5iYXNlLnR5cGVfbmFtZQpAQCAtMTY5NywxMyArMTcxOSwxNiBAQCAke2Zy
b250ZW5kRG9tYWluTWV0aG9kRGVjbGFyYXRpb25zfSAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwoSW5zcAogICAgIGlmICghJGFnZW50RmllbGQpCiAgICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKCIke2RvbWFpbk5hbWV9IGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKICRtZXRob2RPdXRDb2RlCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAkbWV0aG9k
SW5Db2RlCi0gICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBF
cnJvclN0cmluZyBlcnJvcjsKKyAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewog
ICAgICAgICAkYWdlbnRGaWVsZC0+JG1ldGhvZE5hbWUoJmVycm9yJGFnZW50Q2FsbFBhcmFtcyk7
CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwotJHtyZXNwb25zZUNvb2t9ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICIkZG9tYWluTmFtZS4kbWV0aG9kTmFtZSIpLCBwcm90b2NvbEVycm9ycywg
ZXJyb3IpOworICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ciske3Jlc3BvbnNlQ29va30g
ICAgICAgIH0KKyAgICB9CisgICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
IiwgIiRkb21haW5OYW1lLiRtZXRob2ROYW1lIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7CiB9
CiAiIiIpCiAKQEAgLTIxMTMsMTIgKzIxMzgsNDAgQEAgJG1ldGhvZHMKIAogI2luY2x1ZGUgIklu
c3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgPFBsYXRmb3JtU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBUeXBlQnVpbGRlciB7CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitjbGFzcyBPcHRPdXRwdXQgeworcHVibGljOgorICAgIE9wdE91dHB1dCgpIDogbV9h
c3NpZ25lZChmYWxzZSkgeyB9CisKKyAgICB2b2lkIG9wZXJhdG9yPShUIHZhbHVlKQorICAgIHsK
KyAgICAgICAgbV92YWx1ZSA9IHZhbHVlOworICAgICAgICBtX2Fzc2lnbmVkID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICBib29sIGlzQXNzaWduZWQoKSB7IHJldHVybiBtX2Fzc2lnbmVkOyB9CisKKyAg
ICBUIGdldFZhbHVlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0Fzc2lnbmVkKCkpOworICAg
ICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVCBtX3ZhbHVlOwor
ICAgIGJvb2wgbV9hc3NpZ25lZDsKKworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9wdE91dHB1
dCk7Cit9OworCisKIC8vIFRoaXMgY2xhc3MgcHJvdmlkZXMgIlRyYWl0cyIgdHlwZSBmb3IgdGhl
IGlucHV0IHR5cGUgVC4gSXQgaXMgcHJvZ3JhbW1lZCB1c2luZyBDKysgdGVtcGxhdGUgc3BlY2lh
bGl6YXRpb24KIC8vIHRlY2huaXF1ZS4gQnkgZGVmYXVsdCBpdCBzaW1wbHkgdGFrZXMgIkl0ZW1U
cmFpdHMiIHR5cGUgZnJvbSBULCBidXQgaXQgZG9lc24ndCB3b3JrIHdpdGggdGhlIGJhc2UgdHlw
ZXMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMjUwOSw2ICsyNTYyLDkgQEAgY2xhc3MgR2Vu
ZXJhdG9yOgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgcHJvY2Vzc19ldmVudChqc29uX2V2
ZW50LCBkb21haW5fbmFtZSwgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzKToKICAg
ICAgICAgZXZlbnRfbmFtZSA9IGpzb25fZXZlbnRbIm5hbWUiXQorCisgICAgICAgIHN0cmljdF9t
b2RlID0gZG9tYWluX25hbWUgaW4gU1RSSUNUX0VOQUJMRURfRE9NQUlOUworCiAgICAgICAgIHBh
cmFtZXRlcl9saXN0ID0gW10KICAgICAgICAgbWV0aG9kX2xpbmVfbGlzdCA9IFtdCiAgICAgICAg
IGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlzdCA9IFtdCkBAIC0yNTM1LDEzICsyNTkxLDIwIEBA
IGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgICAgICAgICAgICAgdHlwZV9tb2RlbCA9IHR5cGVf
bW9kZWwuZ2V0X29wdGlvbmFsKCkKICAgICAgICAgICAgICAgICAgICAgcmF3X3R5cGVfbW9kZWwg
PSByYXdfdHlwZV9tb2RlbC5nZXRfb3B0aW9uYWwoKQogCi0gICAgICAgICAgICAgICAgYW5ub3Rh
dGVkX3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4dChyYXdfdHlwZV9tb2RlbC5nZXRfaW5w
dXRfcGFyYW1fdHlwZV90ZXh0KCksIHR5cGVfbW9kZWwuZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4
dCgpKQorICAgICAgICAgICAgICAgIGlmIHN0cmljdF9tb2RlOgorICAgICAgICAgICAgICAgICAg
ICAjIEFsbCB0eXBlcyBhcmUgc3RyaWN0LgorICAgICAgICAgICAgICAgICAgICBhbm5vdGF0ZWRf
dHlwZSA9IHR5cGVfbW9kZWwuZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dCgpCisgICAgICAgICAg
ICAgICAgICAgIG1vZGVfdHlwZV9iaW5kaW5nID0gcGFyYW1fdHlwZV9iaW5kaW5nCisgICAgICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBBbGwgdHlwZXMgYXJlIHJhdy4K
KyAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5cGVf
dGV4dChyYXdfdHlwZV9tb2RlbC5nZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KCksIHR5cGVfbW9k
ZWwuZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dCgpKQorICAgICAgICAgICAgICAgICAgICBtb2Rl
X3R5cGVfYmluZGluZyA9IHJhd190eXBlX2JpbmRpbmcKIAogICAgICAgICAgICAgICAgIHBhcmFt
ZXRlcl9saXN0LmFwcGVuZCgiJXMgJXMiICUgKGFubm90YXRlZF90eXBlLCBwYXJhbWV0ZXJfbmFt
ZSkpCiAKICAgICAgICAgICAgICAgICBzZXR0ZXJfYXJndW1lbnQgPSByYXdfdHlwZV9tb2RlbC5n
ZXRfZXZlbnRfc2V0dGVyX2V4cHJlc3Npb25fcGF0dGVybigpICUgcGFyYW1ldGVyX25hbWUKLSAg
ICAgICAgICAgICAgICBpZiByYXdfdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVz
c2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1bWVudCA9IHJh
d190eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKSAlIHNl
dHRlcl9hcmd1bWVudAorICAgICAgICAgICAgICAgIGlmIG1vZGVfdHlwZV9iaW5kaW5nLmdldF9z
ZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6CisgICAgICAgICAgICAgICAgICAgIHNl
dHRlcl9hcmd1bWVudCA9IG1vZGVfdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVz
c2lvbl9wYXR0ZXJuKCkgJSBzZXR0ZXJfYXJndW1lbnQKIAogICAgICAgICAgICAgICAgIHNldHRl
cl9jb2RlID0gIiAgICBwYXJhbXNPYmplY3QtPnNldCVzKFwiJXNcIiwgJXMpO1xuIiAlIChzZXR0
ZXJfdHlwZSwgcGFyYW1ldGVyX25hbWUsIHNldHRlcl9hcmd1bWVudCkKICAgICAgICAgICAgICAg
ICBpZiBvcHRpb25hbDoKQEAgLTI1NjQsNiArMjYyNyw5IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAg
ICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIHByb2Nlc3NfY29tbWFuZChqc29uX2NvbW1hbmQsIGRv
bWFpbl9uYW1lLCBhZ2VudF9maWVsZF9uYW1lLCBhZ2VudF9pbnRlcmZhY2VfbmFtZSk6CiAgICAg
ICAgIGpzb25fY29tbWFuZF9uYW1lID0ganNvbl9jb21tYW5kWyJuYW1lIl0KKworICAgICAgICBz
dHJpY3RfbW9kZSA9IGRvbWFpbl9uYW1lIGluIFNUUklDVF9FTkFCTEVEX0RPTUFJTlMKKwogICAg
ICAgICBHZW5lcmF0b3IubWV0aG9kX25hbWVfZW51bV9saXN0LmFwcGVuZCgiICAgICAgICBrJXNf
JXNDbWQsIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kWyJuYW1lIl0pKQogICAgICAgICBH
ZW5lcmF0b3IubWV0aG9kX2hhbmRsZXJfbGlzdC5hcHBlbmQoIiAgICAgICAgICAgICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OiVzXyVzLCIgJSAoZG9tYWluX25hbWUsIGpzb25fY29t
bWFuZF9uYW1lKSkKICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2RlY2xhcmF0aW9u
X2xpc3QuYXBwZW5kKCIgICAgdm9pZCAlc18lcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7IiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kX25h
bWUpKQpAQCAtMjY1MiwyNCArMjcxOCw0MiBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgICAg
ICAgICAgaWYgb3B0aW9uYWw6CiAgICAgICAgICAgICAgICAgICAgIHR5cGVfbW9kZWwgPSB0eXBl
X21vZGVsLmdldF9vcHRpb25hbCgpCiAKLSAgICAgICAgICAgICAgICByYXdfdHlwZV9tb2RlbCA9
IHJldHVybl90eXBlX2JpbmRpbmcuZ2V0X3R5cGVfbW9kZWwoKQotICAgICAgICAgICAgICAgIGlm
IG9wdGlvbmFsOgotICAgICAgICAgICAgICAgICAgICByYXdfdHlwZV9tb2RlbCA9IHJhd190eXBl
X21vZGVsLmdldF9vcHRpb25hbCgpCi0KLSAgICAgICAgICAgICAgICBjb2RlID0gIiAgICAlcyBv
dXRfJXMgPSAlcztcbiIgJSAocmF3X3R5cGUuZ2V0X3Jhd190eXBlX21vZGVsKCkuZ2V0X2NvbW1h
bmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBlKCksIGpzb25fcmV0dXJu
X25hbWUsIGluaXRpYWxpemVyKQotICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgJXNvdXRfJXMi
ICUgKHJhd190eXBlLmdldF9vdXRwdXRfcGFzc19tb2RlbCgpLmdldF9hcmd1bWVudF9wcmVmaXgo
KSwganNvbl9yZXR1cm5fbmFtZSkKLSAgICAgICAgICAgICAgICBjb29rID0gIiAgICAgICAgcmVz
dWx0LT5zZXQlcyhcIiVzXCIsIG91dF8lcyk7XG4iICUgKHNldHRlcl90eXBlLCBqc29uX3JldHVy
bl9uYW1lLCBqc29uX3JldHVybl9uYW1lKQotICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgot
ICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBzdXBwb3J0IG9wdGlvbmFsIHByb3Blcmx5LiBQ
cm9iYWJseSBhbiBhZGRpdGlvbmFsIG91dHB1dCBwYXJhbWV0ZXIgc2hvdWxkIGJlIGluIGVhY2gg
Y2FzZS4KLSAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogcmVmYWN0b3IgdGhpcyBjb25kaXRp
b247IGl0J3MgYSBoYWNrIG5vdy4KLSAgICAgICAgICAgICAgICAgICAgdmFyX3R5cGVfdGV4dCA9
IHJhd190eXBlLmdldF9yYXdfdHlwZV9tb2RlbCgpLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21v
ZGVsKCkuZ2V0X3JldHVybl92YXJfdHlwZSgpCi0gICAgICAgICAgICAgICAgICAgIGlmIHZhcl90
eXBlX3RleHQgPT0gImJvb2wiIG9yIHZhcl90eXBlX3RleHQuc3RhcnRzd2l0aCgiUmVmUHRyPCIp
OgotICAgICAgICAgICAgICAgICAgICAgICAgY29vayA9ICgiICAgICAgICBpZiAob3V0XyVzKVxu
ICAgICIgJSBqc29uX3JldHVybl9uYW1lKSArIGNvb2sKLSAgICAgICAgICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvb2sgPSAiICAgICAgICAvLyBGSVhNRTogc3Vw
cG9ydCBvcHRpb25hbCBoZXJlLlxuIiArIGNvb2sKKyAgICAgICAgICAgICAgICBpZiBzdHJpY3Rf
bW9kZToKKyAgICAgICAgICAgICAgICAgICAgIyBBbGwgdHlwZXMgYXJlIHN0cmljdC4gVmFsdWVz
IGRvIG5vdCBoYXZlIGRlZmF1bHQgdmFsdWVzLgorICAgICAgICAgICAgICAgICAgICBjb2RlID0g
IiAgICAlcyBvdXRfJXM7XG4iICUgKHR5cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3Nf
bW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBlKCksIGpzb25fcmV0dXJuX25hbWUpCisgICAgICAg
ICAgICAgICAgICAgIHBhcmFtID0gIiwgJXNvdXRfJXMiICUgKHR5cGVfbW9kZWwuZ2V0X2NvbW1h
bmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZpeCgpLCBqc29u
X3JldHVybl9uYW1lKQorICAgICAgICAgICAgICAgICAgICB2YXJfbmFtZSA9ICJvdXRfJXMiICUg
anNvbl9yZXR1cm5fbmFtZQorICAgICAgICAgICAgICAgICAgICBzZXR0ZXJfYXJndW1lbnQgPSB0
eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X291dHB1dF90b19y
YXdfZXhwcmVzc2lvbigpICUgdmFyX25hbWUKKyAgICAgICAgICAgICAgICAgICAgaWYgcmV0dXJu
X3R5cGVfYmluZGluZy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgorICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0dGVyX2FyZ3VtZW50ID0gcmV0dXJuX3R5cGVfYmluZGlu
Zy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpICUgc2V0dGVyX2FyZ3VtZW50
CisKKyAgICAgICAgICAgICAgICAgICAgY29vayA9ICIgICAgICAgICAgICByZXN1bHQtPnNldCVz
KFwiJXNcIiwgJXMpO1xuIiAlIChzZXR0ZXJfdHlwZSwganNvbl9yZXR1cm5fbmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNldHRlcl9hcmd1bWVudCkKKworICAgICAgICAgICAgICAgICAgICBzZXRfY29uZGl0
aW9uX3BhdHRlcm4gPSB0eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCku
Z2V0X3NldF9yZXR1cm5fY29uZGl0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgc2V0X2Nv
bmRpdGlvbl9wYXR0ZXJuOgorICAgICAgICAgICAgICAgICAgICAgICAgY29vayA9ICgiICAgICAg
ICAgICAgaWYgKCVzKVxuICAgICIgJSAoc2V0X2NvbmRpdGlvbl9wYXR0ZXJuICUgdmFyX25hbWUp
KSArIGNvb2sKKyAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSB0eXBlX21vZGVs
LmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X291dHB1dF9wYXJhbWV0ZXJfdHlw
ZSgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBBbGwgdHlw
ZXMgYXJlIHJhdy4gVmFsdWVzIGFsd2F5cyBoYXZlIGRlZmF1bHQgdmFsdWVzLgorICAgICAgICAg
ICAgICAgICAgICByYXdfdHlwZV9tb2RlbCA9IHJldHVybl90eXBlX2JpbmRpbmcuZ2V0X3R5cGVf
bW9kZWwoKQorICAgICAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJhd190eXBlX21vZGVsID0gcmF3X3R5cGVfbW9kZWwuZ2V0X29wdGlvbmFsKCkK
KworICAgICAgICAgICAgICAgICAgICBjb2RlID0gIiAgICAlcyBvdXRfJXMgPSAlcztcbiIgJSAo
cmF3X3R5cGUuZ2V0X3Jhd190eXBlX21vZGVsKCkuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9k
ZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBlKCksIGpzb25fcmV0dXJuX25hbWUsIGluaXRpYWxpemVy
KQorICAgICAgICAgICAgICAgICAgICBwYXJhbSA9ICIsICVzb3V0XyVzIiAlIChyYXdfdHlwZS5n
ZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKS5nZXRfYXJndW1lbnRfcHJlZml4KCksIGpzb25fcmV0dXJu
X25hbWUpCisgICAgICAgICAgICAgICAgICAgIGNvb2sgPSAiICAgICAgICAgICAgcmVzdWx0LT5z
ZXQlcyhcIiVzXCIsIG91dF8lcyk7XG4iICUgKHNldHRlcl90eXBlLCBqc29uX3JldHVybl9uYW1l
LCBqc29uX3JldHVybl9uYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICMgRklYTUU6IHN1cHBvcnQgb3B0aW9uYWwgcHJvcGVybHku
IFByb2JhYmx5IGFuIGFkZGl0aW9uYWwgb3V0cHV0IHBhcmFtZXRlciBzaG91bGQgYmUgaW4gZWFj
aCBjYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogcmVmYWN0b3IgdGhpcyBj
b25kaXRpb247IGl0J3MgYSBoYWNrIG5vdy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcl90
eXBlX3RleHQgPSByYXdfdHlwZS5nZXRfcmF3X3R5cGVfbW9kZWwoKS5nZXRfY29tbWFuZF9yZXR1
cm5fcGFzc19tb2RlbCgpLmdldF9yZXR1cm5fdmFyX3R5cGUoKQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgdmFyX3R5cGVfdGV4dCA9PSAiYm9vbCIgb3IgdmFyX3R5cGVfdGV4dC5zdGFydHN3
aXRoKCJSZWZQdHI8Iik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vayA9ICgiICAg
ICAgICAgICAgaWYgKG91dF8lcylcbiAgICAiICUganNvbl9yZXR1cm5fbmFtZSkgKyBjb29rCisg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvb2sgPSAiICAgICAgICAgICAgLy8gRklYTUU6IHN1cHBvcnQgb3B0aW9uYWwgaGVyZS5cbiIg
KyBjb29rCiAKLSAgICAgICAgICAgICAgICBhbm5vdGF0ZWRfdHlwZSA9IGdldF9hbm5vdGF0ZWRf
dHlwZV90ZXh0KHJhd190eXBlLmdldF9yYXdfdHlwZV9tb2RlbCgpLmdldF9jb21tYW5kX3JldHVy
bl9wYXNzX21vZGVsKCkuZ2V0X3JldHVybl92YXJfdHlwZSgpICsgcmF3X3R5cGUuZ2V0X291dHB1
dF9wYXNzX21vZGVsKCkuZ2V0X3BhcmFtZXRlcl90eXBlX3N1ZmZpeCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9tb2RlbC5n
ZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9vdXRwdXRfcGFyYW1ldGVyX3R5cGUo
KSkKKyAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5
cGVfdGV4dChyYXdfdHlwZS5nZXRfcmF3X3R5cGVfbW9kZWwoKS5nZXRfY29tbWFuZF9yZXR1cm5f
cGFzc19tb2RlbCgpLmdldF9yZXR1cm5fdmFyX3R5cGUoKSArIHJhd190eXBlLmdldF9vdXRwdXRf
cGFzc19tb2RlbCgpLmdldF9wYXJhbWV0ZXJfdHlwZV9zdWZmaXgoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlX21vZGVs
LmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X291dHB1dF9wYXJhbWV0ZXJfdHlw
ZSgpKQogCiAgICAgICAgICAgICAgICAgcGFyYW1fbmFtZSA9ICJvdXRfJXMiICUganNvbl9yZXR1
cm5fbmFtZQogICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgpAQCAtMjY4NSw3ICsyNzY5LDcg
QEAgY2xhc3MgR2VuZXJhdG9yOgogCiAgICAgICAgICAgICBqc19yZXBseV9saXN0ID0gIlslc10i
ICUgam9pbihiYWNrZW5kX2pzX3JlcGx5X3BhcmFtX2xpc3QsICIsICIpCiAKLSAgICAgICAgICAg
IHJlc3BvbnNlX2Nvb2tfdGV4dCA9ICIgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkg
JiYgIWVycm9yLmxlbmd0aCgpKSB7XG4lcyAgICB9XG4iICUgam9pbihyZXNwb25zZV9jb29rX2xp
c3QsICIiKQorICAgICAgICAgICAgcmVzcG9uc2VfY29va190ZXh0ID0gam9pbihyZXNwb25zZV9j
b29rX2xpc3QsICIiKQogCiAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1l
bnRhdGlvbl9saXN0LmFwcGVuZChUZW1wbGF0ZXMuYmFja2VuZF9tZXRob2Quc3Vic3RpdHV0ZShO
b25lLAogICAgICAgICAgICAgZG9tYWluTmFtZT1kb21haW5fbmFtZSwgbWV0aG9kTmFtZT1qc29u
X2NvbW1hbmRfbmFtZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db250
ZW50U2VhcmNoVXRpbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFy
Y2hVdGlscy5jcHAKaW5kZXggZDBlMTI4YjIzODM4ZWYwOTQyY2I3Njg0ODg0YWU5YzllY2EyMzE1
OC4uOTI4MTgxMzdhZGZkZjEyNjEzYzI4YjBlMTYxN2JiZDQ0MDcyNzRlOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlscy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlscy5jcHAKQEAgLTkzLDEzICs5
MywxMSBAQCBzdGF0aWMgVmVjdG9yPHBhaXI8aW50LCBTdHJpbmc+ID4gZ2V0UmVndWxhckV4cHJl
c3Npb25NYXRjaGVzQnlMaW5lcyhjb25zdCBSZWd1bAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTZWFyY2hN
YXRjaChpbnQgbGluZU51bWJlciwgU3RyaW5nIGxpbmVDb250ZW50KQorc3RhdGljIFBhc3NSZWZQ
dHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaE1hdGNoPiBidWlsZE9iamVjdEZvclNlYXJjaE1h
dGNoKGludCBsaW5lTnVtYmVyLCBTdHJpbmcgbGluZUNvbnRlbnQpCiB7Ci0gICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBy
ZXN1bHQtPnNldE51bWJlcigibGluZU51bWJlciIsIGxpbmVOdW1iZXIpOwotICAgIHJlc3VsdC0+
c2V0U3RyaW5nKCJsaW5lQ29udGVudCIsIGxpbmVDb250ZW50KTsKLQotICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIFR5cGVCdWlsZGVyOjpQYWdlOjpTZWFyY2hNYXRjaDo6Y3JlYXRlKCkK
KyAgICAgICAgLnNldExpbmVOdW1iZXIobGluZU51bWJlcikKKyAgICAgICAgLnNldExpbmVDb250
ZW50KGxpbmVDb250ZW50KTsKIH0KIAogUmVndWxhckV4cHJlc3Npb24gY3JlYXRlU2VhcmNoUmVn
ZXgoY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGlzUmVnZXgp
CkBAIC0xMjcsMTUgKzEyNSwxNSBAQCBpbnQgY291bnRSZWd1bGFyRXhwcmVzc2lvbk1hdGNoZXMo
Y29uc3QgUmVndWxhckV4cHJlc3Npb24mIHJlZ2V4LCBjb25zdCBTdHJpbmcmCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gc2VhcmNoSW5UZXh0QnlM
aW5lcyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wg
Y2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCBpc1JlZ2V4KQorUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaE1hdGNoPiA+IHNlYXJjaEluVGV4dEJ5
TGluZXMoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29s
IGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wgaXNSZWdleCkKIHsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHJlc3VsdCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpTZWFyY2hNYXRjaD4gPiByZXN1
bHQgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaE1hdGNoPjo6
Y3JlYXRlKCk7CiAKICAgICBSZWd1bGFyRXhwcmVzc2lvbiByZWdleCA9IENvbnRlbnRTZWFyY2hV
dGlsczo6Y3JlYXRlU2VhcmNoUmVnZXgocXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOwog
ICAgIFZlY3RvcjxwYWlyPGludCwgU3RyaW5nPiA+IG1hdGNoZXMgPSBnZXRSZWd1bGFyRXhwcmVz
c2lvbk1hdGNoZXNCeUxpbmVzKHJlZ2V4LCB0ZXh0KTsKIAogICAgIGZvciAoVmVjdG9yPHBhaXI8
aW50LCBTdHJpbmc+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWF0Y2hlcy5iZWdpbigpOyBpdCAh
PSBtYXRjaGVzLmVuZCgpOyArK2l0KQotICAgICAgICByZXN1bHQtPnB1c2hWYWx1ZShidWlsZE9i
amVjdEZvclNlYXJjaE1hdGNoKGl0LT5maXJzdCwgaXQtPnNlY29uZCkpOworICAgICAgICByZXN1
bHQtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JTZWFyY2hNYXRjaChpdC0+Zmlyc3QsIGl0LT5zZWNv
bmQpKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvQ29udGVudFNlYXJjaFV0aWxzLmgKaW5kZXggZjRiMWVkYTJkMzVkYWU4ZGIxOTE5ZWQyZjNj
ZTA0OTJiN2E2YzBkYy4uZDJjMjcyNTM2NDBhYzdkMmY3YWY0N2I2YzVkZjA2M2IwMDlkYmZlYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlscy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbHMuaApAQCAt
MjksNiArMjksNyBAQAogI2lmbmRlZiBDb250ZW50U2VhcmNoVXRpbHNfaAogI2RlZmluZSBDb250
ZW50U2VhcmNoVXRpbHNfaAogCisjaW5jbHVkZSAiSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAt
NDIsNyArNDMsNyBAQCBuYW1lc3BhY2UgQ29udGVudFNlYXJjaFV0aWxzIHsKIAogUmVndWxhckV4
cHJlc3Npb24gY3JlYXRlU2VhcmNoUmVnZXgoY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCBjYXNl
U2Vuc2l0aXZlLCBib29sIGlzUmVnZXgpOwogaW50IGNvdW50UmVndWxhckV4cHJlc3Npb25NYXRj
aGVzKGNvbnN0IFJlZ3VsYXJFeHByZXNzaW9uJiwgY29uc3QgU3RyaW5nJik7Ci1QYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBzZWFyY2hJblRleHRCeUxpbmVzKGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCBjYXNlU2Vuc2l0aXZlLCBjb25zdCBib29s
IGlzUmVnZXgpOworUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBh
Z2U6OlNlYXJjaE1hdGNoPiA+IHNlYXJjaEluVGV4dEJ5TGluZXMoY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sIGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJv
b2wgaXNSZWdleCk7CiAKIFN0cmluZyBmaW5kU291cmNlVVJMKGNvbnN0IFN0cmluZyYgY29udGVu
dCk7CiBTdHJpbmcgZmluZFNvdXJjZU1hcFVSTChjb25zdCBTdHJpbmcmIGNvbnRlbnQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKaW5kZXggMTczMmE3ZWYz
ZDFjYzI3ZTg4MjZhYjgxNGRiMmYyNGMyOTQ3NzYwOC4uM2Y1MDBkNjhmNWZhYjI4ZjIxNGI5NmZl
MzNmNmVmZGZlZjBmYTBmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHQuY3BwCkBAIC02Miw3ICs2Miw3IEBAIEluamVjdGVkU2NyaXB0OjpJbmplY3RlZFNjcmlw
dChTY3JpcHRPYmplY3QgaW5qZWN0ZWRTY3JpcHRPYmplY3QsIEluc3BlY3RlZFN0YXRlCiB7CiB9
CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlKEVycm9yU3RyaW5nKiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBi
b29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZhbHVlLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiogcmVzdWx0LCBib29sKiB3YXNUaHJvd24pCit2b2lkIEluamVjdGVkU2Ny
aXB0OjpldmFsdWF0ZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhw
cmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExp
bmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3Vs
dCwgVHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKQogewogICAgIFNjcmlw
dEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX2luamVjdGVkU2NyaXB0T2JqZWN0LCAiZXZhbHVhdGUi
KTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChleHByZXNzaW9uKTsKQEAgLTcyLDcgKzcy
LDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcqIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24KICAgICBtYWtlRXZhbENhbGwoZXJyb3JTdHJp
bmcsIGZ1bmN0aW9uLCByZXN1bHQsIHdhc1Rocm93bik7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3Jp
cHQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIGFyZ3Vt
ZW50cywgYm9vbCByZXR1cm5CeVZhbHVlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0
LCBib29sKiB3YXNUaHJvd24pCit2b2lkIEluamVjdGVkU2NyaXB0OjpjYWxsRnVuY3Rpb25PbihF
cnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0
cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBhcmd1bWVudHMsIGJvb2wgcmV0dXJuQnlW
YWx1ZSwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCwgVHlwZUJ1aWxkZXI6Ok9wdE91
dHB1dDxib29sPiogd2FzVGhyb3duKQogewogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlv
bihtX2luamVjdGVkU2NyaXB0T2JqZWN0LCAiY2FsbEZ1bmN0aW9uT24iKTsKICAgICBmdW5jdGlv
bi5hcHBlbmRBcmd1bWVudChvYmplY3RJZCk7CkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBvYmplCiAgICAgbWFrZUV2YWxDYWxsKGVycm9yU3RyaW5nLCBmdW5jdGlvbiwgcmVz
dWx0LCB3YXNUaHJvd24pOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpldmFsdWF0ZU9uQ2Fs
bEZyYW1lKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU2NyaXB0VmFsdWUmIGNhbGxG
cmFtZXMsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lv
biwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEks
IGJvb2wgcmV0dXJuQnlWYWx1ZSwgUmVmUHRyPFJlbW90ZU9iamVjdD4qIHJlc3VsdCwgYm9vbCog
d2FzVGhyb3duKQordm9pZCBJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJv
clN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFNjcmlwdFZhbHVlJiBjYWxsRnJhbWVzLCBjb25z
dCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0
cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVy
bkJ5VmFsdWUsIFJlZlB0cjxSZW1vdGVPYmplY3Q+KiByZXN1bHQsIFR5cGVCdWlsZGVyOjpPcHRP
dXRwdXQ8Ym9vbD4qIHdhc1Rocm93bikKIHsKICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rp
b24obV9pbmplY3RlZFNjcmlwdE9iamVjdCwgImV2YWx1YXRlT25DYWxsRnJhbWUiKTsKICAgICBm
dW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsRnJhbWVzKTsKQEAgLTI1OCw3ICsyNTgsNyBAQCB2
b2lkIEluamVjdGVkU2NyaXB0OjptYWtlQ2FsbChTY3JpcHRGdW5jdGlvbkNhbGwmIGZ1bmN0aW9u
LCBSZWZQdHI8SW5zcGVjdG9yVmFsdQogICAgICAgICAqcmVzdWx0ID0gSW5zcGVjdG9yU3RyaW5n
OjpjcmVhdGUoIkV4Y2VwdGlvbiB3aGlsZSBtYWtpbmcgYSBjYWxsLiIpOwogfQogCi12b2lkIElu
amVjdGVkU2NyaXB0OjptYWtlRXZhbENhbGwoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTY3Jp
cHRGdW5jdGlvbkNhbGwmIGZ1bmN0aW9uLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb2JqZWN0
UmVzdWx0LCBib29sKiB3YXNUaHJvd24pCit2b2lkIEluamVjdGVkU2NyaXB0OjptYWtlRXZhbENh
bGwoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTY3JpcHRGdW5jdGlvbkNhbGwmIGZ1bmN0aW9u
LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb2JqZWN0UmVzdWx0LCBUeXBlQnVpbGRlcjo6T3B0
T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pCiB7CiAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBy
ZXN1bHQ7CiAgICAgbWFrZUNhbGwoZnVuY3Rpb24sICZyZXN1bHQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaAppbmRleCA4NGQ5YTc4ZWQzNmYwYzhhNTg1NmFjODA1
MjVjODUxMmRjNTc2YTY3Li5mYWQxNjQ1NjU5M2VhZjFmZjNlYWNmMDQ3NTAxMTJlYjI5MmE4NTVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaApAQCAtNjQsMTQg
KzY0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVkZUNvbW1hbmRM
aW5lQVBJLAogICAgICAgICAgICAgICAgICAgYm9vbCByZXR1cm5CeVZhbHVlLAogICAgICAgICAg
ICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCwKLSAgICAgICAgICAgICAg
ICAgIGJvb2wqIHdhc1Rocm93bik7CisgICAgICAgICAgICAgICAgICBUeXBlQnVpbGRlcjo6T3B0
T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pOwogICAgIHZvaWQgY2FsbEZ1bmN0aW9uT24oRXJyb3JT
dHJpbmcqLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCByZXR1cm5CeVZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wqIHdhc1Rocm93bik7CisgICAgICAgICAgICAgICAgICAgICAgICBUeXBlQnVpbGRlcjo6
T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pOwogICAgIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFt
ZShFcnJvclN0cmluZyosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNjcmlw
dFZhbHVlJiBjYWxsRnJhbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIGNhbGxGcmFtZUlkLApAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHJldHVybkJ5VmFsdWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0Piog
cmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiB3YXNUaHJvd24pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGJvb2w+
KiB3YXNUaHJvd24pOwogICAgIHZvaWQgZ2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nKiwg
Y29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpG
dW5jdGlvbkRldGFpbHM+KiByZXN1bHQpOwogICAgIHZvaWQgZ2V0UHJvcGVydGllcyhFcnJvclN0
cmluZyosIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVydGllcywgUmVmUHRy
PEluc3BlY3RvckFycmF5PiogcmVzdWx0KTsKICAgICBOb2RlKiBub2RlRm9yT2JqZWN0SWQoY29u
c3QgU3RyaW5nJiBvYmplY3RJZCk7CkBAIC0xMDUsNyArMTA1LDcgQEAgcHJpdmF0ZToKICAgICBi
b29sIGNhbkFjY2Vzc0luc3BlY3RlZFdpbmRvdygpIGNvbnN0OwogICAgIFNjcmlwdFZhbHVlIGNh
bGxGdW5jdGlvbldpdGhFdmFsRW5hYmxlZChTY3JpcHRGdW5jdGlvbkNhbGwmLCBib29sJiBoYWRF
eGNlcHRpb24pIGNvbnN0OwogICAgIHZvaWQgbWFrZUNhbGwoU2NyaXB0RnVuY3Rpb25DYWxsJiwg
UmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKLSAgICB2b2lkIG1ha2VFdmFsQ2FsbChF
cnJvclN0cmluZyosIFNjcmlwdEZ1bmN0aW9uQ2FsbCYsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
KiByZXN1bHQsIGJvb2wqIHdhc1Rocm93bik7CisgICAgdm9pZCBtYWtlRXZhbENhbGwoRXJyb3JT
dHJpbmcqLCBTY3JpcHRGdW5jdGlvbkNhbGwmLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVz
dWx0LCBUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pOwogICAgIFNjcmlw
dFZhbHVlIG5vZGVBc1NjcmlwdFZhbHVlKE5vZGUqKTsKIAogICAgIFNjcmlwdE9iamVjdCBtX2lu
amVjdGVkU2NyaXB0T2JqZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDliYTZiYzkzODkxMTNmYmYwYWQ1
OTEwYjZhMzNhMzA3MTFjZDAwNTkuLmNkOGM3M2E0MDc1ZjE2NTljMGIzY2JlYzM0NzI1NzNmYTBh
M2E1MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NRGVidWdnZXJBZ2VudC5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0
b3JBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
U3RhdGUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKQEAgLTU2LDEwICs1Nyw2IEBA
IGVudW0gRE9NQnJlYWtwb2ludFR5cGUgewogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGxpc3Rl
bmVyRXZlbnRDYXRlZ29yeVR5cGUgPSAibGlzdGVuZXI6IjsKIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBpbnN0cnVtZW50YXRpb25FdmVudENhdGVnb3J5VHlwZSA9ICJpbnN0cnVtZW50YXRpb246
IjsKIAotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRvbU5hdGl2ZUJyZWFrcG9pbnRUeXBlID0g
IkRPTSI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZXZlbnRMaXN0ZW5lck5hdGl2ZUJyZWFr
cG9pbnRUeXBlID0gIkV2ZW50TGlzdGVuZXIiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHho
ck5hdGl2ZUJyZWFrcG9pbnRUeXBlID0gIlhIUiI7Ci0KIGNvbnN0IHVpbnQzMl90IGluaGVyaXRh
YmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzayA9ICgxIDw8IFN1YnRyZWVNb2RpZmllZCk7CiBjb25z
dCBpbnQgZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQgPSAxNjsKIApAQCAtMTc1LDcgKzE3
Miw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGlkSW52YWxpZGF0ZVN0eWxl
QXR0cihOb2RlKiBub2RlKQogICAgIGlmIChoYXNCcmVha3BvaW50KG5vZGUsIEF0dHJpYnV0ZU1v
ZGlmaWVkKSkgewogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50
KG5vZGUsIEF0dHJpYnV0ZU1vZGlmaWVkLCBmYWxzZSwgZXZlbnREYXRhLmdldCgpKTsKLSAgICAg
ICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oZG9tTmF0aXZlQnJlYWtwb2ludFR5cGUs
IGV2ZW50RGF0YS5yZWxlYXNlKCkpOworICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJv
Z3JhbShJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OlJlYXNvbjo6RE9NLCBldmVudERhdGEu
cmVsZWFzZSgpKTsKICAgICB9CiB9CiAKQEAgLTI3NSw3ICsyNzIsNyBAQCB2b2lkIEluc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxJbnNlcnRET01Ob2RlKE5vZGUqLCBOb2RlKiBwYXJlbnQp
CiAgICAgaWYgKGhhc0JyZWFrcG9pbnQocGFyZW50LCBTdWJ0cmVlTW9kaWZpZWQpKSB7CiAgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQocGFyZW50LCBTdWJ0cmVl
TW9kaWZpZWQsIHRydWUsIGV2ZW50RGF0YS5nZXQoKSk7Ci0gICAgICAgIG1fZGVidWdnZXJBZ2Vu
dC0+YnJlYWtQcm9ncmFtKGRvbU5hdGl2ZUJyZWFrcG9pbnRUeXBlLCBldmVudERhdGEucmVsZWFz
ZSgpKTsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yRnJv
bnRlbmQ6OkRlYnVnZ2VyOjpSZWFzb246OkRPTSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CiAgICAg
fQogfQogCkBAIC0yODUsMTEgKzI4MiwxMSBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQ6OndpbGxSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiAgICAgaWYgKGhhc0JyZWFrcG9pbnQo
bm9kZSwgTm9kZVJlbW92ZWQpKSB7CiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2
ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIGRlc2NyaXB0aW9u
Rm9yRE9NRXZlbnQobm9kZSwgTm9kZVJlbW92ZWQsIGZhbHNlLCBldmVudERhdGEuZ2V0KCkpOwot
ICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShkb21OYXRpdmVCcmVha3BvaW50
VHlwZSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+YnJl
YWtQcm9ncmFtKEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6UmVhc29uOjpET00sIGV2ZW50
RGF0YS5yZWxlYXNlKCkpOwogICAgIH0gZWxzZSBpZiAocGFyZW50Tm9kZSAmJiBoYXNCcmVha3Bv
aW50KHBhcmVudE5vZGUsIFN1YnRyZWVNb2RpZmllZCkpIHsKICAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgZGVzY3JpcHRpb25Gb3JET01FdmVudChub2RlLCBTdWJ0cmVlTW9kaWZpZWQsIGZhbHNlLCBl
dmVudERhdGEuZ2V0KCkpOwotICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShk
b21OYXRpdmVCcmVha3BvaW50VHlwZSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIG1f
ZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6
UmVhc29uOjpET00sIGV2ZW50RGF0YS5yZWxlYXNlKCkpOwogICAgIH0KIH0KIApAQCAtMjk4LDcg
KzI5NSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbE1vZGlmeURPTUF0
dHIoRWxlbWVudCogZWxlbWVudCkKICAgICBpZiAoaGFzQnJlYWtwb2ludChlbGVtZW50LCBBdHRy
aWJ1dGVNb2RpZmllZCkpIHsKICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZlbnRE
YXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgZGVzY3JpcHRpb25Gb3JE
T01FdmVudChlbGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCwgZmFsc2UsIGV2ZW50RGF0YS5nZXQo
KSk7Ci0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKGRvbU5hdGl2ZUJyZWFr
cG9pbnRUeXBlLCBldmVudERhdGEucmVsZWFzZSgpKTsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50
LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpSZWFzb246OkRPTSwg
ZXZlbnREYXRhLnJlbGVhc2UoKSk7CiAgICAgfQogfQogCkBAIC0zNjcsOSArMzY0LDkgQEAgdm9p
ZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChi
b29sIGlzRE9NRXZlbnQsIGNvbnMKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERh
dGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGV2ZW50RGF0YS0+c2V0U3RyaW5n
KCJldmVudE5hbWUiLCBmdWxsRXZlbnROYW1lKTsKICAgICBpZiAoc3luY2hyb25vdXMpCi0gICAg
ICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKGV2ZW50TGlzdGVuZXJOYXRpdmVCcmVh
a3BvaW50VHlwZSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIG1fZGVidWdnZXJBZ2Vu
dC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6UmVhc29uOjpFdmVu
dExpc3RlbmVyLCBldmVudERhdGEucmVsZWFzZSgpKTsKICAgICBlbHNlCi0gICAgICAgIG1fZGVi
dWdnZXJBZ2VudC0+c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChldmVudExpc3RlbmVyTmF0
aXZlQnJlYWtwb2ludFR5cGUsIGV2ZW50RGF0YS5yZWxlYXNlKCkpOworICAgICAgICBtX2RlYnVn
Z2VyQWdlbnQtPnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRnJvbnRlbmQ6
OkRlYnVnZ2VyOjpSZWFzb246OkV2ZW50TGlzdGVuZXIsIGV2ZW50RGF0YS5yZWxlYXNlKCkpOwog
fQogCiB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnNldFhIUkJyZWFrcG9pbnQoRXJy
b3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHVybCkKQEAgLTQxNyw3ICs0MTQsNyBAQCB2b2lkIElu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxTZW5kWE1MSHR0cFJlcXVlc3QoY29uc3QgU3Ry
aW5nJiB1cmwpCiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBldmVudERhdGEtPnNldFN0cmluZygiYnJlYWtwb2lu
dFVSTCIsIGJyZWFrcG9pbnRVUkwpOwogICAgIGV2ZW50RGF0YS0+c2V0U3RyaW5nKCJ1cmwiLCB1
cmwpOwotICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKHhock5hdGl2ZUJyZWFrcG9p
bnRUeXBlLCBldmVudERhdGEucmVsZWFzZSgpKTsKKyAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFr
UHJvZ3JhbShJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OlJlYXNvbjo6WEhSLCBldmVudERh
dGEucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpjbGVh
cigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJB
Z2VudC5jcHAKaW5kZXggNjYwOWU2NGVkNmQxNTFkMDgzMTRmOTBhZWViMmI0MTUwOGFjMjg4MC4u
YTMzZGE4MmEzNGQ2ZWFmNTZjNGU0Y2ZhYzRmMTQzMTgyZmJjZWMyYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAtMjE0
LDEwICsyMTQsOSBAQCBzdGF0aWMgYm9vbCBtYXRjaGVzKGNvbnN0IFN0cmluZyYgdXJsLCBjb25z
dCBTdHJpbmcmIHBhdHRlcm4sIGJvb2wgaXNSZWdleCkKICAgICByZXR1cm4gdXJsID09IHBhdHRl
cm47CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJs
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyog
Y29uc3Qgb3B0aW9uYWxVUkwsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxVUkxSZWdleCwg
Y29uc3QgaW50KiBjb25zdCBvcHRpb25hbENvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nKiBjb25z
dCBvcHRpb25hbENvbmRpdGlvbiwgU3RyaW5nKiBvdXRCcmVha3BvaW50SWQsIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4mIGxvY2F0aW9uc1JhdykKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IGxpbmVOdW1i
ZXIsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxVUkwsIGNvbnN0IFN0cmluZyogY29uc3Qg
b3B0aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBjb25zdCBvcHRpb25hbENvbHVtbk51bWJlciwg
Y29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbENvbmRpdGlvbiwgVHlwZUJ1aWxkZXI6OkRlYnVn
Z2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpB
cnJheTxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiA+JiBsb2NhdGlvbnMpCiB7Ci0g
ICAgUmVmUHRyPEFycmF5PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+ID4gbG9jYXRp
b25zID0gQXJyYXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj46OmNyZWF0ZSgpOwot
ICAgIGxvY2F0aW9uc1JhdyA9IGxvY2F0aW9uczsKKyAgICBsb2NhdGlvbnMgPSBBcnJheTxUeXBl
QnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPjo6Y3JlYXRlKCk7CiAgICAgaWYgKCFvcHRpb25h
bFVSTCA9PSAhb3B0aW9uYWxVUkxSZWdleCkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSAiRWl0
aGVyIHVybCBvciB1cmxSZWdleCBtdXN0IGJlIHNwZWNpZmllZC4iOwogICAgICAgICByZXR1cm47
CkBAIC0yNjEsNyArMjYwLDcgQEAgc3RhdGljIGJvb2wgcGFyc2VMb2NhdGlvbihFcnJvclN0cmlu
ZyogZXJyb3JTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGxvY2EKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KEVy
cm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGxv
Y2F0aW9uLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsQ29uZGl0aW9uLCBTdHJpbmcqIG91
dEJyZWFrcG9pbnRJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGFjdHVhbExvY2F0aW9uKQor
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nKiBl
cnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGxvY2F0aW9uLCBjb25z
dCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsQ29uZGl0aW9uLCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6
OkJyZWFrcG9pbnRJZCogb3V0QnJlYWtwb2ludElkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVn
Z2VyOjpMb2NhdGlvbj4mIGFjdHVhbExvY2F0aW9uKQogewogICAgIFN0cmluZyBzY3JpcHRJZDsK
ICAgICBpbnQgbGluZU51bWJlcjsKQEAgLTM1Myw3ICszNTIsNyBAQCBzdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHNjcmlwdFRvSW5zcGVjdG9yT2JqZWN0KFNjcmlwdE9iamVjdCBz
Y3JpcHRPYgogICAgIHJldHVybiB2YWx1ZS0+YXNPYmplY3QoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25z
dCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBjb25z
dCBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSXNSZWdl
eCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgcmVzdWx0cykKK3ZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6c2VhcmNoSW5Db250ZW50KEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5n
JiBzY3JpcHRJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9u
YWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgsIFJlZlB0
cjxBcnJheTxXZWJDb3JlOjpUeXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoTWF0Y2g+ID4mIHJlc3Vs
dHMpCiB7CiAgICAgYm9vbCBpc1JlZ2V4ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9wdGlvbmFsSXNS
ZWdleCA6IGZhbHNlOwogICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNp
dGl2ZSA/ICpvcHRpb25hbENhc2VTZW5zaXRpdmUgOiBmYWxzZTsKQEAgLTM2NSw3ICszNjQsNyBA
QCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudChFcnJvclN0cmlu
ZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgcwogICAgICAgICAqZXJyb3IgPSAiTm8gc2NyaXB0IGZv
ciBpZDogIiArIHNjcmlwdElkOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
dFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQs
IGNvbnN0IFN0cmluZyYgbmV3Q29udGVudCwgY29uc3QgYm9vbCogY29uc3QgcHJldmlldywgUmVm
UHRyPEluc3BlY3RvckFycmF5PiYgbmV3Q2FsbEZyYW1lcywgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0U2NyaXB0U291cmNl
KEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU3RyaW5n
JiBuZXdDb250ZW50LCBjb25zdCBib29sKiBjb25zdCBwcmV2aWV3LCBSZWZQdHI8QXJyYXk8VHlw
ZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+ID4mIG5ld0NhbGxGcmFtZXMsIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpCiB7CiAgICAgYm9vbCBwcmV2aWV3T25seSA9IHByZXZp
ZXcgJiYgKnByZXZpZXc7CiAgICAgU2NyaXB0T2JqZWN0IHJlc3VsdE9iamVjdDsKQEAgLTM4Niwx
OSArMzg1LDE3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0U2NyaXB0U291cmNl
KEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzCiAgICAgICAgICplcnJvciA9ICJO
byBzY3JpcHQgZm9yIGlkOiAiICsgc2NyaXB0SWQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6Z2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZGV0YWlsc1Jh
dykKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0RnVuY3Rpb25EZXRhaWxzKEVycm9y
U3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiBkZXRhaWxzKQogewogICAgIElu
amVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmlu
amVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoZnVuY3Rpb25JZCk7CiAgICAgaWYgKGluamVjdGVkU2Ny
aXB0Lmhhc05vVmFsdWUoKSkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW5zcGVjdGVkIGZy
YW1lIGhhcyBnb25lIjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBSZWZQdHI8RnVuY3Rp
b25EZXRhaWxzPiBkZXRhaWxzOwogICAgIGluamVjdGVkU2NyaXB0LmdldEZ1bmN0aW9uRGV0YWls
cyhlcnJvclN0cmluZywgZnVuY3Rpb25JZCwgJmRldGFpbHMpOwotICAgIGRldGFpbHNSYXcgPSBk
ZXRhaWxzOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNjaGVkdWxlUGF1c2VP
bk5leHRTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGRhdGEpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNjaGVkdWxl
UGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpSZWFzb246
OkVudW0gYnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKQogewog
ICAgIGlmIChtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZCkKICAgICAgICAgcmV0dXJuOwpAQCAt
NDc4LDE2ICs0NzUsMTQgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9u
RXhjZXB0aW9uc0ltcGwoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLAogICAgICAgICBtX3N0YXRl
LT5zZXRMb25nKERlYnVnZ2VyQWdlbnRTdGF0ZTo6cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSwgcGF1
c2VTdGF0ZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNh
bGxGcmFtZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1l
SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBjb25zdCBvYmplY3RH
cm91cCwgY29uc3QgYm9vbCogY29uc3QgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29s
KiBjb25zdCByZXR1cm5CeVZhbHVlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0UmF3
LCBib29sKiB3YXNUaHJvd24pCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRl
T25DYWxsRnJhbWUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxG
cmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogY29uc3Qgb2Jq
ZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGNvbnN0IGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3Qg
Ym9vbCogY29uc3QgcmV0dXJuQnlWYWx1ZSwgUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+JiByZXN1bHQsIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Ro
cm93bikKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKGNhbGxGcmFtZUlkKTsKICAg
ICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7CiAgICAgICAgICplcnJvclN0cmlu
ZyA9ICJJbnNwZWN0ZWQgZnJhbWUgaGFzIGdvbmUiOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIFJlZlB0cjxSZW1vdGVPYmplY3Q+IHJlc3VsdDsKICAgICBpbmplY3RlZFNjcmlwdC5ldmFs
dWF0ZU9uQ2FsbEZyYW1lKGVycm9yU3RyaW5nLCBtX2N1cnJlbnRDYWxsU3RhY2ssIGNhbGxGcmFt
ZUlkLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6ICIiLCBpbmNsdWRl
Q29tbWFuZExpbmVBUEkgPyAqaW5jbHVkZUNvbW1hbmRMaW5lQVBJIDogZmFsc2UsIHJldHVybkJ5
VmFsdWUgPyAqcmV0dXJuQnlWYWx1ZSA6IGZhbHNlLCAmcmVzdWx0LCB3YXNUaHJvd24pOwotICAg
IHJlc3VsdFJhdyA9IHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxBcnJheTxUeXBlQnVpbGRlcjo6
RGVidWdnZXI6OkNhbGxGcmFtZT4gPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjdXJyZW50Q2Fs
bEZyYW1lcygpCkBAIC01NzEsNyArNTY2LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpkaWRQYXVzZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IFNjcmlwdFZhbHUKICAg
ICBpZiAoIWV4Y2VwdGlvbi5oYXNOb1ZhbHVlKCkpIHsKICAgICAgICAgSW5qZWN0ZWRTY3JpcHQg
aW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRG
b3Ioc2NyaXB0U3RhdGUpOwogICAgICAgICBpZiAoIWluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUo
KSkgewotICAgICAgICAgICAgbV9icmVha1JlYXNvbiA9ICJleGNlcHRpb24iOworICAgICAgICAg
ICAgbV9icmVha1JlYXNvbiA9IEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6UmVhc29uOjpF
eGNlcHRpb247CiAgICAgICAgICAgICBtX2JyZWFrQXV4RGF0YSA9IGluamVjdGVkU2NyaXB0Lndy
YXBPYmplY3QoZXhjZXB0aW9uLCAiYmFja3RyYWNlIik7CiAgICAgICAgIH0KICAgICB9CkBAIC01
OTMsNyArNTg4LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSgp
CiAgICAgbV9mcm9udGVuZC0+cmVzdW1lZCgpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmJyZWFrUHJvZ3JhbShjb25zdCBTdHJpbmcmIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZGF0YSkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJl
YWtQcm9ncmFtKEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6UmVhc29uOjpFbnVtIGJyZWFr
UmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSkKIHsKICAgICBtX2JyZWFr
UmVhc29uID0gYnJlYWtSZWFzb247CiAgICAgbV9icmVha0F1eERhdGEgPSBkYXRhOwpAQCAtNjIy
LDcgKzYxNyw3IEBAIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YXNzZXJ0UGF1c2VkKEVy
cm9yU3RyaW5nKiBlcnJvclN0cmluZykKIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpj
bGVhckJyZWFrRGV0YWlscygpCiB7Ci0gICAgbV9icmVha1JlYXNvbiA9ICJvdGhlciI7CisgICAg
bV9icmVha1JlYXNvbiA9IEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6UmVhc29uOjpPdGhl
cjsKICAgICBtX2JyZWFrQXV4RGF0YSA9IDA7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IGE2YWJmYTQzNTMwYTI5N2Vl
ZmQ2Mzg2ZThhZGZlMGQ0NTNjM2I5ZTQuLjQ2ZTNhMzMxNTEwYWRlNGRkODc5OWM1ZjA1ZTljYTY3
OTk2NGVkOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuaApAQCAtODIsMTggKzgyLDE4IEBAIHB1YmxpYzoKICAgICAvLyBQYXJ0IG9m
IHRoZSBwcm90b2NvbC4KICAgICB2aXJ0dWFsIHZvaWQgc2V0QnJlYWtwb2ludHNBY3RpdmUoRXJy
b3JTdHJpbmcqLCBib29sIGFjdGl2ZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QnJlYWtwb2lu
dEJ5VXJsKEVycm9yU3RyaW5nKiwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyogb3B0aW9u
YWxVUkwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBvcHRpb25h
bENvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nKiBvcHRpb25hbENvbmRpdGlvbiwgU3RyaW5nKiBi
cmVha3BvaW50SWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGxvY2F0aW9ucyk7Ci0gICAgdmly
dHVhbCB2b2lkIHNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYgbG9jYXRpb24sIGNvbnN0IFN0cmluZyogb3B0aW9uYWxDb25kaXRpb24sIFN0
cmluZyogYnJlYWtwb2ludElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgYWN0dWFsTG9jYXRp
b24pOworICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcqLCBp
bnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTCwgY29uc3QgU3RyaW5nKiBv
cHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIG9wdGlvbmFsQ29sdW1uTnVtYmVyLCBjb25zdCBT
dHJpbmcqIG9wdGlvbmFsQ29uZGl0aW9uLCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9p
bnRJZCosIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpM
b2NhdGlvbj4gPiYgbG9jYXRpb25zKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QnJlYWtwb2ludChF
cnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlvbiwgY29u
c3QgU3RyaW5nKiBvcHRpb25hbENvbmRpdGlvbiwgVHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpCcmVh
a3BvaW50SWQqLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4mIGFjdHVh
bExvY2F0aW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmlu
ZyosIGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGlu
dWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
IGxvY2F0aW9uKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJp
bmcqLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBi
b29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCwg
UmVmUHRyPEluc3BlY3RvckFycmF5PiYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JpcHRTb3Vy
Y2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTdHJpbmcmIG5l
d0NvbnRlbnQsIGNvbnN0IGJvb2wqIHByZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIG5l
d0NhbGxGcmFtZXMsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpOworICAgIHZpcnR1
YWwgdm9pZCBzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHNjcmlw
dElkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRp
dmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJh
eTxUeXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoTWF0Y2g+ID4mKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29u
c3QgU3RyaW5nJiBuZXdDb250ZW50LCBjb25zdCBib29sKiBwcmV2aWV3LCBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPiA+JiBuZXdDYWxs
RnJhbWVzLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KTsKICAgICB2aXJ0dWFsIHZv
aWQgZ2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwg
U3RyaW5nKiBzY3JpcHRTb3VyY2UpOwotICAgIHZpcnR1YWwgdm9pZCBnZXRGdW5jdGlvbkRldGFp
bHMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiBkZXRhaWxzKTsKLSAgICB2b2lkIHNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1l
bnQoY29uc3QgU3RyaW5nJiBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGRhdGEpOworICAgIHZpcnR1YWwgdm9pZCBnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcq
LCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6
OkZ1bmN0aW9uRGV0YWlscz4mKTsKKyAgICB2b2lkIHNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1l
bnQoSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpSZWFzb246OkVudW0gYnJlYWtSZWFzb24s
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKICAgICB2b2lkIGNhbmNlbFBhdXNl
T25OZXh0U3RhdGVtZW50KCk7Ci0gICAgdm9pZCBicmVha1Byb2dyYW0oY29uc3QgU3RyaW5nJiBi
cmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpOworICAgIHZvaWQg
YnJlYWtQcm9ncmFtKEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6UmVhc29uOjpFbnVtIGJy
ZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSk7CiAgICAgdmlydHVh
bCB2b2lkIHBhdXNlKEVycm9yU3RyaW5nKik7CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZShFcnJv
clN0cmluZyopOwogICAgIHZpcnR1YWwgdm9pZCBzdGVwT3ZlcihFcnJvclN0cmluZyopOwpAQCAt
MTA2LDggKzEwNiw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU3RyaW5nKiBvYmplY3RHcm91cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgYm9vbCogaW5jbHVkZUNvbW1hbmRMaW5lQVBJLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sKiB3YXNUaHJvd24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxib29sPiog
d2FzVGhyb3duKTsKIAogICAgIGNsYXNzIExpc3RlbmVyIHsKICAgICBwdWJsaWM6CkBAIC0xNTYs
NyArMTU2LDcgQEAgcHJpdmF0ZToKICAgICBTY3JpcHRzTWFwIG1fc2NyaXB0czsKICAgICBCcmVh
a3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkc01hcCBtX2JyZWFrcG9pbnRJZFRvRGVi
dWdTZXJ2ZXJCcmVha3BvaW50SWRzOwogICAgIFN0cmluZyBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJy
ZWFrcG9pbnRJZDsKLSAgICBTdHJpbmcgbV9icmVha1JlYXNvbjsKKyAgICBJbnNwZWN0b3JGcm9u
dGVuZDo6RGVidWdnZXI6OlJlYXNvbjo6RW51bSBtX2JyZWFrUmVhc29uOwogICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fYnJlYWtBdXhEYXRhOwogICAgIGJvb2wgbV9qYXZhU2NyaXB0UGF1
c2VTY2hlZHVsZWQ7CiAgICAgTGlzdGVuZXIqIG1fbGlzdGVuZXI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IDU1Mzg0ZjJhMjI1MjRj
OGNkYTAyOTZiY2RiYWViYmQ0ODk2ODkzYTIuLjZkZWY3ODhlZTA5MmYxNGYyMzhjMjEyYzRkYTRi
MjU2YzUxMGVkNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
YWdlQWdlbnQuY3BwCkBAIC0zOTUsMjkgKzM5NSwyOCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6bmF2aWdhdGUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHVybCkKICAgICBmcmFtZS0+
bG9hZGVyKCktPmNoYW5nZUxvY2F0aW9uKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLCBmcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKSwgIiIsIGZhbHNlLCBmYWxz
ZSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RG
b3JDb29raWUoY29uc3QgQ29va2llJiBjb29raWUpCitzdGF0aWMgUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6UGFnZTo6Q29va2llPiBidWlsZE9iamVjdEZvckNvb2tpZShjb25zdCBDb29raWUmIGNv
b2tpZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgdmFsdWUtPnNldFN0cmluZygibmFtZSIsIGNvb2tpZS5uYW1l
KTsKLSAgICB2YWx1ZS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIGNvb2tpZS52YWx1ZSk7Ci0gICAgdmFs
dWUtPnNldFN0cmluZygiZG9tYWluIiwgY29va2llLmRvbWFpbik7Ci0gICAgdmFsdWUtPnNldFN0
cmluZygicGF0aCIsIGNvb2tpZS5wYXRoKTsKLSAgICB2YWx1ZS0+c2V0TnVtYmVyKCJleHBpcmVz
IiwgY29va2llLmV4cGlyZXMpOwotICAgIHZhbHVlLT5zZXROdW1iZXIoInNpemUiLCAoY29va2ll
Lm5hbWUubGVuZ3RoKCkgKyBjb29raWUudmFsdWUubGVuZ3RoKCkpKTsKLSAgICB2YWx1ZS0+c2V0
Qm9vbGVhbigiaHR0cE9ubHkiLCBjb29raWUuaHR0cE9ubHkpOwotICAgIHZhbHVlLT5zZXRCb29s
ZWFuKCJzZWN1cmUiLCBjb29raWUuc2VjdXJlKTsKLSAgICB2YWx1ZS0+c2V0Qm9vbGVhbigic2Vz
c2lvbiIsIGNvb2tpZS5zZXNzaW9uKTsKLSAgICByZXR1cm4gdmFsdWU7CisgICAgcmV0dXJuIFR5
cGVCdWlsZGVyOjpQYWdlOjpDb29raWU6OmNyZWF0ZSgpCisgICAgICAgIC5zZXROYW1lKGNvb2tp
ZS5uYW1lKQorICAgICAgICAuc2V0VmFsdWUoY29va2llLnZhbHVlKQorICAgICAgICAuc2V0RG9t
YWluKGNvb2tpZS5kb21haW4pCisgICAgICAgIC5zZXRQYXRoKGNvb2tpZS5wYXRoKQorICAgICAg
ICAuc2V0RXhwaXJlcyhjb29raWUuZXhwaXJlcykKKyAgICAgICAgLnNldFNpemUoKGNvb2tpZS5u
YW1lLmxlbmd0aCgpICsgY29va2llLnZhbHVlLmxlbmd0aCgpKSkKKyAgICAgICAgLnNldEh0dHBP
bmx5KGNvb2tpZS5odHRwT25seSkKKyAgICAgICAgLnNldFNlY3VyZShjb29raWUuc2VjdXJlKQor
ICAgICAgICAuc2V0U2Vzc2lvbihjb29raWUuc2Vzc2lvbik7CiB9CiAKLXN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBidWlsZEFycmF5Rm9yQ29va2llcyhMaXN0SGFzaFNldDxDb29r
aWU+JiBjb29raWVzTGlzdCkKK3N0YXRpYyBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxU
eXBlQnVpbGRlcjo6UGFnZTo6Q29va2llPiA+IGJ1aWxkQXJyYXlGb3JDb29raWVzKExpc3RIYXNo
U2V0PENvb2tpZT4mIGNvb2tpZXNMaXN0KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
Y29va2llcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpDb29raWU+ID4gY29va2llcyA9IFR5cGVCdWls
ZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6UGFnZTo6Q29va2llPjo6Y3JlYXRlKCk7CiAKICAgICBM
aXN0SGFzaFNldDxDb29raWU+OjppdGVyYXRvciBlbmQgPSBjb29raWVzTGlzdC5lbmQoKTsKICAg
ICBMaXN0SGFzaFNldDxDb29raWU+OjppdGVyYXRvciBpdCA9IGNvb2tpZXNMaXN0LmJlZ2luKCk7
CiAgICAgZm9yIChpbnQgaSA9IDA7IGl0ICE9IGVuZDsgKytpdCwgaSsrKQotICAgICAgICBjb29r
aWVzLT5wdXNoT2JqZWN0KGJ1aWxkT2JqZWN0Rm9yQ29va2llKCppdCkpOworICAgICAgICBjb29r
aWVzLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yQ29va2llKCppdCkpOwogCiAgICAgcmV0dXJuIGNv
b2tpZXM7CiB9CkBAIC00NjYsNyArNDY1LDcgQEAgc3RhdGljIFZlY3RvcjxLVVJMPiBhbGxSZXNv
dXJjZXNVUkxzRm9yRnJhbWUoRnJhbWUqIGZyYW1lKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm9yU3RyaW5nKiwgUmVmUHRy
PEluc3BlY3RvckFycmF5PiYgY29va2llcywgV1RGOjpTdHJpbmcqIGNvb2tpZXNTdHJpbmcpCit2
b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyhFcnJvclN0cmluZyosIFJlZlB0cjxU
eXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OkNvb2tpZT4gPiYgY29va2llcywg
V1RGOjpTdHJpbmcqIGNvb2tpZXNTdHJpbmcpCiB7CiAgICAgLy8gSWYgd2UgY2FuIGdldCByYXcg
Y29va2llcy4KICAgICBMaXN0SGFzaFNldDxDb29raWU+IHJhd0Nvb2tpZXNMaXN0OwpAQCAtNTAy
LDEwICs1MDEsMTQgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJyb3JT
dHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBjb29raWUKICAgICAgICAgfQogICAgIH0K
IAotICAgIGlmIChyYXdDb29raWVzSW1wbGVtZW50ZWQpCisgICAgLy8gRklYTUU6IERvIG5vdCBy
ZXR1cm4gZW1wdHkgc3RyaW5nL2VtcHR5IGFycmF5LiBNYWtlIHJldHVybnMgb3B0aW9uYWwgaW5z
dGVhZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwODU1CisgICAg
aWYgKHJhd0Nvb2tpZXNJbXBsZW1lbnRlZCkgewogICAgICAgICBjb29raWVzID0gYnVpbGRBcnJh
eUZvckNvb2tpZXMocmF3Q29va2llc0xpc3QpOwotICAgIGVsc2UKKyAgICAgICAgKmNvb2tpZXNT
dHJpbmcgPSAiIjsKKyAgICB9IGVsc2UgeworICAgICAgICBjb29raWVzID0gVHlwZUJ1aWxkZXI6
OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpDb29raWU+OjpjcmVhdGUoKTsKICAgICAgICAgKmNv
b2tpZXNTdHJpbmcgPSBzdHJpbmdDb29raWVzTGlzdDsKKyAgICB9CiB9CiAKIHZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpkZWxldGVDb29raWUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGNv
b2tpZU5hbWUsIGNvbnN0IFN0cmluZyYgZG9tYWluKQpAQCAtNTIxLDcgKzUyNCw3IEBAIHZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpkZWxldGVDb29raWUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJp
bmcmIGNvb2tpZU5hbWUsIGNvCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
Z2V0UmVzb3VyY2VUcmVlKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG9i
amVjdCkKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRSZXNvdXJjZVRyZWUoRXJyb3JTdHJp
bmcqLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiYgb2JqZWN0
KQogewogICAgIG9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKG1fcGFnZS0+bWFpbkZy
YW1lKCkpOwogfQpAQCAtNTQ4LDkgKzU1MSw5IEBAIHN0YXRpYyBib29sIHRleHRDb250ZW50Rm9y
Q2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlLCBTdHJpbmcqCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5S
ZXNvdXJjZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsQ2Fz
ZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+JiByZXN1bHRzKQordm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaElu
UmVzb3VyY2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbENh
c2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPFR5
cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoTWF0Y2g+ID4mIHJlc3Vs
dHMpCiB7Ci0gICAgcmVzdWx0cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICByZXN1
bHRzID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpTZWFyY2hNYXRjaD46
OmNyZWF0ZSgpOwogCiAgICAgYm9vbCBpc1JlZ2V4ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9wdGlv
bmFsSXNSZWdleCA6IGZhbHNlOwogICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2Fz
ZVNlbnNpdGl2ZSA/ICpvcHRpb25hbENhc2VTZW5zaXRpdmUgOiBmYWxzZTsKQEAgLTU5MCw5ICs1
OTMsOSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9y
U2VhcmNoUmVzdWx0KGNvbnN0IFN0cmluZyYgZnJhbQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyos
IGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxDYXNlU2Vuc2l0
aXZlLCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4mIHJlc3VsdHMpCit2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJj
ZXMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IGJvb2wqIGNvbnN0IG9w
dGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxJc1JlZ2V4LCBS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpTZWFyY2hSZXN1bHQ+
ID4mIHJlc3VsdHMpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBzZWFyY2hSZXN1bHRz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJy
YXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaFJlc3VsdD4gPiBzZWFyY2hSZXN1bHRzID0gVHlw
ZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpTZWFyY2hSZXN1bHQ+OjpjcmVhdGUo
KTsKIAogICAgIGJvb2wgaXNSZWdleCA9IG9wdGlvbmFsSXNSZWdleCA/ICpvcHRpb25hbElzUmVn
ZXggOiBmYWxzZTsKICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENhc2VTZW5zaXRp
dmUgPyAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZlIDogZmFsc2U7CkBAIC04MTcsMzQgKzgyMCwzNCBA
QCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkUGFpbnQoKQogICAgIG1fbGFzdFBhaW50Q29u
dGV4dCA9IDA7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWUoRnJhbWUqIGZyYW1lKQorUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6UGFnZTo6RnJhbWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JG
cmFtZShGcmFtZSogZnJhbWUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZnJhbWVP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGZyYW1lT2JqZWN0LT5zZXRT
dHJpbmcoImlkIiwgZnJhbWVJZChmcmFtZSkpOworICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6UGFn
ZTo6RnJhbWU+IGZyYW1lT2JqZWN0ID0gVHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lOjpjcmVhdGUo
KQorICAgICAgICAgLnNldElkKGZyYW1lSWQoZnJhbWUpKQorICAgICAgICAgLnNldExvYWRlcklk
KGxvYWRlcklkKGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSkpCisgICAgICAgICAu
c2V0VXJsKGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSkKKyAgICAgICAgIC5zZXRN
aW1lVHlwZShmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlTUlNRVR5
cGUoKSk7CiAgICAgaWYgKGZyYW1lLT50cmVlKCktPnBhcmVudCgpKQotICAgICAgICBmcmFtZU9i
amVjdC0+c2V0U3RyaW5nKCJwYXJlbnRJZCIsIGZyYW1lSWQoZnJhbWUtPnRyZWUoKS0+cGFyZW50
KCkpKTsKKyAgICAgICAgZnJhbWVPYmplY3QtPnNldFBhcmVudElkKGZyYW1lSWQoZnJhbWUtPnRy
ZWUoKS0+cGFyZW50KCkpKTsKICAgICBpZiAoZnJhbWUtPm93bmVyRWxlbWVudCgpKSB7CiAgICAg
ICAgIFN0cmluZyBuYW1lID0gZnJhbWUtPm93bmVyRWxlbWVudCgpLT5nZXROYW1lQXR0cmlidXRl
KCk7CiAgICAgICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKICAgICAgICAgICAgIG5hbWUgPSBmcmFt
ZS0+b3duZXJFbGVtZW50KCktPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0cik7Ci0gICAg
ICAgIGZyYW1lT2JqZWN0LT5zZXRTdHJpbmcoIm5hbWUiLCBuYW1lKTsKKyAgICAgICAgZnJhbWVP
YmplY3QtPnNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIGZyYW1lT2JqZWN0LT5zZXRTdHJpbmco
InVybCIsIGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgZnJhbWVPYmpl
Y3QtPnNldFN0cmluZygibG9hZGVySWQiLCBsb2FkZXJJZChmcmFtZS0+bG9hZGVyKCktPmRvY3Vt
ZW50TG9hZGVyKCkpKTsKLSAgICBmcmFtZU9iamVjdC0+c2V0U3RyaW5nKCJzZWN1cml0eU9yaWdp
biIsIGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKLSAg
ICBmcmFtZU9iamVjdC0+c2V0U3RyaW5nKCJtaW1lVHlwZSIsIGZyYW1lLT5sb2FkZXIoKS0+ZG9j
dW1lbnRMb2FkZXIoKS0+cmVzcG9uc2VNSU1FVHlwZSgpKTsKKyAgICAvLyBGSVhNRTogTWFrZSB0
aGlzIGZpZWxkIG5vbi1vcHRpb25hbC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTgwODU3CisgICAgZnJhbWVPYmplY3QtPnNldFNlY3VyaXR5T3JpZ2luKGZyYW1lLT5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKIAogICAgIHJldHVybiBm
cmFtZU9iamVjdDsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclBh
Z2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZVRyZWUoRnJhbWUqIGZyYW1lKQorUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+IEluc3BlY3RvclBhZ2VBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JGcmFtZVRyZWUoRnJhbWUqIGZyYW1lKQogewotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZnJhbWVPYmplY3QgPSBidWlsZE9iamVjdEZvckZyYW1l
KGZyYW1lKTsKLSAgICByZXN1bHQtPnNldE9iamVjdCgiZnJhbWUiLCBmcmFtZU9iamVjdCk7Ci0K
ICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHN1YnJlc291cmNlcyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKLSAgICByZXN1bHQtPnNldEFycmF5KCJyZXNvdXJjZXMiLCBzdWJyZXNvdXJj
ZXMpOworICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+IHJl
c3VsdCA9IFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZTo6Y3JlYXRlKCkKKyAg
ICAgICAgIC5zZXRGcmFtZShmcmFtZU9iamVjdCkKKyAgICAgICAgIC5zZXRSZXNvdXJjZXMoc3Vi
cmVzb3VyY2VzKTsKIAogICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZSo+IGFsbFJlc291cmNlcyA9
IGNhY2hlZFJlc291cmNlc0ZvckZyYW1lKGZyYW1lKTsKICAgICBmb3IgKFZlY3RvcjxDYWNoZWRS
ZXNvdXJjZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5iZWdpbigpOyBpdCAh
PSBhbGxSZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JQYWdlQWdlbnQuaAppbmRleCBkZjk1ZWUyMGY1ODg1ZTBkOGM1NjFmMmY5MDFi
NzI4OWM1MGNkZTJkLi4xZTNlMTJhOTZjN2ZhZTJmY2YzZmM5Yjg2YTNiOWViM2IwZTRmNGE0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCkBAIC05
NSwxMiArOTUsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVTY3JpcHRUb0V2
YWx1YXRlT25Mb2FkKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVsb2FkKEVycm9yU3RyaW5nKiwgY29uc3QgYm9vbCogb3B0aW9uYWxJ
Z25vcmVDYWNoZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQp
OwogICAgIHZpcnR1YWwgdm9pZCBuYXZpZ2F0ZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYg
dXJsKTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0Q29va2llcyhFcnJvclN0cmluZyosIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4mIGNvb2tpZXMsIFdURjo6U3RyaW5nKiBjb29raWVzU3RyaW5nKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0Q29va2llcyhFcnJvclN0cmluZyosIFJlZlB0cjxUeXBlQnVpbGRl
cjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OkNvb2tpZT4gPiYgY29va2llcywgV1RGOjpTdHJp
bmcqIGNvb2tpZXNTdHJpbmcpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29raWUoRXJyb3JT
dHJpbmcqLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0cmluZyYgZG9tYWluKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVzb3VyY2VUcmVlKEVycm9yU3RyaW5nKiwgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVzb3VyY2VUcmVlKEVycm9y
U3RyaW5nKiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4mKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5nKiwgY29uc3Qg
U3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgU3RyaW5nKiBjb250ZW50LCBib29s
KiBiYXNlNjRFbmNvZGVkKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2VhcmNoSW5SZXNvdXJjZShFcnJv
clN0cmluZyosIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3Qg
Ym9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+Jik7Ci0gICAgdmly
dHVhbCB2b2lkIHNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgYm9vbCogY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaXNSZWdleCwgUmVmUHRyPElu
c3BlY3RvckFycmF5PiYpOworICAgIHZpcnR1YWwgdm9pZCBzZWFyY2hJblJlc291cmNlKEVycm9y
U3RyaW5nKiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
U3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBi
b29sKiBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxk
ZXI6OlBhZ2U6OlNlYXJjaE1hdGNoPiA+Jik7CisgICAgdmlydHVhbCB2b2lkIHNlYXJjaEluUmVz
b3VyY2VzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgYm9vbCogY2FzZVNlbnNp
dGl2ZSwgY29uc3QgYm9vbCogaXNSZWdleCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBl
QnVpbGRlcjo6UGFnZTo6U2VhcmNoUmVzdWx0PiA+Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldERv
Y3VtZW50Q29udGVudChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3Qg
U3RyaW5nJiBodG1sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2NyZWVuU2l6ZU92ZXJyaWRlKEVy
cm9yU3RyaW5nKiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
U2hvd1BhaW50UmVjdHMoRXJyb3JTdHJpbmcqLCBib29sIHNob3cpOwpAQCAtMTM3LDggKzEzNyw4
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRGcmFtZVZpZXdGaXhlZExheW91dChpbnQsIGludCk7
CiAgICAgdm9pZCBjbGVhckZyYW1lVmlld0ZpeGVkTGF5b3V0KCk7CiAKLSAgICBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JGcmFtZShGcmFtZSopOwotICAgIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFtZSopOwor
ICAgIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lPiBidWlsZE9iamVjdEZvckZy
YW1lKEZyYW1lKik7CisgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNv
dXJjZVRyZWU+IGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKik7CiAgICAgUGFnZSogbV9w
YWdlOwogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7
CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggNzQxN2Y4ZWMwMjA3OTQ4
ZWFkZmYxMGZhNjFjZjBmY2VjYzExNzE1YS4uNWNmYzk0ODExMmZhZjNmZjgyNTZjZDUzMjI0NGQ5
ZDJjMGQyY2VjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clJ1bnRpbWVBZ2VudC5jcHAKQEAgLTk3LDcgKzk3LDkgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OmV2YWx1YXRlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBl
eHAKICAgICB9CiAjZW5kaWYKIAotICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlKGVycm9yU3Ry
aW5nLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6ICIiLCBhc0Jvb2wo
aW5jbHVkZUNvbW1hbmRMaW5lQVBJKSwgYXNCb29sKHJldHVybkJ5VmFsdWUpLCAmcmVzdWx0LCB3
YXNUaHJvd24pOworICAgIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4gd2FzVGhyb3duT3B0
OworICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlKGVycm9yU3RyaW5nLCBleHByZXNzaW9uLCBv
YmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6ICIiLCBhc0Jvb2woaW5jbHVkZUNvbW1hbmRMaW5l
QVBJKSwgYXNCb29sKHJldHVybkJ5VmFsdWUpLCAmcmVzdWx0LCAmd2FzVGhyb3duT3B0KTsKKyAg
ICAqd2FzVGhyb3duID0gd2FzVGhyb3duT3B0LmlzQXNzaWduZWQoKSA/IHdhc1Rocm93bk9wdC5n
ZXRWYWx1ZSgpIDogZmFsc2U7CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAg
ICBpZiAocGF1c2VTdGF0ZUNoYW5nZWQpCkBAIC0xMTUsNyArMTE3LDEwIEBAIHZvaWQgSW5zcGVj
dG9yUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluCiAgICAgU3RyaW5nIGFyZ3VtZW50czsKICAgICBpZiAob3B0aW9uYWxBcmd1
bWVudHMpCiAgICAgICAgIGFyZ3VtZW50cyA9ICgqb3B0aW9uYWxBcmd1bWVudHMpLT50b0pTT05T
dHJpbmcoKTsKLSAgICBpbmplY3RlZFNjcmlwdC5jYWxsRnVuY3Rpb25PbihlcnJvclN0cmluZywg
b2JqZWN0SWQsIGV4cHJlc3Npb24sIGFyZ3VtZW50cywgYXNCb29sKHJldHVybkJ5VmFsdWUpLCAm
cmVzdWx0LCB3YXNUaHJvd24pOworCisgICAgVHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxib29sPiB3
YXNUaHJvd25PcHQ7CisgICAgaW5qZWN0ZWRTY3JpcHQuY2FsbEZ1bmN0aW9uT24oZXJyb3JTdHJp
bmcsIG9iamVjdElkLCBleHByZXNzaW9uLCBhcmd1bWVudHMsIGFzQm9vbChyZXR1cm5CeVZhbHVl
KSwgJnJlc3VsdCwgJndhc1Rocm93bk9wdCk7CisgICAgKndhc1Rocm93biA9IHdhc1Rocm93bk9w
dC5pc0Fzc2lnbmVkKCkgPyB3YXNUaHJvd25PcHQuZ2V0VmFsdWUoKSA6IGZhbHNlOwogfQogCiB2
b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IGJvb2wqIGNvbnN0IG93blBy
b3BlcnRpZXMsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIHJlc3VsdCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>