<?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>152729</bug_id>
          
          <creation_ts>2016-01-04 23:06:26 -0800</creation_ts>
          <short_desc>JSC Sampling Profiler: Detect tester and testee when sampling in RegExp JIT</short_desc>
          <delta_ts>2019-09-11 15:41:51 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>LATER</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>151713</dependson>
          <blocked>182236</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>bburg</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>jlewis3</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mattbaker</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>msaboff</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1152664</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-04 23:06:26 -0800</bug_when>
    <thetext>It will be sweet to know what regular expression we&apos;re executing and against what string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1385144</commentid>
    <comment_count>1</comment_count>
      <attachid>330322</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-01-02 09:06:51 -0800</bug_when>
    <thetext>Created attachment 330322
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1385145</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-01-02 09:08:41 -0800</bug_when>
    <thetext>When executing Octane/regexp with Octane&apos;s test runner, we get the following output. We can see that &quot;/\s?;\s?/&quot; takes much time.

Sampling rate: 1000.000000 microseconds
Top functions as &lt;numSamples  &apos;functionName:sourceID&apos;&gt;
   773    &apos;Exec:2&apos;
   580    &apos;runBlock1:2&apos;
   210    &apos;replace:3&apos;
    89    &apos;runBlock0:2&apos;
    58    &apos;/\s?;\s?/:-1&apos;
    45    &apos;:-1&apos;
    20    &apos;runBlock6:2&apos;
    17    &apos;runBlock11:2&apos;
    13    &apos;runBlock5:2&apos;
     9    &apos;runBlock2:2&apos;
     9    &apos;runBlock3:2&apos;
     8    &apos;runBlock9:2&apos;


Sampling rate: 1000.000000 microseconds
Hottest bytecodes as &lt;numSamples   &apos;functionName#hash:JITType:bytecodeIndex&apos;&gt;
   192    &apos;replace#C4Vrxg:FTL:105&apos;
   134    &apos;Exec#B1957w:Baseline:34 &lt;-- runBlock0#BKLcUC:FTL:235&apos;
   127    &apos;Exec#B1957w:FTL:34&apos;
    81    &apos;runBlock1#AJeMRS:FTL:1860&apos;
    79    &apos;runBlock1#AJeMRS:FTL:1795&apos;
    74    &apos;runBlock1#AJeMRS:DFG:1860&apos;
    64    &apos;runBlock1#AJeMRS:FTL:1925&apos;
    59    &apos;Exec#B1957w:Baseline:34 &lt;-- runBlock0#BKLcUC:FTL:565&apos;
    58    &apos;/\s?;\s?/#&lt;nil&gt;:None:&lt;nil&gt;&apos;
    56    &apos;runBlock1#AJeMRS:DFG:1795&apos;
    56    &apos;runBlock1#AJeMRS:DFG:1925&apos;
    45    &apos;#&lt;nil&gt;:None:&lt;nil&gt;&apos;
    43    &apos;Exec#B1957w:Baseline:34 &lt;-- runBlock0#BKLcUC:FTL:727&apos;
    36    &apos;runBlock1#AJeMRS:FTL:271&apos;
    35    &apos;runBlock1#AJeMRS:FTL:348&apos;
    33    &apos;runBlock1#AJeMRS:DFG:348&apos;
    25    &apos;runBlock0#BKLcUC:FTL:394&apos;
    23    &apos;runBlock1#AJeMRS:DFG:271&apos;
    21    &apos;Exec#B1957w:Baseline:34 &lt;-- runBlock0#BKLcUC:FTL:164&apos;
    20    &apos;Exec#B1957w:Baseline:34 &lt;-- runBlock0#BKLcUC:DFG:235&apos;
    15    &apos;Exec#B1957w:Baseline:34 &lt;-- runBlock0#BKLcUC:DFG:565&apos;
    14    &apos;Exec#B1957w:Baseline:34 &lt;-- runBlock0#BKLcUC:FTL:2354&apos;
    12    &apos;Exec#B1957w:Baseline:34 &lt;-- runBlock0#BKLcUC:FTL:1201&apos;
    11    &apos;Exec#B1957w:Baseline:34 &lt;-- runBlock0#BKLcUC:FTL:1841&apos;
    11    &apos;replace#C4Vrxg:DFG:105&apos;
    10    &apos;Exec#B1957w:Baseline:34 &lt;-- runBlock1#AJeMRS:FTL:2289&apos;
    10    &apos;Exec#B1957w:Baseline:34 &lt;-- runBlock0#BKLcUC:FTL:1039&apos;
     9    &apos;Exec#B1957w:Baseline:34 &lt;-- runBlock3#BdH8wB:DFG:2100&apos;
     9    &apos;Exec#B1957w:Baseline:34 &lt;-- runBlock0#BKLcUC:FTL:1608&apos;
     8    &apos;runBlock0#BKLcUC:FTL:3368&apos;
     8    &apos;Exec#B1957w:DFG:34&apos;
     7    &apos;Exec#B1957w:Baseline:34 &lt;-- runBlock0#BKLcUC:FTL:877&apos;
     7    &apos;runBlock1#AJeMRS:FTL:1990&apos;
     7    &apos;runBlock0#BKLcUC:DFG:394&apos;
     7    &apos;anonymous#&lt;nil&gt;:None:&lt;nil&gt;&apos;
     7    &apos;Exec#B1957w:Baseline:34 &lt;-- runBlock1#AJeMRS:FTL:1055&apos;
     7    &apos;Exec#B1957w:Baseline:34 &lt;-- runBlock0#BKLcUC:FTL:326&apos;
     6    &apos;Exec#B1957w:Baseline:34 &lt;-- runBlock1#AJeMRS:DFG:2289&apos;
     6    &apos;/[+, ]/#&lt;nil&gt;:None:&lt;nil&gt;&apos;
     6    &apos;Exec#B1957w:Baseline:34 &lt;-- runBlock0#BKLcUC:FTL:2242&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1385154</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-02 09:59:40 -0800</bug_when>
    <thetext>Attachment 330322 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/RegExpInlines.h:121:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpInlines.h:229:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1385164</commentid>
    <comment_count>4</comment_count>
      <attachid>330324</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-01-02 10:50:47 -0800</bug_when>
    <thetext>Created attachment 330324
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1385166</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-02 10:52:30 -0800</bug_when>
    <thetext>Attachment 330324 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/RegExpInlines.h:121:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpInlines.h:229:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 2 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1385171</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-01-02 11:23:02 -0800</bug_when>
    <thetext>Before landing this we should make sure that when the concurrent JIT runs in the YARR, we don&apos;t think the main thread is running the RegExp JIT. This bug exists in ToT today. This probably doesn&apos;t have any real impact today, but with this change, it might, since it may be racy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1385173</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-01-02 11:25:22 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #6)
&gt; Before landing this we should make sure that when the concurrent JIT runs in
&gt; the YARR, we don&apos;t think the main thread is running the RegExp JIT. This bug
&gt; exists in ToT today. This probably doesn&apos;t have any real impact today, but
&gt; with this change, it might, since it may be racy.

I&apos;m saying this before reading the code. I&apos;ll check out the code soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1385391</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-01-03 00:33:25 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #6)
&gt; Before landing this we should make sure that when the concurrent JIT runs in
&gt; the YARR, we don&apos;t think the main thread is running the RegExp JIT. This bug
&gt; exists in ToT today. This probably doesn&apos;t have any real impact today, but
&gt; with this change, it might, since it may be racy.

Interesting. I updated the patch to handle it correctly. I&apos;ll upload the patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1385392</commentid>
    <comment_count>9</comment_count>
      <attachid>330369</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-01-03 00:35:39 -0800</bug_when>
    <thetext>Created attachment 330369
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1385393</commentid>
    <comment_count>10</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-03 00:37:25 -0800</bug_when>
    <thetext>Attachment 330369 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/RegExp.h:76:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpInlines.h:121:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpInlines.h:229:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 3 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1390723</commentid>
    <comment_count>11</comment_count>
      <attachid>330369</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-01-18 17:03:09 -0800</bug_when>
    <thetext>Comment on attachment 330369
Patch

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

&gt; JSTests/stress/sampling-profiler-regexp.js:17
&gt; +    runTest(baz, [&quot;/.*/gi&quot;, &quot;&quot;, &quot;test&quot;, &quot;baz&quot;]);

This test doesn&apos;t fail when we turn off YARR at runtime?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1390726</commentid>
    <comment_count>12</comment_count>
      <attachid>330369</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-01-18 17:08:46 -0800</bug_when>
    <thetext>Comment on attachment 330369
Patch

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

&gt;&gt; JSTests/stress/sampling-profiler-regexp.js:17
&gt;&gt; +    runTest(baz, [&quot;/.*/gi&quot;, &quot;&quot;, &quot;test&quot;, &quot;baz&quot;]);
&gt; 
&gt; This test doesn&apos;t fail when we turn off YARR at runtime?

I think this test fails if we set `useRegExpJIT = false`. But i think this does not fail at buildbots since JIT-disabled bots (CLoop) do not execute this test since sampling profiler is not available.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393406</commentid>
    <comment_count>13</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-01-25 20:06:33 -0800</bug_when>
    <thetext>Ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393985</commentid>
    <comment_count>14</comment_count>
      <attachid>330369</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-01-28 23:28:33 -0800</bug_when>
    <thetext>Comment on attachment 330369
Patch

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

LGTM, but my main worry is what Web Inspector shows for RegExp frames. Can you share a screenshot of what that looks like? Maybe we need to make some enhancements there in a follow up.

&gt; Source/JavaScriptCore/runtime/RegExp.h:76
&gt; +    enum class ExecutionContext { JS, NonJS };

This name doesn&apos;t feel 100% accurate to me. Technically, the compiler is still worried about JS. I think we should name this something along the lines of MainThread vs BackgroundThread. (Maybe we already have an enum that describes that?)

&gt; Source/JavaScriptCore/runtime/RegExp.h:171
&gt; +            if (m_vm)
&gt; +                m_vm-&gt;executingRegExpJIT = nullptr;

Since you directly set this to nullptr, you should assert in the constructor that it&apos;s nullptr (e.g, verify that it&apos;s not re-entrant).

&gt; Source/JavaScriptCore/runtime/VM.h:599
&gt; +    RegExp* executingRegExpJIT { nullptr };

Maybe: currentlyExecutingRegExp?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393986</commentid>
    <comment_count>15</comment_count>
      <attachid>330369</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-01-28 23:28:56 -0800</bug_when>
    <thetext>Comment on attachment 330369
Patch

r=me with inspector followups perhaps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394033</commentid>
    <comment_count>16</comment_count>
      <attachid>330369</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-01-29 02:40:29 -0800</bug_when>
    <thetext>Comment on attachment 330369
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/runtime/RegExp.h:76
&gt;&gt; +    enum class ExecutionContext { JS, NonJS };
&gt; 
&gt; This name doesn&apos;t feel 100% accurate to me. Technically, the compiler is still worried about JS. I think we should name this something along the lines of MainThread vs BackgroundThread. (Maybe we already have an enum that describes that?)

Yeah, we have this. enum class Concurrency in ObjectPropertyConditionSet.cpp.

&gt;&gt; Source/JavaScriptCore/runtime/RegExp.h:171
&gt;&gt; +                m_vm-&gt;executingRegExpJIT = nullptr;
&gt; 
&gt; Since you directly set this to nullptr, you should assert in the constructor that it&apos;s nullptr (e.g, verify that it&apos;s not re-entrant).

Nice. Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/VM.h:599
&gt;&gt; +    RegExp* executingRegExpJIT { nullptr };
&gt; 
&gt; Maybe: currentlyExecutingRegExp?

Sounds nice. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394036</commentid>
    <comment_count>17</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-01-29 02:43:22 -0800</bug_when>
    <thetext>Committed r227725: &lt;https://trac.webkit.org/changeset/227725&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394037</commentid>
    <comment_count>18</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-29 02:44:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/36980395&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394104</commentid>
    <comment_count>19</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-01-29 08:48:41 -0800</bug_when>
    <thetext>This broke a bunch of JSC tests on Linux!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394123</commentid>
    <comment_count>20</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2018-01-29 09:47:34 -0800</bug_when>
    <thetext>Reverted r227725 for reason:

This caused internal failures.

Committed r227738: &lt;https://trac.webkit.org/changeset/227738&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394128</commentid>
    <comment_count>21</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2018-01-29 10:01:13 -0800</bug_when>
    <thetext>This also cause JSC test on High Sierra as well as the CLoop Tests.

JSC:
https://build.webkit.org/builders/Apple%20High%20Sierra%20Release%20JSC%20%28Tests%29/builds/2021

CLoop:
https://build.webkit.org/builders/Apple%20High%20Sierra%20LLINT%20CLoop%20%28BuildAndTest%29/builds/3396</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569803</commentid>
    <comment_count>22</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-10 19:12:16 -0700</bug_when>
    <thetext>I think we should rebaseline this patch with more reliable manner.

1. RegExp JSCell will be stored in CallFrame like WasmCallee / CodeBlock
2. SamplingProfiler will detect RegExp JSCell.

I really want to have this SamplingProfiler feature to examine what RegExp is taking time in JetStream2 benchmarks, like, JetStream2/OfflineAssembler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570023</commentid>
    <comment_count>23</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-11 15:40:48 -0700</bug_when>
    <thetext>I&apos;ll open a new bug for introducing this feature in more reliable way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570025</commentid>
    <comment_count>24</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-11 15:41:51 -0700</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=201702</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330322</attachid>
            <date>2018-01-02 09:06:51 -0800</date>
            <delta_ts>2018-01-02 10:50:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152729-20180103020650.patch</filename>
            <type>text/plain</type>
            <size>31623</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2MzIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
