<?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>44338</bug_id>
          
          <creation_ts>2010-08-20 09:02:30 -0700</creation_ts>
          <short_desc>Web Inspector: inspector protocol should be switched from array to object based representation.</short_desc>
          <delta_ts>2010-08-23 07:38:21 -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>44416</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ilya Tikhonovsky">loislo</reporter>
          <assigned_to name="Ilya Tikhonovsky">loislo</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>267264</commentid>
    <comment_count>0</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-08-20 09:02:30 -0700</bug_when>
    <thetext>%subj%</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267346</commentid>
    <comment_count>1</comment_count>
      <attachid>64973</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-08-20 12:31:06 -0700</bug_when>
    <thetext>Created attachment 64973
[patch] initial version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267354</commentid>
    <comment_count>2</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-08-20 12:48:35 -0700</bug_when>
    <thetext>Ilya, could you attach a generated version of InspectorBackendStub after you patch?
Some minor comments after a glance.

WebCore/inspector/CodeGeneratorInspector.pm:527
&gt; +          this[command] = this.sendMessageToBackend.bind(this, commandInfo);
I think _registerDelegate should just take a single argument, commandInfo, and &quot;command&quot; is just &quot;commandInfo.command&quot;.

WebCore/inspector/CodeGeneratorInspector.pm:540
&gt; +          if (args.length == 1 &amp;&amp; typeof args[0] === &quot;function&quot;)
Nit: ===</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267373</commentid>
    <comment_count>3</comment_count>
      <attachid>64978</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-08-20 13:20:16 -0700</bug_when>
    <thetext>Created attachment 64978
sample: InspectorBackendDispatcher.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267374</commentid>
    <comment_count>4</comment_count>
      <attachid>64979</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-08-20 13:20:56 -0700</bug_when>
    <thetext>Created attachment 64979
sample: InspectorBackendStub.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267375</commentid>
    <comment_count>5</comment_count>
      <attachid>64980</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-08-20 13:21:31 -0700</bug_when>
    <thetext>Created attachment 64980
sample: RemoteInspectorFrontend.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267377</commentid>
    <comment_count>6</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-08-20 13:25:39 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Ilya, could you attach a generated version of InspectorBackendStub after you patch?
&gt; Some minor comments after a glance.

done


&gt; WebCore/inspector/CodeGeneratorInspector.pm:527
&gt; &gt; +          this[command] = this.sendMessageToBackend.bind(this, commandInfo);
&gt; I think _registerDelegate should just take a single argument, commandInfo, and &quot;command&quot; is just &quot;commandInfo.command&quot;.


&gt; WebCore/inspector/CodeGeneratorInspector.pm:540
&gt; &gt; +          if (args.length == 1 &amp;&amp; typeof args[0] === &quot;function&quot;)
&gt; Nit: ===</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267417</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-20 14:36:37 -0700</bug_when>
    <thetext>Attachment 64973 did not build on win:
Build output: http://queues.webkit.org/results/3742425</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267771</commentid>
    <comment_count>8</comment_count>
      <attachid>64973</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-08-22 23:25:47 -0700</bug_when>
    <thetext>Comment on attachment 64973
[patch] initial version.

WebCore/inspector/CodeGeneratorInspector.pm:295
 +      push(@function, &quot;    RefPtr&lt;InspectorObject&gt; requestMessageObject(requestMessageObjectRef);&quot;);
This is not needed.

WebCore/inspector/CodeGeneratorInspector.pm:511
 +              &quot;\\\&quot;arguments\\\&quot;: {$argumentNames}&quot; .
Unrelated to this issue, but it would be nice if we didn&apos;t escape quotes in the JSON strings in InspectorBackendStub.js but use single quotes instead( &quot;\&quot;property\&quot;&quot; -&gt; &apos;&quot;property&quot;&apos;)

WebCore/inspector/front-end/inspector.js:637
 +      WebInspector.log(&quot;Error: InspectorBackend.&quot; + message.command + &quot; failed.&quot;);
These messages should go into console.error not the Inspector&apos;s console.

WebCore/inspector/CodeGeneratorInspector.pm:354
 +      push(@function, &quot;        responseMessage-&gt;setString(\&quot;type\&quot;, \&quot;response\&quot;);&quot;);
It might make sense to extract these string constants and reuse them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267820</commentid>
    <comment_count>9</comment_count>
      <attachid>65096</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-08-23 03:18:15 -0700</bug_when>
    <thetext>Created attachment 65096
[patch] second iteration


&gt; WebCore/inspector/CodeGeneratorInspector.pm:527
&gt; &gt; +          this[command] = this.sendMessageToBackend.bind(this, commandInfo);
&gt; I think _registerDelegate should just take a single argument, commandInfo, and &quot;command&quot; is just &quot;commandInfo.command&quot;.

done.

&gt; WebCore/inspector/CodeGeneratorInspector.pm:540
&gt; &gt; +          if (args.length == 1 &amp;&amp; typeof args[0] === &quot;function&quot;)
&gt; Nit: ===

done.

&gt; WebCore/inspector/CodeGeneratorInspector.pm:295
&gt;  +      push(@function, &quot;    RefPtr&lt;InspectorObject&gt; requestMessageObject(requestMessageObjectRef);&quot;);
&gt; This is not needed.

done

&gt; WebCore/inspector/CodeGeneratorInspector.pm:511
&gt; +              &quot;\\\&quot;arguments\\\&quot;: {$argumentNames}&quot; .
&gt; Unrelated to this issue, but it would be nice if we didn&apos;t escape quotes in the JSON strings in InspectorBackendStub.js but use single quotes instead( &quot;\&quot;property\&quot;&quot; -&gt; &apos;&quot;property&quot;&apos;)

done

&gt; WebCore/inspector/front-end/inspector.js:637
&gt; +      WebInspector.log(&quot;Error: InspectorBackend.&quot; + message.command + &quot; failed.&quot;);
&gt; These messages should go into console.error not the Inspector&apos;s console.

done

&gt; WebCore/inspector/CodeGeneratorInspector.pm:354
&gt; +      push(@function, &quot;        responseMessage-&gt;setString(\&quot;type\&quot;, \&quot;response\&quot;);&quot;);
&gt; It might make sense to extract these string constants and reuse them.

done


InspectorFrontendClientLocal::setAttachedWindow was fixed.
WebInspector_syncDispatch was fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267821</commentid>
    <comment_count>10</comment_count>
      <attachid>65097</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-08-23 03:19:11 -0700</bug_when>
    <thetext>Created attachment 65097
sample: InspectorBackendStub.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267824</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-23 03:26:13 -0700</bug_when>
    <thetext>Attachment 65096 did not build on mac:
Build output: http://queues.webkit.org/results/3728546</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267825</commentid>
    <comment_count>12</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-08-23 03:27:27 -0700</bug_when>
    <thetext>Attachment 65096 did not build on qt:
Build output: http://queues.webkit.org/results/3789453</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267844</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-23 04:44:29 -0700</bug_when>
    <thetext>Attachment 65096 did not build on chromium:
Build output: http://queues.webkit.org/results/3775586</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267851</commentid>
    <comment_count>14</comment_count>
      <attachid>65103</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-08-23 04:58:00 -0700</bug_when>
    <thetext>Created attachment 65103
[patch] second iteration. Rebaselined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267853</commentid>
    <comment_count>15</comment_count>
      <attachid>65103</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-08-23 05:06:41 -0700</bug_when>
    <thetext>Comment on attachment 65103
[patch] second iteration. Rebaselined.

WebCore/inspector/front-end/inspector.js:638
 +      console.log(&quot;Error: InspectorBackend.&quot; + messageObject.command + &quot; failed.&quot;);
console.log -&gt; console.error</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267856</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-23 05:13:01 -0700</bug_when>
    <thetext>Attachment 65096 did not build on gtk:
Build output: http://queues.webkit.org/results/3787410</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267858</commentid>
    <comment_count>17</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-08-23 05:15:04 -0700</bug_when>
    <thetext>Committed r65803
	M	WebCore/ChangeLog
	M	WebCore/inspector/CodeGeneratorInspector.pm
	M	WebCore/inspector/InspectorController.cpp
	M	WebCore/inspector/InspectorFrontendClientLocal.cpp
	M	WebCore/inspector/InspectorValues.h
	M	WebCore/inspector/Inspector.idl
	M	WebCore/inspector/front-end/inspector.js
	M	WebCore/inspector/front-end/Callback.js
	M	WebCore/inspector/InspectorController.h
r65803 = f2ffcc11e3506172e312f7f20d457460ec35a38c (refs/remotes/trunk)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267890</commentid>
    <comment_count>18</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-08-23 07:21:14 -0700</bug_when>
    <thetext>With fixed windows build

Committed r65809
	M	WebCore/ChangeLog
	M	WebCore/inspector/CodeGeneratorInspector.pm
	M	WebCore/inspector/InspectorController.cpp
	M	WebCore/inspector/InspectorFrontendClientLocal.cpp
	M	WebCore/inspector/InspectorValues.h
	M	WebCore/inspector/Inspector.idl
	M	WebCore/inspector/front-end/inspector.js
	M	WebCore/inspector/front-end/Callback.js
	M	WebCore/inspector/InspectorController.h
r65809 = 12044a8f1a0b8a82f217ae39411f717045555612 (refs/remotes/trunk)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267898</commentid>
    <comment_count>19</comment_count>
      <attachid>65117</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-08-23 07:38:21 -0700</bug_when>
    <thetext>Created attachment 65117
actually landed</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64973</attachid>
            <date>2010-08-20 12:31:06 -0700</date>
            <delta_ts>2010-08-23 03:18:15 -0700</delta_ts>
            <desc>[patch] initial version.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>30357</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MjE4ZGQ3YS4uOGJhNDhhNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOC0yMCAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViSW5zcGVjdG9yOiBpbnNwZWN0b3IgcHJvdG9jb2wgc2hv
dWxkIGJlIHN3aXRjaGVkIGZyb20gYXJyYXkgYmFzZWQKKyAgICAgICAgbWVzc2FnZSBmb3JtYXQg
dG8gb2JqZWN0IGJhc2VkIG1lc3NhZ2UgZm9ybWF0LgorICAgICAgICBBbG1vc3QgYWxsIHRoZSBw
cm90b2NvbCByZWxhdGVkIHRoaW5ncyBpcyBnZW5lcmF0ZWQgYnkgQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci5wbQorICAgICAgICBJdCB3YXMgY2hhbmdlZCBhIGJpdC4gQXMgcmVzdWx0IEluc3BlY3Rv
ckJhY2tlbmRTdHViLmpzIHdyYXBzIHRoZQorICAgICAgICBjYWxscyBpbnRvIFJlcXVlc3Qgb2Jq
ZWN0cy4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIHVud3JhcHMKKyAgICAgICAgdGhl
c2Ugb2JqZWN0cyBhbmQgY2FsbHMgY29ycmVzcG9uZGluZyBhZ2VudHMuIFRoZXNlIHR3byBmaWxl
cyBhbmQKKyAgICAgICAgUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQgYXJlIGdlbmVyYXRlZCBieSBD
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCisgICAgICAgIERpc3BhdGNoaW5nIHBhcnQgb2YgV2Vi
SW5zcGVjdG9yIGFsc28gd2FzIGFkanVzdGVkIGZvciBoYW5kbGluZyBFdmVudAorICAgICAgICBv
YmplY3RzIHByb2R1Y2VkIGJ5IFJlbW90ZUluc3BlY3RvckZyb250ZW5kLmNwcCBhbmQgUmVzcG9u
c2Ugb2JqZWN0cworICAgICAgICBwcm9kdWNlZCBieSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5jcHAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0
MzM4CisKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JPYmplY3Q6OmZpbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ2Fs
bGJhY2suanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvdG90eXBlLnByb2Nl
c3NSZXNwb25zZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IubG9hZGVkLldlYkluc3BlY3Rvci5zb2NrZXQub25tZXNz
YWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5kaXNwYXRjaCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3Jfc3luY0Rpc3BhdGNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5kaXNwYXRjaE1lc3Nh
Z2VGcm9tQmFja2VuZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IucmVwb3J0UHJvdG9jb2xFcnJv
cik6CisKIDIwMTAtMDgtMTkgIFZpbmNlbnQgU2NoZWliICA8c2NoZWliQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gYi9XZWJDb3JlL2luc3BlY3Rvci9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCmluZGV4IGNkOTA1MmEuLmVjNzQ5MjggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQpAQCAtMTcsMjYgKzE3LDI2
IEBAICR0eXBlVHJhbnNmb3JteyJJbnNwZWN0b3JDbGllbnQifSA9IHsKICR0eXBlVHJhbnNmb3Jt
eyJCYWNrZW5kIn0gPSB7CiAgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JCYWNrZW5kIiwKICAg
ICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQmFja2VuZC5oIiwKLSAgICAiaGFuZGxlckFjY2Vzc29y
IiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JCYWNrZW5kKCkiLAorICAgICJk
b21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQmFja2Vu
ZCgpIiwKIH07CiAkdHlwZVRyYW5zZm9ybXsiQ29udHJvbGxlciJ9ID0gewogICAgICJmb3J3YXJk
SGVhZGVyIiA9PiAiSW5zcGVjdG9yQ29udHJvbGxlci5oIiwKLSAgICAiaGFuZGxlckFjY2Vzc29y
IiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyIiwKKyAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJt
X2luc3BlY3RvckNvbnRyb2xsZXIiLAogfTsKICR0eXBlVHJhbnNmb3JteyJEZWJ1ZyJ9ID0gewog
ICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRGVidWdnZXJBZ2VudCIsCiAgICAgImhlYWRlciIg
PT4gIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIsCi0gICAgImhhbmRsZXJBY2Nlc3NvciIgPT4g
Im1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGVidWdnZXJBZ2VudCgpIiwKKyAgICAiZG9tYWluQWNj
ZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPmRlYnVnZ2VyQWdlbnQoKSIsCiB9Owog
JHR5cGVUcmFuc2Zvcm17IkRPTSJ9ID0gewogICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRE9N
QWdlbnQiLAogICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JET01BZ2VudC5oIiwKLSAgICAiaGFu
ZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpIiwKKyAg
ICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCki
LAogfTsKICR0eXBlVHJhbnNmb3JteyJBcHBsaWNhdGlvbkNhY2hlIn0gPSB7CiAgICAgImZvcndh
cmQiID0+ICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQiLAogICAgICJoZWFkZXIiID0+
ICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCIsCi0gICAgImhhbmRsZXJBY2Nlc3Nv
ciIgPT4gIm1faW5zcGVjdG9yQ29udHJvbGxlci0+YXBwbGljYXRpb25DYWNoZUFnZW50KCkiLAor
ICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQ29udHJvbGxlci0+YXBwbGljYXRp
b25DYWNoZUFnZW50KCkiLAogfTsKICR0eXBlVHJhbnNmb3JteyJGcm9udGVuZCJ9ID0gewogICAg
ICJmb3J3YXJkIiA9PiAiUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQiLApAQCAtNTEsNyArNTEsNyBA
QCAkdHlwZVRyYW5zZm9ybXsiT2JqZWN0In0gPSB7CiAgICAgImRlZmF1bHRWYWx1ZSIgPT4gIklu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkiLAogICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yT2Jq
ZWN0IiwKICAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yVmFsdWVzLmgiLAotICAgICJhY2Nlc3Nv
clN1ZmZpeCIgPT4gIk9iamVjdCIKKyAgICAiSlNPTlR5cGUiID0+ICJPYmplY3QiCiB9OwogJHR5
cGVUcmFuc2Zvcm17IkFycmF5In0gPSB7CiAgICAgInBhcmFtIiA9PiAiUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4iLApAQCAtNTksNyArNTksNyBAQCAkdHlwZVRyYW5zZm9ybXsiQXJyYXkifSA9
IHsKICAgICAiZGVmYXVsdFZhbHVlIiA9PiAiSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpIiwKICAg
ICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckFycmF5IiwKICAgICAiaGVhZGVyIiA9PiAiSW5zcGVj
dG9yVmFsdWVzLmgiLAotICAgICJhY2Nlc3NvclN1ZmZpeCIgPT4gIkFycmF5IgorICAgICJKU09O
VHlwZSIgPT4gIkFycmF5IgogfTsKICR0eXBlVHJhbnNmb3JteyJWYWx1ZSJ9ID0gewogICAgICJw
YXJhbSIgPT4gIlBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IiwKQEAgLTY3LDE0ICs2NywxNCBA
QCAkdHlwZVRyYW5zZm9ybXsiVmFsdWUifSA9IHsKICAgICAiZGVmYXVsdFZhbHVlIiA9PiAiSW5z
cGVjdG9yVmFsdWU6Om51bGwoKSIsCiAgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JWYWx1ZSIs
CiAgICAgImhlYWRlciIgPT4gIkluc3BlY3RvclZhbHVlcy5oIiwKLSAgICAiYWNjZXNzb3JTdWZm
aXgiID0+ICJWYWx1ZSIKKyAgICAiSlNPTlR5cGUiID0+ICJWYWx1ZSIKIH07CiAkdHlwZVRyYW5z
Zm9ybXsiU3RyaW5nIn0gPSB7CiAgICAgInBhcmFtIiA9PiAiY29uc3QgU3RyaW5nJiIsCiAgICAg
InZhcmlhYmxlIiA9PiAiU3RyaW5nIiwKICAgICAiZm9yd2FyZEhlYWRlciIgPT4gInd0Zi9Gb3J3
YXJkLmgiLAogICAgICJoZWFkZXIiID0+ICJQbGF0Zm9ybVN0cmluZy5oIiwKLSAgICAiYWNjZXNz
b3JTdWZmaXgiID0+ICJTdHJpbmciCisgICAgIkpTT05UeXBlIiA9PiAiU3RyaW5nIgogfTsKICR0
eXBlVHJhbnNmb3JteyJsb25nIn0gPSB7CiAgICAgInBhcmFtIiA9PiAibG9uZyIsCkBAIC04Miw3
ICs4Miw3IEBAICR0eXBlVHJhbnNmb3JteyJsb25nIn0gPSB7CiAgICAgImRlZmF1bHRWYWx1ZSIg
PT4gIjAiLAogICAgICJmb3J3YXJkIiA9PiAiIiwKICAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAi
YWNjZXNzb3JTdWZmaXgiID0+ICJOdW1iZXIiCisgICAgIkpTT05UeXBlIiA9PiAiTnVtYmVyIgog
fTsKICR0eXBlVHJhbnNmb3JteyJpbnQifSA9IHsKICAgICAicGFyYW0iID0+ICJpbnQiLApAQCAt
OTAsNyArOTAsNyBAQCAkdHlwZVRyYW5zZm9ybXsiaW50In0gPSB7CiAgICAgImRlZmF1bHRWYWx1
ZSIgPT4gIjAiLAogICAgICJmb3J3YXJkIiA9PiAiIiwKICAgICAiaGVhZGVyIiA9PiAiIiwKLSAg
ICAiYWNjZXNzb3JTdWZmaXgiID0+ICJOdW1iZXIiLAorICAgICJKU09OVHlwZSIgPT4gIk51bWJl
ciIsCiB9OwogJHR5cGVUcmFuc2Zvcm17InVuc2lnbmVkIGxvbmcifSA9IHsKICAgICAicGFyYW0i
ID0+ICJ1bnNpZ25lZCBsb25nIiwKQEAgLTk4LDcgKzk4LDcgQEAgJHR5cGVUcmFuc2Zvcm17InVu
c2lnbmVkIGxvbmcifSA9IHsKICAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMHUiLAogICAgICJmb3J3
YXJkIiA9PiAiIiwKICAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAiYWNjZXNzb3JTdWZmaXgiID0+
ICJOdW1iZXIiCisgICAgIkpTT05UeXBlIiA9PiAiTnVtYmVyIgogfTsKICR0eXBlVHJhbnNmb3Jt
eyJ1bnNpZ25lZCBpbnQifSA9IHsKICAgICAicGFyYW0iID0+ICJ1bnNpZ25lZCBpbnQiLApAQCAt
MTA2LDcgKzEwNiw3IEBAICR0eXBlVHJhbnNmb3JteyJ1bnNpZ25lZCBpbnQifSA9IHsKICAgICAi
ZGVmYXVsdFZhbHVlIiA9PiAiMHUiLAogICAgICJmb3J3YXJkIiA9PiAiIiwKICAgICAiaGVhZGVy
IiA9PiAiIiwKLSAgICAiYWNjZXNzb3JTdWZmaXgiID0+ICJOdW1iZXIiCisgICAgIkpTT05UeXBl
IiA9PiAiTnVtYmVyIgogfTsKICR0eXBlVHJhbnNmb3JteyJib29sZWFuIn0gPSB7CiAgICAgInBh
cmFtIiA9PiAiYm9vbCIsCkBAIC0xMTQsNyArMTE0LDcgQEAgJHR5cGVUcmFuc2Zvcm17ImJvb2xl
YW4ifSA9IHsKICAgICAiZGVmYXVsdFZhbHVlIiA9PiAiZmFsc2UiLAogICAgICJmb3J3YXJkIiA9
PiAiIiwKICAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAiYWNjZXNzb3JTdWZmaXgiID0+ICJCb29s
IgorICAgICJKU09OVHlwZSIgPT4gIkJvb2wiCiB9OwogJHR5cGVUcmFuc2Zvcm17InZvaWQifSA9
IHsKICAgICAiZm9yd2FyZCIgPT4gIiIsCkBAIC0xNTcsMTAgKzE1Nyw2IEBAIG15IEBmcm9udGVu
ZENvbnN0YW50RGVjbGFyYXRpb25zOwogbXkgQGZyb250ZW5kQ29uc3RhbnREZWZpbml0aW9uczsK
IG15ICRmcm9udGVuZEZvb3RlcjsKIAotbXkgJGNhbGxJZCA9IG5ldyBkb21TaWduYXR1cmUoKTsg
IyBpdCBpcyBqdXN0IHN0cnVjdHVyZSBmb3IgZGVzY3JpYmluZyBwYXJhbWV0ZXJzIGZyb20gSURM
U3RydWN0dXJlLnBtLgotJGNhbGxJZC0+dHlwZSgibG9uZyIpOwotJGNhbGxJZC0+bmFtZSgiY2Fs
bElkIik7Ci0KICMgRGVmYXVsdCBjb25zdHJ1Y3Rvcgogc3ViIG5ldwogewpAQCAtMjE3LDkgKzIx
Myw4IEBAIHN1YiBHZW5lcmF0ZUludGVyZmFjZQogICAgICRiYWNrZW5kVHlwZXN7IkNvbnRyb2xs
ZXIifSA9IDE7CiAgICAgJGJhY2tlbmRUeXBlc3siSW5zcGVjdG9yQ2xpZW50In0gPSAxOwogICAg
ICRiYWNrZW5kVHlwZXN7IlBhc3NSZWZQdHIifSA9IDE7Ci0gICAgJGJhY2tlbmRUeXBlc3siQXJy
YXkifSA9IDE7CisgICAgJGJhY2tlbmRUeXBlc3siT2JqZWN0In0gPSAxOwogCi0gICAgcHVzaChA
YmFja2VuZE1ldGhvZHNJbXBsLCBnZW5lcmF0ZUJhY2tlbmRQcml2YXRlRnVuY3Rpb25zKCkpOwog
ICAgIHB1c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgZ2VuZXJhdGVCYWNrZW5kTWVzc2FnZVBhcnNl
cigpKTsKICAgICBnZW5lcmF0ZUZ1bmN0aW9ucygkaW50ZXJmYWNlKTsKIApAQCAtMjU0LDcgKzI0
OSw2IEBAIHN1YiBnZW5lcmF0ZUZyb250ZW5kRnVuY3Rpb24KICAgICBteSBAYXJnc0ZpbHRlcmVk
ID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJvdXQiLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30p
OyAjIGp1c3Qga2VlcCBvbmx5IG91dCBwYXJhbWV0ZXJzIGZvciBmcm9udGVuZCBpbnRlcmZhY2Uu
CiAgICAgbWFwKCRmcm9udGVuZFR5cGVzeyRfLT50eXBlfSA9IDEsIEBhcmdzRmlsdGVyZWQpOyAj
IHJlZ2lzdGVyIHJlcXVpcmVkIHR5cGVzLgogICAgIG15ICRhcmd1bWVudHMgPSBqb2luKCIsICIs
IG1hcCgkdHlwZVRyYW5zZm9ybXskXy0+dHlwZX0tPnsicGFyYW0ifSAuICIgIiAuICRfLT5uYW1l
LCBAYXJnc0ZpbHRlcmVkKSk7ICMgcHJlcGFyZSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uIHNpZ25h
dHVyZS4KLSAgICBteSBAcHVzaEFyZ3VtZW50cyA9IG1hcCgiICAgIGFyZ3VtZW50cy0+cHVzaCIg
LiAkdHlwZVRyYW5zZm9ybXskXy0+dHlwZX0tPnsiYWNjZXNzb3JTdWZmaXgifSAuICIoIiAuICRf
LT5uYW1lIC4gIik7IiwgQGFyZ3NGaWx0ZXJlZCk7CiAKICAgICBteSAkc2lnbmF0dXJlID0gIiAg
ICB2b2lkICR7ZnVuY3Rpb25OYW1lfSgke2FyZ3VtZW50c30pOyI7CiAgICAgaWYgKCEkZnJvbnRl
bmRNZXRob2RzeyR7c2lnbmF0dXJlfX0pIHsKQEAgLTI2MywxMCArMjU3LDE0IEBAIHN1YiBnZW5l
cmF0ZUZyb250ZW5kRnVuY3Rpb24KICAgICAgICAgbXkgQGZ1bmN0aW9uOwogICAgICAgICBwdXNo
KEBmdW5jdGlvbiwgInZvaWQgJHtmcm9udGVuZENsYXNzTmFtZX06OiR7ZnVuY3Rpb25OYW1lfSgk
e2FyZ3VtZW50c30pIik7CiAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAieyIpOwotICAgICAgICBw
dXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsiKTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAg
YXJndW1lbnRzLT5wdXNoU3RyaW5nKFwiJGZ1bmN0aW9uTmFtZVwiKTsiKTsKKyAgICAgICAgcHVz
aChAZnVuY3Rpb24sICIgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gJHtmdW5jdGlvbk5hbWV9
TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Iik7CisgICAgICAgIHB1c2goQGZ1
bmN0aW9uLCAiICAgICR7ZnVuY3Rpb25OYW1lfU1lc3NhZ2UtPnNldFN0cmluZyhcInR5cGVcIiwg
XCJldmVudFwiKTsiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgJHtmdW5jdGlvbk5h
bWV9TWVzc2FnZS0+c2V0U3RyaW5nKFwiZXZlbnRcIiwgXCIkZnVuY3Rpb25OYW1lXCIpOyIpOwor
ICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXls
b2FkRGF0YU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Iik7CisgICAgICAgIG15
IEBwdXNoQXJndW1lbnRzID0gbWFwKCIgICAgcGF5bG9hZERhdGFPYmplY3QtPnNldCIgLiAkdHlw
ZVRyYW5zZm9ybXskXy0+dHlwZX0tPnsiSlNPTlR5cGUifSAuICIoXCIiIC4gJF8tPm5hbWUgLiAi
XCIsICIgLiAkXy0+bmFtZSAuICIpOyIsIEBhcmdzRmlsdGVyZWQpOwogICAgICAgICBwdXNoKEBm
dW5jdGlvbiwgQHB1c2hBcmd1bWVudHMpOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBt
X2luc3BlY3RvckNsaWVudC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09O
U3RyaW5nKCkpOyIpOworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAke2Z1bmN0aW9uTmFt
ZX1NZXNzYWdlLT5zZXRPYmplY3QoXCJkYXRhXCIsIHBheWxvYWREYXRhT2JqZWN0KTsiKTsKKyAg
ICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgbV9pbnNwZWN0b3JDbGllbnQtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZCgke2Z1bmN0aW9uTmFtZX1NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Iik7CiAK
ICAgICAgICAgcHVzaChAZnVuY3Rpb24sICJ9Iik7CiAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAi
Iik7CkBAIC0yNzQsMjIgKzI3Miw2IEBAIHN1YiBnZW5lcmF0ZUZyb250ZW5kRnVuY3Rpb24KICAg
ICB9CiB9CiAKLXN1YiBnZW5lcmF0ZUJhY2tlbmRQcml2YXRlRnVuY3Rpb25zCi17Ci0gICAgbXkg
JHByaXZhdGVGdW5jdGlvbnMgPSA8PCAiRU9GIjsKLXN0YXRpYyBTdHJpbmcgZm9ybWF0V3JvbmdB
cmd1bWVudHNDb3VudE1lc3NhZ2UodW5zaWduZWQgZXhwZWN0ZWQsIHVuc2lnbmVkIGFjdHVhbCkK
LXsKLSAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIldyb25nIG51bWJlciBvZiBwYXJhbWV0ZXJz
OiAlZCAoZXhwZWN0ZWQ6ICVkKSIsIGFjdHVhbCwgZXhwZWN0ZWQpOwotfQotCi1zdGF0aWMgU3Ry
aW5nIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSh1bnNpZ25lZCBwb3NpdGlvbiwgY29u
c3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQotewotICAgIHJldHVybiBT
dHJpbmc6OmZvcm1hdCgiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyICVkICglcykgdG8gJXMi
LCBwb3NpdGlvbiwgbmFtZSwgZXhwZWN0ZWRUeXBlKTsKLX0KLUVPRgotICAgIHJldHVybiBzcGxp
dCgiXG4iLCAkcHJpdmF0ZUZ1bmN0aW9ucyk7Ci19Ci0KIHN1YiBnZW5lcmF0ZUJhY2tlbmRGdW5j
dGlvbgogewogICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwpAQCAtMzAzLDcxICsyODUsOTAgQEAg
c3ViIGdlbmVyYXRlQmFja2VuZEZ1bmN0aW9uCiAgICAgbXkgQGluQXJncyA9IGdyZXAoJF8tPmRp
cmVjdGlvbiBlcSAiaW4iLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pOwogICAgIG15IEBvdXRB
cmdzID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJvdXQiLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVy
c30pOwogCi0gICAgbXkgJHNpZ25hdHVyZSA9ICIgICAgdm9pZCAke2Z1bmN0aW9uTmFtZX0oUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncyk7IjsKKyAgICBteSAkc2lnbmF0dXJlID0gIiAg
ICB2b2lkICR7ZnVuY3Rpb25OYW1lfShsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1lc3NhZ2UpOyI7CiAgICAgISRiYWNrZW5kTWV0aG9kc3ske3NpZ25hdHVyZX19IHx8
IGRpZSAiRHVwbGljYXRlIGZ1bmN0aW9uIHdhcyBkZXRlY3RlZCBmb3Igc2lnbmF0dXJlICckc2ln
bmF0dXJlJy4iOwogICAgICRiYWNrZW5kTWV0aG9kc3ske3NpZ25hdHVyZX19ID0gJGZ1bmN0aW9u
TmFtZTsKIAogICAgIG15IEBmdW5jdGlvbjsKLSAgICBwdXNoKEBmdW5jdGlvbiwgInZvaWQgJHti
YWNrZW5kQ2xhc3NOYW1lfTo6JHtmdW5jdGlvbk5hbWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGFyZ3MpIik7CisgICAgcHVzaChAZnVuY3Rpb24sICJ2b2lkICR7YmFja2VuZENsYXNzTmFt
ZX06OiR7ZnVuY3Rpb25OYW1lfShsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKSIpOwogICAgIHB1c2goQGZ1bmN0aW9uLCAieyIp
OwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGxvbmcgY2FsbElkID0gMDsiKTsKKyAgICBwdXNo
KEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9i
amVjdChyZXF1ZXN0TWVzc2FnZU9iamVjdFJlZik7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIg
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsiKTsKICAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwogCi0gICAgbXkgJGV4cGVj
dGVkUGFyYW1ldGVyc0NvdW50ID0gc2NhbGFyKEBpbkFyZ3MpOwotICAgIG15ICRleHBlY3RlZFBh
cmFtZXRlcnNDb3VudFdpdGhNZXRob2ROYW1lID0gc2NhbGFyKEBpbkFyZ3MpICsgMTsKLSAgICBw
dXNoKEBmdW5jdGlvbiwgIiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gJGV4cGVjdGVkUGFyYW1l
dGVyc0NvdW50V2l0aE1ldGhvZE5hbWUpIHsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCAke2Z1bmN0aW9uTmFtZX1DbWQsIGZvcm1hdFdy
b25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgJGV4cGVjdGVkUGFy
YW1ldGVyc0NvdW50KSk7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIHJldHVybjsi
KTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICB9Iik7CisgICAgbXkgJGRvbWFpbiA9ICRmdW5j
dGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiaGFuZGxlciJ9IHx8ICJDb250
cm9sbGVyIjsKKyAgICBteSAkZG9tYWluQWNjZXNzb3IgPSAkdHlwZVRyYW5zZm9ybXskZG9tYWlu
fS0+eyJkb21haW5BY2Nlc3NvciJ9OworICAgICRiYWNrZW5kVHlwZXN7JGRvbWFpbn0gPSAxOwor
ICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmICghJGRvbWFpbkFjY2Vzc29yKSIpOworICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6
OmZvcm1hdChcIkVycm9yOiAlcyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuXCIsIFwiJGRvbWFp
blwiKSk7Iik7CiAgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKIAotICAgIG15ICRpID0gMTsgIyB6
ZXJvIGVsZW1lbnQgaXMgdGhlIG1ldGhvZCBuYW1lLgotICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRl
ciAoQGluQXJncykgewotICAgICAgICBteSAkdHlwZSA9ICRwYXJhbWV0ZXItPnR5cGU7Ci0gICAg
ICAgIG15ICRhcmd1bWVudFR5cGUgPSAkdHlwZVRyYW5zZm9ybXskdHlwZX0tPnsidmFyaWFibGUi
fTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgJGFyZ3VtZW50VHlwZSAiIC4gJHBhcmFt
ZXRlci0+bmFtZSAuICI7IikgaWYgISgkcGFyYW1ldGVyLT5uYW1lIGVxICJjYWxsSWQiKTsKLSAg
ICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgaWYgKCFhcmdzLT5nZXQoJGkpLT5hcyIgLiAkdHlw
ZVRyYW5zZm9ybXskdHlwZX0tPnsiYWNjZXNzb3JTdWZmaXgifSAuICIoJiIgLiAkcGFyYW1ldGVy
LT5uYW1lIC4gIikpIHsiKTsKKyAgICBpZiAoc2NhbGFyKEBpbkFyZ3MpKSB7CisgICAgICAgICMg
ZGVjbGFyZSB2YXJpYWJsZXMgZm9yIGFsbCAnaW4nIGFyZ3M7CisgICAgICAgIHB1c2goQGZ1bmN0
aW9uLCBtYXAoIiAgICAiIC4gJHR5cGVUcmFuc2Zvcm17JF8tPnR5cGV9LT57InZhcmlhYmxlIn0g
LiAiICIgLiAkXy0+bmFtZSAuICI7IiwgZ3JlcCghKCRfLT5uYW1lIGVxICJjYWxsSWQiKSwgQGlu
QXJncykpKTsKKworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOworICAgICAgICBwdXNoKEBm
dW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhcmd1bWVudHNDb250YWluZXI7
Iik7CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmICghKGFyZ3VtZW50c0NvbnRhaW5l
ciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoXCJhcmd1bWVudHNcIikpKSB7Iik7
CiAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsi
KTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3Io
Y2FsbElkLCAke2Z1bmN0aW9uTmFtZX1DbWQsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2Fn
ZSgkaSwgXCIiIC4gJHBhcmFtZXRlci0+bmFtZSAuICJcIiwgXCIkdHlwZVwiKSk7Iik7Ci0gICAg
ICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICByZXR1cm47Iik7CisgICAgICAgIHB1c2goQGZ1
bmN0aW9uLCAiICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1h
dChcIkVycm9yOiBhcmd1bWVudHMgb2JqZWN0IHdhcyBub3QgZm91bmQuXCIpKTsiKTsKKyAgICAg
ICAgcHVzaChAZnVuY3Rpb24sICIgICAgfSBlbHNlIHsiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rp
b24sICIgICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgYXJndW1lbnRzRW5k
SXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmVuZCgpOyIpOworCisgICAgICAgIGZvcmVh
Y2ggbXkgJHBhcmFtZXRlciAoQGluQXJncykgeworICAgICAgICAgICAgbXkgJG5hbWUgPSAkcGFy
YW1ldGVyLT5uYW1lOworICAgICAgICAgICAgbmV4dCBpZiAkbmFtZSBlcSAiY2FsbElkIjsKKyAg
ICAgICAgICAgIG15ICR0eXBlID0gJHBhcmFtZXRlci0+dHlwZTsKKyAgICAgICAgICAgIG15ICR2
YXJpYWJsZVR5cGUgPSAkdHlwZVRyYW5zZm9ybXskdHlwZX0tPnsidmFyaWFibGUifTsKKyAgICAg
ICAgICAgIG15ICRKU09OVHlwZSA9ICR0eXBlVHJhbnNmb3JteyR0eXBlfS0+eyJKU09OVHlwZSJ9
OworCisgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOworICAgICAgICAgICAgcHVzaChA
ZnVuY3Rpb24sICIgICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgJHtuYW1l
fVZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoXCIkbmFtZVwiKTsiKTsK
KyAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBpZiAoJHtuYW1lfVZhbHVlSXRl
cmF0b3IgPT0gYXJndW1lbnRzRW5kSXRlcmF0b3IpIHsiKTsKKyAgICAgICAgICAgIHB1c2goQGZ1
bmN0aW9uLCAiICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Iik7CisgICAgICAgICAg
ICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KFN0cmluZzo6Zm9ybWF0KFwiRXJyb3I6IEFyZ3VtZW50ICclcycgd2l0aCB0eXBlICclcycgd2Fz
IG5vdCBmb3VuZC5cIiwgXCIkbmFtZVwiLCBcIiRKU09OVHlwZVwiKSk7Iik7CisgICAgICAgICAg
ICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgfSBlbHNlIHsiKTsKKyAgICAgICAgICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgICAgICAgICAgaWYgKCEke25hbWV9VmFsdWVJdGVyYXRvci0+c2Vjb25k
LT5hcyRKU09OVHlwZSgmJG5hbWUpKSB7Iik7CisgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbiwg
IiAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsiKTsKKyAgICAgICAgICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgICAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KFN0cmluZzo6Zm9ybWF0KFwiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUuIEl0
IHNob3VsZCBiZSAnJXMnLlwiLCBcIiRuYW1lXCIsIFwiJEpTT05UeXBlXCIpKTsiKTsKKyAgICAg
ICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICAgICAgfSIpOworICAgICAgICAgICAgcHVz
aChAZnVuY3Rpb24sICIgICAgICAgIH0iKTsKKyAgICAgICAgfQogICAgICAgICBwdXNoKEBmdW5j
dGlvbiwgIiAgICB9Iik7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7Ci0gICAgICAgICsr
JGk7CiAgICAgfQogCi0gICAgbXkgJGhhbmRsZXIgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57ImhhbmRsZXIifSB8fCAiQ29udHJvbGxlciI7Ci0gICAgbXkgJGhh
bmRsZXJBY2Nlc3NvciA9ICR0eXBlVHJhbnNmb3JteyRoYW5kbGVyfS0+eyJoYW5kbGVyQWNjZXNz
b3IifTsKLSAgICAkYmFja2VuZFR5cGVzeyRoYW5kbGVyfSA9IDE7Ci0gICAgcHVzaChAZnVuY3Rp
b24sICIgICAgaWYgKCEkaGFuZGxlckFjY2Vzc29yKSB7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24s
ICIgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCAke2Z1bmN0aW9uTmFtZX1DbWQs
IFwiRXJyb3I6ICRoYW5kbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS5cIik7Iik7Ci0gICAg
cHVzaChAZnVuY3Rpb24sICIgICAgICAgIHJldHVybjsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwg
IiAgICB9Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLQotCiAgICAgZm9yZWFjaCAoQG91
dEFyZ3MpIHsgIyBkZWNsYXJlIGxvY2FsIHZhcmlhYmxlcyBmb3Igb3V0IGFyZ3VtZW50cy4KICAg
ICAgICAgbXkgJGluaXRpYWxpemVyID0gJHR5cGVUcmFuc2Zvcm17JF8tPnR5cGV9LT57ImRlZmF1
bHRWYWx1ZSJ9ID8gIiA9ICIgLiAkdHlwZVRyYW5zZm9ybXskXy0+dHlwZX0tPnsiZGVmYXVsdFZh
bHVlIn0gOiAiIjsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgIiAuICR0eXBlVHJhbnNm
b3JteyRfLT50eXBlfS0+eyJ2YXJpYWJsZSJ9IC4gIiAiIC4gJF8tPm5hbWUgLiAiJGluaXRpYWxp
emVyOyIpOworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgIiAuICR0eXBlVHJhbnNm
b3JteyRfLT50eXBlfS0+eyJ2YXJpYWJsZSJ9IC4gIiAiIC4gJF8tPm5hbWUgLiAiJGluaXRpYWxp
emVyOyIpOwogICAgIH0KIAogICAgIG15ICRhcmdzID0gam9pbigiLCAiLCAoZ3JlcCghKCRfIGVx
ICJjYWxsSWQiKSwgbWFwKCRfLT5uYW1lLCBAaW5BcmdzKSksIG1hcCgiJiIgLiAkXy0+bmFtZSwg
QG91dEFyZ3MpKSk7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgJGhhbmRsZXJBY2Nlc3Nvci0+
JGZ1bmN0aW9uTmFtZSgkYXJncyk7Iik7Ci0KLSAgICAjIFRoZSByZXN1bHRzIG9mIGZ1bmN0aW9u
IGNhbGwgc2hvdWxkIGJlIHRyYW5zZmVyZWQgYmFjayB0byBmcm9udGVuZC4KLSAgICBpZiAoc2Nh
bGFyKGdyZXAoJF8tPm5hbWUgZXEgImNhbGxJZCIsIEBpbkFyZ3MpKSkgewotICAgICAgICBteSBA
cHVzaEFyZ3VtZW50cyA9IG1hcCgiICAgICAgICBhcmd1bWVudHMtPnB1c2giIC4gJHR5cGVUcmFu
c2Zvcm17JF8tPnR5cGV9LT57ImFjY2Vzc29yU3VmZml4In0gLiAiKCIgLiAkXy0+bmFtZSAuICIp
OyIsIEBvdXRBcmdzKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgJGRvbWFpbkFj
Y2Vzc29yLT4kZnVuY3Rpb25OYW1lKCRhcmdzKTsiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiIp
OwogCi0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9u
LCAiICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0
b3IgYXZhaWxhYmlsaXR5Iik7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmIChtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsiKTsKLSAgICAgICAgcHVzaChAZnVu
Y3Rpb24sICIgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOyIpOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAg
YXJndW1lbnRzLT5wdXNoU3RyaW5nKFwicHJvY2Vzc1Jlc3BvbnNlXCIpOyIpOwotICAgICAgICBw
dXNoKEBmdW5jdGlvbiwgIiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7Iik7
Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCBAcHVzaEFyZ3VtZW50cyk7Ci0gICAgICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVu
dCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7Iik7
Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIH0iKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwg
IiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9y
IGF2YWlsYWJpbGl0eSIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmIChjYWxsSWQgJiYg
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7Iik7CisgICAgcHVzaChAZnVu
Y3Rpb24sICIgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAg
ICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKFwic2VxXCIsIGNhbGxJZCk7Iik7CisgICAg
cHVzaChAZnVuY3Rpb24sICIgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKFwidHlw
ZVwiLCBcInJlc3BvbnNlXCIpOyIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICByZXNw
b25zZU1lc3NhZ2UtPnNldFN0cmluZyhcImRvbWFpblwiLCBcIiRkb21haW5cIik7Iik7CisgICAg
cHVzaChAZnVuY3Rpb24sICIgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKFwiY29t
bWFuZFwiLCBcIiRmdW5jdGlvbk5hbWVcIik7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAg
ICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0Qm9vbChcInN1Y2Nlc3NcIiwgIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSk7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKKyAgICBwdXNoKEBmdW5j
dGlvbiwgIiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkiKTsKKyAgICBwdXNo
KEBmdW5jdGlvbiwgIiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoXCJlcnJv
cnNcIiwgcHJvdG9jb2xFcnJvcnMpOyIpOworICAgIGlmIChzY2FsYXIoQG91dEFyZ3MpKSB7Cisg
ICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBlbHNlIHsiKTsKKyAgICAgICAgcHVzaChA
ZnVuY3Rpb24sICIgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZURh
dGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOyIpOworICAgICAgICBwdXNoKEBmdW5jdGlv
biwgbWFwKCIgICAgICAgICAgICByZXNwb25zZURhdGEtPnNldCIgLiAkdHlwZVRyYW5zZm9ybXsk
Xy0+dHlwZX0tPnsiSlNPTlR5cGUifSAuICIoXCIiIC4gJF8tPm5hbWUgLiAiXCIsICIgLiAkXy0+
bmFtZSAuICIpOyIsIEBvdXRBcmdzKSk7CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAg
ICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoXCJkYXRhXCIsIHJlc3BvbnNlRGF0YSk7
Iik7CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICB9Iik7CiAgICAgfQorICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNs
aWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgfSIpOworCisKICAgICBwdXNoKEBm
dW5jdGlvbiwgIn0iKTsKICAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwogICAgIHB1c2goQGJhY2tl
bmRNZXRob2RzSW1wbCwgQGZ1bmN0aW9uKTsKQEAgLTM3OSwxNyArMzgwLDIyIEBAIHN1YiBnZW5l
cmF0ZUJhY2tlbmRSZXBvcnRQcm90b2NvbEVycm9yCiAKIHZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1l
fTo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIGNvbnN0IFN0cmluZyYgZXJyb3JUZXh0KSBjb25zdAogewotICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIGFy
Z3VtZW50cy0+cHVzaFN0cmluZygicmVwb3J0UHJvdG9jb2xFcnJvciIpOwotICAgIGFyZ3VtZW50
cy0+cHVzaE51bWJlcihjYWxsSWQpOwotICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhtZXRob2Qp
OwotICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhlcnJvclRleHQpOwotICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1
bWVudHMtPnRvSlNPTlN0cmluZygpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNz
YWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtZXNzYWdlLT5zZXROdW1iZXIo
InNlcSIsIGNhbGxJZCk7CisgICAgbWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgImVycm9yIik7
CisgICAgbWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiaW5zcGVjdG9yUHJvdG9jb2wiKTsK
KyAgICBtZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCBtZXRob2QpOworICAgIG1lc3NhZ2Ut
PnNldEJvb2woInN1Y2Nlc3MiLCBmYWxzZSk7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBl
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgZXJyb3JzLT5wdXNoU3RyaW5n
KGVycm9yVGV4dCk7CisgICAgbWVzc2FnZS0+c2V0QXJyYXkoImVycm9ycyIsIGVycm9ycyk7Cisg
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKG1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIEVPRgogICAgIHJldHVybiBz
cGxpdCgiXG4iLCAkcmVwb3J0UHJvdG9jb2xFcnJvcik7CiB9CiAKKwogc3ViIGdlbmVyYXRlQmFj
a2VuZERpc3BhdGNoZXIKIHsKICAgICBteSBAYm9keTsKQEAgLTQwMCw5ICs0MDYsMTEgQEAgc3Vi
IGdlbmVyYXRlQmFja2VuZERpc3BhdGNoZXIKICAgICBteSAkYmFja2VuZERpc3BhdGNoZXJCb2R5
ID0gPDwgIkVPRiI7CiB2b2lkICR7YmFja2VuZENsYXNzTmFtZX06OmRpc3BhdGNoKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKIHsKLSAgICB0eXBlZGVmIHZvaWQgKCR7YmFja2VuZENsYXNzTmFtZX06
OipDYWxsSGFuZGxlcikoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncyk7CisgICAgdHlw
ZWRlZiB2b2lkICgke2JhY2tlbmRDbGFzc05hbWV9OjoqQ2FsbEhhbmRsZXIpKGxvbmcgY2FsbElk
LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZVJlZik7CiAgICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwogICAgIERFRklORV9TVEFU
SUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCApOworICAgIGxvbmcgY2FsbElkID0g
MDsKKwogICAgIGlmIChkaXNwYXRjaE1hcC5pc0VtcHR5KCkpIHsKICRtYXBFbnRyaWVzCiAgICAg
fQpAQCAtNDEwLDM4ICs0MTgsNTIgQEAgJG1hcEVudHJpZXMKICAgICBSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IHBhcnNlZE1lc3NhZ2UgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2Up
OwogICAgIGlmICghcGFyc2VkTWVzc2FnZSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCAiZGlzcGF0Y2giLCAiRXJyb3I6IElu
dmFsaWQgbWVzc2FnZSBmb3JtYXQuIE1lc3NhZ2Ugc2hvdWxkIGJlIGluIEpTT04gZm9ybWF0LiIp
OworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgImRpc3BhdGNoIiwgIkVycm9y
OiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBNZXNzYWdlIHNob3VsZCBiZSBpbiBKU09OIGZvcm1h
dC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1lc3NhZ2VPYmplY3QgPSBwYXJzZWRNZXNzYWdlLT5hc09iamVjdCgpOworICAgIGlmICgh
bWVzc2FnZU9iamVjdCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsICJkaXNwYXRjaCIsICJFcnJvcjogSW52YWxpZCBt
ZXNzYWdlIGZvcm1hdC4gVGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGEgSlNPTmlmaWVkIG9iamVjdC4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
Y2FsbElkVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoInNlcSIpOworICAgIGlmICghY2FsbElk
VmFsdWUpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJlcG9ydFBy
b3RvY29sRXJyb3IoY2FsbElkLCAiZGlzcGF0Y2giLCAiRXJyb3I6IEludmFsaWQgbWVzc2FnZSBm
b3JtYXQuICdzZXEnIHByb3BlcnR5IHdhcyBub3QgZm91bmQgaW4gdGhlIHJlcXVlc3QuIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1lc3Nh
Z2VBcnJheSA9IHBhcnNlZE1lc3NhZ2UtPmFzQXJyYXkoKTsKLSAgICBpZiAoIW1lc3NhZ2VBcnJh
eSkgeworICAgIGlmICghY2FsbElkVmFsdWUtPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsICJk
aXNwYXRjaCIsICJFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gVGhlIG1lc3NhZ2Ugc2hv
dWxkIGJlIGEgSlNPTmlmaWVkIGFycmF5IG9mIGFyZ3VtZW50cy4iKTsKKyAgICAgICAgcmVwb3J0
UHJvdG9jb2xFcnJvcihjYWxsSWQsICJkaXNwYXRjaCIsICJFcnJvcjogSW52YWxpZCBtZXNzYWdl
IGZvcm1hdC4gdGhlIHR5cGUgb2YgJ3NlcScgcHJvcGVydHkgc2hvdWxkIGJlIG51bWJlci4iKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghbWVzc2FnZUFycmF5LT5sZW5ndGgo
KSkgeworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gY29tbWFuZFZhbHVlID0gbWVzc2FnZU9i
amVjdC0+Z2V0KCJjb21tYW5kIik7CisgICAgaWYgKCFjb21tYW5kVmFsdWUpIHsKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgImRp
c3BhdGNoIiwgIkVycm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBFbXB0eSBtZXNzYWdlIHdh
cyByZWNlaXZlZC4iKTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsICJkaXNw
YXRjaCIsICJFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gJ2NvbW1hbmQnIHByb3BlcnR5
IHdhc24ndCBmb3VuZC4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFN0cmluZyBt
ZXRob2ROYW1lOwotICAgIGlmICghbWVzc2FnZUFycmF5LT5nZXQoMCktPmFzU3RyaW5nKCZtZXRo
b2ROYW1lKSkgeworICAgIFN0cmluZyBjb21tYW5kOworICAgIGlmICghY29tbWFuZFZhbHVlLT5h
c1N0cmluZygmY29tbWFuZCkpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgImRpc3BhdGNoIiwgIkVycm9yOiBJbnZhbGlkIG1l
c3NhZ2UgZm9ybWF0LiBUaGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgbWVzc2FnZSBzaG91bGQgYmUg
bWV0aG9kIG5hbWUuIik7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCAiZGlz
cGF0Y2giLCAiRXJyb3I6IEludmFsaWQgbWVzc2FnZSBmb3JtYXQuIFRoZSB0eXBlIG9mICdjb21t
YW5kJyBwcm9wZXJ0eSBzaG91bGQgYmUgc3RyaW5nLiIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNw
YXRjaE1hcC5maW5kKG1ldGhvZE5hbWUpOworICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxl
cj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChjb21tYW5kKTsKICAgICBpZiAoaXQg
PT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgImRpc3BhdGNoIiwgU3RyaW5nOjpmb3JtYXQo
IkVycm9yOiBJbnZhbGlkIG1ldGhvZCBuYW1lLiAnJXMnIHdhc24ndCBmb3VuZC4iLCBtZXRob2RO
YW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQs
ICJkaXNwYXRjaCIsIFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogSW52YWxpZCBjb21tYW5kIHdhcyBy
ZWNlaXZlZC4gJyVzJyB3YXNuJ3QgZm91bmQuIiwgY29tbWFuZC51dGY4KCkuZGF0YSgpKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAoKCp0aGlzKS4qaXQtPnNlY29uZCkobWVzc2Fn
ZUFycmF5KTsKKyAgICAoKCp0aGlzKS4qaXQtPnNlY29uZCkoY2FsbElkLCBtZXNzYWdlT2JqZWN0
KTsKIH0KIEVPRgogICAgIHJldHVybiBzcGxpdCgiXG4iLCAkYmFja2VuZERpc3BhdGNoZXJCb2R5
KTsKQEAgLTQ1NSwxNCArNDc3LDE4IEBAIGJvb2wgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6Z2V0Q29t
bWFuZE5hbWUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJpbmcqIHJlc3VsdCkKICAgICBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihtZXNz
YWdlKTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBhcnJheSA9IHZhbHVlLT5hc0FycmF5KCk7Ci0gICAgaWYgKCFhcnJh
eSkKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCA9IHZhbHVlLT5hc09iamVj
dCgpOworICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAo
IWFycmF5LT5sZW5ndGgoKSkKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGNvbW1hbmRWYWx1
ZSA9IG9iamVjdC0+Z2V0KCJjb21tYW5kIik7CisgICAgaWYgKCFjb21tYW5kVmFsdWUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gYXJyYXktPmdldCgwKS0+YXNTdHJpbmcocmVz
dWx0KTsKKworICAgIHJldHVybiBjb21tYW5kVmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7CiB9CisK
IEVPRgogICAgIHJldHVybiBzcGxpdCgiXG4iLCAkbWVzc2FnZVBhcnNlckJvZHkpOwogfQpAQCAt
NDcxLDcgKzQ5NywyMCBAQCBzdWIgZ2VuZXJhdGVCYWNrZW5kU3R1YkpTCiB7CiAgICAgbXkgJGlu
dGVyZmFjZSA9IHNoaWZ0OwogICAgIG15IEBiYWNrZW5kRnVuY3Rpb25zID0gZ3JlcCghJF8tPnNp
Z25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Im5vdGlmeSJ9LCBAeyRpbnRlcmZhY2UtPmZ1
bmN0aW9uc30pOwotICAgIG15IEBKU1N0dWJzID0gbWFwKCIgICAgdGhpcy5fcmVnaXN0ZXJEZWxl
Z2F0ZShcIiIgLiAkXy0+c2lnbmF0dXJlLT5uYW1lIC4gIlwiKTsiLCBAYmFja2VuZEZ1bmN0aW9u
cyk7CisgICAgbXkgQEpTU3R1YnM7CisKKyAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQGJhY2tl
bmRGdW5jdGlvbnMpIHsKKyAgICAgICAgbXkgJG5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+
bmFtZTsKKyAgICAgICAgbXkgJGRvbWFpbiA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiaGFuZGxlciJ9OworICAgICAgICBteSAkYXJndW1lbnROYW1lcyA9IGpv
aW4oIiwiLCBtYXAoIlxcXCIiIC4gJF8tPm5hbWUgLiAiXFxcIjogbnVsbCIsIGdyZXAoJF8tPmRp
cmVjdGlvbiBlcSAiaW4iLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pKSk7CisgICAgICAgIHB1
c2goQEpTU3R1YnMsICIgICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZShcIiRuYW1lXCIsIFwieyIg
LgorICAgICAgICAgICAgIlxcXCJzZXFcXFwiOiAwLCAiIC4KKyAgICAgICAgICAgICJcXFwidHlw
ZVxcXCI6IFxcXCJyZXF1ZXN0XFxcIiwgIiAuCisgICAgICAgICAgICAiXFxcImRvbWFpblxcXCI6
IFxcXCIkZG9tYWluXFxcIiwiIC4KKyAgICAgICAgICAgICJcXFwiY29tbWFuZFxcXCI6IFxcXCIk
bmFtZVxcXCIsIiAuCisgICAgICAgICAgICAiXFxcImFyZ3VtZW50c1xcXCI6IHskYXJndW1lbnRO
YW1lc30iIC4KKyAgICAgICAgIn1cIik7Iik7CisgICAgfQogCiAgICAgbXkgJEpTU3R1YnMgPSBq
b2luKCJcbiIsIEBKU1N0dWJzKTsKICAgICBteSAkaW5zcGVjdG9yQmFja2VuZFN0dWJKUyA9IDw8
ICJFT0YiOwpAQCAtNDgzLDE0ICs1MjIsMjUgQEAgJEpTU3R1YnMKIH0KIAogV2ViSW5zcGVjdG9y
Lkluc3BlY3RvckJhY2tlbmRTdHViLnByb3RvdHlwZSA9IHsKLSAgICBfcmVnaXN0ZXJEZWxlZ2F0
ZTogZnVuY3Rpb24obWV0aG9kTmFtZSkKKyAgICBfcmVnaXN0ZXJEZWxlZ2F0ZTogZnVuY3Rpb24o
Y29tbWFuZCwgY29tbWFuZEluZm8pCiAgICAgewotICAgICAgICB0aGlzW21ldGhvZE5hbWVdID0g
dGhpcy5zZW5kTWVzc2FnZVRvQmFja2VuZC5iaW5kKHRoaXMsIG1ldGhvZE5hbWUpOworICAgICAg
ICB0aGlzW2NvbW1hbmRdID0gdGhpcy5zZW5kTWVzc2FnZVRvQmFja2VuZC5iaW5kKHRoaXMsIGNv
bW1hbmRJbmZvKTsKICAgICB9LAogCiAgICAgc2VuZE1lc3NhZ2VUb0JhY2tlbmQ6IGZ1bmN0aW9u
KCkKICAgICB7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkoQXJyYXkucHJv
dG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7CisgICAgICAgIHZhciBhcmdzID0gQXJyYXku
cHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTsKKyAgICAgICAgdmFyIHJlcXVlc3QgPSBK
U09OLnBhcnNlKGFyZ3Muc2hpZnQoKSk7CisgICAgICAgIGZvciAodmFyIGtleSBpbiByZXF1ZXN0
LmFyZ3VtZW50cykgeworICAgICAgICAgICAgaWYgKGtleSA9PT0gImNhbGxJZCIpCisgICAgICAg
ICAgICAgICAgcmVxdWVzdC5zZXEgPSBhcmdzLnNoaWZ0KCk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgcmVxdWVzdC5hcmd1bWVudHNba2V5XSA9IGFyZ3Muc2hpZnQoKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9
PT0gImZ1bmN0aW9uIikKKyAgICAgICAgICAgIHJlcXVlc3Quc2VxID0gV2ViSW5zcGVjdG9yLkNh
bGxiYWNrLndyYXAoYXJnc1swXSk7CisKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBKU09OLnN0cmlu
Z2lmeShyZXF1ZXN0KTsKICAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LnNlbmRNZXNzYWdl
VG9CYWNrZW5kKG1lc3NhZ2UpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
LmgKaW5kZXggNGJjMzZmMi4uNDczYWQyMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
LmgKQEAgLTE3Niw2ICsxNzYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRPYmplY3QoY29uc3Qg
U3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4pOwogICAgIHZvaWQgc2V0
QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5Pik7CiAK
KyAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CiAgICAg
Ym9vbCBnZXRCb29sKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogb3V0cHV0KSBjb25zdDsKICAg
ICBib29sIGdldE51bWJlcihjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSogb3V0cHV0KSBjb25z
dDsKICAgICBib29sIGdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyogb3V0cHV0
KSBjb25zdDsKQEAgLTIyNCw2ICsyMjUsMTEgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmUHRy
PEluc3BlY3RvclZhbHVlPiA+IG1fZGF0YTsKIH07CiAKK2lubGluZSBJbnNwZWN0b3JPYmplY3Q6
OmNvbnN0X2l0ZXJhdG9yIEluc3BlY3Rvck9iamVjdDo6ZmluZChjb25zdCBTdHJpbmcmIG5hbWUp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS5maW5kKG5hbWUpOworfQorCiBpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JPYmplY3Q6OnNldEJvb2woY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHZhbHVl
KQogewogICAgIHNldFZhbHVlKG5hbWUsIEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1
ZSkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxiYWNrLmpz
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxiYWNrLmpzCmluZGV4IGQ4MTYzZmUu
LjA2MjFmZDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsYmFj
ay5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbGJhY2suanMKQEAgLTQy
LDkgKzQyLDggQEAgV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb3RvdHlwZSA9IHsKICAgICAgICAg
cmV0dXJuIGNhbGxiYWNrSWQ7CiAgICAgfSwKIAotICAgIHByb2Nlc3NSZXNwb25zZTogZnVuY3Rp
b24oY2FsbGJhY2tJZCwgb3B0X3ZhcmFyZykKKyAgICBwcm9jZXNzUmVzcG9uc2U6IGZ1bmN0aW9u
KGNhbGxiYWNrSWQsIGFyZ3MpCiAgICAgewotICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3Rv
dHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7CiAgICAgICAgIHZhciBjYWxsYmFjayA9IHRo
aXMuX2NhbGxiYWNrc1tjYWxsYmFja0lkXTsKICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwg
YXJncyk7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFja3NbY2FsbGJhY2tJZF07CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCA1MmFlNzM4Li4xYTNlMTU4
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTQ0NSw3ICs0
NDUsNyBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rpb24oKQogewogICAgIGlmICgicGFn
ZSIgaW4gV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0KSB7CiAgICAgICAgIFdlYkluc3Bl
Y3Rvci5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KCJ3czovLyIgKyB3aW5kb3cubG9jYXRpb24uaG9z
dCArICIvZGV2dG9vbHMvcGFnZS8iICsgV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0LnBh
Z2UpOwotICAgICAgICBXZWJJbnNwZWN0b3Iuc29ja2V0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKG1l
c3NhZ2UpIHsgV2ViSW5zcGVjdG9yX3N5bmNEaXNwYXRjaChtZXNzYWdlLmRhdGEpOyB9CisgICAg
ICAgIFdlYkluc3BlY3Rvci5zb2NrZXQub25tZXNzYWdlID0gZnVuY3Rpb24obWVzc2FnZSkgeyBX
ZWJJbnNwZWN0b3Jfc3luY0Rpc3BhdGNoKEpTT04ucGFyc2UobWVzc2FnZS5kYXRhKSk7IH0KICAg
ICAgICAgV2ViSW5zcGVjdG9yLnNvY2tldC5vbmVycm9yID0gZnVuY3Rpb24oZXJyb3IpIHsgY29u
c29sZS5lcnJvcihlcnJvcik7IH0KICAgICAgICAgV2ViSW5zcGVjdG9yLnNvY2tldC5vbm9wZW4g
PSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5zZW5kTWVz
c2FnZVRvQmFja2VuZCA9IFdlYkluc3BlY3Rvci5zb2NrZXQuc2VuZC5iaW5kKFdlYkluc3BlY3Rv
ci5zb2NrZXQpOwpAQCAtNTg5LDIwICs1ODksMTIgQEAgdmFyIHdpbmRvd0xvYWRlZCA9IGZ1bmN0
aW9uKCkKIAogd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCB3aW5kb3dMb2FkZWQsIGZh
bHNlKTsKIAotV2ViSW5zcGVjdG9yLmRpc3BhdGNoID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG1l
dGhvZE5hbWUgPSBhcmd1bWVudHNbMF07Ci0gICAgdmFyIHBhcmFtZXRlcnMgPSBBcnJheS5wcm90
b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwotCitXZWJJbnNwZWN0b3IuZGlzcGF0Y2gg
PSBmdW5jdGlvbihtZXNzYWdlKSB7CiAgICAgLy8gV2UnZCBsaWtlIHRvIGVuZm9yY2UgYXN5bmNo
cm9ub3VzIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGluc3BlY3RvciBjb250cm9sbGVyIGFuZCB0
aGUgZnJvbnRlbmQuCiAgICAgLy8gVGhpcyBpcyBpbXBvcnRhbnQgdG8gTGF5b3V0VGVzdHMuCiAg
ICAgZnVuY3Rpb24gZGVsYXlEaXNwYXRjaCgpCiAgICAgewotICAgICAgICBpZiAoIShtZXRob2RO
YW1lIGluIFdlYkluc3BlY3RvcikpIHsKLSAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkF0dGVt
cHRlZCB0byBkaXNwYXRjaCB1bmltcGxlbWVudGVkIFdlYkluc3BlY3RvciBtZXRob2Q6ICVzIiwg
bWV0aG9kTmFtZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBX
ZWJJbnNwZWN0b3JbbWV0aG9kTmFtZV0uYXBwbHkoV2ViSW5zcGVjdG9yLCBwYXJhbWV0ZXJzKTsK
KyAgICAgICAgV2ViSW5zcGVjdG9yX3N5bmNEaXNwYXRjaChtZXNzYWdlKTsKICAgICAgICAgV2Vi
SW5zcGVjdG9yLnBlbmRpbmdEaXNwYXRjaGVzLS07CiAgICAgfQogICAgIFdlYkluc3BlY3Rvci5w
ZW5kaW5nRGlzcGF0Y2hlcysrOwpAQCAtNjEyLDIxICs2MDQsNDAgQEAgV2ViSW5zcGVjdG9yLmRp
c3BhdGNoID0gZnVuY3Rpb24oKSB7CiAvLyBUaGlzIGZ1bmN0aW9uIGlzIHB1cnBvc2VseSBwdXQg
aW50byB0aGUgZ2xvYmFsIHNjb3BlIGZvciBlYXN5IGFjY2Vzcy4KIFdlYkluc3BlY3Rvcl9zeW5j
RGlzcGF0Y2ggPSBmdW5jdGlvbihtZXNzYWdlKQogewotICAgIHZhciBhcmdzID0gSlNPTi5wYXJz
ZShtZXNzYWdlKTsKLSAgICB2YXIgbWV0aG9kTmFtZSA9IGFyZ3NbMF07Ci0gICAgdmFyIHBhcmFt
ZXRlcnMgPSBhcmdzLnNsaWNlKDEpOwotICAgIFdlYkluc3BlY3RvclttZXRob2ROYW1lXS5hcHBs
eShXZWJJbnNwZWN0b3IsIHBhcmFtZXRlcnMpOworICAgIGlmIChtZXNzYWdlLnR5cGUgPT09ICJy
ZXNwb25zZSIgJiYgIW1lc3NhZ2Uuc3VjY2VzcykgeworICAgICAgICBXZWJJbnNwZWN0b3IucmVt
b3ZlUmVzcG9uc2VDYWxsYmFja0VudHJ5KG1lc3NhZ2Uuc2VxKQorICAgICAgICBXZWJJbnNwZWN0
b3IucmVwb3J0UHJvdG9jb2xFcnJvcihtZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHZhciBhcmd1bWVudHMgPSBbXTsKKyAgICBpZiAobWVzc2FnZS5kYXRhKQorICAgICAg
ICBmb3IgKHZhciBrZXkgaW4gbWVzc2FnZS5kYXRhKQorICAgICAgICAgICAgYXJndW1lbnRzLnB1
c2gobWVzc2FnZS5kYXRhW2tleV0pOworCisgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gImV2ZW50
IikgeworICAgICAgICBpZiAoIW1lc3NhZ2UuZXZlbnQgaW4gV2ViSW5zcGVjdG9yKSB7CisgICAg
ICAgICAgICBXZWJJbnNwZWN0b3IuZXJyb3IoIkF0dGVtcHRlZCB0byBkaXNwYXRjaCB1bmltcGxl
bWVudGVkIFdlYkluc3BlY3RvciBtZXRob2Q6ICVzIiwgbWV0aG9kTmFtZSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgV2ViSW5zcGVjdG9yW21lc3NhZ2UuZXZlbnRd
LmFwcGx5KFdlYkluc3BlY3RvciwgYXJndW1lbnRzKTsKKyAgICB9CisKKyAgICBpZiAobWVzc2Fn
ZS50eXBlID09PSAicmVzcG9uc2UiKQorICAgICAgICBXZWJJbnNwZWN0b3IucHJvY2Vzc1Jlc3Bv
bnNlKG1lc3NhZ2Uuc2VxLCBhcmd1bWVudHMpOwogfQogCi1XZWJJbnNwZWN0b3IuZGlzcGF0Y2hN
ZXNzYWdlRnJvbUJhY2tlbmQgPSBmdW5jdGlvbihhcmd1bWVudHMpCitXZWJJbnNwZWN0b3IuZGlz
cGF0Y2hNZXNzYWdlRnJvbUJhY2tlbmQgPSBmdW5jdGlvbihtZXNzYWdlT2JqZWN0KQogewotICAg
IFdlYkluc3BlY3Rvci5kaXNwYXRjaC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgIFdlYklu
c3BlY3Rvci5kaXNwYXRjaChtZXNzYWdlT2JqZWN0KTsKIH0KIAotV2ViSW5zcGVjdG9yLnJlcG9y
dFByb3RvY29sRXJyb3IgPSBmdW5jdGlvbihjYWxsSWQsIG1ldGhvZE5hbWUsIGVycm9yVGV4dCkK
K1dlYkluc3BlY3Rvci5yZXBvcnRQcm90b2NvbEVycm9yID0gZnVuY3Rpb24obWVzc2FnZSkKIHsK
LSAgICBjb25zb2xlLmVycm9yKCJJbnNwZWN0b3JCYWNrZW5kLiIgKyBtZXRob2ROYW1lICsgIiBm
YWlsZWQgd2l0aCBlcnJvciB0ZXh0OiAnIiArIGVycm9yVGV4dCArICInIik7Ci0gICAgV2ViSW5z
cGVjdG9yLnJlbW92ZVJlc3BvbnNlQ2FsbGJhY2tFbnRyeShjYWxsSWQpOworICAgIFdlYkluc3Bl
Y3Rvci5sb2coIkVycm9yOiBJbnNwZWN0b3JCYWNrZW5kLiIgKyBtZXNzYWdlLmNvbW1hbmQgKyAi
IGZhaWxlZC4iKTsKKyAgICBmb3IgKHZhciBlcnJvciBpbiBtZXNzYWdlLmVycm9ycykKKyAgICAg
ICAgV2ViSW5zcGVjdG9yLmxvZygiICAgICIgKyBlcnJvcik7CisgICAgV2ViSW5zcGVjdG9yLnJl
bW92ZVJlc3BvbnNlQ2FsbGJhY2tFbnRyeShtZXNzYWdlLnNlcSk7CiB9CiAKIFdlYkluc3BlY3Rv
ci53aW5kb3dSZXNpemUgPSBmdW5jdGlvbihldmVudCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>64978</attachid>
            <date>2010-08-20 13:20:16 -0700</date>
            <delta_ts>2010-08-23 02:48:21 -0700</delta_ts>
            <desc>sample: InspectorBackendDispatcher.cpp</desc>
            <filename>InspectorBackendDispatcher.cpp</filename>
            <type>text/plain</type>
            <size>207491</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">Ly8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgoK
I2luY2x1ZGUgImNvbmZpZy5oIgojaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aCIKCiNpZiBFTkFCTEUoSU5TUEVDVE9SKQoKI2luY2x1ZGUgIkluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudC5oIgojaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZC5oIgojaW5jbHVkZSAiSW5z
cGVjdG9yQ2xpZW50LmgiCiNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgojaW5jbHVkZSAi
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgoKbmFtZXNwYWNlIFdlYkNvcmUgewoKY29uc3QgY2hh
ciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0b3JlTGFzdEFjdGl2ZVBhbmVsQ21kID0g
InN0b3JlTGFzdEFjdGl2ZVBhbmVsIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OnNhdmVBcHBsaWNhdGlvblNldHRpbmdzQ21kID0gInNhdmVBcHBsaWNhdGlvblNldHRp
bmdzIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNhdmVTZXNzaW9u
U2V0dGluZ3NDbWQgPSAic2F2ZVNlc3Npb25TZXR0aW5ncyI7CmNvbnN0IGNoYXIqIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjplbmFibGVTZWFyY2hpbmdGb3JOb2RlQ21kID0gImVuYWJsZVNl
YXJjaGluZ0Zvck5vZGUiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzYWJsZVNlYXJjaGluZ0Zvck5vZGVDbWQgPSAiZGlzYWJsZVNlYXJjaGluZ0Zvck5vZGUiOwpj
b25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZW5hYmxlTW9uaXRvcmluZ1hI
UkNtZCA9ICJlbmFibGVNb25pdG9yaW5nWEhSIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc2FibGVNb25pdG9yaW5nWEhSQ21kID0gImRpc2FibGVNb25pdG9yaW5n
WEhSIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmVuYWJsZVJlc291
cmNlVHJhY2tpbmdDbWQgPSAiZW5hYmxlUmVzb3VyY2VUcmFja2luZyI7CmNvbnN0IGNoYXIqIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaXNhYmxlUmVzb3VyY2VUcmFja2luZ0NtZCA9ICJk
aXNhYmxlUmVzb3VyY2VUcmFja2luZyI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRSZXNvdXJjZUNvbnRlbnRDbWQgPSAiZ2V0UmVzb3VyY2VDb250ZW50IjsKY29u
c3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbG9hZFBhZ2VDbWQgPSAicmVs
b2FkUGFnZSI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzdGFydFRp
bWVsaW5lUHJvZmlsZXJDbWQgPSAic3RhcnRUaW1lbGluZVByb2ZpbGVyIjsKY29uc3QgY2hhciog
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0b3BUaW1lbGluZVByb2ZpbGVyQ21kID0gInN0
b3BUaW1lbGluZVByb2ZpbGVyIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmVuYWJsZURlYnVnZ2VyQ21kID0gImVuYWJsZURlYnVnZ2VyIjsKY29uc3QgY2hhciogSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc2FibGVEZWJ1Z2dlckNtZCA9ICJkaXNhYmxlRGVi
dWdnZXIiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0QnJlYWtw
b2ludENtZCA9ICJzZXRCcmVha3BvaW50IjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OnJlbW92ZUJyZWFrcG9pbnRDbWQgPSAicmVtb3ZlQnJlYWtwb2ludCI7CmNvbnN0
IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjphY3RpdmF0ZUJyZWFrcG9pbnRzQ21k
ID0gImFjdGl2YXRlQnJlYWtwb2ludHMiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6ZGVhY3RpdmF0ZUJyZWFrcG9pbnRzQ21kID0gImRlYWN0aXZhdGVCcmVha3BvaW50
cyI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpwYXVzZUNtZCA9ICJw
YXVzZSI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZXN1bWVDbWQg
PSAicmVzdW1lIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0ZXBP
dmVyU3RhdGVtZW50Q21kID0gInN0ZXBPdmVyU3RhdGVtZW50IjsKY29uc3QgY2hhciogSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OnN0ZXBJbnRvU3RhdGVtZW50Q21kID0gInN0ZXBJbnRvU3Rh
dGVtZW50IjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0ZXBPdXRP
ZkZ1bmN0aW9uQ21kID0gInN0ZXBPdXRPZkZ1bmN0aW9uIjsKY29uc3QgY2hhciogSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGVDbWQgPSAic2V0UGF1
c2VPbkV4Y2VwdGlvbnNTdGF0ZSI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjplZGl0U2NyaXB0U291cmNlQ21kID0gImVkaXRTY3JpcHRTb3VyY2UiOwpjb25zdCBjaGFy
KiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U2NyaXB0U291cmNlQ21kID0gImdldFNj
cmlwdFNvdXJjZSI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjplbmFi
bGVQcm9maWxlckNtZCA9ICJlbmFibGVQcm9maWxlciI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNhYmxlUHJvZmlsZXJDbWQgPSAiZGlzYWJsZVByb2ZpbGVyIjsK
Y29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0YXJ0UHJvZmlsaW5nQ21k
ID0gInN0YXJ0UHJvZmlsaW5nIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OnN0b3BQcm9maWxpbmdDbWQgPSAic3RvcFByb2ZpbGluZyI7CmNvbnN0IGNoYXIqIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9maWxlSGVhZGVyc0NtZCA9ICJnZXRQcm9maWxl
SGVhZGVycyI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9m
aWxlQ21kID0gImdldFByb2ZpbGUiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6cmVtb3ZlUHJvZmlsZUNtZCA9ICJyZW1vdmVQcm9maWxlIjsKY29uc3QgY2hhciogSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNsZWFyUHJvZmlsZXNDbWQgPSAiY2xlYXJQcm9maWxl
cyI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjp0YWtlSGVhcFNuYXBz
aG90Q21kID0gInRha2VIZWFwU25hcHNob3QiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0UHJvZmlsZXJMb2dMaW5lc0NtZCA9ICJnZXRQcm9maWxlckxvZ0xpbmVz
IjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNldEluamVjdGVkU2Ny
aXB0U291cmNlQ21kID0gInNldEluamVjdGVkU2NyaXB0U291cmNlIjsKY29uc3QgY2hhciogSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoT25JbmplY3RlZFNjcmlwdENtZCA9ICJk
aXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6YWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZENtZCA9ICJhZGRTY3JpcHRUb0V2YWx1
YXRlT25Mb2FkIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbW92
ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkQ21kID0gInJlbW92ZUFsbFNjcmlwdHNUb0V2YWx1
YXRlT25Mb2FkIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldENo
aWxkTm9kZXNDbWQgPSAiZ2V0Q2hpbGROb2RlcyI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpzZXRBdHRyaWJ1dGVDbWQgPSAic2V0QXR0cmlidXRlIjsKY29uc3QgY2hh
ciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbW92ZUF0dHJpYnV0ZUNtZCA9ICJyZW1v
dmVBdHRyaWJ1dGUiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0
VGV4dE5vZGVWYWx1ZUNtZCA9ICJzZXRUZXh0Tm9kZVZhbHVlIjsKY29uc3QgY2hhciogSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZUNtZCA9ICJnZXRF
dmVudExpc3RlbmVyc0Zvck5vZGUiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Y29weU5vZGVDbWQgPSAiY29weU5vZGUiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6cmVtb3ZlTm9kZUNtZCA9ICJyZW1vdmVOb2RlIjsKY29uc3QgY2hhciog
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNoYW5nZVRhZ05hbWVDbWQgPSAiY2hhbmdlVGFn
TmFtZSI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPdXRlckhU
TUxDbWQgPSAiZ2V0T3V0ZXJIVE1MIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OnNldE91dGVySFRNTENtZCA9ICJzZXRPdXRlckhUTUwiOwpjb25zdCBjaGFyKiBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6YWRkSW5zcGVjdGVkTm9kZUNtZCA9ICJhZGRJbnNwZWN0
ZWROb2RlIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnBlcmZvcm1T
ZWFyY2hDbWQgPSAicGVyZm9ybVNlYXJjaCI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpzZWFyY2hDYW5jZWxlZENtZCA9ICJzZWFyY2hDYW5jZWxlZCI7CmNvbnN0IGNo
YXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmRD
bWQgPSAicHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmNsZWFyQ29uc29sZU1lc3NhZ2VzQ21kID0gImNsZWFyQ29uc29sZU1l
c3NhZ2VzIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmhpZ2hsaWdo
dERPTU5vZGVDbWQgPSAiaGlnaGxpZ2h0RE9NTm9kZSI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpoaWRlRE9NTm9kZUhpZ2hsaWdodENtZCA9ICJoaWRlRE9NTm9kZUhp
Z2hsaWdodCI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpvcGVuSW5J
bnNwZWN0ZWRXaW5kb3dDbWQgPSAib3BlbkluSW5zcGVjdGVkV2luZG93IjsKY29uc3QgY2hhciog
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0eWxlc0NtZCA9ICJnZXRTdHlsZXMiOwpj
b25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QWxsU3R5bGVzQ21kID0g
ImdldEFsbFN0eWxlcyI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRJbmxpbmVTdHlsZUNtZCA9ICJnZXRJbmxpbmVTdHlsZSI7CmNvbnN0IGNoYXIqIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRDb21wdXRlZFN0eWxlQ21kID0gImdldENvbXB1dGVkU3R5
bGUiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3R5bGVTaGVl
dENtZCA9ICJnZXRTdHlsZVNoZWV0IjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldFJ1bGVSYW5nZXNDbWQgPSAiZ2V0UnVsZVJhbmdlcyI7CmNvbnN0IGNoYXIqIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjphcHBseVN0eWxlVGV4dENtZCA9ICJhcHBseVN0eWxl
VGV4dCI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRTdHlsZVRl
eHRDbWQgPSAic2V0U3R5bGVUZXh0IjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OnNldFN0eWxlUHJvcGVydHlDbWQgPSAic2V0U3R5bGVQcm9wZXJ0eSI7CmNvbnN0IGNo
YXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjp0b2dnbGVTdHlsZUVuYWJsZWRDbWQgPSAi
dG9nZ2xlU3R5bGVFbmFibGVkIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OnNldFJ1bGVTZWxlY3RvckNtZCA9ICJzZXRSdWxlU2VsZWN0b3IiOwpjb25zdCBjaGFyKiBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6YWRkUnVsZUNtZCA9ICJhZGRSdWxlIjsKY29uc3Qg
Y2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldENvb2tpZXNDbWQgPSAiZ2V0Q29v
a2llcyI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkZWxldGVDb29r
aWVDbWQgPSAiZGVsZXRlQ29va2llIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldEFwcGxpY2F0aW9uQ2FjaGVzQ21kID0gImdldEFwcGxpY2F0aW9uQ2FjaGVzIjsK
Y29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbGVhc2VXcmFwcGVyT2Jq
ZWN0R3JvdXBDbWQgPSAicmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cCI7CmNvbnN0IGNoYXIqIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kQ21k
ID0gImRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RGF0YWJhc2VUYWJsZU5hbWVzQ21kID0gImdldERhdGFiYXNl
VGFibGVOYW1lcyI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlU1FMQ21kID0gImV4ZWN1dGVTUUwiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0RE9NU3RvcmFnZUVudHJpZXNDbWQgPSAiZ2V0RE9NU3RvcmFnZUVudHJpZXMi
Owpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0RE9NU3RvcmFnZUl0
ZW1DbWQgPSAic2V0RE9NU3RvcmFnZUl0ZW0iOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW1DbWQgPSAicmVtb3ZlRE9NU3RvcmFnZUl0
ZW0iOwoKYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Q29tbWFuZE5hbWUoY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJpbmcqIHJlc3VsdCkKewogICAgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiB2YWx1ZSA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7CiAgICBp
ZiAoIXZhbHVlKQogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKICAgIGlmICghb2JqZWN0KQogICAgICAg
IHJldHVybiBmYWxzZTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGNvbW1hbmRWYWx1ZSA9
IG9iamVjdC0+Z2V0KCJjb21tYW5kIik7CiAgICBpZiAoIWNvbW1hbmRWYWx1ZSkKICAgICAgICBy
ZXR1cm4gZmFsc2U7CgogICAgcmV0dXJuIGNvbW1hbmRWYWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsK
fQp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzdG9yZUxhc3RBY3RpdmVQYW5lbChs
b25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0UmVmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVj
dChyZXF1ZXN0TWVzc2FnZU9iamVjdFJlZik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbnNw
ZWN0b3JDb250cm9sbGVyKQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmlu
Zzo6Zm9ybWF0KCJFcnJvcjogJXMgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIsICJDb250cm9s
bGVyIikpOwoKICAgIFN0cmluZyBwYW5lbE5hbWU7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gYXJndW1lbnRzQ29udGFpbmVyOwogICAgaWYgKCEoYXJndW1lbnRzQ29udGFpbmVyID0gcmVx
dWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgiYXJndW1lbnRzIikpKSB7CiAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3Ry
aW5nOjpmb3JtYXQoIkVycm9yOiBhcmd1bWVudHMgb2JqZWN0IHdhcyBub3QgZm91bmQuIikpOwog
ICAgfSBlbHNlIHsKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGFyZ3Vt
ZW50c0VuZEl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5lbmQoKTsKCiAgICAgICAgSW5z
cGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBwYW5lbE5hbWVWYWx1ZUl0ZXJhdG9yID0gYXJn
dW1lbnRzQ29udGFpbmVyLT5maW5kKCJwYW5lbE5hbWUiKTsKICAgICAgICBpZiAocGFuZWxOYW1l
VmFsdWVJdGVyYXRvciA9PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewogICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
U3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBu
b3QgZm91bmQuIiwgInBhbmVsTmFtZSIsICJTdHJpbmciKSk7CiAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgaWYgKCFwYW5lbE5hbWVWYWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzU3RyaW5nKCZw
YW5lbE5hbWUpKSB7CiAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJv
cjogQXJndW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxkIGJlICclcycuIiwgInBh
bmVsTmFtZSIsICJTdHJpbmciKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPnN0b3JlTGFzdEFjdGl2ZVBhbmVsKHBhbmVsTmFtZSk7CgogICAgLy8gdXNlIEluc3BlY3Rv
ckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAgIGlm
IChjYWxsSWQgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwg
Y2FsbElkKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJyZXNw
b25zZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiQ29u
dHJvbGxlciIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwg
InN0b3JlTGFzdEFjdGl2ZVBhbmVsIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRCb29s
KCJzdWNjZXNzIiwgIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSk7CgogICAgICAgIGlmIChwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJy
YXkoImVycm9ycyIsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OnNhdmVBcHBsaWNhdGlvblNldHRpbmdzKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0KHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVm
KTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpCiAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiAlcyBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIiwgIkNvbnRyb2xsZXIiKSk7CgogICAgU3RyaW5nIHNldHRp
bmdzOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFyZ3VtZW50c0NvbnRhaW5lcjsKICAg
IGlmICghKGFyZ3VtZW50c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmpl
Y3QoImFyZ3VtZW50cyIpKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogYXJndW1l
bnRzIG9iamVjdCB3YXMgbm90IGZvdW5kLiIpKTsKICAgIH0gZWxzZSB7CiAgICAgICAgSW5zcGVj
dG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBhcmd1bWVudHNFbmRJdGVyYXRvciA9IGFyZ3VtZW50
c0NvbnRhaW5lci0+ZW5kKCk7CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0
b3Igc2V0dGluZ3NWYWx1ZUl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5maW5kKCJzZXR0
aW5ncyIpOwogICAgICAgIGlmIChzZXR0aW5nc1ZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5k
SXRlcmF0b3IpIHsKICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1l
bnQgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJzZXR0aW5ncyIsICJTdHJp
bmciKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFzZXR0aW5nc1ZhbHVlSXRl
cmF0b3ItPnNlY29uZC0+YXNTdHJpbmcoJnNldHRpbmdzKSkgewogICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUu
IEl0IHNob3VsZCBiZSAnJXMnLiIsICJzZXR0aW5ncyIsICJTdHJpbmciKSk7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICB9CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAg
ICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNhdmVBcHBsaWNhdGlvblNldHRpbmdzKHNldHRp
bmdzKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5z
cGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNw
b25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJlc3BvbnNl
TWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAgICAgIHJlc3BvbnNlTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXRTdHJpbmcoImRvbWFpbiIsICJDb250cm9sbGVyIik7CiAgICAgICAgcmVzcG9uc2VNZXNz
YWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAic2F2ZUFwcGxpY2F0aW9uU2V0dGluZ3MiKTsKICAg
ICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAg
ICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMp
OwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKICAgIH0K
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2F2ZVNlc3Npb25TZXR0aW5ncyhs
b25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0UmVmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVj
dChyZXF1ZXN0TWVzc2FnZU9iamVjdFJlZik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbnNw
ZWN0b3JDb250cm9sbGVyKQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmlu
Zzo6Zm9ybWF0KCJFcnJvcjogJXMgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIsICJDb250cm9s
bGVyIikpOwoKICAgIFN0cmluZyBzZXR0aW5nczsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBhcmd1bWVudHNDb250YWluZXI7CiAgICBpZiAoIShhcmd1bWVudHNDb250YWluZXIgPSByZXF1
ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJhcmd1bWVudHMiKSkpIHsKICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJp
bmc6OmZvcm1hdCgiRXJyb3I6IGFyZ3VtZW50cyBvYmplY3Qgd2FzIG5vdCBmb3VuZC4iKSk7CiAg
ICB9IGVsc2UgewogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgYXJndW1l
bnRzRW5kSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmVuZCgpOwoKICAgICAgICBJbnNw
ZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHNldHRpbmdzVmFsdWVJdGVyYXRvciA9IGFyZ3Vt
ZW50c0NvbnRhaW5lci0+ZmluZCgic2V0dGluZ3MiKTsKICAgICAgICBpZiAoc2V0dGluZ3NWYWx1
ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7CiAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJp
bmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgd2l0aCB0eXBlICclcycgd2FzIG5vdCBm
b3VuZC4iLCAic2V0dGluZ3MiLCAiU3RyaW5nIikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgIGlmICghc2V0dGluZ3NWYWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzU3RyaW5nKCZzZXR0aW5n
cykpIHsKICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1
bWVudCAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBzaG91bGQgYmUgJyVzJy4iLCAic2V0dGluZ3Mi
LCAiU3RyaW5nIikpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zYXZl
U2Vzc2lvblNldHRpbmdzKHNldHRpbmdzKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQg
YXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAm
JiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwog
ICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAg
ICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJDb250cm9sbGVyIik7
CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAic2F2ZVNlc3Np
b25TZXR0aW5ncyIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0Qm9vbCgic3VjY2VzcyIs
ICFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpOwoKICAgICAgICBpZiAocHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKQogICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEFycmF5KCJlcnJvcnMi
LCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0
b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjplbmFi
bGVTZWFyY2hpbmdGb3JOb2RlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKTsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpCiAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiAlcyBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIiwgIkNvbnRyb2xsZXIiKSk7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpCiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5lbmFibGVTZWFyY2hpbmdGb3JO
b2RlKCk7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYklu
c3BlY3RvciBhdmFpbGFiaWxpdHkKICAgIGlmIChjYWxsSWQgJiYgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5oYXNGcm9udGVuZCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
cG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXNwb25z
ZU1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwgY2FsbElkKTsKICAgICAgICByZXNwb25zZU1lc3Nh
Z2UtPnNldFN0cmluZygidHlwZSIsICJyZXNwb25zZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiQ29udHJvbGxlciIpOwogICAgICAgIHJlc3BvbnNlTWVz
c2FnZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwgImVuYWJsZVNlYXJjaGluZ0Zvck5vZGUiKTsKICAg
ICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAg
ICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMp
OwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKICAgIH0K
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZVNlYXJjaGluZ0Zvck5v
ZGUobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdFJlZikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VP
YmplY3QocmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
aW5zcGVjdG9yQ29udHJvbGxlcikKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhT
dHJpbmc6OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiQ29u
dHJvbGxlciIpKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmRpc2FibGVTZWFyY2hpbmdGb3JOb2RlKCk7CgogICAgLy8g
dXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFi
aWxpdHkKICAgIGlmIChjYWxsSWQgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVu
ZCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51
bWJlcigic2VxIiwgY2FsbElkKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygi
dHlwZSIsICJyZXNwb25zZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJk
b21haW4iLCAiQ29udHJvbGxlciIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5n
KCJjb21tYW5kIiwgImRpc2FibGVTZWFyY2hpbmdGb3JOb2RlIik7CiAgICAgICAgcmVzcG9uc2VN
ZXNzYWdlLT5zZXRCb29sKCJzdWNjZXNzIiwgIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSk7Cgog
ICAgICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIHJlc3BvbnNl
TWVzc2FnZS0+c2V0QXJyYXkoImVycm9ycyIsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRl
bmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmVuYWJsZU1vbml0b3JpbmdYSFIobG9uZyBjYWxsSWQsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdFJlZikKewogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3QocmVxdWVzdE1lc3Nh
Z2VPYmplY3RSZWYpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxl
cikKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJy
b3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiQ29udHJvbGxlciIpKTsKCiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmVuYWJsZU1vbml0b3JpbmdYSFIoKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQg
YXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAm
JiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwog
ICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAg
ICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJDb250cm9sbGVyIik7
CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAiZW5hYmxlTW9u
aXRvcmluZ1hIUiIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0Qm9vbCgic3VjY2VzcyIs
ICFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpOwoKICAgICAgICBpZiAocHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKQogICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEFycmF5KCJlcnJvcnMi
LCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0
b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaXNh
YmxlTW9uaXRvcmluZ1hIUihsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdChyZXF1ZXN0TWVzc2FnZU9iamVjdFJlZik7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKQogICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogJXMgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIsICJDb250cm9sbGVyIikpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKQogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGlzYWJsZU1vbml0b3JpbmdYSFIo
KTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVj
dG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBtX2luc3BlY3RvckNvbnRyb2xsZXIt
Pmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25z
ZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJlc3BvbnNlTWVz
c2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+
c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5z
ZXRTdHJpbmcoImRvbWFpbiIsICJDb250cm9sbGVyIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXRTdHJpbmcoImNvbW1hbmQiLCAiZGlzYWJsZU1vbml0b3JpbmdYSFIiKTsKICAgICAgICBy
ZXNwb25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAg
cmVzcG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMpOwogICAg
ICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZW5hYmxlUmVzb3VyY2VUcmFja2luZyhsb25n
IGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0
UmVmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdChy
ZXF1ZXN0TWVzc2FnZU9iamVjdFJlZik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbnNwZWN0
b3JDb250cm9sbGVyKQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6
Zm9ybWF0KCJFcnJvcjogJXMgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIsICJDb250cm9sbGVy
IikpOwoKICAgIGJvb2wgYWx3YXlzOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFyZ3Vt
ZW50c0NvbnRhaW5lcjsKICAgIGlmICghKGFyZ3VtZW50c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNz
YWdlT2JqZWN0LT5nZXRPYmplY3QoImFyZ3VtZW50cyIpKSkgewogICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9y
bWF0KCJFcnJvcjogYXJndW1lbnRzIG9iamVjdCB3YXMgbm90IGZvdW5kLiIpKTsKICAgIH0gZWxz
ZSB7CiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBhcmd1bWVudHNFbmRJ
dGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZW5kKCk7CgogICAgICAgIEluc3BlY3Rvck9i
amVjdDo6Y29uc3RfaXRlcmF0b3IgYWx3YXlzVmFsdWVJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRh
aW5lci0+ZmluZCgiYWx3YXlzIik7CiAgICAgICAgaWYgKGFsd2F5c1ZhbHVlSXRlcmF0b3IgPT0g
YXJndW1lbnRzRW5kSXRlcmF0b3IpIHsKICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJF
cnJvcjogQXJndW1lbnQgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJhbHdh
eXMiLCAiQm9vbCIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIWFsd2F5c1Zh
bHVlSXRlcmF0b3ItPnNlY29uZC0+YXNCb29sKCZhbHdheXMpKSB7CiAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlw
ZS4gSXQgc2hvdWxkIGJlICclcycuIiwgImFsd2F5cyIsICJCb29sIikpOwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgfQogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAg
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5lbmFibGVSZXNvdXJjZVRyYWNraW5nKGFsd2F5cyk7
CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3Rv
ciBhdmFpbGFiaWxpdHkKICAgIGlmIChjYWxsSWQgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5o
YXNGcm9udGVuZCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VN
ZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXNwb25zZU1lc3Nh
Z2UtPnNldE51bWJlcigic2VxIiwgY2FsbElkKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNl
dFN0cmluZygidHlwZSIsICJyZXNwb25zZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0
U3RyaW5nKCJkb21haW4iLCAiQ29udHJvbGxlciIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+
c2V0U3RyaW5nKCJjb21tYW5kIiwgImVuYWJsZVJlc291cmNlVHJhY2tpbmciKTsKICAgICAgICBy
ZXNwb25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAg
cmVzcG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMpOwogICAg
ICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZVJlc291cmNlVHJhY2tpbmcobG9u
ZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVj
dFJlZikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3Qo
cmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5zcGVj
dG9yQ29udHJvbGxlcikKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6
OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiQ29udHJvbGxl
ciIpKTsKCiAgICBib29sIGFsd2F5czsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhcmd1
bWVudHNDb250YWluZXI7CiAgICBpZiAoIShhcmd1bWVudHNDb250YWluZXIgPSByZXF1ZXN0TWVz
c2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJhcmd1bWVudHMiKSkpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZv
cm1hdCgiRXJyb3I6IGFyZ3VtZW50cyBvYmplY3Qgd2FzIG5vdCBmb3VuZC4iKSk7CiAgICB9IGVs
c2UgewogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgYXJndW1lbnRzRW5k
SXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmVuZCgpOwoKICAgICAgICBJbnNwZWN0b3JP
YmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGFsd2F5c1ZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250
YWluZXItPmZpbmQoImFsd2F5cyIpOwogICAgICAgIGlmIChhbHdheXNWYWx1ZUl0ZXJhdG9yID09
IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7CiAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgi
RXJyb3I6IEFyZ3VtZW50ICclcycgd2l0aCB0eXBlICclcycgd2FzIG5vdCBmb3VuZC4iLCAiYWx3
YXlzIiwgIkJvb2wiKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFhbHdheXNW
YWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzQm9vbCgmYWx3YXlzKSkgewogICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5
cGUuIEl0IHNob3VsZCBiZSAnJXMnLiIsICJhbHdheXMiLCAiQm9vbCIpKTsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgIH0KICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAg
ICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGlzYWJsZVJlc291cmNlVHJhY2tpbmcoYWx3YXlz
KTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVj
dG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBtX2luc3BlY3RvckNvbnRyb2xsZXIt
Pmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25z
ZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJlc3BvbnNlTWVz
c2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+
c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5z
ZXRTdHJpbmcoImRvbWFpbiIsICJDb250cm9sbGVyIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXRTdHJpbmcoImNvbW1hbmQiLCAiZGlzYWJsZVJlc291cmNlVHJhY2tpbmciKTsKICAgICAg
ICByZXNwb25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAg
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMpOwog
ICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0UmVzb3VyY2VDb250ZW50KGxvbmcg
Y2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3RS
ZWYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0KHJl
cXVlc3RNZXNzYWdlT2JqZWN0UmVmKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2luc3BlY3Rv
ckNvbnRyb2xsZXIpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpm
b3JtYXQoIkVycm9yOiAlcyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIiwgIkNvbnRyb2xsZXIi
KSk7CgogICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGFyZ3VtZW50c0NvbnRhaW5lcjsKICAgIGlmICghKGFyZ3VtZW50c0NvbnRhaW5lciA9
IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoImFyZ3VtZW50cyIpKSkgewogICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogYXJndW1lbnRzIG9iamVjdCB3YXMgbm90IGZvdW5kLiIp
KTsKICAgIH0gZWxzZSB7CiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBh
cmd1bWVudHNFbmRJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZW5kKCk7CgogICAgICAg
IEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgaWRlbnRpZmllclZhbHVlSXRlcmF0b3Ig
PSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoImlkZW50aWZpZXIiKTsKICAgICAgICBpZiAoaWRl
bnRpZmllclZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5kSXRlcmF0b3IpIHsKICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyB3aXRoIHR5cGUgJyVz
JyB3YXMgbm90IGZvdW5kLiIsICJpZGVudGlmaWVyIiwgIk51bWJlciIpKTsKICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICBpZiAoIWlkZW50aWZpZXJWYWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFz
TnVtYmVyKCZpZGVudGlmaWVyKSkgewogICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZv
cm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUuIEl0IHNob3VsZCBiZSAn
JXMnLiIsICJpZGVudGlmaWVyIiwgIk51bWJlciIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgIH0KICAgICAgICBTdHJpbmcgY29udGVudDsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKQogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+Z2V0UmVzb3VyY2VDb250ZW50
KGlkZW50aWZpZXIsICZjb250ZW50KTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMg
YSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAg
ICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAg
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJDb250cm9sbGVyIik7CiAg
ICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAiZ2V0UmVzb3VyY2VD
b250ZW50Iik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRCb29sKCJzdWNjZXNzIiwgIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSk7CgogICAgICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpCiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoImVycm9ycyIsIHBy
b3RvY29sRXJyb3JzKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzcG9uc2VEYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgICAgcmVzcG9uc2VEYXRhLT5zZXRTdHJpbmcoImNvbnRlbnQiLCBjb250ZW50KTsKICAgICAg
ICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCByZXNwb25zZURhdGEpOwog
ICAgICAgIH0KICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgp
LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbG9hZFBhZ2UobG9u
ZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVj
dFJlZikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3Qo
cmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5zcGVj
dG9yQ29udHJvbGxlcikKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6
OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiQ29udHJvbGxl
ciIpKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPnJlbG9hZFBhZ2UoKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRl
bmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJ
ZCAmJiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQp
OwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7
CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJDb250cm9sbGVy
Iik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAicmVsb2Fk
UGFnZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0Qm9vbCgic3VjY2VzcyIsICFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpOwoKICAgICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKQogICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEFycmF5KCJlcnJvcnMiLCBwcm90
b2NvbEVycm9ycyk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGll
bnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzdGFydFRpbWVs
aW5lUHJvZmlsZXIobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1
ZXN0TWVzc2FnZU9iamVjdFJlZikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVz
dE1lc3NhZ2VPYmplY3QocmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpOwogICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAg
ICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iLCAiQ29udHJvbGxlciIpKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnN0YXJ0VGltZWxpbmVQcm9maWxlcigpOwoK
ICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3Ig
YXZhaWxhYmlsaXR5CiAgICBpZiAoY2FsbElkICYmIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aGFz
RnJvbnRlbmQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVz
c2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXROdW1iZXIoInNlcSIsIGNhbGxJZCk7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRT
dHJpbmcoInR5cGUiLCAicmVzcG9uc2UiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0
cmluZygiZG9tYWluIiwgIkNvbnRyb2xsZXIiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNl
dFN0cmluZygiY29tbWFuZCIsICJzdGFydFRpbWVsaW5lUHJvZmlsZXIiKTsKICAgICAgICByZXNw
b25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgcmVz
cG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMpOwogICAgICAg
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9G
cm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c3RvcFRpbWVsaW5lUHJvZmlsZXIobG9uZyBjYWxs
SWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdFJlZikK
ewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3QocmVxdWVz
dE1lc3NhZ2VPYmplY3RSZWYpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQ29u
dHJvbGxlcikKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1h
dCgiRXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiQ29udHJvbGxlciIpKTsK
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPnN0b3BUaW1lbGluZVByb2ZpbGVyKCk7CgogICAgLy8gdXNlIEluc3BlY3RvckZy
b250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAgIGlmIChj
YWxsSWQgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwgY2Fs
bElkKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJyZXNwb25z
ZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiQ29udHJv
bGxlciIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwgInN0
b3BUaW1lbGluZVByb2ZpbGVyIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRCb29sKCJz
dWNjZXNzIiwgIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSk7CgogICAgICAgIGlmIChwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXko
ImVycm9ycyIsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXIt
Pmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmVuYWJsZURlYnVnZ2VyKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKTsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKSkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6
ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiQmFja2VuZCIpKTsKCiAgICBib29sIGFs
d2F5czsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhcmd1bWVudHNDb250YWluZXI7CiAg
ICBpZiAoIShhcmd1bWVudHNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2Jq
ZWN0KCJhcmd1bWVudHMiKSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IGFyZ3Vt
ZW50cyBvYmplY3Qgd2FzIG5vdCBmb3VuZC4iKSk7CiAgICB9IGVsc2UgewogICAgICAgIEluc3Bl
Y3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgYXJndW1lbnRzRW5kSXRlcmF0b3IgPSBhcmd1bWVu
dHNDb250YWluZXItPmVuZCgpOwoKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJh
dG9yIGFsd2F5c1ZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoImFsd2F5
cyIpOwogICAgICAgIGlmIChhbHdheXNWYWx1ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJh
dG9yKSB7CiAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICcl
cycgd2l0aCB0eXBlICclcycgd2FzIG5vdCBmb3VuZC4iLCAiYWx3YXlzIiwgIkJvb2wiKSk7CiAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFhbHdheXNWYWx1ZUl0ZXJhdG9yLT5zZWNv
bmQtPmFzQm9vbCgmYWx3YXlzKSkgewogICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZv
cm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUuIEl0IHNob3VsZCBiZSAn
JXMnLiIsICJhbHdheXMiLCAiQm9vbCIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0K
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+aW5zcGVjdG9yQmFja2VuZCgpLT5lbmFibGVEZWJ1Z2dlcihhbHdheXMpOwoKICAg
IC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZh
aWxhYmlsaXR5CiAgICBpZiAoY2FsbElkICYmIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aGFzRnJv
bnRlbmQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2Fn
ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5z
ZXROdW1iZXIoInNlcSIsIGNhbGxJZCk7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJp
bmcoInR5cGUiLCAicmVzcG9uc2UiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmlu
ZygiZG9tYWluIiwgIkJhY2tlbmQiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmlu
ZygiY29tbWFuZCIsICJlbmFibGVEZWJ1Z2dlciIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+
c2V0Qm9vbCgic3VjY2VzcyIsICFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpOwoKICAgICAgICBp
ZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgICAgICByZXNwb25zZU1lc3NhZ2Ut
PnNldEFycmF5KCJlcnJvcnMiLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3Bv
bnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpkaXNhYmxlRGVidWdnZXIobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdFJlZikKewogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3QocmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYp
OwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikKICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiQ29udHJvbGxlciIpKTsKCiAgICBib29sIGFsd2F5czsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhcmd1bWVudHNDb250YWluZXI7CiAgICBpZiAo
IShhcmd1bWVudHNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJh
cmd1bWVudHMiKSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IGFyZ3VtZW50cyBv
YmplY3Qgd2FzIG5vdCBmb3VuZC4iKSk7CiAgICB9IGVsc2UgewogICAgICAgIEluc3BlY3Rvck9i
amVjdDo6Y29uc3RfaXRlcmF0b3IgYXJndW1lbnRzRW5kSXRlcmF0b3IgPSBhcmd1bWVudHNDb250
YWluZXItPmVuZCgpOwoKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGFs
d2F5c1ZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoImFsd2F5cyIpOwog
ICAgICAgIGlmIChhbHdheXNWYWx1ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7
CiAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgd2l0
aCB0eXBlICclcycgd2FzIG5vdCBmb3VuZC4iLCAiYWx3YXlzIiwgIkJvb2wiKSk7CiAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFhbHdheXNWYWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFz
Qm9vbCgmYWx3YXlzKSkgewogICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgi
RXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUuIEl0IHNob3VsZCBiZSAnJXMnLiIs
ICJhbHdheXMiLCAiQm9vbCIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+ZGlzYWJsZURlYnVnZ2VyKGFsd2F5cyk7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5k
IGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAgIGlmIChjYWxsSWQg
JiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwgY2FsbElkKTsK
ICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJyZXNwb25zZSIpOwog
ICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiQ29udHJvbGxlciIp
OwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwgImRpc2FibGVE
ZWJ1Z2dlciIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0Qm9vbCgic3VjY2VzcyIsICFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpOwoKICAgICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKQogICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEFycmF5KCJlcnJvcnMiLCBw
cm90b2NvbEVycm9ycyk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JD
bGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRCcmVh
a3BvaW50KGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1l
c3NhZ2VPYmplY3RSZWYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNz
YWdlT2JqZWN0KHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYg
KCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRlYnVnZ2VyQWdlbnQoKSkKICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRsZXIgaXMg
bm90IGF2YWlsYWJsZS4iLCAiRGVidWciKSk7CgogICAgU3RyaW5nIHNvdXJjZUlEOwogICAgdW5z
aWduZWQgaW50IGxpbmVOdW1iZXI7CiAgICBib29sIGVuYWJsZWQ7CiAgICBTdHJpbmcgY29uZGl0
aW9uOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFyZ3VtZW50c0NvbnRhaW5lcjsKICAg
IGlmICghKGFyZ3VtZW50c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmpl
Y3QoImFyZ3VtZW50cyIpKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogYXJndW1l
bnRzIG9iamVjdCB3YXMgbm90IGZvdW5kLiIpKTsKICAgIH0gZWxzZSB7CiAgICAgICAgSW5zcGVj
dG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBhcmd1bWVudHNFbmRJdGVyYXRvciA9IGFyZ3VtZW50
c0NvbnRhaW5lci0+ZW5kKCk7CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0
b3Igc291cmNlSURWYWx1ZUl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5maW5kKCJzb3Vy
Y2VJRCIpOwogICAgICAgIGlmIChzb3VyY2VJRFZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5k
SXRlcmF0b3IpIHsKICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1l
bnQgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJzb3VyY2VJRCIsICJTdHJp
bmciKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFzb3VyY2VJRFZhbHVlSXRl
cmF0b3ItPnNlY29uZC0+YXNTdHJpbmcoJnNvdXJjZUlEKSkgewogICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUu
IEl0IHNob3VsZCBiZSAnJXMnLiIsICJzb3VyY2VJRCIsICJTdHJpbmciKSk7CiAgICAgICAgICAg
IH0KICAgICAgICB9CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgbGlu
ZU51bWJlclZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoImxpbmVOdW1i
ZXIiKTsKICAgICAgICBpZiAobGluZU51bWJlclZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5k
SXRlcmF0b3IpIHsKICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1l
bnQgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJsaW5lTnVtYmVyIiwgIk51
bWJlciIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIWxpbmVOdW1iZXJWYWx1
ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzTnVtYmVyKCZsaW5lTnVtYmVyKSkgewogICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25n
IHR5cGUuIEl0IHNob3VsZCBiZSAnJXMnLiIsICJsaW5lTnVtYmVyIiwgIk51bWJlciIpKTsKICAg
ICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVy
YXRvciBlbmFibGVkVmFsdWVJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZmluZCgiZW5h
YmxlZCIpOwogICAgICAgIGlmIChlbmFibGVkVmFsdWVJdGVyYXRvciA9PSBhcmd1bWVudHNFbmRJ
dGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVu
dCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgImVuYWJsZWQiLCAiQm9vbCIp
KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIWVuYWJsZWRWYWx1ZUl0ZXJhdG9y
LT5zZWNvbmQtPmFzQm9vbCgmZW5hYmxlZCkpIHsKICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3Ry
aW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBzaG91
bGQgYmUgJyVzJy4iLCAiZW5hYmxlZCIsICJCb29sIikpOwogICAgICAgICAgICB9CiAgICAgICAg
fQoKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGNvbmRpdGlvblZhbHVl
SXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoImNvbmRpdGlvbiIpOwogICAgICAg
IGlmIChjb25kaXRpb25WYWx1ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7CiAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgd2l0aCB0
eXBlICclcycgd2FzIG5vdCBmb3VuZC4iLCAiY29uZGl0aW9uIiwgIlN0cmluZyIpKTsKICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIWNvbmRpdGlvblZhbHVlSXRlcmF0b3ItPnNlY29u
ZC0+YXNTdHJpbmcoJmNvbmRpdGlvbikpIHsKICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5n
Ojpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBzaG91bGQg
YmUgJyVzJy4iLCAiY29uZGl0aW9uIiwgIlN0cmluZyIpKTsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgIH0KICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICB1bnNpZ25lZCBp
bnQgYWN0dWFsTGluZU51bWJlciA9IDB1OwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpCiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kZWJ1Z2dlckFnZW50KCktPnNldEJy
ZWFrcG9pbnQoc291cmNlSUQsIGxpbmVOdW1iZXIsIGVuYWJsZWQsIGNvbmRpdGlvbiwgJnN1Y2Nl
c3MsICZhY3R1YWxMaW5lTnVtYmVyKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMg
YSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAg
ICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAg
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJEZWJ1ZyIpOwogICAgICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwgInNldEJyZWFrcG9pbnQiKTsK
ICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAg
ICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJv
cnMpOwogICAgICAgIGVsc2UgewogICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXNwb25zZURhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICByZXNw
b25zZURhdGEtPnNldEJvb2woInN1Y2Nlc3MiLCBzdWNjZXNzKTsKICAgICAgICAgICAgcmVzcG9u
c2VEYXRhLT5zZXROdW1iZXIoImFjdHVhbExpbmVOdW1iZXIiLCBhY3R1YWxMaW5lTnVtYmVyKTsK
ICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCByZXNwb25zZURh
dGEpOwogICAgICAgIH0KICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNs
aWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbW92ZUJy
ZWFrcG9pbnQobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0
TWVzc2FnZU9iamVjdFJlZikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1l
c3NhZ2VPYmplY3QocmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpOwogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGVidWdnZXJBZ2VudCgpKQogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogJXMgaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIsICJEZWJ1ZyIpKTsKCiAgICBTdHJpbmcgc291cmNlSUQ7CiAgICB1
bnNpZ25lZCBsb25nIGxpbmVOdW1iZXI7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXJn
dW1lbnRzQ29udGFpbmVyOwogICAgaWYgKCEoYXJndW1lbnRzQ29udGFpbmVyID0gcmVxdWVzdE1l
c3NhZ2VPYmplY3QtPmdldE9iamVjdCgiYXJndW1lbnRzIikpKSB7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpm
b3JtYXQoIkVycm9yOiBhcmd1bWVudHMgb2JqZWN0IHdhcyBub3QgZm91bmQuIikpOwogICAgfSBl
bHNlIHsKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGFyZ3VtZW50c0Vu
ZEl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5lbmQoKTsKCiAgICAgICAgSW5zcGVjdG9y
T2JqZWN0Ojpjb25zdF9pdGVyYXRvciBzb3VyY2VJRFZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHND
b250YWluZXItPmZpbmQoInNvdXJjZUlEIik7CiAgICAgICAgaWYgKHNvdXJjZUlEVmFsdWVJdGVy
YXRvciA9PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpm
b3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQu
IiwgInNvdXJjZUlEIiwgIlN0cmluZyIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBp
ZiAoIXNvdXJjZUlEVmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc1N0cmluZygmc291cmNlSUQpKSB7
CiAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQg
JyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxkIGJlICclcycuIiwgInNvdXJjZUlEIiwgIlN0
cmluZyIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgSW5zcGVjdG9yT2JqZWN0
Ojpjb25zdF9pdGVyYXRvciBsaW5lTnVtYmVyVmFsdWVJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRh
aW5lci0+ZmluZCgibGluZU51bWJlciIpOwogICAgICAgIGlmIChsaW5lTnVtYmVyVmFsdWVJdGVy
YXRvciA9PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpm
b3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQu
IiwgImxpbmVOdW1iZXIiLCAiTnVtYmVyIikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
IGlmICghbGluZU51bWJlclZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNOdW1iZXIoJmxpbmVOdW1i
ZXIpKSB7CiAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJn
dW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxkIGJlICclcycuIiwgImxpbmVOdW1i
ZXIiLCAiTnVtYmVyIikpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5k
ZWJ1Z2dlckFnZW50KCktPnJlbW92ZUJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmVOdW1iZXIpOwoK
ICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3Ig
YXZhaWxhYmlsaXR5CiAgICBpZiAoY2FsbElkICYmIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aGFz
RnJvbnRlbmQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVz
c2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXROdW1iZXIoInNlcSIsIGNhbGxJZCk7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRT
dHJpbmcoInR5cGUiLCAicmVzcG9uc2UiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0
cmluZygiZG9tYWluIiwgIkRlYnVnIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJp
bmcoImNvbW1hbmQiLCAicmVtb3ZlQnJlYWtwb2ludCIpOwogICAgICAgIHJlc3BvbnNlTWVzc2Fn
ZS0+c2V0Qm9vbCgic3VjY2VzcyIsICFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpOwoKICAgICAg
ICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgICAgICByZXNwb25zZU1lc3Nh
Z2UtPnNldEFycmF5KCJlcnJvcnMiLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJl
c3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjphY3RpdmF0ZUJyZWFrcG9pbnRzKGxvbmcgY2FsbElkLCBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0KHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0UmVmKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRl
YnVnZ2VyQWdlbnQoKSkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6
OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiRGVidWciKSk7
CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5kZWJ1Z2dlckFnZW50KCktPmFjdGl2YXRlQnJlYWtwb2ludHMoKTsKCiAgICAv
LyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWls
YWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250
ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0
TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5n
KCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmco
ImRvbWFpbiIsICJEZWJ1ZyIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJj
b21tYW5kIiwgImFjdGl2YXRlQnJlYWtwb2ludHMiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2Ut
PnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKTsKCiAgICAgICAg
aWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNw
b25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKGxvbmcgY2FsbElkLCBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0KHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0UmVmKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRl
YnVnZ2VyQWdlbnQoKSkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6
OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiRGVidWciKSk7
CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5kZWJ1Z2dlckFnZW50KCktPmRlYWN0aXZhdGVCcmVha3BvaW50cygpOwoKICAg
IC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZh
aWxhYmlsaXR5CiAgICBpZiAoY2FsbElkICYmIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aGFzRnJv
bnRlbmQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2Fn
ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5z
ZXROdW1iZXIoInNlcSIsIGNhbGxJZCk7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJp
bmcoInR5cGUiLCAicmVzcG9uc2UiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmlu
ZygiZG9tYWluIiwgIkRlYnVnIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmco
ImNvbW1hbmQiLCAiZGVhY3RpdmF0ZUJyZWFrcG9pbnRzIik7CiAgICAgICAgcmVzcG9uc2VNZXNz
YWdlLT5zZXRCb29sKCJzdWNjZXNzIiwgIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSk7CgogICAg
ICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIHJlc3BvbnNlTWVz
c2FnZS0+c2V0QXJyYXkoImVycm9ycyIsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
cmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OnBhdXNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0KHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKTsKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRlYnVnZ2VyQWdlbnQo
KSkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJy
b3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiRGVidWciKSk7CgogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5k
ZWJ1Z2dlckFnZW50KCktPnBhdXNlKCk7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFz
IGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAgIGlmIChjYWxsSWQgJiYg
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwgY2FsbElkKTsKICAg
ICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJyZXNwb25zZSIpOwogICAg
ICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiRGVidWciKTsKICAgICAg
ICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygiY29tbWFuZCIsICJwYXVzZSIpOwogICAgICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0Qm9vbCgic3VjY2VzcyIsICFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpOwoKICAgICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgICAg
ICByZXNwb25zZU1lc3NhZ2UtPnNldEFycmF5KCJlcnJvcnMiLCBwcm90b2NvbEVycm9ycyk7CiAg
ICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZXN1bWUobG9uZyBjYWxsSWQsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdFJlZikKewogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3QocmVxdWVzdE1lc3NhZ2VP
YmplY3RSZWYpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+
ZGVidWdnZXJBZ2VudCgpKQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmlu
Zzo6Zm9ybWF0KCJFcnJvcjogJXMgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIsICJEZWJ1ZyIp
KTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmRlYnVnZ2VyQWdlbnQoKS0+cmVzdW1lKCk7CgogICAgLy8gdXNlIEluc3Bl
Y3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAg
IGlmIChjYWxsSWQgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2Vx
IiwgY2FsbElkKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJy
ZXNwb25zZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAi
RGVidWciKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygiY29tbWFuZCIsICJy
ZXN1bWUiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkKICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJv
dG9jb2xFcnJvcnMpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xp
ZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKICAgIH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c3RlcE92ZXJT
dGF0ZW1lbnQobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0
TWVzc2FnZU9iamVjdFJlZikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1l
c3NhZ2VPYmplY3QocmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpOwogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGVidWdnZXJBZ2VudCgpKQogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogJXMgaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIsICJEZWJ1ZyIpKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRlYnVnZ2VyQWdlbnQoKS0+
c3RlcE92ZXJTdGF0ZW1lbnQoKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBt
YXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAgICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAgICAg
cmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJEZWJ1ZyIpOwogICAgICAgIHJl
c3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwgInN0ZXBPdmVyU3RhdGVtZW50Iik7
CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRCb29sKCJzdWNjZXNzIiwgIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSk7CgogICAgICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAg
ICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoImVycm9ycyIsIHByb3RvY29sRXJy
b3JzKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5z
ZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiAg
ICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0ZXBJbnRvU3RhdGVtZW50
KGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VP
YmplY3RSZWYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmRlYnVnZ2VyQWdlbnQoKSkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iLCAiRGVidWciKSk7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kZWJ1Z2dlckFnZW50KCktPnN0ZXBJbnRv
U3RhdGVtZW50KCk7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9m
IFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAgIGlmIChjYWxsSWQgJiYgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICBy
ZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwgY2FsbElkKTsKICAgICAgICByZXNwb25z
ZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJyZXNwb25zZSIpOwogICAgICAgIHJlc3BvbnNl
TWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiRGVidWciKTsKICAgICAgICByZXNwb25zZU1l
c3NhZ2UtPnNldFN0cmluZygiY29tbWFuZCIsICJzdGVwSW50b1N0YXRlbWVudCIpOwogICAgICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0Qm9vbCgic3VjY2VzcyIsICFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpOwoKICAgICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgICAg
ICByZXNwb25zZU1lc3NhZ2UtPnNldEFycmF5KCJlcnJvcnMiLCBwcm90b2NvbEVycm9ycyk7CiAg
ICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzdGVwT3V0T2ZGdW5jdGlvbihsb25nIGNh
bGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVm
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdChyZXF1
ZXN0TWVzc2FnZU9iamVjdFJlZik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5kZWJ1Z2dlckFnZW50KCkpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiAlcyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
IiwgIkRlYnVnIikpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAg
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGVidWdnZXJBZ2VudCgpLT5zdGVwT3V0T2ZGdW5jdGlv
bigpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNw
ZWN0b3IgYXZhaWxhYmlsaXR5CiAgICBpZiAoY2FsbElkICYmIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+aGFzRnJvbnRlbmQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Bv
bnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgcmVzcG9uc2VN
ZXNzYWdlLT5zZXROdW1iZXIoInNlcSIsIGNhbGxJZCk7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXRTdHJpbmcoInR5cGUiLCAicmVzcG9uc2UiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2Ut
PnNldFN0cmluZygiZG9tYWluIiwgIkRlYnVnIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5z
ZXRTdHJpbmcoImNvbW1hbmQiLCAic3RlcE91dE9mRnVuY3Rpb24iKTsKICAgICAgICByZXNwb25z
ZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKTsK
CiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShsb25nIGNh
bGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVm
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdChyZXF1
ZXN0TWVzc2FnZU9iamVjdFJlZik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5kZWJ1Z2dlckFnZW50KCkpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiAlcyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
IiwgIkRlYnVnIikpOwoKICAgIGxvbmcgcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBhcmd1bWVudHNDb250YWluZXI7CiAgICBpZiAoIShhcmd1bWVu
dHNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJhcmd1bWVudHMi
KSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IGFyZ3VtZW50cyBvYmplY3Qgd2Fz
IG5vdCBmb3VuZC4iKSk7CiAgICB9IGVsc2UgewogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29u
c3RfaXRlcmF0b3IgYXJndW1lbnRzRW5kSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmVu
ZCgpOwoKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHBhdXNlT25FeGNl
cHRpb25zU3RhdGVWYWx1ZUl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5maW5kKCJwYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlIik7CiAgICAgICAgaWYgKHBhdXNlT25FeGNlcHRpb25zU3RhdGVW
YWx1ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7CiAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhT
dHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgd2l0aCB0eXBlICclcycgd2FzIG5v
dCBmb3VuZC4iLCAicGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSIsICJOdW1iZXIiKSk7CiAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFwYXVzZU9uRXhjZXB0aW9uc1N0YXRlVmFsdWVJdGVy
YXRvci0+c2Vjb25kLT5hc051bWJlcigmcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSkpIHsKICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIGhh
cyB3cm9uZyB0eXBlLiBJdCBzaG91bGQgYmUgJyVzJy4iLCAicGF1c2VPbkV4Y2VwdGlvbnNTdGF0
ZSIsICJOdW1iZXIiKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRl
YnVnZ2VyQWdlbnQoKS0+c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShwYXVzZU9uRXhjZXB0aW9u
c1N0YXRlKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2Vi
SW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBtX2luc3BlY3RvckNvbnRy
b2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAgICAgIHJlc3BvbnNlTWVz
c2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAgICAgcmVzcG9uc2VNZXNz
YWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJEZWJ1ZyIpOwogICAgICAgIHJlc3BvbnNlTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwgInNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUiKTsKICAg
ICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAg
ICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMp
OwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKICAgIH0K
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZWRpdFNjcmlwdFNvdXJjZShsb25n
IGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0
UmVmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdChy
ZXF1ZXN0TWVzc2FnZU9iamVjdFJlZik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5kZWJ1Z2dlckFnZW50KCkpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiAlcyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIiwgIkRlYnVnIikpOwoKICAgIFN0cmluZyBzb3VyY2VJRDsKICAgIFN0cmluZyBuZXdDb250
ZW50OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFyZ3VtZW50c0NvbnRhaW5lcjsKICAg
IGlmICghKGFyZ3VtZW50c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmpl
Y3QoImFyZ3VtZW50cyIpKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogYXJndW1l
bnRzIG9iamVjdCB3YXMgbm90IGZvdW5kLiIpKTsKICAgIH0gZWxzZSB7CiAgICAgICAgSW5zcGVj
dG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBhcmd1bWVudHNFbmRJdGVyYXRvciA9IGFyZ3VtZW50
c0NvbnRhaW5lci0+ZW5kKCk7CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0
b3Igc291cmNlSURWYWx1ZUl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5maW5kKCJzb3Vy
Y2VJRCIpOwogICAgICAgIGlmIChzb3VyY2VJRFZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5k
SXRlcmF0b3IpIHsKICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1l
bnQgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJzb3VyY2VJRCIsICJTdHJp
bmciKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFzb3VyY2VJRFZhbHVlSXRl
cmF0b3ItPnNlY29uZC0+YXNTdHJpbmcoJnNvdXJjZUlEKSkgewogICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUu
IEl0IHNob3VsZCBiZSAnJXMnLiIsICJzb3VyY2VJRCIsICJTdHJpbmciKSk7CiAgICAgICAgICAg
IH0KICAgICAgICB9CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgbmV3
Q29udGVudFZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoIm5ld0NvbnRl
bnQiKTsKICAgICAgICBpZiAobmV3Q29udGVudFZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5k
SXRlcmF0b3IpIHsKICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1l
bnQgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJuZXdDb250ZW50IiwgIlN0
cmluZyIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIW5ld0NvbnRlbnRWYWx1
ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzU3RyaW5nKCZuZXdDb250ZW50KSkgewogICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25n
IHR5cGUuIEl0IHNob3VsZCBiZSAnJXMnLiIsICJuZXdDb250ZW50IiwgIlN0cmluZyIpKTsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsK
ICAgICAgICBTdHJpbmcgcmVzdWx0OwogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbmV3
Q2FsbEZyYW1lcyA9IEluc3BlY3RvclZhbHVlOjpudWxsKCk7CiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRlYnVnZ2VyQWdl
bnQoKS0+ZWRpdFNjcmlwdFNvdXJjZShzb3VyY2VJRCwgbmV3Q29udGVudCwgJnN1Y2Nlc3MsICZy
ZXN1bHQsICZuZXdDYWxsRnJhbWVzKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMg
YSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAg
ICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAg
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJEZWJ1ZyIpOwogICAgICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwgImVkaXRTY3JpcHRTb3VyY2Ui
KTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xF
cnJvcnMpOwogICAgICAgIGVsc2UgewogICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXNwb25zZURhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICBy
ZXNwb25zZURhdGEtPnNldEJvb2woInN1Y2Nlc3MiLCBzdWNjZXNzKTsKICAgICAgICAgICAgcmVz
cG9uc2VEYXRhLT5zZXRTdHJpbmcoInJlc3VsdCIsIHJlc3VsdCk7CiAgICAgICAgICAgIHJlc3Bv
bnNlRGF0YS0+c2V0VmFsdWUoIm5ld0NhbGxGcmFtZXMiLCBuZXdDYWxsRnJhbWVzKTsKICAgICAg
ICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCByZXNwb25zZURhdGEpOwog
ICAgICAgIH0KICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgp
LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFNjcmlwdFNvdXJj
ZShsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdl
T2JqZWN0UmVmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9i
amVjdChyZXF1ZXN0TWVzc2FnZU9iamVjdFJlZik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5kZWJ1Z2dlckFnZW50KCkpCiAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiAlcyBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIiwgIkRlYnVnIikpOwoKICAgIFN0cmluZyBzb3VyY2VJRDsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBhcmd1bWVudHNDb250YWluZXI7CiAgICBpZiAoIShhcmd1bWVudHND
b250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJhcmd1bWVudHMiKSkp
IHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IGFyZ3VtZW50cyBvYmplY3Qgd2FzIG5v
dCBmb3VuZC4iKSk7CiAgICB9IGVsc2UgewogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3Rf
aXRlcmF0b3IgYXJndW1lbnRzRW5kSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmVuZCgp
OwoKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHNvdXJjZUlEVmFsdWVJ
dGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZmluZCgic291cmNlSUQiKTsKICAgICAgICBp
ZiAoc291cmNlSURWYWx1ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7CiAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgd2l0aCB0eXBl
ICclcycgd2FzIG5vdCBmb3VuZC4iLCAic291cmNlSUQiLCAiU3RyaW5nIikpOwogICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgIGlmICghc291cmNlSURWYWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFz
U3RyaW5nKCZzb3VyY2VJRCkpIHsKICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3Jt
YXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBzaG91bGQgYmUgJyVz
Jy4iLCAic291cmNlSUQiLCAiU3RyaW5nIikpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
fQogICAgICAgIFN0cmluZyBzY3JpcHRTb3VyY2U7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRlYnVnZ2VyQWdlbnQoKS0+
Z2V0U2NyaXB0U291cmNlKHNvdXJjZUlELCAmc2NyaXB0U291cmNlKTsKCiAgICAvLyB1c2UgSW5z
cGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQog
ICAgaWYgKGNhbGxJZCAmJiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJz
ZXEiLCBjYWxsSWQpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwg
InJlc3BvbnNlIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImRvbWFpbiIs
ICJEZWJ1ZyIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwg
ImdldFNjcmlwdFNvdXJjZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0Qm9vbCgic3Vj
Y2VzcyIsICFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpOwoKICAgICAgICBpZiAocHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKQogICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEFycmF5KCJl
cnJvcnMiLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlRGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgICAgIHJlc3BvbnNlRGF0YS0+c2V0U3RyaW5nKCJzY3JpcHRTb3VyY2UiLCBz
Y3JpcHRTb3VyY2UpOwogICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgiZGF0
YSIsIHJlc3BvbnNlRGF0YSk7CiAgICAgICAgfQogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6ZW5hYmxlUHJvZmlsZXIobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdFJlZikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVxdWVzdE1lc3NhZ2VPYmplY3QocmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpOwogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikKICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iLCAiQ29udHJvbGxlciIpKTsKCiAgICBib29sIGFsd2F5czsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBhcmd1bWVudHNDb250YWluZXI7CiAgICBpZiAoIShhcmd1bWVu
dHNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJhcmd1bWVudHMi
KSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IGFyZ3VtZW50cyBvYmplY3Qgd2Fz
IG5vdCBmb3VuZC4iKSk7CiAgICB9IGVsc2UgewogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29u
c3RfaXRlcmF0b3IgYXJndW1lbnRzRW5kSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmVu
ZCgpOwoKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGFsd2F5c1ZhbHVl
SXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoImFsd2F5cyIpOwogICAgICAgIGlm
IChhbHdheXNWYWx1ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7CiAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgd2l0aCB0eXBlICcl
cycgd2FzIG5vdCBmb3VuZC4iLCAiYWx3YXlzIiwgIkJvb2wiKSk7CiAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgaWYgKCFhbHdheXNWYWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzQm9vbCgmYWx3
YXlzKSkgewogICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFy
Z3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUuIEl0IHNob3VsZCBiZSAnJXMnLiIsICJhbHdheXMi
LCAiQm9vbCIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZW5hYmxl
UHJvZmlsZXIoYWx3YXlzKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJr
ZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAgICAgIHJl
c3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAgICAgcmVz
cG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJDb250cm9sbGVyIik7CiAgICAgICAg
cmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAiZW5hYmxlUHJvZmlsZXIiKTsK
ICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAg
ICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJv
cnMpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKICAg
IH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZVByb2ZpbGVyKGxv
bmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmpl
Y3RSZWYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0
KHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2luc3Bl
Y3RvckNvbnRyb2xsZXIpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5n
Ojpmb3JtYXQoIkVycm9yOiAlcyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIiwgIkNvbnRyb2xs
ZXIiKSk7CgogICAgYm9vbCBhbHdheXM7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXJn
dW1lbnRzQ29udGFpbmVyOwogICAgaWYgKCEoYXJndW1lbnRzQ29udGFpbmVyID0gcmVxdWVzdE1l
c3NhZ2VPYmplY3QtPmdldE9iamVjdCgiYXJndW1lbnRzIikpKSB7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpm
b3JtYXQoIkVycm9yOiBhcmd1bWVudHMgb2JqZWN0IHdhcyBub3QgZm91bmQuIikpOwogICAgfSBl
bHNlIHsKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGFyZ3VtZW50c0Vu
ZEl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5lbmQoKTsKCiAgICAgICAgSW5zcGVjdG9y
T2JqZWN0Ojpjb25zdF9pdGVyYXRvciBhbHdheXNWYWx1ZUl0ZXJhdG9yID0gYXJndW1lbnRzQ29u
dGFpbmVyLT5maW5kKCJhbHdheXMiKTsKICAgICAgICBpZiAoYWx3YXlzVmFsdWVJdGVyYXRvciA9
PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQo
IkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgImFs
d2F5cyIsICJCb29sIikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghYWx3YXlz
VmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc0Jvb2woJmFsd2F5cykpIHsKICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIGhhcyB3cm9uZyB0
eXBlLiBJdCBzaG91bGQgYmUgJyVzJy4iLCAiYWx3YXlzIiwgIkJvb2wiKSk7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICB9CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAg
ICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRpc2FibGVQcm9maWxlcihhbHdheXMpOwoKICAg
IC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZh
aWxhYmlsaXR5CiAgICBpZiAoY2FsbElkICYmIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aGFzRnJv
bnRlbmQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2Fn
ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5z
ZXROdW1iZXIoInNlcSIsIGNhbGxJZCk7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJp
bmcoInR5cGUiLCAicmVzcG9uc2UiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmlu
ZygiZG9tYWluIiwgIkNvbnRyb2xsZXIiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0
cmluZygiY29tbWFuZCIsICJkaXNhYmxlUHJvZmlsZXIiKTsKICAgICAgICByZXNwb25zZU1lc3Nh
Z2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKTsKCiAgICAg
ICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgcmVzcG9uc2VNZXNz
YWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChy
ZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6c3RhcnRQcm9maWxpbmcobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdFJlZikKewogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3QocmVxdWVzdE1lc3NhZ2VPYmplY3RS
ZWYpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6ICVzIGhh
bmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiQ29udHJvbGxlciIpKTsKCiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnN0YXJ0
UHJvZmlsaW5nKCk7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9m
IFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAgIGlmIChjYWxsSWQgJiYgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICBy
ZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwgY2FsbElkKTsKICAgICAgICByZXNwb25z
ZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJyZXNwb25zZSIpOwogICAgICAgIHJlc3BvbnNl
TWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiQ29udHJvbGxlciIpOwogICAgICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwgInN0YXJ0UHJvZmlsaW5nIik7CiAgICAg
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRCb29sKCJzdWNjZXNzIiwgIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSk7CgogICAgICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAg
ICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoImVycm9ycyIsIHByb3RvY29sRXJyb3JzKTsK
ICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVz
c2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0b3BQcm9maWxpbmcobG9uZyBjYWxs
SWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdFJlZikK
ewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3QocmVxdWVz
dE1lc3NhZ2VPYmplY3RSZWYpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQ29u
dHJvbGxlcikKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1h
dCgiRXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiQ29udHJvbGxlciIpKTsK
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPnN0b3BQcm9maWxpbmcoKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQg
YXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAm
JiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwog
ICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAg
ICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJDb250cm9sbGVyIik7
CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAic3RvcFByb2Zp
bGluZyIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0Qm9vbCgic3VjY2VzcyIsICFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpOwoKICAgICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKQogICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEFycmF5KCJlcnJvcnMiLCBwcm90
b2NvbEVycm9ycyk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGll
bnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9maWxl
SGVhZGVycyhsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RN
ZXNzYWdlT2JqZWN0UmVmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVz
c2FnZU9iamVjdChyZXF1ZXN0TWVzc2FnZU9iamVjdFJlZik7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlm
ICghbV9pbnNwZWN0b3JDb250cm9sbGVyKQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogJXMgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIs
ICJDb250cm9sbGVyIikpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhcmd1bWVudHND
b250YWluZXI7CiAgICBpZiAoIShhcmd1bWVudHNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9i
amVjdC0+Z2V0T2JqZWN0KCJhcmd1bWVudHMiKSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgi
RXJyb3I6IGFyZ3VtZW50cyBvYmplY3Qgd2FzIG5vdCBmb3VuZC4iKSk7CiAgICB9IGVsc2Ugewog
ICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgYXJndW1lbnRzRW5kSXRlcmF0
b3IgPSBhcmd1bWVudHNDb250YWluZXItPmVuZCgpOwogICAgfQogICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gaGVhZGVycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
Z2V0UHJvZmlsZUhlYWRlcnMoJmhlYWRlcnMpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVu
ZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CiAgICBpZiAoY2FsbElk
ICYmIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aGFzRnJvbnRlbmQoKSkgewogICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoInNlcSIsIGNhbGxJZCk7
CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAicmVzcG9uc2UiKTsK
ICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygiZG9tYWluIiwgIkNvbnRyb2xsZXIi
KTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygiY29tbWFuZCIsICJnZXRQcm9m
aWxlSGVhZGVycyIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0Qm9vbCgic3VjY2VzcyIs
ICFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpOwoKICAgICAgICBpZiAocHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKQogICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEFycmF5KCJlcnJvcnMi
LCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3BvbnNlRGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgICAgICAgIHJlc3BvbnNlRGF0YS0+c2V0QXJyYXkoImhlYWRlcnMiLCBoZWFkZXJzKTsKICAg
ICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCByZXNwb25zZURhdGEp
OwogICAgICAgIH0KICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVu
dCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFByb2ZpbGUo
bG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9i
amVjdFJlZikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QocmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5z
cGVjdG9yQ29udHJvbGxlcikKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJp
bmc6OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiQ29udHJv
bGxlciIpKTsKCiAgICB1bnNpZ25lZCBsb25nIHVpZDsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBhcmd1bWVudHNDb250YWluZXI7CiAgICBpZiAoIShhcmd1bWVudHNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJhcmd1bWVudHMiKSkpIHsKICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhT
dHJpbmc6OmZvcm1hdCgiRXJyb3I6IGFyZ3VtZW50cyBvYmplY3Qgd2FzIG5vdCBmb3VuZC4iKSk7
CiAgICB9IGVsc2UgewogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgYXJn
dW1lbnRzRW5kSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmVuZCgpOwoKICAgICAgICBJ
bnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHVpZFZhbHVlSXRlcmF0b3IgPSBhcmd1bWVu
dHNDb250YWluZXItPmZpbmQoInVpZCIpOwogICAgICAgIGlmICh1aWRWYWx1ZUl0ZXJhdG9yID09
IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7CiAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgi
RXJyb3I6IEFyZ3VtZW50ICclcycgd2l0aCB0eXBlICclcycgd2FzIG5vdCBmb3VuZC4iLCAidWlk
IiwgIk51bWJlciIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIXVpZFZhbHVl
SXRlcmF0b3ItPnNlY29uZC0+YXNOdW1iZXIoJnVpZCkpIHsKICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJ
dCBzaG91bGQgYmUgJyVzJy4iLCAidWlkIiwgIk51bWJlciIpKTsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgIH0KICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwcm9maWxlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+Z2V0UHJvZmlsZSh1aWQsICZwcm9maWxl
KTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVj
dG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBtX2luc3BlY3RvckNvbnRyb2xsZXIt
Pmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25z
ZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJlc3BvbnNlTWVz
c2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+
c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5z
ZXRTdHJpbmcoImRvbWFpbiIsICJDb250cm9sbGVyIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXRTdHJpbmcoImNvbW1hbmQiLCAiZ2V0UHJvZmlsZSIpOwogICAgICAgIHJlc3BvbnNlTWVz
c2FnZS0+c2V0Qm9vbCgic3VjY2VzcyIsICFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpOwoKICAg
ICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgICAgICByZXNwb25zZU1l
c3NhZ2UtPnNldEFycmF5KCJlcnJvcnMiLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlRGF0YSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgIHJlc3BvbnNlRGF0YS0+c2V0T2JqZWN0
KCJwcm9maWxlIiwgcHJvZmlsZSk7CiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2Jq
ZWN0KCJkYXRhIiwgcmVzcG9uc2VEYXRhKTsKICAgICAgICB9CiAgICAgICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3Bv
bnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpyZW1vdmVQcm9maWxlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0KHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKTsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpCiAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiAlcyBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIiwgIkNvbnRyb2xsZXIiKSk7CgogICAgdW5zaWduZWQgbG9uZyB1
aWQ7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXJndW1lbnRzQ29udGFpbmVyOwogICAg
aWYgKCEoYXJndW1lbnRzQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVj
dCgiYXJndW1lbnRzIikpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBhcmd1bWVu
dHMgb2JqZWN0IHdhcyBub3QgZm91bmQuIikpOwogICAgfSBlbHNlIHsKICAgICAgICBJbnNwZWN0
b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGFyZ3VtZW50c0VuZEl0ZXJhdG9yID0gYXJndW1lbnRz
Q29udGFpbmVyLT5lbmQoKTsKCiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRv
ciB1aWRWYWx1ZUl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5maW5kKCJ1aWQiKTsKICAg
ICAgICBpZiAodWlkVmFsdWVJdGVyYXRvciA9PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewogICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlw
ZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgInVpZCIsICJOdW1iZXIiKSk7CiAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgaWYgKCF1aWRWYWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzTnVtYmVyKCZ1
aWQpKSB7CiAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJn
dW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxkIGJlICclcycuIiwgInVpZCIsICJO
dW1iZXIiKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnJlbW92ZVBy
b2ZpbGUodWlkKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2Yg
V2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJl
c3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAgICAgIHJlc3BvbnNl
TWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAgICAgcmVzcG9uc2VN
ZXNzYWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJDb250cm9sbGVyIik7CiAgICAgICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAicmVtb3ZlUHJvZmlsZSIpOwogICAgICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0Qm9vbCgic3VjY2VzcyIsICFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpOwoKICAgICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgICAg
ICByZXNwb25zZU1lc3NhZ2UtPnNldEFycmF5KCJlcnJvcnMiLCBwcm90b2NvbEVycm9ycyk7CiAg
ICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpjbGVhclByb2ZpbGVzKGxvbmcgY2FsbElk
LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0KHJlcXVlc3RN
ZXNzYWdlT2JqZWN0UmVmKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRy
b2xsZXIpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQo
IkVycm9yOiAlcyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIiwgIkNvbnRyb2xsZXIiKSk7Cgog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5jbGVhclByb2ZpbGVzKCk7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFz
IGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAgIGlmIChjYWxsSWQgJiYg
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwgY2FsbElkKTsKICAg
ICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJyZXNwb25zZSIpOwogICAg
ICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiQ29udHJvbGxlciIpOwog
ICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwgImNsZWFyUHJvZmls
ZXMiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkKICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9j
b2xFcnJvcnMpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50
KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKICAgIH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6dGFrZUhlYXBTbmFw
c2hvdChsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNz
YWdlT2JqZWN0UmVmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdChyZXF1ZXN0TWVzc2FnZU9iamVjdFJlZik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICgh
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JCYWNrZW5kKCkpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiAlcyBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIiwgIkJhY2tlbmQiKSk7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkpCiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JCYWNrZW5k
KCktPnRha2VIZWFwU25hcHNob3QoKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMg
YSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAg
ICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAg
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJCYWNrZW5kIik7CiAgICAg
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAidGFrZUhlYXBTbmFwc2hv
dCIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0Qm9vbCgic3VjY2VzcyIsICFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpOwoKICAgICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEFycmF5KCJlcnJvcnMiLCBwcm90b2Nv
bEVycm9ycyk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQo
KS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9maWxlckxv
Z0xpbmVzKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1l
c3NhZ2VPYmplY3RSZWYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNz
YWdlT2JqZWN0KHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYg
KCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKSkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iLCAiQmFja2VuZCIpKTsKCiAgICBsb25nIGluUG9zaXRpb247Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXJndW1lbnRzQ29udGFpbmVyOwogICAgaWYgKCEo
YXJndW1lbnRzQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgiYXJn
dW1lbnRzIikpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBhcmd1bWVudHMgb2Jq
ZWN0IHdhcyBub3QgZm91bmQuIikpOwogICAgfSBlbHNlIHsKICAgICAgICBJbnNwZWN0b3JPYmpl
Y3Q6OmNvbnN0X2l0ZXJhdG9yIGFyZ3VtZW50c0VuZEl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFp
bmVyLT5lbmQoKTsKCiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBpblBv
c2l0aW9uVmFsdWVJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZmluZCgiaW5Qb3NpdGlv
biIpOwogICAgICAgIGlmIChpblBvc2l0aW9uVmFsdWVJdGVyYXRvciA9PSBhcmd1bWVudHNFbmRJ
dGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVu
dCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgImluUG9zaXRpb24iLCAiTnVt
YmVyIikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghaW5Qb3NpdGlvblZhbHVl
SXRlcmF0b3ItPnNlY29uZC0+YXNOdW1iZXIoJmluUG9zaXRpb24pKSB7CiAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3Jvbmcg
dHlwZS4gSXQgc2hvdWxkIGJlICclcycuIiwgImluUG9zaXRpb24iLCAiTnVtYmVyIikpOwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgICAgIGxvbmcgb3V0UG9zaXRpb247CiAgICAg
ICAgU3RyaW5nIGxvZzsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAg
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQmFja2VuZCgpLT5nZXRQcm9maWxlckxv
Z0xpbmVzKGluUG9zaXRpb24sICZvdXRQb3NpdGlvbiwgJmxvZyk7CgogICAgLy8gdXNlIEluc3Bl
Y3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAg
IGlmIChjYWxsSWQgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2Vx
IiwgY2FsbElkKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJy
ZXNwb25zZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAi
QmFja2VuZCIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwg
ImdldFByb2ZpbGVyTG9nTGluZXMiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEJvb2wo
InN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKTsKCiAgICAgICAgaWYgKHByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRBcnJh
eSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIGVsc2UgewogICAgICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZURhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgICAgICAgICByZXNwb25zZURhdGEtPnNldE51bWJlcigib3V0UG9zaXRpb24i
LCBvdXRQb3NpdGlvbik7CiAgICAgICAgICAgIHJlc3BvbnNlRGF0YS0+c2V0U3RyaW5nKCJsb2ci
LCBsb2cpOwogICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHJl
c3BvbnNlRGF0YSk7CiAgICAgICAgfQogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5z
cGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKICAgIH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
c2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdFJlZikKewogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3QocmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpOwogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQmFja2Vu
ZCgpKQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJF
cnJvcjogJXMgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIsICJCYWNrZW5kIikpOwoKICAgIFN0
cmluZyBzY3JpcHRTb3VyY2U7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXJndW1lbnRz
Q29udGFpbmVyOwogICAgaWYgKCEoYXJndW1lbnRzQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VP
YmplY3QtPmdldE9iamVjdCgiYXJndW1lbnRzIikpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQo
IkVycm9yOiBhcmd1bWVudHMgb2JqZWN0IHdhcyBub3QgZm91bmQuIikpOwogICAgfSBlbHNlIHsK
ICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGFyZ3VtZW50c0VuZEl0ZXJh
dG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5lbmQoKTsKCiAgICAgICAgSW5zcGVjdG9yT2JqZWN0
Ojpjb25zdF9pdGVyYXRvciBzY3JpcHRTb3VyY2VWYWx1ZUl0ZXJhdG9yID0gYXJndW1lbnRzQ29u
dGFpbmVyLT5maW5kKCJzY3JpcHRTb3VyY2UiKTsKICAgICAgICBpZiAoc2NyaXB0U291cmNlVmFs
dWVJdGVyYXRvciA9PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3Ry
aW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3Qg
Zm91bmQuIiwgInNjcmlwdFNvdXJjZSIsICJTdHJpbmciKSk7CiAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgaWYgKCFzY3JpcHRTb3VyY2VWYWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzU3RyaW5n
KCZzY3JpcHRTb3VyY2UpKSB7CiAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0
KCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxkIGJlICclcycu
IiwgInNjcmlwdFNvdXJjZSIsICJTdHJpbmciKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICB9CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKS0+c2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2Uo
c2NyaXB0U291cmNlKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIg
b2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAgICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAgICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJCYWNrZW5kIik7CiAgICAgICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAic2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2Ui
KTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xF
cnJvcnMpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCkt
PnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
ICAgIH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hPbkluamVj
dGVkU2NyaXB0KGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVz
dE1lc3NhZ2VPYmplY3RSZWYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKTsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
aWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKSkKICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiQmFja2VuZCIpKTsKCiAgICBsb25nIGluamVjdGVkU2Ny
aXB0SWQ7CiAgICBTdHJpbmcgbWV0aG9kTmFtZTsKICAgIFN0cmluZyBhcmd1bWVudHM7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXJndW1lbnRzQ29udGFpbmVyOwogICAgaWYgKCEoYXJn
dW1lbnRzQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgiYXJndW1l
bnRzIikpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBhcmd1bWVudHMgb2JqZWN0
IHdhcyBub3QgZm91bmQuIikpOwogICAgfSBlbHNlIHsKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6
OmNvbnN0X2l0ZXJhdG9yIGFyZ3VtZW50c0VuZEl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVy
LT5lbmQoKTsKCiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBpbmplY3Rl
ZFNjcmlwdElkVmFsdWVJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZmluZCgiaW5qZWN0
ZWRTY3JpcHRJZCIpOwogICAgICAgIGlmIChpbmplY3RlZFNjcmlwdElkVmFsdWVJdGVyYXRvciA9
PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQo
IkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgImlu
amVjdGVkU2NyaXB0SWQiLCAiTnVtYmVyIikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
IGlmICghaW5qZWN0ZWRTY3JpcHRJZFZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNOdW1iZXIoJmlu
amVjdGVkU2NyaXB0SWQpKSB7CiAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0
KCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxkIGJlICclcycu
IiwgImluamVjdGVkU2NyaXB0SWQiLCAiTnVtYmVyIikpOwogICAgICAgICAgICB9CiAgICAgICAg
fQoKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIG1ldGhvZE5hbWVWYWx1
ZUl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5maW5kKCJtZXRob2ROYW1lIik7CiAgICAg
ICAgaWYgKG1ldGhvZE5hbWVWYWx1ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7
CiAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgd2l0
aCB0eXBlICclcycgd2FzIG5vdCBmb3VuZC4iLCAibWV0aG9kTmFtZSIsICJTdHJpbmciKSk7CiAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFtZXRob2ROYW1lVmFsdWVJdGVyYXRvci0+
c2Vjb25kLT5hc1N0cmluZygmbWV0aG9kTmFtZSkpIHsKICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
U3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBz
aG91bGQgYmUgJyVzJy4iLCAibWV0aG9kTmFtZSIsICJTdHJpbmciKSk7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgYXJndW1l
bnRzVmFsdWVJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZmluZCgiYXJndW1lbnRzIik7
CiAgICAgICAgaWYgKGFyZ3VtZW50c1ZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5kSXRlcmF0
b3IpIHsKICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVz
JyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJhcmd1bWVudHMiLCAiU3RyaW5nIikp
OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghYXJndW1lbnRzVmFsdWVJdGVyYXRv
ci0+c2Vjb25kLT5hc1N0cmluZygmYXJndW1lbnRzKSkgewogICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUuIEl0
IHNob3VsZCBiZSAnJXMnLiIsICJhcmd1bWVudHMiLCAiU3RyaW5nIikpOwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgfQogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0ID0g
SW5zcGVjdG9yVmFsdWU6Om51bGwoKTsKICAgICAgICBib29sIGlzRXhjZXB0aW9uID0gZmFsc2U7
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKS0+ZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGlu
amVjdGVkU2NyaXB0SWQsIG1ldGhvZE5hbWUsIGFyZ3VtZW50cywgJnJlc3VsdCwgJmlzRXhjZXB0
aW9uKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5z
cGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNw
b25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJlc3BvbnNl
TWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAgICAgIHJlc3BvbnNlTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXRTdHJpbmcoImRvbWFpbiIsICJCYWNrZW5kIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXRTdHJpbmcoImNvbW1hbmQiLCAiZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0Iik7CiAgICAg
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRCb29sKCJzdWNjZXNzIiwgIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSk7CgogICAgICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAg
ICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoImVycm9ycyIsIHByb3RvY29sRXJyb3JzKTsK
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9u
c2VEYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgcmVzcG9uc2VE
YXRhLT5zZXRWYWx1ZSgicmVzdWx0IiwgcmVzdWx0KTsKICAgICAgICAgICAgcmVzcG9uc2VEYXRh
LT5zZXRCb29sKCJpc0V4Y2VwdGlvbiIsIGlzRXhjZXB0aW9uKTsKICAgICAgICAgICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCByZXNwb25zZURhdGEpOwogICAgICAgIH0KICAg
ICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQo
bG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9i
amVjdFJlZikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QocmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5z
cGVjdG9yQ29udHJvbGxlcikKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJp
bmc6OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiQ29udHJv
bGxlciIpKTsKCiAgICBTdHJpbmcgc2NyaXB0U291cmNlOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGFyZ3VtZW50c0NvbnRhaW5lcjsKICAgIGlmICghKGFyZ3VtZW50c0NvbnRhaW5lciA9
IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoImFyZ3VtZW50cyIpKSkgewogICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogYXJndW1lbnRzIG9iamVjdCB3YXMgbm90IGZvdW5kLiIp
KTsKICAgIH0gZWxzZSB7CiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBh
cmd1bWVudHNFbmRJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZW5kKCk7CgogICAgICAg
IEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3Igc2NyaXB0U291cmNlVmFsdWVJdGVyYXRv
ciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZmluZCgic2NyaXB0U291cmNlIik7CiAgICAgICAgaWYg
KHNjcmlwdFNvdXJjZVZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5kSXRlcmF0b3IpIHsKICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyB3aXRoIHR5
cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJzY3JpcHRTb3VyY2UiLCAiU3RyaW5nIikpOwogICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghc2NyaXB0U291cmNlVmFsdWVJdGVyYXRvci0+
c2Vjb25kLT5hc1N0cmluZygmc2NyaXB0U291cmNlKSkgewogICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUuIEl0
IHNob3VsZCBiZSAnJXMnLiIsICJzY3JpcHRTb3VyY2UiLCAiU3RyaW5nIikpOwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgfQogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAg
ICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5hZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKHNj
cmlwdFNvdXJjZSk7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9m
IFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAgIGlmIChjYWxsSWQgJiYgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICBy
ZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwgY2FsbElkKTsKICAgICAgICByZXNwb25z
ZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJyZXNwb25zZSIpOwogICAgICAgIHJlc3BvbnNl
TWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiQ29udHJvbGxlciIpOwogICAgICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwgImFkZFNjcmlwdFRvRXZhbHVhdGVPbkxv
YWQiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkKICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9j
b2xFcnJvcnMpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50
KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKICAgIH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVtb3ZlQWxsU2Ny
aXB0c1RvRXZhbHVhdGVPbkxvYWQobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdFJlZikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVxdWVzdE1lc3NhZ2VPYmplY3QocmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpOwogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikKICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iLCAiQ29udHJvbGxlciIpKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnJlbW92ZUFsbFNjcmlwdHNU
b0V2YWx1YXRlT25Mb2FkKCk7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFy
a2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAgIGlmIChjYWxsSWQgJiYgbV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
ICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwgY2FsbElkKTsKICAgICAgICBy
ZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJyZXNwb25zZSIpOwogICAgICAgIHJl
c3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiQ29udHJvbGxlciIpOwogICAgICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwgInJlbW92ZUFsbFNjcmlwdHNU
b0V2YWx1YXRlT25Mb2FkIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRCb29sKCJzdWNj
ZXNzIiwgIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSk7CgogICAgICAgIGlmIChwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoImVy
cm9ycyIsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmlu
c3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldENoaWxkTm9kZXMobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdFJlZikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVx
dWVzdE1lc3NhZ2VPYmplY3QocmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpOwogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iLCAiRE9NIikpOwoKICAgIGxvbmcgbm9kZUlkOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGFyZ3VtZW50c0NvbnRhaW5lcjsKICAgIGlmICghKGFyZ3VtZW50
c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoImFyZ3VtZW50cyIp
KSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogYXJndW1lbnRzIG9iamVjdCB3YXMg
bm90IGZvdW5kLiIpKTsKICAgIH0gZWxzZSB7CiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25z
dF9pdGVyYXRvciBhcmd1bWVudHNFbmRJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZW5k
KCk7CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3Igbm9kZUlkVmFsdWVJ
dGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZmluZCgibm9kZUlkIik7CiAgICAgICAgaWYg
KG5vZGVJZFZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5kSXRlcmF0b3IpIHsKICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyB3aXRoIHR5cGUgJyVz
JyB3YXMgbm90IGZvdW5kLiIsICJub2RlSWQiLCAiTnVtYmVyIikpOwogICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgIGlmICghbm9kZUlkVmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc051bWJlcigm
bm9kZUlkKSkgewogICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6
IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUuIEl0IHNob3VsZCBiZSAnJXMnLiIsICJub2Rl
SWQiLCAiTnVtYmVyIikpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5k
b21BZ2VudCgpLT5nZXRDaGlsZE5vZGVzKG5vZGVJZCk7CgogICAgLy8gdXNlIEluc3BlY3RvckZy
b250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAgIGlmIChj
YWxsSWQgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwgY2Fs
bElkKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJyZXNwb25z
ZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiRE9NIik7
CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAiZ2V0Q2hpbGRO
b2RlcyIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0Qm9vbCgic3VjY2VzcyIsICFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpOwoKICAgICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKQogICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEFycmF5KCJlcnJvcnMiLCBwcm90
b2NvbEVycm9ycyk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGll
bnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRBdHRyaWJ1
dGUobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdFJlZikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VP
YmplY3QocmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
aW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSkKICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iLCAiRE9NIikpOwoKICAgIGxvbmcgZWxlbWVudElkOwogICAgU3RyaW5nIG5hbWU7CiAg
ICBTdHJpbmcgdmFsdWU7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXJndW1lbnRzQ29u
dGFpbmVyOwogICAgaWYgKCEoYXJndW1lbnRzQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QtPmdldE9iamVjdCgiYXJndW1lbnRzIikpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVy
cm9yOiBhcmd1bWVudHMgb2JqZWN0IHdhcyBub3QgZm91bmQuIikpOwogICAgfSBlbHNlIHsKICAg
ICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGFyZ3VtZW50c0VuZEl0ZXJhdG9y
ID0gYXJndW1lbnRzQ29udGFpbmVyLT5lbmQoKTsKCiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpj
b25zdF9pdGVyYXRvciBlbGVtZW50SWRWYWx1ZUl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVy
LT5maW5kKCJlbGVtZW50SWQiKTsKICAgICAgICBpZiAoZWxlbWVudElkVmFsdWVJdGVyYXRvciA9
PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQo
IkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgImVs
ZW1lbnRJZCIsICJOdW1iZXIiKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFl
bGVtZW50SWRWYWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzTnVtYmVyKCZlbGVtZW50SWQpKSB7CiAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVz
JyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxkIGJlICclcycuIiwgImVsZW1lbnRJZCIsICJOdW1i
ZXIiKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6
Y29uc3RfaXRlcmF0b3IgbmFtZVZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZp
bmQoIm5hbWUiKTsKICAgICAgICBpZiAobmFtZVZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5k
SXRlcmF0b3IpIHsKICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1l
bnQgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJuYW1lIiwgIlN0cmluZyIp
KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIW5hbWVWYWx1ZUl0ZXJhdG9yLT5z
ZWNvbmQtPmFzU3RyaW5nKCZuYW1lKSkgewogICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6
OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUuIEl0IHNob3VsZCBi
ZSAnJXMnLiIsICJuYW1lIiwgIlN0cmluZyIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAg
ICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZVZhbHVlSXRlcmF0b3Ig
PSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoInZhbHVlIik7CiAgICAgICAgaWYgKHZhbHVlVmFs
dWVJdGVyYXRvciA9PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3Ry
aW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3Qg
Zm91bmQuIiwgInZhbHVlIiwgIlN0cmluZyIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICBpZiAoIXZhbHVlVmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc1N0cmluZygmdmFsdWUpKSB7CiAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVz
JyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxkIGJlICclcycuIiwgInZhbHVlIiwgIlN0cmluZyIp
KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgICAgICBib29sIHN1Y2Nlc3MgPSBm
YWxzZTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+c2V0QXR0cmlidXRlKGVsZW1lbnRJZCwgbmFtZSwg
dmFsdWUsICZzdWNjZXNzKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJr
ZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAgICAgIHJl
c3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAgICAgcmVz
cG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJET00iKTsKICAgICAgICByZXNwb25z
ZU1lc3NhZ2UtPnNldFN0cmluZygiY29tbWFuZCIsICJzZXRBdHRyaWJ1dGUiKTsKICAgICAgICBy
ZXNwb25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAg
cmVzcG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMpOwogICAg
ICAgIGVsc2UgewogICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZURh
dGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICByZXNwb25zZURhdGEt
PnNldEJvb2woInN1Y2Nlc3MiLCBzdWNjZXNzKTsKICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXRPYmplY3QoImRhdGEiLCByZXNwb25zZURhdGEpOwogICAgICAgIH0KICAgICAgICBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRl
bmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbW92ZUF0dHJpYnV0ZShsb25nIGNhbGxJZCwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdChyZXF1ZXN0TWVzc2FnZU9i
amVjdFJlZik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT5k
b21BZ2VudCgpKQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9y
bWF0KCJFcnJvcjogJXMgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIsICJET00iKSk7CgogICAg
bG9uZyBlbGVtZW50SWQ7CiAgICBTdHJpbmcgbmFtZTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBhcmd1bWVudHNDb250YWluZXI7CiAgICBpZiAoIShhcmd1bWVudHNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJhcmd1bWVudHMiKSkpIHsKICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhT
dHJpbmc6OmZvcm1hdCgiRXJyb3I6IGFyZ3VtZW50cyBvYmplY3Qgd2FzIG5vdCBmb3VuZC4iKSk7
CiAgICB9IGVsc2UgewogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgYXJn
dW1lbnRzRW5kSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmVuZCgpOwoKICAgICAgICBJ
bnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVsZW1lbnRJZFZhbHVlSXRlcmF0b3IgPSBh
cmd1bWVudHNDb250YWluZXItPmZpbmQoImVsZW1lbnRJZCIpOwogICAgICAgIGlmIChlbGVtZW50
SWRWYWx1ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7CiAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgd2l0aCB0eXBlICclcycgd2Fz
IG5vdCBmb3VuZC4iLCAiZWxlbWVudElkIiwgIk51bWJlciIpKTsKICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICBpZiAoIWVsZW1lbnRJZFZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNOdW1iZXIo
JmVsZW1lbnRJZCkpIHsKICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVy
cm9yOiBBcmd1bWVudCAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBzaG91bGQgYmUgJyVzJy4iLCAi
ZWxlbWVudElkIiwgIk51bWJlciIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAg
SW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBuYW1lVmFsdWVJdGVyYXRvciA9IGFyZ3Vt
ZW50c0NvbnRhaW5lci0+ZmluZCgibmFtZSIpOwogICAgICAgIGlmIChuYW1lVmFsdWVJdGVyYXRv
ciA9PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3Jt
YXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwg
Im5hbWUiLCAiU3RyaW5nIikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghbmFt
ZVZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNTdHJpbmcoJm5hbWUpKSB7CiAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3Jvbmcg
dHlwZS4gSXQgc2hvdWxkIGJlICclcycuIiwgIm5hbWUiLCAiU3RyaW5nIikpOwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgfQogICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVy
LT5kb21BZ2VudCgpLT5yZW1vdmVBdHRyaWJ1dGUoZWxlbWVudElkLCBuYW1lLCAmc3VjY2Vzcyk7
CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3Rv
ciBhdmFpbGFiaWxpdHkKICAgIGlmIChjYWxsSWQgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5o
YXNGcm9udGVuZCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VN
ZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXNwb25zZU1lc3Nh
Z2UtPnNldE51bWJlcigic2VxIiwgY2FsbElkKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNl
dFN0cmluZygidHlwZSIsICJyZXNwb25zZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0
U3RyaW5nKCJkb21haW4iLCAiRE9NIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJp
bmcoImNvbW1hbmQiLCAicmVtb3ZlQXR0cmlidXRlIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXRCb29sKCJzdWNjZXNzIiwgIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSk7CgogICAgICAg
IGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2Fn
ZS0+c2V0QXJyYXkoImVycm9ycyIsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VEYXRhID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgcmVzcG9uc2VEYXRhLT5zZXRCb29sKCJzdWNj
ZXNzIiwgc3VjY2Vzcyk7CiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJk
YXRhIiwgcmVzcG9uc2VEYXRhKTsKICAgICAgICB9CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpzZXRUZXh0Tm9kZVZhbHVlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0KHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKTsKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpCiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiAl
cyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIiwgIkRPTSIpKTsKCiAgICBsb25nIG5vZGVJZDsK
ICAgIFN0cmluZyB2YWx1ZTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhcmd1bWVudHND
b250YWluZXI7CiAgICBpZiAoIShhcmd1bWVudHNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9i
amVjdC0+Z2V0T2JqZWN0KCJhcmd1bWVudHMiKSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgi
RXJyb3I6IGFyZ3VtZW50cyBvYmplY3Qgd2FzIG5vdCBmb3VuZC4iKSk7CiAgICB9IGVsc2Ugewog
ICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgYXJndW1lbnRzRW5kSXRlcmF0
b3IgPSBhcmd1bWVudHNDb250YWluZXItPmVuZCgpOwoKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6
OmNvbnN0X2l0ZXJhdG9yIG5vZGVJZFZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXIt
PmZpbmQoIm5vZGVJZCIpOwogICAgICAgIGlmIChub2RlSWRWYWx1ZUl0ZXJhdG9yID09IGFyZ3Vt
ZW50c0VuZEl0ZXJhdG9yKSB7CiAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6
IEFyZ3VtZW50ICclcycgd2l0aCB0eXBlICclcycgd2FzIG5vdCBmb3VuZC4iLCAibm9kZUlkIiwg
Ik51bWJlciIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIW5vZGVJZFZhbHVl
SXRlcmF0b3ItPnNlY29uZC0+YXNOdW1iZXIoJm5vZGVJZCkpIHsKICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIGhhcyB3cm9uZyB0eXBl
LiBJdCBzaG91bGQgYmUgJyVzJy4iLCAibm9kZUlkIiwgIk51bWJlciIpKTsKICAgICAgICAgICAg
fQogICAgICAgIH0KCiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1
ZVZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoInZhbHVlIik7CiAgICAg
ICAgaWYgKHZhbHVlVmFsdWVJdGVyYXRvciA9PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewogICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlw
ZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgInZhbHVlIiwgIlN0cmluZyIpKTsKICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICBpZiAoIXZhbHVlVmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc1N0cmlu
ZygmdmFsdWUpKSB7CiAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJv
cjogQXJndW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxkIGJlICclcycuIiwgInZh
bHVlIiwgIlN0cmluZyIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgICAgICBi
b29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQog
ICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+c2V0VGV4dE5vZGVWYWx1
ZShub2RlSWQsIHZhbHVlLCAmc3VjY2Vzcyk7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5k
IGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAgIGlmIChjYWxsSWQg
JiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwgY2FsbElkKTsK
ICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJyZXNwb25zZSIpOwog
ICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiRE9NIik7CiAgICAg
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAic2V0VGV4dE5vZGVWYWx1
ZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0Qm9vbCgic3VjY2VzcyIsICFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpOwoKICAgICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEFycmF5KCJlcnJvcnMiLCBwcm90b2Nv
bEVycm9ycyk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3BvbnNlRGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAg
IHJlc3BvbnNlRGF0YS0+c2V0Qm9vbCgic3VjY2VzcyIsIHN1Y2Nlc3MpOwogICAgICAgICAgICBy
ZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHJlc3BvbnNlRGF0YSk7CiAgICAgICAg
fQogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKICAgIH0K
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JO
b2RlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3Nh
Z2VPYmplY3RSZWYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdl
T2JqZWN0KHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiAlcyBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIiwgIkRPTSIpKTsKCiAgICBsb25nIG5vZGVJZDsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBhcmd1bWVudHNDb250YWluZXI7CiAgICBpZiAoIShhcmd1bWVudHNDb250YWluZXIg
PSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJhcmd1bWVudHMiKSkpIHsKICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IGFyZ3VtZW50cyBvYmplY3Qgd2FzIG5vdCBmb3VuZC4i
KSk7CiAgICB9IGVsc2UgewogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3Ig
YXJndW1lbnRzRW5kSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmVuZCgpOwoKICAgICAg
ICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIG5vZGVJZFZhbHVlSXRlcmF0b3IgPSBh
cmd1bWVudHNDb250YWluZXItPmZpbmQoIm5vZGVJZCIpOwogICAgICAgIGlmIChub2RlSWRWYWx1
ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7CiAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJp
bmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgd2l0aCB0eXBlICclcycgd2FzIG5vdCBm
b3VuZC4iLCAibm9kZUlkIiwgIk51bWJlciIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICBpZiAoIW5vZGVJZFZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNOdW1iZXIoJm5vZGVJZCkpIHsK
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAn
JXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBzaG91bGQgYmUgJyVzJy4iLCAibm9kZUlkIiwgIk51bWJl
ciIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgICAgICBsb25nIG91dE5vZGVJ
ZDsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGxpc3RlbmVyc0FycmF5ID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAg
ICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5nZXRFdmVudExpc3RlbmVy
c0Zvck5vZGUobm9kZUlkLCAmb3V0Tm9kZUlkLCAmbGlzdGVuZXJzQXJyYXkpOwoKICAgIC8vIHVz
ZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmls
aXR5CiAgICBpZiAoY2FsbElkICYmIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aGFzRnJvbnRlbmQo
KSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1i
ZXIoInNlcSIsIGNhbGxJZCk7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoInR5
cGUiLCAicmVzcG9uc2UiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygiZG9t
YWluIiwgIkRPTSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJjb21tYW5k
IiwgImdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+
c2V0Qm9vbCgic3VjY2VzcyIsICFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpOwoKICAgICAgICBp
ZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgICAgICByZXNwb25zZU1lc3NhZ2Ut
PnNldEFycmF5KCJlcnJvcnMiLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlRGF0YSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgIHJlc3BvbnNlRGF0YS0+c2V0TnVtYmVyKCJvdXRO
b2RlSWQiLCBvdXROb2RlSWQpOwogICAgICAgICAgICByZXNwb25zZURhdGEtPnNldEFycmF5KCJs
aXN0ZW5lcnNBcnJheSIsIGxpc3RlbmVyc0FycmF5KTsKICAgICAgICAgICAgcmVzcG9uc2VNZXNz
YWdlLT5zZXRPYmplY3QoImRhdGEiLCByZXNwb25zZURhdGEpOwogICAgICAgIH0KICAgICAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJv
bnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNvcHlOb2RlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpCnsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0KHJlcXVlc3RNZXNzYWdlT2JqZWN0
UmVmKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFn
ZW50KCkpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQo
IkVycm9yOiAlcyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIiwgIkRPTSIpKTsKCiAgICBsb25n
IG5vZGVJZDsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhcmd1bWVudHNDb250YWluZXI7
CiAgICBpZiAoIShhcmd1bWVudHNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0
T2JqZWN0KCJhcmd1bWVudHMiKSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IGFy
Z3VtZW50cyBvYmplY3Qgd2FzIG5vdCBmb3VuZC4iKSk7CiAgICB9IGVsc2UgewogICAgICAgIElu
c3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgYXJndW1lbnRzRW5kSXRlcmF0b3IgPSBhcmd1
bWVudHNDb250YWluZXItPmVuZCgpOwoKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0
ZXJhdG9yIG5vZGVJZFZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoIm5v
ZGVJZCIpOwogICAgICAgIGlmIChub2RlSWRWYWx1ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0
ZXJhdG9yKSB7CiAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50
ICclcycgd2l0aCB0eXBlICclcycgd2FzIG5vdCBmb3VuZC4iLCAibm9kZUlkIiwgIk51bWJlciIp
KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIW5vZGVJZFZhbHVlSXRlcmF0b3It
PnNlY29uZC0+YXNOdW1iZXIoJm5vZGVJZCkpIHsKICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3Ry
aW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBzaG91
bGQgYmUgJyVzJy4iLCAibm9kZUlkIiwgIk51bWJlciIpKTsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgIH0KICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+Y29weU5vZGUobm9kZUlkKTsKCiAgICAvLyB1
c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJp
bGl0eQogICAgaWYgKGNhbGxJZCAmJiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5k
KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVt
YmVyKCJzZXEiLCBjYWxsSWQpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0
eXBlIiwgInJlc3BvbnNlIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImRv
bWFpbiIsICJET00iKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygiY29tbWFu
ZCIsICJjb3B5Tm9kZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0Qm9vbCgic3VjY2Vz
cyIsICFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpOwoKICAgICAgICBpZiAocHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKQogICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEFycmF5KCJlcnJv
cnMiLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNw
ZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpy
ZW1vdmVOb2RlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVz
dE1lc3NhZ2VPYmplY3RSZWYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKTsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
aWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpCiAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiAlcyBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIiwgIkRPTSIpKTsKCiAgICBsb25nIG5vZGVJZDsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBhcmd1bWVudHNDb250YWluZXI7CiAgICBpZiAoIShhcmd1bWVudHNDb250
YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJhcmd1bWVudHMiKSkpIHsK
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IGFyZ3VtZW50cyBvYmplY3Qgd2FzIG5vdCBm
b3VuZC4iKSk7CiAgICB9IGVsc2UgewogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRl
cmF0b3IgYXJndW1lbnRzRW5kSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmVuZCgpOwoK
ICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIG5vZGVJZFZhbHVlSXRlcmF0
b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoIm5vZGVJZCIpOwogICAgICAgIGlmIChub2Rl
SWRWYWx1ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7CiAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgd2l0aCB0eXBlICclcycgd2Fz
IG5vdCBmb3VuZC4iLCAibm9kZUlkIiwgIk51bWJlciIpKTsKICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICBpZiAoIW5vZGVJZFZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNOdW1iZXIoJm5vZGVJ
ZCkpIHsKICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1
bWVudCAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBzaG91bGQgYmUgJyVzJy4iLCAibm9kZUlkIiwg
Ik51bWJlciIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgICAgICBsb25nIG91
dE5vZGVJZDsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+cmVtb3ZlTm9kZShub2RlSWQsICZvdXROb2Rl
SWQpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNw
ZWN0b3IgYXZhaWxhYmlsaXR5CiAgICBpZiAoY2FsbElkICYmIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+aGFzRnJvbnRlbmQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Bv
bnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgcmVzcG9uc2VN
ZXNzYWdlLT5zZXROdW1iZXIoInNlcSIsIGNhbGxJZCk7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXRTdHJpbmcoInR5cGUiLCAicmVzcG9uc2UiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2Ut
PnNldFN0cmluZygiZG9tYWluIiwgIkRPTSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0
U3RyaW5nKCJjb21tYW5kIiwgInJlbW92ZU5vZGUiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2Ut
PnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKTsKCiAgICAgICAg
aWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIGVsc2UgewogICAg
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZURhdGEgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICByZXNwb25zZURhdGEtPnNldE51bWJlcigib3V0
Tm9kZUlkIiwgb3V0Tm9kZUlkKTsKICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmpl
Y3QoImRhdGEiLCByZXNwb25zZURhdGEpOwogICAgICAgIH0KICAgICAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9u
c2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmNoYW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdFJlZikKewogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3QocmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpOwog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6
ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiRE9NIikpOwoKICAgIGxvbmcgbm9kZUlk
OwogICAgU3RyaW5nIG5ld1RhZ05hbWU7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXJn
dW1lbnRzQ29udGFpbmVyOwogICAgaWYgKCEoYXJndW1lbnRzQ29udGFpbmVyID0gcmVxdWVzdE1l
c3NhZ2VPYmplY3QtPmdldE9iamVjdCgiYXJndW1lbnRzIikpKSB7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpm
b3JtYXQoIkVycm9yOiBhcmd1bWVudHMgb2JqZWN0IHdhcyBub3QgZm91bmQuIikpOwogICAgfSBl
bHNlIHsKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGFyZ3VtZW50c0Vu
ZEl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5lbmQoKTsKCiAgICAgICAgSW5zcGVjdG9y
T2JqZWN0Ojpjb25zdF9pdGVyYXRvciBub2RlSWRWYWx1ZUl0ZXJhdG9yID0gYXJndW1lbnRzQ29u
dGFpbmVyLT5maW5kKCJub2RlSWQiKTsKICAgICAgICBpZiAobm9kZUlkVmFsdWVJdGVyYXRvciA9
PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQo
IkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgIm5v
ZGVJZCIsICJOdW1iZXIiKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFub2Rl
SWRWYWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzTnVtYmVyKCZub2RlSWQpKSB7CiAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3Jv
bmcgdHlwZS4gSXQgc2hvdWxkIGJlICclcycuIiwgIm5vZGVJZCIsICJOdW1iZXIiKSk7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0
b3IgbmV3VGFnTmFtZVZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoIm5l
d1RhZ05hbWUiKTsKICAgICAgICBpZiAobmV3VGFnTmFtZVZhbHVlSXRlcmF0b3IgPT0gYXJndW1l
bnRzRW5kSXRlcmF0b3IpIHsKICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjog
QXJndW1lbnQgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJuZXdUYWdOYW1l
IiwgIlN0cmluZyIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIW5ld1RhZ05h
bWVWYWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzU3RyaW5nKCZuZXdUYWdOYW1lKSkgewogICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFz
IHdyb25nIHR5cGUuIEl0IHNob3VsZCBiZSAnJXMnLiIsICJuZXdUYWdOYW1lIiwgIlN0cmluZyIp
KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgICAgICBsb25nIG91dE5vZGVJZDsK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+ZG9tQWdlbnQoKS0+Y2hhbmdlVGFnTmFtZShub2RlSWQsIG5ld1RhZ05hbWUsICZv
dXROb2RlSWQpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBX
ZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CiAgICBpZiAoY2FsbElkICYmIG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+aGFzRnJvbnRlbmQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgcmVz
cG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoInNlcSIsIGNhbGxJZCk7CiAgICAgICAgcmVzcG9uc2VN
ZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAicmVzcG9uc2UiKTsKICAgICAgICByZXNwb25zZU1l
c3NhZ2UtPnNldFN0cmluZygiZG9tYWluIiwgIkRPTSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwgImNoYW5nZVRhZ05hbWUiKTsKICAgICAgICByZXNwb25z
ZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKTsK
CiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIGVs
c2UgewogICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZURhdGEgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICByZXNwb25zZURhdGEtPnNldE51
bWJlcigib3V0Tm9kZUlkIiwgb3V0Tm9kZUlkKTsKICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXRPYmplY3QoImRhdGEiLCByZXNwb25zZURhdGEpOwogICAgICAgIH0KICAgICAgICBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRl
bmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE91dGVySFRNTChsb25nIGNhbGxJZCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdChyZXF1ZXN0TWVzc2FnZU9iamVj
dFJlZik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21B
Z2VudCgpKQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0
KCJFcnJvcjogJXMgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIsICJET00iKSk7CgogICAgbG9u
ZyBub2RlSWQ7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXJndW1lbnRzQ29udGFpbmVy
OwogICAgaWYgKCEoYXJndW1lbnRzQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdl
dE9iamVjdCgiYXJndW1lbnRzIikpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBh
cmd1bWVudHMgb2JqZWN0IHdhcyBub3QgZm91bmQuIikpOwogICAgfSBlbHNlIHsKICAgICAgICBJ
bnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGFyZ3VtZW50c0VuZEl0ZXJhdG9yID0gYXJn
dW1lbnRzQ29udGFpbmVyLT5lbmQoKTsKCiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9p
dGVyYXRvciBub2RlSWRWYWx1ZUl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5maW5kKCJu
b2RlSWQiKTsKICAgICAgICBpZiAobm9kZUlkVmFsdWVJdGVyYXRvciA9PSBhcmd1bWVudHNFbmRJ
dGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVu
dCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgIm5vZGVJZCIsICJOdW1iZXIi
KSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFub2RlSWRWYWx1ZUl0ZXJhdG9y
LT5zZWNvbmQtPmFzTnVtYmVyKCZub2RlSWQpKSB7CiAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0
cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hv
dWxkIGJlICclcycuIiwgIm5vZGVJZCIsICJOdW1iZXIiKSk7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICB9CiAgICAgICAgU3RyaW5nIG91dGVySFRNTDsKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKQogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+
Z2V0T3V0ZXJIVE1MKG5vZGVJZCwgJm91dGVySFRNTCk7CgogICAgLy8gdXNlIEluc3BlY3RvckZy
b250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAgIGlmIChj
YWxsSWQgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwgY2Fs
bElkKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJyZXNwb25z
ZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiRE9NIik7
CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAiZ2V0T3V0ZXJI
VE1MIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRCb29sKCJzdWNjZXNzIiwgIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSk7CgogICAgICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpCiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoImVycm9ycyIsIHByb3Rv
Y29sRXJyb3JzKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzcG9uc2VEYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAg
ICAgcmVzcG9uc2VEYXRhLT5zZXRTdHJpbmcoIm91dGVySFRNTCIsIG91dGVySFRNTCk7CiAgICAg
ICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwgcmVzcG9uc2VEYXRhKTsK
ICAgICAgICB9CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQo
KS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRPdXRlckhUTUwo
bG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9i
amVjdFJlZikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QocmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5z
cGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iLCAiRE9NIikpOwoKICAgIGxvbmcgbm9kZUlkOwogICAgU3RyaW5nIG91dGVySFRNTDsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhcmd1bWVudHNDb250YWluZXI7CiAgICBpZiAoIShh
cmd1bWVudHNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJhcmd1
bWVudHMiKSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IGFyZ3VtZW50cyBvYmpl
Y3Qgd2FzIG5vdCBmb3VuZC4iKSk7CiAgICB9IGVsc2UgewogICAgICAgIEluc3BlY3Rvck9iamVj
dDo6Y29uc3RfaXRlcmF0b3IgYXJndW1lbnRzRW5kSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWlu
ZXItPmVuZCgpOwoKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIG5vZGVJ
ZFZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoIm5vZGVJZCIpOwogICAg
ICAgIGlmIChub2RlSWRWYWx1ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7CiAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgd2l0aCB0
eXBlICclcycgd2FzIG5vdCBmb3VuZC4iLCAibm9kZUlkIiwgIk51bWJlciIpKTsKICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICBpZiAoIW5vZGVJZFZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNO
dW1iZXIoJm5vZGVJZCkpIHsKICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQo
IkVycm9yOiBBcmd1bWVudCAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBzaG91bGQgYmUgJyVzJy4i
LCAibm9kZUlkIiwgIk51bWJlciIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAg
SW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBvdXRlckhUTUxWYWx1ZUl0ZXJhdG9yID0g
YXJndW1lbnRzQ29udGFpbmVyLT5maW5kKCJvdXRlckhUTUwiKTsKICAgICAgICBpZiAob3V0ZXJI
VE1MVmFsdWVJdGVyYXRvciA9PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewogICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdh
cyBub3QgZm91bmQuIiwgIm91dGVySFRNTCIsICJTdHJpbmciKSk7CiAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgaWYgKCFvdXRlckhUTUxWYWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzU3RyaW5n
KCZvdXRlckhUTUwpKSB7CiAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJF
cnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxkIGJlICclcycuIiwg
Im91dGVySFRNTCIsICJTdHJpbmciKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAg
ICAgICAgbG9uZyBvdXROb2RlSWQ7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPnNldE91dGVySFRNTChu
b2RlSWQsIG91dGVySFRNTCwgJm91dE5vZGVJZCk7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250
ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAgIGlmIChjYWxs
SWQgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwgY2FsbElk
KTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJyZXNwb25zZSIp
OwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiRE9NIik7CiAg
ICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAic2V0T3V0ZXJIVE1M
Iik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRCb29sKCJzdWNjZXNzIiwgIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSk7CgogICAgICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
CiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoImVycm9ycyIsIHByb3RvY29s
RXJyb3JzKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzcG9uc2VEYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAg
cmVzcG9uc2VEYXRhLT5zZXROdW1iZXIoIm91dE5vZGVJZCIsIG91dE5vZGVJZCk7CiAgICAgICAg
ICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwgcmVzcG9uc2VEYXRhKTsKICAg
ICAgICB9CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwog
ICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjphZGRJbnNwZWN0ZWROb2Rl
KGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VP
YmplY3RSZWYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiAlcyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIiwgIkRPTSIpKTsKCiAgICBsb25nIG5vZGVJZDsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBhcmd1bWVudHNDb250YWluZXI7CiAgICBpZiAoIShhcmd1bWVudHNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJhcmd1bWVudHMiKSkpIHsKICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhT
dHJpbmc6OmZvcm1hdCgiRXJyb3I6IGFyZ3VtZW50cyBvYmplY3Qgd2FzIG5vdCBmb3VuZC4iKSk7
CiAgICB9IGVsc2UgewogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgYXJn
dW1lbnRzRW5kSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmVuZCgpOwoKICAgICAgICBJ
bnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIG5vZGVJZFZhbHVlSXRlcmF0b3IgPSBhcmd1
bWVudHNDb250YWluZXItPmZpbmQoIm5vZGVJZCIpOwogICAgICAgIGlmIChub2RlSWRWYWx1ZUl0
ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7CiAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6
OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgd2l0aCB0eXBlICclcycgd2FzIG5vdCBmb3Vu
ZC4iLCAibm9kZUlkIiwgIk51bWJlciIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBp
ZiAoIW5vZGVJZFZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNOdW1iZXIoJm5vZGVJZCkpIHsKICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMn
IGhhcyB3cm9uZyB0eXBlLiBJdCBzaG91bGQgYmUgJyVzJy4iLCAibm9kZUlkIiwgIk51bWJlciIp
KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKQogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+YWRk
SW5zcGVjdGVkTm9kZShub2RlSWQpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBh
IG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CiAgICBpZiAoY2FsbElkICYmIG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+aGFzRnJvbnRlbmQoKSkgewogICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoInNlcSIsIGNhbGxJZCk7CiAgICAg
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAicmVzcG9uc2UiKTsKICAgICAg
ICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygiZG9tYWluIiwgIkRPTSIpOwogICAgICAgIHJl
c3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwgImFkZEluc3BlY3RlZE5vZGUiKTsK
ICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAg
ICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJv
cnMpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKICAg
IH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cGVyZm9ybVNlYXJjaChsb25n
IGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0
UmVmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdChy
ZXF1ZXN0TWVzc2FnZU9iamVjdFJlZik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5kb21BZ2VudCgpKQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogJXMgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIs
ICJET00iKSk7CgogICAgU3RyaW5nIHF1ZXJ5OwogICAgYm9vbCBydW5TeW5jaHJvbm91c2x5OwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFyZ3VtZW50c0NvbnRhaW5lcjsKICAgIGlmICgh
KGFyZ3VtZW50c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoImFy
Z3VtZW50cyIpKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogYXJndW1lbnRzIG9i
amVjdCB3YXMgbm90IGZvdW5kLiIpKTsKICAgIH0gZWxzZSB7CiAgICAgICAgSW5zcGVjdG9yT2Jq
ZWN0Ojpjb25zdF9pdGVyYXRvciBhcmd1bWVudHNFbmRJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRh
aW5lci0+ZW5kKCk7CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgcXVl
cnlWYWx1ZUl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5maW5kKCJxdWVyeSIpOwogICAg
ICAgIGlmIChxdWVyeVZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5kSXRlcmF0b3IpIHsKICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyB3aXRoIHR5
cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJxdWVyeSIsICJTdHJpbmciKSk7CiAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgaWYgKCFxdWVyeVZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNTdHJp
bmcoJnF1ZXJ5KSkgewogICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJy
b3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUuIEl0IHNob3VsZCBiZSAnJXMnLiIsICJx
dWVyeSIsICJTdHJpbmciKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIEluc3Bl
Y3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgcnVuU3luY2hyb25vdXNseVZhbHVlSXRlcmF0b3Ig
PSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoInJ1blN5bmNocm9ub3VzbHkiKTsKICAgICAgICBp
ZiAocnVuU3luY2hyb25vdXNseVZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5kSXRlcmF0b3Ip
IHsKICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyB3
aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJydW5TeW5jaHJvbm91c2x5IiwgIkJvb2wi
KSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFydW5TeW5jaHJvbm91c2x5VmFs
dWVJdGVyYXRvci0+c2Vjb25kLT5hc0Jvb2woJnJ1blN5bmNocm9ub3VzbHkpKSB7CiAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMg
d3JvbmcgdHlwZS4gSXQgc2hvdWxkIGJlICclcycuIiwgInJ1blN5bmNocm9ub3VzbHkiLCAiQm9v
bCIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKQogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+
cGVyZm9ybVNlYXJjaChxdWVyeSwgcnVuU3luY2hyb25vdXNseSk7CgogICAgLy8gdXNlIEluc3Bl
Y3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAg
IGlmIChjYWxsSWQgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2Vx
IiwgY2FsbElkKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJy
ZXNwb25zZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAi
RE9NIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAicGVy
Zm9ybVNlYXJjaCIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0Qm9vbCgic3VjY2VzcyIs
ICFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpOwoKICAgICAgICBpZiAocHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKQogICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEFycmF5KCJlcnJvcnMi
LCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0
b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZWFy
Y2hDYW5jZWxlZChsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVl
c3RNZXNzYWdlT2JqZWN0UmVmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0
TWVzc2FnZU9iamVjdChyZXF1ZXN0TWVzc2FnZU9iamVjdFJlZik7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpKQogICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogJXMgaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIsICJET00iKSk7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpCiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5zZWFyY2hDYW5j
ZWxlZCgpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJ
bnNwZWN0b3IgYXZhaWxhYmlsaXR5CiAgICBpZiAoY2FsbElkICYmIG1faW5zcGVjdG9yQ29udHJv
bGxlci0+aGFzRnJvbnRlbmQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXROdW1iZXIoInNlcSIsIGNhbGxJZCk7CiAgICAgICAgcmVzcG9uc2VNZXNz
YWdlLT5zZXRTdHJpbmcoInR5cGUiLCAicmVzcG9uc2UiKTsKICAgICAgICByZXNwb25zZU1lc3Nh
Z2UtPnNldFN0cmluZygiZG9tYWluIiwgIkRPTSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+
c2V0U3RyaW5nKCJjb21tYW5kIiwgInNlYXJjaENhbmNlbGVkIik7CiAgICAgICAgcmVzcG9uc2VN
ZXNzYWdlLT5zZXRCb29sKCJzdWNjZXNzIiwgIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSk7Cgog
ICAgICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIHJlc3BvbnNl
TWVzc2FnZS0+c2V0QXJyYXkoImVycm9ycyIsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRl
bmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChsb25nIGNhbGxJ
ZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdChyZXF1ZXN0
TWVzc2FnZU9iamVjdFJlZik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5kb21BZ2VudCgpKQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0
cmluZzo6Zm9ybWF0KCJFcnJvcjogJXMgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIsICJET00i
KSk7CgogICAgU3RyaW5nIHBhdGg7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXJndW1l
bnRzQ29udGFpbmVyOwogICAgaWYgKCEoYXJndW1lbnRzQ29udGFpbmVyID0gcmVxdWVzdE1lc3Nh
Z2VPYmplY3QtPmdldE9iamVjdCgiYXJndW1lbnRzIikpKSB7CiAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3Jt
YXQoIkVycm9yOiBhcmd1bWVudHMgb2JqZWN0IHdhcyBub3QgZm91bmQuIikpOwogICAgfSBlbHNl
IHsKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGFyZ3VtZW50c0VuZEl0
ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5lbmQoKTsKCiAgICAgICAgSW5zcGVjdG9yT2Jq
ZWN0Ojpjb25zdF9pdGVyYXRvciBwYXRoVmFsdWVJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5l
ci0+ZmluZCgicGF0aCIpOwogICAgICAgIGlmIChwYXRoVmFsdWVJdGVyYXRvciA9PSBhcmd1bWVu
dHNFbmRJdGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBB
cmd1bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgInBhdGgiLCAiU3Ry
aW5nIikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghcGF0aFZhbHVlSXRlcmF0
b3ItPnNlY29uZC0+YXNTdHJpbmcoJnBhdGgpKSB7CiAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0
cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hv
dWxkIGJlICclcycuIiwgInBhdGgiLCAiU3RyaW5nIikpOwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgfQogICAgICAgIGxvbmcgbm9kZUlkOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpCiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5wdXNoTm9k
ZUJ5UGF0aFRvRnJvbnRlbmQocGF0aCwgJm5vZGVJZCk7CgogICAgLy8gdXNlIEluc3BlY3RvckZy
b250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAgIGlmIChj
YWxsSWQgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwgY2Fs
bElkKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJyZXNwb25z
ZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiRE9NIik7
CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAicHVzaE5vZGVC
eVBhdGhUb0Zyb250ZW5kIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRCb29sKCJzdWNj
ZXNzIiwgIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSk7CgogICAgICAgIGlmIChwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoImVy
cm9ycyIsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VEYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgICAgICAgICAgcmVzcG9uc2VEYXRhLT5zZXROdW1iZXIoIm5vZGVJZCIsIG5vZGVJZCk7
CiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwgcmVzcG9uc2VE
YXRhKTsKICAgICAgICB9CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JD
bGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpjbGVhckNv
bnNvbGVNZXNzYWdlcyhsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
cXVlc3RNZXNzYWdlT2JqZWN0UmVmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1
ZXN0TWVzc2FnZU9iamVjdChyZXF1ZXN0TWVzc2FnZU9iamVjdFJlZik7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogJXMgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIsICJDb250cm9sbGVyIikpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+Y2xlYXJDb25zb2xlTWVzc2FnZXMoKTsK
CiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9y
IGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmhh
c0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJlc3BvbnNlTWVzc2Fn
ZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0
U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRT
dHJpbmcoImRvbWFpbiIsICJDb250cm9sbGVyIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5z
ZXRTdHJpbmcoImNvbW1hbmQiLCAiY2xlYXJDb25zb2xlTWVzc2FnZXMiKTsKICAgICAgICByZXNw
b25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgcmVz
cG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMpOwogICAgICAg
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9G
cm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6aGlnaGxpZ2h0RE9NTm9kZShsb25nIGNhbGxJZCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdChyZXF1ZXN0TWVz
c2FnZU9iamVjdFJlZik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9s
bGVyKQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJF
cnJvcjogJXMgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIsICJDb250cm9sbGVyIikpOwoKICAg
IGxvbmcgbm9kZUlkOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFyZ3VtZW50c0NvbnRh
aW5lcjsKICAgIGlmICghKGFyZ3VtZW50c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0
LT5nZXRPYmplY3QoImFyZ3VtZW50cyIpKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJv
cjogYXJndW1lbnRzIG9iamVjdCB3YXMgbm90IGZvdW5kLiIpKTsKICAgIH0gZWxzZSB7CiAgICAg
ICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBhcmd1bWVudHNFbmRJdGVyYXRvciA9
IGFyZ3VtZW50c0NvbnRhaW5lci0+ZW5kKCk7CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29u
c3RfaXRlcmF0b3Igbm9kZUlkVmFsdWVJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+Zmlu
ZCgibm9kZUlkIik7CiAgICAgICAgaWYgKG5vZGVJZFZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRz
RW5kSXRlcmF0b3IpIHsKICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJn
dW1lbnQgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJub2RlSWQiLCAiTnVt
YmVyIikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghbm9kZUlkVmFsdWVJdGVy
YXRvci0+c2Vjb25kLT5hc051bWJlcigmbm9kZUlkKSkgewogICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUuIEl0
IHNob3VsZCBiZSAnJXMnLiIsICJub2RlSWQiLCAiTnVtYmVyIikpOwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgfQogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAg
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5oaWdobGlnaHRET01Ob2RlKG5vZGVJZCk7CgogICAgLy8g
dXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFi
aWxpdHkKICAgIGlmIChjYWxsSWQgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVu
ZCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51
bWJlcigic2VxIiwgY2FsbElkKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygi
dHlwZSIsICJyZXNwb25zZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJk
b21haW4iLCAiQ29udHJvbGxlciIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5n
KCJjb21tYW5kIiwgImhpZ2hsaWdodERPTU5vZGUiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2Ut
PnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKTsKCiAgICAgICAg
aWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNw
b25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6aGlkZURPTU5vZGVIaWdobGlnaHQobG9uZyBjYWxsSWQsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdFJlZikKewogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3QocmVxdWVzdE1lc3NhZ2VPYmpl
Y3RSZWYpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikKICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6ICVz
IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiQ29udHJvbGxlciIpKTsKCiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmhp
ZGVET01Ob2RlSGlnaGxpZ2h0KCk7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEg
bWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAgIGlmIChjYWxsSWQgJiYgbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwgY2FsbElkKTsKICAgICAg
ICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJyZXNwb25zZSIpOwogICAgICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiQ29udHJvbGxlciIpOwogICAg
ICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwgImhpZGVET01Ob2RlSGln
aGxpZ2h0Iik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRCb29sKCJzdWNjZXNzIiwgIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSk7CgogICAgICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpCiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoImVycm9ycyIsIHBy
b3RvY29sRXJyb3JzKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNs
aWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Om9wZW5Jbklu
c3BlY3RlZFdpbmRvdyhsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
cXVlc3RNZXNzYWdlT2JqZWN0UmVmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1
ZXN0TWVzc2FnZU9iamVjdChyZXF1ZXN0TWVzc2FnZU9iamVjdFJlZik7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogJXMgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIsICJDb250cm9sbGVyIikpOwoKICAgIFN0cmluZyB1cmw7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gYXJndW1lbnRzQ29udGFpbmVyOwogICAgaWYgKCEoYXJndW1lbnRzQ29udGFp
bmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgiYXJndW1lbnRzIikpKSB7CiAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBhcmd1bWVudHMgb2JqZWN0IHdhcyBub3QgZm91
bmQuIikpOwogICAgfSBlbHNlIHsKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJh
dG9yIGFyZ3VtZW50c0VuZEl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5lbmQoKTsKCiAg
ICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB1cmxWYWx1ZUl0ZXJhdG9yID0g
YXJndW1lbnRzQ29udGFpbmVyLT5maW5kKCJ1cmwiKTsKICAgICAgICBpZiAodXJsVmFsdWVJdGVy
YXRvciA9PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpm
b3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQu
IiwgInVybCIsICJTdHJpbmciKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCF1
cmxWYWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzU3RyaW5nKCZ1cmwpKSB7CiAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3Jvbmcg
dHlwZS4gSXQgc2hvdWxkIGJlICclcycuIiwgInVybCIsICJTdHJpbmciKSk7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICB9CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAg
ICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPm9wZW5Jbkluc3BlY3RlZFdpbmRvdyh1cmwpOwoK
ICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3Ig
YXZhaWxhYmlsaXR5CiAgICBpZiAoY2FsbElkICYmIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aGFz
RnJvbnRlbmQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVz
c2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXROdW1iZXIoInNlcSIsIGNhbGxJZCk7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRT
dHJpbmcoInR5cGUiLCAicmVzcG9uc2UiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0
cmluZygiZG9tYWluIiwgIkNvbnRyb2xsZXIiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNl
dFN0cmluZygiY29tbWFuZCIsICJvcGVuSW5JbnNwZWN0ZWRXaW5kb3ciKTsKICAgICAgICByZXNw
b25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgcmVz
cG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMpOwogICAgICAg
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9G
cm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3R5bGVzKGxvbmcgY2FsbElkLCBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0KHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0UmVmKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRv
bUFnZW50KCkpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3Jt
YXQoIkVycm9yOiAlcyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIiwgIkRPTSIpKTsKCiAgICBs
b25nIG5vZGVJZDsKICAgIGJvb2wgYXV0aE9ubHk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gYXJndW1lbnRzQ29udGFpbmVyOwogICAgaWYgKCEoYXJndW1lbnRzQ29udGFpbmVyID0gcmVx
dWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgiYXJndW1lbnRzIikpKSB7CiAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3Ry
aW5nOjpmb3JtYXQoIkVycm9yOiBhcmd1bWVudHMgb2JqZWN0IHdhcyBub3QgZm91bmQuIikpOwog
ICAgfSBlbHNlIHsKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGFyZ3Vt
ZW50c0VuZEl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5lbmQoKTsKCiAgICAgICAgSW5z
cGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBub2RlSWRWYWx1ZUl0ZXJhdG9yID0gYXJndW1l
bnRzQ29udGFpbmVyLT5maW5kKCJub2RlSWQiKTsKICAgICAgICBpZiAobm9kZUlkVmFsdWVJdGVy
YXRvciA9PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpm
b3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQu
IiwgIm5vZGVJZCIsICJOdW1iZXIiKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYg
KCFub2RlSWRWYWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzTnVtYmVyKCZub2RlSWQpKSB7CiAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyBo
YXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxkIGJlICclcycuIiwgIm5vZGVJZCIsICJOdW1iZXIiKSk7
CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3Rf
aXRlcmF0b3IgYXV0aE9ubHlWYWx1ZUl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5maW5k
KCJhdXRoT25seSIpOwogICAgICAgIGlmIChhdXRoT25seVZhbHVlSXRlcmF0b3IgPT0gYXJndW1l
bnRzRW5kSXRlcmF0b3IpIHsKICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjog
QXJndW1lbnQgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJhdXRoT25seSIs
ICJCb29sIikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghYXV0aE9ubHlWYWx1
ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzQm9vbCgmYXV0aE9ubHkpKSB7CiAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlw
ZS4gSXQgc2hvdWxkIGJlICclcycuIiwgImF1dGhPbmx5IiwgIkJvb2wiKSk7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICB9CiAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBzdHlsZXMg
PSBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpCiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5nZXRTdHlsZXMo
bm9kZUlkLCBhdXRoT25seSwgJnN0eWxlcyk7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5k
IGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAgIGlmIChjYWxsSWQg
JiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwgY2FsbElkKTsK
ICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJyZXNwb25zZSIpOwog
ICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiRE9NIik7CiAgICAg
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAiZ2V0U3R5bGVzIik7CiAg
ICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRCb29sKCJzdWNjZXNzIiwgIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSk7CgogICAgICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAg
ICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoImVycm9ycyIsIHByb3RvY29sRXJyb3Jz
KTsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
cG9uc2VEYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgcmVzcG9u
c2VEYXRhLT5zZXRWYWx1ZSgic3R5bGVzIiwgc3R5bGVzKTsKICAgICAgICAgICAgcmVzcG9uc2VN
ZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCByZXNwb25zZURhdGEpOwogICAgICAgIH0KICAgICAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRv
RnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFsbFN0eWxlcyhsb25nIGNhbGxJZCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdChyZXF1ZXN0TWVzc2Fn
ZU9iamVjdFJlZik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVy
LT5kb21BZ2VudCgpKQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6
Zm9ybWF0KCJFcnJvcjogJXMgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIsICJET00iKSk7CgoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFyZ3VtZW50c0NvbnRhaW5lcjsKICAgIGlmICgh
KGFyZ3VtZW50c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoImFy
Z3VtZW50cyIpKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogYXJndW1lbnRzIG9i
amVjdCB3YXMgbm90IGZvdW5kLiIpKTsKICAgIH0gZWxzZSB7CiAgICAgICAgSW5zcGVjdG9yT2Jq
ZWN0Ojpjb25zdF9pdGVyYXRvciBhcmd1bWVudHNFbmRJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRh
aW5lci0+ZW5kKCk7CiAgICB9CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBzdHlsZXMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPmdldEFsbFN0
eWxlcygmc3R5bGVzKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIg
b2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAgICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAgICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJET00iKTsKICAgICAgICByZXNwb25zZU1l
c3NhZ2UtPnNldFN0cmluZygiY29tbWFuZCIsICJnZXRBbGxTdHlsZXMiKTsKICAgICAgICByZXNw
b25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgcmVz
cG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMpOwogICAgICAg
IGVsc2UgewogICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZURhdGEg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICByZXNwb25zZURhdGEtPnNl
dEFycmF5KCJzdHlsZXMiLCBzdHlsZXMpOwogICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNl
dE9iamVjdCgiZGF0YSIsIHJlc3BvbnNlRGF0YSk7CiAgICAgICAgfQogICAgICAgIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChy
ZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW5saW5lU3R5bGUobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdFJlZikKewogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3QocmVxdWVzdE1lc3NhZ2VPYmplY3RS
ZWYpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdl
bnQoKSkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgi
RXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiRE9NIikpOwoKICAgIGxvbmcg
bm9kZUlkOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFyZ3VtZW50c0NvbnRhaW5lcjsK
ICAgIGlmICghKGFyZ3VtZW50c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRP
YmplY3QoImFyZ3VtZW50cyIpKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogYXJn
dW1lbnRzIG9iamVjdCB3YXMgbm90IGZvdW5kLiIpKTsKICAgIH0gZWxzZSB7CiAgICAgICAgSW5z
cGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBhcmd1bWVudHNFbmRJdGVyYXRvciA9IGFyZ3Vt
ZW50c0NvbnRhaW5lci0+ZW5kKCk7CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRl
cmF0b3Igbm9kZUlkVmFsdWVJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZmluZCgibm9k
ZUlkIik7CiAgICAgICAgaWYgKG5vZGVJZFZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5kSXRl
cmF0b3IpIHsKICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQg
JyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJub2RlSWQiLCAiTnVtYmVyIikp
OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghbm9kZUlkVmFsdWVJdGVyYXRvci0+
c2Vjb25kLT5hc051bWJlcigmbm9kZUlkKSkgewogICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJp
bmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUuIEl0IHNob3Vs
ZCBiZSAnJXMnLiIsICJub2RlSWQiLCAiTnVtYmVyIikpOwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgfQogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gc3R5bGUgPSBJbnNwZWN0b3JW
YWx1ZTo6bnVsbCgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAg
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5nZXRJbmxpbmVTdHlsZShub2RlSWQs
ICZzdHlsZSk7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdl
Ykluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAgIGlmIChjYWxsSWQgJiYgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXNw
b25zZU1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwgY2FsbElkKTsKICAgICAgICByZXNwb25zZU1l
c3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJyZXNwb25zZSIpOwogICAgICAgIHJlc3BvbnNlTWVz
c2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiRE9NIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXRTdHJpbmcoImNvbW1hbmQiLCAiZ2V0SW5saW5lU3R5bGUiKTsKICAgICAgICByZXNwb25z
ZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKTsK
CiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIGVs
c2UgewogICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZURhdGEgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICByZXNwb25zZURhdGEtPnNldFZh
bHVlKCJzdHlsZSIsIHN0eWxlKTsKICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmpl
Y3QoImRhdGEiLCByZXNwb25zZURhdGEpOwogICAgICAgIH0KICAgICAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9u
c2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldENvbXB1dGVkU3R5bGUobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdFJlZikKewogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3QocmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYp
OwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQo
KSkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJy
b3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiRE9NIikpOwoKICAgIGxvbmcgbm9k
ZUlkOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFyZ3VtZW50c0NvbnRhaW5lcjsKICAg
IGlmICghKGFyZ3VtZW50c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmpl
Y3QoImFyZ3VtZW50cyIpKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogYXJndW1l
bnRzIG9iamVjdCB3YXMgbm90IGZvdW5kLiIpKTsKICAgIH0gZWxzZSB7CiAgICAgICAgSW5zcGVj
dG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBhcmd1bWVudHNFbmRJdGVyYXRvciA9IGFyZ3VtZW50
c0NvbnRhaW5lci0+ZW5kKCk7CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0
b3Igbm9kZUlkVmFsdWVJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZmluZCgibm9kZUlk
Iik7CiAgICAgICAgaWYgKG5vZGVJZFZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5kSXRlcmF0
b3IpIHsKICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVz
JyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJub2RlSWQiLCAiTnVtYmVyIikpOwog
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghbm9kZUlkVmFsdWVJdGVyYXRvci0+c2Vj
b25kLT5hc051bWJlcigmbm9kZUlkKSkgewogICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6
OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUuIEl0IHNob3VsZCBi
ZSAnJXMnLiIsICJub2RlSWQiLCAiTnVtYmVyIikpOwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgfQogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gc3R5bGUgPSBJbnNwZWN0b3JWYWx1
ZTo6bnVsbCgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5nZXRDb21wdXRlZFN0eWxlKG5vZGVJZCwg
JnN0eWxlKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2Vi
SW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBtX2luc3BlY3RvckNvbnRy
b2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAgICAgIHJlc3BvbnNlTWVz
c2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAgICAgcmVzcG9uc2VNZXNz
YWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJET00iKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2Ut
PnNldFN0cmluZygiY29tbWFuZCIsICJnZXRDb21wdXRlZFN0eWxlIik7CiAgICAgICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXRCb29sKCJzdWNjZXNzIiwgIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSk7
CgogICAgICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0QXJyYXkoImVycm9ycyIsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VEYXRhID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgcmVzcG9uc2VEYXRhLT5zZXRW
YWx1ZSgic3R5bGUiLCBzdHlsZSk7CiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2Jq
ZWN0KCJkYXRhIiwgcmVzcG9uc2VEYXRhKTsKICAgICAgICB9CiAgICAgICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3Bv
bnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRTdHlsZVNoZWV0KGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0KHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKTsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkp
CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9y
OiAlcyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIiwgIkRPTSIpKTsKCiAgICBsb25nIHN0eWxl
U2hlZXRJZDsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhcmd1bWVudHNDb250YWluZXI7
CiAgICBpZiAoIShhcmd1bWVudHNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0
T2JqZWN0KCJhcmd1bWVudHMiKSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IGFy
Z3VtZW50cyBvYmplY3Qgd2FzIG5vdCBmb3VuZC4iKSk7CiAgICB9IGVsc2UgewogICAgICAgIElu
c3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgYXJndW1lbnRzRW5kSXRlcmF0b3IgPSBhcmd1
bWVudHNDb250YWluZXItPmVuZCgpOwoKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0
ZXJhdG9yIHN0eWxlU2hlZXRJZFZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZp
bmQoInN0eWxlU2hlZXRJZCIpOwogICAgICAgIGlmIChzdHlsZVNoZWV0SWRWYWx1ZUl0ZXJhdG9y
ID09IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7CiAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1h
dCgiRXJyb3I6IEFyZ3VtZW50ICclcycgd2l0aCB0eXBlICclcycgd2FzIG5vdCBmb3VuZC4iLCAi
c3R5bGVTaGVldElkIiwgIk51bWJlciIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBp
ZiAoIXN0eWxlU2hlZXRJZFZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNOdW1iZXIoJnN0eWxlU2hl
ZXRJZCkpIHsKICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBB
cmd1bWVudCAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBzaG91bGQgYmUgJyVzJy4iLCAic3R5bGVT
aGVldElkIiwgIk51bWJlciIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzdHlsZVNoZWV0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+Z2V0U3R5bGVTaGVldChzdHlsZVNoZWV0SWQs
ICZzdHlsZVNoZWV0KTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIg
b2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAgICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAgICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJET00iKTsKICAgICAgICByZXNwb25zZU1l
c3NhZ2UtPnNldFN0cmluZygiY29tbWFuZCIsICJnZXRTdHlsZVNoZWV0Iik7CiAgICAgICAgcmVz
cG9uc2VNZXNzYWdlLT5zZXRCb29sKCJzdWNjZXNzIiwgIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSk7CgogICAgICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIHJl
c3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoImVycm9ycyIsIHByb3RvY29sRXJyb3JzKTsKICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VEYXRh
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgcmVzcG9uc2VEYXRhLT5z
ZXRPYmplY3QoInN0eWxlU2hlZXQiLCBzdHlsZVNoZWV0KTsKICAgICAgICAgICAgcmVzcG9uc2VN
ZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCByZXNwb25zZURhdGEpOwogICAgICAgIH0KICAgICAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRv
RnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFJ1bGVSYW5nZXMobG9uZyBjYWxsSWQsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdFJlZikKewogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3QocmVxdWVzdE1lc3Nh
Z2VPYmplY3RSZWYpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxl
ci0+ZG9tQWdlbnQoKSkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6
OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiRE9NIikpOwoK
ICAgIGxvbmcgc3R5bGVTaGVldElkOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFyZ3Vt
ZW50c0NvbnRhaW5lcjsKICAgIGlmICghKGFyZ3VtZW50c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNz
YWdlT2JqZWN0LT5nZXRPYmplY3QoImFyZ3VtZW50cyIpKSkgewogICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9y
bWF0KCJFcnJvcjogYXJndW1lbnRzIG9iamVjdCB3YXMgbm90IGZvdW5kLiIpKTsKICAgIH0gZWxz
ZSB7CiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBhcmd1bWVudHNFbmRJ
dGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZW5kKCk7CgogICAgICAgIEluc3BlY3Rvck9i
amVjdDo6Y29uc3RfaXRlcmF0b3Igc3R5bGVTaGVldElkVmFsdWVJdGVyYXRvciA9IGFyZ3VtZW50
c0NvbnRhaW5lci0+ZmluZCgic3R5bGVTaGVldElkIik7CiAgICAgICAgaWYgKHN0eWxlU2hlZXRJ
ZFZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5kSXRlcmF0b3IpIHsKICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMg
bm90IGZvdW5kLiIsICJzdHlsZVNoZWV0SWQiLCAiTnVtYmVyIikpOwogICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgIGlmICghc3R5bGVTaGVldElkVmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc051
bWJlcigmc3R5bGVTaGVldElkKSkgewogICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZv
cm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUuIEl0IHNob3VsZCBiZSAn
JXMnLiIsICJzdHlsZVNoZWV0SWQiLCAiTnVtYmVyIikpOwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgfQogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmFuZ2VzID0gSW5zcGVjdG9y
VmFsdWU6Om51bGwoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAg
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+Z2V0UnVsZVJhbmdlcyhzdHlsZVNo
ZWV0SWQsICZyYW5nZXMpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtl
ciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CiAgICBpZiAoY2FsbElkICYmIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+aGFzRnJvbnRlbmQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoInNlcSIsIGNhbGxJZCk7CiAgICAgICAgcmVz
cG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAicmVzcG9uc2UiKTsKICAgICAgICByZXNw
b25zZU1lc3NhZ2UtPnNldFN0cmluZygiZG9tYWluIiwgIkRPTSIpOwogICAgICAgIHJlc3BvbnNl
TWVzc2FnZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwgImdldFJ1bGVSYW5nZXMiKTsKICAgICAgICBy
ZXNwb25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAg
cmVzcG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMpOwogICAg
ICAgIGVsc2UgewogICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZURh
dGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICByZXNwb25zZURhdGEt
PnNldFZhbHVlKCJyYW5nZXMiLCByYW5nZXMpOwogICAgICAgICAgICByZXNwb25zZU1lc3NhZ2Ut
PnNldE9iamVjdCgiZGF0YSIsIHJlc3BvbnNlRGF0YSk7CiAgICAgICAgfQogICAgICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6YXBwbHlTdHlsZVRleHQobG9uZyBjYWxsSWQsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdFJlZikKewogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3QocmVxdWVzdE1lc3NhZ2VPYmpl
Y3RSZWYpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9t
QWdlbnQoKSkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1h
dCgiRXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiRE9NIikpOwoKICAgIGxv
bmcgc3R5bGVJZDsKICAgIFN0cmluZyBzdHlsZVRleHQ7CiAgICBTdHJpbmcgcHJvcGVydHlOYW1l
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFyZ3VtZW50c0NvbnRhaW5lcjsKICAgIGlm
ICghKGFyZ3VtZW50c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3Qo
ImFyZ3VtZW50cyIpKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogYXJndW1lbnRz
IG9iamVjdCB3YXMgbm90IGZvdW5kLiIpKTsKICAgIH0gZWxzZSB7CiAgICAgICAgSW5zcGVjdG9y
T2JqZWN0Ojpjb25zdF9pdGVyYXRvciBhcmd1bWVudHNFbmRJdGVyYXRvciA9IGFyZ3VtZW50c0Nv
bnRhaW5lci0+ZW5kKCk7CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3Ig
c3R5bGVJZFZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoInN0eWxlSWQi
KTsKICAgICAgICBpZiAoc3R5bGVJZFZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5kSXRlcmF0
b3IpIHsKICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVz
JyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJzdHlsZUlkIiwgIk51bWJlciIpKTsK
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIXN0eWxlSWRWYWx1ZUl0ZXJhdG9yLT5z
ZWNvbmQtPmFzTnVtYmVyKCZzdHlsZUlkKSkgewogICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJp
bmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUuIEl0IHNob3Vs
ZCBiZSAnJXMnLiIsICJzdHlsZUlkIiwgIk51bWJlciIpKTsKICAgICAgICAgICAgfQogICAgICAg
IH0KCiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBzdHlsZVRleHRWYWx1
ZUl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5maW5kKCJzdHlsZVRleHQiKTsKICAgICAg
ICBpZiAoc3R5bGVUZXh0VmFsdWVJdGVyYXRvciA9PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewog
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGgg
dHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgInN0eWxlVGV4dCIsICJTdHJpbmciKSk7CiAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFzdHlsZVRleHRWYWx1ZUl0ZXJhdG9yLT5zZWNv
bmQtPmFzU3RyaW5nKCZzdHlsZVRleHQpKSB7CiAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmlu
Zzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxk
IGJlICclcycuIiwgInN0eWxlVGV4dCIsICJTdHJpbmciKSk7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgcHJvcGVydHlOYW1l
VmFsdWVJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZmluZCgicHJvcGVydHlOYW1lIik7
CiAgICAgICAgaWYgKHByb3BlcnR5TmFtZVZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5kSXRl
cmF0b3IpIHsKICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQg
JyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJwcm9wZXJ0eU5hbWUiLCAiU3Ry
aW5nIikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghcHJvcGVydHlOYW1lVmFs
dWVJdGVyYXRvci0+c2Vjb25kLT5hc1N0cmluZygmcHJvcGVydHlOYW1lKSkgewogICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdy
b25nIHR5cGUuIEl0IHNob3VsZCBiZSAnJXMnLiIsICJwcm9wZXJ0eU5hbWUiLCAiU3RyaW5nIikp
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgICAgIGJvb2wgc3VjY2VzcyA9IGZh
bHNlOwogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gc3R5bGUgPSBJbnNwZWN0b3JWYWx1
ZTo6bnVsbCgpOwogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY2hhbmdlZFByb3BlcnRp
ZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPmFwcGx5
U3R5bGVUZXh0KHN0eWxlSWQsIHN0eWxlVGV4dCwgcHJvcGVydHlOYW1lLCAmc3VjY2VzcywgJnN0
eWxlLCAmY2hhbmdlZFByb3BlcnRpZXMpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBh
cyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CiAgICBpZiAoY2FsbElkICYm
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+aGFzRnJvbnRlbmQoKSkgewogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoInNlcSIsIGNhbGxJZCk7CiAg
ICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAicmVzcG9uc2UiKTsKICAg
ICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygiZG9tYWluIiwgIkRPTSIpOwogICAgICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwgImFwcGx5U3R5bGVUZXh0Iik7
CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRCb29sKCJzdWNjZXNzIiwgIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSk7CgogICAgICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAg
ICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoImVycm9ycyIsIHByb3RvY29sRXJy
b3JzKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzcG9uc2VEYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgcmVz
cG9uc2VEYXRhLT5zZXRCb29sKCJzdWNjZXNzIiwgc3VjY2Vzcyk7CiAgICAgICAgICAgIHJlc3Bv
bnNlRGF0YS0+c2V0VmFsdWUoInN0eWxlIiwgc3R5bGUpOwogICAgICAgICAgICByZXNwb25zZURh
dGEtPnNldEFycmF5KCJjaGFuZ2VkUHJvcGVydGllcyIsIGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAg
ICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCByZXNwb25zZURhdGEp
OwogICAgICAgIH0KICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVu
dCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNldFN0eWxlVGV4
dChsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdl
T2JqZWN0UmVmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9i
amVjdChyZXF1ZXN0TWVzc2FnZU9iamVjdFJlZik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpKQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogJXMgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIsICJET00iKSk7CgogICAgbG9uZyBzdHlsZUlkOwogICAgU3RyaW5nIHN0eWxlVGV4dDsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhcmd1bWVudHNDb250YWluZXI7CiAgICBpZiAo
IShhcmd1bWVudHNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJh
cmd1bWVudHMiKSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IGFyZ3VtZW50cyBv
YmplY3Qgd2FzIG5vdCBmb3VuZC4iKSk7CiAgICB9IGVsc2UgewogICAgICAgIEluc3BlY3Rvck9i
amVjdDo6Y29uc3RfaXRlcmF0b3IgYXJndW1lbnRzRW5kSXRlcmF0b3IgPSBhcmd1bWVudHNDb250
YWluZXItPmVuZCgpOwoKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHN0
eWxlSWRWYWx1ZUl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5maW5kKCJzdHlsZUlkIik7
CiAgICAgICAgaWYgKHN0eWxlSWRWYWx1ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJhdG9y
KSB7CiAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycg
d2l0aCB0eXBlICclcycgd2FzIG5vdCBmb3VuZC4iLCAic3R5bGVJZCIsICJOdW1iZXIiKSk7CiAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFzdHlsZUlkVmFsdWVJdGVyYXRvci0+c2Vj
b25kLT5hc051bWJlcigmc3R5bGVJZCkpIHsKICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5n
Ojpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBzaG91bGQg
YmUgJyVzJy4iLCAic3R5bGVJZCIsICJOdW1iZXIiKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9
CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3Igc3R5bGVUZXh0VmFsdWVJ
dGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZmluZCgic3R5bGVUZXh0Iik7CiAgICAgICAg
aWYgKHN0eWxlVGV4dFZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5kSXRlcmF0b3IpIHsKICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyB3aXRoIHR5
cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJzdHlsZVRleHQiLCAiU3RyaW5nIikpOwogICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghc3R5bGVUZXh0VmFsdWVJdGVyYXRvci0+c2Vjb25k
LT5hc1N0cmluZygmc3R5bGVUZXh0KSkgewogICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6
OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUuIEl0IHNob3VsZCBi
ZSAnJXMnLiIsICJzdHlsZVRleHQiLCAiU3RyaW5nIikpOwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgfQogICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgp
LT5zZXRTdHlsZVRleHQoc3R5bGVJZCwgc3R5bGVUZXh0LCAmc3VjY2Vzcyk7CgogICAgLy8gdXNl
IEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxp
dHkKICAgIGlmIChjYWxsSWQgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgp
KSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJl
cigic2VxIiwgY2FsbElkKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlw
ZSIsICJyZXNwb25zZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21h
aW4iLCAiRE9NIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQi
LCAic2V0U3R5bGVUZXh0Iik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRCb29sKCJzdWNj
ZXNzIiwgIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSk7CgogICAgICAgIGlmIChwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoImVy
cm9ycyIsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VEYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgICAgICAgICAgcmVzcG9uc2VEYXRhLT5zZXRCb29sKCJzdWNjZXNzIiwgc3VjY2Vzcyk7
CiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwgcmVzcG9uc2VE
YXRhKTsKICAgICAgICB9CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JD
bGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRTdHls
ZVByb3BlcnR5KGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVz
dE1lc3NhZ2VPYmplY3RSZWYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKTsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
aWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpCiAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiAlcyBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIiwgIkRPTSIpKTsKCiAgICBsb25nIHN0eWxlSWQ7CiAgICBTdHJpbmcgbmFt
ZTsKICAgIFN0cmluZyB2YWx1ZTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhcmd1bWVu
dHNDb250YWluZXI7CiAgICBpZiAoIShhcmd1bWVudHNDb250YWluZXIgPSByZXF1ZXN0TWVzc2Fn
ZU9iamVjdC0+Z2V0T2JqZWN0KCJhcmd1bWVudHMiKSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1h
dCgiRXJyb3I6IGFyZ3VtZW50cyBvYmplY3Qgd2FzIG5vdCBmb3VuZC4iKSk7CiAgICB9IGVsc2Ug
ewogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgYXJndW1lbnRzRW5kSXRl
cmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmVuZCgpOwoKICAgICAgICBJbnNwZWN0b3JPYmpl
Y3Q6OmNvbnN0X2l0ZXJhdG9yIHN0eWxlSWRWYWx1ZUl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFp
bmVyLT5maW5kKCJzdHlsZUlkIik7CiAgICAgICAgaWYgKHN0eWxlSWRWYWx1ZUl0ZXJhdG9yID09
IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7CiAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgi
RXJyb3I6IEFyZ3VtZW50ICclcycgd2l0aCB0eXBlICclcycgd2FzIG5vdCBmb3VuZC4iLCAic3R5
bGVJZCIsICJOdW1iZXIiKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFzdHls
ZUlkVmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc051bWJlcigmc3R5bGVJZCkpIHsKICAgICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIGhhcyB3
cm9uZyB0eXBlLiBJdCBzaG91bGQgYmUgJyVzJy4iLCAic3R5bGVJZCIsICJOdW1iZXIiKSk7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRl
cmF0b3IgbmFtZVZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoIm5hbWUi
KTsKICAgICAgICBpZiAobmFtZVZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5kSXRlcmF0b3Ip
IHsKICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyB3
aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJuYW1lIiwgIlN0cmluZyIpKTsKICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIW5hbWVWYWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFz
U3RyaW5nKCZuYW1lKSkgewogICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgi
RXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUuIEl0IHNob3VsZCBiZSAnJXMnLiIs
ICJuYW1lIiwgIlN0cmluZyIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgSW5z
cGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZVZhbHVlSXRlcmF0b3IgPSBhcmd1bWVu
dHNDb250YWluZXItPmZpbmQoInZhbHVlIik7CiAgICAgICAgaWYgKHZhbHVlVmFsdWVJdGVyYXRv
ciA9PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3Jt
YXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwg
InZhbHVlIiwgIlN0cmluZyIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIXZh
bHVlVmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc1N0cmluZygmdmFsdWUpKSB7CiAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3Jv
bmcgdHlwZS4gSXQgc2hvdWxkIGJlICclcycuIiwgInZhbHVlIiwgIlN0cmluZyIpKTsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgIH0KICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1faW5zcGVjdG9yQ29udHJv
bGxlci0+ZG9tQWdlbnQoKS0+c2V0U3R5bGVQcm9wZXJ0eShzdHlsZUlkLCBuYW1lLCB2YWx1ZSwg
JnN1Y2Nlc3MpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBX
ZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CiAgICBpZiAoY2FsbElkICYmIG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+aGFzRnJvbnRlbmQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgcmVz
cG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoInNlcSIsIGNhbGxJZCk7CiAgICAgICAgcmVzcG9uc2VN
ZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAicmVzcG9uc2UiKTsKICAgICAgICByZXNwb25zZU1l
c3NhZ2UtPnNldFN0cmluZygiZG9tYWluIiwgIkRPTSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwgInNldFN0eWxlUHJvcGVydHkiKTsKICAgICAgICByZXNw
b25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgcmVz
cG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMpOwogICAgICAg
IGVsc2UgewogICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZURhdGEg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICByZXNwb25zZURhdGEtPnNl
dEJvb2woInN1Y2Nlc3MiLCBzdWNjZXNzKTsKICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5z
ZXRPYmplY3QoImRhdGEiLCByZXNwb25zZURhdGEpOwogICAgICAgIH0KICAgICAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
cmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OnRvZ2dsZVN0eWxlRW5hYmxlZChsb25nIGNhbGxJZCwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdChyZXF1ZXN0TWVzc2FnZU9i
amVjdFJlZik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT5k
b21BZ2VudCgpKQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9y
bWF0KCJFcnJvcjogJXMgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIsICJET00iKSk7CgogICAg
bG9uZyBzdHlsZUlkOwogICAgU3RyaW5nIHByb3BlcnR5TmFtZTsKICAgIGJvb2wgZGlzYWJsZWQ7
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXJndW1lbnRzQ29udGFpbmVyOwogICAgaWYg
KCEoYXJndW1lbnRzQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgi
YXJndW1lbnRzIikpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBhcmd1bWVudHMg
b2JqZWN0IHdhcyBub3QgZm91bmQuIikpOwogICAgfSBlbHNlIHsKICAgICAgICBJbnNwZWN0b3JP
YmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGFyZ3VtZW50c0VuZEl0ZXJhdG9yID0gYXJndW1lbnRzQ29u
dGFpbmVyLT5lbmQoKTsKCiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBz
dHlsZUlkVmFsdWVJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZmluZCgic3R5bGVJZCIp
OwogICAgICAgIGlmIChzdHlsZUlkVmFsdWVJdGVyYXRvciA9PSBhcmd1bWVudHNFbmRJdGVyYXRv
cikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMn
IHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgInN0eWxlSWQiLCAiTnVtYmVyIikpOwog
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghc3R5bGVJZFZhbHVlSXRlcmF0b3ItPnNl
Y29uZC0+YXNOdW1iZXIoJnN0eWxlSWQpKSB7CiAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmlu
Zzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxk
IGJlICclcycuIiwgInN0eWxlSWQiLCAiTnVtYmVyIikpOwogICAgICAgICAgICB9CiAgICAgICAg
fQoKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHByb3BlcnR5TmFtZVZh
bHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoInByb3BlcnR5TmFtZSIpOwog
ICAgICAgIGlmIChwcm9wZXJ0eU5hbWVWYWx1ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJh
dG9yKSB7CiAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICcl
cycgd2l0aCB0eXBlICclcycgd2FzIG5vdCBmb3VuZC4iLCAicHJvcGVydHlOYW1lIiwgIlN0cmlu
ZyIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIXByb3BlcnR5TmFtZVZhbHVl
SXRlcmF0b3ItPnNlY29uZC0+YXNTdHJpbmcoJnByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIGhhcyB3cm9u
ZyB0eXBlLiBJdCBzaG91bGQgYmUgJyVzJy4iLCAicHJvcGVydHlOYW1lIiwgIlN0cmluZyIpKTsK
ICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9p
dGVyYXRvciBkaXNhYmxlZFZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQo
ImRpc2FibGVkIik7CiAgICAgICAgaWYgKGRpc2FibGVkVmFsdWVJdGVyYXRvciA9PSBhcmd1bWVu
dHNFbmRJdGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBB
cmd1bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgImRpc2FibGVkIiwg
IkJvb2wiKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFkaXNhYmxlZFZhbHVl
SXRlcmF0b3ItPnNlY29uZC0+YXNCb29sKCZkaXNhYmxlZCkpIHsKICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIGhhcyB3cm9uZyB0eXBl
LiBJdCBzaG91bGQgYmUgJyVzJy4iLCAiZGlzYWJsZWQiLCAiQm9vbCIpKTsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgIH0KICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHN0eWxlID0g
SW5zcGVjdG9yVmFsdWU6Om51bGwoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+dG9nZ2xlU3R5bGVF
bmFibGVkKHN0eWxlSWQsIHByb3BlcnR5TmFtZSwgZGlzYWJsZWQsICZzdHlsZSk7CgogICAgLy8g
dXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFi
aWxpdHkKICAgIGlmIChjYWxsSWQgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVu
ZCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51
bWJlcigic2VxIiwgY2FsbElkKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygi
dHlwZSIsICJyZXNwb25zZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJk
b21haW4iLCAiRE9NIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1h
bmQiLCAidG9nZ2xlU3R5bGVFbmFibGVkIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRC
b29sKCJzdWNjZXNzIiwgIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSk7CgogICAgICAgIGlmIChw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0
QXJyYXkoImVycm9ycyIsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VEYXRhID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgICAgICAgICAgcmVzcG9uc2VEYXRhLT5zZXRWYWx1ZSgic3R5bGUiLCBz
dHlsZSk7CiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwgcmVz
cG9uc2VEYXRhKTsKICAgICAgICB9CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNw
ZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpz
ZXRSdWxlU2VsZWN0b3IobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdFJlZikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVx
dWVzdE1lc3NhZ2VPYmplY3QocmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpOwogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iLCAiRE9NIikpOwoKICAgIGxvbmcgcnVsZUlkOwogICAgU3RyaW5n
IHNlbGVjdG9yOwogICAgbG9uZyBzZWxlY3RlZE5vZGVJZDsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBhcmd1bWVudHNDb250YWluZXI7CiAgICBpZiAoIShhcmd1bWVudHNDb250YWluZXIg
PSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJhcmd1bWVudHMiKSkpIHsKICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IGFyZ3VtZW50cyBvYmplY3Qgd2FzIG5vdCBmb3VuZC4i
KSk7CiAgICB9IGVsc2UgewogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3Ig
YXJndW1lbnRzRW5kSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmVuZCgpOwoKICAgICAg
ICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHJ1bGVJZFZhbHVlSXRlcmF0b3IgPSBh
cmd1bWVudHNDb250YWluZXItPmZpbmQoInJ1bGVJZCIpOwogICAgICAgIGlmIChydWxlSWRWYWx1
ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7CiAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJp
bmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgd2l0aCB0eXBlICclcycgd2FzIG5vdCBm
b3VuZC4iLCAicnVsZUlkIiwgIk51bWJlciIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICBpZiAoIXJ1bGVJZFZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNOdW1iZXIoJnJ1bGVJZCkpIHsK
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAn
JXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBzaG91bGQgYmUgJyVzJy4iLCAicnVsZUlkIiwgIk51bWJl
ciIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpj
b25zdF9pdGVyYXRvciBzZWxlY3RvclZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXIt
PmZpbmQoInNlbGVjdG9yIik7CiAgICAgICAgaWYgKHNlbGVjdG9yVmFsdWVJdGVyYXRvciA9PSBh
cmd1bWVudHNFbmRJdGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVy
cm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgInNlbGVj
dG9yIiwgIlN0cmluZyIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIXNlbGVj
dG9yVmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc1N0cmluZygmc2VsZWN0b3IpKSB7CiAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMg
d3JvbmcgdHlwZS4gSXQgc2hvdWxkIGJlICclcycuIiwgInNlbGVjdG9yIiwgIlN0cmluZyIpKTsK
ICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9p
dGVyYXRvciBzZWxlY3RlZE5vZGVJZFZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXIt
PmZpbmQoInNlbGVjdGVkTm9kZUlkIik7CiAgICAgICAgaWYgKHNlbGVjdGVkTm9kZUlkVmFsdWVJ
dGVyYXRvciA9PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5n
Ojpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91
bmQuIiwgInNlbGVjdGVkTm9kZUlkIiwgIk51bWJlciIpKTsKICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICBpZiAoIXNlbGVjdGVkTm9kZUlkVmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc051bWJl
cigmc2VsZWN0ZWROb2RlSWQpKSB7CiAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9y
bWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxkIGJlICcl
cycuIiwgInNlbGVjdGVkTm9kZUlkIiwgIk51bWJlciIpKTsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgIH0KICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJ1bGUgPSBJbnNwZWN0b3JW
YWx1ZTo6bnVsbCgpOwogICAgICAgIGJvb2wgc2VsZWN0b3JBZmZlY3RzTm9kZSA9IGZhbHNlOwog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5kb21BZ2VudCgpLT5zZXRSdWxlU2VsZWN0b3IocnVsZUlkLCBzZWxlY3Rvciwgc2Vs
ZWN0ZWROb2RlSWQsICZydWxlLCAmc2VsZWN0b3JBZmZlY3RzTm9kZSk7CgogICAgLy8gdXNlIElu
c3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkK
ICAgIGlmIChjYWxsSWQgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7
CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigi
c2VxIiwgY2FsbElkKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIs
ICJyZXNwb25zZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4i
LCAiRE9NIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAi
c2V0UnVsZVNlbGVjdG9yIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRCb29sKCJzdWNj
ZXNzIiwgIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSk7CgogICAgICAgIGlmIChwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoImVy
cm9ycyIsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VEYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgICAgICAgICAgcmVzcG9uc2VEYXRhLT5zZXRWYWx1ZSgicnVsZSIsIHJ1bGUpOwogICAg
ICAgICAgICByZXNwb25zZURhdGEtPnNldEJvb2woInNlbGVjdG9yQWZmZWN0c05vZGUiLCBzZWxl
Y3RvckFmZmVjdHNOb2RlKTsKICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3Qo
ImRhdGEiLCByZXNwb25zZURhdGEpOwogICAgICAgIH0KICAgICAgICBtX2luc3BlY3RvckNvbnRy
b2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VN
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmFkZFJ1bGUobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXF1ZXN0TWVzc2FnZU9iamVjdFJlZikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVxdWVzdE1lc3NhZ2VPYmplY3QocmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpOwogICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSkKICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiRE9NIikpOwoKICAgIFN0cmluZyBzZWxlY3RvcjsKICAg
IGxvbmcgc2VsZWN0ZWROb2RlSWQ7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXJndW1l
bnRzQ29udGFpbmVyOwogICAgaWYgKCEoYXJndW1lbnRzQ29udGFpbmVyID0gcmVxdWVzdE1lc3Nh
Z2VPYmplY3QtPmdldE9iamVjdCgiYXJndW1lbnRzIikpKSB7CiAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3Jt
YXQoIkVycm9yOiBhcmd1bWVudHMgb2JqZWN0IHdhcyBub3QgZm91bmQuIikpOwogICAgfSBlbHNl
IHsKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGFyZ3VtZW50c0VuZEl0
ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5lbmQoKTsKCiAgICAgICAgSW5zcGVjdG9yT2Jq
ZWN0Ojpjb25zdF9pdGVyYXRvciBzZWxlY3RvclZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250
YWluZXItPmZpbmQoInNlbGVjdG9yIik7CiAgICAgICAgaWYgKHNlbGVjdG9yVmFsdWVJdGVyYXRv
ciA9PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3Jt
YXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwg
InNlbGVjdG9yIiwgIlN0cmluZyIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAo
IXNlbGVjdG9yVmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc1N0cmluZygmc2VsZWN0b3IpKSB7CiAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVz
JyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxkIGJlICclcycuIiwgInNlbGVjdG9yIiwgIlN0cmlu
ZyIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpj
b25zdF9pdGVyYXRvciBzZWxlY3RlZE5vZGVJZFZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250
YWluZXItPmZpbmQoInNlbGVjdGVkTm9kZUlkIik7CiAgICAgICAgaWYgKHNlbGVjdGVkTm9kZUlk
VmFsdWVJdGVyYXRvciA9PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewogICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
U3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBu
b3QgZm91bmQuIiwgInNlbGVjdGVkTm9kZUlkIiwgIk51bWJlciIpKTsKICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICBpZiAoIXNlbGVjdGVkTm9kZUlkVmFsdWVJdGVyYXRvci0+c2Vjb25kLT5h
c051bWJlcigmc2VsZWN0ZWROb2RlSWQpKSB7CiAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmlu
Zzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxk
IGJlICclcycuIiwgInNlbGVjdGVkTm9kZUlkIiwgIk51bWJlciIpKTsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgIH0KICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJ1bGUgPSBJbnNw
ZWN0b3JWYWx1ZTo6bnVsbCgpOwogICAgICAgIGJvb2wgc2VsZWN0b3JBZmZlY3RzTm9kZSA9IGZh
bHNlOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5hZGRSdWxlKHNlbGVjdG9yLCBzZWxlY3RlZE5vZGVJ
ZCwgJnJ1bGUsICZzZWxlY3RvckFmZmVjdHNOb2RlKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJv
bnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNh
bGxJZCAmJiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxs
SWQpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNl
Iik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJET00iKTsK
ICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygiY29tbWFuZCIsICJhZGRSdWxlIik7
CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRCb29sKCJzdWNjZXNzIiwgIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSk7CgogICAgICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAg
ICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoImVycm9ycyIsIHByb3RvY29sRXJy
b3JzKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzcG9uc2VEYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgcmVz
cG9uc2VEYXRhLT5zZXRWYWx1ZSgicnVsZSIsIHJ1bGUpOwogICAgICAgICAgICByZXNwb25zZURh
dGEtPnNldEJvb2woInNlbGVjdG9yQWZmZWN0c05vZGUiLCBzZWxlY3RvckFmZmVjdHNOb2RlKTsK
ICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCByZXNwb25zZURh
dGEpOwogICAgICAgIH0KICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNs
aWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldENvb2tp
ZXMobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdFJlZikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VP
YmplY3QocmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
aW5zcGVjdG9yQ29udHJvbGxlcikKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhT
dHJpbmc6OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iLCAiQ29u
dHJvbGxlciIpKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXJndW1lbnRzQ29udGFp
bmVyOwogICAgaWYgKCEoYXJndW1lbnRzQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3Qt
PmdldE9iamVjdCgiYXJndW1lbnRzIikpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9y
OiBhcmd1bWVudHMgb2JqZWN0IHdhcyBub3QgZm91bmQuIikpOwogICAgfSBlbHNlIHsKICAgICAg
ICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGFyZ3VtZW50c0VuZEl0ZXJhdG9yID0g
YXJndW1lbnRzQ29udGFpbmVyLT5lbmQoKTsKICAgIH0KICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IGNvb2tpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgU3RyaW5n
IGNvb2tpZXNTdHJpbmc7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmdldENvb2tpZXMoJmNvb2tpZXMsICZjb29raWVzU3Ry
aW5nKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5z
cGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNw
b25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJlc3BvbnNl
TWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAgICAgIHJlc3BvbnNlTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXRTdHJpbmcoImRvbWFpbiIsICJDb250cm9sbGVyIik7CiAgICAgICAgcmVzcG9uc2VNZXNz
YWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAiZ2V0Q29va2llcyIpOwogICAgICAgIHJlc3BvbnNl
TWVzc2FnZS0+c2V0Qm9vbCgic3VjY2VzcyIsICFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpOwoK
ICAgICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgICAgICByZXNwb25z
ZU1lc3NhZ2UtPnNldEFycmF5KCJlcnJvcnMiLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlRGF0YSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgIHJlc3BvbnNlRGF0YS0+c2V0QXJy
YXkoImNvb2tpZXMiLCBjb29raWVzKTsKICAgICAgICAgICAgcmVzcG9uc2VEYXRhLT5zZXRTdHJp
bmcoImNvb2tpZXNTdHJpbmciLCBjb29raWVzU3RyaW5nKTsKICAgICAgICAgICAgcmVzcG9uc2VN
ZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCByZXNwb25zZURhdGEpOwogICAgICAgIH0KICAgICAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRv
RnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRlbGV0ZUNvb2tpZShsb25nIGNhbGxJZCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdChyZXF1ZXN0TWVzc2Fn
ZU9iamVjdFJlZik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVy
KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJv
cjogJXMgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIsICJDb250cm9sbGVyIikpOwoKICAgIFN0
cmluZyBjb29raWVOYW1lOwogICAgU3RyaW5nIGRvbWFpbjsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBhcmd1bWVudHNDb250YWluZXI7CiAgICBpZiAoIShhcmd1bWVudHNDb250YWluZXIg
PSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJhcmd1bWVudHMiKSkpIHsKICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IGFyZ3VtZW50cyBvYmplY3Qgd2FzIG5vdCBmb3VuZC4i
KSk7CiAgICB9IGVsc2UgewogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3Ig
YXJndW1lbnRzRW5kSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmVuZCgpOwoKICAgICAg
ICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGNvb2tpZU5hbWVWYWx1ZUl0ZXJhdG9y
ID0gYXJndW1lbnRzQ29udGFpbmVyLT5maW5kKCJjb29raWVOYW1lIik7CiAgICAgICAgaWYgKGNv
b2tpZU5hbWVWYWx1ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7CiAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgd2l0aCB0eXBlICcl
cycgd2FzIG5vdCBmb3VuZC4iLCAiY29va2llTmFtZSIsICJTdHJpbmciKSk7CiAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgaWYgKCFjb29raWVOYW1lVmFsdWVJdGVyYXRvci0+c2Vjb25kLT5h
c1N0cmluZygmY29va2llTmFtZSkpIHsKICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpm
b3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBzaG91bGQgYmUg
JyVzJy4iLCAiY29va2llTmFtZSIsICJTdHJpbmciKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9
CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZG9tYWluVmFsdWVJdGVy
YXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZmluZCgiZG9tYWluIik7CiAgICAgICAgaWYgKGRv
bWFpblZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5kSXRlcmF0b3IpIHsKICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyB3aXRoIHR5cGUgJyVzJyB3
YXMgbm90IGZvdW5kLiIsICJkb21haW4iLCAiU3RyaW5nIikpOwogICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgIGlmICghZG9tYWluVmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc1N0cmluZygmZG9t
YWluKSkgewogICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFy
Z3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUuIEl0IHNob3VsZCBiZSAnJXMnLiIsICJkb21haW4i
LCAiU3RyaW5nIikpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kZWxl
dGVDb29raWUoY29va2llTmFtZSwgZG9tYWluKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRl
bmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJ
ZCAmJiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQp
OwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7
CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJDb250cm9sbGVy
Iik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAiZGVsZXRl
Q29va2llIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRCb29sKCJzdWNjZXNzIiwgIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSk7CgogICAgICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpCiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoImVycm9ycyIsIHBy
b3RvY29sRXJyb3JzKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNs
aWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFwcGxp
Y2F0aW9uQ2FjaGVzKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVx
dWVzdE1lc3NhZ2VPYmplY3RSZWYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVl
c3RNZXNzYWdlT2JqZWN0KHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKTsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cgog
ICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpKQog
ICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjog
JXMgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIsICJBcHBsaWNhdGlvbkNhY2hlIikpOwoKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhcmd1bWVudHNDb250YWluZXI7CiAgICBpZiAoIShh
cmd1bWVudHNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJhcmd1
bWVudHMiKSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IGFyZ3VtZW50cyBvYmpl
Y3Qgd2FzIG5vdCBmb3VuZC4iKSk7CiAgICB9IGVsc2UgewogICAgICAgIEluc3BlY3Rvck9iamVj
dDo6Y29uc3RfaXRlcmF0b3IgYXJndW1lbnRzRW5kSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWlu
ZXItPmVuZCgpOwogICAgfQogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gYXBwbGljYXRp
b25DYWNoZXMgPSBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpOwogICAgaWYgKCFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpCiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5hcHBsaWNhdGlvbkNh
Y2hlQWdlbnQoKS0+Z2V0QXBwbGljYXRpb25DYWNoZXMoJmFwcGxpY2F0aW9uQ2FjaGVzKTsKCiAg
ICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2
YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zy
b250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3Nh
Z2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+
c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3Ry
aW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJp
bmcoImRvbWFpbiIsICJBcHBsaWNhdGlvbkNhY2hlIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXRTdHJpbmcoImNvbW1hbmQiLCAiZ2V0QXBwbGljYXRpb25DYWNoZXMiKTsKICAgICAgICBy
ZXNwb25zZU1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKTsKCiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAg
cmVzcG9uc2VNZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMpOwogICAg
ICAgIGVsc2UgewogICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZURh
dGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICByZXNwb25zZURhdGEt
PnNldFZhbHVlKCJhcHBsaWNhdGlvbkNhY2hlcyIsIGFwcGxpY2F0aW9uQ2FjaGVzKTsKICAgICAg
ICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCByZXNwb25zZURhdGEpOwog
ICAgICAgIH0KICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgp
LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbGVhc2VXcmFwcGVy
T2JqZWN0R3JvdXAobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1
ZXN0TWVzc2FnZU9iamVjdFJlZikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVz
dE1lc3NhZ2VPYmplY3QocmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpOwogICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAg
ICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQmFja2VuZCgpKQogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogJXMgaGFu
ZGxlciBpcyBub3QgYXZhaWxhYmxlLiIsICJCYWNrZW5kIikpOwoKICAgIGxvbmcgaW5qZWN0ZWRT
Y3JpcHRJZDsKICAgIFN0cmluZyBvYmplY3RHcm91cDsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBhcmd1bWVudHNDb250YWluZXI7CiAgICBpZiAoIShhcmd1bWVudHNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJhcmd1bWVudHMiKSkpIHsKICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhT
dHJpbmc6OmZvcm1hdCgiRXJyb3I6IGFyZ3VtZW50cyBvYmplY3Qgd2FzIG5vdCBmb3VuZC4iKSk7
CiAgICB9IGVsc2UgewogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgYXJn
dW1lbnRzRW5kSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmVuZCgpOwoKICAgICAgICBJ
bnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGluamVjdGVkU2NyaXB0SWRWYWx1ZUl0ZXJh
dG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5maW5kKCJpbmplY3RlZFNjcmlwdElkIik7CiAgICAg
ICAgaWYgKGluamVjdGVkU2NyaXB0SWRWYWx1ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJh
dG9yKSB7CiAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICcl
cycgd2l0aCB0eXBlICclcycgd2FzIG5vdCBmb3VuZC4iLCAiaW5qZWN0ZWRTY3JpcHRJZCIsICJO
dW1iZXIiKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFpbmplY3RlZFNjcmlw
dElkVmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc051bWJlcigmaW5qZWN0ZWRTY3JpcHRJZCkpIHsK
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAn
JXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBzaG91bGQgYmUgJyVzJy4iLCAiaW5qZWN0ZWRTY3JpcHRJ
ZCIsICJOdW1iZXIiKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIEluc3BlY3Rv
ck9iamVjdDo6Y29uc3RfaXRlcmF0b3Igb2JqZWN0R3JvdXBWYWx1ZUl0ZXJhdG9yID0gYXJndW1l
bnRzQ29udGFpbmVyLT5maW5kKCJvYmplY3RHcm91cCIpOwogICAgICAgIGlmIChvYmplY3RHcm91
cFZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5kSXRlcmF0b3IpIHsKICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMg
bm90IGZvdW5kLiIsICJvYmplY3RHcm91cCIsICJTdHJpbmciKSk7CiAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgaWYgKCFvYmplY3RHcm91cFZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNTdHJp
bmcoJm9iamVjdEdyb3VwKSkgewogICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1h
dCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUuIEl0IHNob3VsZCBiZSAnJXMn
LiIsICJvYmplY3RHcm91cCIsICJTdHJpbmciKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICB9CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKS0+cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91
cChpbmplY3RlZFNjcmlwdElkLCBvYmplY3RHcm91cCk7CgogICAgLy8gdXNlIEluc3BlY3RvckZy
b250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAgIGlmIChj
YWxsSWQgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwgY2Fs
bElkKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJyZXNwb25z
ZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiQmFja2Vu
ZCIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwgInJlbGVh
c2VXcmFwcGVyT2JqZWN0R3JvdXAiKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEJvb2wo
InN1Y2Nlc3MiLCAhcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKTsKCiAgICAgICAgaWYgKHByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRBcnJh
eSgiZXJyb3JzIiwgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6ZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdChyZXF1ZXN0TWVzc2FnZU9iamVj
dFJlZik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogJXMg
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIsICJDb250cm9sbGVyIikpOwoKICAgIGxvbmcgdGVz
dENhbGxJZDsKICAgIFN0cmluZyBqc29uUmVzdWx0OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGFyZ3VtZW50c0NvbnRhaW5lcjsKICAgIGlmICghKGFyZ3VtZW50c0NvbnRhaW5lciA9IHJl
cXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoImFyZ3VtZW50cyIpKSkgewogICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0
cmluZzo6Zm9ybWF0KCJFcnJvcjogYXJndW1lbnRzIG9iamVjdCB3YXMgbm90IGZvdW5kLiIpKTsK
ICAgIH0gZWxzZSB7CiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBhcmd1
bWVudHNFbmRJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZW5kKCk7CgogICAgICAgIElu
c3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdGVzdENhbGxJZFZhbHVlSXRlcmF0b3IgPSBh
cmd1bWVudHNDb250YWluZXItPmZpbmQoInRlc3RDYWxsSWQiKTsKICAgICAgICBpZiAodGVzdENh
bGxJZFZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5kSXRlcmF0b3IpIHsKICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyB3aXRoIHR5cGUgJyVzJyB3
YXMgbm90IGZvdW5kLiIsICJ0ZXN0Q2FsbElkIiwgIk51bWJlciIpKTsKICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICBpZiAoIXRlc3RDYWxsSWRWYWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzTnVt
YmVyKCZ0ZXN0Q2FsbElkKSkgewogICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1h
dCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUuIEl0IHNob3VsZCBiZSAnJXMn
LiIsICJ0ZXN0Q2FsbElkIiwgIk51bWJlciIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAg
ICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBqc29uUmVzdWx0VmFsdWVJdGVy
YXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZmluZCgianNvblJlc3VsdCIpOwogICAgICAgIGlm
IChqc29uUmVzdWx0VmFsdWVJdGVyYXRvciA9PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgewogICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIHdpdGggdHlw
ZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgImpzb25SZXN1bHQiLCAiU3RyaW5nIikpOwogICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghanNvblJlc3VsdFZhbHVlSXRlcmF0b3ItPnNlY29u
ZC0+YXNTdHJpbmcoJmpzb25SZXN1bHQpKSB7CiAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmlu
Zzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxk
IGJlICclcycuIiwgImpzb25SZXN1bHQiLCAiU3RyaW5nIikpOwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgfQogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5kaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKHRlc3RDYWxs
SWQsIGpzb25SZXN1bHQpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtl
ciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CiAgICBpZiAoY2FsbElkICYmIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+aGFzRnJvbnRlbmQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoInNlcSIsIGNhbGxJZCk7CiAgICAgICAgcmVz
cG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAicmVzcG9uc2UiKTsKICAgICAgICByZXNw
b25zZU1lc3NhZ2UtPnNldFN0cmluZygiZG9tYWluIiwgIkNvbnRyb2xsZXIiKTsKICAgICAgICBy
ZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygiY29tbWFuZCIsICJkaWRFdmFsdWF0ZUZvclRlc3RJ
bkZyb250ZW5kIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRCb29sKCJzdWNjZXNzIiwg
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSk7CgogICAgICAgIGlmIChwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkpCiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoImVycm9ycyIs
IHByb3RvY29sRXJyb3JzKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3Rv
ckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldERh
dGFiYXNlVGFibGVOYW1lcyhsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdChyZXF1ZXN0TWVzc2FnZU9iamVjdFJlZik7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JCYWNrZW5kKCkpCiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiAl
cyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIiwgIkJhY2tlbmQiKSk7CgogICAgbG9uZyBkYXRh
YmFzZUlkOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFyZ3VtZW50c0NvbnRhaW5lcjsK
ICAgIGlmICghKGFyZ3VtZW50c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRP
YmplY3QoImFyZ3VtZW50cyIpKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogYXJn
dW1lbnRzIG9iamVjdCB3YXMgbm90IGZvdW5kLiIpKTsKICAgIH0gZWxzZSB7CiAgICAgICAgSW5z
cGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBhcmd1bWVudHNFbmRJdGVyYXRvciA9IGFyZ3Vt
ZW50c0NvbnRhaW5lci0+ZW5kKCk7CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRl
cmF0b3IgZGF0YWJhc2VJZFZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQo
ImRhdGFiYXNlSWQiKTsKICAgICAgICBpZiAoZGF0YWJhc2VJZFZhbHVlSXRlcmF0b3IgPT0gYXJn
dW1lbnRzRW5kSXRlcmF0b3IpIHsKICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJv
cjogQXJndW1lbnQgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJkYXRhYmFz
ZUlkIiwgIk51bWJlciIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIWRhdGFi
YXNlSWRWYWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzTnVtYmVyKCZkYXRhYmFzZUlkKSkgewogICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycg
aGFzIHdyb25nIHR5cGUuIEl0IHNob3VsZCBiZSAnJXMnLiIsICJkYXRhYmFzZUlkIiwgIk51bWJl
ciIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHRhYmxlTmFtZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXIt
Pmluc3BlY3RvckJhY2tlbmQoKS0+Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKGRhdGFiYXNlSWQsICZ0
YWJsZU5hbWVzKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2Yg
V2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJZCAmJiBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJl
c3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOwogICAgICAgIHJlc3BvbnNl
TWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7CiAgICAgICAgcmVzcG9uc2VN
ZXNzYWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJCYWNrZW5kIik7CiAgICAgICAgcmVzcG9uc2VN
ZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAiZ2V0RGF0YWJhc2VUYWJsZU5hbWVzIik7CiAg
ICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRCb29sKCJzdWNjZXNzIiwgIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSk7CgogICAgICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAg
ICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoImVycm9ycyIsIHByb3RvY29sRXJyb3Jz
KTsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
cG9uc2VEYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgcmVzcG9u
c2VEYXRhLT5zZXRBcnJheSgidGFibGVOYW1lcyIsIHRhYmxlTmFtZXMpOwogICAgICAgICAgICBy
ZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHJlc3BvbnNlRGF0YSk7CiAgICAgICAg
fQogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKICAgIH0K
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTChsb25nIGNhbGxJ
ZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdChyZXF1ZXN0
TWVzc2FnZU9iamVjdFJlZik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5pbnNwZWN0b3JCYWNrZW5kKCkpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiAlcyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
IiwgIkJhY2tlbmQiKSk7CgogICAgbG9uZyBkYXRhYmFzZUlkOwogICAgU3RyaW5nIHF1ZXJ5OwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFyZ3VtZW50c0NvbnRhaW5lcjsKICAgIGlmICgh
KGFyZ3VtZW50c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoImFy
Z3VtZW50cyIpKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogYXJndW1lbnRzIG9i
amVjdCB3YXMgbm90IGZvdW5kLiIpKTsKICAgIH0gZWxzZSB7CiAgICAgICAgSW5zcGVjdG9yT2Jq
ZWN0Ojpjb25zdF9pdGVyYXRvciBhcmd1bWVudHNFbmRJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRh
aW5lci0+ZW5kKCk7CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZGF0
YWJhc2VJZFZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoImRhdGFiYXNl
SWQiKTsKICAgICAgICBpZiAoZGF0YWJhc2VJZFZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5k
SXRlcmF0b3IpIHsKICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1l
bnQgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJkYXRhYmFzZUlkIiwgIk51
bWJlciIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIWRhdGFiYXNlSWRWYWx1
ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzTnVtYmVyKCZkYXRhYmFzZUlkKSkgewogICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25n
IHR5cGUuIEl0IHNob3VsZCBiZSAnJXMnLiIsICJkYXRhYmFzZUlkIiwgIk51bWJlciIpKTsKICAg
ICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVy
YXRvciBxdWVyeVZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoInF1ZXJ5
Iik7CiAgICAgICAgaWYgKHF1ZXJ5VmFsdWVJdGVyYXRvciA9PSBhcmd1bWVudHNFbmRJdGVyYXRv
cikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMn
IHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgInF1ZXJ5IiwgIlN0cmluZyIpKTsKICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIXF1ZXJ5VmFsdWVJdGVyYXRvci0+c2Vjb25k
LT5hc1N0cmluZygmcXVlcnkpKSB7CiAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9y
bWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxkIGJlICcl
cycuIiwgInF1ZXJ5IiwgIlN0cmluZyIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0K
ICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICBsb25nIHRyYW5zYWN0aW9uSWQ7
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKS0+ZXhlY3V0ZVNRTChkYXRhYmFzZUlkLCBxdWVy
eSwgJnN1Y2Nlc3MsICZ0cmFuc2FjdGlvbklkKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRl
bmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQogICAgaWYgKGNhbGxJ
ZCAmJiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsKICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQp
OwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgInJlc3BvbnNlIik7
CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJCYWNrZW5kIik7
CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQiLCAiZXhlY3V0ZVNR
TCIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0Qm9vbCgic3VjY2VzcyIsICFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpOwoKICAgICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEFycmF5KCJlcnJvcnMiLCBwcm90b2Nv
bEVycm9ycyk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3BvbnNlRGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAg
IHJlc3BvbnNlRGF0YS0+c2V0Qm9vbCgic3VjY2VzcyIsIHN1Y2Nlc3MpOwogICAgICAgICAgICBy
ZXNwb25zZURhdGEtPnNldE51bWJlcigidHJhbnNhY3Rpb25JZCIsIHRyYW5zYWN0aW9uSWQpOwog
ICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHJlc3BvbnNlRGF0
YSk7CiAgICAgICAgfQogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xp
ZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKICAgIH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RE9NU3Rv
cmFnZUVudHJpZXMobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1
ZXN0TWVzc2FnZU9iamVjdFJlZikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVz
dE1lc3NhZ2VPYmplY3QocmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYpOwogICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAg
ICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iLCAiQ29udHJvbGxlciIpKTsKCiAgICBsb25nIHN0b3JhZ2VJZDsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBhcmd1bWVudHNDb250YWluZXI7CiAgICBpZiAoIShhcmd1bWVudHNDb250
YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJhcmd1bWVudHMiKSkpIHsK
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IGFyZ3VtZW50cyBvYmplY3Qgd2FzIG5vdCBm
b3VuZC4iKSk7CiAgICB9IGVsc2UgewogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRl
cmF0b3IgYXJndW1lbnRzRW5kSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmVuZCgpOwoK
ICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHN0b3JhZ2VJZFZhbHVlSXRl
cmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoInN0b3JhZ2VJZCIpOwogICAgICAgIGlm
IChzdG9yYWdlSWRWYWx1ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7CiAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgd2l0aCB0eXBl
ICclcycgd2FzIG5vdCBmb3VuZC4iLCAic3RvcmFnZUlkIiwgIk51bWJlciIpKTsKICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICBpZiAoIXN0b3JhZ2VJZFZhbHVlSXRlcmF0b3ItPnNlY29uZC0+
YXNOdW1iZXIoJnN0b3JhZ2VJZCkpIHsKICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpm
b3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBzaG91bGQgYmUg
JyVzJy4iLCAic3RvcmFnZUlkIiwgIk51bWJlciIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgIH0KICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGVudHJpZXMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmdldERPTVN0b3JhZ2VFbnRyaWVzKHN0b3JhZ2VJZCwg
JmVudHJpZXMpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBX
ZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CiAgICBpZiAoY2FsbElkICYmIG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+aGFzRnJvbnRlbmQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgcmVz
cG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoInNlcSIsIGNhbGxJZCk7CiAgICAgICAgcmVzcG9uc2VN
ZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAicmVzcG9uc2UiKTsKICAgICAgICByZXNwb25zZU1l
c3NhZ2UtPnNldFN0cmluZygiZG9tYWluIiwgIkNvbnRyb2xsZXIiKTsKICAgICAgICByZXNwb25z
ZU1lc3NhZ2UtPnNldFN0cmluZygiY29tbWFuZCIsICJnZXRET01TdG9yYWdlRW50cmllcyIpOwog
ICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0Qm9vbCgic3VjY2VzcyIsICFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpOwoKICAgICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAg
ICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEFycmF5KCJlcnJvcnMiLCBwcm90b2NvbEVycm9y
cyk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3BvbnNlRGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgIHJlc3Bv
bnNlRGF0YS0+c2V0QXJyYXkoImVudHJpZXMiLCBlbnRyaWVzKTsKICAgICAgICAgICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCByZXNwb25zZURhdGEpOwogICAgICAgIH0KICAg
ICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNldERPTVN0b3JhZ2VJdGVtKGxvbmcgY2Fs
bElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE1lc3NhZ2VPYmplY3RSZWYp
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0KHJlcXVl
c3RNZXNzYWdlT2JqZWN0UmVmKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2luc3BlY3RvckNv
bnRyb2xsZXIpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3Jt
YXQoIkVycm9yOiAlcyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIiwgIkNvbnRyb2xsZXIiKSk7
CgogICAgbG9uZyBzdG9yYWdlSWQ7CiAgICBTdHJpbmcga2V5OwogICAgU3RyaW5nIHZhbHVlOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFyZ3VtZW50c0NvbnRhaW5lcjsKICAgIGlmICgh
KGFyZ3VtZW50c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoImFy
Z3VtZW50cyIpKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogYXJndW1lbnRzIG9i
amVjdCB3YXMgbm90IGZvdW5kLiIpKTsKICAgIH0gZWxzZSB7CiAgICAgICAgSW5zcGVjdG9yT2Jq
ZWN0Ojpjb25zdF9pdGVyYXRvciBhcmd1bWVudHNFbmRJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRh
aW5lci0+ZW5kKCk7CgogICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3Igc3Rv
cmFnZUlkVmFsdWVJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZmluZCgic3RvcmFnZUlk
Iik7CiAgICAgICAgaWYgKHN0b3JhZ2VJZFZhbHVlSXRlcmF0b3IgPT0gYXJndW1lbnRzRW5kSXRl
cmF0b3IpIHsKICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQg
JyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsICJzdG9yYWdlSWQiLCAiTnVtYmVy
IikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghc3RvcmFnZUlkVmFsdWVJdGVy
YXRvci0+c2Vjb25kLT5hc051bWJlcigmc3RvcmFnZUlkKSkgewogICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgaGFzIHdyb25nIHR5cGUu
IEl0IHNob3VsZCBiZSAnJXMnLiIsICJzdG9yYWdlSWQiLCAiTnVtYmVyIikpOwogICAgICAgICAg
ICB9CiAgICAgICAgfQoKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGtl
eVZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZpbmQoImtleSIpOwogICAgICAg
IGlmIChrZXlWYWx1ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7CiAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEFyZ3VtZW50ICclcycgd2l0aCB0eXBlICcl
cycgd2FzIG5vdCBmb3VuZC4iLCAia2V5IiwgIlN0cmluZyIpKTsKICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICBpZiAoIWtleVZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNTdHJpbmcoJmtleSkp
IHsKICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVu
dCAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBzaG91bGQgYmUgJyVzJy4iLCAia2V5IiwgIlN0cmlu
ZyIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpj
b25zdF9pdGVyYXRvciB2YWx1ZVZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZp
bmQoInZhbHVlIik7CiAgICAgICAgaWYgKHZhbHVlVmFsdWVJdGVyYXRvciA9PSBhcmd1bWVudHNF
bmRJdGVyYXRvcikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1
bWVudCAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgInZhbHVlIiwgIlN0cmlu
ZyIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIXZhbHVlVmFsdWVJdGVyYXRv
ci0+c2Vjb25kLT5hc1N0cmluZygmdmFsdWUpKSB7CiAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0
cmluZzo6Zm9ybWF0KCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hv
dWxkIGJlICclcycuIiwgInZhbHVlIiwgIlN0cmluZyIpKTsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgIH0KICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0RE9NU3Rv
cmFnZUl0ZW0oc3RvcmFnZUlkLCBrZXksIHZhbHVlLCAmc3VjY2Vzcyk7CgogICAgLy8gdXNlIElu
c3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkK
ICAgIGlmIChjYWxsSWQgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7
CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigi
c2VxIiwgY2FsbElkKTsKICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIs
ICJyZXNwb25zZSIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4i
LCAiQ29udHJvbGxlciIpOwogICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJjb21t
YW5kIiwgInNldERPTVN0b3JhZ2VJdGVtIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRC
b29sKCJzdWNjZXNzIiwgIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSk7CgogICAgICAgIGlmIChw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0
QXJyYXkoImVycm9ycyIsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VEYXRhID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgICAgICAgICAgcmVzcG9uc2VEYXRhLT5zZXRCb29sKCJzdWNjZXNzIiwg
c3VjY2Vzcyk7CiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwg
cmVzcG9uc2VEYXRhKTsKICAgICAgICB9CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5p
bnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpyZW1vdmVET01TdG9yYWdlSXRlbShsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlcXVlc3RNZXNzYWdlT2JqZWN0UmVmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXF1ZXN0TWVzc2FnZU9iamVjdChyZXF1ZXN0TWVzc2FnZU9iamVjdFJlZik7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKQogICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogJXMgaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIsICJDb250cm9sbGVyIikpOwoKICAgIGxvbmcgc3RvcmFnZUlkOwogICAg
U3RyaW5nIGtleTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhcmd1bWVudHNDb250YWlu
ZXI7CiAgICBpZiAoIShhcmd1bWVudHNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+
Z2V0T2JqZWN0KCJhcmd1bWVudHMiKSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJyb3I6
IGFyZ3VtZW50cyBvYmplY3Qgd2FzIG5vdCBmb3VuZC4iKSk7CiAgICB9IGVsc2UgewogICAgICAg
IEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgYXJndW1lbnRzRW5kSXRlcmF0b3IgPSBh
cmd1bWVudHNDb250YWluZXItPmVuZCgpOwoKICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0
X2l0ZXJhdG9yIHN0b3JhZ2VJZFZhbHVlSXRlcmF0b3IgPSBhcmd1bWVudHNDb250YWluZXItPmZp
bmQoInN0b3JhZ2VJZCIpOwogICAgICAgIGlmIChzdG9yYWdlSWRWYWx1ZUl0ZXJhdG9yID09IGFy
Z3VtZW50c0VuZEl0ZXJhdG9yKSB7CiAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiRXJy
b3I6IEFyZ3VtZW50ICclcycgd2l0aCB0eXBlICclcycgd2FzIG5vdCBmb3VuZC4iLCAic3RvcmFn
ZUlkIiwgIk51bWJlciIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIXN0b3Jh
Z2VJZFZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNOdW1iZXIoJnN0b3JhZ2VJZCkpIHsKICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMnIGhh
cyB3cm9uZyB0eXBlLiBJdCBzaG91bGQgYmUgJyVzJy4iLCAic3RvcmFnZUlkIiwgIk51bWJlciIp
KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25z
dF9pdGVyYXRvciBrZXlWYWx1ZUl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5maW5kKCJr
ZXkiKTsKICAgICAgICBpZiAoa2V5VmFsdWVJdGVyYXRvciA9PSBhcmd1bWVudHNFbmRJdGVyYXRv
cikgewogICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBBcmd1bWVudCAnJXMn
IHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgImtleSIsICJTdHJpbmciKSk7CiAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFrZXlWYWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFz
U3RyaW5nKCZrZXkpKSB7CiAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJF
cnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxkIGJlICclcycuIiwg
ImtleSIsICJTdHJpbmciKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAgICAg
Ym9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnJlbW92ZURPTVN0b3JhZ2VJdGVtKHN0b3Jh
Z2VJZCwga2V5LCAmc3VjY2Vzcyk7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEg
bWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKICAgIGlmIChjYWxsSWQgJiYgbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwgY2FsbElkKTsKICAgICAg
ICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJyZXNwb25zZSIpOwogICAgICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4iLCAiQ29udHJvbGxlciIpOwogICAg
ICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwgInJlbW92ZURPTVN0b3Jh
Z2VJdGVtIik7CiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRCb29sKCJzdWNjZXNzIiwgIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSk7CgogICAgICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpCiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoImVycm9ycyIsIHBy
b3RvY29sRXJyb3JzKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzcG9uc2VEYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgICAgcmVzcG9uc2VEYXRhLT5zZXRCb29sKCJzdWNjZXNzIiwgc3VjY2Vzcyk7CiAgICAgICAg
ICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwgcmVzcG9uc2VEYXRhKTsKICAg
ICAgICB9CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwog
ICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCnsKICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtZXNzYWdlUmVmKTsKICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVy
PiBEaXNwYXRjaE1hcDsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3Bh
dGNoTWFwLCApOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChkaXNwYXRjaE1hcC5pc0Vt
cHR5KCkpIHsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoZWRpdFNjcmlwdFNvdXJjZUNtZCwgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjplZGl0U2NyaXB0U291cmNlKTsKICAgICAgICBkaXNw
YXRjaE1hcC5hZGQoc3RvcmVMYXN0QWN0aXZlUGFuZWxDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6c3RvcmVMYXN0QWN0aXZlUGFuZWwpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChl
eGVjdXRlU1FMQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUwpOwog
ICAgICAgIGRpc3BhdGNoTWFwLmFkZChnZXRET01TdG9yYWdlRW50cmllc0NtZCwgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRET01TdG9yYWdlRW50cmllcyk7CiAgICAgICAgZGlzcGF0
Y2hNYXAuYWRkKGNsZWFyQ29uc29sZU1lc3NhZ2VzQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoZ2V0
UHJvZmlsZXJMb2dMaW5lc0NtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9m
aWxlckxvZ0xpbmVzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoZW5hYmxlTW9uaXRvcmluZ1hI
UkNtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjplbmFibGVNb25pdG9yaW5nWEhSKTsK
ICAgICAgICBkaXNwYXRjaE1hcC5hZGQoZ2V0UHJvZmlsZUNtZCwgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRQcm9maWxlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoc2V0U3R5bGVQ
cm9wZXJ0eUNtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRTdHlsZVByb3BlcnR5
KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoaGlnaGxpZ2h0RE9NTm9kZUNtZCwgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpoaWdobGlnaHRET01Ob2RlKTsKICAgICAgICBkaXNwYXRjaE1h
cC5hZGQoc2V0T3V0ZXJIVE1MQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNldE91
dGVySFRNTCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGFkZEluc3BlY3RlZE5vZGVDbWQsICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6YWRkSW5zcGVjdGVkTm9kZSk7CiAgICAgICAgZGlz
cGF0Y2hNYXAuYWRkKHRha2VIZWFwU25hcHNob3RDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6dGFrZUhlYXBTbmFwc2hvdCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGFwcGx5U3R5
bGVUZXh0Q21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmFwcGx5U3R5bGVUZXh0KTsK
ICAgICAgICBkaXNwYXRjaE1hcC5hZGQocmVtb3ZlTm9kZUNtZCwgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpyZW1vdmVOb2RlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQocmVzdW1lQ21k
LCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlc3VtZSk7CiAgICAgICAgZGlzcGF0Y2hN
YXAuYWRkKGdldFN0eWxlc0NtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHls
ZXMpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChvcGVuSW5JbnNwZWN0ZWRXaW5kb3dDbWQsICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6b3BlbkluSW5zcGVjdGVkV2luZG93KTsKICAgICAg
ICBkaXNwYXRjaE1hcC5hZGQoc2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZUNtZCwgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKTsKICAgICAgICBk
aXNwYXRjaE1hcC5hZGQoZ2V0RGF0YWJhc2VUYWJsZU5hbWVzQ21kLCAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldERhdGFiYXNlVGFibGVOYW1lcyk7CiAgICAgICAgZGlzcGF0Y2hNYXAu
YWRkKHNhdmVTZXNzaW9uU2V0dGluZ3NDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
c2F2ZVNlc3Npb25TZXR0aW5ncyk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGRlbGV0ZUNvb2tp
ZUNtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkZWxldGVDb29raWUpOwogICAgICAg
IGRpc3BhdGNoTWFwLmFkZChzZXRCcmVha3BvaW50Q21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OnNldEJyZWFrcG9pbnQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChjaGFuZ2VUYWdO
YW1lQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNoYW5nZVRhZ05hbWUpOwogICAg
ICAgIGRpc3BhdGNoTWFwLmFkZChhZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkQ21kLCAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQpOwogICAgICAg
IGRpc3BhdGNoTWFwLmFkZChnZXRQcm9maWxlSGVhZGVyc0NtZCwgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRQcm9maWxlSGVhZGVycyk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGhp
ZGVET01Ob2RlSGlnaGxpZ2h0Q21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmhpZGVE
T01Ob2RlSGlnaGxpZ2h0KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoZGlzYWJsZU1vbml0b3Jp
bmdYSFJDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZU1vbml0b3JpbmdY
SFIpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChkaXNhYmxlRGVidWdnZXJDbWQsICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZURlYnVnZ2VyKTsKICAgICAgICBkaXNwYXRjaE1h
cC5hZGQoZ2V0Q29tcHV0ZWRTdHlsZUNtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRDb21wdXRlZFN0eWxlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoZGlzYWJsZVByb2ZpbGVy
Q21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc2FibGVQcm9maWxlcik7CiAgICAg
ICAgZGlzcGF0Y2hNYXAuYWRkKHNldEluamVjdGVkU2NyaXB0U291cmNlQ21kLCAmSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OnNldEluamVjdGVkU2NyaXB0U291cmNlKTsKICAgICAgICBkaXNw
YXRjaE1hcC5hZGQoZ2V0UmVzb3VyY2VDb250ZW50Q21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldFJlc291cmNlQ29udGVudCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKHNlYXJj
aENhbmNlbGVkQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNlYXJjaENhbmNlbGVk
KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZENt
ZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250
ZW5kKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQocGVyZm9ybVNlYXJjaENtZCwgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpwZXJmb3JtU2VhcmNoKTsKICAgICAgICBkaXNwYXRjaE1hcC5h
ZGQoY29weU5vZGVDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y29weU5vZGUpOwog
ICAgICAgIGRpc3BhdGNoTWFwLmFkZChkaXNhYmxlU2VhcmNoaW5nRm9yTm9kZUNtZCwgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaXNhYmxlU2VhcmNoaW5nRm9yTm9kZSk7CiAgICAgICAg
ZGlzcGF0Y2hNYXAuYWRkKHN0b3BQcm9maWxpbmdDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6c3RvcFByb2ZpbGluZyk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGdldENvb2tpZXND
bWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Q29va2llcyk7CiAgICAgICAgZGlz
cGF0Y2hNYXAuYWRkKHNhdmVBcHBsaWNhdGlvblNldHRpbmdzQ21kLCAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OnNhdmVBcHBsaWNhdGlvblNldHRpbmdzKTsKICAgICAgICBkaXNwYXRjaE1h
cC5hZGQoZ2V0QXBwbGljYXRpb25DYWNoZXNDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0QXBwbGljYXRpb25DYWNoZXMpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChkZWFjdGl2
YXRlQnJlYWtwb2ludHNDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGVhY3RpdmF0
ZUJyZWFrcG9pbnRzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoZ2V0RXZlbnRMaXN0ZW5lcnNG
b3JOb2RlQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEV2ZW50TGlzdGVuZXJz
Rm9yTm9kZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKHJlbW92ZUF0dHJpYnV0ZUNtZCwgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZW1vdmVBdHRyaWJ1dGUpOwogICAgICAgIGRpc3Bh
dGNoTWFwLmFkZChzZXRTdHlsZVRleHRDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
c2V0U3R5bGVUZXh0KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQocGF1c2VDbWQsICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cGF1c2UpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChkaXNw
YXRjaE9uSW5qZWN0ZWRTY3JpcHRDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlz
cGF0Y2hPbkluamVjdGVkU2NyaXB0KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQocmVtb3ZlQnJl
YWtwb2ludENtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZW1vdmVCcmVha3BvaW50
KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoc2V0UnVsZVNlbGVjdG9yQ21kLCAmSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OnNldFJ1bGVTZWxlY3Rvcik7CiAgICAgICAgZGlzcGF0Y2hNYXAu
YWRkKGRpc2FibGVSZXNvdXJjZVRyYWNraW5nQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmRpc2FibGVSZXNvdXJjZVRyYWNraW5nKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoc3Rl
cEludG9TdGF0ZW1lbnRDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c3RlcEludG9T
dGF0ZW1lbnQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChyZW1vdmVQcm9maWxlQ21kLCAmSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbW92ZVByb2ZpbGUpOwogICAgICAgIGRpc3BhdGNo
TWFwLmFkZChyZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZENtZCwgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpyZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCk7CiAgICAg
ICAgZGlzcGF0Y2hNYXAuYWRkKHRvZ2dsZVN0eWxlRW5hYmxlZENtZCwgJkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjp0b2dnbGVTdHlsZUVuYWJsZWQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFk
ZChzZXRET01TdG9yYWdlSXRlbUNtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRE
T01TdG9yYWdlSXRlbSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKHB1c2hOb2RlQnlQYXRoVG9G
cm9udGVuZENtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpwdXNoTm9kZUJ5UGF0aFRv
RnJvbnRlbmQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChzdG9wVGltZWxpbmVQcm9maWxlckNt
ZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzdG9wVGltZWxpbmVQcm9maWxlcik7CiAg
ICAgICAgZGlzcGF0Y2hNYXAuYWRkKGVuYWJsZVByb2ZpbGVyQ21kLCAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmVuYWJsZVByb2ZpbGVyKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQocmVs
b2FkUGFnZUNtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZWxvYWRQYWdlKTsKICAg
ICAgICBkaXNwYXRjaE1hcC5hZGQoZ2V0T3V0ZXJIVE1MQ21kLCAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldE91dGVySFRNTCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGdldFN0eWxl
U2hlZXRDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3R5bGVTaGVldCk7CiAg
ICAgICAgZGlzcGF0Y2hNYXAuYWRkKGFkZFJ1bGVDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6YWRkUnVsZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKHN0ZXBPdXRPZkZ1bmN0aW9u
Q21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0ZXBPdXRPZkZ1bmN0aW9uKTsKICAg
ICAgICBkaXNwYXRjaE1hcC5hZGQoYWN0aXZhdGVCcmVha3BvaW50c0NtZCwgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjphY3RpdmF0ZUJyZWFrcG9pbnRzKTsKICAgICAgICBkaXNwYXRjaE1h
cC5hZGQoZW5hYmxlUmVzb3VyY2VUcmFja2luZ0NtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjplbmFibGVSZXNvdXJjZVRyYWNraW5nKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoZ2V0
U2NyaXB0U291cmNlQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFNjcmlwdFNv
dXJjZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGdldEFsbFN0eWxlc0NtZCwgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBbGxTdHlsZXMpOwogICAgICAgIGRpc3BhdGNoTWFwLmFk
ZChyZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OnJlbGVhc2VXcmFwcGVyT2JqZWN0R3JvdXApOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChn
ZXRJbmxpbmVTdHlsZUNtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbmxpbmVT
dHlsZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKHNldEF0dHJpYnV0ZUNtZCwgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpzZXRBdHRyaWJ1dGUpOwogICAgICAgIGRpc3BhdGNoTWFwLmFk
ZChnZXRSdWxlUmFuZ2VzQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFJ1bGVS
YW5nZXMpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChlbmFibGVEZWJ1Z2dlckNtZCwgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjplbmFibGVEZWJ1Z2dlcik7CiAgICAgICAgZGlzcGF0Y2hN
YXAuYWRkKGNsZWFyUHJvZmlsZXNDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y2xl
YXJQcm9maWxlcyk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGVuYWJsZVNlYXJjaGluZ0Zvck5v
ZGVDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZW5hYmxlU2VhcmNoaW5nRm9yTm9k
ZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKHN0ZXBPdmVyU3RhdGVtZW50Q21kLCAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OnN0ZXBPdmVyU3RhdGVtZW50KTsKICAgICAgICBkaXNwYXRj
aE1hcC5hZGQoZ2V0Q2hpbGROb2Rlc0NtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRDaGlsZE5vZGVzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoc2V0VGV4dE5vZGVWYWx1ZUNt
ZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRUZXh0Tm9kZVZhbHVlKTsKICAgICAg
ICBkaXNwYXRjaE1hcC5hZGQoc3RhcnRUaW1lbGluZVByb2ZpbGVyQ21kLCAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OnN0YXJ0VGltZWxpbmVQcm9maWxlcik7CiAgICAgICAgZGlzcGF0Y2hN
YXAuYWRkKHJlbW92ZURPTVN0b3JhZ2VJdGVtQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OnJlbW92ZURPTVN0b3JhZ2VJdGVtKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoc3RhcnRQ
cm9maWxpbmdDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c3RhcnRQcm9maWxpbmcp
OwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2VkTWVzc2FnZSA9IEluc3Bl
Y3RvclZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7CiAgICBpZiAoIXBhcnNlZE1lc3NhZ2UpIHsK
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KGNhbGxJZCwgImRpc3BhdGNoIiwgIkVycm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBNZXNz
YWdlIHNob3VsZCBiZSBpbiBKU09OIGZvcm1hdC4iKTsKICAgICAgICByZXR1cm47CiAgICB9Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZU9iamVjdCA9IHBhcnNlZE1lc3NhZ2Ut
PmFzT2JqZWN0KCk7CiAgICBpZiAoIW1lc3NhZ2VPYmplY3QpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgImRpc3BhdGNo
IiwgIkVycm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBUaGUgbWVzc2FnZSBzaG91bGQgYmUg
YSBKU09OaWZpZWQgb2JqZWN0LiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IGNhbGxJZFZhbHVlID0gbWVzc2FnZU9iamVjdC0+Z2V0KCJzZXEiKTsK
ICAgIGlmICghY2FsbElkVmFsdWUpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgImRpc3BhdGNoIiwgIkVycm9yOiBJbnZh
bGlkIG1lc3NhZ2UgZm9ybWF0LiAnc2VxJyBwcm9wZXJ0eSB3YXMgbm90IGZvdW5kIGluIHRoZSBy
ZXF1ZXN0LiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWNhbGxJZFZhbHVlLT5h
c051bWJlcigmY2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCAiZGlzcGF0Y2giLCAiRXJyb3I6IEludmFsaWQg
bWVzc2FnZSBmb3JtYXQuIHRoZSB0eXBlIG9mICdzZXEnIHByb3BlcnR5IHNob3VsZCBiZSBudW1i
ZXIuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
Y29tbWFuZFZhbHVlID0gbWVzc2FnZU9iamVjdC0+Z2V0KCJjb21tYW5kIik7CiAgICBpZiAoIWNv
bW1hbmRWYWx1ZSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9y
dFByb3RvY29sRXJyb3IoY2FsbElkLCAiZGlzcGF0Y2giLCAiRXJyb3I6IEludmFsaWQgbWVzc2Fn
ZSBmb3JtYXQuICdjb21tYW5kJyBwcm9wZXJ0eSB3YXNuJ3QgZm91bmQuIik7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIFN0cmluZyBjb21tYW5kOwogICAgaWYgKCFjb21tYW5kVmFsdWUtPmFz
U3RyaW5nKCZjb21tYW5kKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCAiZGlzcGF0Y2giLCAiRXJyb3I6IEludmFsaWQg
bWVzc2FnZSBmb3JtYXQuIFRoZSB0eXBlIG9mICdjb21tYW5kJyBwcm9wZXJ0eSBzaG91bGQgYmUg
c3RyaW5nLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBIYXNoTWFwPFN0cmluZywgQ2Fs
bEhhbmRsZXI+OjppdGVyYXRvciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQoY29tbWFuZCk7CiAgICBp
ZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgImRpc3BhdGNoIiwgU3RyaW5n
Ojpmb3JtYXQoIkVycm9yOiBJbnZhbGlkIGNvbW1hbmQgd2FzIHJlY2VpdmVkLiAnJXMnIHdhc24n
dCBmb3VuZC4iLCBjb21tYW5kLnV0ZjgoKS5kYXRhKCkpKTsKICAgICAgICByZXR1cm47CiAgICB9
CgogICAgKCgqdGhpcykuKml0LT5zZWNvbmQpKGNhbGxJZCwgbWVzc2FnZU9iamVjdCk7Cn0KCnZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3Qg
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBTdHJpbmcmIGVycm9yVGV4
dCkgY29uc3QKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBtZXNzYWdlLT5zZXROdW1iZXIoInNlcSIsIGNhbGxJZCk7
CiAgICBtZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAiZXJyb3IiKTsKICAgIG1lc3NhZ2UtPnNl
dFN0cmluZygiZG9tYWluIiwgImluc3BlY3RvclByb3RvY29sIik7CiAgICBtZXNzYWdlLT5zZXRT
dHJpbmcoImNvbW1hbmQiLCBtZXRob2QpOwogICAgbWVzc2FnZS0+c2V0Qm9vbCgic3VjY2VzcyIs
IGZhbHNlKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gZXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwogICAgZXJyb3JzLT5wdXNoU3RyaW5nKGVycm9yVGV4dCk7CiAgICBtZXNz
YWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgZXJyb3JzKTsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7Cn0KCn0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKCiNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>64979</attachid>
            <date>2010-08-20 13:20:56 -0700</date>
            <delta_ts>2010-08-23 03:19:11 -0700</delta_ts>
            <desc>sample: InspectorBackendStub.js</desc>
            <filename>InspectorBackendStub.js</filename>
            <type>text/plain</type>
            <size>16665</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">Ly8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgoK
V2ViSW5zcGVjdG9yLkluc3BlY3RvckJhY2tlbmRTdHViID0gZnVuY3Rpb24oKQp7CiAgICB0aGlz
Ll9yZWdpc3RlckRlbGVnYXRlKCJzdG9yZUxhc3RBY3RpdmVQYW5lbCIsICJ7XCJzZXFcIjogMCwg
XCJ0eXBlXCI6IFwicmVxdWVzdFwiLCBcImRvbWFpblwiOiBcIkNvbnRyb2xsZXJcIixcImNvbW1h
bmRcIjogXCJzdG9yZUxhc3RBY3RpdmVQYW5lbFwiLFwiYXJndW1lbnRzXCI6IHtcInBhbmVsTmFt
ZVwiOiBudWxsfX0iKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoInNhdmVBcHBsaWNhdGlv
blNldHRpbmdzIiwgIntcInNlcVwiOiAwLCBcInR5cGVcIjogXCJyZXF1ZXN0XCIsIFwiZG9tYWlu
XCI6IFwiQ29udHJvbGxlclwiLFwiY29tbWFuZFwiOiBcInNhdmVBcHBsaWNhdGlvblNldHRpbmdz
XCIsXCJhcmd1bWVudHNcIjoge1wic2V0dGluZ3NcIjogbnVsbH19Iik7CiAgICB0aGlzLl9yZWdp
c3RlckRlbGVnYXRlKCJzYXZlU2Vzc2lvblNldHRpbmdzIiwgIntcInNlcVwiOiAwLCBcInR5cGVc
IjogXCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiQ29udHJvbGxlclwiLFwiY29tbWFuZFwiOiBc
InNhdmVTZXNzaW9uU2V0dGluZ3NcIixcImFyZ3VtZW50c1wiOiB7XCJzZXR0aW5nc1wiOiBudWxs
fX0iKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoImVuYWJsZVNlYXJjaGluZ0Zvck5vZGUi
LCAie1wic2VxXCI6IDAsIFwidHlwZVwiOiBcInJlcXVlc3RcIiwgXCJkb21haW5cIjogXCJDb250
cm9sbGVyXCIsXCJjb21tYW5kXCI6IFwiZW5hYmxlU2VhcmNoaW5nRm9yTm9kZVwiLFwiYXJndW1l
bnRzXCI6IHt9fSIpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgiZGlzYWJsZVNlYXJjaGlu
Z0Zvck5vZGUiLCAie1wic2VxXCI6IDAsIFwidHlwZVwiOiBcInJlcXVlc3RcIiwgXCJkb21haW5c
IjogXCJDb250cm9sbGVyXCIsXCJjb21tYW5kXCI6IFwiZGlzYWJsZVNlYXJjaGluZ0Zvck5vZGVc
IixcImFyZ3VtZW50c1wiOiB7fX0iKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoImVuYWJs
ZU1vbml0b3JpbmdYSFIiLCAie1wic2VxXCI6IDAsIFwidHlwZVwiOiBcInJlcXVlc3RcIiwgXCJk
b21haW5cIjogXCJDb250cm9sbGVyXCIsXCJjb21tYW5kXCI6IFwiZW5hYmxlTW9uaXRvcmluZ1hI
UlwiLFwiYXJndW1lbnRzXCI6IHt9fSIpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgiZGlz
YWJsZU1vbml0b3JpbmdYSFIiLCAie1wic2VxXCI6IDAsIFwidHlwZVwiOiBcInJlcXVlc3RcIiwg
XCJkb21haW5cIjogXCJDb250cm9sbGVyXCIsXCJjb21tYW5kXCI6IFwiZGlzYWJsZU1vbml0b3Jp
bmdYSFJcIixcImFyZ3VtZW50c1wiOiB7fX0iKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUo
ImVuYWJsZVJlc291cmNlVHJhY2tpbmciLCAie1wic2VxXCI6IDAsIFwidHlwZVwiOiBcInJlcXVl
c3RcIiwgXCJkb21haW5cIjogXCJDb250cm9sbGVyXCIsXCJjb21tYW5kXCI6IFwiZW5hYmxlUmVz
b3VyY2VUcmFja2luZ1wiLFwiYXJndW1lbnRzXCI6IHtcImFsd2F5c1wiOiBudWxsfX0iKTsKICAg
IHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoImRpc2FibGVSZXNvdXJjZVRyYWNraW5nIiwgIntcInNl
cVwiOiAwLCBcInR5cGVcIjogXCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiQ29udHJvbGxlclwi
LFwiY29tbWFuZFwiOiBcImRpc2FibGVSZXNvdXJjZVRyYWNraW5nXCIsXCJhcmd1bWVudHNcIjog
e1wiYWx3YXlzXCI6IG51bGx9fSIpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgiZ2V0UmVz
b3VyY2VDb250ZW50IiwgIntcInNlcVwiOiAwLCBcInR5cGVcIjogXCJyZXF1ZXN0XCIsIFwiZG9t
YWluXCI6IFwiQ29udHJvbGxlclwiLFwiY29tbWFuZFwiOiBcImdldFJlc291cmNlQ29udGVudFwi
LFwiYXJndW1lbnRzXCI6IHtcImNhbGxJZFwiOiBudWxsLFwiaWRlbnRpZmllclwiOiBudWxsfX0i
KTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoInJlbG9hZFBhZ2UiLCAie1wic2VxXCI6IDAs
IFwidHlwZVwiOiBcInJlcXVlc3RcIiwgXCJkb21haW5cIjogXCJDb250cm9sbGVyXCIsXCJjb21t
YW5kXCI6IFwicmVsb2FkUGFnZVwiLFwiYXJndW1lbnRzXCI6IHt9fSIpOwogICAgdGhpcy5fcmVn
aXN0ZXJEZWxlZ2F0ZSgic3RhcnRUaW1lbGluZVByb2ZpbGVyIiwgIntcInNlcVwiOiAwLCBcInR5
cGVcIjogXCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiQ29udHJvbGxlclwiLFwiY29tbWFuZFwi
OiBcInN0YXJ0VGltZWxpbmVQcm9maWxlclwiLFwiYXJndW1lbnRzXCI6IHt9fSIpOwogICAgdGhp
cy5fcmVnaXN0ZXJEZWxlZ2F0ZSgic3RvcFRpbWVsaW5lUHJvZmlsZXIiLCAie1wic2VxXCI6IDAs
IFwidHlwZVwiOiBcInJlcXVlc3RcIiwgXCJkb21haW5cIjogXCJDb250cm9sbGVyXCIsXCJjb21t
YW5kXCI6IFwic3RvcFRpbWVsaW5lUHJvZmlsZXJcIixcImFyZ3VtZW50c1wiOiB7fX0iKTsKICAg
IHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoImVuYWJsZURlYnVnZ2VyIiwgIntcInNlcVwiOiAwLCBc
InR5cGVcIjogXCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiQmFja2VuZFwiLFwiY29tbWFuZFwi
OiBcImVuYWJsZURlYnVnZ2VyXCIsXCJhcmd1bWVudHNcIjoge1wiYWx3YXlzXCI6IG51bGx9fSIp
OwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgiZGlzYWJsZURlYnVnZ2VyIiwgIntcInNlcVwi
OiAwLCBcInR5cGVcIjogXCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiQ29udHJvbGxlclwiLFwi
Y29tbWFuZFwiOiBcImRpc2FibGVEZWJ1Z2dlclwiLFwiYXJndW1lbnRzXCI6IHtcImFsd2F5c1wi
OiBudWxsfX0iKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoInNldEJyZWFrcG9pbnQiLCAi
e1wic2VxXCI6IDAsIFwidHlwZVwiOiBcInJlcXVlc3RcIiwgXCJkb21haW5cIjogXCJEZWJ1Z1wi
LFwiY29tbWFuZFwiOiBcInNldEJyZWFrcG9pbnRcIixcImFyZ3VtZW50c1wiOiB7XCJjYWxsSWRc
IjogbnVsbCxcInNvdXJjZUlEXCI6IG51bGwsXCJsaW5lTnVtYmVyXCI6IG51bGwsXCJlbmFibGVk
XCI6IG51bGwsXCJjb25kaXRpb25cIjogbnVsbH19Iik7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVn
YXRlKCJyZW1vdmVCcmVha3BvaW50IiwgIntcInNlcVwiOiAwLCBcInR5cGVcIjogXCJyZXF1ZXN0
XCIsIFwiZG9tYWluXCI6IFwiRGVidWdcIixcImNvbW1hbmRcIjogXCJyZW1vdmVCcmVha3BvaW50
XCIsXCJhcmd1bWVudHNcIjoge1wic291cmNlSURcIjogbnVsbCxcImxpbmVOdW1iZXJcIjogbnVs
bH19Iik7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCJhY3RpdmF0ZUJyZWFrcG9pbnRzIiwg
IntcInNlcVwiOiAwLCBcInR5cGVcIjogXCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiRGVidWdc
IixcImNvbW1hbmRcIjogXCJhY3RpdmF0ZUJyZWFrcG9pbnRzXCIsXCJhcmd1bWVudHNcIjoge319
Iik7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCJkZWFjdGl2YXRlQnJlYWtwb2ludHMiLCAi
e1wic2VxXCI6IDAsIFwidHlwZVwiOiBcInJlcXVlc3RcIiwgXCJkb21haW5cIjogXCJEZWJ1Z1wi
LFwiY29tbWFuZFwiOiBcImRlYWN0aXZhdGVCcmVha3BvaW50c1wiLFwiYXJndW1lbnRzXCI6IHt9
fSIpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgicGF1c2UiLCAie1wic2VxXCI6IDAsIFwi
dHlwZVwiOiBcInJlcXVlc3RcIiwgXCJkb21haW5cIjogXCJEZWJ1Z1wiLFwiY29tbWFuZFwiOiBc
InBhdXNlXCIsXCJhcmd1bWVudHNcIjoge319Iik7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRl
KCJyZXN1bWUiLCAie1wic2VxXCI6IDAsIFwidHlwZVwiOiBcInJlcXVlc3RcIiwgXCJkb21haW5c
IjogXCJEZWJ1Z1wiLFwiY29tbWFuZFwiOiBcInJlc3VtZVwiLFwiYXJndW1lbnRzXCI6IHt9fSIp
OwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgic3RlcE92ZXJTdGF0ZW1lbnQiLCAie1wic2Vx
XCI6IDAsIFwidHlwZVwiOiBcInJlcXVlc3RcIiwgXCJkb21haW5cIjogXCJEZWJ1Z1wiLFwiY29t
bWFuZFwiOiBcInN0ZXBPdmVyU3RhdGVtZW50XCIsXCJhcmd1bWVudHNcIjoge319Iik7CiAgICB0
aGlzLl9yZWdpc3RlckRlbGVnYXRlKCJzdGVwSW50b1N0YXRlbWVudCIsICJ7XCJzZXFcIjogMCwg
XCJ0eXBlXCI6IFwicmVxdWVzdFwiLCBcImRvbWFpblwiOiBcIkRlYnVnXCIsXCJjb21tYW5kXCI6
IFwic3RlcEludG9TdGF0ZW1lbnRcIixcImFyZ3VtZW50c1wiOiB7fX0iKTsKICAgIHRoaXMuX3Jl
Z2lzdGVyRGVsZWdhdGUoInN0ZXBPdXRPZkZ1bmN0aW9uIiwgIntcInNlcVwiOiAwLCBcInR5cGVc
IjogXCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiRGVidWdcIixcImNvbW1hbmRcIjogXCJzdGVw
T3V0T2ZGdW5jdGlvblwiLFwiYXJndW1lbnRzXCI6IHt9fSIpOwogICAgdGhpcy5fcmVnaXN0ZXJE
ZWxlZ2F0ZSgic2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSIsICJ7XCJzZXFcIjogMCwgXCJ0eXBl
XCI6IFwicmVxdWVzdFwiLCBcImRvbWFpblwiOiBcIkRlYnVnXCIsXCJjb21tYW5kXCI6IFwic2V0
UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZVwiLFwiYXJndW1lbnRzXCI6IHtcInBhdXNlT25FeGNlcHRp
b25zU3RhdGVcIjogbnVsbH19Iik7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCJlZGl0U2Ny
aXB0U291cmNlIiwgIntcInNlcVwiOiAwLCBcInR5cGVcIjogXCJyZXF1ZXN0XCIsIFwiZG9tYWlu
XCI6IFwiRGVidWdcIixcImNvbW1hbmRcIjogXCJlZGl0U2NyaXB0U291cmNlXCIsXCJhcmd1bWVu
dHNcIjoge1wiY2FsbElkXCI6IG51bGwsXCJzb3VyY2VJRFwiOiBudWxsLFwibmV3Q29udGVudFwi
OiBudWxsfX0iKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoImdldFNjcmlwdFNvdXJjZSIs
ICJ7XCJzZXFcIjogMCwgXCJ0eXBlXCI6IFwicmVxdWVzdFwiLCBcImRvbWFpblwiOiBcIkRlYnVn
XCIsXCJjb21tYW5kXCI6IFwiZ2V0U2NyaXB0U291cmNlXCIsXCJhcmd1bWVudHNcIjoge1wiY2Fs
bElkXCI6IG51bGwsXCJzb3VyY2VJRFwiOiBudWxsfX0iKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVs
ZWdhdGUoImVuYWJsZVByb2ZpbGVyIiwgIntcInNlcVwiOiAwLCBcInR5cGVcIjogXCJyZXF1ZXN0
XCIsIFwiZG9tYWluXCI6IFwiQ29udHJvbGxlclwiLFwiY29tbWFuZFwiOiBcImVuYWJsZVByb2Zp
bGVyXCIsXCJhcmd1bWVudHNcIjoge1wiYWx3YXlzXCI6IG51bGx9fSIpOwogICAgdGhpcy5fcmVn
aXN0ZXJEZWxlZ2F0ZSgiZGlzYWJsZVByb2ZpbGVyIiwgIntcInNlcVwiOiAwLCBcInR5cGVcIjog
XCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiQ29udHJvbGxlclwiLFwiY29tbWFuZFwiOiBcImRp
c2FibGVQcm9maWxlclwiLFwiYXJndW1lbnRzXCI6IHtcImFsd2F5c1wiOiBudWxsfX0iKTsKICAg
IHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoInN0YXJ0UHJvZmlsaW5nIiwgIntcInNlcVwiOiAwLCBc
InR5cGVcIjogXCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiQ29udHJvbGxlclwiLFwiY29tbWFu
ZFwiOiBcInN0YXJ0UHJvZmlsaW5nXCIsXCJhcmd1bWVudHNcIjoge319Iik7CiAgICB0aGlzLl9y
ZWdpc3RlckRlbGVnYXRlKCJzdG9wUHJvZmlsaW5nIiwgIntcInNlcVwiOiAwLCBcInR5cGVcIjog
XCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiQ29udHJvbGxlclwiLFwiY29tbWFuZFwiOiBcInN0
b3BQcm9maWxpbmdcIixcImFyZ3VtZW50c1wiOiB7fX0iKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVs
ZWdhdGUoImdldFByb2ZpbGVIZWFkZXJzIiwgIntcInNlcVwiOiAwLCBcInR5cGVcIjogXCJyZXF1
ZXN0XCIsIFwiZG9tYWluXCI6IFwiQ29udHJvbGxlclwiLFwiY29tbWFuZFwiOiBcImdldFByb2Zp
bGVIZWFkZXJzXCIsXCJhcmd1bWVudHNcIjoge1wiY2FsbElkXCI6IG51bGx9fSIpOwogICAgdGhp
cy5fcmVnaXN0ZXJEZWxlZ2F0ZSgiZ2V0UHJvZmlsZSIsICJ7XCJzZXFcIjogMCwgXCJ0eXBlXCI6
IFwicmVxdWVzdFwiLCBcImRvbWFpblwiOiBcIkNvbnRyb2xsZXJcIixcImNvbW1hbmRcIjogXCJn
ZXRQcm9maWxlXCIsXCJhcmd1bWVudHNcIjoge1wiY2FsbElkXCI6IG51bGwsXCJ1aWRcIjogbnVs
bH19Iik7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCJyZW1vdmVQcm9maWxlIiwgIntcInNl
cVwiOiAwLCBcInR5cGVcIjogXCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiQ29udHJvbGxlclwi
LFwiY29tbWFuZFwiOiBcInJlbW92ZVByb2ZpbGVcIixcImFyZ3VtZW50c1wiOiB7XCJ1aWRcIjog
bnVsbH19Iik7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCJjbGVhclByb2ZpbGVzIiwgIntc
InNlcVwiOiAwLCBcInR5cGVcIjogXCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiQ29udHJvbGxl
clwiLFwiY29tbWFuZFwiOiBcImNsZWFyUHJvZmlsZXNcIixcImFyZ3VtZW50c1wiOiB7fX0iKTsK
ICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoInRha2VIZWFwU25hcHNob3QiLCAie1wic2VxXCI6
IDAsIFwidHlwZVwiOiBcInJlcXVlc3RcIiwgXCJkb21haW5cIjogXCJCYWNrZW5kXCIsXCJjb21t
YW5kXCI6IFwidGFrZUhlYXBTbmFwc2hvdFwiLFwiYXJndW1lbnRzXCI6IHt9fSIpOwogICAgdGhp
cy5fcmVnaXN0ZXJEZWxlZ2F0ZSgiZ2V0UHJvZmlsZXJMb2dMaW5lcyIsICJ7XCJzZXFcIjogMCwg
XCJ0eXBlXCI6IFwicmVxdWVzdFwiLCBcImRvbWFpblwiOiBcIkJhY2tlbmRcIixcImNvbW1hbmRc
IjogXCJnZXRQcm9maWxlckxvZ0xpbmVzXCIsXCJhcmd1bWVudHNcIjoge1wiY2FsbElkXCI6IG51
bGwsXCJpblBvc2l0aW9uXCI6IG51bGx9fSIpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgi
c2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2UiLCAie1wic2VxXCI6IDAsIFwidHlwZVwiOiBcInJlcXVl
c3RcIiwgXCJkb21haW5cIjogXCJCYWNrZW5kXCIsXCJjb21tYW5kXCI6IFwic2V0SW5qZWN0ZWRT
Y3JpcHRTb3VyY2VcIixcImFyZ3VtZW50c1wiOiB7XCJzY3JpcHRTb3VyY2VcIjogbnVsbH19Iik7
CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCJkaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQiLCAi
e1wic2VxXCI6IDAsIFwidHlwZVwiOiBcInJlcXVlc3RcIiwgXCJkb21haW5cIjogXCJCYWNrZW5k
XCIsXCJjb21tYW5kXCI6IFwiZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0XCIsXCJhcmd1bWVudHNc
Ijoge1wiY2FsbElkXCI6IG51bGwsXCJpbmplY3RlZFNjcmlwdElkXCI6IG51bGwsXCJtZXRob2RO
YW1lXCI6IG51bGwsXCJhcmd1bWVudHNcIjogbnVsbH19Iik7CiAgICB0aGlzLl9yZWdpc3RlckRl
bGVnYXRlKCJhZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkIiwgIntcInNlcVwiOiAwLCBcInR5cGVc
IjogXCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiQ29udHJvbGxlclwiLFwiY29tbWFuZFwiOiBc
ImFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWRcIixcImFyZ3VtZW50c1wiOiB7XCJzY3JpcHRTb3Vy
Y2VcIjogbnVsbH19Iik7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCJyZW1vdmVBbGxTY3Jp
cHRzVG9FdmFsdWF0ZU9uTG9hZCIsICJ7XCJzZXFcIjogMCwgXCJ0eXBlXCI6IFwicmVxdWVzdFwi
LCBcImRvbWFpblwiOiBcIkNvbnRyb2xsZXJcIixcImNvbW1hbmRcIjogXCJyZW1vdmVBbGxTY3Jp
cHRzVG9FdmFsdWF0ZU9uTG9hZFwiLFwiYXJndW1lbnRzXCI6IHt9fSIpOwogICAgdGhpcy5fcmVn
aXN0ZXJEZWxlZ2F0ZSgiZ2V0Q2hpbGROb2RlcyIsICJ7XCJzZXFcIjogMCwgXCJ0eXBlXCI6IFwi
cmVxdWVzdFwiLCBcImRvbWFpblwiOiBcIkRPTVwiLFwiY29tbWFuZFwiOiBcImdldENoaWxkTm9k
ZXNcIixcImFyZ3VtZW50c1wiOiB7XCJjYWxsSWRcIjogbnVsbCxcIm5vZGVJZFwiOiBudWxsfX0i
KTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoInNldEF0dHJpYnV0ZSIsICJ7XCJzZXFcIjog
MCwgXCJ0eXBlXCI6IFwicmVxdWVzdFwiLCBcImRvbWFpblwiOiBcIkRPTVwiLFwiY29tbWFuZFwi
OiBcInNldEF0dHJpYnV0ZVwiLFwiYXJndW1lbnRzXCI6IHtcImNhbGxJZFwiOiBudWxsLFwiZWxl
bWVudElkXCI6IG51bGwsXCJuYW1lXCI6IG51bGwsXCJ2YWx1ZVwiOiBudWxsfX0iKTsKICAgIHRo
aXMuX3JlZ2lzdGVyRGVsZWdhdGUoInJlbW92ZUF0dHJpYnV0ZSIsICJ7XCJzZXFcIjogMCwgXCJ0
eXBlXCI6IFwicmVxdWVzdFwiLCBcImRvbWFpblwiOiBcIkRPTVwiLFwiY29tbWFuZFwiOiBcInJl
bW92ZUF0dHJpYnV0ZVwiLFwiYXJndW1lbnRzXCI6IHtcImNhbGxJZFwiOiBudWxsLFwiZWxlbWVu
dElkXCI6IG51bGwsXCJuYW1lXCI6IG51bGx9fSIpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0
ZSgic2V0VGV4dE5vZGVWYWx1ZSIsICJ7XCJzZXFcIjogMCwgXCJ0eXBlXCI6IFwicmVxdWVzdFwi
LCBcImRvbWFpblwiOiBcIkRPTVwiLFwiY29tbWFuZFwiOiBcInNldFRleHROb2RlVmFsdWVcIixc
ImFyZ3VtZW50c1wiOiB7XCJjYWxsSWRcIjogbnVsbCxcIm5vZGVJZFwiOiBudWxsLFwidmFsdWVc
IjogbnVsbH19Iik7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCJnZXRFdmVudExpc3RlbmVy
c0Zvck5vZGUiLCAie1wic2VxXCI6IDAsIFwidHlwZVwiOiBcInJlcXVlc3RcIiwgXCJkb21haW5c
IjogXCJET01cIixcImNvbW1hbmRcIjogXCJnZXRFdmVudExpc3RlbmVyc0Zvck5vZGVcIixcImFy
Z3VtZW50c1wiOiB7XCJjYWxsSWRcIjogbnVsbCxcIm5vZGVJZFwiOiBudWxsfX0iKTsKICAgIHRo
aXMuX3JlZ2lzdGVyRGVsZWdhdGUoImNvcHlOb2RlIiwgIntcInNlcVwiOiAwLCBcInR5cGVcIjog
XCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiRE9NXCIsXCJjb21tYW5kXCI6IFwiY29weU5vZGVc
IixcImFyZ3VtZW50c1wiOiB7XCJub2RlSWRcIjogbnVsbH19Iik7CiAgICB0aGlzLl9yZWdpc3Rl
ckRlbGVnYXRlKCJyZW1vdmVOb2RlIiwgIntcInNlcVwiOiAwLCBcInR5cGVcIjogXCJyZXF1ZXN0
XCIsIFwiZG9tYWluXCI6IFwiRE9NXCIsXCJjb21tYW5kXCI6IFwicmVtb3ZlTm9kZVwiLFwiYXJn
dW1lbnRzXCI6IHtcImNhbGxJZFwiOiBudWxsLFwibm9kZUlkXCI6IG51bGx9fSIpOwogICAgdGhp
cy5fcmVnaXN0ZXJEZWxlZ2F0ZSgiY2hhbmdlVGFnTmFtZSIsICJ7XCJzZXFcIjogMCwgXCJ0eXBl
XCI6IFwicmVxdWVzdFwiLCBcImRvbWFpblwiOiBcIkRPTVwiLFwiY29tbWFuZFwiOiBcImNoYW5n
ZVRhZ05hbWVcIixcImFyZ3VtZW50c1wiOiB7XCJjYWxsSWRcIjogbnVsbCxcIm5vZGVJZFwiOiBu
dWxsLFwibmV3VGFnTmFtZVwiOiBudWxsfX0iKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUo
ImdldE91dGVySFRNTCIsICJ7XCJzZXFcIjogMCwgXCJ0eXBlXCI6IFwicmVxdWVzdFwiLCBcImRv
bWFpblwiOiBcIkRPTVwiLFwiY29tbWFuZFwiOiBcImdldE91dGVySFRNTFwiLFwiYXJndW1lbnRz
XCI6IHtcImNhbGxJZFwiOiBudWxsLFwibm9kZUlkXCI6IG51bGx9fSIpOwogICAgdGhpcy5fcmVn
aXN0ZXJEZWxlZ2F0ZSgic2V0T3V0ZXJIVE1MIiwgIntcInNlcVwiOiAwLCBcInR5cGVcIjogXCJy
ZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiRE9NXCIsXCJjb21tYW5kXCI6IFwic2V0T3V0ZXJIVE1M
XCIsXCJhcmd1bWVudHNcIjoge1wiY2FsbElkXCI6IG51bGwsXCJub2RlSWRcIjogbnVsbCxcIm91
dGVySFRNTFwiOiBudWxsfX0iKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoImFkZEluc3Bl
Y3RlZE5vZGUiLCAie1wic2VxXCI6IDAsIFwidHlwZVwiOiBcInJlcXVlc3RcIiwgXCJkb21haW5c
IjogXCJET01cIixcImNvbW1hbmRcIjogXCJhZGRJbnNwZWN0ZWROb2RlXCIsXCJhcmd1bWVudHNc
Ijoge1wibm9kZUlkXCI6IG51bGx9fSIpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgicGVy
Zm9ybVNlYXJjaCIsICJ7XCJzZXFcIjogMCwgXCJ0eXBlXCI6IFwicmVxdWVzdFwiLCBcImRvbWFp
blwiOiBcIkRPTVwiLFwiY29tbWFuZFwiOiBcInBlcmZvcm1TZWFyY2hcIixcImFyZ3VtZW50c1wi
OiB7XCJxdWVyeVwiOiBudWxsLFwicnVuU3luY2hyb25vdXNseVwiOiBudWxsfX0iKTsKICAgIHRo
aXMuX3JlZ2lzdGVyRGVsZWdhdGUoInNlYXJjaENhbmNlbGVkIiwgIntcInNlcVwiOiAwLCBcInR5
cGVcIjogXCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiRE9NXCIsXCJjb21tYW5kXCI6IFwic2Vh
cmNoQ2FuY2VsZWRcIixcImFyZ3VtZW50c1wiOiB7fX0iKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVs
ZWdhdGUoInB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZCIsICJ7XCJzZXFcIjogMCwgXCJ0eXBlXCI6
IFwicmVxdWVzdFwiLCBcImRvbWFpblwiOiBcIkRPTVwiLFwiY29tbWFuZFwiOiBcInB1c2hOb2Rl
QnlQYXRoVG9Gcm9udGVuZFwiLFwiYXJndW1lbnRzXCI6IHtcImNhbGxJZFwiOiBudWxsLFwicGF0
aFwiOiBudWxsfX0iKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoImNsZWFyQ29uc29sZU1l
c3NhZ2VzIiwgIntcInNlcVwiOiAwLCBcInR5cGVcIjogXCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6
IFwiQ29udHJvbGxlclwiLFwiY29tbWFuZFwiOiBcImNsZWFyQ29uc29sZU1lc3NhZ2VzXCIsXCJh
cmd1bWVudHNcIjoge319Iik7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCJoaWdobGlnaHRE
T01Ob2RlIiwgIntcInNlcVwiOiAwLCBcInR5cGVcIjogXCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6
IFwiQ29udHJvbGxlclwiLFwiY29tbWFuZFwiOiBcImhpZ2hsaWdodERPTU5vZGVcIixcImFyZ3Vt
ZW50c1wiOiB7XCJub2RlSWRcIjogbnVsbH19Iik7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRl
KCJoaWRlRE9NTm9kZUhpZ2hsaWdodCIsICJ7XCJzZXFcIjogMCwgXCJ0eXBlXCI6IFwicmVxdWVz
dFwiLCBcImRvbWFpblwiOiBcIkNvbnRyb2xsZXJcIixcImNvbW1hbmRcIjogXCJoaWRlRE9NTm9k
ZUhpZ2hsaWdodFwiLFwiYXJndW1lbnRzXCI6IHt9fSIpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxl
Z2F0ZSgib3BlbkluSW5zcGVjdGVkV2luZG93IiwgIntcInNlcVwiOiAwLCBcInR5cGVcIjogXCJy
ZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiQ29udHJvbGxlclwiLFwiY29tbWFuZFwiOiBcIm9wZW5J
bkluc3BlY3RlZFdpbmRvd1wiLFwiYXJndW1lbnRzXCI6IHtcInVybFwiOiBudWxsfX0iKTsKICAg
IHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoImdldFN0eWxlcyIsICJ7XCJzZXFcIjogMCwgXCJ0eXBl
XCI6IFwicmVxdWVzdFwiLCBcImRvbWFpblwiOiBcIkRPTVwiLFwiY29tbWFuZFwiOiBcImdldFN0
eWxlc1wiLFwiYXJndW1lbnRzXCI6IHtcImNhbGxJZFwiOiBudWxsLFwibm9kZUlkXCI6IG51bGws
XCJhdXRoT25seVwiOiBudWxsfX0iKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoImdldEFs
bFN0eWxlcyIsICJ7XCJzZXFcIjogMCwgXCJ0eXBlXCI6IFwicmVxdWVzdFwiLCBcImRvbWFpblwi
OiBcIkRPTVwiLFwiY29tbWFuZFwiOiBcImdldEFsbFN0eWxlc1wiLFwiYXJndW1lbnRzXCI6IHtc
ImNhbGxJZFwiOiBudWxsfX0iKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoImdldElubGlu
ZVN0eWxlIiwgIntcInNlcVwiOiAwLCBcInR5cGVcIjogXCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6
IFwiRE9NXCIsXCJjb21tYW5kXCI6IFwiZ2V0SW5saW5lU3R5bGVcIixcImFyZ3VtZW50c1wiOiB7
XCJjYWxsSWRcIjogbnVsbCxcIm5vZGVJZFwiOiBudWxsfX0iKTsKICAgIHRoaXMuX3JlZ2lzdGVy
RGVsZWdhdGUoImdldENvbXB1dGVkU3R5bGUiLCAie1wic2VxXCI6IDAsIFwidHlwZVwiOiBcInJl
cXVlc3RcIiwgXCJkb21haW5cIjogXCJET01cIixcImNvbW1hbmRcIjogXCJnZXRDb21wdXRlZFN0
eWxlXCIsXCJhcmd1bWVudHNcIjoge1wiY2FsbElkXCI6IG51bGwsXCJub2RlSWRcIjogbnVsbH19
Iik7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCJnZXRTdHlsZVNoZWV0IiwgIntcInNlcVwi
OiAwLCBcInR5cGVcIjogXCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiRE9NXCIsXCJjb21tYW5k
XCI6IFwiZ2V0U3R5bGVTaGVldFwiLFwiYXJndW1lbnRzXCI6IHtcImNhbGxJZFwiOiBudWxsLFwi
c3R5bGVTaGVldElkXCI6IG51bGx9fSIpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgiZ2V0
UnVsZVJhbmdlcyIsICJ7XCJzZXFcIjogMCwgXCJ0eXBlXCI6IFwicmVxdWVzdFwiLCBcImRvbWFp
blwiOiBcIkRPTVwiLFwiY29tbWFuZFwiOiBcImdldFJ1bGVSYW5nZXNcIixcImFyZ3VtZW50c1wi
OiB7XCJjYWxsSWRcIjogbnVsbCxcInN0eWxlU2hlZXRJZFwiOiBudWxsfX0iKTsKICAgIHRoaXMu
X3JlZ2lzdGVyRGVsZWdhdGUoImFwcGx5U3R5bGVUZXh0IiwgIntcInNlcVwiOiAwLCBcInR5cGVc
IjogXCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiRE9NXCIsXCJjb21tYW5kXCI6IFwiYXBwbHlT
dHlsZVRleHRcIixcImFyZ3VtZW50c1wiOiB7XCJjYWxsSWRcIjogbnVsbCxcInN0eWxlSWRcIjog
bnVsbCxcInN0eWxlVGV4dFwiOiBudWxsLFwicHJvcGVydHlOYW1lXCI6IG51bGx9fSIpOwogICAg
dGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgic2V0U3R5bGVUZXh0IiwgIntcInNlcVwiOiAwLCBcInR5
cGVcIjogXCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiRE9NXCIsXCJjb21tYW5kXCI6IFwic2V0
U3R5bGVUZXh0XCIsXCJhcmd1bWVudHNcIjoge1wiY2FsbElkXCI6IG51bGwsXCJzdHlsZUlkXCI6
IG51bGwsXCJzdHlsZVRleHRcIjogbnVsbH19Iik7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRl
KCJzZXRTdHlsZVByb3BlcnR5IiwgIntcInNlcVwiOiAwLCBcInR5cGVcIjogXCJyZXF1ZXN0XCIs
IFwiZG9tYWluXCI6IFwiRE9NXCIsXCJjb21tYW5kXCI6IFwic2V0U3R5bGVQcm9wZXJ0eVwiLFwi
YXJndW1lbnRzXCI6IHtcImNhbGxJZFwiOiBudWxsLFwic3R5bGVJZFwiOiBudWxsLFwibmFtZVwi
OiBudWxsLFwidmFsdWVcIjogbnVsbH19Iik7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCJ0
b2dnbGVTdHlsZUVuYWJsZWQiLCAie1wic2VxXCI6IDAsIFwidHlwZVwiOiBcInJlcXVlc3RcIiwg
XCJkb21haW5cIjogXCJET01cIixcImNvbW1hbmRcIjogXCJ0b2dnbGVTdHlsZUVuYWJsZWRcIixc
ImFyZ3VtZW50c1wiOiB7XCJjYWxsSWRcIjogbnVsbCxcInN0eWxlSWRcIjogbnVsbCxcInByb3Bl
cnR5TmFtZVwiOiBudWxsLFwiZGlzYWJsZWRcIjogbnVsbH19Iik7CiAgICB0aGlzLl9yZWdpc3Rl
ckRlbGVnYXRlKCJzZXRSdWxlU2VsZWN0b3IiLCAie1wic2VxXCI6IDAsIFwidHlwZVwiOiBcInJl
cXVlc3RcIiwgXCJkb21haW5cIjogXCJET01cIixcImNvbW1hbmRcIjogXCJzZXRSdWxlU2VsZWN0
b3JcIixcImFyZ3VtZW50c1wiOiB7XCJjYWxsSWRcIjogbnVsbCxcInJ1bGVJZFwiOiBudWxsLFwi
c2VsZWN0b3JcIjogbnVsbCxcInNlbGVjdGVkTm9kZUlkXCI6IG51bGx9fSIpOwogICAgdGhpcy5f
cmVnaXN0ZXJEZWxlZ2F0ZSgiYWRkUnVsZSIsICJ7XCJzZXFcIjogMCwgXCJ0eXBlXCI6IFwicmVx
dWVzdFwiLCBcImRvbWFpblwiOiBcIkRPTVwiLFwiY29tbWFuZFwiOiBcImFkZFJ1bGVcIixcImFy
Z3VtZW50c1wiOiB7XCJjYWxsSWRcIjogbnVsbCxcInNlbGVjdG9yXCI6IG51bGwsXCJzZWxlY3Rl
ZE5vZGVJZFwiOiBudWxsfX0iKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoImdldENvb2tp
ZXMiLCAie1wic2VxXCI6IDAsIFwidHlwZVwiOiBcInJlcXVlc3RcIiwgXCJkb21haW5cIjogXCJD
b250cm9sbGVyXCIsXCJjb21tYW5kXCI6IFwiZ2V0Q29va2llc1wiLFwiYXJndW1lbnRzXCI6IHtc
ImNhbGxJZFwiOiBudWxsfX0iKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoImRlbGV0ZUNv
b2tpZSIsICJ7XCJzZXFcIjogMCwgXCJ0eXBlXCI6IFwicmVxdWVzdFwiLCBcImRvbWFpblwiOiBc
IkNvbnRyb2xsZXJcIixcImNvbW1hbmRcIjogXCJkZWxldGVDb29raWVcIixcImFyZ3VtZW50c1wi
OiB7XCJjb29raWVOYW1lXCI6IG51bGwsXCJkb21haW5cIjogbnVsbH19Iik7CiAgICB0aGlzLl9y
ZWdpc3RlckRlbGVnYXRlKCJnZXRBcHBsaWNhdGlvbkNhY2hlcyIsICJ7XCJzZXFcIjogMCwgXCJ0
eXBlXCI6IFwicmVxdWVzdFwiLCBcImRvbWFpblwiOiBcIkFwcGxpY2F0aW9uQ2FjaGVcIixcImNv
bW1hbmRcIjogXCJnZXRBcHBsaWNhdGlvbkNhY2hlc1wiLFwiYXJndW1lbnRzXCI6IHtcImNhbGxJ
ZFwiOiBudWxsfX0iKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoInJlbGVhc2VXcmFwcGVy
T2JqZWN0R3JvdXAiLCAie1wic2VxXCI6IDAsIFwidHlwZVwiOiBcInJlcXVlc3RcIiwgXCJkb21h
aW5cIjogXCJCYWNrZW5kXCIsXCJjb21tYW5kXCI6IFwicmVsZWFzZVdyYXBwZXJPYmplY3RHcm91
cFwiLFwiYXJndW1lbnRzXCI6IHtcImluamVjdGVkU2NyaXB0SWRcIjogbnVsbCxcIm9iamVjdEdy
b3VwXCI6IG51bGx9fSIpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgiZGlkRXZhbHVhdGVG
b3JUZXN0SW5Gcm9udGVuZCIsICJ7XCJzZXFcIjogMCwgXCJ0eXBlXCI6IFwicmVxdWVzdFwiLCBc
ImRvbWFpblwiOiBcIkNvbnRyb2xsZXJcIixcImNvbW1hbmRcIjogXCJkaWRFdmFsdWF0ZUZvclRl
c3RJbkZyb250ZW5kXCIsXCJhcmd1bWVudHNcIjoge1widGVzdENhbGxJZFwiOiBudWxsLFwianNv
blJlc3VsdFwiOiBudWxsfX0iKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoImdldERhdGFi
YXNlVGFibGVOYW1lcyIsICJ7XCJzZXFcIjogMCwgXCJ0eXBlXCI6IFwicmVxdWVzdFwiLCBcImRv
bWFpblwiOiBcIkJhY2tlbmRcIixcImNvbW1hbmRcIjogXCJnZXREYXRhYmFzZVRhYmxlTmFtZXNc
IixcImFyZ3VtZW50c1wiOiB7XCJjYWxsSWRcIjogbnVsbCxcImRhdGFiYXNlSWRcIjogbnVsbH19
Iik7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCJleGVjdXRlU1FMIiwgIntcInNlcVwiOiAw
LCBcInR5cGVcIjogXCJyZXF1ZXN0XCIsIFwiZG9tYWluXCI6IFwiQmFja2VuZFwiLFwiY29tbWFu
ZFwiOiBcImV4ZWN1dGVTUUxcIixcImFyZ3VtZW50c1wiOiB7XCJjYWxsSWRcIjogbnVsbCxcImRh
dGFiYXNlSWRcIjogbnVsbCxcInF1ZXJ5XCI6IG51bGx9fSIpOwogICAgdGhpcy5fcmVnaXN0ZXJE
ZWxlZ2F0ZSgiZ2V0RE9NU3RvcmFnZUVudHJpZXMiLCAie1wic2VxXCI6IDAsIFwidHlwZVwiOiBc
InJlcXVlc3RcIiwgXCJkb21haW5cIjogXCJDb250cm9sbGVyXCIsXCJjb21tYW5kXCI6IFwiZ2V0
RE9NU3RvcmFnZUVudHJpZXNcIixcImFyZ3VtZW50c1wiOiB7XCJjYWxsSWRcIjogbnVsbCxcInN0
b3JhZ2VJZFwiOiBudWxsfX0iKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoInNldERPTVN0
b3JhZ2VJdGVtIiwgIntcInNlcVwiOiAwLCBcInR5cGVcIjogXCJyZXF1ZXN0XCIsIFwiZG9tYWlu
XCI6IFwiQ29udHJvbGxlclwiLFwiY29tbWFuZFwiOiBcInNldERPTVN0b3JhZ2VJdGVtXCIsXCJh
cmd1bWVudHNcIjoge1wiY2FsbElkXCI6IG51bGwsXCJzdG9yYWdlSWRcIjogbnVsbCxcImtleVwi
OiBudWxsLFwidmFsdWVcIjogbnVsbH19Iik7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCJy
ZW1vdmVET01TdG9yYWdlSXRlbSIsICJ7XCJzZXFcIjogMCwgXCJ0eXBlXCI6IFwicmVxdWVzdFwi
LCBcImRvbWFpblwiOiBcIkNvbnRyb2xsZXJcIixcImNvbW1hbmRcIjogXCJyZW1vdmVET01TdG9y
YWdlSXRlbVwiLFwiYXJndW1lbnRzXCI6IHtcImNhbGxJZFwiOiBudWxsLFwic3RvcmFnZUlkXCI6
IG51bGwsXCJrZXlcIjogbnVsbH19Iik7Cn0KCldlYkluc3BlY3Rvci5JbnNwZWN0b3JCYWNrZW5k
U3R1Yi5wcm90b3R5cGUgPSB7CiAgICBfcmVnaXN0ZXJEZWxlZ2F0ZTogZnVuY3Rpb24oY29tbWFu
ZCwgY29tbWFuZEluZm8pCiAgICB7CiAgICAgICAgdGhpc1tjb21tYW5kXSA9IHRoaXMuc2VuZE1l
c3NhZ2VUb0JhY2tlbmQuYmluZCh0aGlzLCBjb21tYW5kSW5mbyk7CiAgICB9LAoKICAgIHNlbmRN
ZXNzYWdlVG9CYWNrZW5kOiBmdW5jdGlvbigpCiAgICB7CiAgICAgICAgdmFyIGFyZ3MgPSBBcnJh
eS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwogICAgICAgIHZhciByZXF1ZXN0ID0g
SlNPTi5wYXJzZShhcmdzLnNoaWZ0KCkpOwogICAgICAgIGZvciAodmFyIGtleSBpbiByZXF1ZXN0
LmFyZ3VtZW50cykgewogICAgICAgICAgICBpZiAoa2V5ID09PSAiY2FsbElkIikKICAgICAgICAg
ICAgICAgIHJlcXVlc3Quc2VxID0gYXJncy5zaGlmdCgpOwogICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICByZXF1ZXN0LmFyZ3VtZW50c1trZXldID0gYXJncy5zaGlmdCgpOwogICAgICAg
IH0KICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gImZ1
bmN0aW9uIikKICAgICAgICAgICAgcmVxdWVzdC5zZXEgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2su
d3JhcChhcmdzWzBdKTsKCiAgICAgICAgdmFyIG1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeShyZXF1
ZXN0KTsKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3Quc2VuZE1lc3NhZ2VUb0JhY2tlbmQo
bWVzc2FnZSk7CiAgICB9Cn0KCkluc3BlY3RvckJhY2tlbmQgPSBuZXcgV2ViSW5zcGVjdG9yLklu
c3BlY3RvckJhY2tlbmRTdHViKCk7
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>64980</attachid>
            <date>2010-08-20 13:21:31 -0700</date>
            <delta_ts>2010-08-23 02:49:42 -0700</delta_ts>
            <desc>sample: RemoteInspectorFrontend.cpp</desc>
            <filename>RemoteInspectorFrontend.cpp</filename>
            <type>text/plain</type>
            <size>35664</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">Ly8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgoK
I2luY2x1ZGUgImNvbmZpZy5oIgojaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQuaCIK
CiNpZiBFTkFCTEUoSU5TUEVDVE9SKQoKI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgojaW5j
bHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgoKbmFt
ZXNwYWNlIFdlYkNvcmUgewoKCgp2b2lkIFJlbW90ZUluc3BlY3RvckZyb250ZW5kOjphZGRDb25z
b2xlTWVzc2FnZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZU9iaikKewogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYWRkQ29uc29sZU1lc3NhZ2VNZXNzYWdlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGFkZENvbnNvbGVNZXNzYWdlTWVzc2FnZS0+c2V0U3Ry
aW5nKCJ0eXBlIiwgImV2ZW50Iik7CiAgICBhZGRDb25zb2xlTWVzc2FnZU1lc3NhZ2UtPnNldFN0
cmluZygiZXZlbnQiLCAiYWRkQ29uc29sZU1lc3NhZ2UiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBheWxvYWREYXRhT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IHBheWxvYWREYXRhT2JqZWN0LT5zZXRPYmplY3QoIm1lc3NhZ2VPYmoiLCBtZXNzYWdlT2JqKTsK
ICAgIGFkZENvbnNvbGVNZXNzYWdlTWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwgcGF5bG9hZERh
dGFPYmplY3QpOwogICAgbV9pbnNwZWN0b3JDbGllbnQtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChh
ZGRDb25zb2xlTWVzc2FnZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBSZW1vdGVJ
bnNwZWN0b3JGcm9udGVuZDo6YWRkUmVjb3JkVG9UaW1lbGluZShQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVjb3JkKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhZGRSZWNvcmRU
b1RpbWVsaW5lTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBhZGRSZWNv
cmRUb1RpbWVsaW5lTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgImV2ZW50Iik7CiAgICBhZGRS
ZWNvcmRUb1RpbWVsaW5lTWVzc2FnZS0+c2V0U3RyaW5nKCJldmVudCIsICJhZGRSZWNvcmRUb1Rp
bWVsaW5lIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXlsb2FkRGF0YU9iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXlsb2FkRGF0YU9iamVjdC0+c2V0T2Jq
ZWN0KCJyZWNvcmQiLCByZWNvcmQpOwogICAgYWRkUmVjb3JkVG9UaW1lbGluZU1lc3NhZ2UtPnNl
dE9iamVjdCgiZGF0YSIsIHBheWxvYWREYXRhT2JqZWN0KTsKICAgIG1faW5zcGVjdG9yQ2xpZW50
LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYWRkUmVjb3JkVG9UaW1lbGluZU1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKfQoKdm9pZCBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZDo6YWRkTm9kZXNUb1Nl
YXJjaFJlc3VsdChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBub2RlSWRzKQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBhZGROb2Rlc1RvU2VhcmNoUmVzdWx0TWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBhZGROb2Rlc1RvU2VhcmNoUmVzdWx0TWVzc2FnZS0+
c2V0U3RyaW5nKCJ0eXBlIiwgImV2ZW50Iik7CiAgICBhZGROb2Rlc1RvU2VhcmNoUmVzdWx0TWVz
c2FnZS0+c2V0U3RyaW5nKCJldmVudCIsICJhZGROb2Rlc1RvU2VhcmNoUmVzdWx0Iik7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXlsb2FkRGF0YU9iamVjdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBwYXlsb2FkRGF0YU9iamVjdC0+c2V0QXJyYXkoIm5vZGVJZHMiLCBu
b2RlSWRzKTsKICAgIGFkZE5vZGVzVG9TZWFyY2hSZXN1bHRNZXNzYWdlLT5zZXRPYmplY3QoImRh
dGEiLCBwYXlsb2FkRGF0YU9iamVjdCk7CiAgICBtX2luc3BlY3RvckNsaWVudC0+c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKGFkZE5vZGVzVG9TZWFyY2hSZXN1bHRNZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7Cn0KCnZvaWQgUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQ6OmF0dHJpYnV0ZXNVcGRhdGVkKGxv
bmcgaWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGF0dHJpYnV0ZXMpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGF0dHJpYnV0ZXNVcGRhdGVkTWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBhdHRyaWJ1dGVzVXBkYXRlZE1lc3NhZ2UtPnNldFN0cmluZygi
dHlwZSIsICJldmVudCIpOwogICAgYXR0cmlidXRlc1VwZGF0ZWRNZXNzYWdlLT5zZXRTdHJpbmco
ImV2ZW50IiwgImF0dHJpYnV0ZXNVcGRhdGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXlsb2FkRGF0YU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXls
b2FkRGF0YU9iamVjdC0+c2V0TnVtYmVyKCJpZCIsIGlkKTsKICAgIHBheWxvYWREYXRhT2JqZWN0
LT5zZXRBcnJheSgiYXR0cmlidXRlcyIsIGF0dHJpYnV0ZXMpOwogICAgYXR0cmlidXRlc1VwZGF0
ZWRNZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCBwYXlsb2FkRGF0YU9iamVjdCk7CiAgICBtX2lu
c3BlY3RvckNsaWVudC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGF0dHJpYnV0ZXNVcGRhdGVkTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIFJlbW90ZUluc3BlY3RvckZyb250ZW5kOjpi
cmluZ1RvRnJvbnQoKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmluZ1RvRnJvbnRN
ZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGJyaW5nVG9Gcm9udE1lc3Nh
Z2UtPnNldFN0cmluZygidHlwZSIsICJldmVudCIpOwogICAgYnJpbmdUb0Zyb250TWVzc2FnZS0+
c2V0U3RyaW5nKCJldmVudCIsICJicmluZ1RvRnJvbnQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBheWxvYWREYXRhT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGJyaW5nVG9Gcm9udE1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHBheWxvYWREYXRhT2JqZWN0
KTsKICAgIG1faW5zcGVjdG9yQ2xpZW50LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYnJpbmdUb0Zy
b250TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIFJlbW90ZUluc3BlY3RvckZyb250
ZW5kOjpjaGlsZE5vZGVDb3VudFVwZGF0ZWQobG9uZyBpZCwgaW50IG5ld1ZhbHVlKQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjaGlsZE5vZGVDb3VudFVwZGF0ZWRNZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGNoaWxkTm9kZUNvdW50VXBkYXRlZE1lc3NhZ2Ut
PnNldFN0cmluZygidHlwZSIsICJldmVudCIpOwogICAgY2hpbGROb2RlQ291bnRVcGRhdGVkTWVz
c2FnZS0+c2V0U3RyaW5nKCJldmVudCIsICJjaGlsZE5vZGVDb3VudFVwZGF0ZWQiKTsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWREYXRhT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIHBheWxvYWREYXRhT2JqZWN0LT5zZXROdW1iZXIoImlkIiwgaWQpOwog
ICAgcGF5bG9hZERhdGFPYmplY3QtPnNldE51bWJlcigibmV3VmFsdWUiLCBuZXdWYWx1ZSk7CiAg
ICBjaGlsZE5vZGVDb3VudFVwZGF0ZWRNZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCBwYXlsb2Fk
RGF0YU9iamVjdCk7CiAgICBtX2luc3BlY3RvckNsaWVudC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGNoaWxkTm9kZUNvdW50VXBkYXRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBS
ZW1vdGVJbnNwZWN0b3JGcm9udGVuZDo6Y2hpbGROb2RlSW5zZXJ0ZWQobG9uZyBwYXJlbnRJZCwg
bG9uZyBwcmV2SWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBub2RlKQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBjaGlsZE5vZGVJbnNlcnRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgY2hpbGROb2RlSW5zZXJ0ZWRNZXNzYWdlLT5zZXRTdHJpbmco
InR5cGUiLCAiZXZlbnQiKTsKICAgIGNoaWxkTm9kZUluc2VydGVkTWVzc2FnZS0+c2V0U3RyaW5n
KCJldmVudCIsICJjaGlsZE5vZGVJbnNlcnRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGF5bG9hZERhdGFPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGF5
bG9hZERhdGFPYmplY3QtPnNldE51bWJlcigicGFyZW50SWQiLCBwYXJlbnRJZCk7CiAgICBwYXls
b2FkRGF0YU9iamVjdC0+c2V0TnVtYmVyKCJwcmV2SWQiLCBwcmV2SWQpOwogICAgcGF5bG9hZERh
dGFPYmplY3QtPnNldE9iamVjdCgibm9kZSIsIG5vZGUpOwogICAgY2hpbGROb2RlSW5zZXJ0ZWRN
ZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCBwYXlsb2FkRGF0YU9iamVjdCk7CiAgICBtX2luc3Bl
Y3RvckNsaWVudC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNoaWxkTm9kZUluc2VydGVkTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIFJlbW90ZUluc3BlY3RvckZyb250ZW5kOjpjaGls
ZE5vZGVSZW1vdmVkKGxvbmcgcGFyZW50SWQsIGxvbmcgaWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGNoaWxkTm9kZVJlbW92ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIGNoaWxkTm9kZVJlbW92ZWRNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAiZXZl
bnQiKTsKICAgIGNoaWxkTm9kZVJlbW92ZWRNZXNzYWdlLT5zZXRTdHJpbmcoImV2ZW50IiwgImNo
aWxkTm9kZVJlbW92ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWREYXRh
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBheWxvYWREYXRhT2JqZWN0
LT5zZXROdW1iZXIoInBhcmVudElkIiwgcGFyZW50SWQpOwogICAgcGF5bG9hZERhdGFPYmplY3Qt
PnNldE51bWJlcigiaWQiLCBpZCk7CiAgICBjaGlsZE5vZGVSZW1vdmVkTWVzc2FnZS0+c2V0T2Jq
ZWN0KCJkYXRhIiwgcGF5bG9hZERhdGFPYmplY3QpOwogICAgbV9pbnNwZWN0b3JDbGllbnQtPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChjaGlsZE5vZGVSZW1vdmVkTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwp9Cgp2b2lkIFJlbW90ZUluc3BlY3RvckZyb250ZW5kOjpjbG9zZSgpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGNsb3NlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBjbG9zZU1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJldmVudCIpOwogICAgY2xv
c2VNZXNzYWdlLT5zZXRTdHJpbmcoImV2ZW50IiwgImNsb3NlIik7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXlsb2FkRGF0YU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBjbG9zZU1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHBheWxvYWREYXRhT2JqZWN0KTsK
ICAgIG1faW5zcGVjdG9yQ2xpZW50LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoY2xvc2VNZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZENv
bW1pdExvYWQoKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkaWRDb21taXRMb2FkTWVz
c2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBkaWRDb21taXRMb2FkTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJ0eXBlIiwgImV2ZW50Iik7CiAgICBkaWRDb21taXRMb2FkTWVzc2FnZS0+
c2V0U3RyaW5nKCJldmVudCIsICJkaWRDb21taXRMb2FkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXlsb2FkRGF0YU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBkaWRDb21taXRMb2FkTWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwgcGF5bG9hZERhdGFPYmpl
Y3QpOwogICAgbV9pbnNwZWN0b3JDbGllbnQtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChkaWRDb21t
aXRMb2FkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIFJlbW90ZUluc3BlY3RvckZy
b250ZW5kOjpldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcgdGVzdENhbGxJZCwgY29uc3Qg
U3RyaW5nJiBzY3JpcHQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2YWx1YXRlRm9y
VGVzdEluRnJvbnRlbmRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGV2
YWx1YXRlRm9yVGVzdEluRnJvbnRlbmRNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQi
KTsKICAgIGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmRNZXNzYWdlLT5zZXRTdHJpbmcoImV2ZW50
IiwgImV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBheWxvYWREYXRhT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBh
eWxvYWREYXRhT2JqZWN0LT5zZXROdW1iZXIoInRlc3RDYWxsSWQiLCB0ZXN0Q2FsbElkKTsKICAg
IHBheWxvYWREYXRhT2JqZWN0LT5zZXRTdHJpbmcoInNjcmlwdCIsIHNjcmlwdCk7CiAgICBldmFs
dWF0ZUZvclRlc3RJbkZyb250ZW5kTWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwgcGF5bG9hZERh
dGFPYmplY3QpOwogICAgbV9pbnNwZWN0b3JDbGllbnQtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChl
dmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lk
IFJlbW90ZUluc3BlY3RvckZyb250ZW5kOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkKewogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5zcGVjdGVkUGFnZURlc3Ryb3llZE1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaW5zcGVjdGVkUGFnZURlc3Ryb3llZE1lc3Nh
Z2UtPnNldFN0cmluZygidHlwZSIsICJldmVudCIpOwogICAgaW5zcGVjdGVkUGFnZURlc3Ryb3ll
ZE1lc3NhZ2UtPnNldFN0cmluZygiZXZlbnQiLCAiaW5zcGVjdGVkUGFnZURlc3Ryb3llZCIpOwog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5bG9hZERhdGFPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgaW5zcGVjdGVkUGFnZURlc3Ryb3llZE1lc3NhZ2UtPnNldE9i
amVjdCgiZGF0YSIsIHBheWxvYWREYXRhT2JqZWN0KTsKICAgIG1faW5zcGVjdG9yQ2xpZW50LT5z
ZW5kTWVzc2FnZVRvRnJvbnRlbmQoaW5zcGVjdGVkUGFnZURlc3Ryb3llZE1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKfQoKdm9pZCBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZDo6aW5zcGVjdGVkVVJM
Q2hhbmdlZChjb25zdCBTdHJpbmcmIHVybCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
aW5zcGVjdGVkVVJMQ2hhbmdlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgaW5zcGVjdGVkVVJMQ2hhbmdlZE1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJldmVudCIp
OwogICAgaW5zcGVjdGVkVVJMQ2hhbmdlZE1lc3NhZ2UtPnNldFN0cmluZygiZXZlbnQiLCAiaW5z
cGVjdGVkVVJMQ2hhbmdlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5bG9hZERh
dGFPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGF5bG9hZERhdGFPYmpl
Y3QtPnNldFN0cmluZygidXJsIiwgdXJsKTsKICAgIGluc3BlY3RlZFVSTENoYW5nZWRNZXNzYWdl
LT5zZXRPYmplY3QoImRhdGEiLCBwYXlsb2FkRGF0YU9iamVjdCk7CiAgICBtX2luc3BlY3RvckNs
aWVudC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGluc3BlY3RlZFVSTENoYW5nZWRNZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQ6Om1vbml0b3Jp
bmdYSFJXYXNFbmFibGVkKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbW9uaXRvcmlu
Z1hIUldhc0VuYWJsZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIG1v
bml0b3JpbmdYSFJXYXNFbmFibGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgImV2ZW50Iik7
CiAgICBtb25pdG9yaW5nWEhSV2FzRW5hYmxlZE1lc3NhZ2UtPnNldFN0cmluZygiZXZlbnQiLCAi
bW9uaXRvcmluZ1hIUldhc0VuYWJsZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
eWxvYWREYXRhT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIG1vbml0b3Jp
bmdYSFJXYXNFbmFibGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwgcGF5bG9hZERhdGFPYmpl
Y3QpOwogICAgbV9pbnNwZWN0b3JDbGllbnQtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChtb25pdG9y
aW5nWEhSV2FzRW5hYmxlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBSZW1vdGVJ
bnNwZWN0b3JGcm9udGVuZDo6bW9uaXRvcmluZ1hIUldhc0Rpc2FibGVkKCkKewogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbW9uaXRvcmluZ1hIUldhc0Rpc2FibGVkTWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBtb25pdG9yaW5nWEhSV2FzRGlzYWJsZWRNZXNzYWdl
LT5zZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQiKTsKICAgIG1vbml0b3JpbmdYSFJXYXNEaXNhYmxl
ZE1lc3NhZ2UtPnNldFN0cmluZygiZXZlbnQiLCAibW9uaXRvcmluZ1hIUldhc0Rpc2FibGVkIik7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXlsb2FkRGF0YU9iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBtb25pdG9yaW5nWEhSV2FzRGlzYWJsZWRNZXNzYWdlLT5z
ZXRPYmplY3QoImRhdGEiLCBwYXlsb2FkRGF0YU9iamVjdCk7CiAgICBtX2luc3BlY3RvckNsaWVu
dC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1vbml0b3JpbmdYSFJXYXNEaXNhYmxlZE1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZDo6cG9wdWxh
dGVBcHBsaWNhdGlvblNldHRpbmdzKGNvbnN0IFN0cmluZyYgc2V0dGluZ3MpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBvcHVsYXRlQXBwbGljYXRpb25TZXR0aW5nc01lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcG9wdWxhdGVBcHBsaWNhdGlvblNldHRpbmdz
TWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgImV2ZW50Iik7CiAgICBwb3B1bGF0ZUFwcGxpY2F0
aW9uU2V0dGluZ3NNZXNzYWdlLT5zZXRTdHJpbmcoImV2ZW50IiwgInBvcHVsYXRlQXBwbGljYXRp
b25TZXR0aW5ncyIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5bG9hZERhdGFPYmpl
Y3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGF5bG9hZERhdGFPYmplY3QtPnNl
dFN0cmluZygic2V0dGluZ3MiLCBzZXR0aW5ncyk7CiAgICBwb3B1bGF0ZUFwcGxpY2F0aW9uU2V0
dGluZ3NNZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCBwYXlsb2FkRGF0YU9iamVjdCk7CiAgICBt
X2luc3BlY3RvckNsaWVudC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHBvcHVsYXRlQXBwbGljYXRp
b25TZXR0aW5nc01lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBSZW1vdGVJbnNwZWN0
b3JGcm9udGVuZDo6cG9wdWxhdGVJbnRlcmZhY2UoKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwb3B1bGF0ZUludGVyZmFjZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgcG9wdWxhdGVJbnRlcmZhY2VNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQi
KTsKICAgIHBvcHVsYXRlSW50ZXJmYWNlTWVzc2FnZS0+c2V0U3RyaW5nKCJldmVudCIsICJwb3B1
bGF0ZUludGVyZmFjZSIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5bG9hZERhdGFP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcG9wdWxhdGVJbnRlcmZhY2VN
ZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCBwYXlsb2FkRGF0YU9iamVjdCk7CiAgICBtX2luc3Bl
Y3RvckNsaWVudC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHBvcHVsYXRlSW50ZXJmYWNlTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIFJlbW90ZUluc3BlY3RvckZyb250ZW5kOjpwb3B1
bGF0ZVNlc3Npb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwb3B1bGF0ZVNlc3Npb25TZXR0aW5nc01lc3NhZ2UgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcG9wdWxhdGVTZXNzaW9uU2V0dGluZ3NNZXNzYWdlLT5z
ZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQiKTsKICAgIHBvcHVsYXRlU2Vzc2lvblNldHRpbmdzTWVz
c2FnZS0+c2V0U3RyaW5nKCJldmVudCIsICJwb3B1bGF0ZVNlc3Npb25TZXR0aW5ncyIpOwogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5bG9hZERhdGFPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgcGF5bG9hZERhdGFPYmplY3QtPnNldFN0cmluZygic2V0dGluZ3Mi
LCBzZXR0aW5ncyk7CiAgICBwb3B1bGF0ZVNlc3Npb25TZXR0aW5nc01lc3NhZ2UtPnNldE9iamVj
dCgiZGF0YSIsIHBheWxvYWREYXRhT2JqZWN0KTsKICAgIG1faW5zcGVjdG9yQ2xpZW50LT5zZW5k
TWVzc2FnZVRvRnJvbnRlbmQocG9wdWxhdGVTZXNzaW9uU2V0dGluZ3NNZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7Cn0KCnZvaWQgUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQ6OnJlbW92ZVJlc291cmNl
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVtb3ZlUmVzb3VyY2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJl
bW92ZVJlc291cmNlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgImV2ZW50Iik7CiAgICByZW1v
dmVSZXNvdXJjZU1lc3NhZ2UtPnNldFN0cmluZygiZXZlbnQiLCAicmVtb3ZlUmVzb3VyY2UiKTsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWREYXRhT2JqZWN0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHBheWxvYWREYXRhT2JqZWN0LT5zZXROdW1iZXIoImlkZW50
aWZpZXIiLCBpZGVudGlmaWVyKTsKICAgIHJlbW92ZVJlc291cmNlTWVzc2FnZS0+c2V0T2JqZWN0
KCJkYXRhIiwgcGF5bG9hZERhdGFPYmplY3QpOwogICAgbV9pbnNwZWN0b3JDbGllbnQtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChyZW1vdmVSZXNvdXJjZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
fQoKdm9pZCBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZDo6cmVzZXQoKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXNldE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgcmVzZXRNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQiKTsKICAgIHJlc2V0TWVz
c2FnZS0+c2V0U3RyaW5nKCJldmVudCIsICJyZXNldCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGF5bG9hZERhdGFPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
cmVzZXRNZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCBwYXlsb2FkRGF0YU9iamVjdCk7CiAgICBt
X2luc3BlY3RvckNsaWVudC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc2V0TWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIFJlbW90ZUluc3BlY3RvckZyb250ZW5kOjpyZXNldFByb2Zp
bGVzUGFuZWwoKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNldFByb2ZpbGVzUGFu
ZWxNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlc2V0UHJvZmlsZXNQ
YW5lbE1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJldmVudCIpOwogICAgcmVzZXRQcm9maWxl
c1BhbmVsTWVzc2FnZS0+c2V0U3RyaW5nKCJldmVudCIsICJyZXNldFByb2ZpbGVzUGFuZWwiKTsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWREYXRhT2JqZWN0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlc2V0UHJvZmlsZXNQYW5lbE1lc3NhZ2UtPnNldE9iamVj
dCgiZGF0YSIsIHBheWxvYWREYXRhT2JqZWN0KTsKICAgIG1faW5zcGVjdG9yQ2xpZW50LT5zZW5k
TWVzc2FnZVRvRnJvbnRlbmQocmVzZXRQcm9maWxlc1BhbmVsTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwp9Cgp2b2lkIFJlbW90ZUluc3BlY3RvckZyb250ZW5kOjpyZXNvdXJjZVRyYWNraW5nV2Fz
RW5hYmxlZCgpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc291cmNlVHJhY2tpbmdX
YXNFbmFibGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXNvdXJj
ZVRyYWNraW5nV2FzRW5hYmxlZE1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJldmVudCIpOwog
ICAgcmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWRNZXNzYWdlLT5zZXRTdHJpbmcoImV2ZW50Iiwg
InJlc291cmNlVHJhY2tpbmdXYXNFbmFibGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXlsb2FkRGF0YU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXNv
dXJjZVRyYWNraW5nV2FzRW5hYmxlZE1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHBheWxvYWRE
YXRhT2JqZWN0KTsKICAgIG1faW5zcGVjdG9yQ2xpZW50LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
cmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZv
aWQgUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQ6OnJlc291cmNlVHJhY2tpbmdXYXNEaXNhYmxlZCgp
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc291cmNlVHJhY2tpbmdXYXNEaXNhYmxl
ZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzb3VyY2VUcmFja2lu
Z1dhc0Rpc2FibGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgImV2ZW50Iik7CiAgICByZXNv
dXJjZVRyYWNraW5nV2FzRGlzYWJsZWRNZXNzYWdlLT5zZXRTdHJpbmcoImV2ZW50IiwgInJlc291
cmNlVHJhY2tpbmdXYXNEaXNhYmxlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5
bG9hZERhdGFPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzb3VyY2VU
cmFja2luZ1dhc0Rpc2FibGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwgcGF5bG9hZERhdGFP
YmplY3QpOwogICAgbV9pbnNwZWN0b3JDbGllbnQtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNv
dXJjZVRyYWNraW5nV2FzRGlzYWJsZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQg
UmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQ6OnNlYXJjaGluZ0Zvck5vZGVXYXNFbmFibGVkKCkKewog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2VhcmNoaW5nRm9yTm9kZVdhc0VuYWJsZWRNZXNz
YWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlYXJjaGluZ0Zvck5vZGVXYXNF
bmFibGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgImV2ZW50Iik7CiAgICBzZWFyY2hpbmdG
b3JOb2RlV2FzRW5hYmxlZE1lc3NhZ2UtPnNldFN0cmluZygiZXZlbnQiLCAic2VhcmNoaW5nRm9y
Tm9kZVdhc0VuYWJsZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWREYXRh
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlYXJjaGluZ0Zvck5vZGVX
YXNFbmFibGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwgcGF5bG9hZERhdGFPYmplY3QpOwog
ICAgbV9pbnNwZWN0b3JDbGllbnQtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChzZWFyY2hpbmdGb3JO
b2RlV2FzRW5hYmxlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBSZW1vdGVJbnNw
ZWN0b3JGcm9udGVuZDo6c2VhcmNoaW5nRm9yTm9kZVdhc0Rpc2FibGVkKCkKewogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gc2VhcmNoaW5nRm9yTm9kZVdhc0Rpc2FibGVkTWVzc2FnZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZWFyY2hpbmdGb3JOb2RlV2FzRGlzYWJsZWRN
ZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQiKTsKICAgIHNlYXJjaGluZ0Zvck5vZGVX
YXNEaXNhYmxlZE1lc3NhZ2UtPnNldFN0cmluZygiZXZlbnQiLCAic2VhcmNoaW5nRm9yTm9kZVdh
c0Rpc2FibGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXlsb2FkRGF0YU9iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZWFyY2hpbmdGb3JOb2RlV2FzRGlz
YWJsZWRNZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCBwYXlsb2FkRGF0YU9iamVjdCk7CiAgICBt
X2luc3BlY3RvckNsaWVudC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHNlYXJjaGluZ0Zvck5vZGVX
YXNEaXNhYmxlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBSZW1vdGVJbnNwZWN0
b3JGcm9udGVuZDo6c2V0Q2hpbGROb2Rlcyhsb25nIHBhcmVudElkLCBQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBub2RlcykKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2V0Q2hpbGRO
b2Rlc01lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2V0Q2hpbGROb2Rl
c01lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJldmVudCIpOwogICAgc2V0Q2hpbGROb2Rlc01l
c3NhZ2UtPnNldFN0cmluZygiZXZlbnQiLCAic2V0Q2hpbGROb2RlcyIpOwogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGF5bG9hZERhdGFPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgcGF5bG9hZERhdGFPYmplY3QtPnNldE51bWJlcigicGFyZW50SWQiLCBwYXJlbnRJ
ZCk7CiAgICBwYXlsb2FkRGF0YU9iamVjdC0+c2V0QXJyYXkoIm5vZGVzIiwgbm9kZXMpOwogICAg
c2V0Q2hpbGROb2Rlc01lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHBheWxvYWREYXRhT2JqZWN0
KTsKICAgIG1faW5zcGVjdG9yQ2xpZW50LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoc2V0Q2hpbGRO
b2Rlc01lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBSZW1vdGVJbnNwZWN0b3JGcm9u
dGVuZDo6c2V0RGV0YWNoZWRSb290KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByb290KQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzZXREZXRhY2hlZFJvb3RNZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNldERldGFjaGVkUm9vdE1lc3NhZ2UtPnNldFN0
cmluZygidHlwZSIsICJldmVudCIpOwogICAgc2V0RGV0YWNoZWRSb290TWVzc2FnZS0+c2V0U3Ry
aW5nKCJldmVudCIsICJzZXREZXRhY2hlZFJvb3QiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBheWxvYWREYXRhT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBh
eWxvYWREYXRhT2JqZWN0LT5zZXRPYmplY3QoInJvb3QiLCByb290KTsKICAgIHNldERldGFjaGVk
Um9vdE1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHBheWxvYWREYXRhT2JqZWN0KTsKICAgIG1f
aW5zcGVjdG9yQ2xpZW50LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoc2V0RGV0YWNoZWRSb290TWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIFJlbW90ZUluc3BlY3RvckZyb250ZW5kOjpz
ZXREb2N1bWVudChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiByb290KQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBzZXREb2N1bWVudE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgc2V0RG9jdW1lbnRNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQi
KTsKICAgIHNldERvY3VtZW50TWVzc2FnZS0+c2V0U3RyaW5nKCJldmVudCIsICJzZXREb2N1bWVu
dCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5bG9hZERhdGFPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGF5bG9hZERhdGFPYmplY3QtPnNldFZhbHVlKCJy
b290Iiwgcm9vdCk7CiAgICBzZXREb2N1bWVudE1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHBh
eWxvYWREYXRhT2JqZWN0KTsKICAgIG1faW5zcGVjdG9yQ2xpZW50LT5zZW5kTWVzc2FnZVRvRnJv
bnRlbmQoc2V0RG9jdW1lbnRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgUmVtb3Rl
SW5zcGVjdG9yRnJvbnRlbmQ6OnNob3dQYW5lbChjb25zdCBTdHJpbmcmIHBhbmVsKQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzaG93UGFuZWxNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIHNob3dQYW5lbE1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJldmVu
dCIpOwogICAgc2hvd1BhbmVsTWVzc2FnZS0+c2V0U3RyaW5nKCJldmVudCIsICJzaG93UGFuZWwi
KTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWREYXRhT2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBheWxvYWREYXRhT2JqZWN0LT5zZXRTdHJpbmcoInBh
bmVsIiwgcGFuZWwpOwogICAgc2hvd1BhbmVsTWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwgcGF5
bG9hZERhdGFPYmplY3QpOwogICAgbV9pbnNwZWN0b3JDbGllbnQtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChzaG93UGFuZWxNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgUmVtb3RlSW5z
cGVjdG9yRnJvbnRlbmQ6OnRpbWVsaW5lUHJvZmlsZXJXYXNTdGFydGVkKCkKewogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdGltZWxpbmVQcm9maWxlcldhc1N0YXJ0ZWRNZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHRpbWVsaW5lUHJvZmlsZXJXYXNTdGFydGVkTWVz
c2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgImV2ZW50Iik7CiAgICB0aW1lbGluZVByb2ZpbGVyV2Fz
U3RhcnRlZE1lc3NhZ2UtPnNldFN0cmluZygiZXZlbnQiLCAidGltZWxpbmVQcm9maWxlcldhc1N0
YXJ0ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWREYXRhT2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHRpbWVsaW5lUHJvZmlsZXJXYXNTdGFydGVk
TWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwgcGF5bG9hZERhdGFPYmplY3QpOwogICAgbV9pbnNw
ZWN0b3JDbGllbnQtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCh0aW1lbGluZVByb2ZpbGVyV2FzU3Rh
cnRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBSZW1vdGVJbnNwZWN0b3JGcm9u
dGVuZDo6dGltZWxpbmVQcm9maWxlcldhc1N0b3BwZWQoKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiB0aW1lbGluZVByb2ZpbGVyV2FzU3RvcHBlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgdGltZWxpbmVQcm9maWxlcldhc1N0b3BwZWRNZXNzYWdlLT5zZXRT
dHJpbmcoInR5cGUiLCAiZXZlbnQiKTsKICAgIHRpbWVsaW5lUHJvZmlsZXJXYXNTdG9wcGVkTWVz
c2FnZS0+c2V0U3RyaW5nKCJldmVudCIsICJ0aW1lbGluZVByb2ZpbGVyV2FzU3RvcHBlZCIpOwog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5bG9hZERhdGFPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgdGltZWxpbmVQcm9maWxlcldhc1N0b3BwZWRNZXNzYWdlLT5z
ZXRPYmplY3QoImRhdGEiLCBwYXlsb2FkRGF0YU9iamVjdCk7CiAgICBtX2luc3BlY3RvckNsaWVu
dC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHRpbWVsaW5lUHJvZmlsZXJXYXNTdG9wcGVkTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIFJlbW90ZUluc3BlY3RvckZyb250ZW5kOjp1cGRh
dGVDb25zb2xlTWVzc2FnZUV4cGlyZWRDb3VudCh1bnNpZ25lZCBsb25nIGNvdW50KQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB1cGRhdGVDb25zb2xlTWVzc2FnZUV4cGlyZWRDb3VudE1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgdXBkYXRlQ29uc29sZU1lc3Nh
Z2VFeHBpcmVkQ291bnRNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQiKTsKICAgIHVw
ZGF0ZUNvbnNvbGVNZXNzYWdlRXhwaXJlZENvdW50TWVzc2FnZS0+c2V0U3RyaW5nKCJldmVudCIs
ICJ1cGRhdGVDb25zb2xlTWVzc2FnZUV4cGlyZWRDb3VudCIpOwogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGF5bG9hZERhdGFPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgcGF5bG9hZERhdGFPYmplY3QtPnNldE51bWJlcigiY291bnQiLCBjb3VudCk7CiAgICB1cGRh
dGVDb25zb2xlTWVzc2FnZUV4cGlyZWRDb3VudE1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHBh
eWxvYWREYXRhT2JqZWN0KTsKICAgIG1faW5zcGVjdG9yQ2xpZW50LT5zZW5kTWVzc2FnZVRvRnJv
bnRlbmQodXBkYXRlQ29uc29sZU1lc3NhZ2VFeHBpcmVkQ291bnRNZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7Cn0KCnZvaWQgUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQ6OnVwZGF0ZUNvbnNvbGVNZXNz
YWdlUmVwZWF0Q291bnQodW5zaWduZWQgbG9uZyBjb3VudCkKewogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gdXBkYXRlQ29uc29sZU1lc3NhZ2VSZXBlYXRDb3VudE1lc3NhZ2UgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgdXBkYXRlQ29uc29sZU1lc3NhZ2VSZXBlYXRDb3VudE1l
c3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJldmVudCIpOwogICAgdXBkYXRlQ29uc29sZU1lc3Nh
Z2VSZXBlYXRDb3VudE1lc3NhZ2UtPnNldFN0cmluZygiZXZlbnQiLCAidXBkYXRlQ29uc29sZU1l
c3NhZ2VSZXBlYXRDb3VudCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5bG9hZERh
dGFPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGF5bG9hZERhdGFPYmpl
Y3QtPnNldE51bWJlcigiY291bnQiLCBjb3VudCk7CiAgICB1cGRhdGVDb25zb2xlTWVzc2FnZVJl
cGVhdENvdW50TWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwgcGF5bG9hZERhdGFPYmplY3QpOwog
ICAgbV9pbnNwZWN0b3JDbGllbnQtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCh1cGRhdGVDb25zb2xl
TWVzc2FnZVJlcGVhdENvdW50TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIFJlbW90
ZUluc3BlY3RvckZyb250ZW5kOjp1cGRhdGVGb2N1c2VkTm9kZShsb25nIG5vZGVJZCkKewogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdXBkYXRlRm9jdXNlZE5vZGVNZXNzYWdlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHVwZGF0ZUZvY3VzZWROb2RlTWVzc2FnZS0+c2V0U3Ry
aW5nKCJ0eXBlIiwgImV2ZW50Iik7CiAgICB1cGRhdGVGb2N1c2VkTm9kZU1lc3NhZ2UtPnNldFN0
cmluZygiZXZlbnQiLCAidXBkYXRlRm9jdXNlZE5vZGUiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBheWxvYWREYXRhT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IHBheWxvYWREYXRhT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG5vZGVJZCk7CiAgICB1cGRh
dGVGb2N1c2VkTm9kZU1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHBheWxvYWREYXRhT2JqZWN0
KTsKICAgIG1faW5zcGVjdG9yQ2xpZW50LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQodXBkYXRlRm9j
dXNlZE5vZGVNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgUmVtb3RlSW5zcGVjdG9y
RnJvbnRlbmQ6OnVwZGF0ZVJlc291cmNlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc291
cmNlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB1cGRhdGVSZXNvdXJjZU1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgdXBkYXRlUmVzb3VyY2VNZXNzYWdlLT5z
ZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQiKTsKICAgIHVwZGF0ZVJlc291cmNlTWVzc2FnZS0+c2V0
U3RyaW5nKCJldmVudCIsICJ1cGRhdGVSZXNvdXJjZSIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGF5bG9hZERhdGFPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
cGF5bG9hZERhdGFPYmplY3QtPnNldFZhbHVlKCJyZXNvdXJjZSIsIHJlc291cmNlKTsKICAgIHVw
ZGF0ZVJlc291cmNlTWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwgcGF5bG9hZERhdGFPYmplY3Qp
OwogICAgbV9pbnNwZWN0b3JDbGllbnQtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCh1cGRhdGVSZXNv
dXJjZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBSZW1vdGVJbnNwZWN0b3JGcm9u
dGVuZDo6Y29uc29sZU1lc3NhZ2VzQ2xlYXJlZCgpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGNvbnNvbGVNZXNzYWdlc0NsZWFyZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIGNvbnNvbGVNZXNzYWdlc0NsZWFyZWRNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUi
LCAiZXZlbnQiKTsKICAgIGNvbnNvbGVNZXNzYWdlc0NsZWFyZWRNZXNzYWdlLT5zZXRTdHJpbmco
ImV2ZW50IiwgImNvbnNvbGVNZXNzYWdlc0NsZWFyZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBheWxvYWREYXRhT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGNvbnNvbGVNZXNzYWdlc0NsZWFyZWRNZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCBwYXlsb2Fk
RGF0YU9iamVjdCk7CiAgICBtX2luc3BlY3RvckNsaWVudC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGNvbnNvbGVNZXNzYWdlc0NsZWFyZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQg
UmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZFByb2ZpbGVIZWFkZXIoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGhlYWRlcikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYWRkUHJv
ZmlsZUhlYWRlck1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYWRkUHJv
ZmlsZUhlYWRlck1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJldmVudCIpOwogICAgYWRkUHJv
ZmlsZUhlYWRlck1lc3NhZ2UtPnNldFN0cmluZygiZXZlbnQiLCAiYWRkUHJvZmlsZUhlYWRlciIp
OwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5bG9hZERhdGFPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGF5bG9hZERhdGFPYmplY3QtPnNldE9iamVjdCgiaGVh
ZGVyIiwgaGVhZGVyKTsKICAgIGFkZFByb2ZpbGVIZWFkZXJNZXNzYWdlLT5zZXRPYmplY3QoImRh
dGEiLCBwYXlsb2FkRGF0YU9iamVjdCk7CiAgICBtX2luc3BlY3RvckNsaWVudC0+c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKGFkZFByb2ZpbGVIZWFkZXJNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0K
CnZvaWQgUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQ6OmF0dGFjaERlYnVnZ2VyV2hlblNob3duKCkK
ewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXR0YWNoRGVidWdnZXJXaGVuU2hvd25NZXNz
YWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGF0dGFjaERlYnVnZ2VyV2hlblNo
b3duTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgImV2ZW50Iik7CiAgICBhdHRhY2hEZWJ1Z2dl
cldoZW5TaG93bk1lc3NhZ2UtPnNldFN0cmluZygiZXZlbnQiLCAiYXR0YWNoRGVidWdnZXJXaGVu
U2hvd24iKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWREYXRhT2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGF0dGFjaERlYnVnZ2VyV2hlblNob3duTWVz
c2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwgcGF5bG9hZERhdGFPYmplY3QpOwogICAgbV9pbnNwZWN0
b3JDbGllbnQtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhdHRhY2hEZWJ1Z2dlcldoZW5TaG93bk1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZDo6
ZGVidWdnZXJXYXNFbmFibGVkKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGVidWdn
ZXJXYXNFbmFibGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBkZWJ1
Z2dlcldhc0VuYWJsZWRNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQiKTsKICAgIGRl
YnVnZ2VyV2FzRW5hYmxlZE1lc3NhZ2UtPnNldFN0cmluZygiZXZlbnQiLCAiZGVidWdnZXJXYXNF
bmFibGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXlsb2FkRGF0YU9iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBkZWJ1Z2dlcldhc0VuYWJsZWRNZXNzYWdl
LT5zZXRPYmplY3QoImRhdGEiLCBwYXlsb2FkRGF0YU9iamVjdCk7CiAgICBtX2luc3BlY3RvckNs
aWVudC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGRlYnVnZ2VyV2FzRW5hYmxlZE1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKfQoKdm9pZCBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZDo6ZGVidWdnZXJX
YXNEaXNhYmxlZCgpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRlYnVnZ2VyV2FzRGlz
YWJsZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGRlYnVnZ2VyV2Fz
RGlzYWJsZWRNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQiKTsKICAgIGRlYnVnZ2Vy
V2FzRGlzYWJsZWRNZXNzYWdlLT5zZXRTdHJpbmcoImV2ZW50IiwgImRlYnVnZ2VyV2FzRGlzYWJs
ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWREYXRhT2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGRlYnVnZ2VyV2FzRGlzYWJsZWRNZXNzYWdlLT5z
ZXRPYmplY3QoImRhdGEiLCBwYXlsb2FkRGF0YU9iamVjdCk7CiAgICBtX2luc3BlY3RvckNsaWVu
dC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGRlYnVnZ2VyV2FzRGlzYWJsZWRNZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7Cn0KCnZvaWQgUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQ6OmZhaWxlZFRvUGFy
c2VTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50
IGZpcnN0TGluZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGZhaWxlZFRvUGFyc2VTY3JpcHRTb3VyY2VNZXNz
YWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGZhaWxlZFRvUGFyc2VTY3JpcHRT
b3VyY2VNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQiKTsKICAgIGZhaWxlZFRvUGFy
c2VTY3JpcHRTb3VyY2VNZXNzYWdlLT5zZXRTdHJpbmcoImV2ZW50IiwgImZhaWxlZFRvUGFyc2VT
Y3JpcHRTb3VyY2UiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWREYXRhT2Jq
ZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBheWxvYWREYXRhT2JqZWN0LT5z
ZXRTdHJpbmcoInVybCIsIHVybCk7CiAgICBwYXlsb2FkRGF0YU9iamVjdC0+c2V0U3RyaW5nKCJk
YXRhIiwgZGF0YSk7CiAgICBwYXlsb2FkRGF0YU9iamVjdC0+c2V0TnVtYmVyKCJmaXJzdExpbmUi
LCBmaXJzdExpbmUpOwogICAgcGF5bG9hZERhdGFPYmplY3QtPnNldE51bWJlcigiZXJyb3JMaW5l
IiwgZXJyb3JMaW5lKTsKICAgIHBheWxvYWREYXRhT2JqZWN0LT5zZXRTdHJpbmcoImVycm9yTWVz
c2FnZSIsIGVycm9yTWVzc2FnZSk7CiAgICBmYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlTWVzc2Fn
ZS0+c2V0T2JqZWN0KCJkYXRhIiwgcGF5bG9hZERhdGFPYmplY3QpOwogICAgbV9pbnNwZWN0b3JD
bGllbnQtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChmYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIFJlbW90ZUluc3BlY3RvckZyb250ZW5kOjpw
YXJzZWRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IHNjcmlwdFdvcmxkVHlw
ZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyc2VkU2NyaXB0U291cmNlTWVzc2Fn
ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJzZWRTY3JpcHRTb3VyY2VNZXNz
YWdlLT5zZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQiKTsKICAgIHBhcnNlZFNjcmlwdFNvdXJjZU1l
c3NhZ2UtPnNldFN0cmluZygiZXZlbnQiLCAicGFyc2VkU2NyaXB0U291cmNlIik7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXlsb2FkRGF0YU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBwYXlsb2FkRGF0YU9iamVjdC0+c2V0U3RyaW5nKCJzb3VyY2VJRCIsIHNv
dXJjZUlEKTsKICAgIHBheWxvYWREYXRhT2JqZWN0LT5zZXRTdHJpbmcoInVybCIsIHVybCk7CiAg
ICBwYXlsb2FkRGF0YU9iamVjdC0+c2V0U3RyaW5nKCJkYXRhIiwgZGF0YSk7CiAgICBwYXlsb2Fk
RGF0YU9iamVjdC0+c2V0TnVtYmVyKCJmaXJzdExpbmUiLCBmaXJzdExpbmUpOwogICAgcGF5bG9h
ZERhdGFPYmplY3QtPnNldE51bWJlcigic2NyaXB0V29ybGRUeXBlIiwgc2NyaXB0V29ybGRUeXBl
KTsKICAgIHBhcnNlZFNjcmlwdFNvdXJjZU1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHBheWxv
YWREYXRhT2JqZWN0KTsKICAgIG1faW5zcGVjdG9yQ2xpZW50LT5zZW5kTWVzc2FnZVRvRnJvbnRl
bmQocGFyc2VkU2NyaXB0U291cmNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIFJl
bW90ZUluc3BlY3RvckZyb250ZW5kOjpwYXVzZWRTY3JpcHQoUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gY2FsbEZyYW1lcykKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF1c2VkU2Ny
aXB0TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXVzZWRTY3JpcHRN
ZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQiKTsKICAgIHBhdXNlZFNjcmlwdE1lc3Nh
Z2UtPnNldFN0cmluZygiZXZlbnQiLCAicGF1c2VkU2NyaXB0Iik7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXlsb2FkRGF0YU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBwYXlsb2FkRGF0YU9iamVjdC0+c2V0VmFsdWUoImNhbGxGcmFtZXMiLCBjYWxsRnJhbWVz
KTsKICAgIHBhdXNlZFNjcmlwdE1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHBheWxvYWREYXRh
T2JqZWN0KTsKICAgIG1faW5zcGVjdG9yQ2xpZW50LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocGF1
c2VkU2NyaXB0TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIFJlbW90ZUluc3BlY3Rv
ckZyb250ZW5kOjpwcm9maWxlcldhc0VuYWJsZWQoKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwcm9maWxlcldhc0VuYWJsZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHByb2ZpbGVyV2FzRW5hYmxlZE1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJldmVu
dCIpOwogICAgcHJvZmlsZXJXYXNFbmFibGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJldmVudCIsICJw
cm9maWxlcldhc0VuYWJsZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWRE
YXRhT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHByb2ZpbGVyV2FzRW5h
YmxlZE1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHBheWxvYWREYXRhT2JqZWN0KTsKICAgIG1f
aW5zcGVjdG9yQ2xpZW50LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocHJvZmlsZXJXYXNFbmFibGVk
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIFJlbW90ZUluc3BlY3RvckZyb250ZW5k
Ojpwcm9maWxlcldhc0Rpc2FibGVkKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcHJv
ZmlsZXJXYXNEaXNhYmxlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
cHJvZmlsZXJXYXNEaXNhYmxlZE1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJldmVudCIpOwog
ICAgcHJvZmlsZXJXYXNEaXNhYmxlZE1lc3NhZ2UtPnNldFN0cmluZygiZXZlbnQiLCAicHJvZmls
ZXJXYXNEaXNhYmxlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5bG9hZERhdGFP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcHJvZmlsZXJXYXNEaXNhYmxl
ZE1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHBheWxvYWREYXRhT2JqZWN0KTsKICAgIG1faW5z
cGVjdG9yQ2xpZW50LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocHJvZmlsZXJXYXNEaXNhYmxlZE1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZDo6
cmVzdG9yZWRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZyYg
dXJsLCBpbnQgbGluZSwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbikKewog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdG9yZWRCcmVha3BvaW50TWVzc2FnZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXN0b3JlZEJyZWFrcG9pbnRNZXNzYWdlLT5z
ZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQiKTsKICAgIHJlc3RvcmVkQnJlYWtwb2ludE1lc3NhZ2Ut
PnNldFN0cmluZygiZXZlbnQiLCAicmVzdG9yZWRCcmVha3BvaW50Iik7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXlsb2FkRGF0YU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBwYXlsb2FkRGF0YU9iamVjdC0+c2V0U3RyaW5nKCJzb3VyY2VJRCIsIHNvdXJjZUlE
KTsKICAgIHBheWxvYWREYXRhT2JqZWN0LT5zZXRTdHJpbmcoInVybCIsIHVybCk7CiAgICBwYXls
b2FkRGF0YU9iamVjdC0+c2V0TnVtYmVyKCJsaW5lIiwgbGluZSk7CiAgICBwYXlsb2FkRGF0YU9i
amVjdC0+c2V0Qm9vbCgiZW5hYmxlZCIsIGVuYWJsZWQpOwogICAgcGF5bG9hZERhdGFPYmplY3Qt
PnNldFN0cmluZygiY29uZGl0aW9uIiwgY29uZGl0aW9uKTsKICAgIHJlc3RvcmVkQnJlYWtwb2lu
dE1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHBheWxvYWREYXRhT2JqZWN0KTsKICAgIG1faW5z
cGVjdG9yQ2xpZW50LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzdG9yZWRCcmVha3BvaW50TWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIFJlbW90ZUluc3BlY3RvckZyb250ZW5kOjpy
ZXN1bWVkU2NyaXB0KCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdW1lZFNjcmlw
dE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzdW1lZFNjcmlwdE1l
c3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJldmVudCIpOwogICAgcmVzdW1lZFNjcmlwdE1lc3Nh
Z2UtPnNldFN0cmluZygiZXZlbnQiLCAicmVzdW1lZFNjcmlwdCIpOwogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGF5bG9hZERhdGFPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgcmVzdW1lZFNjcmlwdE1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHBheWxvYWREYXRh
T2JqZWN0KTsKICAgIG1faW5zcGVjdG9yQ2xpZW50LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVz
dW1lZFNjcmlwdE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBSZW1vdGVJbnNwZWN0
b3JGcm9udGVuZDo6c2V0UmVjb3JkaW5nUHJvZmlsZShib29sIGlzUHJvZmlsaW5nKQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzZXRSZWNvcmRpbmdQcm9maWxlTWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZXRSZWNvcmRpbmdQcm9maWxlTWVzc2FnZS0+c2V0
U3RyaW5nKCJ0eXBlIiwgImV2ZW50Iik7CiAgICBzZXRSZWNvcmRpbmdQcm9maWxlTWVzc2FnZS0+
c2V0U3RyaW5nKCJldmVudCIsICJzZXRSZWNvcmRpbmdQcm9maWxlIik7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXlsb2FkRGF0YU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBwYXlsb2FkRGF0YU9iamVjdC0+c2V0Qm9vbCgiaXNQcm9maWxpbmciLCBpc1Byb2Zp
bGluZyk7CiAgICBzZXRSZWNvcmRpbmdQcm9maWxlTWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwg
cGF5bG9hZERhdGFPYmplY3QpOwogICAgbV9pbnNwZWN0b3JDbGllbnQtPnNlbmRNZXNzYWdlVG9G
cm9udGVuZChzZXRSZWNvcmRpbmdQcm9maWxlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2
b2lkIFJlbW90ZUluc3BlY3RvckZyb250ZW5kOjp1cGRhdGVQYXVzZU9uRXhjZXB0aW9uc1N0YXRl
KGxvbmcgc3RhdGUpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHVwZGF0ZVBhdXNlT25F
eGNlcHRpb25zU3RhdGVNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHVw
ZGF0ZVBhdXNlT25FeGNlcHRpb25zU3RhdGVNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAiZXZl
bnQiKTsKICAgIHVwZGF0ZVBhdXNlT25FeGNlcHRpb25zU3RhdGVNZXNzYWdlLT5zZXRTdHJpbmco
ImV2ZW50IiwgInVwZGF0ZVBhdXNlT25FeGNlcHRpb25zU3RhdGUiKTsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBheWxvYWREYXRhT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHBheWxvYWREYXRhT2JqZWN0LT5zZXROdW1iZXIoInN0YXRlIiwgc3RhdGUpOwogICAg
dXBkYXRlUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZU1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHBh
eWxvYWREYXRhT2JqZWN0KTsKICAgIG1faW5zcGVjdG9yQ2xpZW50LT5zZW5kTWVzc2FnZVRvRnJv
bnRlbmQodXBkYXRlUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKfQoKdm9pZCBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZDo6YWRkRGF0YWJhc2UoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGFiYXNlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBhZGREYXRhYmFzZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYWRk
RGF0YWJhc2VNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQiKTsKICAgIGFkZERhdGFi
YXNlTWVzc2FnZS0+c2V0U3RyaW5nKCJldmVudCIsICJhZGREYXRhYmFzZSIpOwogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGF5bG9hZERhdGFPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgcGF5bG9hZERhdGFPYmplY3QtPnNldE9iamVjdCgiZGF0YWJhc2UiLCBkYXRh
YmFzZSk7CiAgICBhZGREYXRhYmFzZU1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHBheWxvYWRE
YXRhT2JqZWN0KTsKICAgIG1faW5zcGVjdG9yQ2xpZW50LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
YWRkRGF0YWJhc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgUmVtb3RlSW5zcGVj
dG9yRnJvbnRlbmQ6OnNlbGVjdERhdGFiYXNlKGludCBkYXRhYmFzZUlkKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBzZWxlY3REYXRhYmFzZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgc2VsZWN0RGF0YWJhc2VNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAi
ZXZlbnQiKTsKICAgIHNlbGVjdERhdGFiYXNlTWVzc2FnZS0+c2V0U3RyaW5nKCJldmVudCIsICJz
ZWxlY3REYXRhYmFzZSIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5bG9hZERhdGFP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGF5bG9hZERhdGFPYmplY3Qt
PnNldE51bWJlcigiZGF0YWJhc2VJZCIsIGRhdGFiYXNlSWQpOwogICAgc2VsZWN0RGF0YWJhc2VN
ZXNzYWdlLT5zZXRPYmplY3QoImRhdGEiLCBwYXlsb2FkRGF0YU9iamVjdCk7CiAgICBtX2luc3Bl
Y3RvckNsaWVudC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHNlbGVjdERhdGFiYXNlTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIFJlbW90ZUluc3BlY3RvckZyb250ZW5kOjphZGRET01T
dG9yYWdlKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzdG9yYWdlKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBhZGRET01TdG9yYWdlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBhZGRET01TdG9yYWdlTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgImV2
ZW50Iik7CiAgICBhZGRET01TdG9yYWdlTWVzc2FnZS0+c2V0U3RyaW5nKCJldmVudCIsICJhZGRE
T01TdG9yYWdlIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXlsb2FkRGF0YU9iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXlsb2FkRGF0YU9iamVjdC0+c2V0
T2JqZWN0KCJzdG9yYWdlIiwgc3RvcmFnZSk7CiAgICBhZGRET01TdG9yYWdlTWVzc2FnZS0+c2V0
T2JqZWN0KCJkYXRhIiwgcGF5bG9hZERhdGFPYmplY3QpOwogICAgbV9pbnNwZWN0b3JDbGllbnQt
PnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhZGRET01TdG9yYWdlTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwp9Cgp2b2lkIFJlbW90ZUluc3BlY3RvckZyb250ZW5kOjp1cGRhdGVET01TdG9yYWdlKGlu
dCBzdG9yYWdlSWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHVwZGF0ZURPTVN0b3Jh
Z2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHVwZGF0ZURPTVN0b3Jh
Z2VNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQiKTsKICAgIHVwZGF0ZURPTVN0b3Jh
Z2VNZXNzYWdlLT5zZXRTdHJpbmcoImV2ZW50IiwgInVwZGF0ZURPTVN0b3JhZ2UiKTsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWREYXRhT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIHBheWxvYWREYXRhT2JqZWN0LT5zZXROdW1iZXIoInN0b3JhZ2VJZCIs
IHN0b3JhZ2VJZCk7CiAgICB1cGRhdGVET01TdG9yYWdlTWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRh
IiwgcGF5bG9hZERhdGFPYmplY3QpOwogICAgbV9pbnNwZWN0b3JDbGllbnQtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZCh1cGRhdGVET01TdG9yYWdlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2
b2lkIFJlbW90ZUluc3BlY3RvckZyb250ZW5kOjpzZWxlY3RET01TdG9yYWdlKGludCBzdG9yYWdl
SWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNlbGVjdERPTVN0b3JhZ2VNZXNzYWdl
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbGVjdERPTVN0b3JhZ2VNZXNzYWdl
LT5zZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQiKTsKICAgIHNlbGVjdERPTVN0b3JhZ2VNZXNzYWdl
LT5zZXRTdHJpbmcoImV2ZW50IiwgInNlbGVjdERPTVN0b3JhZ2UiKTsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBheWxvYWREYXRhT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHBheWxvYWREYXRhT2JqZWN0LT5zZXROdW1iZXIoInN0b3JhZ2VJZCIsIHN0b3JhZ2VJ
ZCk7CiAgICBzZWxlY3RET01TdG9yYWdlTWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwgcGF5bG9h
ZERhdGFPYmplY3QpOwogICAgbV9pbnNwZWN0b3JDbGllbnQtPnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChzZWxlY3RET01TdG9yYWdlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIFJlbW90
ZUluc3BlY3RvckZyb250ZW5kOjp1cGRhdGVBcHBsaWNhdGlvbkNhY2hlU3RhdHVzKGludCBzdGF0
dXMpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHVwZGF0ZUFwcGxpY2F0aW9uQ2FjaGVT
dGF0dXNNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHVwZGF0ZUFwcGxp
Y2F0aW9uQ2FjaGVTdGF0dXNNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQiKTsKICAg
IHVwZGF0ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNNZXNzYWdlLT5zZXRTdHJpbmcoImV2ZW50Iiwg
InVwZGF0ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXMiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBheWxvYWREYXRhT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBh
eWxvYWREYXRhT2JqZWN0LT5zZXROdW1iZXIoInN0YXR1cyIsIHN0YXR1cyk7CiAgICB1cGRhdGVB
cHBsaWNhdGlvbkNhY2hlU3RhdHVzTWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwgcGF5bG9hZERh
dGFPYmplY3QpOwogICAgbV9pbnNwZWN0b3JDbGllbnQtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCh1
cGRhdGVBcHBsaWNhdGlvbkNhY2hlU3RhdHVzTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2
b2lkIFJlbW90ZUluc3BlY3RvckZyb250ZW5kOjp1cGRhdGVOZXR3b3JrU3RhdGUoYm9vbCBpc05v
d09ubGluZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdXBkYXRlTmV0d29ya1N0YXRl
TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICB1cGRhdGVOZXR3b3JrU3Rh
dGVNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQiKTsKICAgIHVwZGF0ZU5ldHdvcmtT
dGF0ZU1lc3NhZ2UtPnNldFN0cmluZygiZXZlbnQiLCAidXBkYXRlTmV0d29ya1N0YXRlIik7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXlsb2FkRGF0YU9iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBwYXlsb2FkRGF0YU9iamVjdC0+c2V0Qm9vbCgiaXNOb3dPbmxp
bmUiLCBpc05vd09ubGluZSk7CiAgICB1cGRhdGVOZXR3b3JrU3RhdGVNZXNzYWdlLT5zZXRPYmpl
Y3QoImRhdGEiLCBwYXlsb2FkRGF0YU9iamVjdCk7CiAgICBtX2luc3BlY3RvckNsaWVudC0+c2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kKHVwZGF0ZU5ldHdvcmtTdGF0ZU1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKfQoKdm9pZCBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZDo6ZGlkQ3JlYXRlV29ya2VyKGxv
bmcgaWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBkaWRDcmVhdGVXb3JrZXJNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIGRpZENyZWF0ZVdvcmtlck1lc3NhZ2UtPnNldFN0cmluZygidHlwZSIsICJl
dmVudCIpOwogICAgZGlkQ3JlYXRlV29ya2VyTWVzc2FnZS0+c2V0U3RyaW5nKCJldmVudCIsICJk
aWRDcmVhdGVXb3JrZXIiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWREYXRh
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBheWxvYWREYXRhT2JqZWN0
LT5zZXROdW1iZXIoImlkIiwgaWQpOwogICAgcGF5bG9hZERhdGFPYmplY3QtPnNldFN0cmluZygi
dXJsIiwgdXJsKTsKICAgIHBheWxvYWREYXRhT2JqZWN0LT5zZXRCb29sKCJpc1NoYXJlZCIsIGlz
U2hhcmVkKTsKICAgIGRpZENyZWF0ZVdvcmtlck1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHBh
eWxvYWREYXRhT2JqZWN0KTsKICAgIG1faW5zcGVjdG9yQ2xpZW50LT5zZW5kTWVzc2FnZVRvRnJv
bnRlbmQoZGlkQ3JlYXRlV29ya2VyTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIFJl
bW90ZUluc3BlY3RvckZyb250ZW5kOjpkaWREZXN0cm95V29ya2VyKGxvbmcgaWQpCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlLT5zZXRTdHJpbmco
InR5cGUiLCAiZXZlbnQiKTsKICAgIGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlLT5zZXRTdHJpbmco
ImV2ZW50IiwgImRpZERlc3Ryb3lXb3JrZXIiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBheWxvYWREYXRhT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBheWxv
YWREYXRhT2JqZWN0LT5zZXROdW1iZXIoImlkIiwgaWQpOwogICAgZGlkRGVzdHJveVdvcmtlck1l
c3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHBheWxvYWREYXRhT2JqZWN0KTsKICAgIG1faW5zcGVj
dG9yQ2xpZW50LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZGlkRGVzdHJveVdvcmtlck1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZDo6c3FsVHJh
bnNhY3Rpb25TdWNjZWVkZWQobG9uZyB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiBjb2x1bW5OYW1lcywgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWVzKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZE1lc3Nh
Z2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc3FsVHJhbnNhY3Rpb25TdWNjZWVk
ZWRNZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAiZXZlbnQiKTsKICAgIHNxbFRyYW5zYWN0aW9u
U3VjY2VlZGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJldmVudCIsICJzcWxUcmFuc2FjdGlvblN1Y2Nl
ZWRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5bG9hZERhdGFPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGF5bG9hZERhdGFPYmplY3QtPnNldE51bWJl
cigidHJhbnNhY3Rpb25JZCIsIHRyYW5zYWN0aW9uSWQpOwogICAgcGF5bG9hZERhdGFPYmplY3Qt
PnNldFZhbHVlKCJjb2x1bW5OYW1lcyIsIGNvbHVtbk5hbWVzKTsKICAgIHBheWxvYWREYXRhT2Jq
ZWN0LT5zZXRWYWx1ZSgidmFsdWVzIiwgdmFsdWVzKTsKICAgIHNxbFRyYW5zYWN0aW9uU3VjY2Vl
ZGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJkYXRhIiwgcGF5bG9hZERhdGFPYmplY3QpOwogICAgbV9p
bnNwZWN0b3JDbGllbnQtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChzcWxUcmFuc2FjdGlvblN1Y2Nl
ZWRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBSZW1vdGVJbnNwZWN0b3JGcm9u
dGVuZDo6c3FsVHJhbnNhY3Rpb25GYWlsZWQobG9uZyB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRy
PEluc3BlY3RvclZhbHVlPiBzcWxFcnJvcikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
c3FsVHJhbnNhY3Rpb25GYWlsZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHNxbFRyYW5zYWN0aW9uRmFpbGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJ0eXBlIiwgImV2ZW50
Iik7CiAgICBzcWxUcmFuc2FjdGlvbkZhaWxlZE1lc3NhZ2UtPnNldFN0cmluZygiZXZlbnQiLCAi
c3FsVHJhbnNhY3Rpb25GYWlsZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxv
YWREYXRhT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBheWxvYWREYXRh
T2JqZWN0LT5zZXROdW1iZXIoInRyYW5zYWN0aW9uSWQiLCB0cmFuc2FjdGlvbklkKTsKICAgIHBh
eWxvYWREYXRhT2JqZWN0LT5zZXRWYWx1ZSgic3FsRXJyb3IiLCBzcWxFcnJvcik7CiAgICBzcWxU
cmFuc2FjdGlvbkZhaWxlZE1lc3NhZ2UtPnNldE9iamVjdCgiZGF0YSIsIHBheWxvYWREYXRhT2Jq
ZWN0KTsKICAgIG1faW5zcGVjdG9yQ2xpZW50LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoc3FsVHJh
bnNhY3Rpb25GYWlsZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCgp9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCgojZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65096</attachid>
            <date>2010-08-23 03:18:15 -0700</date>
            <delta_ts>2010-08-23 04:58:00 -0700</delta_ts>
            <desc>[patch] second iteration</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>33190</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWFkNjc0OS4uMzExNGFkOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAxMC0wOC0yMyAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViSW5zcGVjdG9yOiBpbnNwZWN0b3IgcHJvdG9jb2wgc2hv
dWxkIGJlIHN3aXRjaGVkIGZyb20gYXJyYXkgYmFzZWQKKyAgICAgICAgbWVzc2FnZSBmb3JtYXQg
dG8gb2JqZWN0IGJhc2VkIG1lc3NhZ2UgZm9ybWF0LgorICAgICAgICBBbG1vc3QgYWxsIHRoZSBw
cm90b2NvbCByZWxhdGVkIHRoaW5ncyBpcyBnZW5lcmF0ZWQgYnkgQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci5wbQorICAgICAgICBJdCB3YXMgY2hhbmdlZCBhIGJpdC4gQXMgcmVzdWx0IEluc3BlY3Rv
ckJhY2tlbmRTdHViLmpzIHdyYXBzIHRoZQorICAgICAgICBjYWxscyBpbnRvIFJlcXVlc3Qgb2Jq
ZWN0cy4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIHVud3JhcHMKKyAgICAgICAgdGhl
c2Ugb2JqZWN0cyBhbmQgY2FsbHMgY29ycmVzcG9uZGluZyBhZ2VudHMuIFRoZXNlIHR3byBmaWxl
cyBhbmQKKyAgICAgICAgUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQgYXJlIGdlbmVyYXRlZCBieSBD
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCisgICAgICAgIERpc3BhdGNoaW5nIHBhcnQgb2YgV2Vi
SW5zcGVjdG9yIGFsc28gd2FzIGFkanVzdGVkIGZvciBoYW5kbGluZyBFdmVudAorICAgICAgICBv
YmplY3RzIHByb2R1Y2VkIGJ5IFJlbW90ZUluc3BlY3RvckZyb250ZW5kLmNwcCBhbmQgUmVzcG9u
c2Ugb2JqZWN0cworICAgICAgICBwcm9kdWNlZCBieSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5jcHAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0
MzM4CisKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpzZXRBdHRhY2hlZFdpbmRvdyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
OjpzZXRBdHRhY2hlZFdpbmRvdyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT2JqZWN0OjpmaW5kKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxiYWNrLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkNhbGxiYWNrLnByb3RvdHlwZS5wcm9jZXNzUmVzcG9uc2UpOgorICAgICAgICAqIGluc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmRpc3BhdGNo
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvcl9zeW5jRGlzcGF0Y2gpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLmRpc3BhdGNoTWVzc2FnZUZyb21CYWNrZW5kKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5yZXBvcnRQcm90b2NvbEVycm9yKToKKwogMjAxMC0wOC0yMiAgQW5kcmVhcyBLbGluZyAgPGFu
ZHJlYXMua2xpbmdAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9o
ZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5wbSBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucG0KaW5kZXggY2Q5MDUyYS4uMjA0NDI0MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnBtCkBAIC0xNywyNiArMTcsMjYgQEAgJHR5cGVUcmFuc2Zvcm17
Ikluc3BlY3RvckNsaWVudCJ9ID0gewogJHR5cGVUcmFuc2Zvcm17IkJhY2tlbmQifSA9IHsKICAg
ICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckJhY2tlbmQiLAogICAgICJoZWFkZXIiID0+ICJJbnNw
ZWN0b3JCYWNrZW5kLmgiLAotICAgICJoYW5kbGVyQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNv
bnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKSIsCisgICAgImRvbWFpbkFjY2Vzc29yIiA9PiAi
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JCYWNrZW5kKCkiLAogfTsKICR0eXBlVHJh
bnNmb3JteyJDb250cm9sbGVyIn0gPSB7CiAgICAgImZvcndhcmRIZWFkZXIiID0+ICJJbnNwZWN0
b3JDb250cm9sbGVyLmgiLAotICAgICJoYW5kbGVyQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNv
bnRyb2xsZXIiLAorICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQ29udHJvbGxl
ciIsCiB9OwogJHR5cGVUcmFuc2Zvcm17IkRlYnVnIn0gPSB7CiAgICAgImZvcndhcmQiID0+ICJJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50IiwKICAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5oIiwKLSAgICAiaGFuZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9s
bGVyLT5kZWJ1Z2dlckFnZW50KCkiLAorICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVj
dG9yQ29udHJvbGxlci0+ZGVidWdnZXJBZ2VudCgpIiwKIH07CiAkdHlwZVRyYW5zZm9ybXsiRE9N
In0gPSB7CiAgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JET01BZ2VudCIsCiAgICAgImhlYWRl
ciIgPT4gIkluc3BlY3RvckRPTUFnZW50LmgiLAotICAgICJoYW5kbGVyQWNjZXNzb3IiID0+ICJt
X2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkiLAorICAgICJkb21haW5BY2Nlc3NvciIg
PT4gIm1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSIsCiB9OwogJHR5cGVUcmFuc2Zv
cm17IkFwcGxpY2F0aW9uQ2FjaGUifSA9IHsKICAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudCIsCiAgICAgImhlYWRlciIgPT4gIkluc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudC5oIiwKLSAgICAiaGFuZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JD
b250cm9sbGVyLT5hcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSIsCisgICAgImRvbWFpbkFjY2Vzc29y
IiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5hcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSIsCiB9
OwogJHR5cGVUcmFuc2Zvcm17IkZyb250ZW5kIn0gPSB7CiAgICAgImZvcndhcmQiID0+ICJSZW1v
dGVJbnNwZWN0b3JGcm9udGVuZCIsCkBAIC01MSw3ICs1MSw3IEBAICR0eXBlVHJhbnNmb3JteyJP
YmplY3QifSA9IHsKICAgICAiZGVmYXVsdFZhbHVlIiA9PiAiSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKSIsCiAgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JPYmplY3QiLAogICAgICJoZWFkZXIi
ID0+ICJJbnNwZWN0b3JWYWx1ZXMuaCIsCi0gICAgImFjY2Vzc29yU3VmZml4IiA9PiAiT2JqZWN0
IgorICAgICJKU09OVHlwZSIgPT4gIk9iamVjdCIKIH07CiAkdHlwZVRyYW5zZm9ybXsiQXJyYXki
fSA9IHsKICAgICAicGFyYW0iID0+ICJQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiIsCkBAIC01
OSw3ICs1OSw3IEBAICR0eXBlVHJhbnNmb3JteyJBcnJheSJ9ID0gewogICAgICJkZWZhdWx0VmFs
dWUiID0+ICJJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCkiLAogICAgICJmb3J3YXJkIiA9PiAiSW5z
cGVjdG9yQXJyYXkiLAogICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JWYWx1ZXMuaCIsCi0gICAg
ImFjY2Vzc29yU3VmZml4IiA9PiAiQXJyYXkiCisgICAgIkpTT05UeXBlIiA9PiAiQXJyYXkiCiB9
OwogJHR5cGVUcmFuc2Zvcm17IlZhbHVlIn0gPSB7CiAgICAgInBhcmFtIiA9PiAiUGFzc1JlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4iLApAQCAtNjcsMTQgKzY3LDE0IEBAICR0eXBlVHJhbnNmb3JteyJW
YWx1ZSJ9ID0gewogICAgICJkZWZhdWx0VmFsdWUiID0+ICJJbnNwZWN0b3JWYWx1ZTo6bnVsbCgp
IiwKICAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvclZhbHVlIiwKICAgICAiaGVhZGVyIiA9PiAi
SW5zcGVjdG9yVmFsdWVzLmgiLAotICAgICJhY2Nlc3NvclN1ZmZpeCIgPT4gIlZhbHVlIgorICAg
ICJKU09OVHlwZSIgPT4gIlZhbHVlIgogfTsKICR0eXBlVHJhbnNmb3JteyJTdHJpbmcifSA9IHsK
ICAgICAicGFyYW0iID0+ICJjb25zdCBTdHJpbmcmIiwKICAgICAidmFyaWFibGUiID0+ICJTdHJp
bmciLAogICAgICJmb3J3YXJkSGVhZGVyIiA9PiAid3RmL0ZvcndhcmQuaCIsCiAgICAgImhlYWRl
ciIgPT4gIlBsYXRmb3JtU3RyaW5nLmgiLAotICAgICJhY2Nlc3NvclN1ZmZpeCIgPT4gIlN0cmlu
ZyIKKyAgICAiSlNPTlR5cGUiID0+ICJTdHJpbmciCiB9OwogJHR5cGVUcmFuc2Zvcm17Imxvbmci
fSA9IHsKICAgICAicGFyYW0iID0+ICJsb25nIiwKQEAgLTgyLDcgKzgyLDcgQEAgJHR5cGVUcmFu
c2Zvcm17ImxvbmcifSA9IHsKICAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMCIsCiAgICAgImZvcndh
cmQiID0+ICIiLAogICAgICJoZWFkZXIiID0+ICIiLAotICAgICJhY2Nlc3NvclN1ZmZpeCIgPT4g
Ik51bWJlciIKKyAgICAiSlNPTlR5cGUiID0+ICJOdW1iZXIiCiB9OwogJHR5cGVUcmFuc2Zvcm17
ImludCJ9ID0gewogICAgICJwYXJhbSIgPT4gImludCIsCkBAIC05MCw3ICs5MCw3IEBAICR0eXBl
VHJhbnNmb3JteyJpbnQifSA9IHsKICAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMCIsCiAgICAgImZv
cndhcmQiID0+ICIiLAogICAgICJoZWFkZXIiID0+ICIiLAotICAgICJhY2Nlc3NvclN1ZmZpeCIg
PT4gIk51bWJlciIsCisgICAgIkpTT05UeXBlIiA9PiAiTnVtYmVyIiwKIH07CiAkdHlwZVRyYW5z
Zm9ybXsidW5zaWduZWQgbG9uZyJ9ID0gewogICAgICJwYXJhbSIgPT4gInVuc2lnbmVkIGxvbmci
LApAQCAtOTgsNyArOTgsNyBAQCAkdHlwZVRyYW5zZm9ybXsidW5zaWduZWQgbG9uZyJ9ID0gewog
ICAgICJkZWZhdWx0VmFsdWUiID0+ICIwdSIsCiAgICAgImZvcndhcmQiID0+ICIiLAogICAgICJo
ZWFkZXIiID0+ICIiLAotICAgICJhY2Nlc3NvclN1ZmZpeCIgPT4gIk51bWJlciIKKyAgICAiSlNP
TlR5cGUiID0+ICJOdW1iZXIiCiB9OwogJHR5cGVUcmFuc2Zvcm17InVuc2lnbmVkIGludCJ9ID0g
ewogICAgICJwYXJhbSIgPT4gInVuc2lnbmVkIGludCIsCkBAIC0xMDYsNyArMTA2LDcgQEAgJHR5
cGVUcmFuc2Zvcm17InVuc2lnbmVkIGludCJ9ID0gewogICAgICJkZWZhdWx0VmFsdWUiID0+ICIw
dSIsCiAgICAgImZvcndhcmQiID0+ICIiLAogICAgICJoZWFkZXIiID0+ICIiLAotICAgICJhY2Nl
c3NvclN1ZmZpeCIgPT4gIk51bWJlciIKKyAgICAiSlNPTlR5cGUiID0+ICJOdW1iZXIiCiB9Owog
JHR5cGVUcmFuc2Zvcm17ImJvb2xlYW4ifSA9IHsKICAgICAicGFyYW0iID0+ICJib29sIiwKQEAg
LTExNCw3ICsxMTQsNyBAQCAkdHlwZVRyYW5zZm9ybXsiYm9vbGVhbiJ9ID0gewogICAgICJkZWZh
dWx0VmFsdWUiID0+ICJmYWxzZSIsCiAgICAgImZvcndhcmQiID0+ICIiLAogICAgICJoZWFkZXIi
ID0+ICIiLAotICAgICJhY2Nlc3NvclN1ZmZpeCIgPT4gIkJvb2wiCisgICAgIkpTT05UeXBlIiA9
PiAiQm9vbCIKIH07CiAkdHlwZVRyYW5zZm9ybXsidm9pZCJ9ID0gewogICAgICJmb3J3YXJkIiA9
PiAiIiwKQEAgLTE1NywxMCArMTU3LDYgQEAgbXkgQGZyb250ZW5kQ29uc3RhbnREZWNsYXJhdGlv
bnM7CiBteSBAZnJvbnRlbmRDb25zdGFudERlZmluaXRpb25zOwogbXkgJGZyb250ZW5kRm9vdGVy
OwogCi1teSAkY2FsbElkID0gbmV3IGRvbVNpZ25hdHVyZSgpOyAjIGl0IGlzIGp1c3Qgc3RydWN0
dXJlIGZvciBkZXNjcmliaW5nIHBhcmFtZXRlcnMgZnJvbSBJRExTdHJ1Y3R1cmUucG0uCi0kY2Fs
bElkLT50eXBlKCJsb25nIik7Ci0kY2FsbElkLT5uYW1lKCJjYWxsSWQiKTsKLQogIyBEZWZhdWx0
IGNvbnN0cnVjdG9yCiBzdWIgbmV3CiB7CkBAIC0yMTcsOSArMjEzLDggQEAgc3ViIEdlbmVyYXRl
SW50ZXJmYWNlCiAgICAgJGJhY2tlbmRUeXBlc3siQ29udHJvbGxlciJ9ID0gMTsKICAgICAkYmFj
a2VuZFR5cGVzeyJJbnNwZWN0b3JDbGllbnQifSA9IDE7CiAgICAgJGJhY2tlbmRUeXBlc3siUGFz
c1JlZlB0ciJ9ID0gMTsKLSAgICAkYmFja2VuZFR5cGVzeyJBcnJheSJ9ID0gMTsKKyAgICAkYmFj
a2VuZFR5cGVzeyJPYmplY3QifSA9IDE7CiAKLSAgICBwdXNoKEBiYWNrZW5kTWV0aG9kc0ltcGws
IGdlbmVyYXRlQmFja2VuZFByaXZhdGVGdW5jdGlvbnMoKSk7CiAgICAgcHVzaChAYmFja2VuZE1l
dGhvZHNJbXBsLCBnZW5lcmF0ZUJhY2tlbmRNZXNzYWdlUGFyc2VyKCkpOwogICAgIGdlbmVyYXRl
RnVuY3Rpb25zKCRpbnRlcmZhY2UpOwogCkBAIC0yNTQsNyArMjQ5LDYgQEAgc3ViIGdlbmVyYXRl
RnJvbnRlbmRGdW5jdGlvbgogICAgIG15IEBhcmdzRmlsdGVyZWQgPSBncmVwKCRfLT5kaXJlY3Rp
b24gZXEgIm91dCIsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSk7ICMganVzdCBrZWVwIG9ubHkg
b3V0IHBhcmFtZXRlcnMgZm9yIGZyb250ZW5kIGludGVyZmFjZS4KICAgICBtYXAoJGZyb250ZW5k
VHlwZXN7JF8tPnR5cGV9ID0gMSwgQGFyZ3NGaWx0ZXJlZCk7ICMgcmVnaXN0ZXIgcmVxdWlyZWQg
dHlwZXMuCiAgICAgbXkgJGFyZ3VtZW50cyA9IGpvaW4oIiwgIiwgbWFwKCR0eXBlVHJhbnNmb3Jt
eyRfLT50eXBlfS0+eyJwYXJhbSJ9IC4gIiAiIC4gJF8tPm5hbWUsIEBhcmdzRmlsdGVyZWQpKTsg
IyBwcmVwYXJlIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gc2lnbmF0dXJlLgotICAgIG15IEBwdXNo
QXJndW1lbnRzID0gbWFwKCIgICAgYXJndW1lbnRzLT5wdXNoIiAuICR0eXBlVHJhbnNmb3JteyRf
LT50eXBlfS0+eyJhY2Nlc3NvclN1ZmZpeCJ9IC4gIigiIC4gJF8tPm5hbWUgLiAiKTsiLCBAYXJn
c0ZpbHRlcmVkKTsKIAogICAgIG15ICRzaWduYXR1cmUgPSAiICAgIHZvaWQgJHtmdW5jdGlvbk5h
bWV9KCR7YXJndW1lbnRzfSk7IjsKICAgICBpZiAoISRmcm9udGVuZE1ldGhvZHN7JHtzaWduYXR1
cmV9fSkgewpAQCAtMjYzLDEwICsyNTcsMTQgQEAgc3ViIGdlbmVyYXRlRnJvbnRlbmRGdW5jdGlv
bgogICAgICAgICBteSBAZnVuY3Rpb247CiAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAidm9pZCAk
e2Zyb250ZW5kQ2xhc3NOYW1lfTo6JHtmdW5jdGlvbk5hbWV9KCR7YXJndW1lbnRzfSkiKTsKICAg
ICAgICAgcHVzaChAZnVuY3Rpb24sICJ7Iik7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOyIpOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBhcmd1bWVudHMtPnB1c2hTdHJp
bmcoXCIkZnVuY3Rpb25OYW1lXCIpOyIpOworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiAke2Z1bmN0aW9uTmFtZX1NZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgJHtmdW5j
dGlvbk5hbWV9TWVzc2FnZS0+c2V0U3RyaW5nKFwidHlwZVwiLCBcImV2ZW50XCIpOyIpOworICAg
ICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAke2Z1bmN0aW9uTmFtZX1NZXNzYWdlLT5zZXRTdHJp
bmcoXCJldmVudFwiLCBcIiRmdW5jdGlvbk5hbWVcIik7Iik7CisgICAgICAgIHB1c2goQGZ1bmN0
aW9uLCAiICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWREYXRhT2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsiKTsKKyAgICAgICAgbXkgQHB1c2hBcmd1bWVudHMgPSBt
YXAoIiAgICBwYXlsb2FkRGF0YU9iamVjdC0+c2V0IiAuICR0eXBlVHJhbnNmb3JteyRfLT50eXBl
fS0+eyJKU09OVHlwZSJ9IC4gIihcIiIgLiAkXy0+bmFtZSAuICJcIiwgIiAuICRfLT5uYW1lIC4g
Iik7IiwgQGFyZ3NGaWx0ZXJlZCk7CiAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCBAcHVzaEFyZ3Vt
ZW50cyk7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIG1faW5zcGVjdG9yQ2xpZW50LT5z
ZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7Iik7CisgICAg
ICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICR7ZnVuY3Rpb25OYW1lfU1lc3NhZ2UtPnNldE9iamVj
dChcImRhdGFcIiwgcGF5bG9hZERhdGFPYmplY3QpOyIpOworICAgICAgICBwdXNoKEBmdW5jdGlv
biwgIiAgICBtX2luc3BlY3RvckNsaWVudC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKCR7ZnVuY3Rp
b25OYW1lfU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsiKTsKIAogICAgICAgICBwdXNoKEBmdW5j
dGlvbiwgIn0iKTsKICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKQEAgLTI3NCwyMiArMjcy
LDYgQEAgc3ViIGdlbmVyYXRlRnJvbnRlbmRGdW5jdGlvbgogICAgIH0KIH0KIAotc3ViIGdlbmVy
YXRlQmFja2VuZFByaXZhdGVGdW5jdGlvbnMKLXsKLSAgICBteSAkcHJpdmF0ZUZ1bmN0aW9ucyA9
IDw8ICJFT0YiOwotc3RhdGljIFN0cmluZyBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2Fn
ZSh1bnNpZ25lZCBleHBlY3RlZCwgdW5zaWduZWQgYWN0dWFsKQotewotICAgIHJldHVybiBTdHJp
bmc6OmZvcm1hdCgiV3JvbmcgbnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogJWQp
IiwgYWN0dWFsLCBleHBlY3RlZCk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZm9ybWF0V3JvbmdBcmd1
bWVudFR5cGVNZXNzYWdlKHVuc2lnbmVkIHBvc2l0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCBjb25z
dCBjaGFyKiBleHBlY3RlZFR5cGUpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJGYWls
ZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgJWQgKCVzKSB0byAlcyIsIHBvc2l0aW9uLCBuYW1lLCBl
eHBlY3RlZFR5cGUpOwotfQotRU9GCi0gICAgcmV0dXJuIHNwbGl0KCJcbiIsICRwcml2YXRlRnVu
Y3Rpb25zKTsKLX0KLQogc3ViIGdlbmVyYXRlQmFja2VuZEZ1bmN0aW9uCiB7CiAgICAgbXkgJGZ1
bmN0aW9uID0gc2hpZnQ7CkBAIC0zMDAsNzQgKzI4Miw5MiBAQCBzdWIgZ2VuZXJhdGVCYWNrZW5k
RnVuY3Rpb24KICAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWZpbml0aW9ucywgImNvbnN0IGNo
YXIqICR7YmFja2VuZENsYXNzTmFtZX06OiR7ZnVuY3Rpb25OYW1lfUNtZCA9IFwiJHtmdW5jdGlv
bk5hbWV9XCI7Iik7CiAKICAgICBtYXAoJGJhY2tlbmRUeXBlc3skXy0+dHlwZX0gPSAxLCBAeyRm
dW5jdGlvbi0+cGFyYW1ldGVyc30pOyAjIHJlZ2lzdGVyIHJlcXVpcmVkIHR5cGVzCi0gICAgbXkg
QGluQXJncyA9IGdyZXAoJF8tPmRpcmVjdGlvbiBlcSAiaW4iLCBAeyRmdW5jdGlvbi0+cGFyYW1l
dGVyc30pOworICAgIG15IEBpbkFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgImluIiAmJiAh
KCRfLT5uYW1lIGVxICJjYWxsSWQiKSAsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSk7CiAgICAg
bXkgQG91dEFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgIm91dCIsIEB7JGZ1bmN0aW9uLT5w
YXJhbWV0ZXJzfSk7CiAKLSAgICBteSAkc2lnbmF0dXJlID0gIiAgICB2b2lkICR7ZnVuY3Rpb25O
YW1lfShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKTsiOworICAgIG15ICRzaWduYXR1
cmUgPSAiICAgIHZvaWQgJHtmdW5jdGlvbk5hbWV9KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsiOwogICAgICEkYmFja2VuZE1ldGhvZHN7JHtzaWdu
YXR1cmV9fSB8fCBkaWUgIkR1cGxpY2F0ZSBmdW5jdGlvbiB3YXMgZGV0ZWN0ZWQgZm9yIHNpZ25h
dHVyZSAnJHNpZ25hdHVyZScuIjsKICAgICAkYmFja2VuZE1ldGhvZHN7JHtzaWduYXR1cmV9fSA9
ICRmdW5jdGlvbk5hbWU7CiAKICAgICBteSBAZnVuY3Rpb247Ci0gICAgcHVzaChAZnVuY3Rpb24s
ICJ2b2lkICR7YmFja2VuZENsYXNzTmFtZX06OiR7ZnVuY3Rpb25OYW1lfShQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiBhcmdzKSIpOworICAgIG15ICRyZXF1ZXN0TWVzc2FnZU9iamVjdCA9IHNj
YWxhcihAaW5BcmdzKSA/ICIgcmVxdWVzdE1lc3NhZ2VPYmplY3QiIDogIiI7CisgICAgcHVzaChA
ZnVuY3Rpb24sICJ2b2lkICR7YmFja2VuZENsYXNzTmFtZX06OiR7ZnVuY3Rpb25OYW1lfShsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiRyZXF1ZXN0TWVzc2FnZU9iamVjdCkiKTsKICAgICBw
dXNoKEBmdW5jdGlvbiwgInsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBsb25nIGNhbGxJ
ZCA9IDA7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsiKTsKICAgICBwdXNo
KEBmdW5jdGlvbiwgIiIpOwogCi0gICAgbXkgJGV4cGVjdGVkUGFyYW1ldGVyc0NvdW50ID0gc2Nh
bGFyKEBpbkFyZ3MpOwotICAgIG15ICRleHBlY3RlZFBhcmFtZXRlcnNDb3VudFdpdGhNZXRob2RO
YW1lID0gc2NhbGFyKEBpbkFyZ3MpICsgMTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBpZiAo
YXJncy0+bGVuZ3RoKCkgIT0gJGV4cGVjdGVkUGFyYW1ldGVyc0NvdW50V2l0aE1ldGhvZE5hbWUp
IHsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2Fs
bElkLCAke2Z1bmN0aW9uTmFtZX1DbWQsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdl
KGFyZ3MtPmxlbmd0aCgpIC0gMSwgJGV4cGVjdGVkUGFyYW1ldGVyc0NvdW50KSk7Iik7Ci0gICAg
cHVzaChAZnVuY3Rpb24sICIgICAgICAgIHJldHVybjsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwg
IiAgICB9Iik7CisgICAgbXkgJGRvbWFpbiA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiaGFuZGxlciJ9IHx8ICJDb250cm9sbGVyIjsKKyAgICBteSAkZG9tYWlu
QWNjZXNzb3IgPSAkdHlwZVRyYW5zZm9ybXskZG9tYWlufS0+eyJkb21haW5BY2Nlc3NvciJ9Owor
ICAgICRiYWNrZW5kVHlwZXN7JGRvbWFpbn0gPSAxOworICAgIHB1c2goQGZ1bmN0aW9uLCAiICAg
IGlmICghJGRvbWFpbkFjY2Vzc29yKSIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdChcIkVycm9yOiAlcyBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuXCIsIFwiJGRvbWFpblwiKSk7Iik7CiAgICAgcHVzaChAZnVu
Y3Rpb24sICIiKTsKIAotICAgIG15ICRpID0gMTsgIyB6ZXJvIGVsZW1lbnQgaXMgdGhlIG1ldGhv
ZCBuYW1lLgotICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQGluQXJncykgewotICAgICAgICBt
eSAkdHlwZSA9ICRwYXJhbWV0ZXItPnR5cGU7Ci0gICAgICAgIG15ICRhcmd1bWVudFR5cGUgPSAk
dHlwZVRyYW5zZm9ybXskdHlwZX0tPnsidmFyaWFibGUifTsKLSAgICAgICAgcHVzaChAZnVuY3Rp
b24sICIgICAgJGFyZ3VtZW50VHlwZSAiIC4gJHBhcmFtZXRlci0+bmFtZSAuICI7IikgaWYgISgk
cGFyYW1ldGVyLT5uYW1lIGVxICJjYWxsSWQiKTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIg
ICAgaWYgKCFhcmdzLT5nZXQoJGkpLT5hcyIgLiAkdHlwZVRyYW5zZm9ybXskdHlwZX0tPnsiYWNj
ZXNzb3JTdWZmaXgifSAuICIoJiIgLiAkcGFyYW1ldGVyLT5uYW1lIC4gIikpIHsiKTsKKyAgICBp
ZiAoc2NhbGFyKEBpbkFyZ3MpKSB7CisgICAgICAgICMgZGVjbGFyZSB2YXJpYWJsZXMgZm9yIGFs
bCAnaW4nIGFyZ3M7CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCBtYXAoIiAgICAiIC4gJHR5cGVU
cmFuc2Zvcm17JF8tPnR5cGV9LT57InZhcmlhYmxlIn0gLiAiICIgLiAkXy0+bmFtZSAuICI7Iiwg
QGluQXJncykpOworCisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7CisgICAgICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFyZ3VtZW50c0NvbnRhaW5l
cjsiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgaWYgKCEoYXJndW1lbnRzQ29udGFp
bmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdChcImFyZ3VtZW50c1wiKSkpIHsi
KTsKICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyIpOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJv
cihjYWxsSWQsICR7ZnVuY3Rpb25OYW1lfUNtZCwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNz
YWdlKCRpLCBcIiIgLiAkcGFyYW1ldGVyLT5uYW1lIC4gIlwiLCBcIiR0eXBlXCIpKTsiKTsKLSAg
ICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIHJldHVybjsiKTsKKyAgICAgICAgcHVzaChA
ZnVuY3Rpb24sICIgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9y
bWF0KFwiRXJyb3I6IGFyZ3VtZW50cyBvYmplY3Qgd2FzIG5vdCBmb3VuZC5cIikpOyIpOworICAg
ICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICB9IGVsc2UgeyIpOworICAgICAgICBwdXNoKEBmdW5j
dGlvbiwgIiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBhcmd1bWVudHNF
bmRJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZW5kKCk7Iik7CisKKyAgICAgICAgZm9y
ZWFjaCBteSAkcGFyYW1ldGVyIChAaW5BcmdzKSB7CisgICAgICAgICAgICBteSAkbmFtZSA9ICRw
YXJhbWV0ZXItPm5hbWU7CisgICAgICAgICAgICBteSAkdHlwZSA9ICRwYXJhbWV0ZXItPnR5cGU7
CisgICAgICAgICAgICBteSAkdmFyaWFibGVUeXBlID0gJHR5cGVUcmFuc2Zvcm17JHR5cGV9LT57
InZhcmlhYmxlIn07CisgICAgICAgICAgICBteSAkSlNPTlR5cGUgPSAkdHlwZVRyYW5zZm9ybXsk
dHlwZX0tPnsiSlNPTlR5cGUifTsKKworICAgICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIiKTsK
KyAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNv
bnN0X2l0ZXJhdG9yICR7bmFtZX1WYWx1ZUl0ZXJhdG9yID0gYXJndW1lbnRzQ29udGFpbmVyLT5m
aW5kKFwiJG5hbWVcIik7Iik7CisgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAg
aWYgKCR7bmFtZX1WYWx1ZUl0ZXJhdG9yID09IGFyZ3VtZW50c0VuZEl0ZXJhdG9yKSB7Iik7Cisg
ICAgICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyIpOworICAgICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdChcIkVycm9yOiBBcmd1bWVudCAnJXMn
IHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuXCIsIFwiJG5hbWVcIiwgXCIkSlNPTlR5cGVc
IikpOyIpOworICAgICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIH0gZWxzZSB7Iik7
CisgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgICAgIGlmICghJHtuYW1lfVZh
bHVlSXRlcmF0b3ItPnNlY29uZC0+YXMkSlNPTlR5cGUoJiRuYW1lKSkgeyIpOworICAgICAgICAg
ICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Iik7CisgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdChcIkVycm9yOiBBcmd1bWVudCAnJXMn
IGhhcyB3cm9uZyB0eXBlLiBJdCBzaG91bGQgYmUgJyVzJy5cIiwgXCIkbmFtZVwiLCBcIiRKU09O
VHlwZVwiKSk7Iik7CisgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgICAgIH0i
KTsKKyAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICB9Iik7CisgICAgICAgIH0K
ICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgfSIpOwotICAgICAgICBwdXNoKEBmdW5jdGlv
biwgIiIpOwotICAgICAgICArKyRpOwogICAgIH0KIAotICAgIG15ICRoYW5kbGVyID0gJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJoYW5kbGVyIn0gfHwgIkNvbnRy
b2xsZXIiOwotICAgIG15ICRoYW5kbGVyQWNjZXNzb3IgPSAkdHlwZVRyYW5zZm9ybXskaGFuZGxl
cn0tPnsiaGFuZGxlckFjY2Vzc29yIn07Ci0gICAgJGJhY2tlbmRUeXBlc3skaGFuZGxlcn0gPSAx
OwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmICghJGhhbmRsZXJBY2Nlc3NvcikgeyIpOwot
ICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwg
JHtmdW5jdGlvbk5hbWV9Q21kLCBcIkVycm9yOiAkaGFuZGxlciBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuXCIpOyIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICByZXR1cm47Iik7Ci0g
ICAgcHVzaChAZnVuY3Rpb24sICIgICAgfSIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7Ci0K
LQogICAgIGZvcmVhY2ggKEBvdXRBcmdzKSB7ICMgZGVjbGFyZSBsb2NhbCB2YXJpYWJsZXMgZm9y
IG91dCBhcmd1bWVudHMuCiAgICAgICAgIG15ICRpbml0aWFsaXplciA9ICR0eXBlVHJhbnNmb3Jt
eyRfLT50eXBlfS0+eyJkZWZhdWx0VmFsdWUifSA/ICIgPSAiIC4gJHR5cGVUcmFuc2Zvcm17JF8t
PnR5cGV9LT57ImRlZmF1bHRWYWx1ZSJ9IDogIiI7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAi
ICAgICIgLiAkdHlwZVRyYW5zZm9ybXskXy0+dHlwZX0tPnsidmFyaWFibGUifSAuICIgIiAuICRf
LT5uYW1lIC4gIiRpbml0aWFsaXplcjsiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAg
ICAgICIgLiAkdHlwZVRyYW5zZm9ybXskXy0+dHlwZX0tPnsidmFyaWFibGUifSAuICIgIiAuICRf
LT5uYW1lIC4gIiRpbml0aWFsaXplcjsiKTsKICAgICB9CiAKLSAgICBteSAkYXJncyA9IGpvaW4o
IiwgIiwgKGdyZXAoISgkXyBlcSAiY2FsbElkIiksIG1hcCgkXy0+bmFtZSwgQGluQXJncykpLCBt
YXAoIiYiIC4gJF8tPm5hbWUsIEBvdXRBcmdzKSkpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAg
ICRoYW5kbGVyQWNjZXNzb3ItPiRmdW5jdGlvbk5hbWUoJGFyZ3MpOyIpOwotCi0gICAgIyBUaGUg
cmVzdWx0cyBvZiBmdW5jdGlvbiBjYWxsIHNob3VsZCBiZSB0cmFuc2ZlcmVkIGJhY2sgdG8gZnJv
bnRlbmQuCi0gICAgaWYgKHNjYWxhcihncmVwKCRfLT5uYW1lIGVxICJjYWxsSWQiLCBAaW5Bcmdz
KSkpIHsKLSAgICAgICAgbXkgQHB1c2hBcmd1bWVudHMgPSBtYXAoIiAgICAgICAgYXJndW1lbnRz
LT5wdXNoIiAuICR0eXBlVHJhbnNmb3JteyRfLT50eXBlfS0+eyJhY2Nlc3NvclN1ZmZpeCJ9IC4g
IigiIC4gJF8tPm5hbWUgLiAiKTsiLCBAb3V0QXJncyk7CisgICAgbXkgJGFyZ3MgPSBqb2luKCIs
ICIsIChtYXAoJF8tPm5hbWUsIEBpbkFyZ3MpLCBtYXAoIiYiIC4gJF8tPm5hbWUsIEBvdXRBcmdz
KSkpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKSIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICAkZG9tYWluQWNjZXNzb3ItPiRm
dW5jdGlvbk5hbWUoJGFyZ3MpOyIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7CiAKLSAgICAg
ICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgLy8g
dXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFi
aWxpdHkiKTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgaWYgKG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+aGFzRnJvbnRlbmQoKSkgeyIpOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAg
ICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7Iik7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBhcmd1bWVudHMt
PnB1c2hTdHJpbmcoXCJwcm9jZXNzUmVzcG9uc2VcIik7Iik7Ci0gICAgICAgIHB1c2goQGZ1bmN0
aW9uLCAiICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsiKTsKLSAgICAgICAg
cHVzaChAZnVuY3Rpb24sIEBwdXNoQXJndW1lbnRzKTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24s
ICIgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsiKTsKLSAgICAgICAg
cHVzaChAZnVuY3Rpb24sICIgICAgfSIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIC8vIHVz
ZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmls
aXR5Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgaWYgKGNhbGxJZCAmJiBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXROdW1iZXIoXCJzZXFcIiwgY2FsbElkKTsiKTsKKyAgICBwdXNoKEBmdW5j
dGlvbiwgIiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoXCJ0eXBlXCIsIFwicmVz
cG9uc2VcIik7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIHJlc3BvbnNlTWVzc2Fn
ZS0+c2V0U3RyaW5nKFwiZG9tYWluXCIsIFwiJGRvbWFpblwiKTsiKTsKKyAgICBwdXNoKEBmdW5j
dGlvbiwgIiAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRTdHJpbmcoXCJjb21tYW5kXCIsIFwi
JGZ1bmN0aW9uTmFtZVwiKTsiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXRCb29sKFwic3VjY2Vzc1wiLCAhcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KTsiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiICAg
ICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSIpOworICAgIHB1c2goQGZ1bmN0aW9u
LCAiICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRBcnJheShcImVycm9yc1wiLCBwcm90
b2NvbEVycm9ycyk7Iik7CisgICAgaWYgKHNjYWxhcihAb3V0QXJncykpIHsKKyAgICAgICAgcHVz
aChAZnVuY3Rpb24sICIgICAgICAgIGVsc2UgeyIpOworICAgICAgICBwdXNoKEBmdW5jdGlvbiwg
IiAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlRGF0YSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7Iik7CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCBtYXAoIiAg
ICAgICAgICAgIHJlc3BvbnNlRGF0YS0+c2V0IiAuICR0eXBlVHJhbnNmb3JteyRfLT50eXBlfS0+
eyJKU09OVHlwZSJ9IC4gIihcIiIgLiAkXy0+bmFtZSAuICJcIiwgIiAuICRfLT5uYW1lIC4gIik7
IiwgQG91dEFyZ3MpKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgICAgICByZXNw
b25zZU1lc3NhZ2UtPnNldE9iamVjdChcImRhdGFcIiwgcmVzcG9uc2VEYXRhKTsiKTsKKyAgICAg
ICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIH0iKTsKICAgICB9CisgICAgcHVzaChAZnVuY3Rp
b24sICIgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsiKTsK
KyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICB9Iik7CisKKwogICAgIHB1c2goQGZ1bmN0aW9uLCAi
fSIpOwogICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7CiAgICAgcHVzaChAYmFja2VuZE1ldGhvZHNJ
bXBsLCBAZnVuY3Rpb24pOwpAQCAtMzc5LDE3ICszNzksMjIgQEAgc3ViIGdlbmVyYXRlQmFja2Vu
ZFJlcG9ydFByb3RvY29sRXJyb3IKIAogdm9pZCAke2JhY2tlbmRDbGFzc05hbWV9OjpyZXBvcnRQ
cm90b2NvbEVycm9yKGNvbnN0IGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29u
c3QgU3RyaW5nJiBlcnJvclRleHQpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgYXJndW1lbnRzLT5w
dXNoU3RyaW5nKCJyZXBvcnRQcm90b2NvbEVycm9yIik7Ci0gICAgYXJndW1lbnRzLT5wdXNoTnVt
YmVyKGNhbGxJZCk7Ci0gICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKG1ldGhvZCk7Ci0gICAgYXJn
dW1lbnRzLT5wdXNoU3RyaW5nKGVycm9yVGV4dCk7Ci0gICAgbV9pbnNwZWN0b3JDb250cm9sbGVy
LT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9K
U09OU3RyaW5nKCkpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1lc3NhZ2UtPnNldE51bWJlcigic2VxIiwgY2Fs
bElkKTsKKyAgICBtZXNzYWdlLT5zZXRTdHJpbmcoInR5cGUiLCAiZXJyb3IiKTsKKyAgICBtZXNz
YWdlLT5zZXRTdHJpbmcoImRvbWFpbiIsICJpbnNwZWN0b3JQcm90b2NvbCIpOworICAgIG1lc3Nh
Z2UtPnNldFN0cmluZygiY29tbWFuZCIsIG1ldGhvZCk7CisgICAgbWVzc2FnZS0+c2V0Qm9vbCgi
c3VjY2VzcyIsIGZhbHNlKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBlcnJvcnMtPnB1c2hTdHJpbmcoZXJyb3JUZXh0
KTsKKyAgICBtZXNzYWdlLT5zZXRBcnJheSgiZXJyb3JzIiwgZXJyb3JzKTsKKyAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
bWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogRU9GCiAgICAgcmV0dXJuIHNwbGl0KCJcbiIs
ICRyZXBvcnRQcm90b2NvbEVycm9yKTsKIH0KIAorCiBzdWIgZ2VuZXJhdGVCYWNrZW5kRGlzcGF0
Y2hlcgogewogICAgIG15IEBib2R5OwpAQCAtNDAwLDkgKzQwNSwxMSBAQCBzdWIgZ2VuZXJhdGVC
YWNrZW5kRGlzcGF0Y2hlcgogICAgIG15ICRiYWNrZW5kRGlzcGF0Y2hlckJvZHkgPSA8PCAiRU9G
IjsKIHZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQogewotICAgIHR5cGVkZWYgdm9pZCAoJHtiYWNrZW5kQ2xhc3NOYW1lfTo6KkNhbGxIYW5k
bGVyKShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKTsKKyAgICB0eXBlZGVmIHZvaWQg
KCR7YmFja2VuZENsYXNzTmFtZX06OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogbWVzc2FnZU9iamVjdCk7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2Fs
bEhhbmRsZXI+IERpc3BhdGNoTWFwOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hN
YXAsIGRpc3BhdGNoTWFwLCApOworICAgIGxvbmcgY2FsbElkID0gMDsKKwogICAgIGlmIChkaXNw
YXRjaE1hcC5pc0VtcHR5KCkpIHsKICRtYXBFbnRyaWVzCiAgICAgfQpAQCAtNDEwLDM4ICs0MTcs
NTIgQEAgJG1hcEVudHJpZXMKICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlZE1lc3Nh
Z2UgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UpOwogICAgIGlmICghcGFyc2Vk
TWVzc2FnZSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmVwb3J0
UHJvdG9jb2xFcnJvcigwLCAiZGlzcGF0Y2giLCAiRXJyb3I6IEludmFsaWQgbWVzc2FnZSBmb3Jt
YXQuIE1lc3NhZ2Ugc2hvdWxkIGJlIGluIEpTT04gZm9ybWF0LiIpOworICAgICAgICByZXBvcnRQ
cm90b2NvbEVycm9yKGNhbGxJZCwgImRpc3BhdGNoIiwgIkVycm9yOiBJbnZhbGlkIG1lc3NhZ2Ug
Zm9ybWF0LiBNZXNzYWdlIHNob3VsZCBiZSBpbiBKU09OIGZvcm1hdC4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2VPYmplY3Qg
PSBwYXJzZWRNZXNzYWdlLT5hc09iamVjdCgpOworICAgIGlmICghbWVzc2FnZU9iamVjdCkgewor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJv
cihjYWxsSWQsICJkaXNwYXRjaCIsICJFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gVGhl
IG1lc3NhZ2Ugc2hvdWxkIGJlIGEgSlNPTmlmaWVkIG9iamVjdC4iKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gY2FsbElkVmFsdWUgPSBtZXNz
YWdlT2JqZWN0LT5nZXQoInNlcSIpOworICAgIGlmICghY2FsbElkVmFsdWUpIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElk
LCAiZGlzcGF0Y2giLCAiRXJyb3I6IEludmFsaWQgbWVzc2FnZSBmb3JtYXQuICdzZXEnIHByb3Bl
cnR5IHdhcyBub3QgZm91bmQgaW4gdGhlIHJlcXVlc3QuIik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1lc3NhZ2VBcnJheSA9IHBhcnNlZE1l
c3NhZ2UtPmFzQXJyYXkoKTsKLSAgICBpZiAoIW1lc3NhZ2VBcnJheSkgeworICAgIGlmICghY2Fs
bElkVmFsdWUtPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsICJkaXNwYXRjaCIsICJFcnJvcjog
SW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gVGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGEgSlNPTmlmaWVk
IGFycmF5IG9mIGFyZ3VtZW50cy4iKTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxs
SWQsICJkaXNwYXRjaCIsICJFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gdGhlIHR5cGUg
b2YgJ3NlcScgcHJvcGVydHkgc2hvdWxkIGJlIG51bWJlci4iKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmICghbWVzc2FnZUFycmF5LT5sZW5ndGgoKSkgeworICAgIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gY29tbWFuZFZhbHVlID0gbWVzc2FnZU9iamVjdC0+Z2V0KCJjb21tYW5k
Iik7CisgICAgaWYgKCFjb21tYW5kVmFsdWUpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgImRpc3BhdGNoIiwgIkVycm9yOiBJ
bnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBFbXB0eSBtZXNzYWdlIHdhcyByZWNlaXZlZC4iKTsKKyAg
ICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsICJkaXNwYXRjaCIsICJFcnJvcjogSW52
YWxpZCBtZXNzYWdlIGZvcm1hdC4gJ2NvbW1hbmQnIHByb3BlcnR5IHdhc24ndCBmb3VuZC4iKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFN0cmluZyBtZXRob2ROYW1lOwotICAgIGlm
ICghbWVzc2FnZUFycmF5LT5nZXQoMCktPmFzU3RyaW5nKCZtZXRob2ROYW1lKSkgeworICAgIFN0
cmluZyBjb21tYW5kOworICAgIGlmICghY29tbWFuZFZhbHVlLT5hc1N0cmluZygmY29tbWFuZCkp
IHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJlcG9ydFByb3RvY29s
RXJyb3IoMCwgImRpc3BhdGNoIiwgIkVycm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBUaGUg
Zmlyc3QgZWxlbWVudCBvZiB0aGUgbWVzc2FnZSBzaG91bGQgYmUgbWV0aG9kIG5hbWUuIik7Cisg
ICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCAiZGlzcGF0Y2giLCAiRXJyb3I6IElu
dmFsaWQgbWVzc2FnZSBmb3JtYXQuIFRoZSB0eXBlIG9mICdjb21tYW5kJyBwcm9wZXJ0eSBzaG91
bGQgYmUgc3RyaW5nLiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSGFzaE1hcDxT
dHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhv
ZE5hbWUpOworICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0g
ZGlzcGF0Y2hNYXAuZmluZChjb21tYW5kKTsKICAgICBpZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5k
KCkpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoMCwgImRpc3BhdGNoIiwgU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBJbnZhbGlkIG1l
dGhvZCBuYW1lLiAnJXMnIHdhc24ndCBmb3VuZC4iLCBtZXRob2ROYW1lLnV0ZjgoKS5kYXRhKCkp
KTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsICJkaXNwYXRjaCIsIFN0cmlu
Zzo6Zm9ybWF0KCJFcnJvcjogSW52YWxpZCBjb21tYW5kIHdhcyByZWNlaXZlZC4gJyVzJyB3YXNu
J3QgZm91bmQuIiwgY29tbWFuZC51dGY4KCkuZGF0YSgpKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICAoKCp0aGlzKS4qaXQtPnNlY29uZCkobWVzc2FnZUFycmF5KTsKKyAgICAoKCp0
aGlzKS4qaXQtPnNlY29uZCkoY2FsbElkLCBtZXNzYWdlT2JqZWN0LmdldCgpKTsKIH0KIEVPRgog
ICAgIHJldHVybiBzcGxpdCgiXG4iLCAkYmFja2VuZERpc3BhdGNoZXJCb2R5KTsKQEAgLTQ1NSwx
NCArNDc2LDE4IEBAIGJvb2wgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6Z2V0Q29tbWFuZE5hbWUoY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJpbmcqIHJlc3VsdCkKICAgICBSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IHZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKICAgICBp
ZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBhcnJheSA9IHZhbHVlLT5hc0FycmF5KCk7Ci0gICAgaWYgKCFhcnJheSkKKworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIGlm
ICghb2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIWFycmF5LT5sZW5n
dGgoKSkKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGNvbW1hbmRWYWx1ZSA9IG9iamVjdC0+
Z2V0KCJjb21tYW5kIik7CisgICAgaWYgKCFjb21tYW5kVmFsdWUpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICByZXR1cm4gYXJyYXktPmdldCgwKS0+YXNTdHJpbmcocmVzdWx0KTsKKworICAg
IHJldHVybiBjb21tYW5kVmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7CiB9CisKIEVPRgogICAgIHJl
dHVybiBzcGxpdCgiXG4iLCAkbWVzc2FnZVBhcnNlckJvZHkpOwogfQpAQCAtNDcxLDcgKzQ5Niwy
MCBAQCBzdWIgZ2VuZXJhdGVCYWNrZW5kU3R1YkpTCiB7CiAgICAgbXkgJGludGVyZmFjZSA9IHNo
aWZ0OwogICAgIG15IEBiYWNrZW5kRnVuY3Rpb25zID0gZ3JlcCghJF8tPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Im5vdGlmeSJ9LCBAeyRpbnRlcmZhY2UtPmZ1bmN0aW9uc30pOwot
ICAgIG15IEBKU1N0dWJzID0gbWFwKCIgICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZShcIiIgLiAk
Xy0+c2lnbmF0dXJlLT5uYW1lIC4gIlwiKTsiLCBAYmFja2VuZEZ1bmN0aW9ucyk7CisgICAgbXkg
QEpTU3R1YnM7CisKKyAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQGJhY2tlbmRGdW5jdGlvbnMp
IHsKKyAgICAgICAgbXkgJG5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKKyAgICAg
ICAgbXkgJGRvbWFpbiA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiaGFuZGxlciJ9OworICAgICAgICBteSAkYXJndW1lbnROYW1lcyA9IGpvaW4oIiwiLCBtYXAo
IlwiIiAuICRfLT5uYW1lIC4gIlwiOiBudWxsIiwgZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJpbiIs
IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkpKTsKKyAgICAgICAgcHVzaChASlNTdHVicywgIiAg
ICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7IiAuCisgICAgICAgICAgICAiXCJzZXFcIjogMCwg
IiAuCisgICAgICAgICAgICAiXCJ0eXBlXCI6IFwicmVxdWVzdFwiLCAiIC4KKyAgICAgICAgICAg
ICJcImRvbWFpblwiOiBcIiRkb21haW5cIiwiIC4KKyAgICAgICAgICAgICJcImNvbW1hbmRcIjog
XCIkbmFtZVwiLCIgLgorICAgICAgICAgICAgIlwiYXJndW1lbnRzXCI6IHskYXJndW1lbnROYW1l
c30iIC4KKyAgICAgICAgIn0nKTsiKTsKKyAgICB9CiAKICAgICBteSAkSlNTdHVicyA9IGpvaW4o
IlxuIiwgQEpTU3R1YnMpOwogICAgIG15ICRpbnNwZWN0b3JCYWNrZW5kU3R1YkpTID0gPDwgIkVP
RiI7CkBAIC00ODMsMTQgKzUyMSwyNiBAQCAkSlNTdHVicwogfQogCiBXZWJJbnNwZWN0b3IuSW5z
cGVjdG9yQmFja2VuZFN0dWIucHJvdG90eXBlID0gewotICAgIF9yZWdpc3RlckRlbGVnYXRlOiBm
dW5jdGlvbihtZXRob2ROYW1lKQorICAgIF9yZWdpc3RlckRlbGVnYXRlOiBmdW5jdGlvbihjb21t
YW5kSW5mbykKICAgICB7Ci0gICAgICAgIHRoaXNbbWV0aG9kTmFtZV0gPSB0aGlzLnNlbmRNZXNz
YWdlVG9CYWNrZW5kLmJpbmQodGhpcywgbWV0aG9kTmFtZSk7CisgICAgICAgIHZhciBjb21tYW5k
T2JqZWN0ID0gSlNPTi5wYXJzZShjb21tYW5kSW5mbyk7CisgICAgICAgIHRoaXNbY29tbWFuZE9i
amVjdC5jb21tYW5kXSA9IHRoaXMuc2VuZE1lc3NhZ2VUb0JhY2tlbmQuYmluZCh0aGlzLCBjb21t
YW5kSW5mbyk7CiAgICAgfSwKIAogICAgIHNlbmRNZXNzYWdlVG9CYWNrZW5kOiBmdW5jdGlvbigp
CiAgICAgewotICAgICAgICB2YXIgbWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KEFycmF5LnByb3Rv
dHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpOworICAgICAgICB2YXIgYXJncyA9IEFycmF5LnBy
b3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CisgICAgICAgIHZhciByZXF1ZXN0ID0gSlNP
Ti5wYXJzZShhcmdzLnNoaWZ0KCkpOworICAgICAgICBmb3IgKHZhciBrZXkgaW4gcmVxdWVzdC5h
cmd1bWVudHMpIHsKKyAgICAgICAgICAgIGlmIChrZXkgPT09ICJjYWxsSWQiKQorICAgICAgICAg
ICAgICAgIHJlcXVlc3Quc2VxID0gYXJncy5zaGlmdCgpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHJlcXVlc3QuYXJndW1lbnRzW2tleV0gPSBhcmdzLnNoaWZ0KCk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09
PSAiZnVuY3Rpb24iKQorICAgICAgICAgICAgcmVxdWVzdC5zZXEgPSBXZWJJbnNwZWN0b3IuQ2Fs
bGJhY2sud3JhcChhcmdzWzBdKTsKKworICAgICAgICB2YXIgbWVzc2FnZSA9IEpTT04uc3RyaW5n
aWZ5KHJlcXVlc3QpOwogICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3Quc2VuZE1lc3NhZ2VU
b0JhY2tlbmQobWVzc2FnZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKaW5kZXgg
OTJmZjM3Yi4uNzZmYjU1NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
LmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCkBAIC01Nyw2ICs1Nyw3
IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW25vdGlmeV0gdm9pZCByZXNvdXJjZVRyYWNraW5n
V2FzRGlzYWJsZWQoKTsKICAgICAgICAgW25vdGlmeV0gdm9pZCBzZWFyY2hpbmdGb3JOb2RlV2Fz
RW5hYmxlZCgpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIHNlYXJjaGluZ0Zvck5vZGVXYXNEaXNh
YmxlZCgpOworICAgICAgICBbbm90aWZ5XSB2b2lkIHNldEF0dGFjaGVkV2luZG93KG91dCBib29s
ZWFuIGF0dGFjaGVkKTsKICAgICAgICAgW25vdGlmeV0gdm9pZCBzZXRDaGlsZE5vZGVzKG91dCBs
b25nIHBhcmVudElkLCBvdXQgQXJyYXkgbm9kZXMpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIHNl
dERldGFjaGVkUm9vdChvdXQgT2JqZWN0IHJvb3QpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIHNl
dERvY3VtZW50KG91dCBWYWx1ZSByb290KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAKaW5kZXggYWM2NzBjYi4uZjE0ZTg5NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTQyNSw2ICs0MjUsMTUgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChQYXNzT3duUHRyPEluc3Bl
Y3RvckZyb250ZW4KICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50ID0gY2xpZW50OwogfQog
Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEF0dGFjaGVkV2luZG93KGJvb2wgYXR0YWNo
ZWQpCit7CisgICAgaWYgKCFtX3JlbW90ZUZyb250ZW5kKSB7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcmVtb3RlRnJvbnRlbmQt
PnNldEF0dGFjaGVkV2luZG93KGF0dGFjaGVkKTsKK30KKwogdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjppbnNwZWN0ZWRXaW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKEZyYW1lKiBmcmFtZSkKIHsK
ICAgICAvLyBJZiB0aGUgcGFnZSBpcyBzdXBwb3NlZCB0byBzZXJ2ZSBhcyBJbnNwZWN0b3JGcm9u
dGVuZCBub3RpZnkgaW5zcGV0b3IgZnJvbnRlbmQKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaAppbmRleCA4ZDk2MDA1Li5jNjBkZDE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oCkBAIC0xNDcsNiArMTQ3LDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBzZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChQYXNzT3duUHRyPEluc3BlY3RvckZyb250ZW5k
Q2xpZW50PiBjbGllbnQpOwogICAgIGJvb2wgaGFzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKSBj
b25zdCB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50OyB9CisgICAgdm9pZCBzZXRB
dHRhY2hlZFdpbmRvdyhib29sIGF0dGFjaGVkKTsKIAogICAgIHZvaWQgaW5zcGVjdGVkV2luZG93
U2NyaXB0T2JqZWN0Q2xlYXJlZChGcmFtZSopOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCmluZGV4IGI0NWRkMzQuLjBlZTA5ODUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWwuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWwuY3BwCkBAIC0xMjEsMTUgKzEyMSw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbDo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpCiAKIHZvaWQgSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbDo6c2V0QXR0YWNoZWRXaW5kb3coYm9vbCBhdHRhY2hlZCkKIHsKLSAg
ICBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yT2JqOwotICAgIGlmICghU2NyaXB0R2xvYmFsT2Jq
ZWN0OjpnZXQobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiV2ViSW5zcGVjdG9yIiwgd2ViSW5zcGVj
dG9yT2JqKSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24od2ViSW5zcGVjdG9yT2Jq
LCAiZGlzcGF0Y2giKTsgCi0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoInNldEF0dGFjaGVk
V2luZG93Iik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoYXR0YWNoZWQpOwotICAgIGZ1
bmN0aW9uLmNhbGwoKTsKKyAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldEF0dGFjaGVkV2lu
ZG93KGF0dGFjaGVkKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpy
ZXN0b3JlQXR0YWNoZWRXaW5kb3dIZWlnaHQoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aAppbmRleCA0YmMzNmYyLi40NzNhZDIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aApAQCAtMTc2LDYgKzE3Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE9iamVjdChjb25zdCBT
dHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pik7CiAgICAgdm9pZCBzZXRB
cnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KTsKIAor
ICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKICAgICBi
b29sIGdldEJvb2woY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiBvdXRwdXQpIGNvbnN0OwogICAg
IGJvb2wgZ2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlKiBvdXRwdXQpIGNvbnN0
OwogICAgIGJvb2wgZ2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nKiBvdXRwdXQp
IGNvbnN0OwpAQCAtMjI0LDYgKzIyNSwxMSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+ID4gbV9kYXRhOwogfTsKIAoraW5saW5lIEluc3BlY3Rvck9iamVjdDo6
Y29uc3RfaXRlcmF0b3IgSW5zcGVjdG9yT2JqZWN0OjpmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLmZpbmQobmFtZSk7Cit9CisKIGlubGluZSB2b2lk
IEluc3BlY3Rvck9iamVjdDo6c2V0Qm9vbChjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgdmFsdWUp
CiB7CiAgICAgc2V0VmFsdWUobmFtZSwgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZhbHVl
KSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbGJhY2suanMg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbGJhY2suanMKaW5kZXggZDgxNjNmZS4u
MDYyMWZkMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxiYWNr
LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsYmFjay5qcwpAQCAtNDIs
OSArNDIsOCBAQCBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvdG90eXBlID0gewogICAgICAgICBy
ZXR1cm4gY2FsbGJhY2tJZDsKICAgICB9LAogCi0gICAgcHJvY2Vzc1Jlc3BvbnNlOiBmdW5jdGlv
bihjYWxsYmFja0lkLCBvcHRfdmFyYXJnKQorICAgIHByb2Nlc3NSZXNwb25zZTogZnVuY3Rpb24o
Y2FsbGJhY2tJZCwgYXJncykKICAgICB7Ci0gICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90
eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKICAgICAgICAgdmFyIGNhbGxiYWNrID0gdGhp
cy5fY2FsbGJhY2tzW2NhbGxiYWNrSWRdOwogICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBh
cmdzKTsKICAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1tjYWxsYmFja0lkXTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4IDUyYWU3MzguLjk5NjRkNDUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtNTg5LDIwICs1
ODksMTIgQEAgdmFyIHdpbmRvd0xvYWRlZCA9IGZ1bmN0aW9uKCkKIAogd2luZG93LmFkZEV2ZW50
TGlzdGVuZXIoImxvYWQiLCB3aW5kb3dMb2FkZWQsIGZhbHNlKTsKIAotV2ViSW5zcGVjdG9yLmRp
c3BhdGNoID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG1ldGhvZE5hbWUgPSBhcmd1bWVudHNbMF07
Ci0gICAgdmFyIHBhcmFtZXRlcnMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVu
dHMsIDEpOwotCitXZWJJbnNwZWN0b3IuZGlzcGF0Y2ggPSBmdW5jdGlvbihtZXNzYWdlKSB7CiAg
ICAgLy8gV2UnZCBsaWtlIHRvIGVuZm9yY2UgYXN5bmNocm9ub3VzIGludGVyYWN0aW9uIGJldHdl
ZW4gdGhlIGluc3BlY3RvciBjb250cm9sbGVyIGFuZCB0aGUgZnJvbnRlbmQuCiAgICAgLy8gVGhp
cyBpcyBpbXBvcnRhbnQgdG8gTGF5b3V0VGVzdHMuCiAgICAgZnVuY3Rpb24gZGVsYXlEaXNwYXRj
aCgpCiAgICAgewotICAgICAgICBpZiAoIShtZXRob2ROYW1lIGluIFdlYkluc3BlY3RvcikpIHsK
LSAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkF0dGVtcHRlZCB0byBkaXNwYXRjaCB1bmltcGxl
bWVudGVkIFdlYkluc3BlY3RvciBtZXRob2Q6ICVzIiwgbWV0aG9kTmFtZSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBXZWJJbnNwZWN0b3JbbWV0aG9kTmFtZV0u
YXBwbHkoV2ViSW5zcGVjdG9yLCBwYXJhbWV0ZXJzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yX3N5
bmNEaXNwYXRjaChtZXNzYWdlKTsKICAgICAgICAgV2ViSW5zcGVjdG9yLnBlbmRpbmdEaXNwYXRj
aGVzLS07CiAgICAgfQogICAgIFdlYkluc3BlY3Rvci5wZW5kaW5nRGlzcGF0Y2hlcysrOwpAQCAt
NjEyLDIxICs2MDQsNDEgQEAgV2ViSW5zcGVjdG9yLmRpc3BhdGNoID0gZnVuY3Rpb24oKSB7CiAv
LyBUaGlzIGZ1bmN0aW9uIGlzIHB1cnBvc2VseSBwdXQgaW50byB0aGUgZ2xvYmFsIHNjb3BlIGZv
ciBlYXN5IGFjY2Vzcy4KIFdlYkluc3BlY3Rvcl9zeW5jRGlzcGF0Y2ggPSBmdW5jdGlvbihtZXNz
YWdlKQogewotICAgIHZhciBhcmdzID0gSlNPTi5wYXJzZShtZXNzYWdlKTsKLSAgICB2YXIgbWV0
aG9kTmFtZSA9IGFyZ3NbMF07Ci0gICAgdmFyIHBhcmFtZXRlcnMgPSBhcmdzLnNsaWNlKDEpOwot
ICAgIFdlYkluc3BlY3RvclttZXRob2ROYW1lXS5hcHBseShXZWJJbnNwZWN0b3IsIHBhcmFtZXRl
cnMpOworICAgIHZhciBtZXNzYWdlT2JqZWN0ID0gKHR5cGVvZiBtZXNzYWdlID09PSAic3RyaW5n
IikgPyBKU09OLnBhcnNlKG1lc3NhZ2UpIDogbWVzc2FnZTsKKyAgICBpZiAobWVzc2FnZU9iamVj
dC50eXBlID09PSAicmVzcG9uc2UiICYmICFtZXNzYWdlT2JqZWN0LnN1Y2Nlc3MpIHsKKyAgICAg
ICAgV2ViSW5zcGVjdG9yLnJlbW92ZVJlc3BvbnNlQ2FsbGJhY2tFbnRyeShtZXNzYWdlT2JqZWN0
LnNlcSkKKyAgICAgICAgV2ViSW5zcGVjdG9yLnJlcG9ydFByb3RvY29sRXJyb3IobWVzc2FnZU9i
amVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgYXJndW1lbnRzID0gW107
CisgICAgaWYgKG1lc3NhZ2VPYmplY3QuZGF0YSkKKyAgICAgICAgZm9yICh2YXIga2V5IGluIG1l
c3NhZ2VPYmplY3QuZGF0YSkKKyAgICAgICAgICAgIGFyZ3VtZW50cy5wdXNoKG1lc3NhZ2VPYmpl
Y3QuZGF0YVtrZXldKTsKKworICAgIGlmIChtZXNzYWdlT2JqZWN0LnR5cGUgPT09ICJldmVudCIp
IHsKKyAgICAgICAgaWYgKCFtZXNzYWdlT2JqZWN0LmV2ZW50IGluIFdlYkluc3BlY3Rvcikgewor
ICAgICAgICAgICAgY29uc29sZS5lcnJvcigiQXR0ZW1wdGVkIHRvIGRpc3BhdGNoIHVuaW1wbGVt
ZW50ZWQgV2ViSW5zcGVjdG9yIG1ldGhvZDogJXMiLCBtZXNzYWdlT2JqZWN0LmV2ZW50KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBXZWJJbnNwZWN0b3JbbWVzc2Fn
ZU9iamVjdC5ldmVudF0uYXBwbHkoV2ViSW5zcGVjdG9yLCBhcmd1bWVudHMpOworICAgIH0KKwor
ICAgIGlmIChtZXNzYWdlT2JqZWN0LnR5cGUgPT09ICJyZXNwb25zZSIpCisgICAgICAgIFdlYklu
c3BlY3Rvci5wcm9jZXNzUmVzcG9uc2UobWVzc2FnZU9iamVjdC5zZXEsIGFyZ3VtZW50cyk7CiB9
CiAKLVdlYkluc3BlY3Rvci5kaXNwYXRjaE1lc3NhZ2VGcm9tQmFja2VuZCA9IGZ1bmN0aW9uKGFy
Z3VtZW50cykKK1dlYkluc3BlY3Rvci5kaXNwYXRjaE1lc3NhZ2VGcm9tQmFja2VuZCA9IGZ1bmN0
aW9uKG1lc3NhZ2VPYmplY3QpCiB7Ci0gICAgV2ViSW5zcGVjdG9yLmRpc3BhdGNoLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7CisgICAgV2ViSW5zcGVjdG9yLmRpc3BhdGNoKG1lc3NhZ2VPYmplY3Qp
OwogfQogCi1XZWJJbnNwZWN0b3IucmVwb3J0UHJvdG9jb2xFcnJvciA9IGZ1bmN0aW9uKGNhbGxJ
ZCwgbWV0aG9kTmFtZSwgZXJyb3JUZXh0KQorV2ViSW5zcGVjdG9yLnJlcG9ydFByb3RvY29sRXJy
b3IgPSBmdW5jdGlvbihtZXNzYWdlT2JqZWN0KQogewotICAgIGNvbnNvbGUuZXJyb3IoIkluc3Bl
Y3RvckJhY2tlbmQuIiArIG1ldGhvZE5hbWUgKyAiIGZhaWxlZCB3aXRoIGVycm9yIHRleHQ6ICci
ICsgZXJyb3JUZXh0ICsgIiciKTsKLSAgICBXZWJJbnNwZWN0b3IucmVtb3ZlUmVzcG9uc2VDYWxs
YmFja0VudHJ5KGNhbGxJZCk7CisgICAgY29uc29sZS5sb2coIkVycm9yOiBJbnNwZWN0b3JCYWNr
ZW5kLiIgKyBtZXNzYWdlT2JqZWN0LmNvbW1hbmQgKyAiIGZhaWxlZC4iKTsKKyAgICBmb3IgKHZh
ciBlcnJvciBpbiBtZXNzYWdlT2JqZWN0LmVycm9ycykKKyAgICAgICAgY29uc29sZS5sb2coIiAg
ICAiICsgZXJyb3IpOworICAgIFdlYkluc3BlY3Rvci5yZW1vdmVSZXNwb25zZUNhbGxiYWNrRW50
cnkobWVzc2FnZU9iamVjdC5zZXEpOwogfQogCiBXZWJJbnNwZWN0b3Iud2luZG93UmVzaXplID0g
ZnVuY3Rpb24oZXZlbnQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>65097</attachid>
            <date>2010-08-23 03:19:11 -0700</date>
            <delta_ts>2010-08-23 03:19:11 -0700</delta_ts>
            <desc>sample: InspectorBackendStub.js</desc>
            <filename>InspectorBackendStub.js</filename>
            <type>text/plain</type>
            <size>13816</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">Ly8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgoK
V2ViSW5zcGVjdG9yLkluc3BlY3RvckJhY2tlbmRTdHViID0gZnVuY3Rpb24oKQp7CiAgICB0aGlz
Ll9yZWdpc3RlckRlbGVnYXRlKCd7InNlcSI6IDAsICJ0eXBlIjogInJlcXVlc3QiLCAiZG9tYWlu
IjogIkNvbnRyb2xsZXIiLCJjb21tYW5kIjogInN0b3JlTGFzdEFjdGl2ZVBhbmVsIiwiYXJndW1l
bnRzIjogeyJwYW5lbE5hbWUiOiBudWxsfX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUo
J3sic2VxIjogMCwgInR5cGUiOiAicmVxdWVzdCIsICJkb21haW4iOiAiQ29udHJvbGxlciIsImNv
bW1hbmQiOiAic2F2ZUFwcGxpY2F0aW9uU2V0dGluZ3MiLCJhcmd1bWVudHMiOiB7InNldHRpbmdz
IjogbnVsbH19Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7InNlcSI6IDAsICJ0eXBl
IjogInJlcXVlc3QiLCAiZG9tYWluIjogIkNvbnRyb2xsZXIiLCJjb21tYW5kIjogInNhdmVTZXNz
aW9uU2V0dGluZ3MiLCJhcmd1bWVudHMiOiB7InNldHRpbmdzIjogbnVsbH19Jyk7CiAgICB0aGlz
Ll9yZWdpc3RlckRlbGVnYXRlKCd7InNlcSI6IDAsICJ0eXBlIjogInJlcXVlc3QiLCAiZG9tYWlu
IjogIkNvbnRyb2xsZXIiLCJjb21tYW5kIjogImVuYWJsZVNlYXJjaGluZ0Zvck5vZGUiLCJhcmd1
bWVudHMiOiB7fX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sic2VxIjogMCwgInR5
cGUiOiAicmVxdWVzdCIsICJkb21haW4iOiAiQ29udHJvbGxlciIsImNvbW1hbmQiOiAiZGlzYWJs
ZVNlYXJjaGluZ0Zvck5vZGUiLCJhcmd1bWVudHMiOiB7fX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVy
RGVsZWdhdGUoJ3sic2VxIjogMCwgInR5cGUiOiAicmVxdWVzdCIsICJkb21haW4iOiAiQ29udHJv
bGxlciIsImNvbW1hbmQiOiAiZW5hYmxlTW9uaXRvcmluZ1hIUiIsImFyZ3VtZW50cyI6IHt9fScp
OwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1ZXN0
IiwgImRvbWFpbiI6ICJDb250cm9sbGVyIiwiY29tbWFuZCI6ICJkaXNhYmxlTW9uaXRvcmluZ1hI
UiIsImFyZ3VtZW50cyI6IHt9fScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEi
OiAwLCAidHlwZSI6ICJyZXF1ZXN0IiwgImRvbWFpbiI6ICJDb250cm9sbGVyIiwiY29tbWFuZCI6
ICJlbmFibGVSZXNvdXJjZVRyYWNraW5nIiwiYXJndW1lbnRzIjogeyJhbHdheXMiOiBudWxsfX0n
KTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sic2VxIjogMCwgInR5cGUiOiAicmVxdWVz
dCIsICJkb21haW4iOiAiQ29udHJvbGxlciIsImNvbW1hbmQiOiAiZGlzYWJsZVJlc291cmNlVHJh
Y2tpbmciLCJhcmd1bWVudHMiOiB7ImFsd2F5cyI6IG51bGx9fScpOwogICAgdGhpcy5fcmVnaXN0
ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1ZXN0IiwgImRvbWFpbiI6ICJDb250
cm9sbGVyIiwiY29tbWFuZCI6ICJnZXRSZXNvdXJjZUNvbnRlbnQiLCJhcmd1bWVudHMiOiB7ImNh
bGxJZCI6IG51bGwsImlkZW50aWZpZXIiOiBudWxsfX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVs
ZWdhdGUoJ3sic2VxIjogMCwgInR5cGUiOiAicmVxdWVzdCIsICJkb21haW4iOiAiQ29udHJvbGxl
ciIsImNvbW1hbmQiOiAicmVsb2FkUGFnZSIsImFyZ3VtZW50cyI6IHt9fScpOwogICAgdGhpcy5f
cmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1ZXN0IiwgImRvbWFpbiI6
ICJDb250cm9sbGVyIiwiY29tbWFuZCI6ICJzdGFydFRpbWVsaW5lUHJvZmlsZXIiLCJhcmd1bWVu
dHMiOiB7fX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sic2VxIjogMCwgInR5cGUi
OiAicmVxdWVzdCIsICJkb21haW4iOiAiQ29udHJvbGxlciIsImNvbW1hbmQiOiAic3RvcFRpbWVs
aW5lUHJvZmlsZXIiLCJhcmd1bWVudHMiOiB7fX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdh
dGUoJ3sic2VxIjogMCwgInR5cGUiOiAicmVxdWVzdCIsICJkb21haW4iOiAiQmFja2VuZCIsImNv
bW1hbmQiOiAiZW5hYmxlRGVidWdnZXIiLCJhcmd1bWVudHMiOiB7ImFsd2F5cyI6IG51bGx9fScp
OwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1ZXN0
IiwgImRvbWFpbiI6ICJDb250cm9sbGVyIiwiY29tbWFuZCI6ICJkaXNhYmxlRGVidWdnZXIiLCJh
cmd1bWVudHMiOiB7ImFsd2F5cyI6IG51bGx9fScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0
ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1ZXN0IiwgImRvbWFpbiI6ICJEZWJ1ZyIsImNvbW1h
bmQiOiAic2V0QnJlYWtwb2ludCIsImFyZ3VtZW50cyI6IHsiY2FsbElkIjogbnVsbCwic291cmNl
SUQiOiBudWxsLCJsaW5lTnVtYmVyIjogbnVsbCwiZW5hYmxlZCI6IG51bGwsImNvbmRpdGlvbiI6
IG51bGx9fScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6
ICJyZXF1ZXN0IiwgImRvbWFpbiI6ICJEZWJ1ZyIsImNvbW1hbmQiOiAicmVtb3ZlQnJlYWtwb2lu
dCIsImFyZ3VtZW50cyI6IHsic291cmNlSUQiOiBudWxsLCJsaW5lTnVtYmVyIjogbnVsbH19Jyk7
CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7InNlcSI6IDAsICJ0eXBlIjogInJlcXVlc3Qi
LCAiZG9tYWluIjogIkRlYnVnIiwiY29tbWFuZCI6ICJhY3RpdmF0ZUJyZWFrcG9pbnRzIiwiYXJn
dW1lbnRzIjoge319Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7InNlcSI6IDAsICJ0
eXBlIjogInJlcXVlc3QiLCAiZG9tYWluIjogIkRlYnVnIiwiY29tbWFuZCI6ICJkZWFjdGl2YXRl
QnJlYWtwb2ludHMiLCJhcmd1bWVudHMiOiB7fX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdh
dGUoJ3sic2VxIjogMCwgInR5cGUiOiAicmVxdWVzdCIsICJkb21haW4iOiAiRGVidWciLCJjb21t
YW5kIjogInBhdXNlIiwiYXJndW1lbnRzIjoge319Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVn
YXRlKCd7InNlcSI6IDAsICJ0eXBlIjogInJlcXVlc3QiLCAiZG9tYWluIjogIkRlYnVnIiwiY29t
bWFuZCI6ICJyZXN1bWUiLCJhcmd1bWVudHMiOiB7fX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVs
ZWdhdGUoJ3sic2VxIjogMCwgInR5cGUiOiAicmVxdWVzdCIsICJkb21haW4iOiAiRGVidWciLCJj
b21tYW5kIjogInN0ZXBPdmVyU3RhdGVtZW50IiwiYXJndW1lbnRzIjoge319Jyk7CiAgICB0aGlz
Ll9yZWdpc3RlckRlbGVnYXRlKCd7InNlcSI6IDAsICJ0eXBlIjogInJlcXVlc3QiLCAiZG9tYWlu
IjogIkRlYnVnIiwiY29tbWFuZCI6ICJzdGVwSW50b1N0YXRlbWVudCIsImFyZ3VtZW50cyI6IHt9
fScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1
ZXN0IiwgImRvbWFpbiI6ICJEZWJ1ZyIsImNvbW1hbmQiOiAic3RlcE91dE9mRnVuY3Rpb24iLCJh
cmd1bWVudHMiOiB7fX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sic2VxIjogMCwg
InR5cGUiOiAicmVxdWVzdCIsICJkb21haW4iOiAiRGVidWciLCJjb21tYW5kIjogInNldFBhdXNl
T25FeGNlcHRpb25zU3RhdGUiLCJhcmd1bWVudHMiOiB7InBhdXNlT25FeGNlcHRpb25zU3RhdGUi
OiBudWxsfX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sic2VxIjogMCwgInR5cGUi
OiAicmVxdWVzdCIsICJkb21haW4iOiAiRGVidWciLCJjb21tYW5kIjogImVkaXRTY3JpcHRTb3Vy
Y2UiLCJhcmd1bWVudHMiOiB7ImNhbGxJZCI6IG51bGwsInNvdXJjZUlEIjogbnVsbCwibmV3Q29u
dGVudCI6IG51bGx9fScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAi
dHlwZSI6ICJyZXF1ZXN0IiwgImRvbWFpbiI6ICJEZWJ1ZyIsImNvbW1hbmQiOiAiZ2V0U2NyaXB0
U291cmNlIiwiYXJndW1lbnRzIjogeyJjYWxsSWQiOiBudWxsLCJzb3VyY2VJRCI6IG51bGx9fScp
OwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1ZXN0
IiwgImRvbWFpbiI6ICJDb250cm9sbGVyIiwiY29tbWFuZCI6ICJlbmFibGVQcm9maWxlciIsImFy
Z3VtZW50cyI6IHsiYWx3YXlzIjogbnVsbH19Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRl
KCd7InNlcSI6IDAsICJ0eXBlIjogInJlcXVlc3QiLCAiZG9tYWluIjogIkNvbnRyb2xsZXIiLCJj
b21tYW5kIjogImRpc2FibGVQcm9maWxlciIsImFyZ3VtZW50cyI6IHsiYWx3YXlzIjogbnVsbH19
Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7InNlcSI6IDAsICJ0eXBlIjogInJlcXVl
c3QiLCAiZG9tYWluIjogIkNvbnRyb2xsZXIiLCJjb21tYW5kIjogInN0YXJ0UHJvZmlsaW5nIiwi
YXJndW1lbnRzIjoge319Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7InNlcSI6IDAs
ICJ0eXBlIjogInJlcXVlc3QiLCAiZG9tYWluIjogIkNvbnRyb2xsZXIiLCJjb21tYW5kIjogInN0
b3BQcm9maWxpbmciLCJhcmd1bWVudHMiOiB7fX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdh
dGUoJ3sic2VxIjogMCwgInR5cGUiOiAicmVxdWVzdCIsICJkb21haW4iOiAiQ29udHJvbGxlciIs
ImNvbW1hbmQiOiAiZ2V0UHJvZmlsZUhlYWRlcnMiLCJhcmd1bWVudHMiOiB7ImNhbGxJZCI6IG51
bGx9fScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJy
ZXF1ZXN0IiwgImRvbWFpbiI6ICJDb250cm9sbGVyIiwiY29tbWFuZCI6ICJnZXRQcm9maWxlIiwi
YXJndW1lbnRzIjogeyJjYWxsSWQiOiBudWxsLCJ1aWQiOiBudWxsfX0nKTsKICAgIHRoaXMuX3Jl
Z2lzdGVyRGVsZWdhdGUoJ3sic2VxIjogMCwgInR5cGUiOiAicmVxdWVzdCIsICJkb21haW4iOiAi
Q29udHJvbGxlciIsImNvbW1hbmQiOiAicmVtb3ZlUHJvZmlsZSIsImFyZ3VtZW50cyI6IHsidWlk
IjogbnVsbH19Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7InNlcSI6IDAsICJ0eXBl
IjogInJlcXVlc3QiLCAiZG9tYWluIjogIkNvbnRyb2xsZXIiLCJjb21tYW5kIjogImNsZWFyUHJv
ZmlsZXMiLCJhcmd1bWVudHMiOiB7fX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3si
c2VxIjogMCwgInR5cGUiOiAicmVxdWVzdCIsICJkb21haW4iOiAiQmFja2VuZCIsImNvbW1hbmQi
OiAidGFrZUhlYXBTbmFwc2hvdCIsImFyZ3VtZW50cyI6IHt9fScpOwogICAgdGhpcy5fcmVnaXN0
ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1ZXN0IiwgImRvbWFpbiI6ICJCYWNr
ZW5kIiwiY29tbWFuZCI6ICJnZXRQcm9maWxlckxvZ0xpbmVzIiwiYXJndW1lbnRzIjogeyJjYWxs
SWQiOiBudWxsLCJpblBvc2l0aW9uIjogbnVsbH19Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVn
YXRlKCd7InNlcSI6IDAsICJ0eXBlIjogInJlcXVlc3QiLCAiZG9tYWluIjogIkJhY2tlbmQiLCJj
b21tYW5kIjogInNldEluamVjdGVkU2NyaXB0U291cmNlIiwiYXJndW1lbnRzIjogeyJzY3JpcHRT
b3VyY2UiOiBudWxsfX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sic2VxIjogMCwg
InR5cGUiOiAicmVxdWVzdCIsICJkb21haW4iOiAiQmFja2VuZCIsImNvbW1hbmQiOiAiZGlzcGF0
Y2hPbkluamVjdGVkU2NyaXB0IiwiYXJndW1lbnRzIjogeyJjYWxsSWQiOiBudWxsLCJpbmplY3Rl
ZFNjcmlwdElkIjogbnVsbCwibWV0aG9kTmFtZSI6IG51bGwsImFyZ3VtZW50cyI6IG51bGx9fScp
OwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1ZXN0
IiwgImRvbWFpbiI6ICJDb250cm9sbGVyIiwiY29tbWFuZCI6ICJhZGRTY3JpcHRUb0V2YWx1YXRl
T25Mb2FkIiwiYXJndW1lbnRzIjogeyJzY3JpcHRTb3VyY2UiOiBudWxsfX0nKTsKICAgIHRoaXMu
X3JlZ2lzdGVyRGVsZWdhdGUoJ3sic2VxIjogMCwgInR5cGUiOiAicmVxdWVzdCIsICJkb21haW4i
OiAiQ29udHJvbGxlciIsImNvbW1hbmQiOiAicmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxv
YWQiLCJhcmd1bWVudHMiOiB7fX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sic2Vx
IjogMCwgInR5cGUiOiAicmVxdWVzdCIsICJkb21haW4iOiAiRE9NIiwiY29tbWFuZCI6ICJnZXRD
aGlsZE5vZGVzIiwiYXJndW1lbnRzIjogeyJjYWxsSWQiOiBudWxsLCJub2RlSWQiOiBudWxsfX0n
KTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sic2VxIjogMCwgInR5cGUiOiAicmVxdWVz
dCIsICJkb21haW4iOiAiRE9NIiwiY29tbWFuZCI6ICJzZXRBdHRyaWJ1dGUiLCJhcmd1bWVudHMi
OiB7ImNhbGxJZCI6IG51bGwsImVsZW1lbnRJZCI6IG51bGwsIm5hbWUiOiBudWxsLCJ2YWx1ZSI6
IG51bGx9fScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6
ICJyZXF1ZXN0IiwgImRvbWFpbiI6ICJET00iLCJjb21tYW5kIjogInJlbW92ZUF0dHJpYnV0ZSIs
ImFyZ3VtZW50cyI6IHsiY2FsbElkIjogbnVsbCwiZWxlbWVudElkIjogbnVsbCwibmFtZSI6IG51
bGx9fScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJy
ZXF1ZXN0IiwgImRvbWFpbiI6ICJET00iLCJjb21tYW5kIjogInNldFRleHROb2RlVmFsdWUiLCJh
cmd1bWVudHMiOiB7ImNhbGxJZCI6IG51bGwsIm5vZGVJZCI6IG51bGwsInZhbHVlIjogbnVsbH19
Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7InNlcSI6IDAsICJ0eXBlIjogInJlcXVl
c3QiLCAiZG9tYWluIjogIkRPTSIsImNvbW1hbmQiOiAiZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2Rl
IiwiYXJndW1lbnRzIjogeyJjYWxsSWQiOiBudWxsLCJub2RlSWQiOiBudWxsfX0nKTsKICAgIHRo
aXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sic2VxIjogMCwgInR5cGUiOiAicmVxdWVzdCIsICJkb21h
aW4iOiAiRE9NIiwiY29tbWFuZCI6ICJjb3B5Tm9kZSIsImFyZ3VtZW50cyI6IHsibm9kZUlkIjog
bnVsbH19Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7InNlcSI6IDAsICJ0eXBlIjog
InJlcXVlc3QiLCAiZG9tYWluIjogIkRPTSIsImNvbW1hbmQiOiAicmVtb3ZlTm9kZSIsImFyZ3Vt
ZW50cyI6IHsiY2FsbElkIjogbnVsbCwibm9kZUlkIjogbnVsbH19Jyk7CiAgICB0aGlzLl9yZWdp
c3RlckRlbGVnYXRlKCd7InNlcSI6IDAsICJ0eXBlIjogInJlcXVlc3QiLCAiZG9tYWluIjogIkRP
TSIsImNvbW1hbmQiOiAiY2hhbmdlVGFnTmFtZSIsImFyZ3VtZW50cyI6IHsiY2FsbElkIjogbnVs
bCwibm9kZUlkIjogbnVsbCwibmV3VGFnTmFtZSI6IG51bGx9fScpOwogICAgdGhpcy5fcmVnaXN0
ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1ZXN0IiwgImRvbWFpbiI6ICJET00i
LCJjb21tYW5kIjogImdldE91dGVySFRNTCIsImFyZ3VtZW50cyI6IHsiY2FsbElkIjogbnVsbCwi
bm9kZUlkIjogbnVsbH19Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7InNlcSI6IDAs
ICJ0eXBlIjogInJlcXVlc3QiLCAiZG9tYWluIjogIkRPTSIsImNvbW1hbmQiOiAic2V0T3V0ZXJI
VE1MIiwiYXJndW1lbnRzIjogeyJjYWxsSWQiOiBudWxsLCJub2RlSWQiOiBudWxsLCJvdXRlckhU
TUwiOiBudWxsfX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sic2VxIjogMCwgInR5
cGUiOiAicmVxdWVzdCIsICJkb21haW4iOiAiRE9NIiwiY29tbWFuZCI6ICJhZGRJbnNwZWN0ZWRO
b2RlIiwiYXJndW1lbnRzIjogeyJub2RlSWQiOiBudWxsfX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVy
RGVsZWdhdGUoJ3sic2VxIjogMCwgInR5cGUiOiAicmVxdWVzdCIsICJkb21haW4iOiAiRE9NIiwi
Y29tbWFuZCI6ICJwZXJmb3JtU2VhcmNoIiwiYXJndW1lbnRzIjogeyJxdWVyeSI6IG51bGwsInJ1
blN5bmNocm9ub3VzbHkiOiBudWxsfX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3si
c2VxIjogMCwgInR5cGUiOiAicmVxdWVzdCIsICJkb21haW4iOiAiRE9NIiwiY29tbWFuZCI6ICJz
ZWFyY2hDYW5jZWxlZCIsImFyZ3VtZW50cyI6IHt9fScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxl
Z2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1ZXN0IiwgImRvbWFpbiI6ICJET00iLCJjb21t
YW5kIjogInB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZCIsImFyZ3VtZW50cyI6IHsiY2FsbElkIjog
bnVsbCwicGF0aCI6IG51bGx9fScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEi
OiAwLCAidHlwZSI6ICJyZXF1ZXN0IiwgImRvbWFpbiI6ICJET00iLCJjb21tYW5kIjogInNldERP
TUJyZWFrcG9pbnQiLCJhcmd1bWVudHMiOiB7Im5vZGVJZCI6IG51bGwsInR5cGUiOiBudWxsfX0n
KTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sic2VxIjogMCwgInR5cGUiOiAicmVxdWVz
dCIsICJkb21haW4iOiAiRE9NIiwiY29tbWFuZCI6ICJyZW1vdmVET01CcmVha3BvaW50IiwiYXJn
dW1lbnRzIjogeyJub2RlSWQiOiBudWxsLCJ0eXBlIjogbnVsbH19Jyk7CiAgICB0aGlzLl9yZWdp
c3RlckRlbGVnYXRlKCd7InNlcSI6IDAsICJ0eXBlIjogInJlcXVlc3QiLCAiZG9tYWluIjogIkNv
bnRyb2xsZXIiLCJjb21tYW5kIjogImNsZWFyQ29uc29sZU1lc3NhZ2VzIiwiYXJndW1lbnRzIjog
e319Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7InNlcSI6IDAsICJ0eXBlIjogInJl
cXVlc3QiLCAiZG9tYWluIjogIkNvbnRyb2xsZXIiLCJjb21tYW5kIjogImhpZ2hsaWdodERPTU5v
ZGUiLCJhcmd1bWVudHMiOiB7Im5vZGVJZCI6IG51bGx9fScpOwogICAgdGhpcy5fcmVnaXN0ZXJE
ZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1ZXN0IiwgImRvbWFpbiI6ICJDb250cm9s
bGVyIiwiY29tbWFuZCI6ICJoaWRlRE9NTm9kZUhpZ2hsaWdodCIsImFyZ3VtZW50cyI6IHt9fScp
OwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1ZXN0
IiwgImRvbWFpbiI6ICJDb250cm9sbGVyIiwiY29tbWFuZCI6ICJvcGVuSW5JbnNwZWN0ZWRXaW5k
b3ciLCJhcmd1bWVudHMiOiB7InVybCI6IG51bGx9fScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxl
Z2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1ZXN0IiwgImRvbWFpbiI6ICJET00iLCJjb21t
YW5kIjogImdldFN0eWxlcyIsImFyZ3VtZW50cyI6IHsiY2FsbElkIjogbnVsbCwibm9kZUlkIjog
bnVsbCwiYXV0aE9ubHkiOiBudWxsfX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3si
c2VxIjogMCwgInR5cGUiOiAicmVxdWVzdCIsICJkb21haW4iOiAiRE9NIiwiY29tbWFuZCI6ICJn
ZXRBbGxTdHlsZXMiLCJhcmd1bWVudHMiOiB7ImNhbGxJZCI6IG51bGx9fScpOwogICAgdGhpcy5f
cmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1ZXN0IiwgImRvbWFpbiI6
ICJET00iLCJjb21tYW5kIjogImdldElubGluZVN0eWxlIiwiYXJndW1lbnRzIjogeyJjYWxsSWQi
OiBudWxsLCJub2RlSWQiOiBudWxsfX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3si
c2VxIjogMCwgInR5cGUiOiAicmVxdWVzdCIsICJkb21haW4iOiAiRE9NIiwiY29tbWFuZCI6ICJn
ZXRDb21wdXRlZFN0eWxlIiwiYXJndW1lbnRzIjogeyJjYWxsSWQiOiBudWxsLCJub2RlSWQiOiBu
dWxsfX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sic2VxIjogMCwgInR5cGUiOiAi
cmVxdWVzdCIsICJkb21haW4iOiAiRE9NIiwiY29tbWFuZCI6ICJnZXRTdHlsZVNoZWV0IiwiYXJn
dW1lbnRzIjogeyJjYWxsSWQiOiBudWxsLCJzdHlsZVNoZWV0SWQiOiBudWxsfX0nKTsKICAgIHRo
aXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sic2VxIjogMCwgInR5cGUiOiAicmVxdWVzdCIsICJkb21h
aW4iOiAiRE9NIiwiY29tbWFuZCI6ICJnZXRSdWxlUmFuZ2VzIiwiYXJndW1lbnRzIjogeyJjYWxs
SWQiOiBudWxsLCJzdHlsZVNoZWV0SWQiOiBudWxsfX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVs
ZWdhdGUoJ3sic2VxIjogMCwgInR5cGUiOiAicmVxdWVzdCIsICJkb21haW4iOiAiRE9NIiwiY29t
bWFuZCI6ICJhcHBseVN0eWxlVGV4dCIsImFyZ3VtZW50cyI6IHsiY2FsbElkIjogbnVsbCwic3R5
bGVJZCI6IG51bGwsInN0eWxlVGV4dCI6IG51bGwsInByb3BlcnR5TmFtZSI6IG51bGx9fScpOwog
ICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1ZXN0Iiwg
ImRvbWFpbiI6ICJET00iLCJjb21tYW5kIjogInNldFN0eWxlVGV4dCIsImFyZ3VtZW50cyI6IHsi
Y2FsbElkIjogbnVsbCwic3R5bGVJZCI6IG51bGwsInN0eWxlVGV4dCI6IG51bGx9fScpOwogICAg
dGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1ZXN0IiwgImRv
bWFpbiI6ICJET00iLCJjb21tYW5kIjogInNldFN0eWxlUHJvcGVydHkiLCJhcmd1bWVudHMiOiB7
ImNhbGxJZCI6IG51bGwsInN0eWxlSWQiOiBudWxsLCJuYW1lIjogbnVsbCwidmFsdWUiOiBudWxs
fX0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sic2VxIjogMCwgInR5cGUiOiAicmVx
dWVzdCIsICJkb21haW4iOiAiRE9NIiwiY29tbWFuZCI6ICJ0b2dnbGVTdHlsZUVuYWJsZWQiLCJh
cmd1bWVudHMiOiB7ImNhbGxJZCI6IG51bGwsInN0eWxlSWQiOiBudWxsLCJwcm9wZXJ0eU5hbWUi
OiBudWxsLCJkaXNhYmxlZCI6IG51bGx9fScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgn
eyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1ZXN0IiwgImRvbWFpbiI6ICJET00iLCJjb21tYW5kIjog
InNldFJ1bGVTZWxlY3RvciIsImFyZ3VtZW50cyI6IHsiY2FsbElkIjogbnVsbCwicnVsZUlkIjog
bnVsbCwic2VsZWN0b3IiOiBudWxsLCJzZWxlY3RlZE5vZGVJZCI6IG51bGx9fScpOwogICAgdGhp
cy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1ZXN0IiwgImRvbWFp
biI6ICJET00iLCJjb21tYW5kIjogImFkZFJ1bGUiLCJhcmd1bWVudHMiOiB7ImNhbGxJZCI6IG51
bGwsInNlbGVjdG9yIjogbnVsbCwic2VsZWN0ZWROb2RlSWQiOiBudWxsfX0nKTsKICAgIHRoaXMu
X3JlZ2lzdGVyRGVsZWdhdGUoJ3sic2VxIjogMCwgInR5cGUiOiAicmVxdWVzdCIsICJkb21haW4i
OiAiQ29udHJvbGxlciIsImNvbW1hbmQiOiAiZ2V0Q29va2llcyIsImFyZ3VtZW50cyI6IHsiY2Fs
bElkIjogbnVsbH19Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7InNlcSI6IDAsICJ0
eXBlIjogInJlcXVlc3QiLCAiZG9tYWluIjogIkNvbnRyb2xsZXIiLCJjb21tYW5kIjogImRlbGV0
ZUNvb2tpZSIsImFyZ3VtZW50cyI6IHsiY29va2llTmFtZSI6IG51bGwsImRvbWFpbiI6IG51bGx9
fScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1
ZXN0IiwgImRvbWFpbiI6ICJBcHBsaWNhdGlvbkNhY2hlIiwiY29tbWFuZCI6ICJnZXRBcHBsaWNh
dGlvbkNhY2hlcyIsImFyZ3VtZW50cyI6IHsiY2FsbElkIjogbnVsbH19Jyk7CiAgICB0aGlzLl9y
ZWdpc3RlckRlbGVnYXRlKCd7InNlcSI6IDAsICJ0eXBlIjogInJlcXVlc3QiLCAiZG9tYWluIjog
IkJhY2tlbmQiLCJjb21tYW5kIjogInJlbGVhc2VXcmFwcGVyT2JqZWN0R3JvdXAiLCJhcmd1bWVu
dHMiOiB7ImluamVjdGVkU2NyaXB0SWQiOiBudWxsLCJvYmplY3RHcm91cCI6IG51bGx9fScpOwog
ICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJyZXF1ZXN0Iiwg
ImRvbWFpbiI6ICJDb250cm9sbGVyIiwiY29tbWFuZCI6ICJkaWRFdmFsdWF0ZUZvclRlc3RJbkZy
b250ZW5kIiwiYXJndW1lbnRzIjogeyJ0ZXN0Q2FsbElkIjogbnVsbCwianNvblJlc3VsdCI6IG51
bGx9fScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJzZXEiOiAwLCAidHlwZSI6ICJy
ZXF1ZXN0IiwgImRvbWFpbiI6ICJCYWNrZW5kIiwiY29tbWFuZCI6ICJnZXREYXRhYmFzZVRhYmxl
TmFtZXMiLCJhcmd1bWVudHMiOiB7ImNhbGxJZCI6IG51bGwsImRhdGFiYXNlSWQiOiBudWxsfX0n
KTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sic2VxIjogMCwgInR5cGUiOiAicmVxdWVz
dCIsICJkb21haW4iOiAiQmFja2VuZCIsImNvbW1hbmQiOiAiZXhlY3V0ZVNRTCIsImFyZ3VtZW50
cyI6IHsiY2FsbElkIjogbnVsbCwiZGF0YWJhc2VJZCI6IG51bGwsInF1ZXJ5IjogbnVsbH19Jyk7
CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7InNlcSI6IDAsICJ0eXBlIjogInJlcXVlc3Qi
LCAiZG9tYWluIjogIkNvbnRyb2xsZXIiLCJjb21tYW5kIjogImdldERPTVN0b3JhZ2VFbnRyaWVz
IiwiYXJndW1lbnRzIjogeyJjYWxsSWQiOiBudWxsLCJzdG9yYWdlSWQiOiBudWxsfX0nKTsKICAg
IHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sic2VxIjogMCwgInR5cGUiOiAicmVxdWVzdCIsICJk
b21haW4iOiAiQ29udHJvbGxlciIsImNvbW1hbmQiOiAic2V0RE9NU3RvcmFnZUl0ZW0iLCJhcmd1
bWVudHMiOiB7ImNhbGxJZCI6IG51bGwsInN0b3JhZ2VJZCI6IG51bGwsImtleSI6IG51bGwsInZh
bHVlIjogbnVsbH19Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7InNlcSI6IDAsICJ0
eXBlIjogInJlcXVlc3QiLCAiZG9tYWluIjogIkNvbnRyb2xsZXIiLCJjb21tYW5kIjogInJlbW92
ZURPTVN0b3JhZ2VJdGVtIiwiYXJndW1lbnRzIjogeyJjYWxsSWQiOiBudWxsLCJzdG9yYWdlSWQi
OiBudWxsLCJrZXkiOiBudWxsfX0nKTsKfQoKV2ViSW5zcGVjdG9yLkluc3BlY3RvckJhY2tlbmRT
dHViLnByb3RvdHlwZSA9IHsKICAgIF9yZWdpc3RlckRlbGVnYXRlOiBmdW5jdGlvbihjb21tYW5k
SW5mbykKICAgIHsKICAgICAgICB2YXIgY29tbWFuZE9iamVjdCA9IEpTT04ucGFyc2UoY29tbWFu
ZEluZm8pOwogICAgICAgIHRoaXNbY29tbWFuZE9iamVjdC5jb21tYW5kXSA9IHRoaXMuc2VuZE1l
c3NhZ2VUb0JhY2tlbmQuYmluZCh0aGlzLCBjb21tYW5kSW5mbyk7CiAgICB9LAoKICAgIHNlbmRN
ZXNzYWdlVG9CYWNrZW5kOiBmdW5jdGlvbigpCiAgICB7CiAgICAgICAgdmFyIGFyZ3MgPSBBcnJh
eS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwogICAgICAgIHZhciByZXF1ZXN0ID0g
SlNPTi5wYXJzZShhcmdzLnNoaWZ0KCkpOwogICAgICAgIGZvciAodmFyIGtleSBpbiByZXF1ZXN0
LmFyZ3VtZW50cykgewogICAgICAgICAgICBpZiAoa2V5ID09PSAiY2FsbElkIikKICAgICAgICAg
ICAgICAgIHJlcXVlc3Quc2VxID0gYXJncy5zaGlmdCgpOwogICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICByZXF1ZXN0LmFyZ3VtZW50c1trZXldID0gYXJncy5zaGlmdCgpOwogICAgICAg
IH0KICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICJm
dW5jdGlvbiIpCiAgICAgICAgICAgIHJlcXVlc3Quc2VxID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNr
LndyYXAoYXJnc1swXSk7CgogICAgICAgIHZhciBtZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkocmVx
dWVzdCk7CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LnNlbmRNZXNzYWdlVG9CYWNrZW5k
KG1lc3NhZ2UpOwogICAgfQp9CgpJbnNwZWN0b3JCYWNrZW5kID0gbmV3IFdlYkluc3BlY3Rvci5J
bnNwZWN0b3JCYWNrZW5kU3R1YigpOw==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65103</attachid>
            <date>2010-08-23 04:58:00 -0700</date>
            <delta_ts>2010-08-23 07:38:21 -0700</delta_ts>
            <desc>[patch] second iteration. Rebaselined.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>33454</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmRkZWZjNi4uZWFiNDkwOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAxMC0wOC0yMyAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViSW5zcGVjdG9yOiBpbnNwZWN0b3IgcHJvdG9jb2wgc2hv
dWxkIGJlIHN3aXRjaGVkIGZyb20gYXJyYXkgYmFzZWQKKyAgICAgICAgbWVzc2FnZSBmb3JtYXQg
dG8gb2JqZWN0IGJhc2VkIG1lc3NhZ2UgZm9ybWF0LgorICAgICAgICBBbG1vc3QgYWxsIHRoZSBw
cm90b2NvbCByZWxhdGVkIHRoaW5ncyBpcyBnZW5lcmF0ZWQgYnkgQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci5wbQorICAgICAgICBJdCB3YXMgY2hhbmdlZCBhIGJpdC4gQXMgcmVzdWx0IEluc3BlY3Rv
ckJhY2tlbmRTdHViLmpzIHdyYXBzIHRoZQorICAgICAgICBjYWxscyBpbnRvIFJlcXVlc3Qgb2Jq
ZWN0cy4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIHVud3JhcHMKKyAgICAgICAgdGhl
c2Ugb2JqZWN0cyBhbmQgY2FsbHMgY29ycmVzcG9uZGluZyBhZ2VudHMuIFRoZXNlIHR3byBmaWxl
cyBhbmQKKyAgICAgICAgUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQgYXJlIGdlbmVyYXRlZCBieSBD
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCisgICAgICAgIERpc3BhdGNoaW5nIHBhcnQgb2YgV2Vi
SW5zcGVjdG9yIGFsc28gd2FzIGFkanVzdGVkIGZvciBoYW5kbGluZyBFdmVudAorICAgICAgICBv
YmplY3RzIHByb2R1Y2VkIGJ5IFJlbW90ZUluc3BlY3RvckZyb250ZW5kLmNwcCBhbmQgUmVzcG9u
c2Ugb2JqZWN0cworICAgICAgICBwcm9kdWNlZCBieSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5jcHAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0
MzM4CisKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpzZXRBdHRhY2hlZFdpbmRvdyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
OjpzZXRBdHRhY2hlZFdpbmRvdyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT2JqZWN0OjpmaW5kKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxiYWNrLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkNhbGxiYWNrLnByb3RvdHlwZS5wcm9jZXNzUmVzcG9uc2UpOgorICAgICAgICAqIGluc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmRpc3BhdGNo
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvcl9zeW5jRGlzcGF0Y2gpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLmRpc3BhdGNoTWVzc2FnZUZyb21CYWNrZW5kKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5yZXBvcnRQcm90b2NvbEVycm9yKToKKwogMjAxMC0wOC0yMyAgQW5kcmVhcyBLbGluZyAgPGFu
ZHJlYXMua2xpbmdAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9o
ZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5wbSBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucG0KaW5kZXggZTY0N2M5MC4uZjBlMDA1ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnBtCkBAIC0xNywzMSArMTcsMzEgQEAgJHR5cGVUcmFuc2Zvcm17
Ikluc3BlY3RvckNsaWVudCJ9ID0gewogJHR5cGVUcmFuc2Zvcm17IkJhY2tlbmQifSA9IHsKICAg
ICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckJhY2tlbmQiLAogICAgICJoZWFkZXIiID0+ICJJbnNw
ZWN0b3JCYWNrZW5kLmgiLAotICAgICJoYW5kbGVyQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNv
bnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKSIsCisgICAgImRvbWFpbkFjY2Vzc29yIiA9PiAi
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JCYWNrZW5kKCkiLAogfTsKICR0eXBlVHJh
bnNmb3JteyJDb250cm9sbGVyIn0gPSB7CiAgICAgImZvcndhcmRIZWFkZXIiID0+ICJJbnNwZWN0
b3JDb250cm9sbGVyLmgiLAotICAgICJoYW5kbGVyQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNv
bnRyb2xsZXIiLAorICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQ29udHJvbGxl
ciIsCiB9OwogJHR5cGVUcmFuc2Zvcm17IkRlYnVnIn0gPSB7CiAgICAgImZvcndhcmQiID0+ICJJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50IiwKICAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5oIiwKLSAgICAiaGFuZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9s
bGVyLT5kZWJ1Z2dlckFnZW50KCkiLAorICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVj
dG9yQ29udHJvbGxlci0+ZGVidWdnZXJBZ2VudCgpIiwKIH07CiAkdHlwZVRyYW5zZm9ybXsiRE9N
In0gPSB7CiAgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JET01BZ2VudCIsCiAgICAgImhlYWRl
ciIgPT4gIkluc3BlY3RvckRPTUFnZW50LmgiLAotICAgICJoYW5kbGVyQWNjZXNzb3IiID0+ICJt
X2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkiLAorICAgICJkb21haW5BY2Nlc3NvciIg
PT4gIm1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSIsCiB9OwogJHR5cGVUcmFuc2Zv
cm17IkFwcGxpY2F0aW9uQ2FjaGUifSA9IHsKICAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudCIsCiAgICAgImhlYWRlciIgPT4gIkluc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudC5oIiwKLSAgICAiaGFuZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JD
b250cm9sbGVyLT5hcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSIsCisgICAgImRvbWFpbkFjY2Vzc29y
IiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5hcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSIsCiB9
OwogJHR5cGVUcmFuc2Zvcm17IlByb2ZpbGVyIn0gPSB7CiAgICAgImZvcndhcmQiID0+ICJJbnNw
ZWN0b3JQcm9maWxlckFnZW50IiwKICAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudC5oIiwKLSAgICAiaGFuZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVy
LT5wcm9maWxlckFnZW50KCkiLAorICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9y
Q29udHJvbGxlci0+cHJvZmlsZXJBZ2VudCgpIiwKIH07CiAkdHlwZVRyYW5zZm9ybXsiRnJvbnRl
bmQifSA9IHsKICAgICAiZm9yd2FyZCIgPT4gIlJlbW90ZUluc3BlY3RvckZyb250ZW5kIiwKQEAg
LTU2LDcgKzU2LDcgQEAgJHR5cGVUcmFuc2Zvcm17Ik9iamVjdCJ9ID0gewogICAgICJkZWZhdWx0
VmFsdWUiID0+ICJJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpIiwKICAgICAiZm9yd2FyZCIgPT4g
Ikluc3BlY3Rvck9iamVjdCIsCiAgICAgImhlYWRlciIgPT4gIkluc3BlY3RvclZhbHVlcy5oIiwK
LSAgICAiYWNjZXNzb3JTdWZmaXgiID0+ICJPYmplY3QiCisgICAgIkpTT05UeXBlIiA9PiAiT2Jq
ZWN0IgogfTsKICR0eXBlVHJhbnNmb3JteyJBcnJheSJ9ID0gewogICAgICJwYXJhbSIgPT4gIlBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IiwKQEAgLTY0LDcgKzY0LDcgQEAgJHR5cGVUcmFuc2Zv
cm17IkFycmF5In0gPSB7CiAgICAgImRlZmF1bHRWYWx1ZSIgPT4gIkluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKSIsCiAgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JBcnJheSIsCiAgICAgImhlYWRl
ciIgPT4gIkluc3BlY3RvclZhbHVlcy5oIiwKLSAgICAiYWNjZXNzb3JTdWZmaXgiID0+ICJBcnJh
eSIKKyAgICAiSlNPTlR5cGUiID0+ICJBcnJheSIKIH07CiAkdHlwZVRyYW5zZm9ybXsiVmFsdWUi
fSA9IHsKICAgICAicGFyYW0iID0+ICJQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiIsCkBAIC03
MiwxNCArNzIsMTQgQEAgJHR5cGVUcmFuc2Zvcm17IlZhbHVlIn0gPSB7CiAgICAgImRlZmF1bHRW
YWx1ZSIgPT4gIkluc3BlY3RvclZhbHVlOjpudWxsKCkiLAogICAgICJmb3J3YXJkIiA9PiAiSW5z
cGVjdG9yVmFsdWUiLAogICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JWYWx1ZXMuaCIsCi0gICAg
ImFjY2Vzc29yU3VmZml4IiA9PiAiVmFsdWUiCisgICAgIkpTT05UeXBlIiA9PiAiVmFsdWUiCiB9
OwogJHR5cGVUcmFuc2Zvcm17IlN0cmluZyJ9ID0gewogICAgICJwYXJhbSIgPT4gImNvbnN0IFN0
cmluZyYiLAogICAgICJ2YXJpYWJsZSIgPT4gIlN0cmluZyIsCiAgICAgImZvcndhcmRIZWFkZXIi
ID0+ICJ3dGYvRm9yd2FyZC5oIiwKICAgICAiaGVhZGVyIiA9PiAiUGxhdGZvcm1TdHJpbmcuaCIs
Ci0gICAgImFjY2Vzc29yU3VmZml4IiA9PiAiU3RyaW5nIgorICAgICJKU09OVHlwZSIgPT4gIlN0
cmluZyIKIH07CiAkdHlwZVRyYW5zZm9ybXsibG9uZyJ9ID0gewogICAgICJwYXJhbSIgPT4gImxv
bmciLApAQCAtODcsNyArODcsNyBAQCAkdHlwZVRyYW5zZm9ybXsibG9uZyJ9ID0gewogICAgICJk
ZWZhdWx0VmFsdWUiID0+ICIwIiwKICAgICAiZm9yd2FyZCIgPT4gIiIsCiAgICAgImhlYWRlciIg
PT4gIiIsCi0gICAgImFjY2Vzc29yU3VmZml4IiA9PiAiTnVtYmVyIgorICAgICJKU09OVHlwZSIg
PT4gIk51bWJlciIKIH07CiAkdHlwZVRyYW5zZm9ybXsiaW50In0gPSB7CiAgICAgInBhcmFtIiA9
PiAiaW50IiwKQEAgLTk1LDcgKzk1LDcgQEAgJHR5cGVUcmFuc2Zvcm17ImludCJ9ID0gewogICAg
ICJkZWZhdWx0VmFsdWUiID0+ICIwIiwKICAgICAiZm9yd2FyZCIgPT4gIiIsCiAgICAgImhlYWRl
ciIgPT4gIiIsCi0gICAgImFjY2Vzc29yU3VmZml4IiA9PiAiTnVtYmVyIiwKKyAgICAiSlNPTlR5
cGUiID0+ICJOdW1iZXIiLAogfTsKICR0eXBlVHJhbnNmb3JteyJ1bnNpZ25lZCBsb25nIn0gPSB7
CiAgICAgInBhcmFtIiA9PiAidW5zaWduZWQgbG9uZyIsCkBAIC0xMDMsNyArMTAzLDcgQEAgJHR5
cGVUcmFuc2Zvcm17InVuc2lnbmVkIGxvbmcifSA9IHsKICAgICAiZGVmYXVsdFZhbHVlIiA9PiAi
MHUiLAogICAgICJmb3J3YXJkIiA9PiAiIiwKICAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAiYWNj
ZXNzb3JTdWZmaXgiID0+ICJOdW1iZXIiCisgICAgIkpTT05UeXBlIiA9PiAiTnVtYmVyIgogfTsK
ICR0eXBlVHJhbnNmb3JteyJ1bnNpZ25lZCBpbnQifSA9IHsKICAgICAicGFyYW0iID0+ICJ1bnNp
Z25lZCBpbnQiLApAQCAtMTExLDcgKzExMSw3IEBAICR0eXBlVHJhbnNmb3JteyJ1bnNpZ25lZCBp
bnQifSA9IHsKICAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMHUiLAogICAgICJmb3J3YXJkIiA9PiAi
IiwKICAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAiYWNjZXNzb3JTdWZmaXgiID0+ICJOdW1iZXIi
CisgICAgIkpTT05UeXBlIiA9PiAiTnVtYmVyIgogfTsKICR0eXBlVHJhbnNmb3JteyJib29sZWFu
In0gPSB7CiAgICAgInBhcmFtIiA9PiAiYm9vbCIsCkBAIC0xMTksNyArMTE5LDcgQEAgJHR5cGVU
cmFuc2Zvcm17ImJvb2xlYW4ifSA9IHsKICAgICAiZGVmYXVsdFZhbHVlIiA9PiAiZmFsc2UiLAog
ICAgICJmb3J3YXJkIiA9PiAiIiwKICAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAiYWNjZXNzb3JT
dWZmaXgiID0+ICJCb29sIgorICAgICJKU09OVHlwZSIgPT4gIkJvb2wiCiB9OwogJHR5cGVUcmFu
c2Zvcm17InZvaWQifSA9IHsKICAgICAiZm9yd2FyZCIgPT4gIiIsCkBAIC0xNjIsMTAgKzE2Miw2
IEBAIG15IEBmcm9udGVuZENvbnN0YW50RGVjbGFyYXRpb25zOwogbXkgQGZyb250ZW5kQ29uc3Rh
bnREZWZpbml0aW9uczsKIG15ICRmcm9udGVuZEZvb3RlcjsKIAotbXkgJGNhbGxJZCA9IG5ldyBk
b21TaWduYXR1cmUoKTsgIyBpdCBpcyBqdXN0IHN0cnVjdHVyZSBmb3IgZGVzY3JpYmluZyBwYXJh
bWV0ZXJzIGZyb20gSURMU3RydWN0dXJlLnBtLgotJGNhbGxJZC0+dHlwZSgibG9uZyIpOwotJGNh
bGxJZC0+bmFtZSgiY2FsbElkIik7Ci0KICMgRGVmYXVsdCBjb25zdHJ1Y3Rvcgogc3ViIG5ldwog
ewpAQCAtMjIyLDkgKzIxOCw4IEBAIHN1YiBHZW5lcmF0ZUludGVyZmFjZQogICAgICRiYWNrZW5k
VHlwZXN7IkNvbnRyb2xsZXIifSA9IDE7CiAgICAgJGJhY2tlbmRUeXBlc3siSW5zcGVjdG9yQ2xp
ZW50In0gPSAxOwogICAgICRiYWNrZW5kVHlwZXN7IlBhc3NSZWZQdHIifSA9IDE7Ci0gICAgJGJh
Y2tlbmRUeXBlc3siQXJyYXkifSA9IDE7CisgICAgJGJhY2tlbmRUeXBlc3siT2JqZWN0In0gPSAx
OwogCi0gICAgcHVzaChAYmFja2VuZE1ldGhvZHNJbXBsLCBnZW5lcmF0ZUJhY2tlbmRQcml2YXRl
RnVuY3Rpb25zKCkpOwogICAgIHB1c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgZ2VuZXJhdGVCYWNr
ZW5kTWVzc2FnZVBhcnNlcigpKTsKICAgICBnZW5lcmF0ZUZ1bmN0aW9ucygkaW50ZXJmYWNlKTsK
IApAQCAtMjU5LDcgKzI1NCw2IEBAIHN1YiBnZW5lcmF0ZUZyb250ZW5kRnVuY3Rpb24KICAgICBt
eSBAYXJnc0ZpbHRlcmVkID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJvdXQiLCBAeyRmdW5jdGlv
bi0+cGFyYW1ldGVyc30pOyAjIGp1c3Qga2VlcCBvbmx5IG91dCBwYXJhbWV0ZXJzIGZvciBmcm9u
dGVuZCBpbnRlcmZhY2UuCiAgICAgbWFwKCRmcm9udGVuZFR5cGVzeyRfLT50eXBlfSA9IDEsIEBh
cmdzRmlsdGVyZWQpOyAjIHJlZ2lzdGVyIHJlcXVpcmVkIHR5cGVzLgogICAgIG15ICRhcmd1bWVu
dHMgPSBqb2luKCIsICIsIG1hcCgkdHlwZVRyYW5zZm9ybXskXy0+dHlwZX0tPnsicGFyYW0ifSAu
ICIgIiAuICRfLT5uYW1lLCBAYXJnc0ZpbHRlcmVkKSk7ICMgcHJlcGFyZSBhcmd1bWVudHMgZm9y
IGZ1bmN0aW9uIHNpZ25hdHVyZS4KLSAgICBteSBAcHVzaEFyZ3VtZW50cyA9IG1hcCgiICAgIGFy
Z3VtZW50cy0+cHVzaCIgLiAkdHlwZVRyYW5zZm9ybXskXy0+dHlwZX0tPnsiYWNjZXNzb3JTdWZm
aXgifSAuICIoIiAuICRfLT5uYW1lIC4gIik7IiwgQGFyZ3NGaWx0ZXJlZCk7CiAKICAgICBteSAk
c2lnbmF0dXJlID0gIiAgICB2b2lkICR7ZnVuY3Rpb25OYW1lfSgke2FyZ3VtZW50c30pOyI7CiAg
ICAgaWYgKCEkZnJvbnRlbmRNZXRob2RzeyR7c2lnbmF0dXJlfX0pIHsKQEAgLTI2OCwxMCArMjYy
LDE0IEBAIHN1YiBnZW5lcmF0ZUZyb250ZW5kRnVuY3Rpb24KICAgICAgICAgbXkgQGZ1bmN0aW9u
OwogICAgICAgICBwdXNoKEBmdW5jdGlvbiwgInZvaWQgJHtmcm9udGVuZENsYXNzTmFtZX06OiR7
ZnVuY3Rpb25OYW1lfSgke2FyZ3VtZW50c30pIik7CiAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAi
eyIpOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IGFyZ3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsiKTsKLSAgICAgICAgcHVzaChA
ZnVuY3Rpb24sICIgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKFwiJGZ1bmN0aW9uTmFtZVwiKTsi
KTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
JHtmdW5jdGlvbk5hbWV9TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Iik7Cisg
ICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICR7ZnVuY3Rpb25OYW1lfU1lc3NhZ2UtPnNldFN0
cmluZyhcInR5cGVcIiwgXCJldmVudFwiKTsiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIg
ICAgJHtmdW5jdGlvbk5hbWV9TWVzc2FnZS0+c2V0U3RyaW5nKFwiZXZlbnRcIiwgXCIkZnVuY3Rp
b25OYW1lXCIpOyIpOworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXlsb2FkRGF0YU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
Iik7CisgICAgICAgIG15IEBwdXNoQXJndW1lbnRzID0gbWFwKCIgICAgcGF5bG9hZERhdGFPYmpl
Y3QtPnNldCIgLiAkdHlwZVRyYW5zZm9ybXskXy0+dHlwZX0tPnsiSlNPTlR5cGUifSAuICIoXCIi
IC4gJF8tPm5hbWUgLiAiXCIsICIgLiAkXy0+bmFtZSAuICIpOyIsIEBhcmdzRmlsdGVyZWQpOwog
ICAgICAgICBwdXNoKEBmdW5jdGlvbiwgQHB1c2hBcmd1bWVudHMpOwotICAgICAgICBwdXNoKEBm
dW5jdGlvbiwgIiAgICBtX2luc3BlY3RvckNsaWVudC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFy
Z3VtZW50cy0+dG9KU09OU3RyaW5nKCkpOyIpOworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAg
ICAke2Z1bmN0aW9uTmFtZX1NZXNzYWdlLT5zZXRPYmplY3QoXCJkYXRhXCIsIHBheWxvYWREYXRh
T2JqZWN0KTsiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgbV9pbnNwZWN0b3JDbGll
bnQtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCgke2Z1bmN0aW9uTmFtZX1NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7Iik7CiAKICAgICAgICAgcHVzaChAZnVuY3Rpb24sICJ9Iik7CiAgICAgICAgIHB1
c2goQGZ1bmN0aW9uLCAiIik7CkBAIC0yNzksMjIgKzI3Nyw2IEBAIHN1YiBnZW5lcmF0ZUZyb250
ZW5kRnVuY3Rpb24KICAgICB9CiB9CiAKLXN1YiBnZW5lcmF0ZUJhY2tlbmRQcml2YXRlRnVuY3Rp
b25zCi17Ci0gICAgbXkgJHByaXZhdGVGdW5jdGlvbnMgPSA8PCAiRU9GIjsKLXN0YXRpYyBTdHJp
bmcgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UodW5zaWduZWQgZXhwZWN0ZWQsIHVu
c2lnbmVkIGFjdHVhbCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIldyb25nIG51bWJl
ciBvZiBwYXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6ICVkKSIsIGFjdHVhbCwgZXhwZWN0ZWQpOwot
fQotCi1zdGF0aWMgU3RyaW5nIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSh1bnNpZ25l
ZCBwb3NpdGlvbiwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQot
ewotICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVy
ICVkICglcykgdG8gJXMiLCBwb3NpdGlvbiwgbmFtZSwgZXhwZWN0ZWRUeXBlKTsKLX0KLUVPRgot
ICAgIHJldHVybiBzcGxpdCgiXG4iLCAkcHJpdmF0ZUZ1bmN0aW9ucyk7Ci19Ci0KIHN1YiBnZW5l
cmF0ZUJhY2tlbmRGdW5jdGlvbgogewogICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwpAQCAtMzA1
LDc0ICsyODcsOTIgQEAgc3ViIGdlbmVyYXRlQmFja2VuZEZ1bmN0aW9uCiAgICAgcHVzaChAYmFj
a2VuZENvbnN0YW50RGVmaW5pdGlvbnMsICJjb25zdCBjaGFyKiAke2JhY2tlbmRDbGFzc05hbWV9
Ojoke2Z1bmN0aW9uTmFtZX1DbWQgPSBcIiR7ZnVuY3Rpb25OYW1lfVwiOyIpOwogCiAgICAgbWFw
KCRiYWNrZW5kVHlwZXN7JF8tPnR5cGV9ID0gMSwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsg
IyByZWdpc3RlciByZXF1aXJlZCB0eXBlcwotICAgIG15IEBpbkFyZ3MgPSBncmVwKCRfLT5kaXJl
Y3Rpb24gZXEgImluIiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsKKyAgICBteSBAaW5Bcmdz
ID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJpbiIgJiYgISgkXy0+bmFtZSBlcSAiY2FsbElkIikg
LCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pOwogICAgIG15IEBvdXRBcmdzID0gZ3JlcCgkXy0+
ZGlyZWN0aW9uIGVxICJvdXQiLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pOwogCi0gICAgbXkg
JHNpZ25hdHVyZSA9ICIgICAgdm9pZCAke2Z1bmN0aW9uTmFtZX0oUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gYXJncyk7IjsKKyAgICBteSAkc2lnbmF0dXJlID0gIiAgICB2b2lkICR7ZnVuY3Rp
b25OYW1lfShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCk7IjsKICAgICAhJGJhY2tlbmRNZXRob2RzeyR7c2lnbmF0dXJlfX0gfHwgZGllICJEdXBsaWNh
dGUgZnVuY3Rpb24gd2FzIGRldGVjdGVkIGZvciBzaWduYXR1cmUgJyRzaWduYXR1cmUnLiI7CiAg
ICAgJGJhY2tlbmRNZXRob2RzeyR7c2lnbmF0dXJlfX0gPSAkZnVuY3Rpb25OYW1lOwogCiAgICAg
bXkgQGZ1bmN0aW9uOwotICAgIHB1c2goQGZ1bmN0aW9uLCAidm9pZCAke2JhY2tlbmRDbGFzc05h
bWV9Ojoke2Z1bmN0aW9uTmFtZX0oUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykiKTsK
KyAgICBteSAkcmVxdWVzdE1lc3NhZ2VPYmplY3QgPSBzY2FsYXIoQGluQXJncykgPyAiIHJlcXVl
c3RNZXNzYWdlT2JqZWN0IiA6ICIiOworICAgIHB1c2goQGZ1bmN0aW9uLCAidm9pZCAke2JhY2tl
bmRDbGFzc05hbWV9Ojoke2Z1bmN0aW9uTmFtZX0obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCokcmVxdWVzdE1lc3NhZ2VPYmplY3QpIik7CiAgICAgcHVzaChAZnVuY3Rpb24sICJ7Iik7Ci0g
ICAgcHVzaChAZnVuY3Rpb24sICIgICAgbG9uZyBjYWxsSWQgPSAwOyIpOworICAgIHB1c2goQGZ1
bmN0aW9uLCAiICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7Iik7CiAgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKIAotICAg
IG15ICRleHBlY3RlZFBhcmFtZXRlcnNDb3VudCA9IHNjYWxhcihAaW5BcmdzKTsKLSAgICBteSAk
ZXhwZWN0ZWRQYXJhbWV0ZXJzQ291bnRXaXRoTWV0aG9kTmFtZSA9IHNjYWxhcihAaW5BcmdzKSAr
IDE7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9ICRleHBl
Y3RlZFBhcmFtZXRlcnNDb3VudFdpdGhNZXRob2ROYW1lKSB7Iik7Ci0gICAgcHVzaChAZnVuY3Rp
b24sICIgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyIpOwotICAgIHB1c2goQGZ1bmN0aW9u
LCAiICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgJHtmdW5jdGlvbk5hbWV9Q21k
LCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsICRl
eHBlY3RlZFBhcmFtZXRlcnNDb3VudCkpOyIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAg
ICByZXR1cm47Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgfSIpOworICAgIG15ICRkb21h
aW4gPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57ImhhbmRsZXIi
fSB8fCAiQ29udHJvbGxlciI7CisgICAgbXkgJGRvbWFpbkFjY2Vzc29yID0gJHR5cGVUcmFuc2Zv
cm17JGRvbWFpbn0tPnsiZG9tYWluQWNjZXNzb3IifTsKKyAgICAkYmFja2VuZFR5cGVzeyRkb21h
aW59ID0gMTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBpZiAoISRkb21haW5BY2Nlc3Nvciki
KTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoU3RyaW5nOjpmb3JtYXQoXCJFcnJvcjogJXMgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLlwi
LCBcIiRkb21haW5cIikpOyIpOwogICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7CiAKLSAgICBteSAk
aSA9IDE7ICMgemVybyBlbGVtZW50IGlzIHRoZSBtZXRob2QgbmFtZS4KLSAgICBmb3JlYWNoIG15
ICRwYXJhbWV0ZXIgKEBpbkFyZ3MpIHsKLSAgICAgICAgbXkgJHR5cGUgPSAkcGFyYW1ldGVyLT50
eXBlOwotICAgICAgICBteSAkYXJndW1lbnRUeXBlID0gJHR5cGVUcmFuc2Zvcm17JHR5cGV9LT57
InZhcmlhYmxlIn07Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICRhcmd1bWVudFR5cGUg
IiAuICRwYXJhbWV0ZXItPm5hbWUgLiAiOyIpIGlmICEoJHBhcmFtZXRlci0+bmFtZSBlcSAiY2Fs
bElkIik7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmICghYXJncy0+Z2V0KCRpKS0+
YXMiIC4gJHR5cGVUcmFuc2Zvcm17JHR5cGV9LT57ImFjY2Vzc29yU3VmZml4In0gLiAiKCYiIC4g
JHBhcmFtZXRlci0+bmFtZSAuICIpKSB7Iik7CisgICAgaWYgKHNjYWxhcihAaW5BcmdzKSkgewor
ICAgICAgICAjIGRlY2xhcmUgdmFyaWFibGVzIGZvciBhbGwgJ2luJyBhcmdzOworICAgICAgICBw
dXNoKEBmdW5jdGlvbiwgbWFwKCIgICAgIiAuICR0eXBlVHJhbnNmb3JteyRfLT50eXBlfS0+eyJ2
YXJpYWJsZSJ9IC4gIiAiIC4gJF8tPm5hbWUgLiAiOyIsIEBpbkFyZ3MpKTsKKworICAgICAgICBw
dXNoKEBmdW5jdGlvbiwgIiIpOworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBhcmd1bWVudHNDb250YWluZXI7Iik7CisgICAgICAgIHB1c2goQGZ1
bmN0aW9uLCAiICAgIGlmICghKGFyZ3VtZW50c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0LT5nZXRPYmplY3QoXCJhcmd1bWVudHNcIikpKSB7Iik7CiAgICAgICAgIHB1c2goQGZ1bmN0
aW9uLCAiICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsiKTsKLSAgICAgICAgcHVzaChAZnVu
Y3Rpb24sICIgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCAke2Z1bmN0aW9uTmFt
ZX1DbWQsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgkaSwgXCIiIC4gJHBhcmFtZXRl
ci0+bmFtZSAuICJcIiwgXCIkdHlwZVwiKSk7Iik7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAi
ICAgICAgICByZXR1cm47Iik7CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdChcIkVycm9yOiBhcmd1bWVudHMg
b2JqZWN0IHdhcyBub3QgZm91bmQuXCIpKTsiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIg
ICAgfSBlbHNlIHsiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIEluc3BlY3Rv
ck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgYXJndW1lbnRzRW5kSXRlcmF0b3IgPSBhcmd1bWVudHND
b250YWluZXItPmVuZCgpOyIpOworCisgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQGlu
QXJncykgeworICAgICAgICAgICAgbXkgJG5hbWUgPSAkcGFyYW1ldGVyLT5uYW1lOworICAgICAg
ICAgICAgbXkgJHR5cGUgPSAkcGFyYW1ldGVyLT50eXBlOworICAgICAgICAgICAgbXkgJHZhcmlh
YmxlVHlwZSA9ICR0eXBlVHJhbnNmb3JteyR0eXBlfS0+eyJ2YXJpYWJsZSJ9OworICAgICAgICAg
ICAgbXkgJEpTT05UeXBlID0gJHR5cGVUcmFuc2Zvcm17JHR5cGV9LT57IkpTT05UeXBlIn07CisK
KyAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7CisgICAgICAgICAgICBwdXNoKEBmdW5j
dGlvbiwgIiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciAke25hbWV9VmFs
dWVJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZmluZChcIiRuYW1lXCIpOyIpOworICAg
ICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIGlmICgke25hbWV9VmFsdWVJdGVyYXRv
ciA9PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgeyIpOworICAgICAgICAgICAgcHVzaChAZnVuY3Rp
b24sICIgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsiKTsKKyAgICAgICAgICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3Ry
aW5nOjpmb3JtYXQoXCJFcnJvcjogQXJndW1lbnQgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90
IGZvdW5kLlwiLCBcIiRuYW1lXCIsIFwiJEpTT05UeXBlXCIpKTsiKTsKKyAgICAgICAgICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgICAgICB9IGVsc2UgeyIpOworICAgICAgICAgICAgcHVzaChAZnVu
Y3Rpb24sICIgICAgICAgICAgICBpZiAoISR7bmFtZX1WYWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFz
JEpTT05UeXBlKCYkbmFtZSkpIHsiKTsKKyAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyIpOworICAgICAgICAgICAgcHVzaChA
ZnVuY3Rpb24sICIgICAgICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3Ry
aW5nOjpmb3JtYXQoXCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hv
dWxkIGJlICclcycuXCIsIFwiJG5hbWVcIiwgXCIkSlNPTlR5cGVcIikpOyIpOworICAgICAgICAg
ICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgICAgICB9Iik7CisgICAgICAgICAgICBwdXNoKEBm
dW5jdGlvbiwgIiAgICAgICAgfSIpOworICAgICAgICB9CiAgICAgICAgIHB1c2goQGZ1bmN0aW9u
LCAiICAgIH0iKTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLSAgICAgICAgKyskaTsK
ICAgICB9CiAKLSAgICBteSAkaGFuZGxlciA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiaGFuZGxlciJ9IHx8ICJDb250cm9sbGVyIjsKLSAgICBteSAkaGFuZGxl
ckFjY2Vzc29yID0gJHR5cGVUcmFuc2Zvcm17JGhhbmRsZXJ9LT57ImhhbmRsZXJBY2Nlc3NvciJ9
OwotICAgICRiYWNrZW5kVHlwZXN7JGhhbmRsZXJ9ID0gMTsKLSAgICBwdXNoKEBmdW5jdGlvbiwg
IiAgICBpZiAoISRoYW5kbGVyQWNjZXNzb3IpIHsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAg
ICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsICR7ZnVuY3Rpb25OYW1lfUNtZCwgXCJF
cnJvcjogJGhhbmRsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLlwiKTsiKTsKLSAgICBwdXNo
KEBmdW5jdGlvbiwgIiAgICAgICAgcmV0dXJuOyIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAg
IH0iKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwotCi0KICAgICBmb3JlYWNoIChAb3V0QXJn
cykgeyAjIGRlY2xhcmUgbG9jYWwgdmFyaWFibGVzIGZvciBvdXQgYXJndW1lbnRzLgogICAgICAg
ICBteSAkaW5pdGlhbGl6ZXIgPSAkdHlwZVRyYW5zZm9ybXskXy0+dHlwZX0tPnsiZGVmYXVsdFZh
bHVlIn0gPyAiID0gIiAuICR0eXBlVHJhbnNmb3JteyRfLT50eXBlfS0+eyJkZWZhdWx0VmFsdWUi
fSA6ICIiOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAiIC4gJHR5cGVUcmFuc2Zvcm17
JF8tPnR5cGV9LT57InZhcmlhYmxlIn0gLiAiICIgLiAkXy0+bmFtZSAuICIkaW5pdGlhbGl6ZXI7
Iik7CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICAiIC4gJHR5cGVUcmFuc2Zvcm17
JF8tPnR5cGV9LT57InZhcmlhYmxlIn0gLiAiICIgLiAkXy0+bmFtZSAuICIkaW5pdGlhbGl6ZXI7
Iik7CiAgICAgfQogCi0gICAgbXkgJGFyZ3MgPSBqb2luKCIsICIsIChncmVwKCEoJF8gZXEgImNh
bGxJZCIpLCBtYXAoJF8tPm5hbWUsIEBpbkFyZ3MpKSwgbWFwKCImIiAuICRfLT5uYW1lLCBAb3V0
QXJncykpKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAkaGFuZGxlckFjY2Vzc29yLT4kZnVu
Y3Rpb25OYW1lKCRhcmdzKTsiKTsKLQotICAgICMgVGhlIHJlc3VsdHMgb2YgZnVuY3Rpb24gY2Fs
bCBzaG91bGQgYmUgdHJhbnNmZXJlZCBiYWNrIHRvIGZyb250ZW5kLgotICAgIGlmIChzY2FsYXIo
Z3JlcCgkXy0+bmFtZSBlcSAiY2FsbElkIiwgQGluQXJncykpKSB7Ci0gICAgICAgIG15IEBwdXNo
QXJndW1lbnRzID0gbWFwKCIgICAgICAgIGFyZ3VtZW50cy0+cHVzaCIgLiAkdHlwZVRyYW5zZm9y
bXskXy0+dHlwZX0tPnsiYWNjZXNzb3JTdWZmaXgifSAuICIoIiAuICRfLT5uYW1lIC4gIik7Iiwg
QG91dEFyZ3MpOworICAgIG15ICRhcmdzID0gam9pbigiLCAiLCAobWFwKCRfLT5uYW1lLCBAaW5B
cmdzKSwgbWFwKCImIiAuICRfLT5uYW1lLCBAb3V0QXJncykpKTsKKyAgICBwdXNoKEBmdW5jdGlv
biwgIiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkiKTsKKyAgICBwdXNoKEBmdW5j
dGlvbiwgIiAgICAgICAgJGRvbWFpbkFjY2Vzc29yLT4kZnVuY3Rpb25OYW1lKCRhcmdzKTsiKTsK
KyAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwogCi0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7
Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBh
cyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5Iik7Ci0gICAgICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkp
IHsiKTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOyIpOwotICAgICAgICBw
dXNoKEBmdW5jdGlvbiwgIiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKFwicHJvY2Vzc1Jl
c3BvbnNlXCIpOyIpOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgYXJndW1lbnRz
LT5wdXNoTnVtYmVyKGNhbGxJZCk7Iik7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCBAcHVzaEFy
Z3VtZW50cyk7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1l
bnRzLT50b0pTT05TdHJpbmcoKSk7Iik7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIH0i
KTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMg
YSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eSIpOworICAgIHB1c2goQGZ1bmN0
aW9uLCAiICAgIGlmIChjYWxsSWQgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVu
ZCgpKSB7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Iik7Cisg
ICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKFwi
c2VxXCIsIGNhbGxJZCk7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIHJlc3BvbnNl
TWVzc2FnZS0+c2V0U3RyaW5nKFwidHlwZVwiLCBcInJlc3BvbnNlXCIpOyIpOworICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZyhcImRvbWFpblwi
LCBcIiRkb21haW5cIik7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIHJlc3BvbnNl
TWVzc2FnZS0+c2V0U3RyaW5nKFwiY29tbWFuZFwiLCBcIiRmdW5jdGlvbk5hbWVcIik7Iik7Cisg
ICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0Qm9vbChcInN1
Y2Nlc3NcIiwgIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSk7Iik7CisgICAgcHVzaChAZnVuY3Rp
b24sICIiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgaWYgKHByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgICAgIHJlc3BvbnNl
TWVzc2FnZS0+c2V0QXJyYXkoXCJlcnJvcnNcIiwgcHJvdG9jb2xFcnJvcnMpOyIpOworICAgIGlm
IChzY2FsYXIoQG91dEFyZ3MpKSB7CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBl
bHNlIHsiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXNwb25zZURhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOyIp
OworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgbWFwKCIgICAgICAgICAgICByZXNwb25zZURhdGEt
PnNldCIgLiAkdHlwZVRyYW5zZm9ybXskXy0+dHlwZX0tPnsiSlNPTlR5cGUifSAuICIoXCIiIC4g
JF8tPm5hbWUgLiAiXCIsICIgLiAkXy0+bmFtZSAuICIpOyIsIEBvdXRBcmdzKSk7CisgICAgICAg
IHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3Qo
XCJkYXRhXCIsIHJlc3BvbnNlRGF0YSk7Iik7CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAg
ICAgICB9Iik7CiAgICAgfQorICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVz
cG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIg
ICAgfSIpOworCisKICAgICBwdXNoKEBmdW5jdGlvbiwgIn0iKTsKICAgICBwdXNoKEBmdW5jdGlv
biwgIiIpOwogICAgIHB1c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgQGZ1bmN0aW9uKTsKQEAgLTM4
NCwxNyArMzg0LDIyIEBAIHN1YiBnZW5lcmF0ZUJhY2tlbmRSZXBvcnRQcm90b2NvbEVycm9yCiAK
IHZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25n
IGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYgZXJyb3JUZXh0KSBj
b25zdAogewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwotICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygicmVwb3J0UHJvdG9j
b2xFcnJvciIpOwotICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihjYWxsSWQpOwotICAgIGFyZ3Vt
ZW50cy0+cHVzaFN0cmluZyhtZXRob2QpOwotICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhlcnJv
clRleHQpOwotICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBtZXNzYWdlLT5zZXROdW1iZXIoInNlcSIsIGNhbGxJZCk7CisgICAgbWVzc2FnZS0+c2V0
U3RyaW5nKCJ0eXBlIiwgImVycm9yIik7CisgICAgbWVzc2FnZS0+c2V0U3RyaW5nKCJkb21haW4i
LCAiaW5zcGVjdG9yUHJvdG9jb2wiKTsKKyAgICBtZXNzYWdlLT5zZXRTdHJpbmcoImNvbW1hbmQi
LCBtZXRob2QpOworICAgIG1lc3NhZ2UtPnNldEJvb2woInN1Y2Nlc3MiLCBmYWxzZSk7CisgICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBlcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CisgICAgZXJyb3JzLT5wdXNoU3RyaW5nKGVycm9yVGV4dCk7CisgICAgbWVzc2FnZS0+c2V0QXJy
YXkoImVycm9ycyIsIGVycm9ycyk7CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0
b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKIH0KIEVPRgogICAgIHJldHVybiBzcGxpdCgiXG4iLCAkcmVwb3J0UHJvdG9jb2xFcnJvcik7
CiB9CiAKKwogc3ViIGdlbmVyYXRlQmFja2VuZERpc3BhdGNoZXIKIHsKICAgICBteSBAYm9keTsK
QEAgLTQwNSw5ICs0MTAsMTEgQEAgc3ViIGdlbmVyYXRlQmFja2VuZERpc3BhdGNoZXIKICAgICBt
eSAkYmFja2VuZERpc3BhdGNoZXJCb2R5ID0gPDwgIkVPRiI7CiB2b2lkICR7YmFja2VuZENsYXNz
TmFtZX06OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICB0eXBlZGVmIHZv
aWQgKCR7YmFja2VuZENsYXNzTmFtZX06OipDYWxsSGFuZGxlcikoUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gYXJncyk7CisgICAgdHlwZWRlZiB2b2lkICgke2JhY2tlbmRDbGFzc05hbWV9Ojoq
Q2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIG1lc3NhZ2VPYmplY3Qp
OwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsK
ICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKERpc3BhdGNoTWFwLCBkaXNwYXRjaE1hcCwgKTsKKyAg
ICBsb25nIGNhbGxJZCA9IDA7CisKICAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CiAk
bWFwRW50cmllcwogICAgIH0KQEAgLTQxNSwzOCArNDIyLDUyIEBAICRtYXBFbnRyaWVzCiAgICAg
UmVmUHRyPEluc3BlY3RvclZhbHVlPiBwYXJzZWRNZXNzYWdlID0gSW5zcGVjdG9yVmFsdWU6OnBh
cnNlSlNPTihtZXNzYWdlKTsKICAgICBpZiAoIXBhcnNlZE1lc3NhZ2UpIHsKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgImRpc3Bh
dGNoIiwgIkVycm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBNZXNzYWdlIHNob3VsZCBiZSBp
biBKU09OIGZvcm1hdC4iKTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsICJk
aXNwYXRjaCIsICJFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gTWVzc2FnZSBzaG91bGQg
YmUgaW4gSlNPTiBmb3JtYXQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlT2JqZWN0ID0gcGFyc2VkTWVzc2FnZS0+YXNPYmpl
Y3QoKTsKKyAgICBpZiAoIW1lc3NhZ2VPYmplY3QpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCAiZGlzcGF0Y2giLCAi
RXJyb3I6IEludmFsaWQgbWVzc2FnZSBmb3JtYXQuIFRoZSBtZXNzYWdlIHNob3VsZCBiZSBhIEpT
T05pZmllZCBvYmplY3QuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IGNhbGxJZFZhbHVlID0gbWVzc2FnZU9iamVjdC0+Z2V0KCJzZXEiKTsK
KyAgICBpZiAoIWNhbGxJZFZhbHVlKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgImRpc3BhdGNoIiwgIkVycm9yOiBJ
bnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiAnc2VxJyBwcm9wZXJ0eSB3YXMgbm90IGZvdW5kIGluIHRo
ZSByZXF1ZXN0LiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBtZXNzYWdlQXJyYXkgPSBwYXJzZWRNZXNzYWdlLT5hc0FycmF5KCk7Ci0gICAg
aWYgKCFtZXNzYWdlQXJyYXkpIHsKKyAgICBpZiAoIWNhbGxJZFZhbHVlLT5hc051bWJlcigmY2Fs
bElkKSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcigwLCAiZGlzcGF0Y2giLCAiRXJyb3I6IEludmFsaWQgbWVzc2FnZSBmb3JtYXQu
IFRoZSBtZXNzYWdlIHNob3VsZCBiZSBhIEpTT05pZmllZCBhcnJheSBvZiBhcmd1bWVudHMuIik7
CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCAiZGlzcGF0Y2giLCAiRXJyb3I6
IEludmFsaWQgbWVzc2FnZSBmb3JtYXQuIHRoZSB0eXBlIG9mICdzZXEnIHByb3BlcnR5IHNob3Vs
ZCBiZSBudW1iZXIuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIW1lc3Nh
Z2VBcnJheS0+bGVuZ3RoKCkpIHsKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGNvbW1hbmRW
YWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldCgiY29tbWFuZCIpOworICAgIGlmICghY29tbWFuZFZh
bHVlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXBvcnRQcm90
b2NvbEVycm9yKDAsICJkaXNwYXRjaCIsICJFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4g
RW1wdHkgbWVzc2FnZSB3YXMgcmVjZWl2ZWQuIik7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJy
b3IoY2FsbElkLCAiZGlzcGF0Y2giLCAiRXJyb3I6IEludmFsaWQgbWVzc2FnZSBmb3JtYXQuICdj
b21tYW5kJyBwcm9wZXJ0eSB3YXNuJ3QgZm91bmQuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBTdHJpbmcgbWV0aG9kTmFtZTsKLSAgICBpZiAoIW1lc3NhZ2VBcnJheS0+Z2V0KDAp
LT5hc1N0cmluZygmbWV0aG9kTmFtZSkpIHsKKyAgICBTdHJpbmcgY29tbWFuZDsKKyAgICBpZiAo
IWNvbW1hbmRWYWx1ZS0+YXNTdHJpbmcoJmNvbW1hbmQpKSB7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsICJkaXNwYXRjaCIsICJF
cnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gVGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIG1l
c3NhZ2Ugc2hvdWxkIGJlIG1ldGhvZCBuYW1lLiIpOworICAgICAgICByZXBvcnRQcm90b2NvbEVy
cm9yKGNhbGxJZCwgImRpc3BhdGNoIiwgIkVycm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBU
aGUgdHlwZSBvZiAnY29tbWFuZCcgcHJvcGVydHkgc2hvdWxkIGJlIHN0cmluZy4iKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0
ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2ROYW1lKTsKKyAgICBIYXNoTWFwPFN0
cmluZywgQ2FsbEhhbmRsZXI+OjppdGVyYXRvciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQoY29tbWFu
ZCk7CiAgICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsICJkaXNwYXRjaCIs
IFN0cmluZzo6Zm9ybWF0KCJFcnJvcjogSW52YWxpZCBtZXRob2QgbmFtZS4gJyVzJyB3YXNuJ3Qg
Zm91bmQuIiwgbWV0aG9kTmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoY2FsbElkLCAiZGlzcGF0Y2giLCBTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEludmFs
aWQgY29tbWFuZCB3YXMgcmVjZWl2ZWQuICclcycgd2Fzbid0IGZvdW5kLiIsIGNvbW1hbmQudXRm
OCgpLmRhdGEoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgKCgqdGhpcykuKml0
LT5zZWNvbmQpKG1lc3NhZ2VBcnJheSk7CisgICAgKCgqdGhpcykuKml0LT5zZWNvbmQpKGNhbGxJ
ZCwgbWVzc2FnZU9iamVjdC5nZXQoKSk7CiB9CiBFT0YKICAgICByZXR1cm4gc3BsaXQoIlxuIiwg
JGJhY2tlbmREaXNwYXRjaGVyQm9keSk7CkBAIC00NjAsMTQgKzQ4MSwxOCBAQCBib29sICR7YmFj
a2VuZENsYXNzTmFtZX06OmdldENvbW1hbmROYW1lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgU3Ry
aW5nKiByZXN1bHQpCiAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IEluc3BlY3Rv
clZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXkgPSB2YWx1ZS0+YXNB
cnJheSgpOwotICAgIGlmICghYXJyYXkpCisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBv
YmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKCFhcnJheS0+bGVuZ3RoKCkpCisgICAgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiBjb21tYW5kVmFsdWUgPSBvYmplY3QtPmdldCgiY29tbWFuZCIpOworICAgIGlm
ICghY29tbWFuZFZhbHVlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGFycmF5
LT5nZXQoMCktPmFzU3RyaW5nKHJlc3VsdCk7CisKKyAgICByZXR1cm4gY29tbWFuZFZhbHVlLT5h
c1N0cmluZyhyZXN1bHQpOwogfQorCiBFT0YKICAgICByZXR1cm4gc3BsaXQoIlxuIiwgJG1lc3Nh
Z2VQYXJzZXJCb2R5KTsKIH0KQEAgLTQ3Niw3ICs1MDEsMjAgQEAgc3ViIGdlbmVyYXRlQmFja2Vu
ZFN0dWJKUwogewogICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKICAgICBteSBAYmFja2VuZEZ1
bmN0aW9ucyA9IGdyZXAoISRfLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJub3Rp
ZnkifSwgQHskaW50ZXJmYWNlLT5mdW5jdGlvbnN9KTsKLSAgICBteSBASlNTdHVicyA9IG1hcCgi
ICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoXCIiIC4gJF8tPnNpZ25hdHVyZS0+bmFtZSAuICJc
Iik7IiwgQGJhY2tlbmRGdW5jdGlvbnMpOworICAgIG15IEBKU1N0dWJzOworCisgICAgZm9yZWFj
aCBteSAkZnVuY3Rpb24gKEBiYWNrZW5kRnVuY3Rpb25zKSB7CisgICAgICAgIG15ICRuYW1lID0g
JGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7CisgICAgICAgIG15ICRkb21haW4gPSAkZnVuY3Rp
b24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57ImhhbmRsZXIifTsKKyAgICAgICAg
bXkgJGFyZ3VtZW50TmFtZXMgPSBqb2luKCIsIiwgbWFwKCJcIiIgLiAkXy0+bmFtZSAuICJcIjog
bnVsbCIsIGdyZXAoJF8tPmRpcmVjdGlvbiBlcSAiaW4iLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVy
c30pKSk7CisgICAgICAgIHB1c2goQEpTU3R1YnMsICIgICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0
ZSgneyIgLgorICAgICAgICAgICAgIlwic2VxXCI6IDAsICIgLgorICAgICAgICAgICAgIlwidHlw
ZVwiOiBcInJlcXVlc3RcIiwgIiAuCisgICAgICAgICAgICAiXCJkb21haW5cIjogXCIkZG9tYWlu
XCIsICIgLgorICAgICAgICAgICAgIlwiY29tbWFuZFwiOiBcIiRuYW1lXCIsICIgLgorICAgICAg
ICAgICAgIlwiYXJndW1lbnRzXCI6IHskYXJndW1lbnROYW1lc30iIC4KKyAgICAgICAgIn0nKTsi
KTsKKyAgICB9CiAKICAgICBteSAkSlNTdHVicyA9IGpvaW4oIlxuIiwgQEpTU3R1YnMpOwogICAg
IG15ICRpbnNwZWN0b3JCYWNrZW5kU3R1YkpTID0gPDwgIkVPRiI7CkBAIC00ODgsMTQgKzUyNiwy
NiBAQCAkSlNTdHVicwogfQogCiBXZWJJbnNwZWN0b3IuSW5zcGVjdG9yQmFja2VuZFN0dWIucHJv
dG90eXBlID0gewotICAgIF9yZWdpc3RlckRlbGVnYXRlOiBmdW5jdGlvbihtZXRob2ROYW1lKQor
ICAgIF9yZWdpc3RlckRlbGVnYXRlOiBmdW5jdGlvbihjb21tYW5kSW5mbykKICAgICB7Ci0gICAg
ICAgIHRoaXNbbWV0aG9kTmFtZV0gPSB0aGlzLnNlbmRNZXNzYWdlVG9CYWNrZW5kLmJpbmQodGhp
cywgbWV0aG9kTmFtZSk7CisgICAgICAgIHZhciBjb21tYW5kT2JqZWN0ID0gSlNPTi5wYXJzZShj
b21tYW5kSW5mbyk7CisgICAgICAgIHRoaXNbY29tbWFuZE9iamVjdC5jb21tYW5kXSA9IHRoaXMu
c2VuZE1lc3NhZ2VUb0JhY2tlbmQuYmluZCh0aGlzLCBjb21tYW5kSW5mbyk7CiAgICAgfSwKIAog
ICAgIHNlbmRNZXNzYWdlVG9CYWNrZW5kOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB2YXIg
bWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3Vt
ZW50cykpOworICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFy
Z3VtZW50cyk7CisgICAgICAgIHZhciByZXF1ZXN0ID0gSlNPTi5wYXJzZShhcmdzLnNoaWZ0KCkp
OworICAgICAgICBmb3IgKHZhciBrZXkgaW4gcmVxdWVzdC5hcmd1bWVudHMpIHsKKyAgICAgICAg
ICAgIGlmIChrZXkgPT09ICJjYWxsSWQiKQorICAgICAgICAgICAgICAgIHJlcXVlc3Quc2VxID0g
YXJncy5zaGlmdCgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlcXVlc3Qu
YXJndW1lbnRzW2tleV0gPSBhcmdzLnNoaWZ0KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFy
Z3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAiZnVuY3Rpb24iKQorICAgICAg
ICAgICAgcmVxdWVzdC5zZXEgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChhcmdzWzBdKTsK
KworICAgICAgICB2YXIgbWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KHJlcXVlc3QpOwogICAgICAg
ICBJbnNwZWN0b3JGcm9udGVuZEhvc3Quc2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSk7CiAg
ICAgfQogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKaW5kZXggMzkyZDFkZi4uMjAzNjM2YSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3IuaWRsCkBAIC01Nyw2ICs1Nyw3IEBAIG1vZHVsZSBjb3JlIHsKICAg
ICAgICAgW25vdGlmeV0gdm9pZCByZXNvdXJjZVRyYWNraW5nV2FzRGlzYWJsZWQoKTsKICAgICAg
ICAgW25vdGlmeV0gdm9pZCBzZWFyY2hpbmdGb3JOb2RlV2FzRW5hYmxlZCgpOwogICAgICAgICBb
bm90aWZ5XSB2b2lkIHNlYXJjaGluZ0Zvck5vZGVXYXNEaXNhYmxlZCgpOworICAgICAgICBbbm90
aWZ5XSB2b2lkIHNldEF0dGFjaGVkV2luZG93KG91dCBib29sZWFuIGF0dGFjaGVkKTsKICAgICAg
ICAgW25vdGlmeV0gdm9pZCBzZXRDaGlsZE5vZGVzKG91dCBsb25nIHBhcmVudElkLCBvdXQgQXJy
YXkgbm9kZXMpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIHNldERldGFjaGVkUm9vdChvdXQgT2Jq
ZWN0IHJvb3QpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIHNldERvY3VtZW50KG91dCBWYWx1ZSBy
b290KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggODlj
OTEzMi4uZDVmOWEzYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5j
cHAKQEAgLTQyMCw2ICs0MjAsMTUgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNw
ZWN0b3JGcm9udGVuZENsaWVudChQYXNzT3duUHRyPEluc3BlY3RvckZyb250ZW4KICAgICBtX2lu
c3BlY3RvckZyb250ZW5kQ2xpZW50ID0gY2xpZW50OwogfQogCit2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OnNldEF0dGFjaGVkV2luZG93KGJvb2wgYXR0YWNoZWQpCit7CisgICAgaWYgKCFtX3Jl
bW90ZUZyb250ZW5kKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIG1fcmVtb3RlRnJvbnRlbmQtPnNldEF0dGFjaGVkV2luZG93KGF0
dGFjaGVkKTsKK30KKwogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRXaW5kb3dT
Y3JpcHRPYmplY3RDbGVhcmVkKEZyYW1lKiBmcmFtZSkKIHsKICAgICAvLyBJZiB0aGUgcGFnZSBp
cyBzdXBwb3NlZCB0byBzZXJ2ZSBhcyBJbnNwZWN0b3JGcm9udGVuZCBub3RpZnkgaW5zcGV0b3Ig
ZnJvbnRlbmQKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCA0ZmU2
N2NlLi5iZGI3YjI5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBA
IC0xNDcsNiArMTQ3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVu
ZENsaWVudChQYXNzT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBjbGllbnQpOwogICAg
IGJvb2wgaGFzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OyB9CisgICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvdyhib29sIGF0
dGFjaGVkKTsKIAogICAgIHZvaWQgaW5zcGVjdGVkV2luZG93U2NyaXB0T2JqZWN0Q2xlYXJlZChG
cmFtZSopOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xp
ZW50TG9jYWwuY3BwCmluZGV4IGI0NWRkMzQuLjBlZTA5ODUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCkBAIC0xMjEsMTUgKzEy
MSw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6bW92ZVdpbmRvd0J5KGZs
b2F0IHgsIGZsb2F0IHkpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6c2V0
QXR0YWNoZWRXaW5kb3coYm9vbCBhdHRhY2hlZCkKIHsKLSAgICBTY3JpcHRPYmplY3Qgd2ViSW5z
cGVjdG9yT2JqOwotICAgIGlmICghU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQobV9mcm9udGVuZFNj
cmlwdFN0YXRlLCAiV2ViSW5zcGVjdG9yIiwgd2ViSW5zcGVjdG9yT2JqKSkgewotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBTY3JpcHRG
dW5jdGlvbkNhbGwgZnVuY3Rpb24od2ViSW5zcGVjdG9yT2JqLCAiZGlzcGF0Y2giKTsgCi0gICAg
ZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoInNldEF0dGFjaGVkV2luZG93Iik7Ci0gICAgZnVuY3Rp
b24uYXBwZW5kQXJndW1lbnQoYXR0YWNoZWQpOwotICAgIGZ1bmN0aW9uLmNhbGwoKTsKKyAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPnNldEF0dGFjaGVkV2luZG93KGF0dGFjaGVkKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpyZXN0b3JlQXR0YWNoZWRXaW5kb3dI
ZWlnaHQoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAppbmRleCA0YmMzNmYyLi40NzNh
ZDIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaApAQCAtMTc2LDYgKzE3Niw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0Pik7CiAgICAgdm9pZCBzZXRBcnJheShjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KTsKIAorICAgIGNvbnN0X2l0ZXJhdG9yIGZp
bmQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKICAgICBib29sIGdldEJvb2woY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sKiBvdXRwdXQpIGNvbnN0OwogICAgIGJvb2wgZ2V0TnVtYmVyKGNvbnN0
IFN0cmluZyYgbmFtZSwgZG91YmxlKiBvdXRwdXQpIGNvbnN0OwogICAgIGJvb2wgZ2V0U3RyaW5n
KGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nKiBvdXRwdXQpIGNvbnN0OwpAQCAtMjI0LDYgKzIy
NSwxMSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8SW5zcGVjdG9yVmFsdWU+ID4gbV9k
YXRhOwogfTsKIAoraW5saW5lIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgSW5zcGVj
dG9yT2JqZWN0OjpmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9kYXRhLmZpbmQobmFtZSk7Cit9CisKIGlubGluZSB2b2lkIEluc3BlY3Rvck9iamVjdDo6c2V0
Qm9vbChjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgdmFsdWUpCiB7CiAgICAgc2V0VmFsdWUobmFt
ZSwgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZhbHVlKSk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbGJhY2suanMgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvQ2FsbGJhY2suanMKaW5kZXggZDgxNjNmZS4uMDYyMWZkMSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxiYWNrLmpzCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9DYWxsYmFjay5qcwpAQCAtNDIsOSArNDIsOCBAQCBXZWJJbnNwZWN0
b3IuQ2FsbGJhY2sucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gY2FsbGJhY2tJZDsKICAg
ICB9LAogCi0gICAgcHJvY2Vzc1Jlc3BvbnNlOiBmdW5jdGlvbihjYWxsYmFja0lkLCBvcHRfdmFy
YXJnKQorICAgIHByb2Nlc3NSZXNwb25zZTogZnVuY3Rpb24oY2FsbGJhY2tJZCwgYXJncykKICAg
ICB7Ci0gICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1l
bnRzLCAxKTsKICAgICAgICAgdmFyIGNhbGxiYWNrID0gdGhpcy5fY2FsbGJhY2tzW2NhbGxiYWNr
SWRdOwogICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmdzKTsKICAgICAgICAgZGVsZXRl
IHRoaXMuX2NhbGxiYWNrc1tjYWxsYmFja0lkXTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
aW5zcGVjdG9yLmpzCmluZGV4IDUyYWU3MzguLjk5NjRkNDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtNTg5LDIwICs1ODksMTIgQEAgdmFyIHdpbmRvd0xv
YWRlZCA9IGZ1bmN0aW9uKCkKIAogd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCB3aW5k
b3dMb2FkZWQsIGZhbHNlKTsKIAotV2ViSW5zcGVjdG9yLmRpc3BhdGNoID0gZnVuY3Rpb24oKSB7
Ci0gICAgdmFyIG1ldGhvZE5hbWUgPSBhcmd1bWVudHNbMF07Ci0gICAgdmFyIHBhcmFtZXRlcnMg
PSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwotCitXZWJJbnNwZWN0
b3IuZGlzcGF0Y2ggPSBmdW5jdGlvbihtZXNzYWdlKSB7CiAgICAgLy8gV2UnZCBsaWtlIHRvIGVu
Zm9yY2UgYXN5bmNocm9ub3VzIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGluc3BlY3RvciBjb250
cm9sbGVyIGFuZCB0aGUgZnJvbnRlbmQuCiAgICAgLy8gVGhpcyBpcyBpbXBvcnRhbnQgdG8gTGF5
b3V0VGVzdHMuCiAgICAgZnVuY3Rpb24gZGVsYXlEaXNwYXRjaCgpCiAgICAgewotICAgICAgICBp
ZiAoIShtZXRob2ROYW1lIGluIFdlYkluc3BlY3RvcikpIHsKLSAgICAgICAgICAgIGNvbnNvbGUu
ZXJyb3IoIkF0dGVtcHRlZCB0byBkaXNwYXRjaCB1bmltcGxlbWVudGVkIFdlYkluc3BlY3RvciBt
ZXRob2Q6ICVzIiwgbWV0aG9kTmFtZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICBXZWJJbnNwZWN0b3JbbWV0aG9kTmFtZV0uYXBwbHkoV2ViSW5zcGVjdG9yLCBw
YXJhbWV0ZXJzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yX3N5bmNEaXNwYXRjaChtZXNzYWdlKTsK
ICAgICAgICAgV2ViSW5zcGVjdG9yLnBlbmRpbmdEaXNwYXRjaGVzLS07CiAgICAgfQogICAgIFdl
Ykluc3BlY3Rvci5wZW5kaW5nRGlzcGF0Y2hlcysrOwpAQCAtNjEyLDIxICs2MDQsNDEgQEAgV2Vi
SW5zcGVjdG9yLmRpc3BhdGNoID0gZnVuY3Rpb24oKSB7CiAvLyBUaGlzIGZ1bmN0aW9uIGlzIHB1
cnBvc2VseSBwdXQgaW50byB0aGUgZ2xvYmFsIHNjb3BlIGZvciBlYXN5IGFjY2Vzcy4KIFdlYklu
c3BlY3Rvcl9zeW5jRGlzcGF0Y2ggPSBmdW5jdGlvbihtZXNzYWdlKQogewotICAgIHZhciBhcmdz
ID0gSlNPTi5wYXJzZShtZXNzYWdlKTsKLSAgICB2YXIgbWV0aG9kTmFtZSA9IGFyZ3NbMF07Ci0g
ICAgdmFyIHBhcmFtZXRlcnMgPSBhcmdzLnNsaWNlKDEpOwotICAgIFdlYkluc3BlY3RvclttZXRo
b2ROYW1lXS5hcHBseShXZWJJbnNwZWN0b3IsIHBhcmFtZXRlcnMpOworICAgIHZhciBtZXNzYWdl
T2JqZWN0ID0gKHR5cGVvZiBtZXNzYWdlID09PSAic3RyaW5nIikgPyBKU09OLnBhcnNlKG1lc3Nh
Z2UpIDogbWVzc2FnZTsKKyAgICBpZiAobWVzc2FnZU9iamVjdC50eXBlID09PSAicmVzcG9uc2Ui
ICYmICFtZXNzYWdlT2JqZWN0LnN1Y2Nlc3MpIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnJlbW92
ZVJlc3BvbnNlQ2FsbGJhY2tFbnRyeShtZXNzYWdlT2JqZWN0LnNlcSkKKyAgICAgICAgV2ViSW5z
cGVjdG9yLnJlcG9ydFByb3RvY29sRXJyb3IobWVzc2FnZU9iamVjdCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICB2YXIgYXJndW1lbnRzID0gW107CisgICAgaWYgKG1lc3NhZ2VPYmpl
Y3QuZGF0YSkKKyAgICAgICAgZm9yICh2YXIga2V5IGluIG1lc3NhZ2VPYmplY3QuZGF0YSkKKyAg
ICAgICAgICAgIGFyZ3VtZW50cy5wdXNoKG1lc3NhZ2VPYmplY3QuZGF0YVtrZXldKTsKKworICAg
IGlmIChtZXNzYWdlT2JqZWN0LnR5cGUgPT09ICJldmVudCIpIHsKKyAgICAgICAgaWYgKCFtZXNz
YWdlT2JqZWN0LmV2ZW50IGluIFdlYkluc3BlY3RvcikgeworICAgICAgICAgICAgY29uc29sZS5l
cnJvcigiQXR0ZW1wdGVkIHRvIGRpc3BhdGNoIHVuaW1wbGVtZW50ZWQgV2ViSW5zcGVjdG9yIG1l
dGhvZDogJXMiLCBtZXNzYWdlT2JqZWN0LmV2ZW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBXZWJJbnNwZWN0b3JbbWVzc2FnZU9iamVjdC5ldmVudF0uYXBwbHko
V2ViSW5zcGVjdG9yLCBhcmd1bWVudHMpOworICAgIH0KKworICAgIGlmIChtZXNzYWdlT2JqZWN0
LnR5cGUgPT09ICJyZXNwb25zZSIpCisgICAgICAgIFdlYkluc3BlY3Rvci5wcm9jZXNzUmVzcG9u
c2UobWVzc2FnZU9iamVjdC5zZXEsIGFyZ3VtZW50cyk7CiB9CiAKLVdlYkluc3BlY3Rvci5kaXNw
YXRjaE1lc3NhZ2VGcm9tQmFja2VuZCA9IGZ1bmN0aW9uKGFyZ3VtZW50cykKK1dlYkluc3BlY3Rv
ci5kaXNwYXRjaE1lc3NhZ2VGcm9tQmFja2VuZCA9IGZ1bmN0aW9uKG1lc3NhZ2VPYmplY3QpCiB7
Ci0gICAgV2ViSW5zcGVjdG9yLmRpc3BhdGNoLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAg
V2ViSW5zcGVjdG9yLmRpc3BhdGNoKG1lc3NhZ2VPYmplY3QpOwogfQogCi1XZWJJbnNwZWN0b3Iu
cmVwb3J0UHJvdG9jb2xFcnJvciA9IGZ1bmN0aW9uKGNhbGxJZCwgbWV0aG9kTmFtZSwgZXJyb3JU
ZXh0KQorV2ViSW5zcGVjdG9yLnJlcG9ydFByb3RvY29sRXJyb3IgPSBmdW5jdGlvbihtZXNzYWdl
T2JqZWN0KQogewotICAgIGNvbnNvbGUuZXJyb3IoIkluc3BlY3RvckJhY2tlbmQuIiArIG1ldGhv
ZE5hbWUgKyAiIGZhaWxlZCB3aXRoIGVycm9yIHRleHQ6ICciICsgZXJyb3JUZXh0ICsgIiciKTsK
LSAgICBXZWJJbnNwZWN0b3IucmVtb3ZlUmVzcG9uc2VDYWxsYmFja0VudHJ5KGNhbGxJZCk7Cisg
ICAgY29uc29sZS5sb2coIkVycm9yOiBJbnNwZWN0b3JCYWNrZW5kLiIgKyBtZXNzYWdlT2JqZWN0
LmNvbW1hbmQgKyAiIGZhaWxlZC4iKTsKKyAgICBmb3IgKHZhciBlcnJvciBpbiBtZXNzYWdlT2Jq
ZWN0LmVycm9ycykKKyAgICAgICAgY29uc29sZS5sb2coIiAgICAiICsgZXJyb3IpOworICAgIFdl
Ykluc3BlY3Rvci5yZW1vdmVSZXNwb25zZUNhbGxiYWNrRW50cnkobWVzc2FnZU9iamVjdC5zZXEp
OwogfQogCiBXZWJJbnNwZWN0b3Iud2luZG93UmVzaXplID0gZnVuY3Rpb24oZXZlbnQpCg==
</data>
<flag name="review"
          id="53783"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65117</attachid>
            <date>2010-08-23 07:38:21 -0700</date>
            <delta_ts>2010-08-23 07:38:21 -0700</delta_ts>
            <desc>actually landed</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>33618</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjUyNjQwOC4uMzA2OWI5YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAxMC0wOC0yMyAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBT
ZW1pa2hhdHNreS4KKworICAgICAgICBXZWJJbnNwZWN0b3I6IGluc3BlY3RvciBwcm90b2NvbCBz
aG91bGQgYmUgc3dpdGNoZWQgZnJvbSBhcnJheSBiYXNlZAorICAgICAgICBtZXNzYWdlIGZvcm1h
dCB0byBvYmplY3QgYmFzZWQgbWVzc2FnZSBmb3JtYXQuCisgICAgICAgIEFsbW9zdCBhbGwgdGhl
IHByb3RvY29sIHJlbGF0ZWQgdGhpbmdzIGlzIGdlbmVyYXRlZCBieSBDb2RlR2VuZXJhdG9ySW5z
cGVjdG9yLnBtCisgICAgICAgIEl0IHdhcyBjaGFuZ2VkIGEgYml0LiBBcyByZXN1bHQgSW5zcGVj
dG9yQmFja2VuZFN0dWIuanMgd3JhcHMgdGhlCisgICAgICAgIGNhbGxzIGludG8gUmVxdWVzdCBv
YmplY3RzLiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgdW53cmFwcworICAgICAgICB0
aGVzZSBvYmplY3RzIGFuZCBjYWxscyBjb3JyZXNwb25kaW5nIGFnZW50cy4gVGhlc2UgdHdvIGZp
bGVzIGFuZAorICAgICAgICBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZCBhcmUgZ2VuZXJhdGVkIGJ5
IENvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KKyAgICAgICAgRGlzcGF0Y2hpbmcgcGFydCBvZiBX
ZWJJbnNwZWN0b3IgYWxzbyB3YXMgYWRqdXN0ZWQgZm9yIGhhbmRsaW5nIEV2ZW50CisgICAgICAg
IG9iamVjdHMgcHJvZHVjZWQgYnkgUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQuY3BwIGFuZCBSZXNw
b25zZSBvYmplY3RzCisgICAgICAgIHByb2R1Y2VkIGJ5IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDQzMzgKKworICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3IuaWRsOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OnNldEF0dGFjaGVkV2luZG93KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVu
dExvY2FsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWw6OnNldEF0dGFjaGVkV2luZG93KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPYmplY3Q6OmZpbmQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ2FsbGJhY2suanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ2FsbGJhY2sucHJvdG90eXBlLnByb2Nlc3NSZXNwb25zZSk6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuZGlzcGF0
Y2gpOgorICAgICAgICAoV2ViSW5zcGVjdG9yX3N5bmNEaXNwYXRjaCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuZGlzcGF0Y2hNZXNzYWdlRnJvbUJhY2tlbmQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLnJlcG9ydFByb3RvY29sRXJyb3IpOgorCiAyMDEwLTA4LTE5ICBKZXJlbXkgT3Jsb3cgIDxq
b3Jsb3dAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEJsb2NrLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbSBi
L1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KaW5kZXggZTY0N2M5
MC4uNWVjYmZjYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5wbQorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnBtCkBAIC0xNywzMSArMTcsMzEgQEAgJHR5cGVUcmFuc2Zvcm17Ikluc3BlY3RvckNsaWVudCJ9
ID0gewogJHR5cGVUcmFuc2Zvcm17IkJhY2tlbmQifSA9IHsKICAgICAiZm9yd2FyZCIgPT4gIklu
c3BlY3RvckJhY2tlbmQiLAogICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JCYWNrZW5kLmgiLAot
ICAgICJoYW5kbGVyQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3Rv
ckJhY2tlbmQoKSIsCisgICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9s
bGVyLT5pbnNwZWN0b3JCYWNrZW5kKCkiLAogfTsKICR0eXBlVHJhbnNmb3JteyJDb250cm9sbGVy
In0gPSB7CiAgICAgImZvcndhcmRIZWFkZXIiID0+ICJJbnNwZWN0b3JDb250cm9sbGVyLmgiLAot
ICAgICJoYW5kbGVyQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXIiLAorICAgICJk
b21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQ29udHJvbGxlciIsCiB9OwogJHR5cGVUcmFu
c2Zvcm17IkRlYnVnIn0gPSB7CiAgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50IiwKICAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIiwKLSAgICAi
aGFuZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5kZWJ1Z2dlckFnZW50
KCkiLAorICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGVi
dWdnZXJBZ2VudCgpIiwKIH07CiAkdHlwZVRyYW5zZm9ybXsiRE9NIn0gPSB7CiAgICAgImZvcndh
cmQiID0+ICJJbnNwZWN0b3JET01BZ2VudCIsCiAgICAgImhlYWRlciIgPT4gIkluc3BlY3RvckRP
TUFnZW50LmgiLAotICAgICJoYW5kbGVyQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmRvbUFnZW50KCkiLAorICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQ29u
dHJvbGxlci0+ZG9tQWdlbnQoKSIsCiB9OwogJHR5cGVUcmFuc2Zvcm17IkFwcGxpY2F0aW9uQ2Fj
aGUifSA9IHsKICAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dCIsCiAgICAgImhlYWRlciIgPT4gIkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIiwK
LSAgICAiaGFuZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5hcHBsaWNh
dGlvbkNhY2hlQWdlbnQoKSIsCisgICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JD
b250cm9sbGVyLT5hcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSIsCiB9OwogJHR5cGVUcmFuc2Zvcm17
IlByb2ZpbGVyIn0gPSB7CiAgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JQcm9maWxlckFnZW50
IiwKICAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIiwKLSAgICAiaGFu
ZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5wcm9maWxlckFnZW50KCki
LAorICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQ29udHJvbGxlci0+cHJvZmls
ZXJBZ2VudCgpIiwKIH07CiAkdHlwZVRyYW5zZm9ybXsiRnJvbnRlbmQifSA9IHsKICAgICAiZm9y
d2FyZCIgPT4gIlJlbW90ZUluc3BlY3RvckZyb250ZW5kIiwKQEAgLTU2LDcgKzU2LDcgQEAgJHR5
cGVUcmFuc2Zvcm17Ik9iamVjdCJ9ID0gewogICAgICJkZWZhdWx0VmFsdWUiID0+ICJJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpIiwKICAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3Rvck9iamVjdCIs
CiAgICAgImhlYWRlciIgPT4gIkluc3BlY3RvclZhbHVlcy5oIiwKLSAgICAiYWNjZXNzb3JTdWZm
aXgiID0+ICJPYmplY3QiCisgICAgIkpTT05UeXBlIiA9PiAiT2JqZWN0IgogfTsKICR0eXBlVHJh
bnNmb3JteyJBcnJheSJ9ID0gewogICAgICJwYXJhbSIgPT4gIlBhc3NSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IiwKQEAgLTY0LDcgKzY0LDcgQEAgJHR5cGVUcmFuc2Zvcm17IkFycmF5In0gPSB7CiAg
ICAgImRlZmF1bHRWYWx1ZSIgPT4gIkluc3BlY3RvckFycmF5OjpjcmVhdGUoKSIsCiAgICAgImZv
cndhcmQiID0+ICJJbnNwZWN0b3JBcnJheSIsCiAgICAgImhlYWRlciIgPT4gIkluc3BlY3RvclZh
bHVlcy5oIiwKLSAgICAiYWNjZXNzb3JTdWZmaXgiID0+ICJBcnJheSIKKyAgICAiSlNPTlR5cGUi
ID0+ICJBcnJheSIKIH07CiAkdHlwZVRyYW5zZm9ybXsiVmFsdWUifSA9IHsKICAgICAicGFyYW0i
ID0+ICJQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiIsCkBAIC03MiwxNCArNzIsMTUgQEAgJHR5
cGVUcmFuc2Zvcm17IlZhbHVlIn0gPSB7CiAgICAgImRlZmF1bHRWYWx1ZSIgPT4gIkluc3BlY3Rv
clZhbHVlOjpudWxsKCkiLAogICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yVmFsdWUiLAogICAg
ICJoZWFkZXIiID0+ICJJbnNwZWN0b3JWYWx1ZXMuaCIsCi0gICAgImFjY2Vzc29yU3VmZml4IiA9
PiAiVmFsdWUiCisgICAgIkpTT05UeXBlIiA9PiAiVmFsdWUiCiB9OwogJHR5cGVUcmFuc2Zvcm17
IlN0cmluZyJ9ID0gewogICAgICJwYXJhbSIgPT4gImNvbnN0IFN0cmluZyYiLAogICAgICJ2YXJp
YWJsZSIgPT4gIlN0cmluZyIsCisgICAgImRlZmF1bHRWYWx1ZSIgPT4gIlwiXCIiLAogICAgICJm
b3J3YXJkSGVhZGVyIiA9PiAid3RmL0ZvcndhcmQuaCIsCiAgICAgImhlYWRlciIgPT4gIlBsYXRm
b3JtU3RyaW5nLmgiLAotICAgICJhY2Nlc3NvclN1ZmZpeCIgPT4gIlN0cmluZyIKKyAgICAiSlNP
TlR5cGUiID0+ICJTdHJpbmciCiB9OwogJHR5cGVUcmFuc2Zvcm17ImxvbmcifSA9IHsKICAgICAi
cGFyYW0iID0+ICJsb25nIiwKQEAgLTg3LDcgKzg4LDcgQEAgJHR5cGVUcmFuc2Zvcm17Imxvbmci
fSA9IHsKICAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMCIsCiAgICAgImZvcndhcmQiID0+ICIiLAog
ICAgICJoZWFkZXIiID0+ICIiLAotICAgICJhY2Nlc3NvclN1ZmZpeCIgPT4gIk51bWJlciIKKyAg
ICAiSlNPTlR5cGUiID0+ICJOdW1iZXIiCiB9OwogJHR5cGVUcmFuc2Zvcm17ImludCJ9ID0gewog
ICAgICJwYXJhbSIgPT4gImludCIsCkBAIC05NSw3ICs5Niw3IEBAICR0eXBlVHJhbnNmb3JteyJp
bnQifSA9IHsKICAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMCIsCiAgICAgImZvcndhcmQiID0+ICIi
LAogICAgICJoZWFkZXIiID0+ICIiLAotICAgICJhY2Nlc3NvclN1ZmZpeCIgPT4gIk51bWJlciIs
CisgICAgIkpTT05UeXBlIiA9PiAiTnVtYmVyIiwKIH07CiAkdHlwZVRyYW5zZm9ybXsidW5zaWdu
ZWQgbG9uZyJ9ID0gewogICAgICJwYXJhbSIgPT4gInVuc2lnbmVkIGxvbmciLApAQCAtMTAzLDcg
KzEwNCw3IEBAICR0eXBlVHJhbnNmb3JteyJ1bnNpZ25lZCBsb25nIn0gPSB7CiAgICAgImRlZmF1
bHRWYWx1ZSIgPT4gIjB1IiwKICAgICAiZm9yd2FyZCIgPT4gIiIsCiAgICAgImhlYWRlciIgPT4g
IiIsCi0gICAgImFjY2Vzc29yU3VmZml4IiA9PiAiTnVtYmVyIgorICAgICJKU09OVHlwZSIgPT4g
Ik51bWJlciIKIH07CiAkdHlwZVRyYW5zZm9ybXsidW5zaWduZWQgaW50In0gPSB7CiAgICAgInBh
cmFtIiA9PiAidW5zaWduZWQgaW50IiwKQEAgLTExMSw3ICsxMTIsNyBAQCAkdHlwZVRyYW5zZm9y
bXsidW5zaWduZWQgaW50In0gPSB7CiAgICAgImRlZmF1bHRWYWx1ZSIgPT4gIjB1IiwKICAgICAi
Zm9yd2FyZCIgPT4gIiIsCiAgICAgImhlYWRlciIgPT4gIiIsCi0gICAgImFjY2Vzc29yU3VmZml4
IiA9PiAiTnVtYmVyIgorICAgICJKU09OVHlwZSIgPT4gIk51bWJlciIKIH07CiAkdHlwZVRyYW5z
Zm9ybXsiYm9vbGVhbiJ9ID0gewogICAgICJwYXJhbSIgPT4gImJvb2wiLApAQCAtMTE5LDcgKzEy
MCw3IEBAICR0eXBlVHJhbnNmb3JteyJib29sZWFuIn0gPSB7CiAgICAgImRlZmF1bHRWYWx1ZSIg
PT4gImZhbHNlIiwKICAgICAiZm9yd2FyZCIgPT4gIiIsCiAgICAgImhlYWRlciIgPT4gIiIsCi0g
ICAgImFjY2Vzc29yU3VmZml4IiA9PiAiQm9vbCIKKyAgICAiSlNPTlR5cGUiID0+ICJCb29sIgog
fTsKICR0eXBlVHJhbnNmb3JteyJ2b2lkIn0gPSB7CiAgICAgImZvcndhcmQiID0+ICIiLApAQCAt
MTYyLDEwICsxNjMsNiBAQCBteSBAZnJvbnRlbmRDb25zdGFudERlY2xhcmF0aW9uczsKIG15IEBm
cm9udGVuZENvbnN0YW50RGVmaW5pdGlvbnM7CiBteSAkZnJvbnRlbmRGb290ZXI7CiAKLW15ICRj
YWxsSWQgPSBuZXcgZG9tU2lnbmF0dXJlKCk7ICMgaXQgaXMganVzdCBzdHJ1Y3R1cmUgZm9yIGRl
c2NyaWJpbmcgcGFyYW1ldGVycyBmcm9tIElETFN0cnVjdHVyZS5wbS4KLSRjYWxsSWQtPnR5cGUo
ImxvbmciKTsKLSRjYWxsSWQtPm5hbWUoImNhbGxJZCIpOwotCiAjIERlZmF1bHQgY29uc3RydWN0
b3IKIHN1YiBuZXcKIHsKQEAgLTIyMiw5ICsyMTksOCBAQCBzdWIgR2VuZXJhdGVJbnRlcmZhY2UK
ICAgICAkYmFja2VuZFR5cGVzeyJDb250cm9sbGVyIn0gPSAxOwogICAgICRiYWNrZW5kVHlwZXN7
Ikluc3BlY3RvckNsaWVudCJ9ID0gMTsKICAgICAkYmFja2VuZFR5cGVzeyJQYXNzUmVmUHRyIn0g
PSAxOwotICAgICRiYWNrZW5kVHlwZXN7IkFycmF5In0gPSAxOworICAgICRiYWNrZW5kVHlwZXN7
Ik9iamVjdCJ9ID0gMTsKIAotICAgIHB1c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgZ2VuZXJhdGVC
YWNrZW5kUHJpdmF0ZUZ1bmN0aW9ucygpKTsKICAgICBwdXNoKEBiYWNrZW5kTWV0aG9kc0ltcGws
IGdlbmVyYXRlQmFja2VuZE1lc3NhZ2VQYXJzZXIoKSk7CiAgICAgZ2VuZXJhdGVGdW5jdGlvbnMo
JGludGVyZmFjZSk7CiAKQEAgLTI1OSw3ICsyNTUsNiBAQCBzdWIgZ2VuZXJhdGVGcm9udGVuZEZ1
bmN0aW9uCiAgICAgbXkgQGFyZ3NGaWx0ZXJlZCA9IGdyZXAoJF8tPmRpcmVjdGlvbiBlcSAib3V0
IiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsgIyBqdXN0IGtlZXAgb25seSBvdXQgcGFyYW1l
dGVycyBmb3IgZnJvbnRlbmQgaW50ZXJmYWNlLgogICAgIG1hcCgkZnJvbnRlbmRUeXBlc3skXy0+
dHlwZX0gPSAxLCBAYXJnc0ZpbHRlcmVkKTsgIyByZWdpc3RlciByZXF1aXJlZCB0eXBlcy4KICAg
ICBteSAkYXJndW1lbnRzID0gam9pbigiLCAiLCBtYXAoJHR5cGVUcmFuc2Zvcm17JF8tPnR5cGV9
LT57InBhcmFtIn0gLiAiICIgLiAkXy0+bmFtZSwgQGFyZ3NGaWx0ZXJlZCkpOyAjIHByZXBhcmUg
YXJndW1lbnRzIGZvciBmdW5jdGlvbiBzaWduYXR1cmUuCi0gICAgbXkgQHB1c2hBcmd1bWVudHMg
PSBtYXAoIiAgICBhcmd1bWVudHMtPnB1c2giIC4gJHR5cGVUcmFuc2Zvcm17JF8tPnR5cGV9LT57
ImFjY2Vzc29yU3VmZml4In0gLiAiKCIgLiAkXy0+bmFtZSAuICIpOyIsIEBhcmdzRmlsdGVyZWQp
OwogCiAgICAgbXkgJHNpZ25hdHVyZSA9ICIgICAgdm9pZCAke2Z1bmN0aW9uTmFtZX0oJHthcmd1
bWVudHN9KTsiOwogICAgIGlmICghJGZyb250ZW5kTWV0aG9kc3ske3NpZ25hdHVyZX19KSB7CkBA
IC0yNjgsMTAgKzI2MywxNCBAQCBzdWIgZ2VuZXJhdGVGcm9udGVuZEZ1bmN0aW9uCiAgICAgICAg
IG15IEBmdW5jdGlvbjsKICAgICAgICAgcHVzaChAZnVuY3Rpb24sICJ2b2lkICR7ZnJvbnRlbmRD
bGFzc05hbWV9Ojoke2Z1bmN0aW9uTmFtZX0oJHthcmd1bWVudHN9KSIpOwogICAgICAgICBwdXNo
KEBmdW5jdGlvbiwgInsiKTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Iik7Ci0g
ICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhcIiRmdW5j
dGlvbk5hbWVcIik7Iik7CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+ICR7ZnVuY3Rpb25OYW1lfU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOyIpOworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAke2Z1bmN0aW9uTmFtZX1N
ZXNzYWdlLT5zZXRTdHJpbmcoXCJ0eXBlXCIsIFwiZXZlbnRcIik7Iik7CisgICAgICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgICR7ZnVuY3Rpb25OYW1lfU1lc3NhZ2UtPnNldFN0cmluZyhcImV2ZW50
XCIsIFwiJGZ1bmN0aW9uTmFtZVwiKTsiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5bG9hZERhdGFPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOyIpOworICAgICAgICBteSBAcHVzaEFyZ3VtZW50cyA9IG1hcCgiICAgIHBh
eWxvYWREYXRhT2JqZWN0LT5zZXQiIC4gJHR5cGVUcmFuc2Zvcm17JF8tPnR5cGV9LT57IkpTT05U
eXBlIn0gLiAiKFwiIiAuICRfLT5uYW1lIC4gIlwiLCAiIC4gJF8tPm5hbWUgLiAiKTsiLCBAYXJn
c0ZpbHRlcmVkKTsKICAgICAgICAgcHVzaChAZnVuY3Rpb24sIEBwdXNoQXJndW1lbnRzKTsKLSAg
ICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgbV9pbnNwZWN0b3JDbGllbnQtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsiKTsKKyAgICAgICAgcHVzaChA
ZnVuY3Rpb24sICIgICAgJHtmdW5jdGlvbk5hbWV9TWVzc2FnZS0+c2V0T2JqZWN0KFwiZGF0YVwi
LCBwYXlsb2FkRGF0YU9iamVjdCk7Iik7CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIG1f
aW5zcGVjdG9yQ2xpZW50LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoJHtmdW5jdGlvbk5hbWV9TWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOyIpOwogCiAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAifSIp
OwogICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwpAQCAtMjc5LDIyICsyNzgsNiBAQCBzdWIg
Z2VuZXJhdGVGcm9udGVuZEZ1bmN0aW9uCiAgICAgfQogfQogCi1zdWIgZ2VuZXJhdGVCYWNrZW5k
UHJpdmF0ZUZ1bmN0aW9ucwotewotICAgIG15ICRwcml2YXRlRnVuY3Rpb25zID0gPDwgIkVPRiI7
Ci1zdGF0aWMgU3RyaW5nIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKHVuc2lnbmVk
IGV4cGVjdGVkLCB1bnNpZ25lZCBhY3R1YWwpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0
KCJXcm9uZyBudW1iZXIgb2YgcGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAlZCkiLCBhY3R1YWws
IGV4cGVjdGVkKTsKLX0KLQotc3RhdGljIFN0cmluZyBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1l
c3NhZ2UodW5zaWduZWQgcG9zaXRpb24sIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIGV4
cGVjdGVkVHlwZSkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIkZhaWxlZCB0byBjb252
ZXJ0IHBhcmFtZXRlciAlZCAoJXMpIHRvICVzIiwgcG9zaXRpb24sIG5hbWUsIGV4cGVjdGVkVHlw
ZSk7Ci19Ci1FT0YKLSAgICByZXR1cm4gc3BsaXQoIlxuIiwgJHByaXZhdGVGdW5jdGlvbnMpOwot
fQotCiBzdWIgZ2VuZXJhdGVCYWNrZW5kRnVuY3Rpb24KIHsKICAgICBteSAkZnVuY3Rpb24gPSBz
aGlmdDsKQEAgLTMwNSw3NCArMjg4LDkwIEBAIHN1YiBnZW5lcmF0ZUJhY2tlbmRGdW5jdGlvbgog
ICAgIHB1c2goQGJhY2tlbmRDb25zdGFudERlZmluaXRpb25zLCAiY29uc3QgY2hhciogJHtiYWNr
ZW5kQ2xhc3NOYW1lfTo6JHtmdW5jdGlvbk5hbWV9Q21kID0gXCIke2Z1bmN0aW9uTmFtZX1cIjsi
KTsKIAogICAgIG1hcCgkYmFja2VuZFR5cGVzeyRfLT50eXBlfSA9IDEsIEB7JGZ1bmN0aW9uLT5w
YXJhbWV0ZXJzfSk7ICMgcmVnaXN0ZXIgcmVxdWlyZWQgdHlwZXMKLSAgICBteSBAaW5BcmdzID0g
Z3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJpbiIsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSk7Cisg
ICAgbXkgQGluQXJncyA9IGdyZXAoJF8tPmRpcmVjdGlvbiBlcSAiaW4iICYmICEoJF8tPm5hbWUg
ZXEgImNhbGxJZCIpICwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsKICAgICBteSBAb3V0QXJn
cyA9IGdyZXAoJF8tPmRpcmVjdGlvbiBlcSAib3V0IiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9
KTsKIAotICAgIG15ICRzaWduYXR1cmUgPSAiICAgIHZvaWQgJHtmdW5jdGlvbk5hbWV9KFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpOyI7CisgICAgbXkgJHNpZ25hdHVyZSA9ICIgICAg
dm9pZCAke2Z1bmN0aW9uTmFtZX0obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpOyI7CiAgICAgISRiYWNrZW5kTWV0aG9kc3ske3NpZ25hdHVyZX19IHx8
IGRpZSAiRHVwbGljYXRlIGZ1bmN0aW9uIHdhcyBkZXRlY3RlZCBmb3Igc2lnbmF0dXJlICckc2ln
bmF0dXJlJy4iOwogICAgICRiYWNrZW5kTWV0aG9kc3ske3NpZ25hdHVyZX19ID0gJGZ1bmN0aW9u
TmFtZTsKIAogICAgIG15IEBmdW5jdGlvbjsKLSAgICBwdXNoKEBmdW5jdGlvbiwgInZvaWQgJHti
YWNrZW5kQ2xhc3NOYW1lfTo6JHtmdW5jdGlvbk5hbWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGFyZ3MpIik7CisgICAgbXkgJHJlcXVlc3RNZXNzYWdlT2JqZWN0ID0gc2NhbGFyKEBpbkFy
Z3MpID8gIiByZXF1ZXN0TWVzc2FnZU9iamVjdCIgOiAiIjsKKyAgICBwdXNoKEBmdW5jdGlvbiwg
InZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6JHtmdW5jdGlvbk5hbWV9KGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqJHJlcXVlc3RNZXNzYWdlT2JqZWN0KSIpOwogICAgIHB1c2goQGZ1bmN0
aW9uLCAieyIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGxvbmcgY2FsbElkID0gMDsiKTsK
KyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOyIpOwogICAgIHB1c2goQGZ1bmN0aW9u
LCAiIik7CiAKLSAgICBteSAkZXhwZWN0ZWRQYXJhbWV0ZXJzQ291bnQgPSBzY2FsYXIoQGluQXJn
cyk7Ci0gICAgbXkgJGV4cGVjdGVkUGFyYW1ldGVyc0NvdW50V2l0aE1ldGhvZE5hbWUgPSBzY2Fs
YXIoQGluQXJncykgKyAxOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmIChhcmdzLT5sZW5n
dGgoKSAhPSAkZXhwZWN0ZWRQYXJhbWV0ZXJzQ291bnRXaXRoTWV0aG9kTmFtZSkgeyIpOwotICAg
IHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsiKTsKLSAgICBw
dXNoKEBmdW5jdGlvbiwgIiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsICR7ZnVu
Y3Rpb25OYW1lfUNtZCwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVu
Z3RoKCkgLSAxLCAkZXhwZWN0ZWRQYXJhbWV0ZXJzQ291bnQpKTsiKTsKLSAgICBwdXNoKEBmdW5j
dGlvbiwgIiAgICAgICAgcmV0dXJuOyIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIH0iKTsK
KyAgICBteSAkZG9tYWluID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJoYW5kbGVyIn0gfHwgIkNvbnRyb2xsZXIiOworICAgIG15ICRkb21haW5BY2Nlc3NvciA9
ICR0eXBlVHJhbnNmb3JteyRkb21haW59LT57ImRvbWFpbkFjY2Vzc29yIn07CisgICAgJGJhY2tl
bmRUeXBlc3skZG9tYWlufSA9IDE7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgaWYgKCEkZG9t
YWluQWNjZXNzb3IpIik7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KFwiRXJyb3I6ICVzIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS5cIiwgXCIkZG9tYWluXCIpKTsiKTsKICAgICBwdXNoKEBmdW5jdGlvbiwgIiIp
OwogCi0gICAgbXkgJGkgPSAxOyAjIHplcm8gZWxlbWVudCBpcyB0aGUgbWV0aG9kIG5hbWUuCi0g
ICAgZm9yZWFjaCBteSAkcGFyYW1ldGVyIChAaW5BcmdzKSB7Ci0gICAgICAgIG15ICR0eXBlID0g
JHBhcmFtZXRlci0+dHlwZTsKLSAgICAgICAgbXkgJGFyZ3VtZW50VHlwZSA9ICR0eXBlVHJhbnNm
b3JteyR0eXBlfS0+eyJ2YXJpYWJsZSJ9OwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAk
YXJndW1lbnRUeXBlICIgLiAkcGFyYW1ldGVyLT5uYW1lIC4gIjsiKSBpZiAhKCRwYXJhbWV0ZXIt
Pm5hbWUgZXEgImNhbGxJZCIpOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBpZiAoIWFy
Z3MtPmdldCgkaSktPmFzIiAuICR0eXBlVHJhbnNmb3JteyR0eXBlfS0+eyJhY2Nlc3NvclN1ZmZp
eCJ9IC4gIigmIiAuICRwYXJhbWV0ZXItPm5hbWUgLiAiKSkgeyIpOworICAgIGlmIChzY2FsYXIo
QGluQXJncykpIHsKKyAgICAgICAgIyBkZWNsYXJlIHZhcmlhYmxlcyBmb3IgYWxsICdpbicgYXJn
czsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sIG1hcCgiICAgICIgLiAkdHlwZVRyYW5zZm9ybXsk
Xy0+dHlwZX0tPnsidmFyaWFibGUifSAuICIgIiAuICRfLT5uYW1lIC4gIiA9ICIgLiAkdHlwZVRy
YW5zZm9ybXskXy0+dHlwZX0tPnsiZGVmYXVsdFZhbHVlIn0gLiAiOyIsIEBpbkFyZ3MpKTsKKwor
ICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhcmd1bWVudHNDb250YWluZXI7Iik7CisgICAgICAg
IHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmICghKGFyZ3VtZW50c0NvbnRhaW5lciA9IHJlcXVlc3RN
ZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoXCJhcmd1bWVudHNcIikpKSB7Iik7CiAgICAgICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsiKTsKLSAgICAgICAg
cHVzaChAZnVuY3Rpb24sICIgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCAke2Z1
bmN0aW9uTmFtZX1DbWQsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgkaSwgXCIiIC4g
JHBhcmFtZXRlci0+bmFtZSAuICJcIiwgXCIkdHlwZVwiKSk7Iik7Ci0gICAgICAgIHB1c2goQGZ1
bmN0aW9uLCAiICAgICAgICByZXR1cm47Iik7CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdChcIkVycm9yOiBh
cmd1bWVudHMgb2JqZWN0IHdhcyBub3QgZm91bmQuXCIpKTsiKTsKKyAgICAgICAgcHVzaChAZnVu
Y3Rpb24sICIgICAgfSBlbHNlIHsiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAg
IEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgYXJndW1lbnRzRW5kSXRlcmF0b3IgPSBh
cmd1bWVudHNDb250YWluZXItPmVuZCgpOyIpOworCisgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFt
ZXRlciAoQGluQXJncykgeworICAgICAgICAgICAgbXkgJG5hbWUgPSAkcGFyYW1ldGVyLT5uYW1l
OworICAgICAgICAgICAgbXkgJHR5cGUgPSAkcGFyYW1ldGVyLT50eXBlOworICAgICAgICAgICAg
bXkgJHZhcmlhYmxlVHlwZSA9ICR0eXBlVHJhbnNmb3JteyR0eXBlfS0+eyJ2YXJpYWJsZSJ9Owor
ICAgICAgICAgICAgbXkgJEpTT05UeXBlID0gJHR5cGVUcmFuc2Zvcm17JHR5cGV9LT57IkpTT05U
eXBlIn07CisKKyAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7CisgICAgICAgICAgICBw
dXNoKEBmdW5jdGlvbiwgIiAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciAk
e25hbWV9VmFsdWVJdGVyYXRvciA9IGFyZ3VtZW50c0NvbnRhaW5lci0+ZmluZChcIiRuYW1lXCIp
OyIpOworICAgICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIGlmICgke25hbWV9VmFs
dWVJdGVyYXRvciA9PSBhcmd1bWVudHNFbmRJdGVyYXRvcikgeyIpOworICAgICAgICAgICAgcHVz
aChAZnVuY3Rpb24sICIgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsiKTsKKyAgICAg
ICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoU3RyaW5nOjpmb3JtYXQoXCJFcnJvcjogQXJndW1lbnQgJyVzJyB3aXRoIHR5cGUgJyVz
JyB3YXMgbm90IGZvdW5kLlwiLCBcIiRuYW1lXCIsIFwiJEpTT05UeXBlXCIpKTsiKTsKKyAgICAg
ICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICB9IGVsc2UgeyIpOworICAgICAgICAgICAg
cHVzaChAZnVuY3Rpb24sICIgICAgICAgICAgICBpZiAoISR7bmFtZX1WYWx1ZUl0ZXJhdG9yLT5z
ZWNvbmQtPmFzJEpTT05UeXBlKCYkbmFtZSkpIHsiKTsKKyAgICAgICAgICAgIHB1c2goQGZ1bmN0
aW9uLCAiICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyIpOworICAgICAgICAg
ICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoU3RyaW5nOjpmb3JtYXQoXCJFcnJvcjogQXJndW1lbnQgJyVzJyBoYXMgd3JvbmcgdHlw
ZS4gSXQgc2hvdWxkIGJlICclcycuXCIsIFwiJG5hbWVcIiwgXCIkSlNPTlR5cGVcIikpOyIpOwor
ICAgICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgICAgICB9Iik7CisgICAgICAgICAg
ICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgfSIpOworICAgICAgICB9CiAgICAgICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgIH0iKTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLSAgICAg
ICAgKyskaTsKICAgICB9CiAKLSAgICBteSAkaGFuZGxlciA9ICRmdW5jdGlvbi0+c2lnbmF0dXJl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiaGFuZGxlciJ9IHx8ICJDb250cm9sbGVyIjsKLSAgICBt
eSAkaGFuZGxlckFjY2Vzc29yID0gJHR5cGVUcmFuc2Zvcm17JGhhbmRsZXJ9LT57ImhhbmRsZXJB
Y2Nlc3NvciJ9OwotICAgICRiYWNrZW5kVHlwZXN7JGhhbmRsZXJ9ID0gMTsKLSAgICBwdXNoKEBm
dW5jdGlvbiwgIiAgICBpZiAoISRoYW5kbGVyQWNjZXNzb3IpIHsiKTsKLSAgICBwdXNoKEBmdW5j
dGlvbiwgIiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsICR7ZnVuY3Rpb25OYW1l
fUNtZCwgXCJFcnJvcjogJGhhbmRsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLlwiKTsiKTsK
LSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgcmV0dXJuOyIpOwotICAgIHB1c2goQGZ1bmN0
aW9uLCAiICAgIH0iKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOworICAgICMgZGVjbGFyZSBs
b2NhbCB2YXJpYWJsZXMgZm9yIG91dCBhcmd1bWVudHMuCisgICAgcHVzaChAZnVuY3Rpb24sIG1h
cCgiICAgICIgLiAkdHlwZVRyYW5zZm9ybXskXy0+dHlwZX0tPnsidmFyaWFibGUifSAuICIgIiAu
ICRfLT5uYW1lIC4gIiA9ICIgLiAkdHlwZVRyYW5zZm9ybXskXy0+dHlwZX0tPnsiZGVmYXVsdFZh
bHVlIn0gLiAiOyIsIEBvdXRBcmdzKSk7CiAKKyAgICBteSAkYXJncyA9IGpvaW4oIiwgIiwgKG1h
cCgkXy0+bmFtZSwgQGluQXJncyksIG1hcCgiJiIgLiAkXy0+bmFtZSwgQG91dEFyZ3MpKSk7Cisg
ICAgcHVzaChAZnVuY3Rpb24sICIgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIik7
CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgICRkb21haW5BY2Nlc3Nvci0+JGZ1bmN0aW9u
TmFtZSgkYXJncyk7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKIAotICAgIGZvcmVhY2gg
KEBvdXRBcmdzKSB7ICMgZGVjbGFyZSBsb2NhbCB2YXJpYWJsZXMgZm9yIG91dCBhcmd1bWVudHMu
Ci0gICAgICAgIG15ICRpbml0aWFsaXplciA9ICR0eXBlVHJhbnNmb3JteyRfLT50eXBlfS0+eyJk
ZWZhdWx0VmFsdWUifSA/ICIgPSAiIC4gJHR5cGVUcmFuc2Zvcm17JF8tPnR5cGV9LT57ImRlZmF1
bHRWYWx1ZSJ9IDogIiI7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICIgLiAkdHlwZVRy
YW5zZm9ybXskXy0+dHlwZX0tPnsidmFyaWFibGUifSAuICIgIiAuICRfLT5uYW1lIC4gIiRpbml0
aWFsaXplcjsiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAvLyB1c2UgSW5zcGVjdG9yRnJv
bnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eSIpOworICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgIGlmIChjYWxsSWQgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5o
YXNGcm9udGVuZCgpKSB7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0
TnVtYmVyKFwic2VxXCIsIGNhbGxJZCk7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKFwidHlwZVwiLCBcInJlc3BvbnNlXCIpOyIpOwor
ICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldFN0cmluZyhc
ImRvbWFpblwiLCBcIiRkb21haW5cIik7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKFwiY29tbWFuZFwiLCBcIiRmdW5jdGlvbk5hbWVc
Iik7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0
Qm9vbChcInN1Y2Nlc3NcIiwgIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSk7Iik7CisgICAgcHVz
aChAZnVuY3Rpb24sICIiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgaWYgKHByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0QXJyYXkoXCJlcnJvcnNcIiwgcHJvdG9jb2xFcnJvcnMpOyIp
OworICAgIGlmIChzY2FsYXIoQG91dEFyZ3MpKSB7CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAi
ICAgICAgICBlbHNlIHsiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZURhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOyIpOworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgbWFwKCIgICAgICAgICAgICByZXNw
b25zZURhdGEtPnNldCIgLiAkdHlwZVRyYW5zZm9ybXskXy0+dHlwZX0tPnsiSlNPTlR5cGUifSAu
ICIoXCIiIC4gJF8tPm5hbWUgLiAiXCIsICIgLiAkXy0+bmFtZSAuICIpOyIsIEBvdXRBcmdzKSk7
CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5z
ZXRPYmplY3QoXCJkYXRhXCIsIHJlc3BvbnNlRGF0YSk7Iik7CisgICAgICAgIHB1c2goQGZ1bmN0
aW9uLCAiICAgICAgICB9Iik7CiAgICAgfQorICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJv
bnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Iik7CisgICAgcHVzaChAZnVu
Y3Rpb24sICIgICAgfSIpOwogCi0gICAgbXkgJGFyZ3MgPSBqb2luKCIsICIsIChncmVwKCEoJF8g
ZXEgImNhbGxJZCIpLCBtYXAoJF8tPm5hbWUsIEBpbkFyZ3MpKSwgbWFwKCImIiAuICRfLT5uYW1l
LCBAb3V0QXJncykpKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAkaGFuZGxlckFjY2Vzc29y
LT4kZnVuY3Rpb25OYW1lKCRhcmdzKTsiKTsKLQotICAgICMgVGhlIHJlc3VsdHMgb2YgZnVuY3Rp
b24gY2FsbCBzaG91bGQgYmUgdHJhbnNmZXJlZCBiYWNrIHRvIGZyb250ZW5kLgotICAgIGlmIChz
Y2FsYXIoZ3JlcCgkXy0+bmFtZSBlcSAiY2FsbElkIiwgQGluQXJncykpKSB7Ci0gICAgICAgIG15
IEBwdXNoQXJndW1lbnRzID0gbWFwKCIgICAgICAgIGFyZ3VtZW50cy0+cHVzaCIgLiAkdHlwZVRy
YW5zZm9ybXskXy0+dHlwZX0tPnsiYWNjZXNzb3JTdWZmaXgifSAuICIoIiAuICRfLT5uYW1lIC4g
Iik7IiwgQG91dEFyZ3MpOwogCi0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7Ci0gICAgICAg
IHB1c2goQGZ1bmN0aW9uLCAiICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtl
ciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5Iik7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9u
LCAiICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpIHsiKTsKLSAg
ICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJn
dW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOyIpOwotICAgICAgICBwdXNoKEBmdW5j
dGlvbiwgIiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKFwicHJvY2Vzc1Jlc3BvbnNlXCIp
OyIpOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVt
YmVyKGNhbGxJZCk7Iik7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCBAcHVzaEFyZ3VtZW50cyk7
Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXIt
Pmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pT
T05TdHJpbmcoKSk7Iik7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIH0iKTsKLSAgICB9
CiAgICAgcHVzaChAZnVuY3Rpb24sICJ9Iik7CiAgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKICAg
ICBwdXNoKEBiYWNrZW5kTWV0aG9kc0ltcGwsIEBmdW5jdGlvbik7CkBAIC0zODQsMTcgKzM4Mywy
MiBAQCBzdWIgZ2VuZXJhdGVCYWNrZW5kUmVwb3J0UHJvdG9jb2xFcnJvcgogCiB2b2lkICR7YmFj
a2VuZENsYXNzTmFtZX06OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBTdHJpbmcmIGVycm9yVGV4dCkgY29uc3QKIHsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKLSAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoInJlcG9ydFByb3RvY29sRXJyb3IiKTsK
LSAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKLSAgICBhcmd1bWVudHMtPnB1c2hT
dHJpbmcobWV0aG9kKTsKLSAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoZXJyb3JUZXh0KTsKLSAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRv
RnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CisgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbWVzc2Fn
ZS0+c2V0TnVtYmVyKCJzZXEiLCBjYWxsSWQpOworICAgIG1lc3NhZ2UtPnNldFN0cmluZygidHlw
ZSIsICJlcnJvciIpOworICAgIG1lc3NhZ2UtPnNldFN0cmluZygiZG9tYWluIiwgImluc3BlY3Rv
clByb3RvY29sIik7CisgICAgbWVzc2FnZS0+c2V0U3RyaW5nKCJjb21tYW5kIiwgbWV0aG9kKTsK
KyAgICBtZXNzYWdlLT5zZXRCb29sKCJzdWNjZXNzIiwgZmFsc2UpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gZXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIGVycm9y
cy0+cHVzaFN0cmluZyhlcnJvclRleHQpOworICAgIG1lc3NhZ2UtPnNldEFycmF5KCJlcnJvcnMi
LCBlcnJvcnMpOworICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCkt
PnNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiBFT0YK
ICAgICByZXR1cm4gc3BsaXQoIlxuIiwgJHJlcG9ydFByb3RvY29sRXJyb3IpOwogfQogCisKIHN1
YiBnZW5lcmF0ZUJhY2tlbmREaXNwYXRjaGVyCiB7CiAgICAgbXkgQGJvZHk7CkBAIC00MDUsOSAr
NDA5LDExIEBAIHN1YiBnZW5lcmF0ZUJhY2tlbmREaXNwYXRjaGVyCiAgICAgbXkgJGJhY2tlbmRE
aXNwYXRjaGVyQm9keSA9IDw8ICJFT0YiOwogdm9pZCAke2JhY2tlbmRDbGFzc05hbWV9OjpkaXNw
YXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgdHlwZWRlZiB2b2lkICgke2JhY2tl
bmRDbGFzc05hbWV9OjoqQ2FsbEhhbmRsZXIpKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFy
Z3MpOworICAgIHR5cGVkZWYgdm9pZCAoJHtiYWNrZW5kQ2xhc3NOYW1lfTo6KkNhbGxIYW5kbGVy
KShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBtZXNzYWdlT2JqZWN0KTsKICAgICB0eXBl
ZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7CiAgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICk7CisgICAgbG9uZyBjYWxs
SWQgPSAwOworCiAgICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgewogJG1hcEVudHJpZXMK
ICAgICB9CkBAIC00MTUsMzggKzQyMSw1MiBAQCAkbWFwRW50cmllcwogICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gcGFyc2VkTWVzc2FnZSA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04obWVz
c2FnZSk7CiAgICAgaWYgKCFwYXJzZWRNZXNzYWdlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsICJkaXNwYXRjaCIsICJFcnJv
cjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gTWVzc2FnZSBzaG91bGQgYmUgaW4gSlNPTiBmb3Jt
YXQuIik7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCAiZGlzcGF0Y2giLCAi
RXJyb3I6IEludmFsaWQgbWVzc2FnZSBmb3JtYXQuIE1lc3NhZ2Ugc2hvdWxkIGJlIGluIEpTT04g
Zm9ybWF0LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbWVzc2FnZU9iamVjdCA9IHBhcnNlZE1lc3NhZ2UtPmFzT2JqZWN0KCk7CisgICAg
aWYgKCFtZXNzYWdlT2JqZWN0KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgImRpc3BhdGNoIiwgIkVycm9yOiBJbnZh
bGlkIG1lc3NhZ2UgZm9ybWF0LiBUaGUgbWVzc2FnZSBzaG91bGQgYmUgYSBKU09OaWZpZWQgb2Jq
ZWN0LiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBtZXNzYWdlQXJyYXkgPSBwYXJzZWRNZXNzYWdlLT5hc0FycmF5KCk7Ci0gICAgaWYgKCFt
ZXNzYWdlQXJyYXkpIHsKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGNhbGxJZFZhbHVlID0g
bWVzc2FnZU9iamVjdC0+Z2V0KCJzZXEiKTsKKyAgICBpZiAoIWNhbGxJZFZhbHVlKSB7CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAs
ICJkaXNwYXRjaCIsICJFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gVGhlIG1lc3NhZ2Ug
c2hvdWxkIGJlIGEgSlNPTmlmaWVkIGFycmF5IG9mIGFyZ3VtZW50cy4iKTsKKyAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsICJkaXNwYXRjaCIsICJFcnJvcjogSW52YWxpZCBtZXNz
YWdlIGZvcm1hdC4gJ3NlcScgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCBpbiB0aGUgcmVxdWVzdC4i
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghbWVzc2FnZUFycmF5LT5sZW5n
dGgoKSkgeworICAgIGlmICghY2FsbElkVmFsdWUtPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAs
ICJkaXNwYXRjaCIsICJFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gRW1wdHkgbWVzc2Fn
ZSB3YXMgcmVjZWl2ZWQuIik7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCAi
ZGlzcGF0Y2giLCAiRXJyb3I6IEludmFsaWQgbWVzc2FnZSBmb3JtYXQuIHRoZSB0eXBlIG9mICdz
ZXEnIHByb3BlcnR5IHNob3VsZCBiZSBudW1iZXIuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBTdHJpbmcgbWV0aG9kTmFtZTsKLSAgICBpZiAoIW1lc3NhZ2VBcnJheS0+Z2V0KDAp
LT5hc1N0cmluZygmbWV0aG9kTmFtZSkpIHsKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGNv
bW1hbmRWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldCgiY29tbWFuZCIpOworICAgIGlmICghY29t
bWFuZFZhbHVlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXBv
cnRQcm90b2NvbEVycm9yKDAsICJkaXNwYXRjaCIsICJFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZv
cm1hdC4gVGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIG1ldGhvZCBu
YW1lLiIpOworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgImRpc3BhdGNoIiwg
IkVycm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiAnY29tbWFuZCcgcHJvcGVydHkgd2Fzbid0
IGZvdW5kLiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSGFzaE1hcDxTdHJpbmcs
IENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhvZE5hbWUp
OworICAgIFN0cmluZyBjb21tYW5kOworICAgIGlmICghY29tbWFuZFZhbHVlLT5hc1N0cmluZygm
Y29tbWFuZCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJlcG9y
dFByb3RvY29sRXJyb3IoY2FsbElkLCAiZGlzcGF0Y2giLCAiRXJyb3I6IEludmFsaWQgbWVzc2Fn
ZSBmb3JtYXQuIFRoZSB0eXBlIG9mICdjb21tYW5kJyBwcm9wZXJ0eSBzaG91bGQgYmUgc3RyaW5n
LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSGFzaE1hcDxTdHJpbmcsIENhbGxI
YW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKGNvbW1hbmQpOwogICAgIGlm
IChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCAiZGlzcGF0Y2giLCBTdHJpbmc6OmZv
cm1hdCgiRXJyb3I6IEludmFsaWQgbWV0aG9kIG5hbWUuICclcycgd2Fzbid0IGZvdW5kLiIsIG1l
dGhvZE5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNh
bGxJZCwgImRpc3BhdGNoIiwgU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBJbnZhbGlkIGNvbW1hbmQg
d2FzIHJlY2VpdmVkLiAnJXMnIHdhc24ndCBmb3VuZC4iLCBjb21tYW5kLnV0ZjgoKS5kYXRhKCkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICgoKnRoaXMpLippdC0+c2Vjb25kKSht
ZXNzYWdlQXJyYXkpOworICAgICgoKnRoaXMpLippdC0+c2Vjb25kKShjYWxsSWQsIG1lc3NhZ2VP
YmplY3QuZ2V0KCkpOwogfQogRU9GCiAgICAgcmV0dXJuIHNwbGl0KCJcbiIsICRiYWNrZW5kRGlz
cGF0Y2hlckJvZHkpOwpAQCAtNDYwLDE0ICs0ODAsMTggQEAgYm9vbCAke2JhY2tlbmRDbGFzc05h
bWV9OjpnZXRDb21tYW5kTmFtZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmluZyogcmVzdWx0
KQogICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBJbnNwZWN0b3JWYWx1ZTo6cGFy
c2VKU09OKG1lc3NhZ2UpOwogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5ID0gdmFsdWUtPmFzQXJyYXkoKTsKLSAg
ICBpZiAoIWFycmF5KQorCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0gdmFs
dWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmICghYXJyYXktPmxlbmd0aCgpKQorICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
Y29tbWFuZFZhbHVlID0gb2JqZWN0LT5nZXQoImNvbW1hbmQiKTsKKyAgICBpZiAoIWNvbW1hbmRW
YWx1ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBhcnJheS0+Z2V0KDApLT5h
c1N0cmluZyhyZXN1bHQpOworCisgICAgcmV0dXJuIGNvbW1hbmRWYWx1ZS0+YXNTdHJpbmcocmVz
dWx0KTsKIH0KKwogRU9GCiAgICAgcmV0dXJuIHNwbGl0KCJcbiIsICRtZXNzYWdlUGFyc2VyQm9k
eSk7CiB9CkBAIC00NzYsNyArNTAwLDIwIEBAIHN1YiBnZW5lcmF0ZUJhY2tlbmRTdHViSlMKIHsK
ICAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CiAgICAgbXkgQGJhY2tlbmRGdW5jdGlvbnMgPSBn
cmVwKCEkXy0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsibm90aWZ5In0sIEB7JGlu
dGVyZmFjZS0+ZnVuY3Rpb25zfSk7Ci0gICAgbXkgQEpTU3R1YnMgPSBtYXAoIiAgICB0aGlzLl9y
ZWdpc3RlckRlbGVnYXRlKFwiIiAuICRfLT5zaWduYXR1cmUtPm5hbWUgLiAiXCIpOyIsIEBiYWNr
ZW5kRnVuY3Rpb25zKTsKKyAgICBteSBASlNTdHViczsKKworICAgIGZvcmVhY2ggbXkgJGZ1bmN0
aW9uIChAYmFja2VuZEZ1bmN0aW9ucykgeworICAgICAgICBteSAkbmFtZSA9ICRmdW5jdGlvbi0+
c2lnbmF0dXJlLT5uYW1lOworICAgICAgICBteSAkZG9tYWluID0gJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJoYW5kbGVyIn07CisgICAgICAgIG15ICRhcmd1bWVu
dE5hbWVzID0gam9pbigiLCIsIG1hcCgiXCIiIC4gJF8tPm5hbWUgLiAiXCI6IG51bGwiLCBncmVw
KCRfLT5kaXJlY3Rpb24gZXEgImluIiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSkpOworICAg
ICAgICBwdXNoKEBKU1N0dWJzLCAiICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3siIC4KKyAg
ICAgICAgICAgICJcInNlcVwiOiAwLCAiIC4KKyAgICAgICAgICAgICJcInR5cGVcIjogXCJyZXF1
ZXN0XCIsICIgLgorICAgICAgICAgICAgIlwiZG9tYWluXCI6IFwiJGRvbWFpblwiLCAiIC4KKyAg
ICAgICAgICAgICJcImNvbW1hbmRcIjogXCIkbmFtZVwiLCAiIC4KKyAgICAgICAgICAgICJcImFy
Z3VtZW50c1wiOiB7JGFyZ3VtZW50TmFtZXN9IiAuCisgICAgICAgICJ9Jyk7Iik7CisgICAgfQog
CiAgICAgbXkgJEpTU3R1YnMgPSBqb2luKCJcbiIsIEBKU1N0dWJzKTsKICAgICBteSAkaW5zcGVj
dG9yQmFja2VuZFN0dWJKUyA9IDw8ICJFT0YiOwpAQCAtNDg4LDE0ICs1MjUsMjYgQEAgJEpTU3R1
YnMKIH0KIAogV2ViSW5zcGVjdG9yLkluc3BlY3RvckJhY2tlbmRTdHViLnByb3RvdHlwZSA9IHsK
LSAgICBfcmVnaXN0ZXJEZWxlZ2F0ZTogZnVuY3Rpb24obWV0aG9kTmFtZSkKKyAgICBfcmVnaXN0
ZXJEZWxlZ2F0ZTogZnVuY3Rpb24oY29tbWFuZEluZm8pCiAgICAgewotICAgICAgICB0aGlzW21l
dGhvZE5hbWVdID0gdGhpcy5zZW5kTWVzc2FnZVRvQmFja2VuZC5iaW5kKHRoaXMsIG1ldGhvZE5h
bWUpOworICAgICAgICB2YXIgY29tbWFuZE9iamVjdCA9IEpTT04ucGFyc2UoY29tbWFuZEluZm8p
OworICAgICAgICB0aGlzW2NvbW1hbmRPYmplY3QuY29tbWFuZF0gPSB0aGlzLnNlbmRNZXNzYWdl
VG9CYWNrZW5kLmJpbmQodGhpcywgY29tbWFuZEluZm8pOwogICAgIH0sCiAKICAgICBzZW5kTWVz
c2FnZVRvQmFja2VuZDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBK
U09OLnN0cmluZ2lmeShBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKTsKKyAg
ICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwor
ICAgICAgICB2YXIgcmVxdWVzdCA9IEpTT04ucGFyc2UoYXJncy5zaGlmdCgpKTsKKyAgICAgICAg
Zm9yICh2YXIga2V5IGluIHJlcXVlc3QuYXJndW1lbnRzKSB7CisgICAgICAgICAgICBpZiAoa2V5
ID09PSAiY2FsbElkIikKKyAgICAgICAgICAgICAgICByZXF1ZXN0LnNlcSA9IGFyZ3Muc2hpZnQo
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXF1ZXN0LmFyZ3VtZW50c1tr
ZXldID0gYXJncy5zaGlmdCgpOworICAgICAgICB9CisgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9
PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gImZ1bmN0aW9uIikKKyAgICAgICAgICAgIHJlcXVl
c3Quc2VxID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoYXJnc1swXSk7CisKKyAgICAgICAg
dmFyIG1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeShyZXF1ZXN0KTsKICAgICAgICAgSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LnNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpOwogICAgIH0KIH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3IuaWRsCmluZGV4IDM5MmQxZGYuLjIwMzYzNmEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yLmlkbApAQCAtNTcsNiArNTcsNyBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtub3Rp
ZnldIHZvaWQgcmVzb3VyY2VUcmFja2luZ1dhc0Rpc2FibGVkKCk7CiAgICAgICAgIFtub3RpZnld
IHZvaWQgc2VhcmNoaW5nRm9yTm9kZVdhc0VuYWJsZWQoKTsKICAgICAgICAgW25vdGlmeV0gdm9p
ZCBzZWFyY2hpbmdGb3JOb2RlV2FzRGlzYWJsZWQoKTsKKyAgICAgICAgW25vdGlmeV0gdm9pZCBz
ZXRBdHRhY2hlZFdpbmRvdyhvdXQgYm9vbGVhbiBhdHRhY2hlZCk7CiAgICAgICAgIFtub3RpZnld
IHZvaWQgc2V0Q2hpbGROb2RlcyhvdXQgbG9uZyBwYXJlbnRJZCwgb3V0IEFycmF5IG5vZGVzKTsK
ICAgICAgICAgW25vdGlmeV0gdm9pZCBzZXREZXRhY2hlZFJvb3Qob3V0IE9iamVjdCByb290KTsK
ICAgICAgICAgW25vdGlmeV0gdm9pZCBzZXREb2N1bWVudChvdXQgVmFsdWUgcm9vdCk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDg5YzkxMzIuLmQ1Zjlh
M2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC00MjAs
NiArNDIwLDE1IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQoUGFzc093blB0cjxJbnNwZWN0b3JGcm9udGVuCiAgICAgbV9pbnNwZWN0b3JGcm9u
dGVuZENsaWVudCA9IGNsaWVudDsKIH0KIAordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRB
dHRhY2hlZFdpbmRvdyhib29sIGF0dGFjaGVkKQoreworICAgIGlmICghbV9yZW1vdGVGcm9udGVu
ZCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBtX3JlbW90ZUZyb250ZW5kLT5zZXRBdHRhY2hlZFdpbmRvdyhhdHRhY2hlZCk7Cit9
CisKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkV2luZG93U2NyaXB0T2JqZWN0
Q2xlYXJlZChGcmFtZSogZnJhbWUpCiB7CiAgICAgLy8gSWYgdGhlIHBhZ2UgaXMgc3VwcG9zZWQg
dG8gc2VydmUgYXMgSW5zcGVjdG9yRnJvbnRlbmQgbm90aWZ5IGluc3BldG9yIGZyb250ZW5kCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggNGZlNjdjZS4uYmRiN2Iy
OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtMTQ3LDYgKzE0
Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoUGFz
c093blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4gY2xpZW50KTsKICAgICBib29sIGhhc0lu
c3BlY3RvckZyb250ZW5kQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVu
ZENsaWVudDsgfQorICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3coYm9vbCBhdHRhY2hlZCk7CiAK
ICAgICB2b2lkIGluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQoRnJhbWUqKTsKIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNw
cAppbmRleCBiNDVkZDM0Li4wZWUwOTg1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcApAQCAtMTIxLDE1ICsxMjEsNyBAQCB2b2lk
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9h
dCB5KQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OnNldEF0dGFjaGVkV2lu
ZG93KGJvb2wgYXR0YWNoZWQpCiB7Ci0gICAgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvck9iajsK
LSAgICBpZiAoIVNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwg
IldlYkluc3BlY3RvciIsIHdlYkluc3BlY3Rvck9iaikpIHsKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxs
IGZ1bmN0aW9uKHdlYkluc3BlY3Rvck9iaiwgImRpc3BhdGNoIik7IAotICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KCJzZXRBdHRhY2hlZFdpbmRvdyIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFy
Z3VtZW50KGF0dGFjaGVkKTsKLSAgICBmdW5jdGlvbi5jYWxsKCk7CisgICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5zZXRBdHRhY2hlZFdpbmRvdyhhdHRhY2hlZCk7CiB9CiAKIHZvaWQgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6cmVzdG9yZUF0dGFjaGVkV2luZG93SGVpZ2h0KCkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKaW5kZXggNGJjMzZmMi4uNDczYWQyMSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKQEAgLTE3Niw2ICsxNzYsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4pOwogICAgIHZvaWQgc2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5Pik7CiAKKyAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IFN0
cmluZyYgbmFtZSkgY29uc3Q7CiAgICAgYm9vbCBnZXRCb29sKGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogb3V0cHV0KSBjb25zdDsKICAgICBib29sIGdldE51bWJlcihjb25zdCBTdHJpbmcmIG5h
bWUsIGRvdWJsZSogb3V0cHV0KSBjb25zdDsKICAgICBib29sIGdldFN0cmluZyhjb25zdCBTdHJp
bmcmIG5hbWUsIFN0cmluZyogb3V0cHV0KSBjb25zdDsKQEAgLTIyNCw2ICsyMjUsMTEgQEAgcHJp
dmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPEluc3BlY3RvclZhbHVlPiA+IG1fZGF0YTsKIH07CiAK
K2lubGluZSBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIEluc3BlY3Rvck9iamVjdDo6
ZmluZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS5maW5k
KG5hbWUpOworfQorCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmplY3Q6OnNldEJvb2woY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sIHZhbHVlKQogewogICAgIHNldFZhbHVlKG5hbWUsIEluc3BlY3Rv
ckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0NhbGxiYWNrLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Nh
bGxiYWNrLmpzCmluZGV4IGQ4MTYzZmUuLjA2MjFmZDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9DYWxsYmFjay5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQ2FsbGJhY2suanMKQEAgLTQyLDkgKzQyLDggQEAgV2ViSW5zcGVjdG9yLkNhbGxiYWNr
LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIGNhbGxiYWNrSWQ7CiAgICAgfSwKIAotICAg
IHByb2Nlc3NSZXNwb25zZTogZnVuY3Rpb24oY2FsbGJhY2tJZCwgb3B0X3ZhcmFyZykKKyAgICBw
cm9jZXNzUmVzcG9uc2U6IGZ1bmN0aW9uKGNhbGxiYWNrSWQsIGFyZ3MpCiAgICAgewotICAgICAg
ICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7CiAg
ICAgICAgIHZhciBjYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrc1tjYWxsYmFja0lkXTsKICAgICAg
ICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxs
YmFja3NbY2FsbGJhY2tJZF07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5q
cwppbmRleCA1MmFlNzM4Li43OWIwZTBlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuanMKQEAgLTU4OSwyMCArNTg5LDEyIEBAIHZhciB3aW5kb3dMb2FkZWQgPSBmdW5j
dGlvbigpCiAKIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgd2luZG93TG9hZGVkLCBm
YWxzZSk7CiAKLVdlYkluc3BlY3Rvci5kaXNwYXRjaCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBt
ZXRob2ROYW1lID0gYXJndW1lbnRzWzBdOwotICAgIHZhciBwYXJhbWV0ZXJzID0gQXJyYXkucHJv
dG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKLQorV2ViSW5zcGVjdG9yLmRpc3BhdGNo
ID0gZnVuY3Rpb24obWVzc2FnZSkgewogICAgIC8vIFdlJ2QgbGlrZSB0byBlbmZvcmNlIGFzeW5j
aHJvbm91cyBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBpbnNwZWN0b3IgY29udHJvbGxlciBhbmQg
dGhlIGZyb250ZW5kLgogICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IHRvIExheW91dFRlc3RzLgog
ICAgIGZ1bmN0aW9uIGRlbGF5RGlzcGF0Y2goKQogICAgIHsKLSAgICAgICAgaWYgKCEobWV0aG9k
TmFtZSBpbiBXZWJJbnNwZWN0b3IpKSB7Ci0gICAgICAgICAgICBjb25zb2xlLmVycm9yKCJBdHRl
bXB0ZWQgdG8gZGlzcGF0Y2ggdW5pbXBsZW1lbnRlZCBXZWJJbnNwZWN0b3IgbWV0aG9kOiAlcyIs
IG1ldGhvZE5hbWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
V2ViSW5zcGVjdG9yW21ldGhvZE5hbWVdLmFwcGx5KFdlYkluc3BlY3RvciwgcGFyYW1ldGVycyk7
CisgICAgICAgIFdlYkluc3BlY3Rvcl9zeW5jRGlzcGF0Y2gobWVzc2FnZSk7CiAgICAgICAgIFdl
Ykluc3BlY3Rvci5wZW5kaW5nRGlzcGF0Y2hlcy0tOwogICAgIH0KICAgICBXZWJJbnNwZWN0b3Iu
cGVuZGluZ0Rpc3BhdGNoZXMrKzsKQEAgLTYxMiwyMSArNjA0LDQxIEBAIFdlYkluc3BlY3Rvci5k
aXNwYXRjaCA9IGZ1bmN0aW9uKCkgewogLy8gVGhpcyBmdW5jdGlvbiBpcyBwdXJwb3NlbHkgcHV0
IGludG8gdGhlIGdsb2JhbCBzY29wZSBmb3IgZWFzeSBhY2Nlc3MuCiBXZWJJbnNwZWN0b3Jfc3lu
Y0Rpc3BhdGNoID0gZnVuY3Rpb24obWVzc2FnZSkKIHsKLSAgICB2YXIgYXJncyA9IEpTT04ucGFy
c2UobWVzc2FnZSk7Ci0gICAgdmFyIG1ldGhvZE5hbWUgPSBhcmdzWzBdOwotICAgIHZhciBwYXJh
bWV0ZXJzID0gYXJncy5zbGljZSgxKTsKLSAgICBXZWJJbnNwZWN0b3JbbWV0aG9kTmFtZV0uYXBw
bHkoV2ViSW5zcGVjdG9yLCBwYXJhbWV0ZXJzKTsKKyAgICB2YXIgbWVzc2FnZU9iamVjdCA9ICh0
eXBlb2YgbWVzc2FnZSA9PT0gInN0cmluZyIpID8gSlNPTi5wYXJzZShtZXNzYWdlKSA6IG1lc3Nh
Z2U7CisgICAgaWYgKG1lc3NhZ2VPYmplY3QudHlwZSA9PT0gInJlc3BvbnNlIiAmJiAhbWVzc2Fn
ZU9iamVjdC5zdWNjZXNzKSB7CisgICAgICAgIFdlYkluc3BlY3Rvci5yZW1vdmVSZXNwb25zZUNh
bGxiYWNrRW50cnkobWVzc2FnZU9iamVjdC5zZXEpCisgICAgICAgIFdlYkluc3BlY3Rvci5yZXBv
cnRQcm90b2NvbEVycm9yKG1lc3NhZ2VPYmplY3QpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgdmFyIGFyZ3VtZW50cyA9IFtdOworICAgIGlmIChtZXNzYWdlT2JqZWN0LmRhdGEpCisg
ICAgICAgIGZvciAodmFyIGtleSBpbiBtZXNzYWdlT2JqZWN0LmRhdGEpCisgICAgICAgICAgICBh
cmd1bWVudHMucHVzaChtZXNzYWdlT2JqZWN0LmRhdGFba2V5XSk7CisKKyAgICBpZiAobWVzc2Fn
ZU9iamVjdC50eXBlID09PSAiZXZlbnQiKSB7CisgICAgICAgIGlmICghbWVzc2FnZU9iamVjdC5l
dmVudCBpbiBXZWJJbnNwZWN0b3IpIHsKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkF0dGVt
cHRlZCB0byBkaXNwYXRjaCB1bmltcGxlbWVudGVkIFdlYkluc3BlY3RvciBtZXRob2Q6ICVzIiwg
bWVzc2FnZU9iamVjdC5ldmVudCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgV2ViSW5zcGVjdG9yW21lc3NhZ2VPYmplY3QuZXZlbnRdLmFwcGx5KFdlYkluc3BlY3Rv
ciwgYXJndW1lbnRzKTsKKyAgICB9CisKKyAgICBpZiAobWVzc2FnZU9iamVjdC50eXBlID09PSAi
cmVzcG9uc2UiKQorICAgICAgICBXZWJJbnNwZWN0b3IucHJvY2Vzc1Jlc3BvbnNlKG1lc3NhZ2VP
YmplY3Quc2VxLCBhcmd1bWVudHMpOwogfQogCi1XZWJJbnNwZWN0b3IuZGlzcGF0Y2hNZXNzYWdl
RnJvbUJhY2tlbmQgPSBmdW5jdGlvbihhcmd1bWVudHMpCitXZWJJbnNwZWN0b3IuZGlzcGF0Y2hN
ZXNzYWdlRnJvbUJhY2tlbmQgPSBmdW5jdGlvbihtZXNzYWdlT2JqZWN0KQogewotICAgIFdlYklu
c3BlY3Rvci5kaXNwYXRjaC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgIFdlYkluc3BlY3Rv
ci5kaXNwYXRjaChtZXNzYWdlT2JqZWN0KTsKIH0KIAotV2ViSW5zcGVjdG9yLnJlcG9ydFByb3Rv
Y29sRXJyb3IgPSBmdW5jdGlvbihjYWxsSWQsIG1ldGhvZE5hbWUsIGVycm9yVGV4dCkKK1dlYklu
c3BlY3Rvci5yZXBvcnRQcm90b2NvbEVycm9yID0gZnVuY3Rpb24obWVzc2FnZU9iamVjdCkKIHsK
LSAgICBjb25zb2xlLmVycm9yKCJJbnNwZWN0b3JCYWNrZW5kLiIgKyBtZXRob2ROYW1lICsgIiBm
YWlsZWQgd2l0aCBlcnJvciB0ZXh0OiAnIiArIGVycm9yVGV4dCArICInIik7Ci0gICAgV2ViSW5z
cGVjdG9yLnJlbW92ZVJlc3BvbnNlQ2FsbGJhY2tFbnRyeShjYWxsSWQpOworICAgIGNvbnNvbGUu
ZXJyb3IoIkVycm9yOiBJbnNwZWN0b3JCYWNrZW5kLiIgKyBtZXNzYWdlT2JqZWN0LmNvbW1hbmQg
KyAiIGZhaWxlZC4iKTsKKyAgICBmb3IgKHZhciBlcnJvciBpbiBtZXNzYWdlT2JqZWN0LmVycm9y
cykKKyAgICAgICAgY29uc29sZS5lcnJvcigiICAgICIgKyBlcnJvcik7CisgICAgV2ViSW5zcGVj
dG9yLnJlbW92ZVJlc3BvbnNlQ2FsbGJhY2tFbnRyeShtZXNzYWdlT2JqZWN0LnNlcSk7CiB9CiAK
IFdlYkluc3BlY3Rvci53aW5kb3dSZXNpemUgPSBmdW5jdGlvbihldmVudCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>