OWY5NTM2OTVmMTM4NzMwNDAzZmZlZTlmMTFiM2Y5ZGFkZWYwNDQ2Li4yM2M1YjM5Yjc0MmRiNDhm
NDY4ODQ4NDcxMjllMTc3ZDZlZjVkNzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEg
KzEsODIgQEAKKzIwMTgtMDEtMDIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5j
b20+CisKKyAgICAgICAgSlNDIFNhbXBsaW5nIFByb2ZpbGVyOiBEZXRlY3QgdGVzdGVyIGFuZCB0
ZXN0ZWUgd2hlbiBzYW1wbGluZyBpbiBSZWdFeHAgSklUCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3MjkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGV4dGVuZHMgU2FtcGxpbmdQcm9m
aWxlciB0byByZWNvZ25pemUgSklUIFJlZ0V4cCBleGVjdXRpb24uIFdlIHJlY29yZAorICAgICAg
ICBleGVjdXRpbmcgUmVnRXhwIGluIFZNIHNvIHRoYXQgU2FtcGxpbmdQcm9maWxlciBjYW4gZGV0
ZWN0IGl0LiBUaGlzIGlzIGJldHRlcgorICAgICAgICB0aGFuIHRoZSBwcmV2aW91cyBWTTo6aXNF
eGVjdXRpbmdJblJlZ0V4cEpJVCBmbGFnIGFwcHJvYWNoIHNpbmNlCisKKyAgICAgICAgMS4gaXNF
eGVjdXRpbmdJblJlZ0V4cEpJVCBpcyBzZXQgYWZ0ZXIgc3RhcnRpbmcgZXhlY3V0aW5nIEpJVCBS
ZWdFeHAgY29kZS4gVGh1cywKKyAgICAgICAgaWYgd2Ugc3VzcGVuZCB0aGUgdGhyZWFkIGp1c3Qg
YmVmb3JlIGV4ZWN1dGluZyB0aGlzIGZsYWcsIG9yIGp1c3QgYWZ0ZXIgY2xlYXJpbmcKKyAgICAg
ICAgdGhpcyBmbGFnLCBTYW1wbGluZ1Byb2ZpbGVyIGdldHMgaW52YWxpZCBmcmFtZSwgYW5kIGZy
YW1lIHZhbGlkYXRpb24gZmFpbHMuIFdlCisgICAgICAgIHNob3VsZCBzZXQgc3VjaCBhIGZsYWcg
YmVmb3JlIGFuZCBhZnRlciBleGVjdXRpbmcgSklUIFJlZ0V4cCBjb2RlLgorCisgICAgICAgIDIu
IFRoaXMgcmVtb3ZlcyBWTSBkZXBlbmRlbmN5IGZyb20gWWFyckpJVCB3aGljaCBpcyBub3QgZXNz
ZW50aWFsIG9uZS4KKworICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6cmVnZXhwTmFtZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyPEJs
b2NrPjo6ZHVtcFJlZ0V4cHMpOgorICAgICAgICAoSlNDOjpyZWdleHBUb1NvdXJjZVN0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9SZWdFeHAuY3BwOgorICAgICAgICAoSlNDOjpS
ZWdFeHA6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpSZWdFeHA6OmNvbXBpbGVNYXRjaE9ubHkp
OgorICAgICAgICAoSlNDOjpSZWdFeHA6OnRvU291cmNlU3RyaW5nIGNvbnN0KToKKyAgICAgICAg
KiBydW50aW1lL1JlZ0V4cC5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpSZWdFeHA6Om1hdGNoSW5saW5lKToKKyAgICAgICAgKiBydW50aW1lL1Nh
bXBsaW5nUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjp0YWtl
U2FtcGxlKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZp
ZWRTdGFja1RyYWNlcyk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJh
bWU6Om5hbWVGcm9tQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3Rh
Y2tGcmFtZTo6ZGlzcGxheU5hbWUpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpT
dGFja0ZyYW1lOjpkaXNwbGF5TmFtZUZvckpTT05UZXN0cyk6CisgICAgICAgIChKU0M6OlNhbXBs
aW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OmZ1bmN0aW9uU3RhcnRMaW5lKToKKyAgICAgICAgKEpT
Qzo6U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZnVuY3Rpb25TdGFydENvbHVtbik6Cisg
ICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnNvdXJjZUlEKToKKyAg
ICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6dXJsKToKKyAgICAgICAg
KFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
Lmg6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6
CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlRW50ZXIpOgorICAg
ICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpnZW5lcmF0ZVJldHVybik6CisgICAgICAg
IChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OllhcnJHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpZYXJyOjpqaXRDb21waWxlKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuaDoKKworICAgICAg
ICAqIGJ5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcDoKKyAgICAgICAgKEpTQzo6cmVnZXhwTmFt
ZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcFJlZ0V4cHMpOgor
ICAgICAgICAoSlNDOjpyZWdleHBUb1NvdXJjZVN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9SZWdFeHAuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHA6OmNvbXBpbGUpOgorICAg
ICAgICAoSlNDOjpSZWdFeHA6OmNvbXBpbGVNYXRjaE9ubHkpOgorICAgICAgICAoSlNDOjpSZWdF
eHA6OnRvU291cmNlU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cC5oOgor
ICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpSZWdFeHA6
Om1hdGNoSW5saW5lKToKKyAgICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwOgor
ICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjp0aW1lckxvb3ApOgorICAgICAgICAoSlND
OjpTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQ
cm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcyk6CisgICAgICAgIChKU0M6OlNh
bXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6Om5hbWVGcm9tQ2FsbGVlKToKKyAgICAgICAgKEpT
Qzo6U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZGlzcGxheU5hbWUpOgorICAgICAgICAo
SlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpkaXNwbGF5TmFtZUZvckpTT05UZXN0
cyk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OmZ1bmN0aW9u
U3RhcnRMaW5lKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6
ZnVuY3Rpb25TdGFydENvbHVtbik6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0
YWNrRnJhbWU6OnNvdXJjZUlEKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3Rh
Y2tGcmFtZTo6dXJsKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICog
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmg6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAg
ICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0
b3I6OmdlbmVyYXRlRW50ZXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpn
ZW5lcmF0ZVJldHVybik6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OllhcnJH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpZYXJyOjpqaXRDb21waWxlKToKKyAgICAgICAgKiB5
YXJyL1lhcnJKSVQuaDoKKwogPT0gUm9sbGVkIG92ZXIgdG8gQ2hhbmdlTG9nLTIwMTgtMDEtMDEg
PT0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1
bXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIu
Y3BwCmluZGV4IGQwMjEzNGY2MjU1NmFjMDY5ZDVlZTdiMTYxM2IzNDYyNDA5ZjQwOGYuLjY3ZjE2
NTVlYjJlZjIyMDYzZWE5MTRhNDQ5NTY0NzA5M2EwYTM4MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcApAQCAtMjUwLDI5ICsyNTAs
OSBAQCBjb25zdCBJZGVudGlmaWVyJiBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmlkZW50aWZpZXIo
aW50IGluZGV4KSBjb25zdAogICAgIHJldHVybiBibG9jaygpLT5pZGVudGlmaWVyKGluZGV4KTsK
IH0KIAotc3RhdGljIENTdHJpbmcgcmVnZXhwVG9Tb3VyY2VTdHJpbmcoUmVnRXhwKiByZWdFeHAp
Ci17Ci0gICAgY2hhciBwb3N0Zml4WzddID0geyAnLycsIDAsIDAsIDAsIDAsIDAsIDAgfTsKLSAg
ICBpbnQgaW5kZXggPSAxOwotICAgIGlmIChyZWdFeHAtPmdsb2JhbCgpKQotICAgICAgICBwb3N0
Zml4W2luZGV4KytdID0gJ2cnOwotICAgIGlmIChyZWdFeHAtPmlnbm9yZUNhc2UoKSkKLSAgICAg
ICAgcG9zdGZpeFtpbmRleCsrXSA9ICdpJzsKLSAgICBpZiAocmVnRXhwLT5tdWx0aWxpbmUoKSkK
LSAgICAgICAgcG9zdGZpeFtpbmRleF0gPSAnbSc7Ci0gICAgaWYgKHJlZ0V4cC0+ZG90QWxsKCkp
Ci0gICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAncyc7Ci0gICAgaWYgKHJlZ0V4cC0+dW5pY29k
ZSgpKQotICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ3UnOwotICAgIGlmIChyZWdFeHAtPnN0
aWNreSgpKQotICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ3knOwotCi0gICAgcmV0dXJuIHRv
Q1N0cmluZygiLyIsIHJlZ0V4cC0+cGF0dGVybigpLmltcGwoKSwgcG9zdGZpeCk7Ci19Ci0KIHN0
YXRpYyBDU3RyaW5nIHJlZ2V4cE5hbWUoaW50IHJlLCBSZWdFeHAqIHJlZ2V4cCkKIHsKLSAgICBy
ZXR1cm4gdG9DU3RyaW5nKHJlZ2V4cFRvU291cmNlU3RyaW5nKHJlZ2V4cCksICIoQHJlIiwgcmUs
ICIpIik7CisgICAgcmV0dXJuIHRvQ1N0cmluZyhyZWdleHAtPnRvU291cmNlU3RyaW5nKCksICIo
QHJlIiwgcmUsICIpIik7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEluc3RydWN0aW9uPgpAQCAtMTc0
Nyw3ICsxNzI3LDcgQEAgdm9pZCBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBSZWdFeHBzKFBy
aW50U3RyZWFtJiBvdXQpCiAgICAgICAgIG91dC5wcmludGYoIlxubV9yZWdleHBzOlxuIik7CiAg
ICAgICAgIHNpemVfdCBpID0gMDsKICAgICAgICAgZG8gewotICAgICAgICAgICAgb3V0LnByaW50
ZigiICByZSV1ID0gJXNcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKSwgcmVnZXhwVG9Tb3Vy
Y2VTdHJpbmcoYmxvY2soKS0+cmVnZXhwKGkpKS5kYXRhKCkpOworICAgICAgICAgICAgb3V0LnBy
aW50KCIgIHJlIiwgaSwgIiA9ICIsIGJsb2NrKCktPnJlZ2V4cChpKS0+dG9Tb3VyY2VTdHJpbmco
KSwgIlxuIik7CiAgICAgICAgICAgICArK2k7CiAgICAgICAgIH0gd2hpbGUgKGkgPCBjb3VudCk7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAKaW5kZXggMDIw
YjdiZmU4OWViYzY1NWQzMWM1YjZhY2ZhMWFhYzk1MTZiZTJhZi4uYTRhYmZkNmE1OTFkNWJhNWNk
YmFhNmU3YzcyMDg3ZDJmNjM2NDUzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHAuY3BwCkBAIC0zMDcsNyArMzA3LDcgQEAgdm9pZCBSZWdFeHA6OmNvbXBpbGUoVk0qIHZt
LCBZYXJyOjpZYXJyQ2hhclNpemUgY2hhclNpemUpCiAKICNpZiBFTkFCTEUoWUFSUl9KSVQpCiAg
ICAgaWYgKCFwYXR0ZXJuLm1fY29udGFpbnNCYWNrcmVmZXJlbmNlcyAmJiAhcGF0dGVybi5jb250
YWluc1Vuc2lnbmVkTGVuZ3RoUGF0dGVybigpICYmIFZNOjpjYW5Vc2VSZWdFeHBKSVQoKSkgewot
ICAgICAgICBZYXJyOjpqaXRDb21waWxlKHBhdHRlcm4sIGNoYXJTaXplLCB2bSwgbV9yZWdFeHBK
SVRDb2RlKTsKKyAgICAgICAgWWFycjo6aml0Q29tcGlsZShwYXR0ZXJuLCBjaGFyU2l6ZSwgbV9y
ZWdFeHBKSVRDb2RlKTsKICAgICAgICAgaWYgKCFtX3JlZ0V4cEpJVENvZGUuaXNGYWxsQmFjaygp
KSB7CiAgICAgICAgICAgICBtX3N0YXRlID0gSklUQ29kZTsKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTM2Myw3ICszNjMsNyBAQCB2b2lkIFJlZ0V4cDo6Y29tcGlsZU1hdGNoT25seShWTSogdm0s
IFlhcnI6OllhcnJDaGFyU2l6ZSBjaGFyU2l6ZSkKIAogI2lmIEVOQUJMRShZQVJSX0pJVCkKICAg
ICBpZiAoIXBhdHRlcm4ubV9jb250YWluc0JhY2tyZWZlcmVuY2VzICYmICFwYXR0ZXJuLmNvbnRh
aW5zVW5zaWduZWRMZW5ndGhQYXR0ZXJuKCkgJiYgVk06OmNhblVzZVJlZ0V4cEpJVCgpKSB7Ci0g
ICAgICAgIFlhcnI6OmppdENvbXBpbGUocGF0dGVybiwgY2hhclNpemUsIHZtLCBtX3JlZ0V4cEpJ
VENvZGUsIFlhcnI6Ok1hdGNoT25seSk7CisgICAgICAgIFlhcnI6OmppdENvbXBpbGUocGF0dGVy
biwgY2hhclNpemUsIG1fcmVnRXhwSklUQ29kZSwgWWFycjo6TWF0Y2hPbmx5KTsKICAgICAgICAg
aWYgKCFtX3JlZ0V4cEpJVENvZGUuaXNGYWxsQmFjaygpKSB7CiAgICAgICAgICAgICBtX3N0YXRl
ID0gSklUQ29kZTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQwOSw2ICs0MDksMjYgQEAgdm9p
ZCBSZWdFeHA6OmRlbGV0ZUNvZGUoKQogICAgIG1fcmVnRXhwQnl0ZWNvZGUgPSBudWxscHRyOwog
fQogCitTdHJpbmcgUmVnRXhwOjp0b1NvdXJjZVN0cmluZygpIGNvbnN0Cit7CisgICAgY2hhciBw
b3N0Zml4WzddID0geyAnLycsIDAsIDAsIDAsIDAsIDAsIDAgfTsKKyAgICBpbnQgaW5kZXggPSAx
OworICAgIGlmIChnbG9iYWwoKSkKKyAgICAgICAgcG9zdGZpeFtpbmRleCsrXSA9ICdnJzsKKyAg
ICBpZiAoaWdub3JlQ2FzZSgpKQorICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ2knOworICAg
IGlmIChtdWx0aWxpbmUoKSkKKyAgICAgICAgcG9zdGZpeFtpbmRleF0gPSAnbSc7CisgICAgaWYg
KGRvdEFsbCgpKQorICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ3MnOworICAgIGlmICh1bmlj
b2RlKCkpCisgICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAndSc7CisgICAgaWYgKHN0aWNreSgp
KQorICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ3knOworCisgICAgcmV0dXJuIG1ha2VTdHJp
bmcoIi8iLCBwYXR0ZXJuKCksIHBvc3RmaXgpOworfQorCiAjaWYgRU5BQkxFKFlBUlJfSklUX0RF
QlVHKQogdm9pZCBSZWdFeHA6Om1hdGNoQ29tcGFyZVdpdGhJbnRlcnByZXRlcihjb25zdCBTdHJp
bmcmIHMsIGludCBzdGFydE9mZnNldCwgaW50KiBvZmZzZXRWZWN0b3IsIGludCBqaXRSZXN1bHQp
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCmluZGV4IDJlZDlmOWQ2MGU3
Y2YyM2Y0ZTUxYjkwZDNhNGM3YTQ5ODU2NjEwNWUuLjZmZTdmMDQ0OGNkNDFkZjQzOGQ3YjYwMTY5
MmQyMTMwZjkyZTNiYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCkBA
IC0xMjIsNiArMTIyLDggQEAgY2xhc3MgUmVnRXhwIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAK
ICAgICBSZWdFeHBLZXkga2V5KCkgeyByZXR1cm4gUmVnRXhwS2V5KG1fZmxhZ3MsIG1fcGF0dGVy
blN0cmluZyk7IH0KIAorICAgIFN0cmluZyB0b1NvdXJjZVN0cmluZygpIGNvbnN0OworCiBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCkBAIC0xNTAsNiArMTUyLDI2
IEBAIGNsYXNzIFJlZ0V4cCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHZvaWQgbWF0Y2hD
b21wYXJlV2l0aEludGVycHJldGVyKGNvbnN0IFN0cmluZyYsIGludCBzdGFydE9mZnNldCwgaW50
KiBvZmZzZXRWZWN0b3IsIGludCBqaXRSZXN1bHQpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoWUFS
Ul9KSVQpCisgICAgY2xhc3MgUmVnRXhwSklURnJhbWVUcmFjZXIgeworICAgICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShSZWdFeHBKSVRGcmFtZVRyYWNlcik7CisgICAgcHVibGljOgorICAgICAg
ICBBTFdBWVNfSU5MSU5FIFJlZ0V4cEpJVEZyYW1lVHJhY2VyKFZNJiB2bSwgUmVnRXhwJiByZWdF
eHApCisgICAgICAgICAgICA6IG1fdm0odm0pCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fdm0u
ZXhlY3V0aW5nUmVnRXhwSklUID0gJnJlZ0V4cDsKKyAgICAgICAgfQorCisgICAgICAgIEFMV0FZ
U19JTkxJTkUgflJlZ0V4cEpJVEZyYW1lVHJhY2VyKCkKKyAgICAgICAgeworICAgICAgICAgICAg
bV92bS5leGVjdXRpbmdSZWdFeHBKSVQgPSBudWxscHRyOworICAgICAgICB9CisKKyAgICBwcml2
YXRlOgorICAgICAgICBWTSYgbV92bTsKKyAgICB9OworI2VuZGlmCisKICAgICBSZWdFeHBTdGF0
ZSBtX3N0YXRlIHsgTm90Q29tcGlsZWQgfTsKICAgICBTdHJpbmcgbV9wYXR0ZXJuU3RyaW5nOwog
ICAgIFJlZ0V4cEZsYWdzIG1fZmxhZ3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBJbmxpbmVzLmgKaW5kZXggYjJmMWRkMzkzYzkzZDFhMDQyNTZjMzA4MTA5MmY5ZWVi
ZGMyZjA5Ny4uOGNmYTk2MzhiZjBhN2QzYzkzNTJkYmM3NDEyMjMwZDJlZDU3YWY2MSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwSW5saW5lcy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cElubGluZXMuaApAQCAtMTE4LDEw
ICsxMTgsMTMgQEAgQUxXQVlTX0lOTElORSBpbnQgUmVnRXhwOjptYXRjaElubGluZShWTSYgdm0s
IGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgc3RhcnRPZmYKICNlbmRpZgogCiAgICAgaWYgKG1f
c3RhdGUgPT0gSklUQ29kZSkgewotICAgICAgICBpZiAocy5pczhCaXQoKSkKLSAgICAgICAgICAg
IHJlc3VsdCA9IG1fcmVnRXhwSklUQ29kZS5leGVjdXRlKHMuY2hhcmFjdGVyczgoKSwgc3RhcnRP
ZmZzZXQsIHMubGVuZ3RoKCksIG9mZnNldFZlY3RvciBFWFRSQV9KSVRfUEFSQU1TKS5zdGFydDsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLmV4ZWN1
dGUocy5jaGFyYWN0ZXJzMTYoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksIG9mZnNldFZlY3Rv
ciBFWFRSQV9KSVRfUEFSQU1TKS5zdGFydDsKKyAgICAgICAgeworICAgICAgICAgICAgUmVnRXhw
SklURnJhbWVUcmFjZXIgdHJhY2VyIHsgdm0sICp0aGlzIH07CisgICAgICAgICAgICBpZiAocy5p
czhCaXQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtX3JlZ0V4cEpJVENvZGUuZXhlY3V0
ZShzLmNoYXJhY3RlcnM4KCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0aCgpLCBvZmZzZXRWZWN0b3Ig
RVhUUkFfSklUX1BBUkFNUykuc3RhcnQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLmV4ZWN1dGUocy5jaGFyYWN0ZXJzMTYoKSwgc3Rh
cnRPZmZzZXQsIHMubGVuZ3RoKCksIG9mZnNldFZlY3RvciBFWFRSQV9KSVRfUEFSQU1TKS5zdGFy
dDsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gWWFycjo6SlNSZWdFeHBKSVRD
b2RlRmFpbHVyZSkgewogICAgICAgICAgICAgLy8gSklUJ2VkIGNvZGUgY291bGRuJ3QgaGFuZGxl
IGV4cHJlc3Npb24sIHNvIHB1bnQgYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuCkBAIC0yMjMsMTAg
KzIyNiwxMyBAQCBBTFdBWVNfSU5MSU5FIE1hdGNoUmVzdWx0IFJlZ0V4cDo6bWF0Y2hJbmxpbmUo
Vk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkCiAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0
OwogCiAgICAgaWYgKG1fc3RhdGUgPT0gSklUQ29kZSkgewotICAgICAgICBpZiAocy5pczhCaXQo
KSkKLSAgICAgICAgICAgIHJlc3VsdCA9IG1fcmVnRXhwSklUQ29kZS5leGVjdXRlKHMuY2hhcmFj
dGVyczgoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCkgRVhUUkFfSklUX1BBUkFNUyk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IG1fcmVnRXhwSklUQ29kZS5leGVjdXRlKHMu
Y2hhcmFjdGVyczE2KCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0aCgpIEVYVFJBX0pJVF9QQVJBTVMp
OworICAgICAgICB7CisgICAgICAgICAgICBSZWdFeHBKSVRGcmFtZVRyYWNlciB0cmFjZXIgeyB2
bSwgKnRoaXMgfTsKKyAgICAgICAgICAgIGlmIChzLmlzOEJpdCgpKQorICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG1fcmVnRXhwSklUQ29kZS5leGVjdXRlKHMuY2hhcmFjdGVyczgoKSwgc3RhcnRP
ZmZzZXQsIHMubGVuZ3RoKCkgRVhUUkFfSklUX1BBUkFNUyk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLmV4ZWN1dGUocy5jaGFyYWN0
ZXJzMTYoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCkgRVhUUkFfSklUX1BBUkFNUyk7CisgICAg
ICAgIH0KIAogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKICAgICAgICAgaWYgKCFyZXN1bHQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2Zp
bGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIu
Y3BwCmluZGV4IDk3MjdjMThmZGJjYzBkNWUxYjliMjI3ZGZmZDM4MjFmY2Q2Y2U3Y2MuLjAyOWQ5
YWQ1MzhkNmY2MmQwMzJlYjQzNmI2ZTEyZGJkOTZiZGMyODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCkBAIC0zMTcsNyArMzE3
LDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp0aW1lckxvb3AoKQogICAgICAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICAgICAgaWYgKCFtX2lzUGF1c2VkICYmIG1fanNjRXhlY3V0aW9u
VGhyZWFkKQotICAgICAgICAgICAgICAgIHRha2VTYW1wbGUobG9ja2VyLCBzdGFja1RyYWNlUHJv
Y2Vzc2luZ1RpbWUpOworICAgICAgICAgICAgICAgIHN0YWNrVHJhY2VQcm9jZXNzaW5nVGltZSA9
IHRha2VTYW1wbGUobG9ja2VyKTsKIAogICAgICAgICAgICAgbV9sYXN0VGltZSA9IG1fc3RvcHdh
dGNoLT5lbGFwc2VkVGltZSgpOwogICAgICAgICB9CkBAIC0zMzIsNyArMzMyLDcgQEAgdm9pZCBT
YW1wbGluZ1Byb2ZpbGVyOjp0aW1lckxvb3AoKQogICAgIH0KIH0KIAotdm9pZCBTYW1wbGluZ1By
b2ZpbGVyOjp0YWtlU2FtcGxlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU2Vjb25kcyYgc3RhY2tU
cmFjZVByb2Nlc3NpbmdUaW1lKQorU2Vjb25kcyBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxl
KGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKICAgICBBU1NFUlQobV9sb2NrLmlzTG9ja2VkKCkp
OwogICAgIGlmIChtX3ZtLmVudHJ5U2NvcGUpIHsKQEAgLTM1MCw2ICszNTAsNyBAQCB2b2lkIFNh
bXBsaW5nUHJvZmlsZXI6OnRha2VTYW1wbGUoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTZWNvbmRz
JiBzdGFja1RyYWNlUHJvYwogICAgICAgICAgICAgRXhlY1N0YXRlKiBjYWxsRnJhbWU7CiAgICAg
ICAgICAgICB2b2lkKiBtYWNoaW5lUEM7CiAgICAgICAgICAgICBib29sIHRvcEZyYW1lSXNMTElu
dCA9IGZhbHNlOworICAgICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBudWxscHRyOwogICAgICAg
ICAgICAgdm9pZCogbGxpbnRQQzsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBQbGF0
Zm9ybVJlZ2lzdGVycyByZWdpc3RlcnM7CkBAIC0zNjIsMTEgKzM2Myw5IEBAIHZvaWQgU2FtcGxp
bmdQcm9maWxlcjo6dGFrZVNhbXBsZShjb25zdCBBYnN0cmFjdExvY2tlciYsIFNlY29uZHMmIHN0
YWNrVHJhY2VQcm9jCiAgICAgICAgICAgICAvLyBGSVhNRTogTGV0cyBoYXZlIGEgd2F5IG9mIGRl
dGVjdGluZyB3aGVuIHdlJ3JlIHBhcnNpbmcgY29kZS4KICAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3NjEKICAgICAgICAgICAgIGlmIChF
eGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24oKS5pc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShl
eGVjdXRhYmxlQWxsb2NhdG9yTG9ja2VyLCBtYWNoaW5lUEMpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fdm0uaXNFeGVjdXRpbmdJblJlZ0V4cEpJVCkgewotICAgICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogV2UncmUgZXhlY3V0aW5nIGEgcmVnZXhwLiBMZXRzIGdhdGhlciBtb3JlIGludGVy
c3RpbmcgZGF0YS4KLSAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MjcyOQorICAgICAgICAgICAgICAgIHJlZ0V4cCA9IG1fdm0u
ZXhlY3V0aW5nUmVnRXhwSklUOworICAgICAgICAgICAgICAgIGlmIChyZWdFeHApCiAgICAgICAg
ICAgICAgICAgICAgIGNhbGxGcmFtZSA9IG1fdm0udG9wQ2FsbEZyYW1lOyAvLyBXZSBuZWVkIHRv
IGRvIHRoaXMgb3IgZWxzZSB3ZSdkIGZhaWwgb3VyIGJhY2t0cmFjZSB2YWxpZGF0aW9uIGIvYyB0
aGlzIGlzbid0IGEgSlMgZnJhbWUuCi0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBl
bHNlIGlmIChMTEludDo6aXNMTEludFBDKG1hY2hpbmVQQykpIHsKICAgICAgICAgICAgICAgICB0
b3BGcmFtZUlzTExJbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgIC8vIFdlJ3JlIG9rYXkgdG8g
dGFrZSBhIG5vcm1hbCBzdGFjayB0cmFjZSB3aGVuIHRoZSBQQwpAQCAtNDA3LDE2ICs0MDYsMTYg
QEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiwgU2Vjb25kcyYgc3RhY2tUcmFjZVByb2MKICAgICAgICAgICAgICAgICAgICAgc3RhY2tUcmFj
ZS51bmNoZWNrZWRBcHBlbmQoZnJhbWUpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlcy5hcHBlbmQoVW5wcm9jZXNzZWRTdGFja1Ry
YWNlIHsgbm93VGltZSwgbWFjaGluZVBDLCB0b3BGcmFtZUlzTExJbnQsIGxsaW50UEMsIFdURk1v
dmUoc3RhY2tUcmFjZSkgfSk7CisgICAgICAgICAgICAgICAgbV91bnByb2Nlc3NlZFN0YWNrVHJh
Y2VzLmFwcGVuZChVbnByb2Nlc3NlZFN0YWNrVHJhY2UgeyBub3dUaW1lLCBtYWNoaW5lUEMsIHRv
cEZyYW1lSXNMTEludCwgbGxpbnRQQywgcmVnRXhwLCBXVEZNb3ZlKHN0YWNrVHJhY2UpIH0pOwog
CiAgICAgICAgICAgICAgICAgaWYgKGRpZFJ1bk91dE9mVmVjdG9yU3BhY2UpCiAgICAgICAgICAg
ICAgICAgICAgIG1fY3VycmVudEZyYW1lcy5ncm93KG1fY3VycmVudEZyYW1lcy5zaXplKCkgKiAx
LjI1KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYXV0byBlbmRUaW1lID0gTW9ub3Rv
bmljVGltZTo6bm93KCk7Ci0gICAgICAgICAgICBzdGFja1RyYWNlUHJvY2Vzc2luZ1RpbWUgPSBl
bmRUaW1lIC0gc3RhcnRUaW1lOworICAgICAgICAgICAgcmV0dXJuIE1vbm90b25pY1RpbWU6Om5v
dygpIC0gc3RhcnRUaW1lOwogICAgICAgICB9CiAgICAgfQorICAgIHJldHVybiAwX3M7CiB9CiAK
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIHRyeUdldEJ5dGVjb2RlSW5kZXgodW5zaWdu
ZWQgbGxpbnRQQywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGJvb2wmIGlzVmFsaWQpCkBAIC01NzEs
MzYgKzU3MCw0MyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkU3Rh
Y2tUcmFjZXMoKQogICAgICAgICAvLyBQcmVwZW5kIHRoZSB0b3AtbW9zdCBpbmxpbmVkIGZyYW1l
IGlmIG5lZWRlZCBhbmQgZ2F0aGVyCiAgICAgICAgIC8vIGxvY2F0aW9uIGluZm9ybWF0aW9uIGFi
b3V0IHdoZXJlIHRoZSB0b3AgZnJhbWUgaXMgZXhlY3V0aW5nLgogICAgICAgICBzaXplX3Qgc3Rh
cnRJbmRleCA9IDA7Ci0gICAgICAgIGlmICh1bnByb2Nlc3NlZFN0YWNrVHJhY2UuZnJhbWVzLnNp
emUoKSAmJiAhIXVucHJvY2Vzc2VkU3RhY2tUcmFjZS5mcmFtZXNbMF0udmVyaWZpZWRDb2RlQmxv
Y2spIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogdG9wQ29kZUJsb2NrID0gdW5wcm9jZXNzZWRT
dGFja1RyYWNlLmZyYW1lc1swXS52ZXJpZmllZENvZGVCbG9jazsKLSAgICAgICAgICAgIGlmICh1
bnByb2Nlc3NlZFN0YWNrVHJhY2UudG9wRnJhbWVJc0xMSW50KSB7Ci0gICAgICAgICAgICAgICAg
Ly8gV2UgcmV1c2UgTExJbnQgQ29kZUJsb2NrcyBmb3IgdGhlIGJhc2VsaW5lIEpJVCwgc28gd2Ug
bmVlZCB0byBjaGVjayBmb3IgYm90aCBqaXQgdHlwZXMuCi0gICAgICAgICAgICAgICAgLy8gVGhp
cyBtaWdodCBhbHNvIGJlIGZhbHNlIGZvciB2YXJpb3VzIHJlYXNvbnMgKGtub3duIGFuZCB1bmtu
b3duKSwgZXZlbiB0aG91Z2gKLSAgICAgICAgICAgICAgICAvLyBpdCdzIHN1cGVyIHVubGlrZWx5
LiBPbmUgcmVhc29uIHRoYXQgdGhpcyBjYW4gYmUgZmFsc2UgaXMgd2hlbiB3ZSB0aHJvdyBmcm9t
IGEgREZHIGZyYW1lLAotICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBlbmQgdXAgaGF2aW5nIHRv
IHVud2luZCBwYXN0IGFuIEVudHJ5RnJhbWUsIHdlIHdpbGwgZW5kIHVwIGV4ZWN1dGluZwotICAg
ICAgICAgICAgICAgIC8vIGluc2lkZSB0aGUgTExJbnQncyBoYW5kbGVVbmNhdWdodEV4Y2VwdGlv
bi4gU28gd2UganVzdCBwcm90ZWN0IGFnYWluc3QgdGhpcwotICAgICAgICAgICAgICAgIC8vIGJ5
IGlnbm9yaW5nIGl0LgotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSAw
OwotICAgICAgICAgICAgICAgIGlmICh0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2Rl
OjpJbnRlcnByZXRlclRodW5rIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6
OkJhc2VsaW5lSklUKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgaXNWYWxpZFBDOwotICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiaXRzOworICAgICAgICBpZiAoIXVucHJvY2Vzc2Vk
U3RhY2tUcmFjZS5mcmFtZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBhdXRvJiB0b3BGcmFt
ZSA9IHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5mcmFtZXNbMF07CisgICAgICAgICAgICBpZiAoISF0
b3BGcmFtZS52ZXJpZmllZENvZGVCbG9jaykgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayog
dG9wQ29kZUJsb2NrID0gdG9wRnJhbWUudmVyaWZpZWRDb2RlQmxvY2s7CisgICAgICAgICAgICAg
ICAgaWYgKHVucHJvY2Vzc2VkU3RhY2tUcmFjZS50b3BGcmFtZUlzTExJbnQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gV2UgcmV1c2UgTExJbnQgQ29kZUJsb2NrcyBmb3IgdGhlIGJhc2VsaW5l
IEpJVCwgc28gd2UgbmVlZCB0byBjaGVjayBmb3IgYm90aCBqaXQgdHlwZXMuCisgICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgbWlnaHQgYWxzbyBiZSBmYWxzZSBmb3IgdmFyaW91cyByZWFzb25z
IChrbm93biBhbmQgdW5rbm93biksIGV2ZW4gdGhvdWdoCisgICAgICAgICAgICAgICAgICAgIC8v
IGl0J3Mgc3VwZXIgdW5saWtlbHkuIE9uZSByZWFzb24gdGhhdCB0aGlzIGNhbiBiZSBmYWxzZSBp
cyB3aGVuIHdlIHRocm93IGZyb20gYSBERkcgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgIC8v
IGFuZCB3ZSBlbmQgdXAgaGF2aW5nIHRvIHVud2luZCBwYXN0IGFuIEVudHJ5RnJhbWUsIHdlIHdp
bGwgZW5kIHVwIGV4ZWN1dGluZworICAgICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhlIExM
SW50J3MgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24uIFNvIHdlIGp1c3QgcHJvdGVjdCBhZ2FpbnN0
IHRoaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gYnkgaWdub3JpbmcgaXQuCisgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSAwOworICAgICAgICAgICAgICAgICAg
ICBpZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVu
ayB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1ZhbGlkUEM7CisgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBiaXRzOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAg
ICAgICAgIGJpdHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4odW5wcm9jZXNzZWRTdGFja1RyYWNlLmxsaW50UEMpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJpdHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
dW5wcm9jZXNzZWRTdGFja1RyYWNlLmxsaW50UEMpKTsKICNlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGJpdHMgPSBiaXR3aXNlX2Nhc3Q8dW5zaWduZWQ+KHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5s
bGludFBDKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgPSBiaXR3aXNlX2Nhc3Q8dW5z
aWduZWQ+KHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5sbGludFBDKTsKICNlbmRpZgotICAgICAgICAg
ICAgICAgICAgICBieXRlY29kZUluZGV4ID0gdHJ5R2V0Qnl0ZWNvZGVJbmRleChiaXRzLCB0b3BD
b2RlQmxvY2ssIGlzVmFsaWRQQyk7CisgICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZUlu
ZGV4ID0gdHJ5R2V0Qnl0ZWNvZGVJbmRleChiaXRzLCB0b3BDb2RlQmxvY2ssIGlzVmFsaWRQQyk7
CiAKLSAgICAgICAgICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGlzVmFsaWRQQyk7IC8vIEZJWE1F
OiBkbyBzb21ldGhpbmcgd2l0aCB0aGlzIGluZm8gZm9yIHRoZSB3ZWIgaW5zcGVjdG9yOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNDU1CisgICAgICAgICAgICAg
ICAgICAgICAgICBVTlVTRURfUEFSQU0oaXNWYWxpZFBDKTsgLy8gRklYTUU6IGRvIHNvbWV0aGlu
ZyB3aXRoIHRoaXMgaW5mbyBmb3IgdGhlIHdlYiBpbnNwZWN0b3I6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM0NTUKIAotICAgICAgICAgICAgICAgICAgICBhcHBl
bmRDb2RlQmxvY2sodG9wQ29kZUJsb2NrLCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZENvZGVCbG9jayh0b3BDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVDYWxsZWVJbnRvTGFzdEZyYW1lKHVucHJvY2Vz
c2VkU3RhY2tUcmFjZS5mcmFtZXNbMF0udW52ZXJpZmllZENhbGxlZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBzdGFydEluZGV4ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3JpZ2lu
ID0gdG9wQ29kZUJsb2NrLT5maW5kUEModW5wcm9jZXNzZWRTdGFja1RyYWNlLnRvcFBDKSkgewor
ICAgICAgICAgICAgICAgICAgICBhcHBlbmRDb2RlT3JpZ2luKHRvcENvZGVCbG9jaywgKmNvZGVP
cmlnaW4pOwogICAgICAgICAgICAgICAgICAgICBzdG9yZUNhbGxlZUludG9MYXN0RnJhbWUodW5w
cm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lc1swXS51bnZlcmlmaWVkQ2FsbGVlKTsKICAgICAgICAg
ICAgICAgICAgICAgc3RhcnRJbmRleCA9IDE7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlIGlmIChzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSB0b3BD
b2RlQmxvY2stPmZpbmRQQyh1bnByb2Nlc3NlZFN0YWNrVHJhY2UudG9wUEMpKSB7Ci0gICAgICAg
ICAgICAgICAgYXBwZW5kQ29kZU9yaWdpbih0b3BDb2RlQmxvY2ssICpjb2RlT3JpZ2luKTsKLSAg
ICAgICAgICAgICAgICBzdG9yZUNhbGxlZUludG9MYXN0RnJhbWUodW5wcm9jZXNzZWRTdGFja1Ry
YWNlLmZyYW1lc1swXS51bnZlcmlmaWVkQ2FsbGVlKTsKLSAgICAgICAgICAgICAgICBzdGFydElu
ZGV4ID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodW5wcm9jZXNzZWRTdGFja1RyYWNlLnJl
Z0V4cCkgeworICAgICAgICAgICAgICAgIGFwcGVuZEVtcHR5RnJhbWUoKTsKKyAgICAgICAgICAg
ICAgICBzdGFja1RyYWNlLmZyYW1lcy5sYXN0KCkucmVnRXhwID0gdW5wcm9jZXNzZWRTdGFja1Ry
YWNlLnJlZ0V4cDsKKyAgICAgICAgICAgICAgICBzdGFja1RyYWNlLmZyYW1lcy5sYXN0KCkuZnJh
bWVUeXBlID0gRnJhbWVUeXBlOjpSZWdFeHA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApA
QCAtNzEyLDggKzcxOCwxMSBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OmNsZWFyRGF0YShjb25z
dCBBYnN0cmFjdExvY2tlciYpCiAKIFN0cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1l
OjpuYW1lRnJvbUNhbGxlZShWTSYgdm0pCiB7Ci0gICAgaWYgKCFjYWxsZWUpCisgICAgaWYgKCFj
YWxsZWUpIHsKKyAgICAgICAgaWYgKHJlZ0V4cCkKKyAgICAgICAgICAgIHJldHVybiByZWdFeHAt
PnRvU291cmNlU3RyaW5nKCk7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CiAKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gY2FsbGVlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwpAQCAtNzQ3LDcgKzc1
Niw3IEBAIFN0cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpkaXNwbGF5TmFtZShW
TSYgdm0pCiAgICAgICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiAKLSAgICBpZiAoZnJhbWVU
eXBlID09IEZyYW1lVHlwZTo6VW5rbm93biB8fCBmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpDKSB7
CisgICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OlVua25vd24gfHwgZnJhbWVUeXBlID09
IEZyYW1lVHlwZTo6QyB8fCBmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpSZWdFeHApIHsKICNpZiBI
QVZFKERMQUREUikKICAgICAgICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OkMpIHsKICAg
ICAgICAgICAgIGF1dG8gZGVtYW5nbGVkID0gV1RGOjpTdGFja1RyYWNlOjpkZW1hbmdsZShjQ29k
ZVBDKTsKQEAgLTc4Myw3ICs3OTIsNyBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tG
cmFtZTo6ZGlzcGxheU5hbWVGb3JKU09OVGVzdHMoVk0mIHZtKQogICAgICAgICAgICAgcmV0dXJu
IG5hbWU7CiAgICAgfQogCi0gICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OlVua25vd24g
fHwgZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6QykKKyAgICBpZiAoZnJhbWVUeXBlID09IEZyYW1l
VHlwZTo6VW5rbm93biB8fCBmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpDIHx8IGZyYW1lVHlwZSA9
PSBGcmFtZVR5cGU6OlJlZ0V4cCkKICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiKHVua25v
d24pIik7CiAgICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6Okhvc3QpCiAgICAgICAgIHJl
dHVybiBBU0NJSUxpdGVyYWwoIihob3N0KSIpOwpAQCAtODEwLDQ4ICs4MTksNzkgQEAgU3RyaW5n
IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OmRpc3BsYXlOYW1lRm9ySlNPTlRlc3RzKFZN
JiB2bSkKIAogaW50IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OmZ1bmN0aW9uU3RhcnRM
aW5lKCkKIHsKLSAgICBpZiAoZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6VW5rbm93biB8fCBmcmFt
ZVR5cGUgPT0gRnJhbWVUeXBlOjpIb3N0IHx8IGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OkMpCi0g
ICAgICAgIHJldHVybiAtMTsKLQotICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigp
KQorICAgIHN3aXRjaCAoZnJhbWVUeXBlKSB7CisgICAgY2FzZSBGcmFtZVR5cGU6OkV4ZWN1dGFi
bGU6CisgICAgICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICAg
ICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0YWJs
ZSo+KGV4ZWN1dGFibGUpLT5maXJzdExpbmUoKTsKKworICAgIGNhc2UgRnJhbWVUeXBlOjpIb3N0
OgorICAgIGNhc2UgRnJhbWVUeXBlOjpSZWdFeHA6CisgICAgY2FzZSBGcmFtZVR5cGU6OkM6Cisg
ICAgY2FzZSBGcmFtZVR5cGU6OlVua25vd246CiAgICAgICAgIHJldHVybiAtMTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5maXJzdExpbmUo
KTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIC0xOwogfQog
CiB1bnNpZ25lZCBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpmdW5jdGlvblN0YXJ0Q29s
dW1uKCkKIHsKLSAgICBpZiAoZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6VW5rbm93biB8fCBmcmFt
ZVR5cGUgPT0gRnJhbWVUeXBlOjpIb3N0IHx8IGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OkMpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0KLSAg
ICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICBzd2l0Y2ggKGZyYW1lVHlw
ZSkgeworICAgIGNhc2UgRnJhbWVUeXBlOjpFeGVjdXRhYmxlOgorICAgICAgICBpZiAoZXhlY3V0
YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY3Jp
cHRFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPnN0YXJ0Q29sdW1uKCk7CisKKyAgICBjYXNlIEZy
YW1lVHlwZTo6SG9zdDoKKyAgICBjYXNlIEZyYW1lVHlwZTo6UmVnRXhwOgorICAgIGNhc2UgRnJh
bWVUeXBlOjpDOgorICAgIGNhc2UgRnJhbWVUeXBlOjpVbmtub3duOgogICAgICAgICByZXR1cm4g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotCi0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFNjcmlwdEV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+c3RhcnRDb2x1bW4oKTsKKyAg
ICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKIH0KIAogaW50cHRyX3QgU2FtcGxpbmdQcm9maWxlcjo6
U3RhY2tGcmFtZTo6c291cmNlSUQoKQogewotICAgIGlmIChmcmFtZVR5cGUgPT0gRnJhbWVUeXBl
OjpVbmtub3duIHx8IGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6Okhvc3QgfHwgZnJhbWVUeXBlID09
IEZyYW1lVHlwZTo6QykKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgaWYgKGV4ZWN1dGFibGUt
PmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgc3dpdGNoIChmcmFtZVR5cGUpIHsKKyAgICBjYXNlIEZy
YW1lVHlwZTo6RXhlY3V0YWJsZToKKyAgICAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0
aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxTY3JpcHRFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPnNvdXJjZUlEKCk7CisKKyAgICBjYXNl
IEZyYW1lVHlwZTo6SG9zdDoKKyAgICBjYXNlIEZyYW1lVHlwZTo6UmVnRXhwOgorICAgIGNhc2Ug
RnJhbWVUeXBlOjpDOgorICAgIGNhc2UgRnJhbWVUeXBlOjpVbmtub3duOgogICAgICAgICByZXR1
cm4gLTE7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KGV4ZWN1
dGFibGUpLT5zb3VyY2VJRCgpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gLTE7CiB9CiAKIFN0cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjp1
cmwoKQogewotICAgIGlmIChmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpVbmtub3duIHx8IGZyYW1l
VHlwZSA9PSBGcmFtZVR5cGU6Okhvc3QgfHwgZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6QykKLSAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgc3dpdGNoIChmcmFtZVR5cGUpIHsKKyAg
ICBjYXNlIEZyYW1lVHlwZTo6RXhlY3V0YWJsZTogeworICAgICAgICBpZiAoZXhlY3V0YWJsZS0+
aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworCisg
ICAgICAgIFN0cmluZyB1cmwgPSBzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4oZXhlY3V0
YWJsZSktPnNvdXJjZVVSTCgpOworICAgICAgICBpZiAodXJsLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPnNv
dXJjZSgpLnByb3ZpZGVyKCktPnNvdXJjZVVSTCgpOyAvLyBGYWxsIGJhY2sgdG8gc291cmNlVVJM
IGRpcmVjdGl2ZS4KKyAgICAgICAgcmV0dXJuIHVybDsKKyAgICB9CiAKLSAgICBpZiAoZXhlY3V0
YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICBjYXNlIEZyYW1lVHlwZTo6SG9zdDoKKyAgICBj
YXNlIEZyYW1lVHlwZTo6UmVnRXhwOgorICAgIGNhc2UgRnJhbWVUeXBlOjpDOgorICAgIGNhc2Ug
RnJhbWVUeXBlOjpVbmtub3duOgogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLQotICAg
IFN0cmluZyB1cmwgPSBzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSkt
PnNvdXJjZVVSTCgpOwotICAgIGlmICh1cmwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5zb3VyY2UoKS5wcm92aWRl
cigpLT5zb3VyY2VVUkwoKTsgLy8gRmFsbCBiYWNrIHRvIHNvdXJjZVVSTCBkaXJlY3RpdmUuCi0g
ICAgcmV0dXJuIHVybDsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKIFZlY3RvcjxTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja1Ry
YWNlPiBTYW1wbGluZ1Byb2ZpbGVyOjpyZWxlYXNlU3RhY2tUcmFjZXMoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGxvY2tlcikKQEAgLTEwODAsNiArMTEyMCw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBTYW1wbGluZ1Byb2ZpbGVyOjpGcmFtZVR5cGUgZnJhbWVUeXBlKQog
ICAgIGNhc2UgU2FtcGxpbmdQcm9maWxlcjo6RnJhbWVUeXBlOjpIb3N0OgogICAgICAgICBvdXQu
cHJpbnQoIkhvc3QiKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTYW1wbGluZ1Byb2ZpbGVy
OjpGcmFtZVR5cGU6OlJlZ0V4cDoKKyAgICAgICAgb3V0LnByaW50KCJSZWdFeHAiKTsKKyAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBTYW1wbGluZ1Byb2ZpbGVyOjpGcmFtZVR5cGU6OkM6CiAgICAg
Y2FzZSBTYW1wbGluZ1Byb2ZpbGVyOjpGcmFtZVR5cGU6OlVua25vd246CiAgICAgICAgIG91dC5w
cmludCgiVW5rbm93biIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2FtcGxpbmdQcm9maWxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Ft
cGxpbmdQcm9maWxlci5oCmluZGV4IDdkOTFhZDQ4ZTUyZDUyNzYyOWFjNDNmYTE5OThmNzk4YmJj
YTk0MWMuLjYzOGI5NjQwNWVjY2Y4NmQ4MGNmMTgzMWJkZDBhMmNhMjgyMjAzYjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKQEAgLTM5
LDYgKzM5LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIFJlZ0V4cDsKIGNsYXNzIFZN
OwogY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiAKQEAgLTY4LDYgKzY5LDcgQEAgY2xhc3MgU2FtcGxp
bmdQcm9maWxlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTYW1wbGluZ1Byb2ZpbGVy
PiB7CiAgICAgZW51bSBjbGFzcyBGcmFtZVR5cGUgeyAKICAgICAgICAgRXhlY3V0YWJsZSwKICAg
ICAgICAgSG9zdCwKKyAgICAgICAgUmVnRXhwLAogICAgICAgICBDLAogICAgICAgICBVbmtub3du
CiAgICAgfTsKQEAgLTg1LDYgKzg3LDcgQEAgY2xhc3MgU2FtcGxpbmdQcm9maWxlciA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTYW1wbGluZ1Byb2ZpbGVyPiB7CiAgICAgICAgIHZvaWQq
IGNDb2RlUEMgeyBudWxscHRyIH07CiAgICAgICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxl
IHsgbnVsbHB0ciB9OwogICAgICAgICBKU09iamVjdCogY2FsbGVlIHsgbnVsbHB0ciB9OworICAg
ICAgICBSZWdFeHAqIHJlZ0V4cCB7IG51bGxwdHIgfTsKIAogICAgICAgICBzdHJ1Y3QgQ29kZUxv
Y2F0aW9uIHsKICAgICAgICAgICAgIGJvb2wgaGFzQ29kZUJsb2NrSGFzaCgpIGNvbnN0CkBAIC0x
NDEsNiArMTQ0LDcgQEAgY2xhc3MgU2FtcGxpbmdQcm9maWxlciA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxTYW1wbGluZ1Byb2ZpbGVyPiB7CiAgICAgICAgIHZvaWQqIHRvcFBDOwogICAg
ICAgICBib29sIHRvcEZyYW1lSXNMTEludDsKICAgICAgICAgdm9pZCogbGxpbnRQQzsKKyAgICAg
ICAgUmVnRXhwKiByZWdFeHA7CiAgICAgICAgIFZlY3RvcjxVbnByb2Nlc3NlZFN0YWNrRnJhbWU+
IGZyYW1lczsKICAgICB9OwogCkBAIC0xODUsNyArMTg5LDcgQEAgY2xhc3MgU2FtcGxpbmdQcm9m
aWxlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTYW1wbGluZ1Byb2ZpbGVyPiB7CiBw
cml2YXRlOgogICAgIHZvaWQgY3JlYXRlVGhyZWFkSWZOZWNlc3NhcnkoY29uc3QgQWJzdHJhY3RM
b2NrZXImKTsKICAgICB2b2lkIHRpbWVyTG9vcCgpOwotICAgIHZvaWQgdGFrZVNhbXBsZShjb25z
dCBBYnN0cmFjdExvY2tlciYsIFNlY29uZHMmIHN0YWNrVHJhY2VQcm9jZXNzaW5nVGltZSk7Cisg
ICAgU2Vjb25kcyB0YWtlU2FtcGxlKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7CiAKICAgICBWTSYg
bV92bTsKICAgICBXZWFrUmFuZG9tIG1fd2Vha1JhbmRvbTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCmluZGV4IGMyOTA3M2QyMDhhNWQ2Mjk5YzQ3YTk2MjEwZjg4OTE2ZjI5NTdhMTUuLmYx
ZTNkYzAyM2RmN2NmZTM2ZjUyZGNhY2M0M2Y5Nzc5NDhhNzRhNjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaApAQCAtMTE3LDYgKzExNyw3IEBAIGNsYXNzIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIE5hdGl2ZUV4ZWN1dGFi
bGU7CiBjbGFzcyBQcm9taXNlRGVmZXJyZWRUaW1lcjsKK2NsYXNzIFJlZ0V4cDsKIGNsYXNzIFJl
Z0V4cENhY2hlOwogY2xhc3MgUmVnaXN0ZXI7CiBjbGFzcyBSZWdpc3RlckF0T2Zmc2V0TGlzdDsK
QEAgLTU5NSw3ICs1OTYsNyBAQCBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxWTT4sIHB1YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9kZTxWTT4gewogICAgIEluc3RydWN0aW9u
KiB0YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3c7CiAgICAgdWludDMyX3Qgb3NyRXhpdEluZGV4
OwogICAgIHZvaWQqIG9zckV4aXRKdW1wRGVzdGluYXRpb247Ci0gICAgYm9vbCBpc0V4ZWN1dGlu
Z0luUmVnRXhwSklUIHsgZmFsc2UgfTsKKyAgICBSZWdFeHAqIGV4ZWN1dGluZ1JlZ0V4cEpJVCB7
IG51bGxwdHIgfTsKIAogICAgIC8vIFRoZSB0aHJlYWRpbmcgcHJvdG9jb2wgaGVyZSBpcyBhcyBm
b2xsb3dzOgogICAgIC8vIC0gWW91IGNhbiBjYWxsIHNjcmF0Y2hCdWZmZXJGb3JTaXplIGZyb20g
YW55IHRocmVhZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJK
SVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKaW5kZXggMDNm
YzA2ZGQ3ZGZhMjNmMzI1NGYzZjQyNTg2YjhmNWM1NjZlNTM0Ny4uZWNmNWEzNjFhZmVjYzc1ZDZm
NThmM2JjMmFkMzI1YTJkZTc2NjE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3lhcnIvWWFyckpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJ
VC5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVkZSAiVk0u
aCIKICNpbmNsdWRlICJZYXJyLmgiCiAjaW5jbHVkZSAiWWFyckNhbm9uaWNhbGl6ZS5oIgogCkBA
IC00MSw3ICs0MCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgWWFyciB7CiAKIHRlbXBs
YXRlPFlhcnJKSVRDb21waWxlTW9kZSBjb21waWxlTW9kZT4KIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
OiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKLSAgICBmcmllbmQgdm9pZCBqaXRDb21waWxlKFZN
KiwgWWFyckNvZGVCbG9jayYgaml0T2JqZWN0LCBjb25zdCBTdHJpbmcmIHBhdHRlcm4sIHVuc2ln
bmVkJiBudW1TdWJwYXR0ZXJucywgY29uc3QgY2hhciomIGVycm9yLCBib29sIGlnbm9yZUNhc2Us
IGJvb2wgbXVsdGlsaW5lKTsKKyAgICBmcmllbmQgdm9pZCBqaXRDb21waWxlKFlhcnJDb2RlQmxv
Y2smIGppdE9iamVjdCwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuLCB1bnNpZ25lZCYgbnVtU3VicGF0
dGVybnMsIGNvbnN0IGNoYXIqJiBlcnJvciwgYm9vbCBpZ25vcmVDYXNlLCBib29sIG11bHRpbGlu
ZSk7CiAKICNpZiBDUFUoQVJNKQogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGlucHV0ID0g
QVJNUmVnaXN0ZXJzOjpyMDsKQEAgLTMzMzksMTQgKzMzMzgsMTAgQEAgY2xhc3MgWWFyckdlbmVy
YXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogI2VsaWYgQ1BVKE1JUFMpCiAgICAgICAg
IC8vIERvIG5vdGhpbmcuCiAjZW5kaWYKLQotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEp
LCAmbV92bS0+aXNFeGVjdXRpbmdJblJlZ0V4cEpJVCk7CiAgICAgfQogCiAgICAgdm9pZCBnZW5l
cmF0ZVJldHVybigpCiAgICAgewotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV92
bS0+aXNFeGVjdXRpbmdJblJlZ0V4cEpJVCk7Ci0KICNpZiBDUFUoWDg2XzY0KQogI2lmIE9TKFdJ
TkRPV1MpCiAgICAgICAgIC8vIFN0b3JlIHRoZSByZXR1cm4gdmFsdWUgaW4gdGhlIGFsbG9jYXRl
ZCBzcGFjZSBwb2ludGVkIGJ5IHJjeC4KQEAgLTMzOTMsOSArMzM4OCw4IEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICB9CiAKIHB1YmxpYzoKLSAg
ICBZYXJyR2VuZXJhdG9yKFZNKiB2bSwgWWFyclBhdHRlcm4mIHBhdHRlcm4sIFlhcnJDaGFyU2l6
ZSBjaGFyU2l6ZSkKLSAgICAgICAgOiBtX3ZtKHZtKQotICAgICAgICAsIG1fcGF0dGVybihwYXR0
ZXJuKQorICAgIFlhcnJHZW5lcmF0b3IoWWFyclBhdHRlcm4mIHBhdHRlcm4sIFlhcnJDaGFyU2l6
ZSBjaGFyU2l6ZSkKKyAgICAgICAgOiBtX3BhdHRlcm4ocGF0dGVybikKICAgICAgICAgLCBtX2No
YXJTaXplKGNoYXJTaXplKQogICAgICAgICAsIG1fc2hvdWxkRmFsbEJhY2soZmFsc2UpCiAgICAg
ICAgICwgbV9kZWNvZGVTdXJyb2dhdGVQYWlycyhtX2NoYXJTaXplID09IENoYXIxNiAmJiBtX3Bh
dHRlcm4udW5pY29kZSgpKQpAQCAtMzQ5Nyw4ICszNDkxLDYgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWTSog
bV92bTsKLQogICAgIFlhcnJQYXR0ZXJuJiBtX3BhdHRlcm47CiAKICAgICBZYXJyQ2hhclNpemUg
bV9jaGFyU2l6ZTsKQEAgLTM1MzgsMTIgKzM1MzAsMTIgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6
IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgIEJhY2t0cmFja2luZ1N0YXRlIG1fYmFja3Ry
YWNraW5nU3RhdGU7CiB9OwogCi12b2lkIGppdENvbXBpbGUoWWFyclBhdHRlcm4mIHBhdHRlcm4s
IFlhcnJDaGFyU2l6ZSBjaGFyU2l6ZSwgVk0qIHZtLCBZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3Qs
IFlhcnJKSVRDb21waWxlTW9kZSBtb2RlKQordm9pZCBqaXRDb21waWxlKFlhcnJQYXR0ZXJuJiBw
YXR0ZXJuLCBZYXJyQ2hhclNpemUgY2hhclNpemUsIFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCwg
WWFyckpJVENvbXBpbGVNb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0gTWF0Y2hPbmx5KQot
ICAgICAgICBZYXJyR2VuZXJhdG9yPE1hdGNoT25seT4odm0sIHBhdHRlcm4sIGNoYXJTaXplKS5j
b21waWxlKGppdE9iamVjdCk7CisgICAgICAgIFlhcnJHZW5lcmF0b3I8TWF0Y2hPbmx5PihwYXR0
ZXJuLCBjaGFyU2l6ZSkuY29tcGlsZShqaXRPYmplY3QpOwogICAgIGVsc2UKLSAgICAgICAgWWFy
ckdlbmVyYXRvcjxJbmNsdWRlU3VicGF0dGVybnM+KHZtLCBwYXR0ZXJuLCBjaGFyU2l6ZSkuY29t
cGlsZShqaXRPYmplY3QpOworICAgICAgICBZYXJyR2VuZXJhdG9yPEluY2x1ZGVTdWJwYXR0ZXJu
cz4ocGF0dGVybiwgY2hhclNpemUpLmNvbXBpbGUoaml0T2JqZWN0KTsKIH0KIAogfX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAppbmRleCBhZDU1MDBmMGQ4YzNkNjY3OGRiOGZhOWM5
Zjk1YjEyYWYzOTE5MjY0Li44NDNjZWU5MDdhNjQ3MGYxYWNkMDc1NzdkZTAxMDhhNjc0ZGQyZWRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCkBAIC00NSw3ICs0NSw2IEBAIGNv
bnN0ZXhwciBzaXplX3QgcGF0dGVybkNvbnRleHRCdWZmZXJTaXplID0gODE5MjsgLy8gU3BhY2Ug
Y2FsbGVyIGFsbG9jYXRlcyB0byBzCiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBWTTsKIGNs
YXNzIEV4ZWN1dGFibGVQb29sOwogCiBuYW1lc3BhY2UgWWFyciB7CkBAIC0yMDMsNyArMjAyLDcg
QEAgZW51bSBZYXJySklUQ29tcGlsZU1vZGUgewogICAgIE1hdGNoT25seSwKICAgICBJbmNsdWRl
U3VicGF0dGVybnMKIH07Ci12b2lkIGppdENvbXBpbGUoWWFyclBhdHRlcm4mLCBZYXJyQ2hhclNp
emUsIFZNKiwgWWFyckNvZGVCbG9jayYgaml0T2JqZWN0LCBZYXJySklUQ29tcGlsZU1vZGUgPSBJ
bmNsdWRlU3VicGF0dGVybnMpOwordm9pZCBqaXRDb21waWxlKFlhcnJQYXR0ZXJuJiwgWWFyckNo
YXJTaXplLCBZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QsIFlhcnJKSVRDb21waWxlTW9kZSA9IElu
Y2x1ZGVTdWJwYXR0ZXJucyk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpZYXJyCiAKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYTFkZDk5
MTgxN2FkNTFmNzRlOWZlMzI5ZThkZTVmNDRmNGY0OGRjYi4uYjBiYzJiOWE5NWQxZTljYTY5ODQ1
YmE2MTM0ZjAzYzQ2YmI0ODc5OCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
SlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxOC0wMS0wMiAgWXVzdWtlIFN1
enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBKU0MgU2FtcGxpbmcgUHJv
ZmlsZXI6IERldGVjdCB0ZXN0ZXIgYW5kIHRlc3RlZSB3aGVuIHNhbXBsaW5nIGluIFJlZ0V4cCBK
SVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjcy
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3Ry
ZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXJlZ2V4cC5qczogQWRkZWQuCisgICAgICAgIChwbGF0Zm9y
bVN1cHBvcnRzU2FtcGxpbmdQcm9maWxlci50ZXN0KToKKyAgICAgICAgKHBsYXRmb3JtU3VwcG9y
dHNTYW1wbGluZ1Byb2ZpbGVyLmJheik6CisgICAgICAgIChwbGF0Zm9ybVN1cHBvcnRzU2FtcGxp
bmdQcm9maWxlcik6CisKIDIwMTctMTItMjggIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5j
b20+CiAKICAgICAgICAgQXNzZXJ0aW9uIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHNvbWV0aGluZyBp
cyBhbiBhc3luYyBnZW5lcmF0b3IgaXMgd3JvbmcKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNz
L3NhbXBsaW5nLXByb2ZpbGVyLXJlZ2V4cC5qcyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXBy
b2ZpbGVyLXJlZ2V4cC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTM5ODdjMTY0NTgwYTc2MTVlYTBjMzgyOTE3
NjJkZjQ0MTIyMWJkCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmct
cHJvZmlsZXItcmVnZXhwLmpzCkBAIC0wLDAgKzEsMTggQEAKK2lmIChwbGF0Zm9ybVN1cHBvcnRz
U2FtcGxpbmdQcm9maWxlcigpKSB7CisgICAgbG9hZCgiLi9zYW1wbGluZy1wcm9maWxlci9zYW1w
bGluZ1Byb2ZpbGVyLmpzIik7CisKKyAgICBmdW5jdGlvbiB0ZXN0KHJlZ2V4cCwgc3RyaW5nKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHN0cmluZy5tYXRjaChyZWdleHApOworICAgIH0KKyAgICBu
b0lubGluZSh0ZXN0KTsKKworICAgIGZ1bmN0aW9uIGJheigpIHsKKyAgICAgICAgdmFyIHRleHQg
PSBgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxp
dCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBt
YWduYSBhbGlxdWEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNp
dGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25z
ZXF1YXQuIER1aXMgYXV0ZSBpcnVyZSBkb2xvciBpbiByZXByZWhlbmRlcml0IGluIHZvbHVwdGF0
ZSB2ZWxpdCBlc3NlIGNpbGx1bSBkb2xvcmUgZXUgZnVnaWF0IG51bGxhIHBhcmlhdHVyLiBFeGNl
cHRldXIgc2ludCBvY2NhZWNhdCBjdXBpZGF0YXQgbm9uIHByb2lkZW50LCBzdW50IGluIGN1bHBh
IHF1aSBvZmZpY2lhIGRlc2VydW50IG1vbGxpdCBhbmltIGlkIGVzdCBsYWJvcnVtLmA7CisgICAg
ICAgIHZhciByZWdleHAgPSAvLiovZ2k7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1
OyArK2kpCisgICAgICAgICAgICB0ZXN0KHJlZ2V4cCwgdGV4dCk7CisgICAgfQorCisgICAgcnVu
VGVzdChiYXosIFsiLy4qL2dpIiwgIiIsICJ0ZXN0IiwgImJheiJdKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330324</attachid>
            <date>2018-01-02 10:50:47 -0800</date>
            <delta_ts>2018-01-03 00:35:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152729-20180103035046.patch</filename>
            <type>text/plain</type>
            <size>32603</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2MzIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
OWY5NTM2OTVmMTM4NzMwNDAzZmZlZTlmMTFiM2Y5ZGFkZWYwNDQ2Li44MTFhMWE4NjIwZDhhMTI2
MTk4ZTY1YjBiNTc2OTEzZjhlNTBhZTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEg
KzEsNTUgQEAKKzIwMTgtMDEtMDIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5j
b20+CisKKyAgICAgICAgSlNDIFNhbXBsaW5nIFByb2ZpbGVyOiBEZXRlY3QgdGVzdGVyIGFuZCB0
ZXN0ZWUgd2hlbiBzYW1wbGluZyBpbiBSZWdFeHAgSklUCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3MjkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGV4dGVuZHMgU2FtcGxpbmdQcm9m
aWxlciB0byByZWNvZ25pemUgSklUIFJlZ0V4cCBleGVjdXRpb24uIFdlIHJlY29yZAorICAgICAg
ICBleGVjdXRpbmcgUmVnRXhwIGluIFZNIHNvIHRoYXQgU2FtcGxpbmdQcm9maWxlciBjYW4gZGV0
ZWN0IGl0LiBUaGlzIGlzIGJldHRlcgorICAgICAgICB0aGFuIHRoZSBwcmV2aW91cyBWTTo6aXNF
eGVjdXRpbmdJblJlZ0V4cEpJVCBmbGFnIGFwcHJvYWNoIHNpbmNlCisKKyAgICAgICAgMS4gaXNF
eGVjdXRpbmdJblJlZ0V4cEpJVCBpcyBzZXQgYWZ0ZXIgc3RhcnRpbmcgZXhlY3V0aW5nIEpJVCBS
ZWdFeHAgY29kZS4gVGh1cywKKyAgICAgICAgaWYgd2Ugc3VzcGVuZCB0aGUgdGhyZWFkIGp1c3Qg
YmVmb3JlIGV4ZWN1dGluZyB0aGlzIGZsYWcsIG9yIGp1c3QgYWZ0ZXIgY2xlYXJpbmcKKyAgICAg
ICAgdGhpcyBmbGFnLCBTYW1wbGluZ1Byb2ZpbGVyIGdldHMgaW52YWxpZCBmcmFtZSwgYW5kIGZy
YW1lIHZhbGlkYXRpb24gZmFpbHMuIFdlCisgICAgICAgIHNob3VsZCBzZXQgc3VjaCBhIGZsYWcg
YmVmb3JlIGFuZCBhZnRlciBleGVjdXRpbmcgSklUIFJlZ0V4cCBjb2RlLgorCisgICAgICAgIDIu
IFRoaXMgcmVtb3ZlcyBWTSBkZXBlbmRlbmN5IGZyb20gWWFyckpJVCB3aGljaCBpcyBub3QgZXNz
ZW50aWFsIG9uZS4KKworICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6cmVnZXhwTmFtZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyPEJs
b2NrPjo6ZHVtcFJlZ0V4cHMpOgorICAgICAgICAoSlNDOjpyZWdleHBUb1NvdXJjZVN0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6
YWRkQ29yZUNvbnN0cmFpbnRzKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cC5jcHA6CisgICAg
ICAgIChKU0M6OlJlZ0V4cDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6Y29tcGls
ZU1hdGNoT25seSk6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6dG9Tb3VyY2VTdHJpbmcgY29uc3Qp
OgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHBJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6bWF0Y2hJbmxpbmUpOgorICAgICAgICAq
IHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJv
ZmlsZXI6OlNhbXBsaW5nUHJvZmlsZXIpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVy
Ojp0aW1lckxvb3ApOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxl
KToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFj
a1RyYWNlcyk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6Om5h
bWVGcm9tQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFt
ZTo6ZGlzcGxheU5hbWUpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0Zy
YW1lOjpkaXNwbGF5TmFtZUZvckpTT05UZXN0cyk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJv
ZmlsZXI6OlN0YWNrRnJhbWU6OmZ1bmN0aW9uU3RhcnRMaW5lKToKKyAgICAgICAgKEpTQzo6U2Ft
cGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZnVuY3Rpb25TdGFydENvbHVtbik6CisgICAgICAg
IChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnNvdXJjZUlEKToKKyAgICAgICAg
KEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6dXJsKToKKyAgICAgICAgKFdURjo6
cHJpbnRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6On5TYW1wbGlu
Z1Byb2ZpbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIu
aDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogeWFyci9ZYXJySklULmNwcDoK
KyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVFbnRlcik6CisgICAg
ICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlUmV0dXJuKToKKyAgICAgICAg
KEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6WWFyckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OllhcnI6OmppdENvbXBpbGUpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5oOgorCiA9PSBSb2xs
ZWQgb3ZlciB0byBDaGFuZ2VMb2ctMjAxOC0wMS0wMSA9PQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKaW5kZXggZDAyMTM0ZjYyNTU2YWMw
NjlkNWVlN2IxNjEzYjM0NjI0MDlmNDA4Zi4uNjdmMTY1NWViMmVmMjIwNjNlYTkxNGE0NDk1NjQ3
MDkzYTBhMzgxOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlRHVtcGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVEdW1wZXIuY3BwCkBAIC0yNTAsMjkgKzI1MCw5IEBAIGNvbnN0IElkZW50aWZpZXImIEJ5
dGVjb2RlRHVtcGVyPEJsb2NrPjo6aWRlbnRpZmllcihpbnQgaW5kZXgpIGNvbnN0CiAgICAgcmV0
dXJuIGJsb2NrKCktPmlkZW50aWZpZXIoaW5kZXgpOwogfQogCi1zdGF0aWMgQ1N0cmluZyByZWdl
eHBUb1NvdXJjZVN0cmluZyhSZWdFeHAqIHJlZ0V4cCkKLXsKLSAgICBjaGFyIHBvc3RmaXhbN10g
PSB7ICcvJywgMCwgMCwgMCwgMCwgMCwgMCB9OwotICAgIGludCBpbmRleCA9IDE7Ci0gICAgaWYg
KHJlZ0V4cC0+Z2xvYmFsKCkpCi0gICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAnZyc7Ci0gICAg
aWYgKHJlZ0V4cC0+aWdub3JlQ2FzZSgpKQotICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ2kn
OwotICAgIGlmIChyZWdFeHAtPm11bHRpbGluZSgpKQotICAgICAgICBwb3N0Zml4W2luZGV4XSA9
ICdtJzsKLSAgICBpZiAocmVnRXhwLT5kb3RBbGwoKSkKLSAgICAgICAgcG9zdGZpeFtpbmRleCsr
XSA9ICdzJzsKLSAgICBpZiAocmVnRXhwLT51bmljb2RlKCkpCi0gICAgICAgIHBvc3RmaXhbaW5k
ZXgrK10gPSAndSc7Ci0gICAgaWYgKHJlZ0V4cC0+c3RpY2t5KCkpCi0gICAgICAgIHBvc3RmaXhb
aW5kZXgrK10gPSAneSc7Ci0KLSAgICByZXR1cm4gdG9DU3RyaW5nKCIvIiwgcmVnRXhwLT5wYXR0
ZXJuKCkuaW1wbCgpLCBwb3N0Zml4KTsKLX0KLQogc3RhdGljIENTdHJpbmcgcmVnZXhwTmFtZShp
bnQgcmUsIFJlZ0V4cCogcmVnZXhwKQogewotICAgIHJldHVybiB0b0NTdHJpbmcocmVnZXhwVG9T
b3VyY2VTdHJpbmcocmVnZXhwKSwgIihAcmUiLCByZSwgIikiKTsKKyAgICByZXR1cm4gdG9DU3Ry
aW5nKHJlZ2V4cC0+dG9Tb3VyY2VTdHJpbmcoKSwgIihAcmUiLCByZSwgIikiKTsKIH0KIAogdGVt
cGxhdGU8Y2xhc3MgSW5zdHJ1Y3Rpb24+CkBAIC0xNzQ3LDcgKzE3MjcsNyBAQCB2b2lkIEJ5dGVj
b2RlRHVtcGVyPEJsb2NrPjo6ZHVtcFJlZ0V4cHMoUHJpbnRTdHJlYW0mIG91dCkKICAgICAgICAg
b3V0LnByaW50ZigiXG5tX3JlZ2V4cHM6XG4iKTsKICAgICAgICAgc2l6ZV90IGkgPSAwOwogICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIgIHJlJXUgPSAlc1xuIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGkpLCByZWdleHBUb1NvdXJjZVN0cmluZyhibG9jaygpLT5yZWdleHAo
aSkpLmRhdGEoKSk7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgcmUiLCBpLCAiID0gIiwgYmxv
Y2soKS0+cmVnZXhwKGkpLT50b1NvdXJjZVN0cmluZygpLCAiXG4iKTsKICAgICAgICAgICAgICsr
aTsKICAgICAgICAgfSB3aGlsZSAoaSA8IGNvdW50KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCmluZGV4IDdlZGI2MDBhNWNlYjBkZjFiMTZlN2U4ZmIyZDYzMDhlNWE4ZGM2
ZTQuLjUyYmE2Y2MxNDRhOGE0ZmQ2M2JhYjA4NWJkYzAyMmVkOWJhYWE3MjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC0yNjYxLDYgKzI2NjEsNyBAQCB2b2lkIEhlYXA6OmFk
ZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNsb3RWaXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKG1fdm0tPmV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIHNsb3RW
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0tPmxhc3RFeGNlcHRpb24oKSk7CisgICAgICAg
ICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5leGVjdXRpbmdSZWdFeHBK
SVQpOwogICAgICAgICB9LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlF
eGVjdXRpb24pOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAK
aW5kZXggMDIwYjdiZmU4OWViYzY1NWQzMWM1YjZhY2ZhMWFhYzk1MTZiZTJhZi4uYTRhYmZkNmE1
OTFkNWJhNWNkYmFhNmU3YzcyMDg3ZDJmNjM2NDUzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHAuY3BwCkBAIC0zMDcsNyArMzA3LDcgQEAgdm9pZCBSZWdFeHA6OmNvbXBp
bGUoVk0qIHZtLCBZYXJyOjpZYXJyQ2hhclNpemUgY2hhclNpemUpCiAKICNpZiBFTkFCTEUoWUFS
Ul9KSVQpCiAgICAgaWYgKCFwYXR0ZXJuLm1fY29udGFpbnNCYWNrcmVmZXJlbmNlcyAmJiAhcGF0
dGVybi5jb250YWluc1Vuc2lnbmVkTGVuZ3RoUGF0dGVybigpICYmIFZNOjpjYW5Vc2VSZWdFeHBK
SVQoKSkgewotICAgICAgICBZYXJyOjpqaXRDb21waWxlKHBhdHRlcm4sIGNoYXJTaXplLCB2bSwg
bV9yZWdFeHBKSVRDb2RlKTsKKyAgICAgICAgWWFycjo6aml0Q29tcGlsZShwYXR0ZXJuLCBjaGFy
U2l6ZSwgbV9yZWdFeHBKSVRDb2RlKTsKICAgICAgICAgaWYgKCFtX3JlZ0V4cEpJVENvZGUuaXNG
YWxsQmFjaygpKSB7CiAgICAgICAgICAgICBtX3N0YXRlID0gSklUQ29kZTsKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTM2Myw3ICszNjMsNyBAQCB2b2lkIFJlZ0V4cDo6Y29tcGlsZU1hdGNoT25s
eShWTSogdm0sIFlhcnI6OllhcnJDaGFyU2l6ZSBjaGFyU2l6ZSkKIAogI2lmIEVOQUJMRShZQVJS
X0pJVCkKICAgICBpZiAoIXBhdHRlcm4ubV9jb250YWluc0JhY2tyZWZlcmVuY2VzICYmICFwYXR0
ZXJuLmNvbnRhaW5zVW5zaWduZWRMZW5ndGhQYXR0ZXJuKCkgJiYgVk06OmNhblVzZVJlZ0V4cEpJ
VCgpKSB7Ci0gICAgICAgIFlhcnI6OmppdENvbXBpbGUocGF0dGVybiwgY2hhclNpemUsIHZtLCBt
X3JlZ0V4cEpJVENvZGUsIFlhcnI6Ok1hdGNoT25seSk7CisgICAgICAgIFlhcnI6OmppdENvbXBp
bGUocGF0dGVybiwgY2hhclNpemUsIG1fcmVnRXhwSklUQ29kZSwgWWFycjo6TWF0Y2hPbmx5KTsK
ICAgICAgICAgaWYgKCFtX3JlZ0V4cEpJVENvZGUuaXNGYWxsQmFjaygpKSB7CiAgICAgICAgICAg
ICBtX3N0YXRlID0gSklUQ29kZTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQwOSw2ICs0MDks
MjYgQEAgdm9pZCBSZWdFeHA6OmRlbGV0ZUNvZGUoKQogICAgIG1fcmVnRXhwQnl0ZWNvZGUgPSBu
dWxscHRyOwogfQogCitTdHJpbmcgUmVnRXhwOjp0b1NvdXJjZVN0cmluZygpIGNvbnN0Cit7Cisg
ICAgY2hhciBwb3N0Zml4WzddID0geyAnLycsIDAsIDAsIDAsIDAsIDAsIDAgfTsKKyAgICBpbnQg
aW5kZXggPSAxOworICAgIGlmIChnbG9iYWwoKSkKKyAgICAgICAgcG9zdGZpeFtpbmRleCsrXSA9
ICdnJzsKKyAgICBpZiAoaWdub3JlQ2FzZSgpKQorICAgICAgICBwb3N0Zml4W2luZGV4KytdID0g
J2knOworICAgIGlmIChtdWx0aWxpbmUoKSkKKyAgICAgICAgcG9zdGZpeFtpbmRleF0gPSAnbSc7
CisgICAgaWYgKGRvdEFsbCgpKQorICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ3MnOworICAg
IGlmICh1bmljb2RlKCkpCisgICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAndSc7CisgICAgaWYg
KHN0aWNreSgpKQorICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ3knOworCisgICAgcmV0dXJu
IG1ha2VTdHJpbmcoIi8iLCBwYXR0ZXJuKCksIHBvc3RmaXgpOworfQorCiAjaWYgRU5BQkxFKFlB
UlJfSklUX0RFQlVHKQogdm9pZCBSZWdFeHA6Om1hdGNoQ29tcGFyZVdpdGhJbnRlcnByZXRlcihj
b25zdCBTdHJpbmcmIHMsIGludCBzdGFydE9mZnNldCwgaW50KiBvZmZzZXRWZWN0b3IsIGludCBq
aXRSZXN1bHQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCmluZGV4IDJl
ZDlmOWQ2MGU3Y2YyM2Y0ZTUxYjkwZDNhNGM3YTQ5ODU2NjEwNWUuLjZmZTdmMDQ0OGNkNDFkZjQz
OGQ3YjYwMTY5MmQyMTMwZjkyZTNiYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cC5oCkBAIC0xMjIsNiArMTIyLDggQEAgY2xhc3MgUmVnRXhwIGZpbmFsIDogcHVibGljIEpT
Q2VsbCB7CiAKICAgICBSZWdFeHBLZXkga2V5KCkgeyByZXR1cm4gUmVnRXhwS2V5KG1fZmxhZ3Ms
IG1fcGF0dGVyblN0cmluZyk7IH0KIAorICAgIFN0cmluZyB0b1NvdXJjZVN0cmluZygpIGNvbnN0
OworCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCkBAIC0xNTAs
NiArMTUyLDI2IEBAIGNsYXNzIFJlZ0V4cCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHZv
aWQgbWF0Y2hDb21wYXJlV2l0aEludGVycHJldGVyKGNvbnN0IFN0cmluZyYsIGludCBzdGFydE9m
ZnNldCwgaW50KiBvZmZzZXRWZWN0b3IsIGludCBqaXRSZXN1bHQpOwogI2VuZGlmCiAKKyNpZiBF
TkFCTEUoWUFSUl9KSVQpCisgICAgY2xhc3MgUmVnRXhwSklURnJhbWVUcmFjZXIgeworICAgICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWdFeHBKSVRGcmFtZVRyYWNlcik7CisgICAgcHVibGlj
OgorICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ0V4cEpJVEZyYW1lVHJhY2VyKFZNJiB2bSwgUmVn
RXhwJiByZWdFeHApCisgICAgICAgICAgICA6IG1fdm0odm0pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1fdm0uZXhlY3V0aW5nUmVnRXhwSklUID0gJnJlZ0V4cDsKKyAgICAgICAgfQorCisgICAg
ICAgIEFMV0FZU19JTkxJTkUgflJlZ0V4cEpJVEZyYW1lVHJhY2VyKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV92bS5leGVjdXRpbmdSZWdFeHBKSVQgPSBudWxscHRyOworICAgICAgICB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBWTSYgbV92bTsKKyAgICB9OworI2VuZGlmCisKICAgICBS
ZWdFeHBTdGF0ZSBtX3N0YXRlIHsgTm90Q29tcGlsZWQgfTsKICAgICBTdHJpbmcgbV9wYXR0ZXJu
U3RyaW5nOwogICAgIFJlZ0V4cEZsYWdzIG1fZmxhZ3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBJbmxpbmVzLmgKaW5kZXggYjJmMWRkMzkzYzkzZDFhMDQyNTZjMzA4
MTA5MmY5ZWViZGMyZjA5Ny4uOGNmYTk2MzhiZjBhN2QzYzkzNTJkYmM3NDEyMjMwZDJlZDU3YWY2
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwSW5saW5l
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cElubGluZXMuaApA
QCAtMTE4LDEwICsxMTgsMTMgQEAgQUxXQVlTX0lOTElORSBpbnQgUmVnRXhwOjptYXRjaElubGlu
ZShWTSYgdm0sIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgc3RhcnRPZmYKICNlbmRpZgogCiAg
ICAgaWYgKG1fc3RhdGUgPT0gSklUQ29kZSkgewotICAgICAgICBpZiAocy5pczhCaXQoKSkKLSAg
ICAgICAgICAgIHJlc3VsdCA9IG1fcmVnRXhwSklUQ29kZS5leGVjdXRlKHMuY2hhcmFjdGVyczgo
KSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksIG9mZnNldFZlY3RvciBFWFRSQV9KSVRfUEFSQU1T
KS5zdGFydDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gbV9yZWdFeHBKSVRD
b2RlLmV4ZWN1dGUocy5jaGFyYWN0ZXJzMTYoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksIG9m
ZnNldFZlY3RvciBFWFRSQV9KSVRfUEFSQU1TKS5zdGFydDsKKyAgICAgICAgeworICAgICAgICAg
ICAgUmVnRXhwSklURnJhbWVUcmFjZXIgdHJhY2VyIHsgdm0sICp0aGlzIH07CisgICAgICAgICAg
ICBpZiAocy5pczhCaXQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtX3JlZ0V4cEpJVENv
ZGUuZXhlY3V0ZShzLmNoYXJhY3RlcnM4KCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0aCgpLCBvZmZz
ZXRWZWN0b3IgRVhUUkFfSklUX1BBUkFNUykuc3RhcnQ7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLmV4ZWN1dGUocy5jaGFyYWN0ZXJz
MTYoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksIG9mZnNldFZlY3RvciBFWFRSQV9KSVRfUEFS
QU1TKS5zdGFydDsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gWWFycjo6SlNS
ZWdFeHBKSVRDb2RlRmFpbHVyZSkgewogICAgICAgICAgICAgLy8gSklUJ2VkIGNvZGUgY291bGRu
J3QgaGFuZGxlIGV4cHJlc3Npb24sIHNvIHB1bnQgYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuCkBA
IC0yMjMsMTAgKzIyNiwxMyBAQCBBTFdBWVNfSU5MSU5FIE1hdGNoUmVzdWx0IFJlZ0V4cDo6bWF0
Y2hJbmxpbmUoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkCiAgICAgTWF0Y2hSZXN1
bHQgcmVzdWx0OwogCiAgICAgaWYgKG1fc3RhdGUgPT0gSklUQ29kZSkgewotICAgICAgICBpZiAo
cy5pczhCaXQoKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IG1fcmVnRXhwSklUQ29kZS5leGVjdXRl
KHMuY2hhcmFjdGVyczgoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCkgRVhUUkFfSklUX1BBUkFN
Uyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IG1fcmVnRXhwSklUQ29kZS5l
eGVjdXRlKHMuY2hhcmFjdGVyczE2KCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0aCgpIEVYVFJBX0pJ
VF9QQVJBTVMpOworICAgICAgICB7CisgICAgICAgICAgICBSZWdFeHBKSVRGcmFtZVRyYWNlciB0
cmFjZXIgeyB2bSwgKnRoaXMgfTsKKyAgICAgICAgICAgIGlmIChzLmlzOEJpdCgpKQorICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IG1fcmVnRXhwSklUQ29kZS5leGVjdXRlKHMuY2hhcmFjdGVyczgo
KSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCkgRVhUUkFfSklUX1BBUkFNUyk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLmV4ZWN1dGUo
cy5jaGFyYWN0ZXJzMTYoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCkgRVhUUkFfSklUX1BBUkFN
Uyk7CisgICAgICAgIH0KIAogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKICAgICAgICAgaWYg
KCFyZXN1bHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1w
bGluZ1Byb2ZpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5n
UHJvZmlsZXIuY3BwCmluZGV4IDk3MjdjMThmZGJjYzBkNWUxYjliMjI3ZGZmZDM4MjFmY2Q2Y2U3
Y2MuLmQ4NzQ4ZjE2ZjNjOTIxY2FlZTcxYzI5ZDhmYWY0ZTM4ZWYyZTk5NDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCkBAIC0y
NzYsMTEgKzI3Niw4IEBAIGNsYXNzIENGcmFtZVdhbGtlciA6IHB1YmxpYyBGcmFtZVdhbGtlciB7
CiAKIFNhbXBsaW5nUHJvZmlsZXI6OlNhbXBsaW5nUHJvZmlsZXIoVk0mIHZtLCBSZWZQdHI8U3Rv
cHdhdGNoPiYmIHN0b3B3YXRjaCkKICAgICA6IG1fdm0odm0pCi0gICAgLCBtX3dlYWtSYW5kb20o
KQogICAgICwgbV9zdG9wd2F0Y2goV1RGTW92ZShzdG9wd2F0Y2gpKQogICAgICwgbV90aW1pbmdJ
bnRlcnZhbChTZWNvbmRzOjpmcm9tTWljcm9zZWNvbmRzKE9wdGlvbnM6OnNhbXBsZUludGVydmFs
KCkpKQotICAgICwgbV9pc1BhdXNlZChmYWxzZSkKLSAgICAsIG1faXNTaHV0RG93bihmYWxzZSkK
IHsKICAgICBpZiAoc1JlcG9ydFN0YXRzKSB7CiAgICAgICAgIHNOdW1Ub3RhbFdhbGtzID0gMDsK
QEAgLTI5MCwxMCArMjg3LDYgQEAgU2FtcGxpbmdQcm9maWxlcjo6U2FtcGxpbmdQcm9maWxlcihW
TSYgdm0sIFJlZlB0cjxTdG9wd2F0Y2g+JiYgc3RvcHdhdGNoKQogICAgIG1fY3VycmVudEZyYW1l
cy5ncm93KDI1Nik7CiB9CiAKLVNhbXBsaW5nUHJvZmlsZXI6On5TYW1wbGluZ1Byb2ZpbGVyKCkK
LXsKLX0KLQogdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpjcmVhdGVUaHJlYWRJZk5lY2Vzc2FyeShj
b25zdCBBYnN0cmFjdExvY2tlciYpCiB7CiAgICAgQVNTRVJUKG1fbG9jay5pc0xvY2tlZCgpKTsK
QEAgLTMxNyw3ICszMTAsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRpbWVyTG9vcCgpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBpZiAoIW1faXNQYXVzZWQgJiYg
bV9qc2NFeGVjdXRpb25UaHJlYWQpCi0gICAgICAgICAgICAgICAgdGFrZVNhbXBsZShsb2NrZXIs
IHN0YWNrVHJhY2VQcm9jZXNzaW5nVGltZSk7CisgICAgICAgICAgICAgICAgc3RhY2tUcmFjZVBy
b2Nlc3NpbmdUaW1lID0gdGFrZVNhbXBsZShsb2NrZXIpOwogCiAgICAgICAgICAgICBtX2xhc3RU
aW1lID0gbV9zdG9wd2F0Y2gtPmVsYXBzZWRUaW1lKCk7CiAgICAgICAgIH0KQEAgLTMzMiw3ICsz
MjUsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRpbWVyTG9vcCgpCiAgICAgfQogfQogCi12
b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRha2VTYW1wbGUoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBT
ZWNvbmRzJiBzdGFja1RyYWNlUHJvY2Vzc2luZ1RpbWUpCitTZWNvbmRzIFNhbXBsaW5nUHJvZmls
ZXI6OnRha2VTYW1wbGUoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogewogICAgIEFTU0VSVChtX2xv
Y2suaXNMb2NrZWQoKSk7CiAgICAgaWYgKG1fdm0uZW50cnlTY29wZSkgewpAQCAtMzUwLDYgKzM0
Myw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dGFrZVNhbXBsZShjb25zdCBBYnN0cmFjdExv
Y2tlciYsIFNlY29uZHMmIHN0YWNrVHJhY2VQcm9jCiAgICAgICAgICAgICBFeGVjU3RhdGUqIGNh
bGxGcmFtZTsKICAgICAgICAgICAgIHZvaWQqIG1hY2hpbmVQQzsKICAgICAgICAgICAgIGJvb2wg
dG9wRnJhbWVJc0xMSW50ID0gZmFsc2U7CisgICAgICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9IG51
bGxwdHI7CiAgICAgICAgICAgICB2b2lkKiBsbGludFBDOwogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIFBsYXRmb3JtUmVnaXN0ZXJzIHJlZ2lzdGVyczsKQEAgLTM2MiwxMSArMzU2LDkg
QEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiwgU2Vjb25kcyYgc3RhY2tUcmFjZVByb2MKICAgICAgICAgICAgIC8vIEZJWE1FOiBMZXRzIGhh
dmUgYSB3YXkgb2YgZGV0ZWN0aW5nIHdoZW4gd2UncmUgcGFyc2luZyBjb2RlLgogICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc2MQogICAg
ICAgICAgICAgaWYgKEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigpLmlzVmFsaWRFeGVj
dXRhYmxlTWVtb3J5KGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIsIG1hY2hpbmVQQykpIHsKLSAg
ICAgICAgICAgICAgICBpZiAobV92bS5pc0V4ZWN1dGluZ0luUmVnRXhwSklUKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSdyZSBleGVjdXRpbmcgYSByZWdleHAuIExldHMgZ2F0
aGVyIG1vcmUgaW50ZXJzdGluZyBkYXRhLgotICAgICAgICAgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNzI5CisgICAgICAgICAgICAgICAg
cmVnRXhwID0gbV92bS5leGVjdXRpbmdSZWdFeHBKSVQ7CisgICAgICAgICAgICAgICAgaWYgKHJl
Z0V4cCkKICAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lID0gbV92bS50b3BDYWxsRnJhbWU7
IC8vIFdlIG5lZWQgdG8gZG8gdGhpcyBvciBlbHNlIHdlJ2QgZmFpbCBvdXIgYmFja3RyYWNlIHZh
bGlkYXRpb24gYi9jIHRoaXMgaXNuJ3QgYSBKUyBmcmFtZS4KLSAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9IGVsc2UgaWYgKExMSW50Ojppc0xMSW50UEMobWFjaGluZVBDKSkgewogICAg
ICAgICAgICAgICAgIHRvcEZyYW1lSXNMTEludCA9IHRydWU7CiAgICAgICAgICAgICAgICAgLy8g
V2UncmUgb2theSB0byB0YWtlIGEgbm9ybWFsIHN0YWNrIHRyYWNlIHdoZW4gdGhlIFBDCkBAIC00
MDcsMTYgKzM5OSwxNiBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRha2VTYW1wbGUoY29uc3Qg
QWJzdHJhY3RMb2NrZXImLCBTZWNvbmRzJiBzdGFja1RyYWNlUHJvYwogICAgICAgICAgICAgICAg
ICAgICBzdGFja1RyYWNlLnVuY2hlY2tlZEFwcGVuZChmcmFtZSk7CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgbV91bnByb2Nlc3NlZFN0YWNrVHJhY2VzLmFwcGVuZChVbnBy
b2Nlc3NlZFN0YWNrVHJhY2UgeyBub3dUaW1lLCBtYWNoaW5lUEMsIHRvcEZyYW1lSXNMTEludCwg
bGxpbnRQQywgV1RGTW92ZShzdGFja1RyYWNlKSB9KTsKKyAgICAgICAgICAgICAgICBtX3VucHJv
Y2Vzc2VkU3RhY2tUcmFjZXMuYXBwZW5kKFVucHJvY2Vzc2VkU3RhY2tUcmFjZSB7IG5vd1RpbWUs
IG1hY2hpbmVQQywgdG9wRnJhbWVJc0xMSW50LCBsbGludFBDLCByZWdFeHAsIFdURk1vdmUoc3Rh
Y2tUcmFjZSkgfSk7CiAKICAgICAgICAgICAgICAgICBpZiAoZGlkUnVuT3V0T2ZWZWN0b3JTcGFj
ZSkKICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50RnJhbWVzLmdyb3cobV9jdXJyZW50RnJh
bWVzLnNpemUoKSAqIDEuMjUpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBhdXRvIGVu
ZFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAgICAgICAgICAgIHN0YWNrVHJhY2VQcm9j
ZXNzaW5nVGltZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7CisgICAgICAgICAgICByZXR1cm4gTW9u
b3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRpbWU7CiAgICAgICAgIH0KICAgICB9CisgICAgcmV0
dXJuIDBfczsKIH0KIAogc3RhdGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgdHJ5R2V0Qnl0ZWNv
ZGVJbmRleCh1bnNpZ25lZCBsbGludFBDLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgYm9vbCYgaXNW
YWxpZCkKQEAgLTU3MSwzNiArNTYzLDQ0IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vz
c1VudmVyaWZpZWRTdGFja1RyYWNlcygpCiAgICAgICAgIC8vIFByZXBlbmQgdGhlIHRvcC1tb3N0
IGlubGluZWQgZnJhbWUgaWYgbmVlZGVkIGFuZCBnYXRoZXIKICAgICAgICAgLy8gbG9jYXRpb24g
aW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdGhlIHRvcCBmcmFtZSBpcyBleGVjdXRpbmcuCiAgICAg
ICAgIHNpemVfdCBzdGFydEluZGV4ID0gMDsKLSAgICAgICAgaWYgKHVucHJvY2Vzc2VkU3RhY2tU
cmFjZS5mcmFtZXMuc2l6ZSgpICYmICEhdW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lc1swXS52
ZXJpZmllZENvZGVCbG9jaykgewotICAgICAgICAgICAgQ29kZUJsb2NrKiB0b3BDb2RlQmxvY2sg
PSB1bnByb2Nlc3NlZFN0YWNrVHJhY2UuZnJhbWVzWzBdLnZlcmlmaWVkQ29kZUJsb2NrOwotICAg
ICAgICAgICAgaWYgKHVucHJvY2Vzc2VkU3RhY2tUcmFjZS50b3BGcmFtZUlzTExJbnQpIHsKLSAg
ICAgICAgICAgICAgICAvLyBXZSByZXVzZSBMTEludCBDb2RlQmxvY2tzIGZvciB0aGUgYmFzZWxp
bmUgSklULCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBib3RoIGppdCB0eXBlcy4KLSAgICAgICAg
ICAgICAgICAvLyBUaGlzIG1pZ2h0IGFsc28gYmUgZmFsc2UgZm9yIHZhcmlvdXMgcmVhc29ucyAo
a25vd24gYW5kIHVua25vd24pLCBldmVuIHRob3VnaAotICAgICAgICAgICAgICAgIC8vIGl0J3Mg
c3VwZXIgdW5saWtlbHkuIE9uZSByZWFzb24gdGhhdCB0aGlzIGNhbiBiZSBmYWxzZSBpcyB3aGVu
IHdlIHRocm93IGZyb20gYSBERkcgZnJhbWUsCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlIGVu
ZCB1cCBoYXZpbmcgdG8gdW53aW5kIHBhc3QgYW4gRW50cnlGcmFtZSwgd2Ugd2lsbCBlbmQgdXAg
ZXhlY3V0aW5nCi0gICAgICAgICAgICAgICAgLy8gaW5zaWRlIHRoZSBMTEludCdzIGhhbmRsZVVu
Y2F1Z2h0RXhjZXB0aW9uLiBTbyB3ZSBqdXN0IHByb3RlY3QgYWdhaW5zdCB0aGlzCi0gICAgICAg
ICAgICAgICAgLy8gYnkgaWdub3JpbmcgaXQuCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKHRvcENvZGVCbG9jay0+aml0VHlw
ZSgpID09IEpJVENvZGU6OkludGVycHJldGVyVGh1bmsgfHwgdG9wQ29kZUJsb2NrLT5qaXRUeXBl
KCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBp
c1ZhbGlkUEM7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJpdHM7CisgICAgICAgIGlm
ICghdW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IGF1dG8mIHRvcEZyYW1lID0gdW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lc1swXTsKKyAgICAg
ICAgICAgIGlmICghIXRvcEZyYW1lLnZlcmlmaWVkQ29kZUJsb2NrKSB7CisgICAgICAgICAgICAg
ICAgQ29kZUJsb2NrKiB0b3BDb2RlQmxvY2sgPSB0b3BGcmFtZS52ZXJpZmllZENvZGVCbG9jazsK
KyAgICAgICAgICAgICAgICBpZiAodW5wcm9jZXNzZWRTdGFja1RyYWNlLnRvcEZyYW1lSXNMTElu
dCkgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSByZXVzZSBMTEludCBDb2RlQmxvY2tzIGZv
ciB0aGUgYmFzZWxpbmUgSklULCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBib3RoIGppdCB0eXBl
cy4KKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBhbHNvIGJlIGZhbHNlIGZvciB2
YXJpb3VzIHJlYXNvbnMgKGtub3duIGFuZCB1bmtub3duKSwgZXZlbiB0aG91Z2gKKyAgICAgICAg
ICAgICAgICAgICAgLy8gaXQncyBzdXBlciB1bmxpa2VseS4gT25lIHJlYXNvbiB0aGF0IHRoaXMg
Y2FuIGJlIGZhbHNlIGlzIHdoZW4gd2UgdGhyb3cgZnJvbSBhIERGRyBmcmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgLy8gYW5kIHdlIGVuZCB1cCBoYXZpbmcgdG8gdW53aW5kIHBhc3QgYW4gRW50
cnlGcmFtZSwgd2Ugd2lsbCBlbmQgdXAgZXhlY3V0aW5nCisgICAgICAgICAgICAgICAgICAgIC8v
IGluc2lkZSB0aGUgTExJbnQncyBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbi4gU28gd2UganVzdCBw
cm90ZWN0IGFnYWluc3QgdGhpcworICAgICAgICAgICAgICAgICAgICAvLyBieSBpZ25vcmluZyBp
dC4KKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IDA7CisgICAg
ICAgICAgICAgICAgICAgIGlmICh0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpJ
bnRlcnByZXRlclRodW5rIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkJh
c2VsaW5lSklUKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzVmFsaWRQQzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJpdHM7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgICAgICAgICAgICAgYml0cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pih1bnByb2Nlc3NlZFN0YWNrVHJhY2UubGxpbnRQQykpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYml0cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihiaXR3aXNlX2Nh
c3Q8dWludHB0cl90Pih1bnByb2Nlc3NlZFN0YWNrVHJhY2UubGxpbnRQQykpOwogI2Vsc2UKLSAg
ICAgICAgICAgICAgICAgICAgYml0cyA9IGJpdHdpc2VfY2FzdDx1bnNpZ25lZD4odW5wcm9jZXNz
ZWRTdGFja1RyYWNlLmxsaW50UEMpOworICAgICAgICAgICAgICAgICAgICAgICAgYml0cyA9IGJp
dHdpc2VfY2FzdDx1bnNpZ25lZD4odW5wcm9jZXNzZWRTdGFja1RyYWNlLmxsaW50UEMpOwogI2Vu
ZGlmCi0gICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSB0cnlHZXRCeXRlY29kZUlu
ZGV4KGJpdHMsIHRvcENvZGVCbG9jaywgaXNWYWxpZFBDKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJ5dGVjb2RlSW5kZXggPSB0cnlHZXRCeXRlY29kZUluZGV4KGJpdHMsIHRvcENvZGVCbG9j
aywgaXNWYWxpZFBDKTsKIAotICAgICAgICAgICAgICAgICAgICBVTlVTRURfUEFSQU0oaXNWYWxp
ZFBDKTsgLy8gRklYTUU6IGRvIHNvbWV0aGluZyB3aXRoIHRoaXMgaW5mbyBmb3IgdGhlIHdlYiBp
bnNwZWN0b3I6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM0NTUK
KyAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpc1ZhbGlkUEMpOyAvLyBGSVhN
RTogZG8gc29tZXRoaW5nIHdpdGggdGhpcyBpbmZvIGZvciB0aGUgd2ViIGluc3BlY3RvcjogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzQ1NQogCi0gICAgICAgICAg
ICAgICAgICAgIGFwcGVuZENvZGVCbG9jayh0b3BDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwot
ICAgICAgICAgICAgICAgICAgICBzdG9yZUNhbGxlZUludG9MYXN0RnJhbWUodW5wcm9jZXNzZWRT
dGFja1RyYWNlLmZyYW1lc1swXS51bnZlcmlmaWVkQ2FsbGVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZENvZGVCbG9jayh0b3BDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgc3RvcmVDYWxsZWVJbnRvTGFzdEZyYW1lKHRvcEZyYW1lLnVu
dmVyaWZpZWRDYWxsZWUpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IDE7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0ZDo6
b3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IHRvcENvZGVCbG9jay0+ZmluZFBDKHVu
cHJvY2Vzc2VkU3RhY2tUcmFjZS50b3BQQykpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5k
Q29kZU9yaWdpbih0b3BDb2RlQmxvY2ssICpjb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RvcmVDYWxsZWVJbnRvTGFzdEZyYW1lKHRvcEZyYW1lLnVudmVyaWZpZWRDYWxsZWUpOwog
ICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gMTsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdp
biA9IHRvcENvZGVCbG9jay0+ZmluZFBDKHVucHJvY2Vzc2VkU3RhY2tUcmFjZS50b3BQQykpIHsK
LSAgICAgICAgICAgICAgICBhcHBlbmRDb2RlT3JpZ2luKHRvcENvZGVCbG9jaywgKmNvZGVPcmln
aW4pOwotICAgICAgICAgICAgICAgIHN0b3JlQ2FsbGVlSW50b0xhc3RGcmFtZSh1bnByb2Nlc3Nl
ZFN0YWNrVHJhY2UuZnJhbWVzWzBdLnVudmVyaWZpZWRDYWxsZWUpOwotICAgICAgICAgICAgICAg
IHN0YXJ0SW5kZXggPSAxOworICAgICAgICAgICAgfSBlbHNlIGlmICh1bnByb2Nlc3NlZFN0YWNr
VHJhY2UucmVnRXhwKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kRW1wdHlGcmFtZSgpOworICAg
ICAgICAgICAgICAgIHN0YWNrVHJhY2UuZnJhbWVzLmxhc3QoKS5yZWdFeHAgPSB1bnByb2Nlc3Nl
ZFN0YWNrVHJhY2UucmVnRXhwOworICAgICAgICAgICAgICAgIHN0YWNrVHJhY2UuZnJhbWVzLmxh
c3QoKS5mcmFtZVR5cGUgPSBGcmFtZVR5cGU6OlJlZ0V4cDsKKyAgICAgICAgICAgICAgICBtX2xp
dmVDZWxsUG9pbnRlcnMuYWRkKHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5yZWdFeHApOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKQEAgLTcxMiw4ICs3MTIsMTEgQEAgdm9pZCBTYW1wbGluZ1By
b2ZpbGVyOjpjbGVhckRhdGEoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogCiBTdHJpbmcgU2FtcGxp
bmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6bmFtZUZyb21DYWxsZWUoVk0mIHZtKQogewotICAgIGlm
ICghY2FsbGVlKQorICAgIGlmICghY2FsbGVlKSB7CisgICAgICAgIGlmIChyZWdFeHApCisgICAg
ICAgICAgICByZXR1cm4gcmVnRXhwLT50b1NvdXJjZVN0cmluZygpOwogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgfQogCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUo
dm0pOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKQEAgLTc0Nyw3ICs3NTAsNyBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3Rh
Y2tGcmFtZTo6ZGlzcGxheU5hbWUoVk0mIHZtKQogICAgICAgICAgICAgcmV0dXJuIG5hbWU7CiAg
ICAgfQogCi0gICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OlVua25vd24gfHwgZnJhbWVU
eXBlID09IEZyYW1lVHlwZTo6QykgeworICAgIGlmIChmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpV
bmtub3duIHx8IGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OkMgfHwgZnJhbWVUeXBlID09IEZyYW1l
VHlwZTo6UmVnRXhwKSB7CiAjaWYgSEFWRShETEFERFIpCiAgICAgICAgIGlmIChmcmFtZVR5cGUg
PT0gRnJhbWVUeXBlOjpDKSB7CiAgICAgICAgICAgICBhdXRvIGRlbWFuZ2xlZCA9IFdURjo6U3Rh
Y2tUcmFjZTo6ZGVtYW5nbGUoY0NvZGVQQyk7CkBAIC03ODMsNyArNzg2LDcgQEAgU3RyaW5nIFNh
bXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OmRpc3BsYXlOYW1lRm9ySlNPTlRlc3RzKFZNJiB2
bSkKICAgICAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KIAotICAgIGlmIChmcmFtZVR5cGUg
PT0gRnJhbWVUeXBlOjpVbmtub3duIHx8IGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OkMpCisgICAg
aWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OlVua25vd24gfHwgZnJhbWVUeXBlID09IEZyYW1l
VHlwZTo6QyB8fCBmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpSZWdFeHApCiAgICAgICAgIHJldHVy
biBBU0NJSUxpdGVyYWwoIih1bmtub3duKSIpOwogICAgIGlmIChmcmFtZVR5cGUgPT0gRnJhbWVU
eXBlOjpIb3N0KQogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCIoaG9zdCkiKTsKQEAgLTgx
MCw0OCArODEzLDc5IEBAIFN0cmluZyBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpkaXNw
bGF5TmFtZUZvckpTT05UZXN0cyhWTSYgdm0pCiAKIGludCBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFj
a0ZyYW1lOjpmdW5jdGlvblN0YXJ0TGluZSgpCiB7Ci0gICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFt
ZVR5cGU6OlVua25vd24gfHwgZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6SG9zdCB8fCBmcmFtZVR5
cGUgPT0gRnJhbWVUeXBlOjpDKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBpZiAoZXhlY3V0
YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICBzd2l0Y2ggKGZyYW1lVHlwZSkgeworICAgIGNh
c2UgRnJhbWVUeXBlOjpFeGVjdXRhYmxlOgorICAgICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0
RnVuY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFNjcmlwdEV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Zmlyc3RMaW5lKCk7CisKKyAg
ICBjYXNlIEZyYW1lVHlwZTo6SG9zdDoKKyAgICBjYXNlIEZyYW1lVHlwZTo6UmVnRXhwOgorICAg
IGNhc2UgRnJhbWVUeXBlOjpDOgorICAgIGNhc2UgRnJhbWVUeXBlOjpVbmtub3duOgogICAgICAg
ICByZXR1cm4gLTE7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFNjcmlwdEV4ZWN1dGFibGUqPihl
eGVjdXRhYmxlKS0+Zmlyc3RMaW5lKCk7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiAtMTsKIH0KIAogdW5zaWduZWQgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tG
cmFtZTo6ZnVuY3Rpb25TdGFydENvbHVtbigpCiB7Ci0gICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFt
ZVR5cGU6OlVua25vd24gfHwgZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6SG9zdCB8fCBmcmFtZVR5
cGUgPT0gRnJhbWVUeXBlOjpDKQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpOwotCi0gICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkp
CisgICAgc3dpdGNoIChmcmFtZVR5cGUpIHsKKyAgICBjYXNlIEZyYW1lVHlwZTo6RXhlY3V0YWJs
ZToKKyAgICAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5zdGFydENv
bHVtbigpOworCisgICAgY2FzZSBGcmFtZVR5cGU6Okhvc3Q6CisgICAgY2FzZSBGcmFtZVR5cGU6
OlJlZ0V4cDoKKyAgICBjYXNlIEZyYW1lVHlwZTo6QzoKKyAgICBjYXNlIEZyYW1lVHlwZTo6VW5r
bm93bjoKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4oZXhlY3V0YWJs
ZSktPnN0YXJ0Q29sdW1uKCk7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiB9CiAKIGludHB0
cl90IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnNvdXJjZUlEKCkKIHsKLSAgICBpZiAo
ZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6VW5rbm93biB8fCBmcmFtZVR5cGUgPT0gRnJhbWVUeXBl
OjpIb3N0IHx8IGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OkMpCi0gICAgICAgIHJldHVybiAtMTsK
LQotICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQorICAgIHN3aXRjaCAoZnJh
bWVUeXBlKSB7CisgICAgY2FzZSBGcmFtZVR5cGU6OkV4ZWN1dGFibGU6CisgICAgICAgIGlmIChl
eGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5z
b3VyY2VJRCgpOworCisgICAgY2FzZSBGcmFtZVR5cGU6Okhvc3Q6CisgICAgY2FzZSBGcmFtZVR5
cGU6OlJlZ0V4cDoKKyAgICBjYXNlIEZyYW1lVHlwZTo6QzoKKyAgICBjYXNlIEZyYW1lVHlwZTo6
VW5rbm93bjoKICAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFNj
cmlwdEV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+c291cmNlSUQoKTsKKyAgICB9CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIC0xOwogfQogCiBTdHJpbmcgU2FtcGxpbmdQ
cm9maWxlcjo6U3RhY2tGcmFtZTo6dXJsKCkKIHsKLSAgICBpZiAoZnJhbWVUeXBlID09IEZyYW1l
VHlwZTo6VW5rbm93biB8fCBmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpIb3N0IHx8IGZyYW1lVHlw
ZSA9PSBGcmFtZVR5cGU6OkMpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgIHN3
aXRjaCAoZnJhbWVUeXBlKSB7CisgICAgY2FzZSBGcmFtZVR5cGU6OkV4ZWN1dGFibGU6IHsKKyAg
ICAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKKworICAgICAgICBTdHJpbmcgdXJsID0gc3RhdGljX2Nhc3Q8U2Ny
aXB0RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5zb3VyY2VVUkwoKTsKKyAgICAgICAgaWYgKHVy
bC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0
YWJsZSo+KGV4ZWN1dGFibGUpLT5zb3VyY2UoKS5wcm92aWRlcigpLT5zb3VyY2VVUkwoKTsgLy8g
RmFsbCBiYWNrIHRvIHNvdXJjZVVSTCBkaXJlY3RpdmUuCisgICAgICAgIHJldHVybiB1cmw7Cisg
ICAgfQogCi0gICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgY2FzZSBG
cmFtZVR5cGU6Okhvc3Q6CisgICAgY2FzZSBGcmFtZVR5cGU6OlJlZ0V4cDoKKyAgICBjYXNlIEZy
YW1lVHlwZTo6QzoKKyAgICBjYXNlIEZyYW1lVHlwZTo6VW5rbm93bjoKICAgICAgICAgcmV0dXJu
IGVtcHR5U3RyaW5nKCk7Ci0KLSAgICBTdHJpbmcgdXJsID0gc3RhdGljX2Nhc3Q8U2NyaXB0RXhl
Y3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5zb3VyY2VVUkwoKTsKLSAgICBpZiAodXJsLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNjcmlwdEV4ZWN1dGFibGUqPihleGVjdXRh
YmxlKS0+c291cmNlKCkucHJvdmlkZXIoKS0+c291cmNlVVJMKCk7IC8vIEZhbGwgYmFjayB0byBz
b3VyY2VVUkwgZGlyZWN0aXZlLgotICAgIHJldHVybiB1cmw7CisgICAgfQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogfQogCiBWZWN0b3I8U2Ft
cGxpbmdQcm9maWxlcjo6U3RhY2tUcmFjZT4gU2FtcGxpbmdQcm9maWxlcjo6cmVsZWFzZVN0YWNr
VHJhY2VzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCkBAIC0xMDgwLDYgKzExMTQsOSBA
QCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgU2FtcGxpbmdQcm9maWxlcjo6
RnJhbWVUeXBlIGZyYW1lVHlwZSkKICAgICBjYXNlIFNhbXBsaW5nUHJvZmlsZXI6OkZyYW1lVHlw
ZTo6SG9zdDoKICAgICAgICAgb3V0LnByaW50KCJIb3N0Iik7CiAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU2FtcGxpbmdQcm9maWxlcjo6RnJhbWVUeXBlOjpSZWdFeHA6CisgICAgICAgIG91dC5w
cmludCgiUmVnRXhwIik7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2FtcGxpbmdQcm9maWxl
cjo6RnJhbWVUeXBlOjpDOgogICAgIGNhc2UgU2FtcGxpbmdQcm9maWxlcjo6RnJhbWVUeXBlOjpV
bmtub3duOgogICAgICAgICBvdXQucHJpbnQoIlVua25vd24iKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAppbmRleCA3ZDkxYWQ0OGU1MmQ1
Mjc2MjlhYzQzZmExOTk4Zjc5OGJiY2E5NDFjLi4xMjAwMGYwMTgwYzhiOWJlYmNhNDMzNmNhMDI3
YTQ2NTAyOTk1MWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
YW1wbGluZ1Byb2ZpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Ft
cGxpbmdQcm9maWxlci5oCkBAIC0zOSw2ICszOSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitj
bGFzcyBSZWdFeHA7CiBjbGFzcyBWTTsKIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwogCkBAIC02OCw2
ICs2OSw3IEBAIGNsYXNzIFNhbXBsaW5nUHJvZmlsZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8U2FtcGxpbmdQcm9maWxlcj4gewogICAgIGVudW0gY2xhc3MgRnJhbWVUeXBlIHsgCiAg
ICAgICAgIEV4ZWN1dGFibGUsCiAgICAgICAgIEhvc3QsCisgICAgICAgIFJlZ0V4cCwKICAgICAg
ICAgQywKICAgICAgICAgVW5rbm93bgogICAgIH07CkBAIC04NSw2ICs4Nyw3IEBAIGNsYXNzIFNh
bXBsaW5nUHJvZmlsZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2FtcGxpbmdQcm9m
aWxlcj4gewogICAgICAgICB2b2lkKiBjQ29kZVBDIHsgbnVsbHB0ciB9OwogICAgICAgICBFeGVj
dXRhYmxlQmFzZSogZXhlY3V0YWJsZSB7IG51bGxwdHIgfTsKICAgICAgICAgSlNPYmplY3QqIGNh
bGxlZSB7IG51bGxwdHIgfTsKKyAgICAgICAgUmVnRXhwKiByZWdFeHAgeyBudWxscHRyIH07CiAK
ICAgICAgICAgc3RydWN0IENvZGVMb2NhdGlvbiB7CiAgICAgICAgICAgICBib29sIGhhc0NvZGVC
bG9ja0hhc2goKSBjb25zdApAQCAtMTQxLDYgKzE0NCw3IEBAIGNsYXNzIFNhbXBsaW5nUHJvZmls
ZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2FtcGxpbmdQcm9maWxlcj4gewogICAg
ICAgICB2b2lkKiB0b3BQQzsKICAgICAgICAgYm9vbCB0b3BGcmFtZUlzTExJbnQ7CiAgICAgICAg
IHZvaWQqIGxsaW50UEM7CisgICAgICAgIFJlZ0V4cCogcmVnRXhwOwogICAgICAgICBWZWN0b3I8
VW5wcm9jZXNzZWRTdGFja0ZyYW1lPiBmcmFtZXM7CiAgICAgfTsKIApAQCAtMTU2LDcgKzE2MCw3
IEBAIGNsYXNzIFNhbXBsaW5nUHJvZmlsZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
U2FtcGxpbmdQcm9maWxlcj4gewogICAgIH07CiAKICAgICBTYW1wbGluZ1Byb2ZpbGVyKFZNJiwg
UmVmUHRyPFN0b3B3YXRjaD4mJik7Ci0gICAgflNhbXBsaW5nUHJvZmlsZXIoKTsKKyAgICB+U2Ft
cGxpbmdQcm9maWxlcigpID0gZGVmYXVsdDsKICAgICB2b2lkIG5vdGljZUpTTG9ja0FjcXVpc2l0
aW9uKCk7CiAgICAgdm9pZCBub3RpY2VWTUVudHJ5KCk7CiAgICAgdm9pZCBzaHV0ZG93bigpOwpA
QCAtMTg1LDcgKzE4OSw3IEBAIGNsYXNzIFNhbXBsaW5nUHJvZmlsZXIgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8U2FtcGxpbmdQcm9maWxlcj4gewogcHJpdmF0ZToKICAgICB2b2lkIGNy
ZWF0ZVRocmVhZElmTmVjZXNzYXJ5KGNvbnN0IEFic3RyYWN0TG9ja2VyJik7CiAgICAgdm9pZCB0
aW1lckxvb3AoKTsKLSAgICB2b2lkIHRha2VTYW1wbGUoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBT
ZWNvbmRzJiBzdGFja1RyYWNlUHJvY2Vzc2luZ1RpbWUpOworICAgIFNlY29uZHMgdGFrZVNhbXBs
ZShjb25zdCBBYnN0cmFjdExvY2tlciYpOwogCiAgICAgVk0mIG1fdm07CiAgICAgV2Vha1JhbmRv
bSBtX3dlYWtSYW5kb207CkBAIC0xOTcsOCArMjAxLDggQEAgY2xhc3MgU2FtcGxpbmdQcm9maWxl
ciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTYW1wbGluZ1Byb2ZpbGVyPiB7CiAgICAg
TG9jayBtX2xvY2s7CiAgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAgUmVmUHRyPFRo
cmVhZD4gbV9qc2NFeGVjdXRpb25UaHJlYWQ7Ci0gICAgYm9vbCBtX2lzUGF1c2VkOwotICAgIGJv
b2wgbV9pc1NodXREb3duOworICAgIGJvb2wgbV9pc1BhdXNlZCB7IGZhbHNlIH07CisgICAgYm9v
bCBtX2lzU2h1dERvd24geyBmYWxzZSB9OwogICAgIGJvb2wgbV9uZWVkc1JlcG9ydEF0RXhpdCB7
IGZhbHNlIH07CiAgICAgSGFzaFNldDxKU0NlbGwqPiBtX2xpdmVDZWxsUG9pbnRlcnM7CiAgICAg
VmVjdG9yPFVucHJvY2Vzc2VkU3RhY2tGcmFtZT4gbV9jdXJyZW50RnJhbWVzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggYzI5MDczZDIwOGE1ZDYyOTljNDdhOTYyMTBmODg5MTZm
Mjk1N2ExNS4uZjFlM2RjMDIzZGY3Y2ZlMzZmNTJkY2FjYzQzZjk3Nzk0OGE3NGE2MiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0xMTcsNiArMTE3LDcgQEAgY2xhc3MgSlNXZWJB
c3NlbWJseUluc3RhbmNlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTmF0
aXZlRXhlY3V0YWJsZTsKIGNsYXNzIFByb21pc2VEZWZlcnJlZFRpbWVyOworY2xhc3MgUmVnRXhw
OwogY2xhc3MgUmVnRXhwQ2FjaGU7CiBjbGFzcyBSZWdpc3RlcjsKIGNsYXNzIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0OwpAQCAtNTk1LDcgKzU5Niw3IEBAIGNsYXNzIFZNIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiAgICAg
SW5zdHJ1Y3Rpb24qIHRhcmdldEludGVycHJldGVyUENGb3JUaHJvdzsKICAgICB1aW50MzJfdCBv
c3JFeGl0SW5kZXg7CiAgICAgdm9pZCogb3NyRXhpdEp1bXBEZXN0aW5hdGlvbjsKLSAgICBib29s
IGlzRXhlY3V0aW5nSW5SZWdFeHBKSVQgeyBmYWxzZSB9OworICAgIFJlZ0V4cCogZXhlY3V0aW5n
UmVnRXhwSklUIHsgbnVsbHB0ciB9OwogCiAgICAgLy8gVGhlIHRocmVhZGluZyBwcm90b2NvbCBo
ZXJlIGlzIGFzIGZvbGxvd3M6CiAgICAgLy8gLSBZb3UgY2FuIGNhbGwgc2NyYXRjaEJ1ZmZlckZv
clNpemUgZnJvbSBhbnkgdGhyZWFkLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3lhcnIvWWFyckpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNw
cAppbmRleCAwM2ZjMDZkZDdkZmEyM2YzMjU0ZjNmNDI1ODZiOGY1YzU2NmU1MzQ3Li5lY2Y1YTM2
MWFmZWNjNzVkNmY1OGYzYmMyYWQzMjVhMmRlNzY2MTVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
eWFyci9ZYXJySklULmNwcApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPHd0Zi9BU0NJSUNU
eXBlLmg+CiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNp
bmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIllhcnIuaCIKICNpbmNsdWRlICJZYXJyQ2Fub25pY2Fs
aXplLmgiCiAKQEAgLTQxLDcgKzQwLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBZYXJy
IHsKIAogdGVtcGxhdGU8WWFyckpJVENvbXBpbGVNb2RlIGNvbXBpbGVNb2RlPgogY2xhc3MgWWFy
ckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewotICAgIGZyaWVuZCB2b2lkIGpp
dENvbXBpbGUoVk0qLCBZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QsIGNvbnN0IFN0cmluZyYgcGF0
dGVybiwgdW5zaWduZWQmIG51bVN1YnBhdHRlcm5zLCBjb25zdCBjaGFyKiYgZXJyb3IsIGJvb2wg
aWdub3JlQ2FzZSwgYm9vbCBtdWx0aWxpbmUpOworICAgIGZyaWVuZCB2b2lkIGppdENvbXBpbGUo
WWFyckNvZGVCbG9jayYgaml0T2JqZWN0LCBjb25zdCBTdHJpbmcmIHBhdHRlcm4sIHVuc2lnbmVk
JiBudW1TdWJwYXR0ZXJucywgY29uc3QgY2hhciomIGVycm9yLCBib29sIGlnbm9yZUNhc2UsIGJv
b2wgbXVsdGlsaW5lKTsKIAogI2lmIENQVShBUk0pCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVy
SUQgaW5wdXQgPSBBUk1SZWdpc3RlcnM6OnIwOwpAQCAtMzMzOSwxNCArMzMzOCwxMCBAQCBjbGFz
cyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAjZWxpZiBDUFUoTUlQ
UykKICAgICAgICAgLy8gRG8gbm90aGluZy4KICNlbmRpZgotCi0gICAgICAgIHN0b3JlOChUcnVz
dGVkSW1tMzIoMSksICZtX3ZtLT5pc0V4ZWN1dGluZ0luUmVnRXhwSklUKTsKICAgICB9CiAKICAg
ICB2b2lkIGdlbmVyYXRlUmV0dXJuKCkKICAgICB7Ci0gICAgICAgIHN0b3JlOChUcnVzdGVkSW1t
MzIoMCksICZtX3ZtLT5pc0V4ZWN1dGluZ0luUmVnRXhwSklUKTsKLQogI2lmIENQVShYODZfNjQp
CiAjaWYgT1MoV0lORE9XUykKICAgICAgICAgLy8gU3RvcmUgdGhlIHJldHVybiB2YWx1ZSBpbiB0
aGUgYWxsb2NhdGVkIHNwYWNlIHBvaW50ZWQgYnkgcmN4LgpAQCAtMzM5Myw5ICszMzg4LDggQEAg
Y2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgIH0KIAog
cHVibGljOgotICAgIFlhcnJHZW5lcmF0b3IoVk0qIHZtLCBZYXJyUGF0dGVybiYgcGF0dGVybiwg
WWFyckNoYXJTaXplIGNoYXJTaXplKQotICAgICAgICA6IG1fdm0odm0pCi0gICAgICAgICwgbV9w
YXR0ZXJuKHBhdHRlcm4pCisgICAgWWFyckdlbmVyYXRvcihZYXJyUGF0dGVybiYgcGF0dGVybiwg
WWFyckNoYXJTaXplIGNoYXJTaXplKQorICAgICAgICA6IG1fcGF0dGVybihwYXR0ZXJuKQogICAg
ICAgICAsIG1fY2hhclNpemUoY2hhclNpemUpCiAgICAgICAgICwgbV9zaG91bGRGYWxsQmFjayhm
YWxzZSkKICAgICAgICAgLCBtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKG1fY2hhclNpemUgPT0gQ2hh
cjE2ICYmIG1fcGF0dGVybi51bmljb2RlKCkpCkBAIC0zNDk3LDggKzM0OTEsNiBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgfQogCiBwcml2YXRl
OgotICAgIFZNKiBtX3ZtOwotCiAgICAgWWFyclBhdHRlcm4mIG1fcGF0dGVybjsKIAogICAgIFlh
cnJDaGFyU2l6ZSBtX2NoYXJTaXplOwpAQCAtMzUzOCwxMiArMzUzMCwxMiBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgQmFja3RyYWNraW5nU3Rh
dGUgbV9iYWNrdHJhY2tpbmdTdGF0ZTsKIH07CiAKLXZvaWQgaml0Q29tcGlsZShZYXJyUGF0dGVy
biYgcGF0dGVybiwgWWFyckNoYXJTaXplIGNoYXJTaXplLCBWTSogdm0sIFlhcnJDb2RlQmxvY2sm
IGppdE9iamVjdCwgWWFyckpJVENvbXBpbGVNb2RlIG1vZGUpCit2b2lkIGppdENvbXBpbGUoWWFy
clBhdHRlcm4mIHBhdHRlcm4sIFlhcnJDaGFyU2l6ZSBjaGFyU2l6ZSwgWWFyckNvZGVCbG9jayYg
aml0T2JqZWN0LCBZYXJySklUQ29tcGlsZU1vZGUgbW9kZSkKIHsKICAgICBpZiAobW9kZSA9PSBN
YXRjaE9ubHkpCi0gICAgICAgIFlhcnJHZW5lcmF0b3I8TWF0Y2hPbmx5Pih2bSwgcGF0dGVybiwg
Y2hhclNpemUpLmNvbXBpbGUoaml0T2JqZWN0KTsKKyAgICAgICAgWWFyckdlbmVyYXRvcjxNYXRj
aE9ubHk+KHBhdHRlcm4sIGNoYXJTaXplKS5jb21waWxlKGppdE9iamVjdCk7CiAgICAgZWxzZQot
ICAgICAgICBZYXJyR2VuZXJhdG9yPEluY2x1ZGVTdWJwYXR0ZXJucz4odm0sIHBhdHRlcm4sIGNo
YXJTaXplKS5jb21waWxlKGppdE9iamVjdCk7CisgICAgICAgIFlhcnJHZW5lcmF0b3I8SW5jbHVk
ZVN1YnBhdHRlcm5zPihwYXR0ZXJuLCBjaGFyU2l6ZSkuY29tcGlsZShqaXRPYmplY3QpOwogfQog
CiB9fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCmluZGV4IGFkNTUwMGYwZDhjM2Q2
Njc4ZGI4ZmE5YzlmOTViMTJhZjM5MTkyNjQuLjg0M2NlZTkwN2E2NDcwZjFhY2QwNzU3N2RlMDEw
OGE2NzRkZDJlZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJK
SVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgKQEAgLTQ1LDcg
KzQ1LDYgQEAgY29uc3RleHByIHNpemVfdCBwYXR0ZXJuQ29udGV4dEJ1ZmZlclNpemUgPSA4MTky
OyAvLyBTcGFjZSBjYWxsZXIgYWxsb2NhdGVzIHRvIHMKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNs
YXNzIFZNOwogY2xhc3MgRXhlY3V0YWJsZVBvb2w7CiAKIG5hbWVzcGFjZSBZYXJyIHsKQEAgLTIw
Myw3ICsyMDIsNyBAQCBlbnVtIFlhcnJKSVRDb21waWxlTW9kZSB7CiAgICAgTWF0Y2hPbmx5LAog
ICAgIEluY2x1ZGVTdWJwYXR0ZXJucwogfTsKLXZvaWQgaml0Q29tcGlsZShZYXJyUGF0dGVybiYs
IFlhcnJDaGFyU2l6ZSwgVk0qLCBZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QsIFlhcnJKSVRDb21w
aWxlTW9kZSA9IEluY2x1ZGVTdWJwYXR0ZXJucyk7Cit2b2lkIGppdENvbXBpbGUoWWFyclBhdHRl
cm4mLCBZYXJyQ2hhclNpemUsIFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCwgWWFyckpJVENvbXBp
bGVNb2RlID0gSW5jbHVkZVN1YnBhdHRlcm5zKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Ollh
cnIKIApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwpp
bmRleCBhMWRkOTkxODE3YWQ1MWY3NGU5ZmUzMjllOGRlNWY0NGY0ZjQ4ZGNiLi5iMGJjMmI5YTk1
ZDFlOWNhNjk4NDViYTYxMzRmMDNjNDZiYjQ4Nzk4IDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5n
ZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE4LTAxLTAy
ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIEpTQyBT
YW1wbGluZyBQcm9maWxlcjogRGV0ZWN0IHRlc3RlciBhbmQgdGVzdGVlIHdoZW4gc2FtcGxpbmcg
aW4gUmVnRXhwIEpJVAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUyNzI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBzdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItcmVnZXhwLmpzOiBBZGRlZC4KKyAgICAg
ICAgKHBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyLnRlc3QpOgorICAgICAgICAocGxh
dGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIuYmF6KToKKyAgICAgICAgKHBsYXRmb3JtU3Vw
cG9ydHNTYW1wbGluZ1Byb2ZpbGVyKToKKwogMjAxNy0xMi0yOCAgU2FhbSBCYXJhdGkgIDxzYmFy
YXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBBc3NlcnRpb24gdXNlZCB0byBkZXRlcm1pbmUgaWYg
c29tZXRoaW5nIGlzIGFuIGFzeW5jIGdlbmVyYXRvciBpcyB3cm9uZwpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItcmVnZXhwLmpzIGIvSlNUZXN0cy9zdHJlc3Mv
c2FtcGxpbmctcHJvZmlsZXItcmVnZXhwLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhMzk4N2MxNjQ1ODBhNzYx
NWVhMGMzODI5MTc2MmRmNDQxMjIxYmQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVz
cy9zYW1wbGluZy1wcm9maWxlci1yZWdleHAuanMKQEAgLTAsMCArMSwxOCBAQAoraWYgKHBsYXRm
b3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyKCkpIHsKKyAgICBsb2FkKCIuL3NhbXBsaW5nLXBy
b2ZpbGVyL3NhbXBsaW5nUHJvZmlsZXIuanMiKTsKKworICAgIGZ1bmN0aW9uIHRlc3QocmVnZXhw
LCBzdHJpbmcpCisgICAgeworICAgICAgICByZXR1cm4gc3RyaW5nLm1hdGNoKHJlZ2V4cCk7Cisg
ICAgfQorICAgIG5vSW5saW5lKHRlc3QpOworCisgICAgZnVuY3Rpb24gYmF6KCkgeworICAgICAg
ICB2YXIgdGV4dCA9IGBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRp
cGlzY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUg
ZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gVXQgZW5pbSBhZCBtaW5pbSB2ZW5pYW0sIHF1aXMgbm9z
dHJ1ZCBleGVyY2l0YXRpb24gdWxsYW1jbyBsYWJvcmlzIG5pc2kgdXQgYWxpcXVpcCBleCBlYSBj
b21tb2RvIGNvbnNlcXVhdC4gRHVpcyBhdXRlIGlydXJlIGRvbG9yIGluIHJlcHJlaGVuZGVyaXQg
aW4gdm9sdXB0YXRlIHZlbGl0IGVzc2UgY2lsbHVtIGRvbG9yZSBldSBmdWdpYXQgbnVsbGEgcGFy
aWF0dXIuIEV4Y2VwdGV1ciBzaW50IG9jY2FlY2F0IGN1cGlkYXRhdCBub24gcHJvaWRlbnQsIHN1
bnQgaW4gY3VscGEgcXVpIG9mZmljaWEgZGVzZXJ1bnQgbW9sbGl0IGFuaW0gaWQgZXN0IGxhYm9y
dW0uYDsKKyAgICAgICAgdmFyIHJlZ2V4cCA9IC8uKi9naTsKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAxZTU7ICsraSkKKyAgICAgICAgICAgIHRlc3QocmVnZXhwLCB0ZXh0KTsKKyAgICB9
CisKKyAgICBydW5UZXN0KGJheiwgWyIvLiovZ2kiLCAiIiwgInRlc3QiLCAiYmF6Il0pOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330369</attachid>
            <date>2018-01-03 00:35:39 -0800</date>
            <delta_ts>2018-01-28 23:28:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152729-20180103173538.patch</filename>
            <type>text/plain</type>
            <size>36814</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2MzUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZDlkOWY3MDUxNTZhYzFlYmJlMDY4MjhlODAxMmQ4M2UwNDFmNjM4Li42YWRjODk4MTdmYTg3MWRl
YTJiYjRiYTkzOTdhYjA1N2U2NWE5MWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NCBAQAorMjAxOC0wMS0wMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBKU0MgU2FtcGxpbmcgUHJvZmlsZXI6IERldGVjdCB0ZXN0ZXIgYW5k
IHRlc3RlZSB3aGVuIHNhbXBsaW5nIGluIFJlZ0V4cCBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjcyOQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZXh0ZW5kcyBTYW1wbGluZ1By
b2ZpbGVyIHRvIHJlY29nbml6ZSBKSVQgUmVnRXhwIGV4ZWN1dGlvbi4gV2UgcmVjb3JkCisgICAg
ICAgIGV4ZWN1dGluZyBSZWdFeHAgaW4gVk0gc28gdGhhdCBTYW1wbGluZ1Byb2ZpbGVyIGNhbiBk
ZXRlY3QgaXQuIFRoaXMgaXMgYmV0dGVyCisgICAgICAgIHRoYW4gdGhlIHByZXZpb3VzIFZNOjpp
c0V4ZWN1dGluZ0luUmVnRXhwSklUIGZsYWcgYXBwcm9hY2ggc2luY2UKKworICAgICAgICAxLiBp
c0V4ZWN1dGluZ0luUmVnRXhwSklUIGlzIHNldCBhZnRlciBzdGFydGluZyBleGVjdXRpbmcgSklU
IFJlZ0V4cCBjb2RlLiBUaHVzLAorICAgICAgICBpZiB3ZSBzdXNwZW5kIHRoZSB0aHJlYWQganVz
dCBiZWZvcmUgZXhlY3V0aW5nIHRoaXMgZmxhZywgb3IganVzdCBhZnRlciBjbGVhcmluZworICAg
ICAgICB0aGlzIGZsYWcsIFNhbXBsaW5nUHJvZmlsZXIgZ2V0cyBpbnZhbGlkIGZyYW1lLCBhbmQg
ZnJhbWUgdmFsaWRhdGlvbiBmYWlscy4gV2UKKyAgICAgICAgc2hvdWxkIHNldCBzdWNoIGEgZmxh
ZyBiZWZvcmUgYW5kIGFmdGVyIGV4ZWN1dGluZyBKSVQgUmVnRXhwIGNvZGUuCisKKyAgICAgICAg
Mi4gVGhpcyByZW1vdmVzIFZNIGRlcGVuZGVuY3kgZnJvbSBZYXJySklUIHdoaWNoIGlzIG5vdCBl
c3NlbnRpYWwgb25lLgorCisgICAgICAgIFdlIGFkZCBFeGVjdXRpb25Db250ZXh0IGVudW0gdG8g
UmVnRXhwOjptYXRjaElubGluZSBub3QgdG8gbWFyayBleGVjdXRpb24gaWYgaXQKKyAgICAgICAg
aXMgZG9uZSBpbiBub24gSlMgdGhyZWFkLgorCisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVE
dW1wZXIuY3BwOgorICAgICAgICAoSlNDOjpyZWdleHBOYW1lKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW1wUmVnRXhwcyk6CisgICAgICAgIChKU0M6OnJlZ2V4cFRv
U291cmNlU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAg
ICAoSlNDOjpIZWFwOjphZGRDb3JlQ29uc3RyYWludHMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVn
RXhwLmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6
UmVnRXhwOjptYXRjaCk6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6bWF0Y2hDb25jdXJyZW50bHkp
OgorICAgICAgICAoSlNDOjpSZWdFeHA6OmNvbXBpbGVNYXRjaE9ubHkpOgorICAgICAgICAoSlND
OjpSZWdFeHA6OnRvU291cmNlU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4
cC5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpS
ZWdFeHA6Om1hdGNoSW5saW5lKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJh
eS5oOgorICAgICAgICAoSlNDOjpjcmVhdGVSZWdFeHBNYXRjaGVzQXJyYXkpOgorICAgICAgICAq
IHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJv
ZmlsZXI6OlNhbXBsaW5nUHJvZmlsZXIpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVy
Ojp0aW1lckxvb3ApOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxl
KToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFj
a1RyYWNlcyk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6Om5h
bWVGcm9tQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFt
ZTo6ZGlzcGxheU5hbWUpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0Zy
YW1lOjpkaXNwbGF5TmFtZUZvckpTT05UZXN0cyk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJv
ZmlsZXI6OlN0YWNrRnJhbWU6OmZ1bmN0aW9uU3RhcnRMaW5lKToKKyAgICAgICAgKEpTQzo6U2Ft
cGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZnVuY3Rpb25TdGFydENvbHVtbik6CisgICAgICAg
IChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OnNvdXJjZUlEKToKKyAgICAgICAg
KEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6dXJsKToKKyAgICAgICAgKFdURjo6
cHJpbnRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6On5TYW1wbGlu
Z1Byb2ZpbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIu
aDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogeWFyci9ZYXJySklULmNwcDoK
KyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVFbnRlcik6CisgICAg
ICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlUmV0dXJuKToKKyAgICAgICAg
KEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6WWFyckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OllhcnI6OmppdENvbXBpbGUpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5oOgorCiAyMDE4LTAx
LTAyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIEluY29ycmVj
dCBhc3NlcnRpb24gaW5zaWRlIEFjY2Vzc0Nhc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCmluZGV4IGQwMjEzNGY2MjU1NmFjMDY5ZDVl
ZTdiMTYxM2IzNDYyNDA5ZjQwOGYuLjY3ZjE2NTVlYjJlZjIyMDYzZWE5MTRhNDQ5NTY0NzA5M2Ew
YTM4MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUR1bXBlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
RHVtcGVyLmNwcApAQCAtMjUwLDI5ICsyNTAsOSBAQCBjb25zdCBJZGVudGlmaWVyJiBCeXRlY29k
ZUR1bXBlcjxCbG9jaz46OmlkZW50aWZpZXIoaW50IGluZGV4KSBjb25zdAogICAgIHJldHVybiBi
bG9jaygpLT5pZGVudGlmaWVyKGluZGV4KTsKIH0KIAotc3RhdGljIENTdHJpbmcgcmVnZXhwVG9T
b3VyY2VTdHJpbmcoUmVnRXhwKiByZWdFeHApCi17Ci0gICAgY2hhciBwb3N0Zml4WzddID0geyAn
LycsIDAsIDAsIDAsIDAsIDAsIDAgfTsKLSAgICBpbnQgaW5kZXggPSAxOwotICAgIGlmIChyZWdF
eHAtPmdsb2JhbCgpKQotICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ2cnOwotICAgIGlmIChy
ZWdFeHAtPmlnbm9yZUNhc2UoKSkKLSAgICAgICAgcG9zdGZpeFtpbmRleCsrXSA9ICdpJzsKLSAg
ICBpZiAocmVnRXhwLT5tdWx0aWxpbmUoKSkKLSAgICAgICAgcG9zdGZpeFtpbmRleF0gPSAnbSc7
Ci0gICAgaWYgKHJlZ0V4cC0+ZG90QWxsKCkpCi0gICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAn
cyc7Ci0gICAgaWYgKHJlZ0V4cC0+dW5pY29kZSgpKQotICAgICAgICBwb3N0Zml4W2luZGV4Kytd
ID0gJ3UnOwotICAgIGlmIChyZWdFeHAtPnN0aWNreSgpKQotICAgICAgICBwb3N0Zml4W2luZGV4
KytdID0gJ3knOwotCi0gICAgcmV0dXJuIHRvQ1N0cmluZygiLyIsIHJlZ0V4cC0+cGF0dGVybigp
LmltcGwoKSwgcG9zdGZpeCk7Ci19Ci0KIHN0YXRpYyBDU3RyaW5nIHJlZ2V4cE5hbWUoaW50IHJl
LCBSZWdFeHAqIHJlZ2V4cCkKIHsKLSAgICByZXR1cm4gdG9DU3RyaW5nKHJlZ2V4cFRvU291cmNl
U3RyaW5nKHJlZ2V4cCksICIoQHJlIiwgcmUsICIpIik7CisgICAgcmV0dXJuIHRvQ1N0cmluZyhy
ZWdleHAtPnRvU291cmNlU3RyaW5nKCksICIoQHJlIiwgcmUsICIpIik7CiB9CiAKIHRlbXBsYXRl
PGNsYXNzIEluc3RydWN0aW9uPgpAQCAtMTc0Nyw3ICsxNzI3LDcgQEAgdm9pZCBCeXRlY29kZUR1
bXBlcjxCbG9jaz46OmR1bXBSZWdFeHBzKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAgIG91dC5w
cmludGYoIlxubV9yZWdleHBzOlxuIik7CiAgICAgICAgIHNpemVfdCBpID0gMDsKICAgICAgICAg
ZG8gewotICAgICAgICAgICAgb3V0LnByaW50ZigiICByZSV1ID0gJXNcbiIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihpKSwgcmVnZXhwVG9Tb3VyY2VTdHJpbmcoYmxvY2soKS0+cmVnZXhwKGkpKS5k
YXRhKCkpOworICAgICAgICAgICAgb3V0LnByaW50KCIgIHJlIiwgaSwgIiA9ICIsIGJsb2NrKCkt
PnJlZ2V4cChpKS0+dG9Tb3VyY2VTdHJpbmcoKSwgIlxuIik7CiAgICAgICAgICAgICArK2k7CiAg
ICAgICAgIH0gd2hpbGUgKGkgPCBjb3VudCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAppbmRleCA3ZWRiNjAwYTVjZWIwZGYxYjE2ZTdlOGZiMmQ2MzA4ZTVhOGRjNmU0Li41
MmJhNmNjMTQ0YThhNGZkNjNiYWIwODViZGMwMjJlZDliYWFhNzIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcApAQCAtMjY2MSw2ICsyNjYxLDcgQEAgdm9pZCBIZWFwOjphZGRDb3Jl
Q29uc3RyYWludHMoKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZChtX3ZtLT5leGNlcHRpb24oKSk7CiAgICAgICAgICAgICBzbG90VmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5sYXN0RXhjZXB0aW9uKCkpOworICAgICAgICAgICAg
c2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+ZXhlY3V0aW5nUmVnRXhwSklUKTsK
ICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0
aW9uKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCmluZGV4
IDAyMGI3YmZlODllYmM2NTVkMzFjNWI2YWNmYTFhYWM5NTE2YmUyYWYuLjc3MGIxZWViMjVkMTg0
NDFmODhiYmQzNzg3YWI4YzlkNGU5MWQ1NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwLmNwcApAQCAtMzA3LDcgKzMwNyw3IEBAIHZvaWQgUmVnRXhwOjpjb21waWxlKFZN
KiB2bSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQogCiAjaWYgRU5BQkxFKFlBUlJfSklU
KQogICAgIGlmICghcGF0dGVybi5tX2NvbnRhaW5zQmFja3JlZmVyZW5jZXMgJiYgIXBhdHRlcm4u
Y29udGFpbnNVbnNpZ25lZExlbmd0aFBhdHRlcm4oKSAmJiBWTTo6Y2FuVXNlUmVnRXhwSklUKCkp
IHsKLSAgICAgICAgWWFycjo6aml0Q29tcGlsZShwYXR0ZXJuLCBjaGFyU2l6ZSwgdm0sIG1fcmVn
RXhwSklUQ29kZSk7CisgICAgICAgIFlhcnI6OmppdENvbXBpbGUocGF0dGVybiwgY2hhclNpemUs
IG1fcmVnRXhwSklUQ29kZSk7CiAgICAgICAgIGlmICghbV9yZWdFeHBKSVRDb2RlLmlzRmFsbEJh
Y2soKSkgewogICAgICAgICAgICAgbV9zdGF0ZSA9IEpJVENvZGU7CiAgICAgICAgICAgICByZXR1
cm47CkBAIC0zMjYsNyArMzI2LDcgQEAgdm9pZCBSZWdFeHA6OmNvbXBpbGUoVk0qIHZtLCBZYXJy
OjpZYXJyQ2hhclNpemUgY2hhclNpemUpCiAKIGludCBSZWdFeHA6Om1hdGNoKFZNJiB2bSwgY29u
c3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgVmVjdG9yPGludD4mIG92ZWN0b3Ip
CiB7Ci0gICAgcmV0dXJuIG1hdGNoSW5saW5lKHZtLCBzLCBzdGFydE9mZnNldCwgb3ZlY3Rvcik7
CisgICAgcmV0dXJuIG1hdGNoSW5saW5lKHZtLCBFeGVjdXRpb25Db250ZXh0OjpKUywgcywgc3Rh
cnRPZmZzZXQsIG92ZWN0b3IpOwogfQogCiBib29sIFJlZ0V4cDo6bWF0Y2hDb25jdXJyZW50bHko
CkBAIC0zMzcsNyArMzM3LDcgQEAgYm9vbCBSZWdFeHA6Om1hdGNoQ29uY3VycmVudGx5KAogICAg
IGlmICghaGFzQ29kZUZvcihzLmlzOEJpdCgpID8gWWFycjo6Q2hhcjggOiBZYXJyOjpDaGFyMTYp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBwb3NpdGlvbiA9IG1hdGNoKHZtLCBzLCBz
dGFydE9mZnNldCwgb3ZlY3Rvcik7CisgICAgcG9zaXRpb24gPSBtYXRjaElubGluZSh2bSwgRXhl
Y3V0aW9uQ29udGV4dDo6Tm9uSlMsIHMsIHN0YXJ0T2Zmc2V0LCBvdmVjdG9yKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMzYzLDcgKzM2Myw3IEBAIHZvaWQgUmVnRXhwOjpjb21waWxlTWF0
Y2hPbmx5KFZNKiB2bSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQogCiAjaWYgRU5BQkxF
KFlBUlJfSklUKQogICAgIGlmICghcGF0dGVybi5tX2NvbnRhaW5zQmFja3JlZmVyZW5jZXMgJiYg
IXBhdHRlcm4uY29udGFpbnNVbnNpZ25lZExlbmd0aFBhdHRlcm4oKSAmJiBWTTo6Y2FuVXNlUmVn
RXhwSklUKCkpIHsKLSAgICAgICAgWWFycjo6aml0Q29tcGlsZShwYXR0ZXJuLCBjaGFyU2l6ZSwg
dm0sIG1fcmVnRXhwSklUQ29kZSwgWWFycjo6TWF0Y2hPbmx5KTsKKyAgICAgICAgWWFycjo6aml0
Q29tcGlsZShwYXR0ZXJuLCBjaGFyU2l6ZSwgbV9yZWdFeHBKSVRDb2RlLCBZYXJyOjpNYXRjaE9u
bHkpOwogICAgICAgICBpZiAoIW1fcmVnRXhwSklUQ29kZS5pc0ZhbGxCYWNrKCkpIHsKICAgICAg
ICAgICAgIG1fc3RhdGUgPSBKSVRDb2RlOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzgyLDcg
KzM4Miw3IEBAIHZvaWQgUmVnRXhwOjpjb21waWxlTWF0Y2hPbmx5KFZNKiB2bSwgWWFycjo6WWFy
ckNoYXJTaXplIGNoYXJTaXplKQogCiBNYXRjaFJlc3VsdCBSZWdFeHA6Om1hdGNoKFZNJiB2bSwg
Y29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBzdGFydE9mZnNldCkKIHsKLSAgICByZXR1cm4gbWF0
Y2hJbmxpbmUodm0sIHMsIHN0YXJ0T2Zmc2V0KTsKKyAgICByZXR1cm4gbWF0Y2hJbmxpbmUodm0s
IEV4ZWN1dGlvbkNvbnRleHQ6OkpTLCBzLCBzdGFydE9mZnNldCk7CiB9CiAKIGJvb2wgUmVnRXhw
OjptYXRjaENvbmN1cnJlbnRseShWTSYgdm0sIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgc3Rh
cnRPZmZzZXQsIE1hdGNoUmVzdWx0JiByZXN1bHQpCkBAIC0zOTIsNyArMzkyLDcgQEAgYm9vbCBS
ZWdFeHA6Om1hdGNoQ29uY3VycmVudGx5KFZNJiB2bSwgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgTWEKICAgICBpZiAoIWhhc01hdGNoT25seUNvZGVGb3Iocy5pczhCaXQo
KSA/IFlhcnI6OkNoYXI4IDogWWFycjo6Q2hhcjE2KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgcmVzdWx0ID0gbWF0Y2godm0sIHMsIHN0YXJ0T2Zmc2V0KTsKKyAgICByZXN1bHQgPSBt
YXRjaElubGluZSh2bSwgRXhlY3V0aW9uQ29udGV4dDo6Tm9uSlMsIHMsIHN0YXJ0T2Zmc2V0KTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDA5LDYgKzQwOSwyNiBAQCB2b2lkIFJlZ0V4cDo6
ZGVsZXRlQ29kZSgpCiAgICAgbV9yZWdFeHBCeXRlY29kZSA9IG51bGxwdHI7CiB9CiAKK1N0cmlu
ZyBSZWdFeHA6OnRvU291cmNlU3RyaW5nKCkgY29uc3QKK3sKKyAgICBjaGFyIHBvc3RmaXhbN10g
PSB7ICcvJywgMCwgMCwgMCwgMCwgMCwgMCB9OworICAgIGludCBpbmRleCA9IDE7CisgICAgaWYg
KGdsb2JhbCgpKQorICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ2cnOworICAgIGlmIChpZ25v
cmVDYXNlKCkpCisgICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAnaSc7CisgICAgaWYgKG11bHRp
bGluZSgpKQorICAgICAgICBwb3N0Zml4W2luZGV4XSA9ICdtJzsKKyAgICBpZiAoZG90QWxsKCkp
CisgICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAncyc7CisgICAgaWYgKHVuaWNvZGUoKSkKKyAg
ICAgICAgcG9zdGZpeFtpbmRleCsrXSA9ICd1JzsKKyAgICBpZiAoc3RpY2t5KCkpCisgICAgICAg
IHBvc3RmaXhbaW5kZXgrK10gPSAneSc7CisKKyAgICByZXR1cm4gbWFrZVN0cmluZygiLyIsIHBh
dHRlcm4oKSwgcG9zdGZpeCk7Cit9CisKICNpZiBFTkFCTEUoWUFSUl9KSVRfREVCVUcpCiB2b2lk
IFJlZ0V4cDo6bWF0Y2hDb21wYXJlV2l0aEludGVycHJldGVyKGNvbnN0IFN0cmluZyYgcywgaW50
IHN0YXJ0T2Zmc2V0LCBpbnQqIG9mZnNldFZlY3RvciwgaW50IGppdFJlc3VsdCkKIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKaW5kZXggMmVkOWY5ZDYwZTdjZjIzZjRlNTFi
OTBkM2E0YzdhNDk4NTY2MTA1ZS4uZTMwZGRlMGJhY2QzMmYxMjYyZTY1YzNjM2IxODAyZWM1NzFh
MWI2NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKQEAgLTczLDkgKzcz
LDEwIEBAIGNsYXNzIFJlZ0V4cCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIGJvb2wgbWF0
Y2hDb25jdXJyZW50bHkoVk0mLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwg
TWF0Y2hSZXN1bHQmKTsKIAogICAgIC8vIENhbGwgdGhlc2UgdmVyc2lvbnMgb2YgdGhlIG1hdGNo
IGZ1bmN0aW9ucyBpZiB5b3UncmUgZGVzcGVyYXRlIGZvciBwZXJmb3JtYW5jZS4KKyAgICBlbnVt
IGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQgeyBKUywgTm9uSlMgfTsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWZWN0b3JUeXBlPgotICAgIGludCBtYXRjaElubGluZShWTSYsIGNvbnN0IFN0cmluZyYs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBWZWN0b3JUeXBlJiBvdmVjdG9yKTsKLSAgICBNYXRjaFJl
c3VsdCBtYXRjaElubGluZShWTSYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
KTsKKyAgICBpbnQgbWF0Y2hJbmxpbmUoVk0mLCBFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJp
bmcmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgVmVjdG9yVHlwZSYgb3ZlY3Rvcik7CisgICAgTWF0
Y2hSZXN1bHQgbWF0Y2hJbmxpbmUoVk0mLCBFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcm
LCB1bnNpZ25lZCBzdGFydE9mZnNldCk7CiAgICAgCiAgICAgdW5zaWduZWQgbnVtU3VicGF0dGVy
bnMoKSBjb25zdCB7IHJldHVybiBtX251bVN1YnBhdHRlcm5zOyB9CiAKQEAgLTEyMiw2ICsxMjMs
OCBAQCBjbGFzcyBSZWdFeHAgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIFJlZ0V4cEtl
eSBrZXkoKSB7IHJldHVybiBSZWdFeHBLZXkobV9mbGFncywgbV9wYXR0ZXJuU3RyaW5nKTsgfQog
CisgICAgU3RyaW5nIHRvU291cmNlU3RyaW5nKCkgY29uc3Q7CisKIHByb3RlY3RlZDoKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKQEAgLTE1MCw2ICsxNTMsMjkgQEAgY2xhc3MgUmVn
RXhwIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgdm9pZCBtYXRjaENvbXBhcmVXaXRoSW50
ZXJwcmV0ZXIoY29uc3QgU3RyaW5nJiwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQqIG9mZnNldFZlY3Rv
ciwgaW50IGppdFJlc3VsdCk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShZQVJSX0pJVCkKKyAgICBj
bGFzcyBSZWdFeHBKSVRGcmFtZVRyYWNlciB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFJlZ0V4cEpJVEZyYW1lVHJhY2VyKTsKKyAgICBwdWJsaWM6CisgICAgICAgIEFMV0FZU19JTkxJ
TkUgUmVnRXhwSklURnJhbWVUcmFjZXIoVk0mIHZtLCBSZWdFeHAmIHJlZ0V4cCwgRXhlY3V0aW9u
Q29udGV4dCBjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dCA9PSBF
eGVjdXRpb25Db250ZXh0OjpKUykgeworICAgICAgICAgICAgICAgIG1fdm0gPSAmdm07CisgICAg
ICAgICAgICAgICAgbV92bS0+ZXhlY3V0aW5nUmVnRXhwSklUID0gJnJlZ0V4cDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEFMV0FZU19JTkxJTkUgflJlZ0V4cEpJVEZyYW1l
VHJhY2VyKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdm0pCisgICAgICAgICAgICAg
ICAgbV92bS0+ZXhlY3V0aW5nUmVnRXhwSklUID0gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgVk0qIG1fdm0geyBudWxscHRyIH07CisgICAgfTsKKyNlbmRpZgor
CiAgICAgUmVnRXhwU3RhdGUgbV9zdGF0ZSB7IE5vdENvbXBpbGVkIH07CiAgICAgU3RyaW5nIG1f
cGF0dGVyblN0cmluZzsKICAgICBSZWdFeHBGbGFncyBtX2ZsYWdzOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwSW5saW5lcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwSW5saW5lcy5oCmluZGV4IGIyZjFkZDM5M2M5M2QxYTA0
MjU2YzMwODEwOTJmOWVlYmRjMmYwOTcuLjEwOWE0ZjI5ZmRlZDYxNTUxZWNjNDAyYWRkNmVhYjBm
ZDhmYmFkOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBJbmxp
bmVzLmgKQEAgLTk0LDcgKzk0LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFJlZ0V4cDo6Y29tcGls
ZUlmTmVjZXNzYXJ5KFZNJiB2bSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXoKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KLUFMV0FZU19JTkxJTkUgaW50IFJlZ0V4cDo6bWF0
Y2hJbmxpbmUoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBW
ZWN0b3JUeXBlJiBvdmVjdG9yKQorQUxXQVlTX0lOTElORSBpbnQgUmVnRXhwOjptYXRjaElubGlu
ZShWTSYgdm0sIEV4ZWN1dGlvbkNvbnRleHQgY29udGV4dCwgY29uc3QgU3RyaW5nJiBzLCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgVmVjdG9yVHlwZSYgb3ZlY3RvcikKIHsKICNpZiBFTkFCTEUoUkVH
RVhQX1RSQUNJTkcpCiAgICAgbV9ydE1hdGNoQ2FsbENvdW50Kys7CkBAIC0xMTgsMTAgKzExOCwx
MyBAQCBBTFdBWVNfSU5MSU5FIGludCBSZWdFeHA6Om1hdGNoSW5saW5lKFZNJiB2bSwgY29uc3Qg
U3RyaW5nJiBzLCB1bnNpZ25lZCBzdGFydE9mZgogI2VuZGlmCiAKICAgICBpZiAobV9zdGF0ZSA9
PSBKSVRDb2RlKSB7Ci0gICAgICAgIGlmIChzLmlzOEJpdCgpKQotICAgICAgICAgICAgcmVzdWx0
ID0gbV9yZWdFeHBKSVRDb2RlLmV4ZWN1dGUocy5jaGFyYWN0ZXJzOCgpLCBzdGFydE9mZnNldCwg
cy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yIEVYVFJBX0pJVF9QQVJBTVMpLnN0YXJ0OwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBtX3JlZ0V4cEpJVENvZGUuZXhlY3V0ZShzLmNo
YXJhY3RlcnMxNigpLCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yIEVYVFJB
X0pJVF9QQVJBTVMpLnN0YXJ0OworICAgICAgICB7CisgICAgICAgICAgICBSZWdFeHBKSVRGcmFt
ZVRyYWNlciB0cmFjZXIgeyB2bSwgKnRoaXMsIGNvbnRleHQgfTsKKyAgICAgICAgICAgIGlmIChz
LmlzOEJpdCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fcmVnRXhwSklUQ29kZS5leGVj
dXRlKHMuY2hhcmFjdGVyczgoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksIG9mZnNldFZlY3Rv
ciBFWFRSQV9KSVRfUEFSQU1TKS5zdGFydDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSBtX3JlZ0V4cEpJVENvZGUuZXhlY3V0ZShzLmNoYXJhY3RlcnMxNigpLCBz
dGFydE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yIEVYVFJBX0pJVF9QQVJBTVMpLnN0
YXJ0OworICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCA9PSBZYXJyOjpKU1JlZ0V4cEpJ
VENvZGVGYWlsdXJlKSB7CiAgICAgICAgICAgICAvLyBKSVQnZWQgY29kZSBjb3VsZG4ndCBoYW5k
bGUgZXhwcmVzc2lvbiwgc28gcHVudCBiYWNrIHRvIHRoZSBpbnRlcnByZXRlci4KQEAgLTIwMiw3
ICsyMDUsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgUmVnRXhwOjpjb21waWxlSWZOZWNlc3NhcnlN
YXRjaE9ubHkoVk0mIHZtLCBZYXJyOjpZYXJyQ2hhclNpegogICAgIGNvbXBpbGVNYXRjaE9ubHko
JnZtLCBjaGFyU2l6ZSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWF0Y2hSZXN1bHQgUmVnRXhwOjpt
YXRjaElubGluZShWTSYgdm0sIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgc3RhcnRPZmZzZXQp
CitBTFdBWVNfSU5MSU5FIE1hdGNoUmVzdWx0IFJlZ0V4cDo6bWF0Y2hJbmxpbmUoVk0mIHZtLCBF
eGVjdXRpb25Db250ZXh0IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgc3RhcnRP
ZmZzZXQpCiB7CiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogICAgIG1fcnRNYXRjaE9ubHlD
YWxsQ291bnQrKzsKQEAgLTIyMywxMCArMjI2LDEzIEBAIEFMV0FZU19JTkxJTkUgTWF0Y2hSZXN1
bHQgUmVnRXhwOjptYXRjaElubGluZShWTSYgdm0sIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQK
ICAgICBNYXRjaFJlc3VsdCByZXN1bHQ7CiAKICAgICBpZiAobV9zdGF0ZSA9PSBKSVRDb2RlKSB7
Ci0gICAgICAgIGlmIChzLmlzOEJpdCgpKQotICAgICAgICAgICAgcmVzdWx0ID0gbV9yZWdFeHBK
SVRDb2RlLmV4ZWN1dGUocy5jaGFyYWN0ZXJzOCgpLCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSBF
WFRSQV9KSVRfUEFSQU1TKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gbV9y
ZWdFeHBKSVRDb2RlLmV4ZWN1dGUocy5jaGFyYWN0ZXJzMTYoKSwgc3RhcnRPZmZzZXQsIHMubGVu
Z3RoKCkgRVhUUkFfSklUX1BBUkFNUyk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFJlZ0V4cEpJ
VEZyYW1lVHJhY2VyIHRyYWNlciB7IHZtLCAqdGhpcywgY29udGV4dCB9OworICAgICAgICAgICAg
aWYgKHMuaXM4Qml0KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9yZWdFeHBKSVRDb2Rl
LmV4ZWN1dGUocy5jaGFyYWN0ZXJzOCgpLCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSBFWFRSQV9K
SVRfUEFSQU1TKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBt
X3JlZ0V4cEpJVENvZGUuZXhlY3V0ZShzLmNoYXJhY3RlcnMxNigpLCBzdGFydE9mZnNldCwgcy5s
ZW5ndGgoKSBFWFRSQV9KSVRfUEFSQU1TKTsKKyAgICAgICAgfQogCiAjaWYgRU5BQkxFKFJFR0VY
UF9UUkFDSU5HKQogICAgICAgICBpZiAoIXJlc3VsdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKaW5kZXggOTBmOGM0NGFjNTg4NWE2
MzA3MGZiNmI2MmRlMTFhYWI5ZjFkNWRjMC4uMWI4Nzc1ZWY1ZDkxZmY0ZjIzNDg4MGRmYzUzMzhh
MWEzMzA1MjFiZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwTWF0Y2hlc0FycmF5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwTWF0Y2hlc0FycmF5LmgKQEAgLTYzLDcgKzYzLDcgQEAgQUxXQVlTX0lOTElORSBKU0FycmF5
KiBjcmVhdGVSZWdFeHBNYXRjaGVzQXJyYXkoCiAgICAgUmVnRXhwKiByZWdFeHAsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCBNYXRjaFJlc3VsdCYgcmVzdWx0KQogewogICAgIFZlY3RvcjxpbnQsIDMy
PiBzdWJwYXR0ZXJuUmVzdWx0czsKLSAgICBpbnQgcG9zaXRpb24gPSByZWdFeHAtPm1hdGNoSW5s
aW5lKHZtLCBpbnB1dFZhbHVlLCBzdGFydE9mZnNldCwgc3VicGF0dGVyblJlc3VsdHMpOworICAg
IGludCBwb3NpdGlvbiA9IHJlZ0V4cC0+bWF0Y2hJbmxpbmUodm0sIFJlZ0V4cDo6RXhlY3V0aW9u
Q29udGV4dDo6SlMsIGlucHV0VmFsdWUsIHN0YXJ0T2Zmc2V0LCBzdWJwYXR0ZXJuUmVzdWx0cyk7
CiAgICAgaWYgKHBvc2l0aW9uID09IC0xKSB7CiAgICAgICAgIHJlc3VsdCA9IE1hdGNoUmVzdWx0
OjpmYWlsZWQoKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCmluZGV4IDk3MjdjMThmZGJj
YzBkNWUxYjliMjI3ZGZmZDM4MjFmY2Q2Y2U3Y2MuLmQ4NzQ4ZjE2ZjNjOTIxY2FlZTcxYzI5ZDhm
YWY0ZTM4ZWYyZTk5NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuY3BwCkBAIC0yNzYsMTEgKzI3Niw4IEBAIGNsYXNzIENGcmFtZVdh
bGtlciA6IHB1YmxpYyBGcmFtZVdhbGtlciB7CiAKIFNhbXBsaW5nUHJvZmlsZXI6OlNhbXBsaW5n
UHJvZmlsZXIoVk0mIHZtLCBSZWZQdHI8U3RvcHdhdGNoPiYmIHN0b3B3YXRjaCkKICAgICA6IG1f
dm0odm0pCi0gICAgLCBtX3dlYWtSYW5kb20oKQogICAgICwgbV9zdG9wd2F0Y2goV1RGTW92ZShz
dG9wd2F0Y2gpKQogICAgICwgbV90aW1pbmdJbnRlcnZhbChTZWNvbmRzOjpmcm9tTWljcm9zZWNv
bmRzKE9wdGlvbnM6OnNhbXBsZUludGVydmFsKCkpKQotICAgICwgbV9pc1BhdXNlZChmYWxzZSkK
LSAgICAsIG1faXNTaHV0RG93bihmYWxzZSkKIHsKICAgICBpZiAoc1JlcG9ydFN0YXRzKSB7CiAg
ICAgICAgIHNOdW1Ub3RhbFdhbGtzID0gMDsKQEAgLTI5MCwxMCArMjg3LDYgQEAgU2FtcGxpbmdQ
cm9maWxlcjo6U2FtcGxpbmdQcm9maWxlcihWTSYgdm0sIFJlZlB0cjxTdG9wd2F0Y2g+JiYgc3Rv
cHdhdGNoKQogICAgIG1fY3VycmVudEZyYW1lcy5ncm93KDI1Nik7CiB9CiAKLVNhbXBsaW5nUHJv
ZmlsZXI6On5TYW1wbGluZ1Byb2ZpbGVyKCkKLXsKLX0KLQogdm9pZCBTYW1wbGluZ1Byb2ZpbGVy
OjpjcmVhdGVUaHJlYWRJZk5lY2Vzc2FyeShjb25zdCBBYnN0cmFjdExvY2tlciYpCiB7CiAgICAg
QVNTRVJUKG1fbG9jay5pc0xvY2tlZCgpKTsKQEAgLTMxNyw3ICszMTAsNyBAQCB2b2lkIFNhbXBs
aW5nUHJvZmlsZXI6OnRpbWVyTG9vcCgpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgICAgICBpZiAoIW1faXNQYXVzZWQgJiYgbV9qc2NFeGVjdXRpb25UaHJlYWQpCi0gICAgICAg
ICAgICAgICAgdGFrZVNhbXBsZShsb2NrZXIsIHN0YWNrVHJhY2VQcm9jZXNzaW5nVGltZSk7Cisg
ICAgICAgICAgICAgICAgc3RhY2tUcmFjZVByb2Nlc3NpbmdUaW1lID0gdGFrZVNhbXBsZShsb2Nr
ZXIpOwogCiAgICAgICAgICAgICBtX2xhc3RUaW1lID0gbV9zdG9wd2F0Y2gtPmVsYXBzZWRUaW1l
KCk7CiAgICAgICAgIH0KQEAgLTMzMiw3ICszMjUsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6
OnRpbWVyTG9vcCgpCiAgICAgfQogfQogCi12b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRha2VTYW1w
bGUoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTZWNvbmRzJiBzdGFja1RyYWNlUHJvY2Vzc2luZ1Rp
bWUpCitTZWNvbmRzIFNhbXBsaW5nUHJvZmlsZXI6OnRha2VTYW1wbGUoY29uc3QgQWJzdHJhY3RM
b2NrZXImKQogewogICAgIEFTU0VSVChtX2xvY2suaXNMb2NrZWQoKSk7CiAgICAgaWYgKG1fdm0u
ZW50cnlTY29wZSkgewpAQCAtMzUwLDYgKzM0Myw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6
dGFrZVNhbXBsZShjb25zdCBBYnN0cmFjdExvY2tlciYsIFNlY29uZHMmIHN0YWNrVHJhY2VQcm9j
CiAgICAgICAgICAgICBFeGVjU3RhdGUqIGNhbGxGcmFtZTsKICAgICAgICAgICAgIHZvaWQqIG1h
Y2hpbmVQQzsKICAgICAgICAgICAgIGJvb2wgdG9wRnJhbWVJc0xMSW50ID0gZmFsc2U7CisgICAg
ICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9IG51bGxwdHI7CiAgICAgICAgICAgICB2b2lkKiBsbGlu
dFBDOwogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFBsYXRmb3JtUmVnaXN0ZXJzIHJl
Z2lzdGVyczsKQEAgLTM2MiwxMSArMzU2LDkgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtl
U2FtcGxlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU2Vjb25kcyYgc3RhY2tUcmFjZVByb2MKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBMZXRzIGhhdmUgYSB3YXkgb2YgZGV0ZWN0aW5nIHdoZW4gd2Un
cmUgcGFyc2luZyBjb2RlLgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1Mjc2MQogICAgICAgICAgICAgaWYgKEV4ZWN1dGFibGVBbGxvY2F0
b3I6OnNpbmdsZXRvbigpLmlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGV4ZWN1dGFibGVBbGxvY2F0
b3JMb2NrZXIsIG1hY2hpbmVQQykpIHsKLSAgICAgICAgICAgICAgICBpZiAobV92bS5pc0V4ZWN1
dGluZ0luUmVnRXhwSklUKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSdyZSBl
eGVjdXRpbmcgYSByZWdleHAuIExldHMgZ2F0aGVyIG1vcmUgaW50ZXJzdGluZyBkYXRhLgotICAg
ICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUyNzI5CisgICAgICAgICAgICAgICAgcmVnRXhwID0gbV92bS5leGVjdXRpbmdSZWdFeHBK
SVQ7CisgICAgICAgICAgICAgICAgaWYgKHJlZ0V4cCkKICAgICAgICAgICAgICAgICAgICAgY2Fs
bEZyYW1lID0gbV92bS50b3BDYWxsRnJhbWU7IC8vIFdlIG5lZWQgdG8gZG8gdGhpcyBvciBlbHNl
IHdlJ2QgZmFpbCBvdXIgYmFja3RyYWNlIHZhbGlkYXRpb24gYi9jIHRoaXMgaXNuJ3QgYSBKUyBm
cmFtZS4KLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYgKExMSW50Ojpp
c0xMSW50UEMobWFjaGluZVBDKSkgewogICAgICAgICAgICAgICAgIHRvcEZyYW1lSXNMTEludCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgLy8gV2UncmUgb2theSB0byB0YWtlIGEgbm9ybWFsIHN0
YWNrIHRyYWNlIHdoZW4gdGhlIFBDCkBAIC00MDcsMTYgKzM5OSwxNiBAQCB2b2lkIFNhbXBsaW5n
UHJvZmlsZXI6OnRha2VTYW1wbGUoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTZWNvbmRzJiBzdGFj
a1RyYWNlUHJvYwogICAgICAgICAgICAgICAgICAgICBzdGFja1RyYWNlLnVuY2hlY2tlZEFwcGVu
ZChmcmFtZSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgbV91bnByb2Nl
c3NlZFN0YWNrVHJhY2VzLmFwcGVuZChVbnByb2Nlc3NlZFN0YWNrVHJhY2UgeyBub3dUaW1lLCBt
YWNoaW5lUEMsIHRvcEZyYW1lSXNMTEludCwgbGxpbnRQQywgV1RGTW92ZShzdGFja1RyYWNlKSB9
KTsKKyAgICAgICAgICAgICAgICBtX3VucHJvY2Vzc2VkU3RhY2tUcmFjZXMuYXBwZW5kKFVucHJv
Y2Vzc2VkU3RhY2tUcmFjZSB7IG5vd1RpbWUsIG1hY2hpbmVQQywgdG9wRnJhbWVJc0xMSW50LCBs
bGludFBDLCByZWdFeHAsIFdURk1vdmUoc3RhY2tUcmFjZSkgfSk7CiAKICAgICAgICAgICAgICAg
ICBpZiAoZGlkUnVuT3V0T2ZWZWN0b3JTcGFjZSkKICAgICAgICAgICAgICAgICAgICAgbV9jdXJy
ZW50RnJhbWVzLmdyb3cobV9jdXJyZW50RnJhbWVzLnNpemUoKSAqIDEuMjUpOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBhdXRvIGVuZFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsK
LSAgICAgICAgICAgIHN0YWNrVHJhY2VQcm9jZXNzaW5nVGltZSA9IGVuZFRpbWUgLSBzdGFydFRp
bWU7CisgICAgICAgICAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRpbWU7
CiAgICAgICAgIH0KICAgICB9CisgICAgcmV0dXJuIDBfczsKIH0KIAogc3RhdGljIEFMV0FZU19J
TkxJTkUgdW5zaWduZWQgdHJ5R2V0Qnl0ZWNvZGVJbmRleCh1bnNpZ25lZCBsbGludFBDLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgYm9vbCYgaXNWYWxpZCkKQEAgLTU3MSwzNiArNTYzLDQ0IEBAIHZv
aWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpCiAgICAg
ICAgIC8vIFByZXBlbmQgdGhlIHRvcC1tb3N0IGlubGluZWQgZnJhbWUgaWYgbmVlZGVkIGFuZCBn
YXRoZXIKICAgICAgICAgLy8gbG9jYXRpb24gaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdGhlIHRv
cCBmcmFtZSBpcyBleGVjdXRpbmcuCiAgICAgICAgIHNpemVfdCBzdGFydEluZGV4ID0gMDsKLSAg
ICAgICAgaWYgKHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5mcmFtZXMuc2l6ZSgpICYmICEhdW5wcm9j
ZXNzZWRTdGFja1RyYWNlLmZyYW1lc1swXS52ZXJpZmllZENvZGVCbG9jaykgewotICAgICAgICAg
ICAgQ29kZUJsb2NrKiB0b3BDb2RlQmxvY2sgPSB1bnByb2Nlc3NlZFN0YWNrVHJhY2UuZnJhbWVz
WzBdLnZlcmlmaWVkQ29kZUJsb2NrOwotICAgICAgICAgICAgaWYgKHVucHJvY2Vzc2VkU3RhY2tU
cmFjZS50b3BGcmFtZUlzTExJbnQpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSByZXVzZSBMTElu
dCBDb2RlQmxvY2tzIGZvciB0aGUgYmFzZWxpbmUgSklULCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGZv
ciBib3RoIGppdCB0eXBlcy4KLSAgICAgICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGFsc28gYmUg
ZmFsc2UgZm9yIHZhcmlvdXMgcmVhc29ucyAoa25vd24gYW5kIHVua25vd24pLCBldmVuIHRob3Vn
aAotICAgICAgICAgICAgICAgIC8vIGl0J3Mgc3VwZXIgdW5saWtlbHkuIE9uZSByZWFzb24gdGhh
dCB0aGlzIGNhbiBiZSBmYWxzZSBpcyB3aGVuIHdlIHRocm93IGZyb20gYSBERkcgZnJhbWUsCi0g
ICAgICAgICAgICAgICAgLy8gYW5kIHdlIGVuZCB1cCBoYXZpbmcgdG8gdW53aW5kIHBhc3QgYW4g
RW50cnlGcmFtZSwgd2Ugd2lsbCBlbmQgdXAgZXhlY3V0aW5nCi0gICAgICAgICAgICAgICAgLy8g
aW5zaWRlIHRoZSBMTEludCdzIGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uLiBTbyB3ZSBqdXN0IHBy
b3RlY3QgYWdhaW5zdCB0aGlzCi0gICAgICAgICAgICAgICAgLy8gYnkgaWdub3JpbmcgaXQuCi0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IDA7Ci0gICAgICAgICAgICAg
ICAgaWYgKHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkludGVycHJldGVyVGh1
bmsgfHwgdG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpIHsK
LSAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1ZhbGlkUEM7Ci0gICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGJpdHM7CisgICAgICAgIGlmICghdW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1l
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIHRvcEZyYW1lID0gdW5wcm9jZXNzZWRT
dGFja1RyYWNlLmZyYW1lc1swXTsKKyAgICAgICAgICAgIGlmICghIXRvcEZyYW1lLnZlcmlmaWVk
Q29kZUJsb2NrKSB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiB0b3BDb2RlQmxvY2sgPSB0
b3BGcmFtZS52ZXJpZmllZENvZGVCbG9jazsKKyAgICAgICAgICAgICAgICBpZiAodW5wcm9jZXNz
ZWRTdGFja1RyYWNlLnRvcEZyYW1lSXNMTEludCkgeworICAgICAgICAgICAgICAgICAgICAvLyBX
ZSByZXVzZSBMTEludCBDb2RlQmxvY2tzIGZvciB0aGUgYmFzZWxpbmUgSklULCBzbyB3ZSBuZWVk
IHRvIGNoZWNrIGZvciBib3RoIGppdCB0eXBlcy4KKyAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyBtaWdodCBhbHNvIGJlIGZhbHNlIGZvciB2YXJpb3VzIHJlYXNvbnMgKGtub3duIGFuZCB1bmtu
b3duKSwgZXZlbiB0aG91Z2gKKyAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBzdXBlciB1bmxp
a2VseS4gT25lIHJlYXNvbiB0aGF0IHRoaXMgY2FuIGJlIGZhbHNlIGlzIHdoZW4gd2UgdGhyb3cg
ZnJvbSBhIERGRyBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHdlIGVuZCB1cCBo
YXZpbmcgdG8gdW53aW5kIHBhc3QgYW4gRW50cnlGcmFtZSwgd2Ugd2lsbCBlbmQgdXAgZXhlY3V0
aW5nCisgICAgICAgICAgICAgICAgICAgIC8vIGluc2lkZSB0aGUgTExJbnQncyBoYW5kbGVVbmNh
dWdodEV4Y2VwdGlvbi4gU28gd2UganVzdCBwcm90ZWN0IGFnYWluc3QgdGhpcworICAgICAgICAg
ICAgICAgICAgICAvLyBieSBpZ25vcmluZyBpdC4KKyAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmICh0b3BDb2RlQmxv
Y2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rIHx8IHRvcENvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGlzVmFsaWRQQzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGJpdHM7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICAgICAgYml0cyA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih1bnByb2Nlc3NlZFN0
YWNrVHJhY2UubGxpbnRQQykpOworICAgICAgICAgICAgICAgICAgICAgICAgYml0cyA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih1bnByb2Nlc3NlZFN0YWNr
VHJhY2UubGxpbnRQQykpOwogI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgYml0cyA9IGJpdHdp
c2VfY2FzdDx1bnNpZ25lZD4odW5wcm9jZXNzZWRTdGFja1RyYWNlLmxsaW50UEMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYml0cyA9IGJpdHdpc2VfY2FzdDx1bnNpZ25lZD4odW5wcm9jZXNz
ZWRTdGFja1RyYWNlLmxsaW50UEMpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIGJ5dGVj
b2RlSW5kZXggPSB0cnlHZXRCeXRlY29kZUluZGV4KGJpdHMsIHRvcENvZGVCbG9jaywgaXNWYWxp
ZFBDKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSB0cnlHZXRCeXRl
Y29kZUluZGV4KGJpdHMsIHRvcENvZGVCbG9jaywgaXNWYWxpZFBDKTsKIAotICAgICAgICAgICAg
ICAgICAgICBVTlVTRURfUEFSQU0oaXNWYWxpZFBDKTsgLy8gRklYTUU6IGRvIHNvbWV0aGluZyB3
aXRoIHRoaXMgaW5mbyBmb3IgdGhlIHdlYiBpbnNwZWN0b3I6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM0NTUKKyAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNF
RF9QQVJBTShpc1ZhbGlkUEMpOyAvLyBGSVhNRTogZG8gc29tZXRoaW5nIHdpdGggdGhpcyBpbmZv
IGZvciB0aGUgd2ViIGluc3BlY3RvcjogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MzQ1NQogCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayh0b3BD
b2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBzdG9yZUNhbGxl
ZUludG9MYXN0RnJhbWUodW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lc1swXS51bnZlcmlmaWVk
Q2FsbGVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayh0b3BDb2Rl
QmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVDYWxs
ZWVJbnRvTGFzdEZyYW1lKHRvcEZyYW1lLnVudmVyaWZpZWRDYWxsZWUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhcnRJbmRleCA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdp
biA9IHRvcENvZGVCbG9jay0+ZmluZFBDKHVucHJvY2Vzc2VkU3RhY2tUcmFjZS50b3BQQykpIHsK
KyAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ29kZU9yaWdpbih0b3BDb2RlQmxvY2ssICpjb2Rl
T3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgc3RvcmVDYWxsZWVJbnRvTGFzdEZyYW1lKHRv
cEZyYW1lLnVudmVyaWZpZWRDYWxsZWUpOwogICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4
ID0gMTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0ZDo6b3B0
aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IHRvcENvZGVCbG9jay0+ZmluZFBDKHVucHJv
Y2Vzc2VkU3RhY2tUcmFjZS50b3BQQykpIHsKLSAgICAgICAgICAgICAgICBhcHBlbmRDb2RlT3Jp
Z2luKHRvcENvZGVCbG9jaywgKmNvZGVPcmlnaW4pOwotICAgICAgICAgICAgICAgIHN0b3JlQ2Fs
bGVlSW50b0xhc3RGcmFtZSh1bnByb2Nlc3NlZFN0YWNrVHJhY2UuZnJhbWVzWzBdLnVudmVyaWZp
ZWRDYWxsZWUpOwotICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAxOworICAgICAgICAgICAg
fSBlbHNlIGlmICh1bnByb2Nlc3NlZFN0YWNrVHJhY2UucmVnRXhwKSB7CisgICAgICAgICAgICAg
ICAgYXBwZW5kRW1wdHlGcmFtZSgpOworICAgICAgICAgICAgICAgIHN0YWNrVHJhY2UuZnJhbWVz
Lmxhc3QoKS5yZWdFeHAgPSB1bnByb2Nlc3NlZFN0YWNrVHJhY2UucmVnRXhwOworICAgICAgICAg
ICAgICAgIHN0YWNrVHJhY2UuZnJhbWVzLmxhc3QoKS5mcmFtZVR5cGUgPSBGcmFtZVR5cGU6OlJl
Z0V4cDsKKyAgICAgICAgICAgICAgICBtX2xpdmVDZWxsUG9pbnRlcnMuYWRkKHVucHJvY2Vzc2Vk
U3RhY2tUcmFjZS5yZWdFeHApOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTcxMiw4
ICs3MTIsMTEgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpjbGVhckRhdGEoY29uc3QgQWJzdHJh
Y3RMb2NrZXImKQogCiBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6bmFtZUZy
b21DYWxsZWUoVk0mIHZtKQogewotICAgIGlmICghY2FsbGVlKQorICAgIGlmICghY2FsbGVlKSB7
CisgICAgICAgIGlmIChyZWdFeHApCisgICAgICAgICAgICByZXR1cm4gcmVnRXhwLT50b1NvdXJj
ZVN0cmluZygpOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQogCiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGNh
bGxlZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKQEAgLTc0Nyw3ICs3NTAsNyBAQCBT
dHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZGlzcGxheU5hbWUoVk0mIHZtKQog
ICAgICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogCi0gICAgaWYgKGZyYW1lVHlwZSA9PSBG
cmFtZVR5cGU6OlVua25vd24gfHwgZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6QykgeworICAgIGlm
IChmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpVbmtub3duIHx8IGZyYW1lVHlwZSA9PSBGcmFtZVR5
cGU6OkMgfHwgZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6UmVnRXhwKSB7CiAjaWYgSEFWRShETEFE
RFIpCiAgICAgICAgIGlmIChmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpDKSB7CiAgICAgICAgICAg
ICBhdXRvIGRlbWFuZ2xlZCA9IFdURjo6U3RhY2tUcmFjZTo6ZGVtYW5nbGUoY0NvZGVQQyk7CkBA
IC03ODMsNyArNzg2LDcgQEAgU3RyaW5nIFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJhbWU6OmRp
c3BsYXlOYW1lRm9ySlNPTlRlc3RzKFZNJiB2bSkKICAgICAgICAgICAgIHJldHVybiBuYW1lOwog
ICAgIH0KIAotICAgIGlmIChmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpVbmtub3duIHx8IGZyYW1l
VHlwZSA9PSBGcmFtZVR5cGU6OkMpCisgICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OlVu
a25vd24gfHwgZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6QyB8fCBmcmFtZVR5cGUgPT0gRnJhbWVU
eXBlOjpSZWdFeHApCiAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIih1bmtub3duKSIpOwog
ICAgIGlmIChmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpIb3N0KQogICAgICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCIoaG9zdCkiKTsKQEAgLTgxMCw0OCArODEzLDc5IEBAIFN0cmluZyBTYW1wbGlu
Z1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpkaXNwbGF5TmFtZUZvckpTT05UZXN0cyhWTSYgdm0pCiAK
IGludCBTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja0ZyYW1lOjpmdW5jdGlvblN0YXJ0TGluZSgpCiB7
Ci0gICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OlVua25vd24gfHwgZnJhbWVUeXBlID09
IEZyYW1lVHlwZTo6SG9zdCB8fCBmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpDKQotICAgICAgICBy
ZXR1cm4gLTE7Ci0KLSAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICBz
d2l0Y2ggKGZyYW1lVHlwZSkgeworICAgIGNhc2UgRnJhbWVUeXBlOjpFeGVjdXRhYmxlOgorICAg
ICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVy
biAtMTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNjcmlwdEV4ZWN1dGFibGUqPihleGVj
dXRhYmxlKS0+Zmlyc3RMaW5lKCk7CisKKyAgICBjYXNlIEZyYW1lVHlwZTo6SG9zdDoKKyAgICBj
YXNlIEZyYW1lVHlwZTo6UmVnRXhwOgorICAgIGNhc2UgRnJhbWVUeXBlOjpDOgorICAgIGNhc2Ug
RnJhbWVUeXBlOjpVbmtub3duOgogICAgICAgICByZXR1cm4gLTE7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFNjcmlwdEV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Zmlyc3RMaW5lKCk7CisgICAg
fQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAtMTsKIH0KIAogdW5zaWdu
ZWQgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6ZnVuY3Rpb25TdGFydENvbHVtbigpCiB7
Ci0gICAgaWYgKGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OlVua25vd24gfHwgZnJhbWVUeXBlID09
IEZyYW1lVHlwZTo6SG9zdCB8fCBmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpDKQotICAgICAgICBy
ZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotCi0gICAgaWYgKGV4
ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgc3dpdGNoIChmcmFtZVR5cGUpIHsKKyAg
ICBjYXNlIEZyYW1lVHlwZTo6RXhlY3V0YWJsZToKKyAgICAgICAgaWYgKGV4ZWN1dGFibGUtPmlz
SG9zdEZ1bmN0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0
YWJsZSo+KGV4ZWN1dGFibGUpLT5zdGFydENvbHVtbigpOworCisgICAgY2FzZSBGcmFtZVR5cGU6
Okhvc3Q6CisgICAgY2FzZSBGcmFtZVR5cGU6OlJlZ0V4cDoKKyAgICBjYXNlIEZyYW1lVHlwZTo6
QzoKKyAgICBjYXNlIEZyYW1lVHlwZTo6VW5rbm93bjoKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxT
Y3JpcHRFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPnN0YXJ0Q29sdW1uKCk7CisgICAgfQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCk7CiB9CiAKIGludHB0cl90IFNhbXBsaW5nUHJvZmlsZXI6OlN0YWNrRnJh
bWU6OnNvdXJjZUlEKCkKIHsKLSAgICBpZiAoZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6VW5rbm93
biB8fCBmcmFtZVR5cGUgPT0gRnJhbWVUeXBlOjpIb3N0IHx8IGZyYW1lVHlwZSA9PSBGcmFtZVR5
cGU6OkMpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RG
dW5jdGlvbigpKQorICAgIHN3aXRjaCAoZnJhbWVUeXBlKSB7CisgICAgY2FzZSBGcmFtZVR5cGU6
OkV4ZWN1dGFibGU6CisgICAgICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQor
ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2NyaXB0
RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5zb3VyY2VJRCgpOworCisgICAgY2FzZSBGcmFtZVR5
cGU6Okhvc3Q6CisgICAgY2FzZSBGcmFtZVR5cGU6OlJlZ0V4cDoKKyAgICBjYXNlIEZyYW1lVHlw
ZTo6QzoKKyAgICBjYXNlIEZyYW1lVHlwZTo6VW5rbm93bjoKICAgICAgICAgcmV0dXJuIC0xOwot
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFNjcmlwdEV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+
c291cmNlSUQoKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IC0xOwogfQogCiBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6dXJsKCkKIHsK
LSAgICBpZiAoZnJhbWVUeXBlID09IEZyYW1lVHlwZTo6VW5rbm93biB8fCBmcmFtZVR5cGUgPT0g
RnJhbWVUeXBlOjpIb3N0IHx8IGZyYW1lVHlwZSA9PSBGcmFtZVR5cGU6OkMpCi0gICAgICAgIHJl
dHVybiBlbXB0eVN0cmluZygpOworICAgIHN3aXRjaCAoZnJhbWVUeXBlKSB7CisgICAgY2FzZSBG
cmFtZVR5cGU6OkV4ZWN1dGFibGU6IHsKKyAgICAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1
bmN0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKworICAgICAgICBT
dHJpbmcgdXJsID0gc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5z
b3VyY2VVUkwoKTsKKyAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5zb3VyY2UoKS5w
cm92aWRlcigpLT5zb3VyY2VVUkwoKTsgLy8gRmFsbCBiYWNrIHRvIHNvdXJjZVVSTCBkaXJlY3Rp
dmUuCisgICAgICAgIHJldHVybiB1cmw7CisgICAgfQogCi0gICAgaWYgKGV4ZWN1dGFibGUtPmlz
SG9zdEZ1bmN0aW9uKCkpCisgICAgY2FzZSBGcmFtZVR5cGU6Okhvc3Q6CisgICAgY2FzZSBGcmFt
ZVR5cGU6OlJlZ0V4cDoKKyAgICBjYXNlIEZyYW1lVHlwZTo6QzoKKyAgICBjYXNlIEZyYW1lVHlw
ZTo6VW5rbm93bjoKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0KLSAgICBTdHJpbmcg
dXJsID0gc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5zb3VyY2VV
UkwoKTsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFNjcmlwdEV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+c291cmNlKCkucHJvdmlkZXIoKS0+c291
cmNlVVJMKCk7IC8vIEZhbGwgYmFjayB0byBzb3VyY2VVUkwgZGlyZWN0aXZlLgotICAgIHJldHVy
biB1cmw7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwogfQogCiBWZWN0b3I8U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tUcmFjZT4gU2Ft
cGxpbmdQcm9maWxlcjo6cmVsZWFzZVN0YWNrVHJhY2VzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBs
b2NrZXIpCkBAIC0xMDgwLDYgKzExMTQsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgU2FtcGxpbmdQcm9maWxlcjo6RnJhbWVUeXBlIGZyYW1lVHlwZSkKICAgICBjYXNl
IFNhbXBsaW5nUHJvZmlsZXI6OkZyYW1lVHlwZTo6SG9zdDoKICAgICAgICAgb3V0LnByaW50KCJI
b3N0Iik7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2FtcGxpbmdQcm9maWxlcjo6RnJhbWVU
eXBlOjpSZWdFeHA6CisgICAgICAgIG91dC5wcmludCgiUmVnRXhwIik7CisgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgU2FtcGxpbmdQcm9maWxlcjo6RnJhbWVUeXBlOjpDOgogICAgIGNhc2UgU2Ft
cGxpbmdQcm9maWxlcjo6RnJhbWVUeXBlOjpVbmtub3duOgogICAgICAgICBvdXQucHJpbnQoIlVu
a25vd24iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBs
aW5nUHJvZmlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJv
ZmlsZXIuaAppbmRleCA3ZDkxYWQ0OGU1MmQ1Mjc2MjlhYzQzZmExOTk4Zjc5OGJiY2E5NDFjLi4x
MjAwMGYwMTgwYzhiOWJlYmNhNDMzNmNhMDI3YTQ2NTAyOTk1MWM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCkBAIC0zOSw2ICszOSw3
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBSZWdFeHA7CiBjbGFzcyBWTTsKIGNsYXNz
IEV4ZWN1dGFibGVCYXNlOwogCkBAIC02OCw2ICs2OSw3IEBAIGNsYXNzIFNhbXBsaW5nUHJvZmls
ZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2FtcGxpbmdQcm9maWxlcj4gewogICAg
IGVudW0gY2xhc3MgRnJhbWVUeXBlIHsgCiAgICAgICAgIEV4ZWN1dGFibGUsCiAgICAgICAgIEhv
c3QsCisgICAgICAgIFJlZ0V4cCwKICAgICAgICAgQywKICAgICAgICAgVW5rbm93bgogICAgIH07
CkBAIC04NSw2ICs4Nyw3IEBAIGNsYXNzIFNhbXBsaW5nUHJvZmlsZXIgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8U2FtcGxpbmdQcm9maWxlcj4gewogICAgICAgICB2b2lkKiBjQ29kZVBD
IHsgbnVsbHB0ciB9OwogICAgICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSB7IG51bGxw
dHIgfTsKICAgICAgICAgSlNPYmplY3QqIGNhbGxlZSB7IG51bGxwdHIgfTsKKyAgICAgICAgUmVn
RXhwKiByZWdFeHAgeyBudWxscHRyIH07CiAKICAgICAgICAgc3RydWN0IENvZGVMb2NhdGlvbiB7
CiAgICAgICAgICAgICBib29sIGhhc0NvZGVCbG9ja0hhc2goKSBjb25zdApAQCAtMTQxLDYgKzE0
NCw3IEBAIGNsYXNzIFNhbXBsaW5nUHJvZmlsZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8U2FtcGxpbmdQcm9maWxlcj4gewogICAgICAgICB2b2lkKiB0b3BQQzsKICAgICAgICAgYm9v
bCB0b3BGcmFtZUlzTExJbnQ7CiAgICAgICAgIHZvaWQqIGxsaW50UEM7CisgICAgICAgIFJlZ0V4
cCogcmVnRXhwOwogICAgICAgICBWZWN0b3I8VW5wcm9jZXNzZWRTdGFja0ZyYW1lPiBmcmFtZXM7
CiAgICAgfTsKIApAQCAtMTU2LDcgKzE2MCw3IEBAIGNsYXNzIFNhbXBsaW5nUHJvZmlsZXIgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2FtcGxpbmdQcm9maWxlcj4gewogICAgIH07CiAK
ICAgICBTYW1wbGluZ1Byb2ZpbGVyKFZNJiwgUmVmUHRyPFN0b3B3YXRjaD4mJik7Ci0gICAgflNh
bXBsaW5nUHJvZmlsZXIoKTsKKyAgICB+U2FtcGxpbmdQcm9maWxlcigpID0gZGVmYXVsdDsKICAg
ICB2b2lkIG5vdGljZUpTTG9ja0FjcXVpc2l0aW9uKCk7CiAgICAgdm9pZCBub3RpY2VWTUVudHJ5
KCk7CiAgICAgdm9pZCBzaHV0ZG93bigpOwpAQCAtMTg1LDcgKzE4OSw3IEBAIGNsYXNzIFNhbXBs
aW5nUHJvZmlsZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2FtcGxpbmdQcm9maWxl
cj4gewogcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVRocmVhZElmTmVjZXNzYXJ5KGNvbnN0IEFi
c3RyYWN0TG9ja2VyJik7CiAgICAgdm9pZCB0aW1lckxvb3AoKTsKLSAgICB2b2lkIHRha2VTYW1w
bGUoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTZWNvbmRzJiBzdGFja1RyYWNlUHJvY2Vzc2luZ1Rp
bWUpOworICAgIFNlY29uZHMgdGFrZVNhbXBsZShjb25zdCBBYnN0cmFjdExvY2tlciYpOwogCiAg
ICAgVk0mIG1fdm07CiAgICAgV2Vha1JhbmRvbSBtX3dlYWtSYW5kb207CkBAIC0xOTcsOCArMjAx
LDggQEAgY2xhc3MgU2FtcGxpbmdQcm9maWxlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxTYW1wbGluZ1Byb2ZpbGVyPiB7CiAgICAgTG9jayBtX2xvY2s7CiAgICAgUmVmUHRyPFRocmVh
ZD4gbV90aHJlYWQ7CiAgICAgUmVmUHRyPFRocmVhZD4gbV9qc2NFeGVjdXRpb25UaHJlYWQ7Ci0g
ICAgYm9vbCBtX2lzUGF1c2VkOwotICAgIGJvb2wgbV9pc1NodXREb3duOworICAgIGJvb2wgbV9p
c1BhdXNlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzU2h1dERvd24geyBmYWxzZSB9OwogICAg
IGJvb2wgbV9uZWVkc1JlcG9ydEF0RXhpdCB7IGZhbHNlIH07CiAgICAgSGFzaFNldDxKU0NlbGwq
PiBtX2xpdmVDZWxsUG9pbnRlcnM7CiAgICAgVmVjdG9yPFVucHJvY2Vzc2VkU3RhY2tGcmFtZT4g
bV9jdXJyZW50RnJhbWVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggYzI5MDcz
ZDIwOGE1ZDYyOTljNDdhOTYyMTBmODg5MTZmMjk1N2ExNS4uZjFlM2RjMDIzZGY3Y2ZlMzZmNTJk
Y2FjYzQzZjk3Nzk0OGE3NGE2MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0x
MTcsNiArMTE3LDcgQEAgY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlOwogY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTmF0aXZlRXhlY3V0YWJsZTsKIGNsYXNzIFByb21pc2VE
ZWZlcnJlZFRpbWVyOworY2xhc3MgUmVnRXhwOwogY2xhc3MgUmVnRXhwQ2FjaGU7CiBjbGFzcyBS
ZWdpc3RlcjsKIGNsYXNzIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OwpAQCAtNTk1LDcgKzU5Niw3IEBA
IGNsYXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJs
eUxpbmtlZExpc3ROb2RlPFZNPiB7CiAgICAgSW5zdHJ1Y3Rpb24qIHRhcmdldEludGVycHJldGVy
UENGb3JUaHJvdzsKICAgICB1aW50MzJfdCBvc3JFeGl0SW5kZXg7CiAgICAgdm9pZCogb3NyRXhp
dEp1bXBEZXN0aW5hdGlvbjsKLSAgICBib29sIGlzRXhlY3V0aW5nSW5SZWdFeHBKSVQgeyBmYWxz
ZSB9OworICAgIFJlZ0V4cCogZXhlY3V0aW5nUmVnRXhwSklUIHsgbnVsbHB0ciB9OwogCiAgICAg
Ly8gVGhlIHRocmVhZGluZyBwcm90b2NvbCBoZXJlIGlzIGFzIGZvbGxvd3M6CiAgICAgLy8gLSBZ
b3UgY2FuIGNhbGwgc2NyYXRjaEJ1ZmZlckZvclNpemUgZnJvbSBhbnkgdGhyZWFkLgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAppbmRleCAwM2ZjMDZkZDdkZmEyM2YzMjU0ZjNm
NDI1ODZiOGY1YzU2NmU1MzQ3Li5lY2Y1YTM2MWFmZWNjNzVkNmY1OGYzYmMyYWQzMjVhMmRlNzY2
MTVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcApAQCAtMjksNyArMjks
NiBAQAogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSAiTGlua0J1ZmZlci5o
IgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIllhcnIu
aCIKICNpbmNsdWRlICJZYXJyQ2Fub25pY2FsaXplLmgiCiAKQEAgLTQxLDcgKzQwLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBZYXJyIHsKIAogdGVtcGxhdGU8WWFyckpJVENvbXBpbGVN
b2RlIGNvbXBpbGVNb2RlPgogY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3Nl
bWJsZXIgewotICAgIGZyaWVuZCB2b2lkIGppdENvbXBpbGUoVk0qLCBZYXJyQ29kZUJsb2NrJiBq
aXRPYmplY3QsIGNvbnN0IFN0cmluZyYgcGF0dGVybiwgdW5zaWduZWQmIG51bVN1YnBhdHRlcm5z
LCBjb25zdCBjaGFyKiYgZXJyb3IsIGJvb2wgaWdub3JlQ2FzZSwgYm9vbCBtdWx0aWxpbmUpOwor
ICAgIGZyaWVuZCB2b2lkIGppdENvbXBpbGUoWWFyckNvZGVCbG9jayYgaml0T2JqZWN0LCBjb25z
dCBTdHJpbmcmIHBhdHRlcm4sIHVuc2lnbmVkJiBudW1TdWJwYXR0ZXJucywgY29uc3QgY2hhciom
IGVycm9yLCBib29sIGlnbm9yZUNhc2UsIGJvb2wgbXVsdGlsaW5lKTsKIAogI2lmIENQVShBUk0p
CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5wdXQgPSBBUk1SZWdpc3RlcnM6OnIwOwpA
QCAtMzMzOSwxNCArMzMzOCwxMCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNy
b0Fzc2VtYmxlciB7CiAjZWxpZiBDUFUoTUlQUykKICAgICAgICAgLy8gRG8gbm90aGluZy4KICNl
bmRpZgotCi0gICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtX3ZtLT5pc0V4ZWN1dGlu
Z0luUmVnRXhwSklUKTsKICAgICB9CiAKICAgICB2b2lkIGdlbmVyYXRlUmV0dXJuKCkKICAgICB7
Ci0gICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX3ZtLT5pc0V4ZWN1dGluZ0luUmVn
RXhwSklUKTsKLQogI2lmIENQVShYODZfNjQpCiAjaWYgT1MoV0lORE9XUykKICAgICAgICAgLy8g
U3RvcmUgdGhlIHJldHVybiB2YWx1ZSBpbiB0aGUgYWxsb2NhdGVkIHNwYWNlIHBvaW50ZWQgYnkg
cmN4LgpAQCAtMzM5Myw5ICszMzg4LDggQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUg
TWFjcm9Bc3NlbWJsZXIgewogICAgIH0KIAogcHVibGljOgotICAgIFlhcnJHZW5lcmF0b3IoVk0q
IHZtLCBZYXJyUGF0dGVybiYgcGF0dGVybiwgWWFyckNoYXJTaXplIGNoYXJTaXplKQotICAgICAg
ICA6IG1fdm0odm0pCi0gICAgICAgICwgbV9wYXR0ZXJuKHBhdHRlcm4pCisgICAgWWFyckdlbmVy
YXRvcihZYXJyUGF0dGVybiYgcGF0dGVybiwgWWFyckNoYXJTaXplIGNoYXJTaXplKQorICAgICAg
ICA6IG1fcGF0dGVybihwYXR0ZXJuKQogICAgICAgICAsIG1fY2hhclNpemUoY2hhclNpemUpCiAg
ICAgICAgICwgbV9zaG91bGRGYWxsQmFjayhmYWxzZSkKICAgICAgICAgLCBtX2RlY29kZVN1cnJv
Z2F0ZVBhaXJzKG1fY2hhclNpemUgPT0gQ2hhcjE2ICYmIG1fcGF0dGVybi51bmljb2RlKCkpCkBA
IC0zNDk3LDggKzM0OTEsNiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fz
c2VtYmxlciB7CiAgICAgfQogCiBwcml2YXRlOgotICAgIFZNKiBtX3ZtOwotCiAgICAgWWFyclBh
dHRlcm4mIG1fcGF0dGVybjsKIAogICAgIFlhcnJDaGFyU2l6ZSBtX2NoYXJTaXplOwpAQCAtMzUz
OCwxMiArMzUzMCwxMiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2Vt
YmxlciB7CiAgICAgQmFja3RyYWNraW5nU3RhdGUgbV9iYWNrdHJhY2tpbmdTdGF0ZTsKIH07CiAK
LXZvaWQgaml0Q29tcGlsZShZYXJyUGF0dGVybiYgcGF0dGVybiwgWWFyckNoYXJTaXplIGNoYXJT
aXplLCBWTSogdm0sIFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCwgWWFyckpJVENvbXBpbGVNb2Rl
IG1vZGUpCit2b2lkIGppdENvbXBpbGUoWWFyclBhdHRlcm4mIHBhdHRlcm4sIFlhcnJDaGFyU2l6
ZSBjaGFyU2l6ZSwgWWFyckNvZGVCbG9jayYgaml0T2JqZWN0LCBZYXJySklUQ29tcGlsZU1vZGUg
bW9kZSkKIHsKICAgICBpZiAobW9kZSA9PSBNYXRjaE9ubHkpCi0gICAgICAgIFlhcnJHZW5lcmF0
b3I8TWF0Y2hPbmx5Pih2bSwgcGF0dGVybiwgY2hhclNpemUpLmNvbXBpbGUoaml0T2JqZWN0KTsK
KyAgICAgICAgWWFyckdlbmVyYXRvcjxNYXRjaE9ubHk+KHBhdHRlcm4sIGNoYXJTaXplKS5jb21w
aWxlKGppdE9iamVjdCk7CiAgICAgZWxzZQotICAgICAgICBZYXJyR2VuZXJhdG9yPEluY2x1ZGVT
dWJwYXR0ZXJucz4odm0sIHBhdHRlcm4sIGNoYXJTaXplKS5jb21waWxlKGppdE9iamVjdCk7Cisg
ICAgICAgIFlhcnJHZW5lcmF0b3I8SW5jbHVkZVN1YnBhdHRlcm5zPihwYXR0ZXJuLCBjaGFyU2l6
ZSkuY29tcGlsZShqaXRPYmplY3QpOwogfQogCiB9fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFy
ckpJVC5oCmluZGV4IGFkNTUwMGYwZDhjM2Q2Njc4ZGI4ZmE5YzlmOTViMTJhZjM5MTkyNjQuLjg0
M2NlZTkwN2E2NDcwZjFhY2QwNzU3N2RlMDEwOGE2NzRkZDJlZGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJySklULmgKQEAgLTQ1LDcgKzQ1LDYgQEAgY29uc3RleHByIHNpemVfdCBwYXR0
ZXJuQ29udGV4dEJ1ZmZlclNpemUgPSA4MTkyOyAvLyBTcGFjZSBjYWxsZXIgYWxsb2NhdGVzIHRv
IHMKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFZNOwogY2xhc3MgRXhlY3V0YWJsZVBvb2w7
CiAKIG5hbWVzcGFjZSBZYXJyIHsKQEAgLTIwMyw3ICsyMDIsNyBAQCBlbnVtIFlhcnJKSVRDb21w
aWxlTW9kZSB7CiAgICAgTWF0Y2hPbmx5LAogICAgIEluY2x1ZGVTdWJwYXR0ZXJucwogfTsKLXZv
aWQgaml0Q29tcGlsZShZYXJyUGF0dGVybiYsIFlhcnJDaGFyU2l6ZSwgVk0qLCBZYXJyQ29kZUJs
b2NrJiBqaXRPYmplY3QsIFlhcnJKSVRDb21waWxlTW9kZSA9IEluY2x1ZGVTdWJwYXR0ZXJucyk7
Cit2b2lkIGppdENvbXBpbGUoWWFyclBhdHRlcm4mLCBZYXJyQ2hhclNpemUsIFlhcnJDb2RlQmxv
Y2smIGppdE9iamVjdCwgWWFyckpJVENvbXBpbGVNb2RlID0gSW5jbHVkZVN1YnBhdHRlcm5zKTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OllhcnIKIApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFu
Z2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCBjZTcwN2JiZDVhMzY1YjlkNzFmMmMzYzUw
MjUxNGU3NTU0Njg5MDMxLi5jZDNkM2JmZmNkOTJkYjg3OTU0MThlMTUwZWFmN2JhMmJhYmI1NzU5
IDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE1IEBACisyMDE4LTAxLTAzICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFA
Z21haWwuY29tPgorCisgICAgICAgIEpTQyBTYW1wbGluZyBQcm9maWxlcjogRGV0ZWN0IHRlc3Rl
ciBhbmQgdGVzdGVlIHdoZW4gc2FtcGxpbmcgaW4gUmVnRXhwIEpJVAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNzI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3Mvc2FtcGxpbmctcHJvZmls
ZXItcmVnZXhwLmpzOiBBZGRlZC4KKyAgICAgICAgKHBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1By
b2ZpbGVyLnRlc3QpOgorICAgICAgICAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIu
YmF6KToKKyAgICAgICAgKHBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyKToKKwogMjAx
OC0wMS0wMiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBJbmNv
cnJlY3QgYXNzZXJ0aW9uIGluc2lkZSBBY2Nlc3NDYXNlCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0
cmVzcy9zYW1wbGluZy1wcm9maWxlci1yZWdleHAuanMgYi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGlu
Zy1wcm9maWxlci1yZWdleHAuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWEzOTg3YzE2NDU4MGE3NjE1ZWEwYzM4
MjkxNzYyZGY0NDEyMjFiZAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBs
aW5nLXByb2ZpbGVyLXJlZ2V4cC5qcwpAQCAtMCwwICsxLDE4IEBACitpZiAocGxhdGZvcm1TdXBw
b3J0c1NhbXBsaW5nUHJvZmlsZXIoKSkgeworICAgIGxvYWQoIi4vc2FtcGxpbmctcHJvZmlsZXIv
c2FtcGxpbmdQcm9maWxlci5qcyIpOworCisgICAgZnVuY3Rpb24gdGVzdChyZWdleHAsIHN0cmlu
ZykKKyAgICB7CisgICAgICAgIHJldHVybiBzdHJpbmcubWF0Y2gocmVnZXhwKTsKKyAgICB9Cisg
ICAgbm9JbmxpbmUodGVzdCk7CisKKyAgICBmdW5jdGlvbiBiYXooKSB7CisgICAgICAgIHZhciB0
ZXh0ID0gYExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5n
IGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xv
cmUgbWFnbmEgYWxpcXVhLiBVdCBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4
ZXJjaXRhdGlvbiB1bGxhbWNvIGxhYm9yaXMgbmlzaSB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8g
Y29uc2VxdWF0LiBEdWlzIGF1dGUgaXJ1cmUgZG9sb3IgaW4gcmVwcmVoZW5kZXJpdCBpbiB2b2x1
cHRhdGUgdmVsaXQgZXNzZSBjaWxsdW0gZG9sb3JlIGV1IGZ1Z2lhdCBudWxsYSBwYXJpYXR1ci4g
RXhjZXB0ZXVyIHNpbnQgb2NjYWVjYXQgY3VwaWRhdGF0IG5vbiBwcm9pZGVudCwgc3VudCBpbiBj
dWxwYSBxdWkgb2ZmaWNpYSBkZXNlcnVudCBtb2xsaXQgYW5pbSBpZCBlc3QgbGFib3J1bS5gOwor
ICAgICAgICB2YXIgcmVnZXhwID0gLy4qL2dpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQorICAgICAgICAgICAgdGVzdChyZWdleHAsIHRleHQpOworICAgIH0KKworICAg
IHJ1blRlc3QoYmF6LCBbIi8uKi9naSIsICIiLCAidGVzdCIsICJiYXoiXSk7Cit9Cg==
</data>
<flag name="review"
          id="349387"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>