<?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>36678</bug_id>
          
          <creation_ts>2010-03-26 14:52:02 -0700</creation_ts>
          <short_desc>Support using FormData to send a sliced file via XHR.</short_desc>
          <delta_ts>2010-04-15 18:08:05 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>36472</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jian Li">jianli</reporter>
          <assigned_to name="Jian Li">jianli</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dimich</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>204806</commentid>
    <comment_count>0</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-03-26 14:52:02 -0700</bug_when>
    <thetext>Add the support to allow FormData.append() to take a Blob and send it correctly via XHR.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204832</commentid>
    <comment_count>1</comment_count>
      <attachid>51787</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-03-26 15:35:19 -0700</bug_when>
    <thetext>Created attachment 51787
Proposed Patch

This depends on 36472. Before it is landed, the compiling queues will show errors for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204833</commentid>
    <comment_count>2</comment_count>
      <attachid>51788</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-03-26 15:39:22 -0700</bug_when>
    <thetext>Created attachment 51788
Proposed Patch

Removed the change to project.pbxproj accidentally added into the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204835</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-26 15:40:20 -0700</bug_when>
    <thetext>Attachment 51788 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/html/FormDataList.h:41:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 18 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>204836</commentid>
    <comment_count>4</comment_count>
      <attachid>51789</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-03-26 15:40:24 -0700</bug_when>
    <thetext>Created attachment 51789
Proposed Patch

Sorry, forgot to add it as patch. Try again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204837</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-26 15:46:24 -0700</bug_when>
    <thetext>Attachment 51789 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/html/FormDataList.h:41:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 18 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>204838</commentid>
    <comment_count>6</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-03-26 15:47:03 -0700</bug_when>
    <thetext>Attachment 51789 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/1494001</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204840</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-26 15:53:22 -0700</bug_when>
    <thetext>Attachment 51789 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/1495001</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204849</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-26 16:08:53 -0700</bug_when>
    <thetext>Attachment 51789 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/1487004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204924</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-26 21:02:09 -0700</bug_when>
    <thetext>Attachment 51789 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/1570007</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206682</commentid>
    <comment_count>10</comment_count>
      <attachid>52204</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-03-31 13:16:38 -0700</bug_when>
    <thetext>Created attachment 52204
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206686</commentid>
    <comment_count>11</comment_count>
      <attachid>52204</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-03-31 13:19:50 -0700</bug_when>
    <thetext>Comment on attachment 52204
Patch

Sorry I submitted a patch to a wrong bug...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206689</commentid>
    <comment_count>12</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-03-31 13:23:58 -0700</bug_when>
    <thetext>Attachment 52204 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/1640071</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206723</commentid>
    <comment_count>13</comment_count>
      <attachid>52211</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-03-31 14:35:00 -0700</bug_when>
    <thetext>Created attachment 52211
Proposed Patch

Updated the patch based on the latest sync so that commit-queue check should function now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206728</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-31 14:40:51 -0700</bug_when>
    <thetext>Attachment 52211 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/html/FormDataList.h:41:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 18 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>210954</commentid>
    <comment_count>15</comment_count>
      <attachid>52211</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-04-09 15:15:54 -0700</bug_when>
    <thetext>Comment on attachment 52211
Proposed Patch

Look good, couple of small things: 

&gt; diff --git a/LayoutTests/http/tests/local/send-form-data-with-sliced-file.html b/LayoutTests/http/tests/local/send-form-data-with-sliced-file.html

This looks like a typical script-test. Most (if not all) other script tests have their .js files in a subdirectory named &apos;script-tests&apos; and they also have TEMPLATE.html file there. There is a script in WebKitTools/Script/make-script-test-erappers which then generates the .html files using the template. For the consistency, please consider following the same pattern. If necessary (because of specific template), a http/tests/local/formdata subdirectory can be created to keep FormData-related tests.

&gt; diff --git a/WebCore/platform/network/FormData.cpp b/WebCore/platform/network/FormData.cpp

&gt; @@ -186,9 +188,20 @@ void FormData::appendDOMFormData(const DOMFormData&amp; domFormData, bool isMultiPar
&gt; +#if ENABLE(BLOB_SLICE)
&gt; +                String fileName;
&gt; +                if (value.blob()-&gt;isFile())
&gt; +                    fileName = static_cast&lt;File*&gt;(value.blob())-&gt;fileName();
&gt; +                else {
&gt; +                    // If a blob is sliced from a file, it does not have the filename. In this case, let&apos;s produce a unique filename.
&gt; +                    fileName = &quot;Blob&quot; + createCanonicalUUIDString();
&gt; +                    fileName.replace(&quot;-&quot;, &quot;&quot;); // For safe, remove &apos;-&apos; in case that certain server does not like it to be in the filename.

May be &quot;// For safety, remove &apos;-&apos; from the filename since some servers may not like it.&quot; ?

&gt; +                }
&gt; +#else
&gt; +                String fileName = static_cast&lt;File*&gt;(value.blob())-&gt;fileName();

It seems like a good place to have ASSERT(value.blob()-&gt;IsFile());

Doing r- since moving files to script-test might benefit from another look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212457</commentid>
    <comment_count>16</comment_count>
      <attachid>53347</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-04-14 11:27:59 -0700</bug_when>
    <thetext>Created attachment 53347
Proposed Patch

All fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212458</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-14 11:29:18 -0700</bug_when>
    <thetext>Attachment 53347 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WARNING: Skipping non-existent file: LayoutTests/http/tests/local/resources/send-form-data.js
WARNING: Skipping non-existent file: LayoutTests/http/tests/local/send-form-data-expected.txt
WebCore/html/FormDataList.h:41:  More than one command on the same line  [whitespace/newline] [4]
WARNING: Skipping non-existent file: LayoutTests/http/tests/local/send-form-data.html
Total errors found: 1 in 20 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>213017</commentid>
    <comment_count>18</comment_count>
      <attachid>53347</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-04-15 13:46:19 -0700</bug_when>
    <thetext>Comment on attachment 53347
Proposed Patch

r=me

tiny nit:

&gt; diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog

&gt; +        Move common functionalities to test sending FormData into a helper file

s/functionalities/functionality/ 

Also, the style bot complained because the change happens around old code with style violation in it. Perhaps it would be nice to have a separate patch to fix the style of that code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213144</commentid>
    <comment_count>19</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-04-15 18:00:15 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/57695.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213150</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-15 18:08:05 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/57695 might have broken Qt Linux Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51787</attachid>
            <date>2010-03-26 15:35:19 -0700</date>
            <delta_ts>2010-03-26 15:39:22 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>36678</filename>
            <type>text/plain</type>
            <size>24717</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2YjZjMzI0Li5mYzRhYmIyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTAtMDMt
MjYgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgdXNpbmcgRm9ybURhdGEgdG8gc2Vu
ZCBhIHNsaWNlZCBmaWxlIHZpYSBYSFIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zNjY3OAorCisgICAgICAgIE1vdmUgY29tbW9uIGZ1bmN0aW9uYWxp
dGllcyB0byB0ZXN0IHNlbmRpbmcgRm9ybURhdGEgaW50byBhIGhlbHBlciBmaWxlCisgICAgICAg
IHNvIHRoYXQgaXQgY2FuIGJlIHNoYXJlZCBieSBGb3JtRGF0YSBsYXlvdXQgdGVzdHMuCisKKyAg
ICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWZvcm0tZGF0YS1jb21tb24u
anM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtZm9y
bS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUuanM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
bG9jYWwvcmVzb3VyY2VzL3NlbmQtZm9ybS1kYXRhLmpzOgorICAgICAgICAqIGh0dHAvdGVzdHMv
bG9jYWwvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQtZmlsZS1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQt
ZmlsZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1k
YXRhLmh0bWw6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6CisgICAgICAgICogcGxh
dGZvcm0vcXQvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoKKwogMjAx
MC0wMy0yMyAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1mb3JtLWRhdGEtY29tbW9uLmpzIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1mb3JtLWRhdGEtY29tbW9u
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2Njc3MWMKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWZv
cm0tZGF0YS1jb21tb24uanMKQEAgLTAsMCArMSw3OCBAQAordmFyIGZpbGVJbnB1dCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CitmaWxlSW5wdXQudHlwZSA9ICdmaWxlJzsKK2Zp
bGVJbnB1dC5zdHlsZS53aWR0aCA9ICIxMDAlIjsgLy8gU28gdGhhdCBhbnkgbWFudWFsIHRlc3Rp
bmcgd2lsbCBzaG93IGZ1bGwgZmlsZSBuYW1lcworLy8gSW1wb3J0YW50IHRoYXQgd2UgcHV0IHRo
aXMgYXQgdGhlIHRvcCBvZiB0aGUgZG9jIHNvIHRoYXQgbG9nZ2luZyBkb2VzIG5vdCBjYXVzZSBp
dCB0byBnbyBvdXQgb2YgdmlldyAod2hlcmUgaXQgY2FuJ3QgYmUgZHJhZ2dlZCB0bykKK2RvY3Vt
ZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGZpbGVJbnB1dCwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxk
KTsKKworZnVuY3Rpb24gbW92ZU1vdXNlVG9DZW50ZXJPZkVsZW1lbnQoZWxlbWVudCkKK3sKKyAg
ICB2YXIgY2VudGVyWCA9IGVsZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGgg
LyAyOworICAgIHZhciBjZW50ZXJZID0gZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNl
dEhlaWdodCAvIDI7CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oY2VudGVyWCwgY2VudGVy
WSk7Cit9CisKK2Z1bmN0aW9uIGdldEZpbGVOYW1lKGZpbGVQYXRoKQoreworICAgIHZhciBpbmRl
eCA9IGZpbGVQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisgICAgaWYgKGluZGV4ID09IC0xKQorICAg
ICAgICByZXR1cm4gZmlsZVBhdGg7CisgICAgcmV0dXJuIGZpbGVQYXRoLnN1YnN0cihpbmRleCAr
IDEpOworfQorCitmdW5jdGlvbiBzZW5kRm9ybURhdGEoZm9ybURhdGFMaXN0LCBmaWxlU2xpY2Vk
KQoreworICAgIHZhciBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgZm9ybURhdGFMaXN0Lmxlbmd0aDsgaSsrKQorICAgICAgICBmb3JtRGF0YS5hcHBl
bmQoZm9ybURhdGFMaXN0W2ldWyduYW1lJ10sIGZvcm1EYXRhTGlzdFtpXVsndmFsdWUnXSk7CisK
KyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLm9wZW4oIlBPU1Qi
LCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9tdWx0aXBh
cnQtcG9zdC1lY2hvLnBocCIsIGZhbHNlKTsKKyAgICB4aHIuc2VuZChmb3JtRGF0YSk7CisgICAg
dmFyIHJlc3BvbnNlVGV4dCA9IHhoci5yZXNwb25zZVRleHQ7CisKKyAgICAvLyBJZiB3ZSdyZSBz
ZW5kaW5nIGEgc2xpY2VkIGZpbGUgYW1vbmcgdGhlIEZvcm1EYXRhLCBhIHVuaXF1ZWx5IGdlbmVy
YXRlZCBuYW1lIHByZWZpeGVkIHdpdGggIkJsb2IiIGlzIHVzZWQuCisgICAgLy8gV2UgbmVlZCB0
byByZW1vdmUgdGhlIHJhbmRvbSBwYXJ0IGluIHRoZSBmaWxlbmFtZSBzbyB0aGF0IHdlIGdldCBj
b25zaXN0ZW50IHJlc3VsdC4KKyAgICBpZiAoZmlsZVNsaWNlZCkKKyAgICAgICAgcmVzcG9uc2VU
ZXh0ID0gcmVzcG9uc2VUZXh0LnJlcGxhY2UoL0Jsb2Jcd3szMn0vZywgIkJsb2IiKTsKKworICAg
IGRlYnVnKHJlc3BvbnNlVGV4dCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RTZW5kaW5nRm9ybURhdGEo
ZGF0YUxpc3QpCit7CisgICAgdmFyIGZpbGVzVG9EcmFnID0gW107CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBkYXRhTGlzdC5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoZGF0YUxpc3RbaV1b
J3R5cGUnXSA9PSAnZmlsZScpCisgICAgICAgICAgICBmaWxlc1RvRHJhZy5wdXNoKGRhdGFMaXN0
W2ldWyd2YWx1ZSddKTsKKyAgICB9CisKKyAgICBpZiAoZmlsZXNUb0RyYWcpIHsKKyAgICAgICAg
ZXZlbnRTZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzKGZpbGVzVG9EcmFnKTsKKyAgICAgICAgbW92
ZU1vdXNlVG9DZW50ZXJPZkVsZW1lbnQoZmlsZUlucHV0KTsKKyAgICAgICAgZXZlbnRTZW5kZXIu
bW91c2VVcCgpOworICAgIH0KKworICAgIHZhciBmaWxlcyA9IGZpbGVJbnB1dC5maWxlczsKKyAg
ICB2YXIgZm9ybURhdGFMaXN0ID0gW107CisgICAgdmFyIGZpbGVTbGljZWQgPSBmYWxzZTsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFMaXN0Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlm
IChkYXRhTGlzdFtpXVsndHlwZSddID09ICdmaWxlJykgeworICAgICAgICAgICAgdmFyIGZpbGVO
YW1lID0gZ2V0RmlsZU5hbWUoZGF0YUxpc3RbaV1bJ3ZhbHVlJ10pOworICAgICAgICAgICAgZm9y
ICh2YXIgaiA9IDA7IGogPCBmaWxlcy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIGlm
IChmaWxlTmFtZSA9PSBmaWxlc1tqXS5uYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBm
aWxlID0gZmlsZXNbal07CisgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhTGlzdFtpXVsnc3Rh
cnQnXSAmJiBkYXRhTGlzdFtpXVsnbGVuZ3RoJ10pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZpbGVTbGljZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUu
c2xpY2UoZGF0YUxpc3RbaV1bJ3N0YXJ0J10sIGRhdGFMaXN0W2ldWydsZW5ndGgnXSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9ybURhdGFMaXN0LnB1c2go
eyduYW1lJzogZGF0YUxpc3RbaV1bJ25hbWUnXSwgJ3ZhbHVlJzogZmlsZX0pOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3JtRGF0YUxpc3QucHVzaCh7J25hbWUnOiBkYXRh
TGlzdFtpXVsnbmFtZSddLCAndmFsdWUnOiBkYXRhTGlzdFtpXVsndmFsdWUnXX0pOworICAgICAg
ICB9CisgICAgfQorCisgICAgc2VuZEZvcm1EYXRhKGZvcm1EYXRhTGlzdCwgZmlsZVNsaWNlZCk7
Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9z
ZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNlZC1maWxlLmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQtZmlsZS5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjIwM2E2Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1mb3JtLWRhdGEt
d2l0aC1zbGljZWQtZmlsZS5qcwpAQCAtMCwwICsxLDM4IEBACitkZXNjcmlwdGlvbigiVGVzdCBm
b3Igc2VuZGluZyBGb3JtRGF0YSB3aXRoIHNsaWNlZCBmaWxlcyB2aWEgWE1MSHR0cFJlcXVlc3Qu
Iik7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGRlYnVnKCJTZW5kaW5nIEZvcm1EYXRh
IGNvbnRhaW5pbmcgb25lIHNsaWNlZCBmaWxlIHdpdGggZW1wdHkgbmFtZToiKTsKKyAgICB0ZXN0
U2VuZGluZ0Zvcm1EYXRhKFsKKyAgICAgICAgeyAndHlwZSc6ICdmaWxlJywgJ25hbWUnOiAnJywg
J3ZhbHVlJzogJ3Jlc291cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0JyB9CisgICAgXSk7
CisKKyAgICBkZWJ1ZygiU2VuZGluZyBGb3JtRGF0YSBjb250YWluaW5nIG9uZSBzbGljZWQgZmls
ZToiKTsKKyAgICB0ZXN0U2VuZGluZ0Zvcm1EYXRhKFsKKyAgICAgICAgeyAndHlwZSc6ICdmaWxl
JywgJ25hbWUnOiAnZmlsZScsICd2YWx1ZSc6ICdyZXNvdXJjZXMvZmlsZS1mb3ItZHJhZy10by1z
ZW5kLnR4dCcsICdzdGFydCcgOiAxLCAnbGVuZ3RoJyA6IDUgfQorICAgIF0pOworCisgICAgZGVi
dWcoIlNlbmRpbmcgRm9ybURhdGEgY29udGFpbmluZyBvbmUgc3RyaW5nIGFuZCBvbmUgc2xpY2Vk
IGZpbGU6Iik7CisgICAgdGVzdFNlbmRpbmdGb3JtRGF0YShbCisgICAgICAgIHsgJ3R5cGUnOiAn
c3RyaW5nJywgJ25hbWUnOiAnc3RyaW5nMScsICd2YWx1ZSc6ICdmb28nIH0sCisgICAgICAgIHsg
J3R5cGUnOiAnZmlsZScsICduYW1lJzogJ2ZpbGUxJywgJ3ZhbHVlJzogJ3Jlc291cmNlcy9maWxl
LWZvci1kcmFnLXRvLXNlbmQudHh0JywgJ3N0YXJ0JyA6IDEsICdsZW5ndGgnIDogNSB9CisgICAg
XSk7CisKKyAgICBkZWJ1ZygiU2VuZGluZyBGb3JtRGF0YSBjb250YWluaW5nIHR3byBzdHJpbmdz
IGFuZCB0d28gc2xpY2VkIGZpbGVzOiIpOworICAgIHRlc3RTZW5kaW5nRm9ybURhdGEoWworICAg
ICAgICB7ICd0eXBlJzogJ3N0cmluZycsICduYW1lJzogJ3N0cmluZzEnLCAndmFsdWUnOiAnZm9v
JyB9LAorICAgICAgICB7ICd0eXBlJzogJ2ZpbGUnLCAnbmFtZSc6ICdmaWxlMScsICd2YWx1ZSc6
ICdyZXNvdXJjZXMvZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dCcsICdzdGFydCcgOiAxLCAnbGVu
Z3RoJyA6IDUgfSwKKyAgICAgICAgeyAndHlwZSc6ICdzdHJpbmcnLCAnbmFtZSc6ICdzdHJpbmcy
JywgJ3ZhbHVlJzogJ2JhcicgfSwKKyAgICAgICAgeyAndHlwZSc6ICdmaWxlJywgJ25hbWUnOiAn
ZmlsZTInLCAndmFsdWUnOiAncmVzb3VyY2VzL2ZpbGUtZm9yLWRyYWctdG8tc2VuZC50eHQnLCAn
c3RhcnQnIDogMywgJ2xlbmd0aCcgOiAyIH0KKyAgICBdKTsKK30KKworaWYgKHdpbmRvdy5ldmVu
dFNlbmRlcikgeworICAgIHJ1blRlc3QoKTsKKyAgICAvLyBDbGVhbiB1cCBhZnRlciBvdXJzZWx2
ZXMKKyAgICBmaWxlSW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmaWxlSW5wdXQpOworfSBl
bHNlIHsKKyAgICB0ZXN0RmFpbGVkKCJUaGlzIHRlc3QgaXMgbm90IGludGVyYWN0aXZlLCBwbGVh
c2UgcnVuIHVzaW5nIER1bXBSZW5kZXJUcmVlIik7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNv
dXJjZXMvc2VuZC1mb3JtLWRhdGEuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jl
c291cmNlcy9zZW5kLWZvcm0tZGF0YS5qcwppbmRleCBkZWY3YzQ0Li5jNjk0MTY4IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWZvcm0tZGF0
YS5qcworKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWZv
cm0tZGF0YS5qcwpAQCAtMSw3MiArMSw1IEBACiBkZXNjcmlwdGlvbigiVGVzdCBmb3Igc2VuZGlu
ZyBGb3JtRGF0YSB2aWEgWE1MSHR0cFJlcXVlc3QuIik7CiAKLXZhciBmaWxlSW5wdXQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotZmlsZUlucHV0LnR5cGUgPSAnZmlsZSc7Ci1m
aWxlSW5wdXQuc3R5bGUud2lkdGggPSAiMTAwJSI7IC8vIFNvIHRoYXQgYW55IG1hbnVhbCB0ZXN0
aW5nIHdpbGwgc2hvdyBmdWxsIGZpbGUgbmFtZXMKLS8vIEltcG9ydGFudCB0aGF0IHdlIHB1dCB0
aGlzIGF0IHRoZSB0b3Agb2YgdGhlIGRvYyBzbyB0aGF0IGxvZ2dpbmcgZG9lcyBub3QgY2F1c2Ug
aXQgdG8gZ28gb3V0IG9mIHZpZXcgKHdoZXJlIGl0IGNhbid0IGJlIGRyYWdnZWQgdG8pCi1kb2N1
bWVudC5ib2R5Lmluc2VydEJlZm9yZShmaWxlSW5wdXQsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGls
ZCk7Ci0KLWZ1bmN0aW9uIG1vdmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KGVsZW1lbnQpCi17Ci0g
ICAgdmFyIGNlbnRlclggPSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRo
IC8gMjsKLSAgICB2YXIgY2VudGVyWSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZz
ZXRIZWlnaHQgLyAyOwotICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGNlbnRlclgsIGNlbnRl
clkpOwotfQotCi1mdW5jdGlvbiBnZXRGaWxlTmFtZShmaWxlUGF0aCkKLXsKLSAgICB2YXIgaW5k
ZXggPSBmaWxlUGF0aC5sYXN0SW5kZXhPZignLycpOwotICAgIGlmIChpbmRleCA9PSAtMSkKLSAg
ICAgICAgcmV0dXJuIGZpbGVQYXRoOwotICAgIHJldHVybiBmaWxlUGF0aC5zdWJzdHIoaW5kZXgg
KyAxKTsKLX0KLQotZnVuY3Rpb24gc2VuZEZvcm1EYXRhKGZvcm1EYXRhTGlzdCkKLXsKLSAgICB2
YXIgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZv
cm1EYXRhTGlzdC5sZW5ndGg7IGkrKykKLSAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZvcm1EYXRh
TGlzdFtpXVsnbmFtZSddLCBmb3JtRGF0YUxpc3RbaV1bJ3ZhbHVlJ10pOwotCi0gICAgdmFyIHho
ciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwotICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8x
MjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvbXVsdGlwYXJ0LXBvc3QtZWNo
by5waHAiLCBmYWxzZSk7Ci0gICAgeGhyLnNlbmQoZm9ybURhdGEpOwotCi0gICAgZGVidWcoeGhy
LnJlc3BvbnNlVGV4dCk7Ci19Ci0KLWZ1bmN0aW9uIHRlc3RTZW5kaW5nRm9ybURhdGEoZGF0YUxp
c3QpCi17Ci0gICAgdmFyIGZpbGVzVG9EcmFnID0gW107Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBkYXRhTGlzdC5sZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoZGF0YUxpc3RbaV1bJ3R5cGUn
XSA9PSAnZmlsZScpCi0gICAgICAgICAgICBmaWxlc1RvRHJhZy5wdXNoKGRhdGFMaXN0W2ldWyd2
YWx1ZSddKTsKLSAgICB9Ci0KLSAgICBpZiAoZmlsZXNUb0RyYWcpIHsKLSAgICAgICAgZXZlbnRT
ZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzKGZpbGVzVG9EcmFnKTsKLSAgICAgICAgbW92ZU1vdXNl
VG9DZW50ZXJPZkVsZW1lbnQoZmlsZUlucHV0KTsKLSAgICAgICAgZXZlbnRTZW5kZXIubW91c2VV
cCgpOwotICAgIH0KLQotICAgIHZhciBmaWxlcyA9IGZpbGVJbnB1dC5maWxlczsKLSAgICB2YXIg
Zm9ybURhdGFMaXN0ID0gW107Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhTGlzdC5sZW5n
dGg7IGkrKykgewotICAgICAgICBpZiAoZGF0YUxpc3RbaV1bJ3R5cGUnXSA9PSAnZmlsZScpIHsK
LSAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGdldEZpbGVOYW1lKGRhdGFMaXN0W2ldWyd2YWx1
ZSddKTsKLSAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZmlsZXMubGVuZ3RoOyBqKysp
IHsKLSAgICAgICAgICAgICAgICBpZiAoZmlsZU5hbWUgPT0gZmlsZXNbal0ubmFtZSkgewotICAg
ICAgICAgICAgICAgICAgICBmb3JtRGF0YUxpc3QucHVzaCh7J25hbWUnOiBkYXRhTGlzdFtpXVsn
bmFtZSddLCAndmFsdWUnOiBmaWxlc1tqXX0pOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBmb3JtRGF0YUxpc3QucHVzaCh7J25hbWUnOiBkYXRhTGlzdFtpXVsnbmFtZSddLCAn
dmFsdWUnOiBkYXRhTGlzdFtpXVsndmFsdWUnXX0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
c2VuZEZvcm1EYXRhKGZvcm1EYXRhTGlzdCk7Ci19Ci0KIGZ1bmN0aW9uIHJ1blRlc3QoKQogewog
ICAgIGRlYnVnKCJTZW5kaW5nIEZvcm1EYXRhIGNvbnRhaW5pbmcgb25lIHN0cmluZyB3aXRoIGVt
cHR5IG5hbWU6Iik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Nl
bmQtZm9ybS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2NhbC9zZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNlZC1maWxlLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2E1MGE0Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWZvcm0tZGF0YS13
aXRoLXNsaWNlZC1maWxlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACitUZXN0IGZvciBz
ZW5kaW5nIEZvcm1EYXRhIHdpdGggc2xpY2VkIGZpbGVzIHZpYSBYTUxIdHRwUmVxdWVzdC4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1NlbmRpbmcgRm9ybURhdGEgY29udGFpbmlu
ZyBvbmUgc2xpY2VkIGZpbGUgd2l0aCBlbXB0eSBuYW1lOgorCitTZW5kaW5nIEZvcm1EYXRhIGNv
bnRhaW5pbmcgb25lIHNsaWNlZCBmaWxlOgorZmlsZT1CbG9iOjIzNDU2CitTZW5kaW5nIEZvcm1E
YXRhIGNvbnRhaW5pbmcgb25lIHN0cmluZyBhbmQgb25lIHNsaWNlZCBmaWxlOgorc3RyaW5nMT1m
b28mZmlsZTE9QmxvYjoyMzQ1NgorU2VuZGluZyBGb3JtRGF0YSBjb250YWluaW5nIHR3byBzdHJp
bmdzIGFuZCB0d28gc2xpY2VkIGZpbGVzOgorc3RyaW5nMT1mb28mc3RyaW5nMj1iYXImZmlsZTE9
QmxvYjoyMzQ1NiZmaWxlMj1CbG9iOjQ1CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9s
b2NhbC9zZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNlZC1maWxlLmh0bWwgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzE0OWEwCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNl
ZC1maWxlLmh0bWwKQEAgLTAsMCArMSwxNCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9J
RVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgor
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2VuZC1mb3JtLWRh
dGEtY29tbW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2VuZC1mb3Jt
LWRhdGEtd2l0aC1zbGljZWQtZmlsZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1m
b3JtLWRhdGEuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRh
dGEuaHRtbAppbmRleCAxOGM3MGIxLi43YTJiMzE3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1kYXRhLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2NhbC9zZW5kLWZvcm0tZGF0YS5odG1sCkBAIC03LDYgKzcsNyBAQAogPGJvZHk+
CiA8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9zZW5kLWZvcm0tZGF0YS1jb21tb24uanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9InJlc291cmNlcy9zZW5kLWZvcm0tZGF0YS5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KIDwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lw
cGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggODBlYmM1Mi4uZTU0
YTc2MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTM0MjQsNiArMzQyNCw3IEBAIGh0
dHAvdGVzdHMvbG9hZGluZy90ZXh0LWNvbnRlbnQtdHlwZS13aXRoLWJpbmFyeS1leHRlbnNpb24u
aHRtbAogaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5odG1sCiBodHRwL3Rlc3Rz
L2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5odG1sCiBodHRwL3Rlc3RzL2xvY2FsL3Nl
bmQtZm9ybS1kYXRhLmh0bWwKK2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEtd2l0aC1z
bGljZWQtZmlsZS5odG1sCiBodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLXBsYXktc3RhbGwtc2Vlay5o
dG1sCiBodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLXBsYXktc3RhbGwuaHRtbAogaHR0cC90ZXN0cy9t
ZWRpYS92aWRlby1zZWVrYWJsZS1zdGFsbC5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9xdC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAppbmRl
eCAyYzkzOTQxLi5iODNjMjVjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9T
a2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKQEAgLTUwLDYgKzUw
LDcgQEAgaHR0cC90ZXN0cy9sb2NhbC9kcmFnLW92ZXItcmVtb3RlLWNvbnRlbnQuaHRtbAogaHR0
cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5odG1sCiBodHRwL3Rlc3RzL2xvY2FsL3Nl
bmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5odG1sCiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1k
YXRhLmh0bWwKK2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQtZmls
ZS5odG1sCiAKICMgRmFpbGluZyBuYXZpZ2F0aW9uIHRlc3RzCiBodHRwL3Rlc3RzL25hdmlnYXRp
b24vYW5jaG9yLWZyYW1lcy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93
aW4vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCmluZGV4IDY2Njhl
NzguLjdjNTM3YWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVk
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCkBAIC02NjYsNiArNjY2LDcg
QEAgZmFzdC9mb3Jtcy9pbnB1dC1zZWxlY3RlZG9wdGlvbi5odG1sCiBodHRwL3Rlc3RzL2xvY2Fs
L3NlbmQtZHJhZ2dlZC1maWxlLmh0bWwKIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJh
Z2dlZC1maWxlLmh0bWwKIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEuaHRtbAoraHR0
cC90ZXN0cy9sb2NhbC9zZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNlZC1maWxlLmh0bWwKIAogIyA8
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5Mjg5PgogcGx1Z2lucy9k
ZXN0cm95LWR1cmluZy1ucHAtbmV3Lmh0bWwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDk0NjE0ZS4uZTY2MTIzMiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwzMyBA
QAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAgIFN1cHBv
cnQgdXNpbmcgRm9ybURhdGEgdG8gc2VuZCBhIHNsaWNlZCBmaWxlIHZpYSBYSFIuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjY3OAorCisgICAgICAg
IFRlc3Q6IGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQtZmlsZS5o
dG1sCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogaHRtbC9CbG9iLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjppc0ZpbGUpOgorICAg
ICAgICAqIGh0bWwvRE9NRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NRm9ybURh
dGE6OmFwcGVuZCk6CisgICAgICAgICogaHRtbC9GaWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpG
aWxlOjppc0ZpbGUpOgorICAgICAgICAqIGh0bWwvRm9ybURhdGFMaXN0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtRGF0YUxpc3Q6OmFwcGVuZEJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGFMaXN0OjpJdGVtOjpJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6
SXRlbTo6YmxvYik6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1E
YXRhOjphcHBlbmRET01Gb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMv
Rm9ybURhdGFTdHJlYW1NYWMubW06CisgICAgICAgIChXZWJDb3JlOjpjbG9zZUN1cnJlbnRTdHJl
YW0pOgorCisyMDEwLTAzLTI2ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBBZGQgc3VwcG9ydCB0
byBjcmVhdGUgVVVJRCBzdHJpbmcuCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNjQ3MgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IDI2YmRjNjAuLmI2OWE2M2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yNDg3LDYgKzI0ODcsOCBAQAogCQk5RjcyMzA0RjExMTg0
QjQxMDBBRDAxMjYgLyogU2NyaXB0UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUY3MjMwNEMxMTE4NEI0MTAwQUQwMTI2IC8qIFNjcmlwdFBy
b2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk5RjcyMzA1MDExMTg0QjQxMDBBRDAxMjYgLyogU2NyaXB0UHJvZmlsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUY3MjMwNEQxMTE4NEI0MTAw
QUQwMTI2IC8qIFNjcmlwdFByb2ZpbGVyLmNwcCAqLzsgfTsKIAkJOUY3MjMwNTExMTE4NEI0MTAw
QUQwMTI2IC8qIFNjcmlwdFByb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5RjcyMzA0RTExMTg0QjQxMDBBRDAxMjYgLyogU2NyaXB0UHJvZmls
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlB
MTM2QTAwQzExMzREQkQyMDBDQzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhy
b3R0bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTEzNkEwMEExMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRo
cm90dGxlLmNwcCAqLzsgfTsKKwkJQTEzNkEwMEQxMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMTM2QTAwQjExMzREQkQyMDBDQzhENTAgLyogWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaCAqLzsgfTsKIAkJQTE3QzgxMjIwRjJBNUNGNzAw
NURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTdDODEyMDBGMkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVs
ZW1lbnRGYWN0b3J5LmNwcCAqLzsgfTsKIAkJQTE3QzgxMjMwRjJBNUNGNzAwNURBQUVCIC8qIEhU
TUxFbGVtZW50RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTE3QzgxMjEwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5o
ICovOyB9OwogCQlBNDNCRjU5ODExNDkyOTBBMDBDNjQzQ0EgLyogSFRNTFByb2dyZXNzRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNDNC
RjU5NjExNDkyOTBBMDBDNjQzQ0EgLyogSFRNTFByb2dyZXNzRWxlbWVudC5jcHAgKi87IH07CkBA
IC00Mzk1LDggKzQzOTcsNiBAQAogCQlCQzc3MkI0MDBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTU3R5
bGVTZWxlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkM3NzJCM0EwQzRFQTkxRTAwODMyODVGIC8qIENTU1N0eWxlU2VsZWN0b3IuaCAqLzsgfTsK
IAkJQkM3NzJDNDYwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNzcyQzQ0MEM0RUIyQzYw
MDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVzdC5jcHAgKi87IH07CiAJCUJDNzcyQzQ3MEM0RUIyQzYw
MDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNDUwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1
ZXN0LmggKi87IH07Ci0JCUExMzZBMDBDMTEzNERCRDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMTM2QTAwQTExMzREQkQyMDBDQzhENTAgLyogWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwICovOyB9OwotCQlBMTM2QTAwRDExMzREQkQyMDBD
QzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMzZBMDBCMTEzNERCRDIwMEND
OEQ1MCAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oICovOyB9OwogCQlC
Qzc3MkM0RTBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkM0QzBDNEVCMzA0MDA4
MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5jcHAgKi87IH07CiAJCUJDNzcyQzRGMEM0RUIzMDQw
MDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkM0RDBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVS
ZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUJDNzcyQzVFMEM0RUIzNDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5TWFjLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNUQwQzRF
QjM0NDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnlNYWMubW0gKi87IH07CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2h0bWwvQmxvYi5oIGIvV2ViQ29yZS9odG1sL0Jsb2IuaAppbmRleCA2MTA4NDJl
Li5lOGI1ZjNmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQmxvYi5oCisrKyBiL1dlYkNvcmUv
aHRtbC9CbG9iLmgKQEAgLTUzLDYgKzUzLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+Qmxv
YigpIHsgfQogCisgICAgdmlydHVhbCBib29sIGlzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICBQYXNzUmVmUHRyPEJsb2I+IHNsaWNl
KGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCkgY29uc3Q7CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5jcHAgYi9XZWJDb3JlL2h0bWwvRE9NRm9y
bURhdGEuY3BwCmluZGV4IDE0NDFlOGIuLmY4NDg4OTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRt
bC9ET01Gb3JtRGF0YS5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0RPTUZvcm1EYXRhLmNwcApAQCAt
NTAsMTEgKzUwLDggQEAgdm9pZCBET01Gb3JtRGF0YTo6YXBwZW5kKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIAogdm9pZCBET01Gb3JtRGF0YTo6YXBwZW5kKGNvbnN0
IFN0cmluZyYgbmFtZSwgQmxvYiogYmxvYikKIHsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBzdXBw
b3J0IHNsaWNlZCBmaWxlIHdoZW4gQmxvYi5zbGljZSBzdXBwb3J0IGlzIGxhbmRlZC4KLSAgICBp
ZiAoIW5hbWUuaXNFbXB0eSgpICYmICFibG9iLT5wYXRoKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IFJlZlB0cjxGaWxlPiBmaWxlID0gc3RhdGljX2Nhc3Q8RmlsZSo+KGJsb2IpOwotICAgICAgICBh
cHBlbmRGaWxlKG5hbWUsIGZpbGUucmVsZWFzZSgpKTsKLSAgICB9CisgICAgaWYgKCFuYW1lLmlz
RW1wdHkoKSkKKyAgICAgICAgYXBwZW5kQmxvYihuYW1lLCBibG9iKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGUuaCBiL1dlYkNvcmUv
aHRtbC9GaWxlLmgKaW5kZXggZGRhNDgyYS4uMDY1ZGQ4NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL0ZpbGUuaAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZS5oCkBAIC0zOSw2ICszOSw4IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlKHBhdGgpKTsKICAgICB9CiAK
KyAgICB2aXJ0dWFsIGJvb2wgaXNGaWxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAg
Y29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgY29uc3Qg
U3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaCBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaApp
bmRleCA4Mzk4ZGJjLi5jYzkzNWFkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFM
aXN0LmgKKysrIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oCkBAIC0yMSw4ICsyMSw4IEBA
CiAjaWZuZGVmIEZvcm1EYXRhTGlzdF9oCiAjZGVmaW5lIEZvcm1EYXRhTGlzdF9oCiAKKyNpbmNs
dWRlICJCbG9iLmgiCiAjaW5jbHVkZSAiQ1N0cmluZy5oIgotI2luY2x1ZGUgIkZpbGUuaCIKICNp
bmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsMjEg
KzM3LDIxIEBAIHB1YmxpYzoKICAgICAgICAgeyBhcHBlbmRTdHJpbmcoa2V5KTsgYXBwZW5kU3Ry
aW5nKHZhbHVlKTsgfQogICAgIHZvaWQgYXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIGtleSwgaW50
IHZhbHVlKQogICAgICAgICB7IGFwcGVuZFN0cmluZyhrZXkpOyBhcHBlbmRTdHJpbmcoU3RyaW5n
OjpudW1iZXIodmFsdWUpKTsgfQotICAgIHZvaWQgYXBwZW5kRmlsZShjb25zdCBTdHJpbmcmIGtl
eSwgUGFzc1JlZlB0cjxGaWxlPiBmaWxlKQotICAgICAgICB7IGFwcGVuZFN0cmluZyhrZXkpOyBt
X2xpc3QuYXBwZW5kKGZpbGUpOyB9CisgICAgdm9pZCBhcHBlbmRCbG9iKGNvbnN0IFN0cmluZyYg
a2V5LCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCisgICAgICAgIHsgYXBwZW5kU3RyaW5nKGtleSk7
IG1fbGlzdC5hcHBlbmQoYmxvYik7IH0KIAogICAgIGNsYXNzIEl0ZW0gewogICAgIHB1YmxpYzoK
ICAgICAgICAgSXRlbSgpIHsgfQogICAgICAgICBJdGVtKGNvbnN0IENTdHJpbmcmIGRhdGEpIDog
bV9kYXRhKGRhdGEpIHsgfQotICAgICAgICBJdGVtKFBhc3NSZWZQdHI8RmlsZT4gZmlsZSkgOiBt
X2ZpbGUoZmlsZSkgeyB9CisgICAgICAgIEl0ZW0oUGFzc1JlZlB0cjxCbG9iPiBibG9iKSA6IG1f
YmxvYihibG9iKSB7IH0KIAogICAgICAgICBjb25zdCBDU3RyaW5nJiBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhOyB9Ci0gICAgICAgIEZpbGUqIGZpbGUoKSBjb25zdCB7IHJldHVybiBtX2Zp
bGUuZ2V0KCk7IH0KKyAgICAgICAgQmxvYiogYmxvYigpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5n
ZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ1N0cmluZyBtX2RhdGE7Ci0gICAgICAg
IFJlZlB0cjxGaWxlPiBtX2ZpbGU7CisgICAgICAgIFJlZlB0cjxCbG9iPiBtX2Jsb2I7CiAgICAg
fTsKIAogICAgIGNvbnN0IFZlY3RvcjxJdGVtPiYgbGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlz
dDsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCmluZGV4IDZhMjE0YWIuLjMxZGFjM2UgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9XZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTEzNTksMTIgKzEzNTksMTIgQEAgYm9vbCBI
VE1MSW5wdXRFbGVtZW50OjphcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmIGVuY29kaW5nLCBi
b29sIG11bHRpcGFydCkKICAgICAgICAgICAgIC8vIElmIG5vIGZpbGVuYW1lIGF0IGFsbCBpcyBl
bnRlcmVkLCByZXR1cm4gc3VjY2Vzc2Z1bCBidXQgZW1wdHkuCiAgICAgICAgICAgICAvLyBOdWxs
IHdvdWxkIGJlIG1vcmUgbG9naWNhbCwgYnV0IE5ldHNjYXBlIHBvc3RzIGFuIGVtcHR5IGZpbGUu
IEFyZ2guCiAgICAgICAgICAgICBpZiAoIW51bUZpbGVzKSB7Ci0gICAgICAgICAgICAgICAgZW5j
b2RpbmcuYXBwZW5kRmlsZShuYW1lKCksIEZpbGU6OmNyZWF0ZSgiIikpOworICAgICAgICAgICAg
ICAgIGVuY29kaW5nLmFwcGVuZEJsb2IobmFtZSgpLCBGaWxlOjpjcmVhdGUoIiIpKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZpbGVzOyArK2kpCi0gICAgICAgICAgICAgICAgZW5j
b2RpbmcuYXBwZW5kRmlsZShuYW1lKCksIG1fZmlsZUxpc3QtPml0ZW0oaSkpOworICAgICAgICAg
ICAgICAgIGVuY29kaW5nLmFwcGVuZEJsb2IobmFtZSgpLCBtX2ZpbGVMaXN0LT5pdGVtKGkpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YS5jcHAKaW5kZXggNTk3Zjg1OS4uZmYzM2JmMyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCkBAIC0yNywxMSArMjcsMTMgQEAKICNpbmNsdWRlICJD
aHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJET01Gb3JtRGF0YS5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNs
dWRlICJGb3JtRGF0YUJ1aWxkZXIuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2luY2x1ZGUgPHd0
Zi9VVUlELmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTg3LDkgKzE4OSwyMyBAQCB2
b2lkIEZvcm1EYXRhOjphcHBlbmRET01Gb3JtRGF0YShjb25zdCBET01Gb3JtRGF0YSYgZG9tRm9y
bURhdGEsIGJvb2wgaXNNdWx0aVBhcgogCiAgICAgICAgICAgICBib29sIHNob3VsZEdlbmVyYXRl
RmlsZSA9IGZhbHNlOwogICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBGSUxF
LCB0aGVuIHdlIGFsc28gbmVlZCB0byBpbmNsdWRlIHRoZSBmaWxlbmFtZQotICAgICAgICAgICAg
aWYgKHZhbHVlLmZpbGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9
IHZhbHVlLmZpbGUoKS0+cGF0aCgpOwotICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9
IHZhbHVlLmZpbGUoKS0+ZmlsZU5hbWUoKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCkp
IHsKKyAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSB2YWx1ZS5ibG9iKCktPnBh
dGgoKTsKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICAgICAgICAgICAgICBTdHJpbmcgZmls
ZU5hbWU7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJsb2IoKS0+aXNGaWxlKCkpCisgICAg
ICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gc3RhdGljX2Nhc3Q8RmlsZSo+KHZhbHVlLmJsb2Io
KSktPmZpbGVOYW1lKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIElmIGEgYmxvYiBpcyBzbGljZWQgZnJvbSBhIGZpbGUsIGl0IGRvZXMgbm90IGhhdmUg
dGhlIGZpbGVuYW1lLiBJbiB0aGlzIGNhc2UsIGxldCdzIHByb2R1Y2UgYSB1bmlxdWUgZmlsZW5h
bWUuCisgICAgICAgICAgICAgICAgICAgIGNoYXIgdXVpZFN0cmluZ1szN107CisgICAgICAgICAg
ICAgICAgICAgIFdURjo6Y3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZyh1dWlkU3RyaW5nLCAzNyk7
CisgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gIkJsb2IiOworICAgICAgICAgICAgICAg
ICAgICBmaWxlTmFtZSArPSB1dWlkU3RyaW5nOworICAgICAgICAgICAgICAgICAgICBmaWxlTmFt
ZS5yZXBsYWNlKCItIiwgIiIpOyAvLyBGb3Igc2FmZSwgcmVtb3ZlICctJyBpbiBjYXNlIHRoYXQg
Y2VydGFpbiBzZXJ2ZXIgZG9lcyBub3QgbGlrZSBpdCB0byBiZSBpbiB0aGUgZmlsZW5hbWUuCisg
ICAgICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUg
PSBzdGF0aWNfY2FzdDxGaWxlKj4odmFsdWUuYmxvYigpKS0+ZmlsZU5hbWUoKTsKKyNlbmRpZgog
CiAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZ5IGEgZmlsZW5h
bWUgaWYgaXQncyBnb2luZyB0byBnZW5lcmF0ZSBhIHJlcGxhY2VtZW50IGZpbGUgZm9yIHRoZSB1
cGxvYWQuCiAgICAgICAgICAgICAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgewpAQCAtMjA0LDcg
KzIyMCwxMiBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmRET01Gb3JtRGF0YShjb25zdCBET01Gb3Jt
RGF0YSYgZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0aVBhcgogICAgICAgICAgICAgICAgIC8vIFdl
IGhhdmUgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWU9Ii4uIiBwYXJ0IGluIHRoZSBoZWFkZXIsIGV2
ZW4gaWYgdGhlIGZpbGVuYW1lIGlzIGVtcHR5CiAgICAgICAgICAgICAgICAgZm9ybURhdGFCdWls
ZGVyLmFkZEZpbGVuYW1lVG9NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBlbmNvZGluZywgZmlsZU5h
bWUpOwogCisgICAgICAgICAgICAgICAgLy8gSWYgYSBibG9iIGlzIHNsaWNlZCBmcm9tIGEgZmls
ZSwgZG8gbm90IGFkZCB0aGUgY29udGVudCB0eXBlLiAKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkK
KyAgICAgICAgICAgICAgICBpZiAoIWZpbGVOYW1lLmlzRW1wdHkoKSAmJiB2YWx1ZS5ibG9iKCkt
PmlzRmlsZSgpKSB7CisjZWxzZQogICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0
eSgpKSB7CisjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBNSU1FVHlw
ZVJlZ2lzdHJ5IGZ1bmN0aW9uJ3MgbmFtZSBtYWtlcyBpdCBzb3VuZCBsaWtlIGl0IHRha2VzIGEg
cGF0aCwKICAgICAgICAgICAgICAgICAgICAgLy8gbm90IGp1c3QgYSBiYXNlbmFtZS4gQnV0IGZp
bGVuYW1lIGlzIG5vdCB0aGUgcGF0aC4gQnV0IG5vdGUgdGhhdCBpdCdzIG5vdCBzYWZlIHRvCiAg
ICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgdXNlIHBhdGggaW5zdGVhZCBzaW5jZSBpbiB0aGUg
Z2VuZXJhdGVkLWZpbGUgY2FzZSBpdCB3aWxsIG5vdCByZWZsZWN0IHRoZQpAQCAtMjIxLDggKzI0
MiwxMiBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmRET01Gb3JtRGF0YShjb25zdCBET01Gb3JtRGF0
YSYgZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0aVBhcgogICAgICAgICAgICAgYXBwZW5kRGF0YSho
ZWFkZXIuZGF0YSgpLCBoZWFkZXIuc2l6ZSgpKTsKICAgICAgICAgICAgIGlmIChzaXplX3QgZGF0
YVNpemUgPSB2YWx1ZS5kYXRhKCkubGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgYXBwZW5kRGF0
YSh2YWx1ZS5kYXRhKCkuZGF0YSgpLCBkYXRhU2l6ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh2
YWx1ZS5maWxlKCkgJiYgIXZhbHVlLmZpbGUoKS0+cGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICBhcHBlbmRGaWxlKHZhbHVlLmZpbGUoKS0+cGF0aCgpLCBzaG91bGRHZW5lcmF0ZUZp
bGUpOworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuYmxvYigpICYmICF2YWx1ZS5ibG9iKCkt
PnBhdGgoKS5pc0VtcHR5KCkpCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgICAgICAgICAg
ICAgYXBwZW5kRmlsZVJhbmdlKHZhbHVlLmJsb2IoKS0+cGF0aCgpLCB2YWx1ZS5ibG9iKCktPnN0
YXJ0KCksIHZhbHVlLmJsb2IoKS0+bGVuZ3RoKCksIHZhbHVlLmJsb2IoKS0+bW9kaWZpY2F0aW9u
VGltZSgpLCBzaG91bGRHZW5lcmF0ZUZpbGUpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBhcHBl
bmRGaWxlKHZhbHVlLmJsb2IoKS0+cGF0aCgpLCBzaG91bGRHZW5lcmF0ZUZpbGUpOworI2VuZGlm
CiAKICAgICAgICAgICAgIGFwcGVuZERhdGEoIlxyXG4iLCAyKTsKICAgICAgICAgfSBlbHNlIHsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1N
YWMubW0gYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1t
CmluZGV4IDVlOGMzZmYuLjNiODViODAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQpAQCAtMTQyLDYgKzE0Miw5IEBAIHN0YXRpYyB2
b2lkIGNsb3NlQ3VycmVudFN0cmVhbShGb3JtU3RyZWFtRmllbGRzICpmb3JtKQogICAgICAgICBD
RlJlYWRTdHJlYW1TZXRDbGllbnQoZm9ybS0+Y3VycmVudFN0cmVhbSwga0NGU3RyZWFtRXZlbnRO
b25lLCBOVUxMLCBOVUxMKTsKICAgICAgICAgQ0ZSZWxlYXNlKGZvcm0tPmN1cnJlbnRTdHJlYW0p
OwogICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtID0gTlVMTDsKKyNpZiBFTkFCTEUoQkxPQl9T
TElDRSkKKyAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gQmxvYjo6dG9F
bmRPZkZpbGU7CisjZW5kaWYKICAgICB9CiAgICAgaWYgKGZvcm0tPmN1cnJlbnREYXRhKSB7CiAg
ICAgICAgIGZhc3RGcmVlKGZvcm0tPmN1cnJlbnREYXRhKTsK
</data>
<flag name="commit-queue"
          id="35134"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>51788</attachid>
            <date>2010-03-26 15:39:22 -0700</date>
            <delta_ts>2010-03-26 15:40:24 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>36678_2</filename>
            <type>application/octet-stream</type>
            <size>21683</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2YjZjMzI0Li5mYzRhYmIyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTAtMDMt
MjYgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgdXNpbmcgRm9ybURhdGEgdG8gc2Vu
ZCBhIHNsaWNlZCBmaWxlIHZpYSBYSFIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zNjY3OAorCisgICAgICAgIE1vdmUgY29tbW9uIGZ1bmN0aW9uYWxp
dGllcyB0byB0ZXN0IHNlbmRpbmcgRm9ybURhdGEgaW50byBhIGhlbHBlciBmaWxlCisgICAgICAg
IHNvIHRoYXQgaXQgY2FuIGJlIHNoYXJlZCBieSBGb3JtRGF0YSBsYXlvdXQgdGVzdHMuCisKKyAg
ICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWZvcm0tZGF0YS1jb21tb24u
anM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtZm9y
bS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUuanM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
bG9jYWwvcmVzb3VyY2VzL3NlbmQtZm9ybS1kYXRhLmpzOgorICAgICAgICAqIGh0dHAvdGVzdHMv
bG9jYWwvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQtZmlsZS1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQt
ZmlsZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1k
YXRhLmh0bWw6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6CisgICAgICAgICogcGxh
dGZvcm0vcXQvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoKKwogMjAx
MC0wMy0yMyAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1mb3JtLWRhdGEtY29tbW9uLmpzIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1mb3JtLWRhdGEtY29tbW9u
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2Njc3MWMKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWZv
cm0tZGF0YS1jb21tb24uanMKQEAgLTAsMCArMSw3OCBAQAordmFyIGZpbGVJbnB1dCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CitmaWxlSW5wdXQudHlwZSA9ICdmaWxlJzsKK2Zp
bGVJbnB1dC5zdHlsZS53aWR0aCA9ICIxMDAlIjsgLy8gU28gdGhhdCBhbnkgbWFudWFsIHRlc3Rp
bmcgd2lsbCBzaG93IGZ1bGwgZmlsZSBuYW1lcworLy8gSW1wb3J0YW50IHRoYXQgd2UgcHV0IHRo
aXMgYXQgdGhlIHRvcCBvZiB0aGUgZG9jIHNvIHRoYXQgbG9nZ2luZyBkb2VzIG5vdCBjYXVzZSBp
dCB0byBnbyBvdXQgb2YgdmlldyAod2hlcmUgaXQgY2FuJ3QgYmUgZHJhZ2dlZCB0bykKK2RvY3Vt
ZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGZpbGVJbnB1dCwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxk
KTsKKworZnVuY3Rpb24gbW92ZU1vdXNlVG9DZW50ZXJPZkVsZW1lbnQoZWxlbWVudCkKK3sKKyAg
ICB2YXIgY2VudGVyWCA9IGVsZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGgg
LyAyOworICAgIHZhciBjZW50ZXJZID0gZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNl
dEhlaWdodCAvIDI7CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oY2VudGVyWCwgY2VudGVy
WSk7Cit9CisKK2Z1bmN0aW9uIGdldEZpbGVOYW1lKGZpbGVQYXRoKQoreworICAgIHZhciBpbmRl
eCA9IGZpbGVQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisgICAgaWYgKGluZGV4ID09IC0xKQorICAg
ICAgICByZXR1cm4gZmlsZVBhdGg7CisgICAgcmV0dXJuIGZpbGVQYXRoLnN1YnN0cihpbmRleCAr
IDEpOworfQorCitmdW5jdGlvbiBzZW5kRm9ybURhdGEoZm9ybURhdGFMaXN0LCBmaWxlU2xpY2Vk
KQoreworICAgIHZhciBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgZm9ybURhdGFMaXN0Lmxlbmd0aDsgaSsrKQorICAgICAgICBmb3JtRGF0YS5hcHBl
bmQoZm9ybURhdGFMaXN0W2ldWyduYW1lJ10sIGZvcm1EYXRhTGlzdFtpXVsndmFsdWUnXSk7CisK
KyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLm9wZW4oIlBPU1Qi
LCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9tdWx0aXBh
cnQtcG9zdC1lY2hvLnBocCIsIGZhbHNlKTsKKyAgICB4aHIuc2VuZChmb3JtRGF0YSk7CisgICAg
dmFyIHJlc3BvbnNlVGV4dCA9IHhoci5yZXNwb25zZVRleHQ7CisKKyAgICAvLyBJZiB3ZSdyZSBz
ZW5kaW5nIGEgc2xpY2VkIGZpbGUgYW1vbmcgdGhlIEZvcm1EYXRhLCBhIHVuaXF1ZWx5IGdlbmVy
YXRlZCBuYW1lIHByZWZpeGVkIHdpdGggIkJsb2IiIGlzIHVzZWQuCisgICAgLy8gV2UgbmVlZCB0
byByZW1vdmUgdGhlIHJhbmRvbSBwYXJ0IGluIHRoZSBmaWxlbmFtZSBzbyB0aGF0IHdlIGdldCBj
b25zaXN0ZW50IHJlc3VsdC4KKyAgICBpZiAoZmlsZVNsaWNlZCkKKyAgICAgICAgcmVzcG9uc2VU
ZXh0ID0gcmVzcG9uc2VUZXh0LnJlcGxhY2UoL0Jsb2Jcd3szMn0vZywgIkJsb2IiKTsKKworICAg
IGRlYnVnKHJlc3BvbnNlVGV4dCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RTZW5kaW5nRm9ybURhdGEo
ZGF0YUxpc3QpCit7CisgICAgdmFyIGZpbGVzVG9EcmFnID0gW107CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBkYXRhTGlzdC5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoZGF0YUxpc3RbaV1b
J3R5cGUnXSA9PSAnZmlsZScpCisgICAgICAgICAgICBmaWxlc1RvRHJhZy5wdXNoKGRhdGFMaXN0
W2ldWyd2YWx1ZSddKTsKKyAgICB9CisKKyAgICBpZiAoZmlsZXNUb0RyYWcpIHsKKyAgICAgICAg
ZXZlbnRTZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzKGZpbGVzVG9EcmFnKTsKKyAgICAgICAgbW92
ZU1vdXNlVG9DZW50ZXJPZkVsZW1lbnQoZmlsZUlucHV0KTsKKyAgICAgICAgZXZlbnRTZW5kZXIu
bW91c2VVcCgpOworICAgIH0KKworICAgIHZhciBmaWxlcyA9IGZpbGVJbnB1dC5maWxlczsKKyAg
ICB2YXIgZm9ybURhdGFMaXN0ID0gW107CisgICAgdmFyIGZpbGVTbGljZWQgPSBmYWxzZTsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFMaXN0Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlm
IChkYXRhTGlzdFtpXVsndHlwZSddID09ICdmaWxlJykgeworICAgICAgICAgICAgdmFyIGZpbGVO
YW1lID0gZ2V0RmlsZU5hbWUoZGF0YUxpc3RbaV1bJ3ZhbHVlJ10pOworICAgICAgICAgICAgZm9y
ICh2YXIgaiA9IDA7IGogPCBmaWxlcy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIGlm
IChmaWxlTmFtZSA9PSBmaWxlc1tqXS5uYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBm
aWxlID0gZmlsZXNbal07CisgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhTGlzdFtpXVsnc3Rh
cnQnXSAmJiBkYXRhTGlzdFtpXVsnbGVuZ3RoJ10pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZpbGVTbGljZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUu
c2xpY2UoZGF0YUxpc3RbaV1bJ3N0YXJ0J10sIGRhdGFMaXN0W2ldWydsZW5ndGgnXSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9ybURhdGFMaXN0LnB1c2go
eyduYW1lJzogZGF0YUxpc3RbaV1bJ25hbWUnXSwgJ3ZhbHVlJzogZmlsZX0pOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3JtRGF0YUxpc3QucHVzaCh7J25hbWUnOiBkYXRh
TGlzdFtpXVsnbmFtZSddLCAndmFsdWUnOiBkYXRhTGlzdFtpXVsndmFsdWUnXX0pOworICAgICAg
ICB9CisgICAgfQorCisgICAgc2VuZEZvcm1EYXRhKGZvcm1EYXRhTGlzdCwgZmlsZVNsaWNlZCk7
Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9z
ZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNlZC1maWxlLmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQtZmlsZS5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjIwM2E2Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1mb3JtLWRhdGEt
d2l0aC1zbGljZWQtZmlsZS5qcwpAQCAtMCwwICsxLDM4IEBACitkZXNjcmlwdGlvbigiVGVzdCBm
b3Igc2VuZGluZyBGb3JtRGF0YSB3aXRoIHNsaWNlZCBmaWxlcyB2aWEgWE1MSHR0cFJlcXVlc3Qu
Iik7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGRlYnVnKCJTZW5kaW5nIEZvcm1EYXRh
IGNvbnRhaW5pbmcgb25lIHNsaWNlZCBmaWxlIHdpdGggZW1wdHkgbmFtZToiKTsKKyAgICB0ZXN0
U2VuZGluZ0Zvcm1EYXRhKFsKKyAgICAgICAgeyAndHlwZSc6ICdmaWxlJywgJ25hbWUnOiAnJywg
J3ZhbHVlJzogJ3Jlc291cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0JyB9CisgICAgXSk7
CisKKyAgICBkZWJ1ZygiU2VuZGluZyBGb3JtRGF0YSBjb250YWluaW5nIG9uZSBzbGljZWQgZmls
ZToiKTsKKyAgICB0ZXN0U2VuZGluZ0Zvcm1EYXRhKFsKKyAgICAgICAgeyAndHlwZSc6ICdmaWxl
JywgJ25hbWUnOiAnZmlsZScsICd2YWx1ZSc6ICdyZXNvdXJjZXMvZmlsZS1mb3ItZHJhZy10by1z
ZW5kLnR4dCcsICdzdGFydCcgOiAxLCAnbGVuZ3RoJyA6IDUgfQorICAgIF0pOworCisgICAgZGVi
dWcoIlNlbmRpbmcgRm9ybURhdGEgY29udGFpbmluZyBvbmUgc3RyaW5nIGFuZCBvbmUgc2xpY2Vk
IGZpbGU6Iik7CisgICAgdGVzdFNlbmRpbmdGb3JtRGF0YShbCisgICAgICAgIHsgJ3R5cGUnOiAn
c3RyaW5nJywgJ25hbWUnOiAnc3RyaW5nMScsICd2YWx1ZSc6ICdmb28nIH0sCisgICAgICAgIHsg
J3R5cGUnOiAnZmlsZScsICduYW1lJzogJ2ZpbGUxJywgJ3ZhbHVlJzogJ3Jlc291cmNlcy9maWxl
LWZvci1kcmFnLXRvLXNlbmQudHh0JywgJ3N0YXJ0JyA6IDEsICdsZW5ndGgnIDogNSB9CisgICAg
XSk7CisKKyAgICBkZWJ1ZygiU2VuZGluZyBGb3JtRGF0YSBjb250YWluaW5nIHR3byBzdHJpbmdz
IGFuZCB0d28gc2xpY2VkIGZpbGVzOiIpOworICAgIHRlc3RTZW5kaW5nRm9ybURhdGEoWworICAg
ICAgICB7ICd0eXBlJzogJ3N0cmluZycsICduYW1lJzogJ3N0cmluZzEnLCAndmFsdWUnOiAnZm9v
JyB9LAorICAgICAgICB7ICd0eXBlJzogJ2ZpbGUnLCAnbmFtZSc6ICdmaWxlMScsICd2YWx1ZSc6
ICdyZXNvdXJjZXMvZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dCcsICdzdGFydCcgOiAxLCAnbGVu
Z3RoJyA6IDUgfSwKKyAgICAgICAgeyAndHlwZSc6ICdzdHJpbmcnLCAnbmFtZSc6ICdzdHJpbmcy
JywgJ3ZhbHVlJzogJ2JhcicgfSwKKyAgICAgICAgeyAndHlwZSc6ICdmaWxlJywgJ25hbWUnOiAn
ZmlsZTInLCAndmFsdWUnOiAncmVzb3VyY2VzL2ZpbGUtZm9yLWRyYWctdG8tc2VuZC50eHQnLCAn
c3RhcnQnIDogMywgJ2xlbmd0aCcgOiAyIH0KKyAgICBdKTsKK30KKworaWYgKHdpbmRvdy5ldmVu
dFNlbmRlcikgeworICAgIHJ1blRlc3QoKTsKKyAgICAvLyBDbGVhbiB1cCBhZnRlciBvdXJzZWx2
ZXMKKyAgICBmaWxlSW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmaWxlSW5wdXQpOworfSBl
bHNlIHsKKyAgICB0ZXN0RmFpbGVkKCJUaGlzIHRlc3QgaXMgbm90IGludGVyYWN0aXZlLCBwbGVh
c2UgcnVuIHVzaW5nIER1bXBSZW5kZXJUcmVlIik7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNv
dXJjZXMvc2VuZC1mb3JtLWRhdGEuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jl
c291cmNlcy9zZW5kLWZvcm0tZGF0YS5qcwppbmRleCBkZWY3YzQ0Li5jNjk0MTY4IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWZvcm0tZGF0
YS5qcworKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWZv
cm0tZGF0YS5qcwpAQCAtMSw3MiArMSw1IEBACiBkZXNjcmlwdGlvbigiVGVzdCBmb3Igc2VuZGlu
ZyBGb3JtRGF0YSB2aWEgWE1MSHR0cFJlcXVlc3QuIik7CiAKLXZhciBmaWxlSW5wdXQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotZmlsZUlucHV0LnR5cGUgPSAnZmlsZSc7Ci1m
aWxlSW5wdXQuc3R5bGUud2lkdGggPSAiMTAwJSI7IC8vIFNvIHRoYXQgYW55IG1hbnVhbCB0ZXN0
aW5nIHdpbGwgc2hvdyBmdWxsIGZpbGUgbmFtZXMKLS8vIEltcG9ydGFudCB0aGF0IHdlIHB1dCB0
aGlzIGF0IHRoZSB0b3Agb2YgdGhlIGRvYyBzbyB0aGF0IGxvZ2dpbmcgZG9lcyBub3QgY2F1c2Ug
aXQgdG8gZ28gb3V0IG9mIHZpZXcgKHdoZXJlIGl0IGNhbid0IGJlIGRyYWdnZWQgdG8pCi1kb2N1
bWVudC5ib2R5Lmluc2VydEJlZm9yZShmaWxlSW5wdXQsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGls
ZCk7Ci0KLWZ1bmN0aW9uIG1vdmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KGVsZW1lbnQpCi17Ci0g
ICAgdmFyIGNlbnRlclggPSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRo
IC8gMjsKLSAgICB2YXIgY2VudGVyWSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZz
ZXRIZWlnaHQgLyAyOwotICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGNlbnRlclgsIGNlbnRl
clkpOwotfQotCi1mdW5jdGlvbiBnZXRGaWxlTmFtZShmaWxlUGF0aCkKLXsKLSAgICB2YXIgaW5k
ZXggPSBmaWxlUGF0aC5sYXN0SW5kZXhPZignLycpOwotICAgIGlmIChpbmRleCA9PSAtMSkKLSAg
ICAgICAgcmV0dXJuIGZpbGVQYXRoOwotICAgIHJldHVybiBmaWxlUGF0aC5zdWJzdHIoaW5kZXgg
KyAxKTsKLX0KLQotZnVuY3Rpb24gc2VuZEZvcm1EYXRhKGZvcm1EYXRhTGlzdCkKLXsKLSAgICB2
YXIgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZv
cm1EYXRhTGlzdC5sZW5ndGg7IGkrKykKLSAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZvcm1EYXRh
TGlzdFtpXVsnbmFtZSddLCBmb3JtRGF0YUxpc3RbaV1bJ3ZhbHVlJ10pOwotCi0gICAgdmFyIHho
ciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwotICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8x
MjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvbXVsdGlwYXJ0LXBvc3QtZWNo
by5waHAiLCBmYWxzZSk7Ci0gICAgeGhyLnNlbmQoZm9ybURhdGEpOwotCi0gICAgZGVidWcoeGhy
LnJlc3BvbnNlVGV4dCk7Ci19Ci0KLWZ1bmN0aW9uIHRlc3RTZW5kaW5nRm9ybURhdGEoZGF0YUxp
c3QpCi17Ci0gICAgdmFyIGZpbGVzVG9EcmFnID0gW107Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBkYXRhTGlzdC5sZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoZGF0YUxpc3RbaV1bJ3R5cGUn
XSA9PSAnZmlsZScpCi0gICAgICAgICAgICBmaWxlc1RvRHJhZy5wdXNoKGRhdGFMaXN0W2ldWyd2
YWx1ZSddKTsKLSAgICB9Ci0KLSAgICBpZiAoZmlsZXNUb0RyYWcpIHsKLSAgICAgICAgZXZlbnRT
ZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzKGZpbGVzVG9EcmFnKTsKLSAgICAgICAgbW92ZU1vdXNl
VG9DZW50ZXJPZkVsZW1lbnQoZmlsZUlucHV0KTsKLSAgICAgICAgZXZlbnRTZW5kZXIubW91c2VV
cCgpOwotICAgIH0KLQotICAgIHZhciBmaWxlcyA9IGZpbGVJbnB1dC5maWxlczsKLSAgICB2YXIg
Zm9ybURhdGFMaXN0ID0gW107Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhTGlzdC5sZW5n
dGg7IGkrKykgewotICAgICAgICBpZiAoZGF0YUxpc3RbaV1bJ3R5cGUnXSA9PSAnZmlsZScpIHsK
LSAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGdldEZpbGVOYW1lKGRhdGFMaXN0W2ldWyd2YWx1
ZSddKTsKLSAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZmlsZXMubGVuZ3RoOyBqKysp
IHsKLSAgICAgICAgICAgICAgICBpZiAoZmlsZU5hbWUgPT0gZmlsZXNbal0ubmFtZSkgewotICAg
ICAgICAgICAgICAgICAgICBmb3JtRGF0YUxpc3QucHVzaCh7J25hbWUnOiBkYXRhTGlzdFtpXVsn
bmFtZSddLCAndmFsdWUnOiBmaWxlc1tqXX0pOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBmb3JtRGF0YUxpc3QucHVzaCh7J25hbWUnOiBkYXRhTGlzdFtpXVsnbmFtZSddLCAn
dmFsdWUnOiBkYXRhTGlzdFtpXVsndmFsdWUnXX0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
c2VuZEZvcm1EYXRhKGZvcm1EYXRhTGlzdCk7Ci19Ci0KIGZ1bmN0aW9uIHJ1blRlc3QoKQogewog
ICAgIGRlYnVnKCJTZW5kaW5nIEZvcm1EYXRhIGNvbnRhaW5pbmcgb25lIHN0cmluZyB3aXRoIGVt
cHR5IG5hbWU6Iik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Nl
bmQtZm9ybS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2NhbC9zZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNlZC1maWxlLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2E1MGE0Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWZvcm0tZGF0YS13
aXRoLXNsaWNlZC1maWxlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACitUZXN0IGZvciBz
ZW5kaW5nIEZvcm1EYXRhIHdpdGggc2xpY2VkIGZpbGVzIHZpYSBYTUxIdHRwUmVxdWVzdC4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1NlbmRpbmcgRm9ybURhdGEgY29udGFpbmlu
ZyBvbmUgc2xpY2VkIGZpbGUgd2l0aCBlbXB0eSBuYW1lOgorCitTZW5kaW5nIEZvcm1EYXRhIGNv
bnRhaW5pbmcgb25lIHNsaWNlZCBmaWxlOgorZmlsZT1CbG9iOjIzNDU2CitTZW5kaW5nIEZvcm1E
YXRhIGNvbnRhaW5pbmcgb25lIHN0cmluZyBhbmQgb25lIHNsaWNlZCBmaWxlOgorc3RyaW5nMT1m
b28mZmlsZTE9QmxvYjoyMzQ1NgorU2VuZGluZyBGb3JtRGF0YSBjb250YWluaW5nIHR3byBzdHJp
bmdzIGFuZCB0d28gc2xpY2VkIGZpbGVzOgorc3RyaW5nMT1mb28mc3RyaW5nMj1iYXImZmlsZTE9
QmxvYjoyMzQ1NiZmaWxlMj1CbG9iOjQ1CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9s
b2NhbC9zZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNlZC1maWxlLmh0bWwgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzE0OWEwCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNl
ZC1maWxlLmh0bWwKQEAgLTAsMCArMSwxNCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9J
RVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgor
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2VuZC1mb3JtLWRh
dGEtY29tbW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2VuZC1mb3Jt
LWRhdGEtd2l0aC1zbGljZWQtZmlsZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1m
b3JtLWRhdGEuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRh
dGEuaHRtbAppbmRleCAxOGM3MGIxLi43YTJiMzE3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1kYXRhLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2NhbC9zZW5kLWZvcm0tZGF0YS5odG1sCkBAIC03LDYgKzcsNyBAQAogPGJvZHk+
CiA8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9zZW5kLWZvcm0tZGF0YS1jb21tb24uanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9InJlc291cmNlcy9zZW5kLWZvcm0tZGF0YS5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KIDwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lw
cGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggODBlYmM1Mi4uZTU0
YTc2MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTM0MjQsNiArMzQyNCw3IEBAIGh0
dHAvdGVzdHMvbG9hZGluZy90ZXh0LWNvbnRlbnQtdHlwZS13aXRoLWJpbmFyeS1leHRlbnNpb24u
aHRtbAogaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5odG1sCiBodHRwL3Rlc3Rz
L2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5odG1sCiBodHRwL3Rlc3RzL2xvY2FsL3Nl
bmQtZm9ybS1kYXRhLmh0bWwKK2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEtd2l0aC1z
bGljZWQtZmlsZS5odG1sCiBodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLXBsYXktc3RhbGwtc2Vlay5o
dG1sCiBodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLXBsYXktc3RhbGwuaHRtbAogaHR0cC90ZXN0cy9t
ZWRpYS92aWRlby1zZWVrYWJsZS1zdGFsbC5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9xdC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAppbmRl
eCAyYzkzOTQxLi5iODNjMjVjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9T
a2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKQEAgLTUwLDYgKzUw
LDcgQEAgaHR0cC90ZXN0cy9sb2NhbC9kcmFnLW92ZXItcmVtb3RlLWNvbnRlbnQuaHRtbAogaHR0
cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5odG1sCiBodHRwL3Rlc3RzL2xvY2FsL3Nl
bmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5odG1sCiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1k
YXRhLmh0bWwKK2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQtZmls
ZS5odG1sCiAKICMgRmFpbGluZyBuYXZpZ2F0aW9uIHRlc3RzCiBodHRwL3Rlc3RzL25hdmlnYXRp
b24vYW5jaG9yLWZyYW1lcy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93
aW4vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCmluZGV4IDY2Njhl
NzguLjdjNTM3YWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVk
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCkBAIC02NjYsNiArNjY2LDcg
QEAgZmFzdC9mb3Jtcy9pbnB1dC1zZWxlY3RlZG9wdGlvbi5odG1sCiBodHRwL3Rlc3RzL2xvY2Fs
L3NlbmQtZHJhZ2dlZC1maWxlLmh0bWwKIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJh
Z2dlZC1maWxlLmh0bWwKIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEuaHRtbAoraHR0
cC90ZXN0cy9sb2NhbC9zZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNlZC1maWxlLmh0bWwKIAogIyA8
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5Mjg5PgogcGx1Z2lucy9k
ZXN0cm95LWR1cmluZy1ucHAtbmV3Lmh0bWwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDk0NjE0ZS4uNGZmYWZlMCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwzMiBA
QAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAgIFN1cHBv
cnQgdXNpbmcgRm9ybURhdGEgdG8gc2VuZCBhIHNsaWNlZCBmaWxlIHZpYSBYSFIuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjY3OAorCisgICAgICAg
IFRlc3Q6IGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQtZmlsZS5o
dG1sCisKKyAgICAgICAgKiBodG1sL0Jsb2IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6Omlz
RmlsZSk6CisgICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpET01Gb3JtRGF0YTo6YXBwZW5kKToKKyAgICAgICAgKiBodG1sL0ZpbGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGU6OmlzRmlsZSk6CisgICAgICAgICogaHRtbC9Gb3JtRGF0YUxpc3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6YXBwZW5kQmxvYik6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtRGF0YUxpc3Q6Okl0ZW06Okl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGFMaXN0OjpJdGVtOjpibG9iKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNsb3Nl
Q3VycmVudFN0cmVhbSk6CisKKzIwMTAtMDMtMjYgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIEFk
ZCBzdXBwb3J0IHRvIGNyZWF0ZSBVVUlEIHN0cmluZy4KICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NDcyCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9CbG9iLmggYi9XZWJDb3JlL2h0bWwvQmxvYi5oCmluZGV4IDYxMDg0MmUuLmU4YjVmM2YgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmgKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuaApA
QCAtNTMsNiArNTMsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5CbG9iKCkgeyB9CiAKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNGaWxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogI2lmIEVO
QUJMRShCTE9CX1NMSUNFKQogICAgIFBhc3NSZWZQdHI8QmxvYj4gc2xpY2UobG9uZyBsb25nIHN0
YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25zdDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL0RPTUZvcm1EYXRhLmNwcCBiL1dlYkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5jcHAKaW5k
ZXggMTQ0MWU4Yi4uZjg0ODg5OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0RPTUZvcm1EYXRh
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRE9NRm9ybURhdGEuY3BwCkBAIC01MCwxMSArNTAsOCBA
QCB2b2lkIERPTUZvcm1EYXRhOjphcHBlbmQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQogCiB2b2lkIERPTUZvcm1EYXRhOjphcHBlbmQoY29uc3QgU3RyaW5nJiBuYW1l
LCBCbG9iKiBibG9iKQogewotICAgIC8vIEZJWE1FOiBOZWVkIHRvIHN1cHBvcnQgc2xpY2VkIGZp
bGUgd2hlbiBCbG9iLnNsaWNlIHN1cHBvcnQgaXMgbGFuZGVkLgotICAgIGlmICghbmFtZS5pc0Vt
cHR5KCkgJiYgIWJsb2ItPnBhdGgoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgUmVmUHRyPEZpbGU+
IGZpbGUgPSBzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYik7Ci0gICAgICAgIGFwcGVuZEZpbGUobmFt
ZSwgZmlsZS5yZWxlYXNlKCkpOwotICAgIH0KKyAgICBpZiAoIW5hbWUuaXNFbXB0eSgpKQorICAg
ICAgICBhcHBlbmRCbG9iKG5hbWUsIGJsb2IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZS5oIGIvV2ViQ29yZS9odG1sL0ZpbGUuaApp
bmRleCBkZGE0ODJhLi4wNjVkZDg2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZS5oCisr
KyBiL1dlYkNvcmUvaHRtbC9GaWxlLmgKQEAgLTM5LDYgKzM5LDggQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUocGF0aCkpOwogICAgIH0KIAorICAgIHZpcnR1YWwg
Ym9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKICAgICBjb25zdCBTdHJpbmcm
IG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICBjb25zdCBTdHJpbmcmIHR5cGUo
KSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zv
cm1EYXRhTGlzdC5oIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oCmluZGV4IDgzOThkYmMu
LmNjOTM1YWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaAorKysgYi9X
ZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgKQEAgLTIxLDggKzIxLDggQEAKICNpZm5kZWYgRm9y
bURhdGFMaXN0X2gKICNkZWZpbmUgRm9ybURhdGFMaXN0X2gKIAorI2luY2x1ZGUgIkJsb2IuaCIK
ICNpbmNsdWRlICJDU3RyaW5nLmgiCi0jaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIlRleHRF
bmNvZGluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNywyMSArMzcsMjEgQEAgcHVi
bGljOgogICAgICAgICB7IGFwcGVuZFN0cmluZyhrZXkpOyBhcHBlbmRTdHJpbmcodmFsdWUpOyB9
CiAgICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IFN0cmluZyYga2V5LCBpbnQgdmFsdWUpCiAgICAg
ICAgIHsgYXBwZW5kU3RyaW5nKGtleSk7IGFwcGVuZFN0cmluZyhTdHJpbmc6Om51bWJlcih2YWx1
ZSkpOyB9Ci0gICAgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYga2V5LCBQYXNzUmVmUHRy
PEZpbGU+IGZpbGUpCi0gICAgICAgIHsgYXBwZW5kU3RyaW5nKGtleSk7IG1fbGlzdC5hcHBlbmQo
ZmlsZSk7IH0KKyAgICB2b2lkIGFwcGVuZEJsb2IoY29uc3QgU3RyaW5nJiBrZXksIFBhc3NSZWZQ
dHI8QmxvYj4gYmxvYikKKyAgICAgICAgeyBhcHBlbmRTdHJpbmcoa2V5KTsgbV9saXN0LmFwcGVu
ZChibG9iKTsgfQogCiAgICAgY2xhc3MgSXRlbSB7CiAgICAgcHVibGljOgogICAgICAgICBJdGVt
KCkgeyB9CiAgICAgICAgIEl0ZW0oY29uc3QgQ1N0cmluZyYgZGF0YSkgOiBtX2RhdGEoZGF0YSkg
eyB9Ci0gICAgICAgIEl0ZW0oUGFzc1JlZlB0cjxGaWxlPiBmaWxlKSA6IG1fZmlsZShmaWxlKSB7
IH0KKyAgICAgICAgSXRlbShQYXNzUmVmUHRyPEJsb2I+IGJsb2IpIDogbV9ibG9iKGJsb2IpIHsg
fQogCiAgICAgICAgIGNvbnN0IENTdHJpbmcmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7
IH0KLSAgICAgICAgRmlsZSogZmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZS5nZXQoKTsgfQor
ICAgICAgICBCbG9iKiBibG9iKCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLmdldCgpOyB9CiAKICAg
ICBwcml2YXRlOgogICAgICAgICBDU3RyaW5nIG1fZGF0YTsKLSAgICAgICAgUmVmUHRyPEZpbGU+
IG1fZmlsZTsKKyAgICAgICAgUmVmUHRyPEJsb2I+IG1fYmxvYjsKICAgICB9OwogCiAgICAgY29u
c3QgVmVjdG9yPEl0ZW0+JiBsaXN0KCkgY29uc3QgeyByZXR1cm4gbV9saXN0OyB9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAKaW5kZXggNmEyMTRhYi4uMzFkYWMzZSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcApAQCAtMTM1OSwxMiArMTM1OSwxMiBAQCBib29sIEhUTUxJbnB1dEVsZW1l
bnQ6OmFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYgZW5jb2RpbmcsIGJvb2wgbXVsdGlwYXJ0
KQogICAgICAgICAgICAgLy8gSWYgbm8gZmlsZW5hbWUgYXQgYWxsIGlzIGVudGVyZWQsIHJldHVy
biBzdWNjZXNzZnVsIGJ1dCBlbXB0eS4KICAgICAgICAgICAgIC8vIE51bGwgd291bGQgYmUgbW9y
ZSBsb2dpY2FsLCBidXQgTmV0c2NhcGUgcG9zdHMgYW4gZW1wdHkgZmlsZS4gQXJnaC4KICAgICAg
ICAgICAgIGlmICghbnVtRmlsZXMpIHsKLSAgICAgICAgICAgICAgICBlbmNvZGluZy5hcHBlbmRG
aWxlKG5hbWUoKSwgRmlsZTo6Y3JlYXRlKCIiKSk7CisgICAgICAgICAgICAgICAgZW5jb2Rpbmcu
YXBwZW5kQmxvYihuYW1lKCksIEZpbGU6OmNyZWF0ZSgiIikpOwogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtRmlsZXM7ICsraSkKLSAgICAgICAgICAgICAgICBlbmNvZGluZy5hcHBlbmRG
aWxlKG5hbWUoKSwgbV9maWxlTGlzdC0+aXRlbShpKSk7CisgICAgICAgICAgICAgICAgZW5jb2Rp
bmcuYXBwZW5kQmxvYihuYW1lKCksIG1fZmlsZUxpc3QtPml0ZW0oaSkpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhLmNwcAppbmRleCA1OTdmODU5Li5mZjMzYmYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9G
b3JtRGF0YS5jcHAKQEAgLTI3LDExICsyNywxMyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5o
IgogI2luY2x1ZGUgIkRPTUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkZvcm1EYXRh
QnVpbGRlci5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8d3RmL1VVSUQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xODcsOSArMTg5LDIzIEBAIHZvaWQgRm9ybURhdGE6
OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBp
c011bHRpUGFyCiAKICAgICAgICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2U7
CiAgICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCB0eXBlIGlzIEZJTEUsIHRoZW4gd2UgYWxz
byBuZWVkIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lCi0gICAgICAgICAgICBpZiAodmFsdWUuZmls
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gdmFsdWUuZmlsZSgp
LT5wYXRoKCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gdmFsdWUuZmlsZSgp
LT5maWxlTmFtZSgpOworICAgICAgICAgICAgaWYgKHZhbHVlLmJsb2IoKSkgeworICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IHZhbHVlLmJsb2IoKS0+cGF0aCgpOworI2lmIEVO
QUJMRShCTE9CX1NMSUNFKQorICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZTsKKyAgICAg
ICAgICAgICAgICBpZiAodmFsdWUuYmxvYigpLT5pc0ZpbGUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgZmlsZU5hbWUgPSBzdGF0aWNfY2FzdDxGaWxlKj4odmFsdWUuYmxvYigpKS0+ZmlsZU5hbWUo
KTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBi
bG9iIGlzIHNsaWNlZCBmcm9tIGEgZmlsZSwgaXQgZG9lcyBub3QgaGF2ZSB0aGUgZmlsZW5hbWUu
IEluIHRoaXMgY2FzZSwgbGV0J3MgcHJvZHVjZSBhIHVuaXF1ZSBmaWxlbmFtZS4KKyAgICAgICAg
ICAgICAgICAgICAgY2hhciB1dWlkU3RyaW5nWzM3XTsKKyAgICAgICAgICAgICAgICAgICAgV1RG
OjpjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKHV1aWRTdHJpbmcsIDM3KTsKKyAgICAgICAgICAg
ICAgICAgICAgZmlsZU5hbWUgPSAiQmxvYiI7CisgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1l
ICs9IHV1aWRTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lLnJlcGxhY2UoIi0i
LCAiIik7IC8vIEZvciBzYWZlLCByZW1vdmUgJy0nIGluIGNhc2UgdGhhdCBjZXJ0YWluIHNlcnZl
ciBkb2VzIG5vdCBsaWtlIGl0IHRvIGJlIGluIHRoZSBmaWxlbmFtZS4KKyAgICAgICAgICAgICAg
ICB9CisjZWxzZQorICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IHN0YXRpY19jYXN0
PEZpbGUqPih2YWx1ZS5ibG9iKCkpLT5maWxlTmFtZSgpOworI2VuZGlmCiAKICAgICAgICAgICAg
ICAgICAvLyBMZXQgdGhlIGFwcGxpY2F0aW9uIHNwZWNpZnkgYSBmaWxlbmFtZSBpZiBpdCdzIGdv
aW5nIHRvIGdlbmVyYXRlIGEgcmVwbGFjZW1lbnQgZmlsZSBmb3IgdGhlIHVwbG9hZC4KICAgICAg
ICAgICAgICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKSB7CkBAIC0yMDQsNyArMjIwLDEyIEBAIHZv
aWQgRm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3Jt
RGF0YSwgYm9vbCBpc011bHRpUGFyCiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBpbmNs
dWRlIHRoZSBmaWxlbmFtZT0iLi4iIHBhcnQgaW4gdGhlIGhlYWRlciwgZXZlbiBpZiB0aGUgZmls
ZW5hbWUgaXMgZW1wdHkKICAgICAgICAgICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYWRkRmlsZW5h
bWVUb011bHRpUGFydEhlYWRlcihoZWFkZXIsIGVuY29kaW5nLCBmaWxlTmFtZSk7CiAKKyAgICAg
ICAgICAgICAgICAvLyBJZiBhIGJsb2IgaXMgc2xpY2VkIGZyb20gYSBmaWxlLCBkbyBub3QgYWRk
IHRoZSBjb250ZW50IHR5cGUuIAorI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgICAgICAgICAg
ICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpICYmIHZhbHVlLmJsb2IoKS0+aXNGaWxlKCkpIHsK
KyNlbHNlCiAgICAgICAgICAgICAgICAgaWYgKCFmaWxlTmFtZS5pc0VtcHR5KCkpIHsKKyNlbmRp
ZgogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIE1JTUVUeXBlUmVnaXN0cnkgZnVu
Y3Rpb24ncyBuYW1lIG1ha2VzIGl0IHNvdW5kIGxpa2UgaXQgdGFrZXMgYSBwYXRoLAogICAgICAg
ICAgICAgICAgICAgICAvLyBub3QganVzdCBhIGJhc2VuYW1lLiBCdXQgZmlsZW5hbWUgaXMgbm90
IHRoZSBwYXRoLiBCdXQgbm90ZSB0aGF0IGl0J3Mgbm90IHNhZmUgdG8KICAgICAgICAgICAgICAg
ICAgICAgLy8ganVzdCB1c2UgcGF0aCBpbnN0ZWFkIHNpbmNlIGluIHRoZSBnZW5lcmF0ZWQtZmls
ZSBjYXNlIGl0IHdpbGwgbm90IHJlZmxlY3QgdGhlCkBAIC0yMjEsOCArMjQyLDEyIEBAIHZvaWQg
Rm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0
YSwgYm9vbCBpc011bHRpUGFyCiAgICAgICAgICAgICBhcHBlbmREYXRhKGhlYWRlci5kYXRhKCks
IGhlYWRlci5zaXplKCkpOwogICAgICAgICAgICAgaWYgKHNpemVfdCBkYXRhU2l6ZSA9IHZhbHVl
LmRhdGEoKS5sZW5ndGgoKSkKICAgICAgICAgICAgICAgICBhcHBlbmREYXRhKHZhbHVlLmRhdGEo
KS5kYXRhKCksIGRhdGFTaXplKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmZpbGUoKSAm
JiAhdmFsdWUuZmlsZSgpLT5wYXRoKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGFwcGVu
ZEZpbGUodmFsdWUuZmlsZSgpLT5wYXRoKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7CisgICAgICAg
ICAgICBlbHNlIGlmICh2YWx1ZS5ibG9iKCkgJiYgIXZhbHVlLmJsb2IoKS0+cGF0aCgpLmlzRW1w
dHkoKSkKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICAgICAgICAgICAgICBhcHBlbmRGaWxl
UmFuZ2UodmFsdWUuYmxvYigpLT5wYXRoKCksIHZhbHVlLmJsb2IoKS0+c3RhcnQoKSwgdmFsdWUu
YmxvYigpLT5sZW5ndGgoKSwgdmFsdWUuYmxvYigpLT5tb2RpZmljYXRpb25UaW1lKCksIHNob3Vs
ZEdlbmVyYXRlRmlsZSk7CisjZWxzZQorICAgICAgICAgICAgICAgIGFwcGVuZEZpbGUodmFsdWUu
YmxvYigpLT5wYXRoKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7CisjZW5kaWYKIAogICAgICAgICAg
ICAgYXBwZW5kRGF0YSgiXHJcbiIsIDIpOwogICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbSBiL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KaW5kZXggNWU4YzNm
Zi4uM2I4NWI4MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3Jt
RGF0YVN0cmVhbU1hYy5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1E
YXRhU3RyZWFtTWFjLm1tCkBAIC0xNDIsNiArMTQyLDkgQEAgc3RhdGljIHZvaWQgY2xvc2VDdXJy
ZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMgKmZvcm0pCiAgICAgICAgIENGUmVhZFN0cmVhbVNl
dENsaWVudChmb3JtLT5jdXJyZW50U3RyZWFtLCBrQ0ZTdHJlYW1FdmVudE5vbmUsIE5VTEwsIE5V
TEwpOwogICAgICAgICBDRlJlbGVhc2UoZm9ybS0+Y3VycmVudFN0cmVhbSk7CiAgICAgICAgIGZv
cm0tPmN1cnJlbnRTdHJlYW0gPSBOVUxMOworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgICAg
ICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBCbG9iOjp0b0VuZE9mRmlsZTsKKyNl
bmRpZgogICAgIH0KICAgICBpZiAoZm9ybS0+Y3VycmVudERhdGEpIHsKICAgICAgICAgZmFzdEZy
ZWUoZm9ybS0+Y3VycmVudERhdGEpOwo=
</data>
<flag name="commit-queue"
          id="35136"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51789</attachid>
            <date>2010-03-26 15:40:24 -0700</date>
            <delta_ts>2010-03-31 14:35:00 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>36678_2</filename>
            <type>text/plain</type>
            <size>21683</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2YjZjMzI0Li5mYzRhYmIyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTAtMDMt
MjYgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgdXNpbmcgRm9ybURhdGEgdG8gc2Vu
ZCBhIHNsaWNlZCBmaWxlIHZpYSBYSFIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zNjY3OAorCisgICAgICAgIE1vdmUgY29tbW9uIGZ1bmN0aW9uYWxp
dGllcyB0byB0ZXN0IHNlbmRpbmcgRm9ybURhdGEgaW50byBhIGhlbHBlciBmaWxlCisgICAgICAg
IHNvIHRoYXQgaXQgY2FuIGJlIHNoYXJlZCBieSBGb3JtRGF0YSBsYXlvdXQgdGVzdHMuCisKKyAg
ICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWZvcm0tZGF0YS1jb21tb24u
anM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtZm9y
bS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUuanM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
bG9jYWwvcmVzb3VyY2VzL3NlbmQtZm9ybS1kYXRhLmpzOgorICAgICAgICAqIGh0dHAvdGVzdHMv
bG9jYWwvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQtZmlsZS1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQt
ZmlsZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1k
YXRhLmh0bWw6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6CisgICAgICAgICogcGxh
dGZvcm0vcXQvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoKKwogMjAx
MC0wMy0yMyAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1mb3JtLWRhdGEtY29tbW9uLmpzIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1mb3JtLWRhdGEtY29tbW9u
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2Njc3MWMKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWZv
cm0tZGF0YS1jb21tb24uanMKQEAgLTAsMCArMSw3OCBAQAordmFyIGZpbGVJbnB1dCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CitmaWxlSW5wdXQudHlwZSA9ICdmaWxlJzsKK2Zp
bGVJbnB1dC5zdHlsZS53aWR0aCA9ICIxMDAlIjsgLy8gU28gdGhhdCBhbnkgbWFudWFsIHRlc3Rp
bmcgd2lsbCBzaG93IGZ1bGwgZmlsZSBuYW1lcworLy8gSW1wb3J0YW50IHRoYXQgd2UgcHV0IHRo
aXMgYXQgdGhlIHRvcCBvZiB0aGUgZG9jIHNvIHRoYXQgbG9nZ2luZyBkb2VzIG5vdCBjYXVzZSBp
dCB0byBnbyBvdXQgb2YgdmlldyAod2hlcmUgaXQgY2FuJ3QgYmUgZHJhZ2dlZCB0bykKK2RvY3Vt
ZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGZpbGVJbnB1dCwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxk
KTsKKworZnVuY3Rpb24gbW92ZU1vdXNlVG9DZW50ZXJPZkVsZW1lbnQoZWxlbWVudCkKK3sKKyAg
ICB2YXIgY2VudGVyWCA9IGVsZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGgg
LyAyOworICAgIHZhciBjZW50ZXJZID0gZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNl
dEhlaWdodCAvIDI7CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oY2VudGVyWCwgY2VudGVy
WSk7Cit9CisKK2Z1bmN0aW9uIGdldEZpbGVOYW1lKGZpbGVQYXRoKQoreworICAgIHZhciBpbmRl
eCA9IGZpbGVQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisgICAgaWYgKGluZGV4ID09IC0xKQorICAg
ICAgICByZXR1cm4gZmlsZVBhdGg7CisgICAgcmV0dXJuIGZpbGVQYXRoLnN1YnN0cihpbmRleCAr
IDEpOworfQorCitmdW5jdGlvbiBzZW5kRm9ybURhdGEoZm9ybURhdGFMaXN0LCBmaWxlU2xpY2Vk
KQoreworICAgIHZhciBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgZm9ybURhdGFMaXN0Lmxlbmd0aDsgaSsrKQorICAgICAgICBmb3JtRGF0YS5hcHBl
bmQoZm9ybURhdGFMaXN0W2ldWyduYW1lJ10sIGZvcm1EYXRhTGlzdFtpXVsndmFsdWUnXSk7CisK
KyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLm9wZW4oIlBPU1Qi
LCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9tdWx0aXBh
cnQtcG9zdC1lY2hvLnBocCIsIGZhbHNlKTsKKyAgICB4aHIuc2VuZChmb3JtRGF0YSk7CisgICAg
dmFyIHJlc3BvbnNlVGV4dCA9IHhoci5yZXNwb25zZVRleHQ7CisKKyAgICAvLyBJZiB3ZSdyZSBz
ZW5kaW5nIGEgc2xpY2VkIGZpbGUgYW1vbmcgdGhlIEZvcm1EYXRhLCBhIHVuaXF1ZWx5IGdlbmVy
YXRlZCBuYW1lIHByZWZpeGVkIHdpdGggIkJsb2IiIGlzIHVzZWQuCisgICAgLy8gV2UgbmVlZCB0
byByZW1vdmUgdGhlIHJhbmRvbSBwYXJ0IGluIHRoZSBmaWxlbmFtZSBzbyB0aGF0IHdlIGdldCBj
b25zaXN0ZW50IHJlc3VsdC4KKyAgICBpZiAoZmlsZVNsaWNlZCkKKyAgICAgICAgcmVzcG9uc2VU
ZXh0ID0gcmVzcG9uc2VUZXh0LnJlcGxhY2UoL0Jsb2Jcd3szMn0vZywgIkJsb2IiKTsKKworICAg
IGRlYnVnKHJlc3BvbnNlVGV4dCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RTZW5kaW5nRm9ybURhdGEo
ZGF0YUxpc3QpCit7CisgICAgdmFyIGZpbGVzVG9EcmFnID0gW107CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBkYXRhTGlzdC5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoZGF0YUxpc3RbaV1b
J3R5cGUnXSA9PSAnZmlsZScpCisgICAgICAgICAgICBmaWxlc1RvRHJhZy5wdXNoKGRhdGFMaXN0
W2ldWyd2YWx1ZSddKTsKKyAgICB9CisKKyAgICBpZiAoZmlsZXNUb0RyYWcpIHsKKyAgICAgICAg
ZXZlbnRTZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzKGZpbGVzVG9EcmFnKTsKKyAgICAgICAgbW92
ZU1vdXNlVG9DZW50ZXJPZkVsZW1lbnQoZmlsZUlucHV0KTsKKyAgICAgICAgZXZlbnRTZW5kZXIu
bW91c2VVcCgpOworICAgIH0KKworICAgIHZhciBmaWxlcyA9IGZpbGVJbnB1dC5maWxlczsKKyAg
ICB2YXIgZm9ybURhdGFMaXN0ID0gW107CisgICAgdmFyIGZpbGVTbGljZWQgPSBmYWxzZTsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFMaXN0Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlm
IChkYXRhTGlzdFtpXVsndHlwZSddID09ICdmaWxlJykgeworICAgICAgICAgICAgdmFyIGZpbGVO
YW1lID0gZ2V0RmlsZU5hbWUoZGF0YUxpc3RbaV1bJ3ZhbHVlJ10pOworICAgICAgICAgICAgZm9y
ICh2YXIgaiA9IDA7IGogPCBmaWxlcy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIGlm
IChmaWxlTmFtZSA9PSBmaWxlc1tqXS5uYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBm
aWxlID0gZmlsZXNbal07CisgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhTGlzdFtpXVsnc3Rh
cnQnXSAmJiBkYXRhTGlzdFtpXVsnbGVuZ3RoJ10pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZpbGVTbGljZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUu
c2xpY2UoZGF0YUxpc3RbaV1bJ3N0YXJ0J10sIGRhdGFMaXN0W2ldWydsZW5ndGgnXSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9ybURhdGFMaXN0LnB1c2go
eyduYW1lJzogZGF0YUxpc3RbaV1bJ25hbWUnXSwgJ3ZhbHVlJzogZmlsZX0pOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3JtRGF0YUxpc3QucHVzaCh7J25hbWUnOiBkYXRh
TGlzdFtpXVsnbmFtZSddLCAndmFsdWUnOiBkYXRhTGlzdFtpXVsndmFsdWUnXX0pOworICAgICAg
ICB9CisgICAgfQorCisgICAgc2VuZEZvcm1EYXRhKGZvcm1EYXRhTGlzdCwgZmlsZVNsaWNlZCk7
Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9z
ZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNlZC1maWxlLmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQtZmlsZS5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjIwM2E2Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1mb3JtLWRhdGEt
d2l0aC1zbGljZWQtZmlsZS5qcwpAQCAtMCwwICsxLDM4IEBACitkZXNjcmlwdGlvbigiVGVzdCBm
b3Igc2VuZGluZyBGb3JtRGF0YSB3aXRoIHNsaWNlZCBmaWxlcyB2aWEgWE1MSHR0cFJlcXVlc3Qu
Iik7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGRlYnVnKCJTZW5kaW5nIEZvcm1EYXRh
IGNvbnRhaW5pbmcgb25lIHNsaWNlZCBmaWxlIHdpdGggZW1wdHkgbmFtZToiKTsKKyAgICB0ZXN0
U2VuZGluZ0Zvcm1EYXRhKFsKKyAgICAgICAgeyAndHlwZSc6ICdmaWxlJywgJ25hbWUnOiAnJywg
J3ZhbHVlJzogJ3Jlc291cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0JyB9CisgICAgXSk7
CisKKyAgICBkZWJ1ZygiU2VuZGluZyBGb3JtRGF0YSBjb250YWluaW5nIG9uZSBzbGljZWQgZmls
ZToiKTsKKyAgICB0ZXN0U2VuZGluZ0Zvcm1EYXRhKFsKKyAgICAgICAgeyAndHlwZSc6ICdmaWxl
JywgJ25hbWUnOiAnZmlsZScsICd2YWx1ZSc6ICdyZXNvdXJjZXMvZmlsZS1mb3ItZHJhZy10by1z
ZW5kLnR4dCcsICdzdGFydCcgOiAxLCAnbGVuZ3RoJyA6IDUgfQorICAgIF0pOworCisgICAgZGVi
dWcoIlNlbmRpbmcgRm9ybURhdGEgY29udGFpbmluZyBvbmUgc3RyaW5nIGFuZCBvbmUgc2xpY2Vk
IGZpbGU6Iik7CisgICAgdGVzdFNlbmRpbmdGb3JtRGF0YShbCisgICAgICAgIHsgJ3R5cGUnOiAn
c3RyaW5nJywgJ25hbWUnOiAnc3RyaW5nMScsICd2YWx1ZSc6ICdmb28nIH0sCisgICAgICAgIHsg
J3R5cGUnOiAnZmlsZScsICduYW1lJzogJ2ZpbGUxJywgJ3ZhbHVlJzogJ3Jlc291cmNlcy9maWxl
LWZvci1kcmFnLXRvLXNlbmQudHh0JywgJ3N0YXJ0JyA6IDEsICdsZW5ndGgnIDogNSB9CisgICAg
XSk7CisKKyAgICBkZWJ1ZygiU2VuZGluZyBGb3JtRGF0YSBjb250YWluaW5nIHR3byBzdHJpbmdz
IGFuZCB0d28gc2xpY2VkIGZpbGVzOiIpOworICAgIHRlc3RTZW5kaW5nRm9ybURhdGEoWworICAg
ICAgICB7ICd0eXBlJzogJ3N0cmluZycsICduYW1lJzogJ3N0cmluZzEnLCAndmFsdWUnOiAnZm9v
JyB9LAorICAgICAgICB7ICd0eXBlJzogJ2ZpbGUnLCAnbmFtZSc6ICdmaWxlMScsICd2YWx1ZSc6
ICdyZXNvdXJjZXMvZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dCcsICdzdGFydCcgOiAxLCAnbGVu
Z3RoJyA6IDUgfSwKKyAgICAgICAgeyAndHlwZSc6ICdzdHJpbmcnLCAnbmFtZSc6ICdzdHJpbmcy
JywgJ3ZhbHVlJzogJ2JhcicgfSwKKyAgICAgICAgeyAndHlwZSc6ICdmaWxlJywgJ25hbWUnOiAn
ZmlsZTInLCAndmFsdWUnOiAncmVzb3VyY2VzL2ZpbGUtZm9yLWRyYWctdG8tc2VuZC50eHQnLCAn
c3RhcnQnIDogMywgJ2xlbmd0aCcgOiAyIH0KKyAgICBdKTsKK30KKworaWYgKHdpbmRvdy5ldmVu
dFNlbmRlcikgeworICAgIHJ1blRlc3QoKTsKKyAgICAvLyBDbGVhbiB1cCBhZnRlciBvdXJzZWx2
ZXMKKyAgICBmaWxlSW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmaWxlSW5wdXQpOworfSBl
bHNlIHsKKyAgICB0ZXN0RmFpbGVkKCJUaGlzIHRlc3QgaXMgbm90IGludGVyYWN0aXZlLCBwbGVh
c2UgcnVuIHVzaW5nIER1bXBSZW5kZXJUcmVlIik7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNv
dXJjZXMvc2VuZC1mb3JtLWRhdGEuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jl
c291cmNlcy9zZW5kLWZvcm0tZGF0YS5qcwppbmRleCBkZWY3YzQ0Li5jNjk0MTY4IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWZvcm0tZGF0
YS5qcworKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWZv
cm0tZGF0YS5qcwpAQCAtMSw3MiArMSw1IEBACiBkZXNjcmlwdGlvbigiVGVzdCBmb3Igc2VuZGlu
ZyBGb3JtRGF0YSB2aWEgWE1MSHR0cFJlcXVlc3QuIik7CiAKLXZhciBmaWxlSW5wdXQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotZmlsZUlucHV0LnR5cGUgPSAnZmlsZSc7Ci1m
aWxlSW5wdXQuc3R5bGUud2lkdGggPSAiMTAwJSI7IC8vIFNvIHRoYXQgYW55IG1hbnVhbCB0ZXN0
aW5nIHdpbGwgc2hvdyBmdWxsIGZpbGUgbmFtZXMKLS8vIEltcG9ydGFudCB0aGF0IHdlIHB1dCB0
aGlzIGF0IHRoZSB0b3Agb2YgdGhlIGRvYyBzbyB0aGF0IGxvZ2dpbmcgZG9lcyBub3QgY2F1c2Ug
aXQgdG8gZ28gb3V0IG9mIHZpZXcgKHdoZXJlIGl0IGNhbid0IGJlIGRyYWdnZWQgdG8pCi1kb2N1
bWVudC5ib2R5Lmluc2VydEJlZm9yZShmaWxlSW5wdXQsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGls
ZCk7Ci0KLWZ1bmN0aW9uIG1vdmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KGVsZW1lbnQpCi17Ci0g
ICAgdmFyIGNlbnRlclggPSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRo
IC8gMjsKLSAgICB2YXIgY2VudGVyWSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZz
ZXRIZWlnaHQgLyAyOwotICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGNlbnRlclgsIGNlbnRl
clkpOwotfQotCi1mdW5jdGlvbiBnZXRGaWxlTmFtZShmaWxlUGF0aCkKLXsKLSAgICB2YXIgaW5k
ZXggPSBmaWxlUGF0aC5sYXN0SW5kZXhPZignLycpOwotICAgIGlmIChpbmRleCA9PSAtMSkKLSAg
ICAgICAgcmV0dXJuIGZpbGVQYXRoOwotICAgIHJldHVybiBmaWxlUGF0aC5zdWJzdHIoaW5kZXgg
KyAxKTsKLX0KLQotZnVuY3Rpb24gc2VuZEZvcm1EYXRhKGZvcm1EYXRhTGlzdCkKLXsKLSAgICB2
YXIgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZv
cm1EYXRhTGlzdC5sZW5ndGg7IGkrKykKLSAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZvcm1EYXRh
TGlzdFtpXVsnbmFtZSddLCBmb3JtRGF0YUxpc3RbaV1bJ3ZhbHVlJ10pOwotCi0gICAgdmFyIHho
ciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwotICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8x
MjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvbXVsdGlwYXJ0LXBvc3QtZWNo
by5waHAiLCBmYWxzZSk7Ci0gICAgeGhyLnNlbmQoZm9ybURhdGEpOwotCi0gICAgZGVidWcoeGhy
LnJlc3BvbnNlVGV4dCk7Ci19Ci0KLWZ1bmN0aW9uIHRlc3RTZW5kaW5nRm9ybURhdGEoZGF0YUxp
c3QpCi17Ci0gICAgdmFyIGZpbGVzVG9EcmFnID0gW107Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBkYXRhTGlzdC5sZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoZGF0YUxpc3RbaV1bJ3R5cGUn
XSA9PSAnZmlsZScpCi0gICAgICAgICAgICBmaWxlc1RvRHJhZy5wdXNoKGRhdGFMaXN0W2ldWyd2
YWx1ZSddKTsKLSAgICB9Ci0KLSAgICBpZiAoZmlsZXNUb0RyYWcpIHsKLSAgICAgICAgZXZlbnRT
ZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzKGZpbGVzVG9EcmFnKTsKLSAgICAgICAgbW92ZU1vdXNl
VG9DZW50ZXJPZkVsZW1lbnQoZmlsZUlucHV0KTsKLSAgICAgICAgZXZlbnRTZW5kZXIubW91c2VV
cCgpOwotICAgIH0KLQotICAgIHZhciBmaWxlcyA9IGZpbGVJbnB1dC5maWxlczsKLSAgICB2YXIg
Zm9ybURhdGFMaXN0ID0gW107Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhTGlzdC5sZW5n
dGg7IGkrKykgewotICAgICAgICBpZiAoZGF0YUxpc3RbaV1bJ3R5cGUnXSA9PSAnZmlsZScpIHsK
LSAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGdldEZpbGVOYW1lKGRhdGFMaXN0W2ldWyd2YWx1
ZSddKTsKLSAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZmlsZXMubGVuZ3RoOyBqKysp
IHsKLSAgICAgICAgICAgICAgICBpZiAoZmlsZU5hbWUgPT0gZmlsZXNbal0ubmFtZSkgewotICAg
ICAgICAgICAgICAgICAgICBmb3JtRGF0YUxpc3QucHVzaCh7J25hbWUnOiBkYXRhTGlzdFtpXVsn
bmFtZSddLCAndmFsdWUnOiBmaWxlc1tqXX0pOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBmb3JtRGF0YUxpc3QucHVzaCh7J25hbWUnOiBkYXRhTGlzdFtpXVsnbmFtZSddLCAn
dmFsdWUnOiBkYXRhTGlzdFtpXVsndmFsdWUnXX0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
c2VuZEZvcm1EYXRhKGZvcm1EYXRhTGlzdCk7Ci19Ci0KIGZ1bmN0aW9uIHJ1blRlc3QoKQogewog
ICAgIGRlYnVnKCJTZW5kaW5nIEZvcm1EYXRhIGNvbnRhaW5pbmcgb25lIHN0cmluZyB3aXRoIGVt
cHR5IG5hbWU6Iik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Nl
bmQtZm9ybS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2NhbC9zZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNlZC1maWxlLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2E1MGE0Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWZvcm0tZGF0YS13
aXRoLXNsaWNlZC1maWxlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACitUZXN0IGZvciBz
ZW5kaW5nIEZvcm1EYXRhIHdpdGggc2xpY2VkIGZpbGVzIHZpYSBYTUxIdHRwUmVxdWVzdC4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1NlbmRpbmcgRm9ybURhdGEgY29udGFpbmlu
ZyBvbmUgc2xpY2VkIGZpbGUgd2l0aCBlbXB0eSBuYW1lOgorCitTZW5kaW5nIEZvcm1EYXRhIGNv
bnRhaW5pbmcgb25lIHNsaWNlZCBmaWxlOgorZmlsZT1CbG9iOjIzNDU2CitTZW5kaW5nIEZvcm1E
YXRhIGNvbnRhaW5pbmcgb25lIHN0cmluZyBhbmQgb25lIHNsaWNlZCBmaWxlOgorc3RyaW5nMT1m
b28mZmlsZTE9QmxvYjoyMzQ1NgorU2VuZGluZyBGb3JtRGF0YSBjb250YWluaW5nIHR3byBzdHJp
bmdzIGFuZCB0d28gc2xpY2VkIGZpbGVzOgorc3RyaW5nMT1mb28mc3RyaW5nMj1iYXImZmlsZTE9
QmxvYjoyMzQ1NiZmaWxlMj1CbG9iOjQ1CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9s
b2NhbC9zZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNlZC1maWxlLmh0bWwgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzE0OWEwCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNl
ZC1maWxlLmh0bWwKQEAgLTAsMCArMSwxNCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9J
RVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgor
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2VuZC1mb3JtLWRh
dGEtY29tbW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2VuZC1mb3Jt
LWRhdGEtd2l0aC1zbGljZWQtZmlsZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1m
b3JtLWRhdGEuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRh
dGEuaHRtbAppbmRleCAxOGM3MGIxLi43YTJiMzE3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1kYXRhLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2NhbC9zZW5kLWZvcm0tZGF0YS5odG1sCkBAIC03LDYgKzcsNyBAQAogPGJvZHk+
CiA8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9zZW5kLWZvcm0tZGF0YS1jb21tb24uanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9InJlc291cmNlcy9zZW5kLWZvcm0tZGF0YS5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KIDwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lw
cGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggODBlYmM1Mi4uZTU0
YTc2MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTM0MjQsNiArMzQyNCw3IEBAIGh0
dHAvdGVzdHMvbG9hZGluZy90ZXh0LWNvbnRlbnQtdHlwZS13aXRoLWJpbmFyeS1leHRlbnNpb24u
aHRtbAogaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5odG1sCiBodHRwL3Rlc3Rz
L2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5odG1sCiBodHRwL3Rlc3RzL2xvY2FsL3Nl
bmQtZm9ybS1kYXRhLmh0bWwKK2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEtd2l0aC1z
bGljZWQtZmlsZS5odG1sCiBodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLXBsYXktc3RhbGwtc2Vlay5o
dG1sCiBodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLXBsYXktc3RhbGwuaHRtbAogaHR0cC90ZXN0cy9t
ZWRpYS92aWRlby1zZWVrYWJsZS1zdGFsbC5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9xdC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAppbmRl
eCAyYzkzOTQxLi5iODNjMjVjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9T
a2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKQEAgLTUwLDYgKzUw
LDcgQEAgaHR0cC90ZXN0cy9sb2NhbC9kcmFnLW92ZXItcmVtb3RlLWNvbnRlbnQuaHRtbAogaHR0
cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5odG1sCiBodHRwL3Rlc3RzL2xvY2FsL3Nl
bmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5odG1sCiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1k
YXRhLmh0bWwKK2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQtZmls
ZS5odG1sCiAKICMgRmFpbGluZyBuYXZpZ2F0aW9uIHRlc3RzCiBodHRwL3Rlc3RzL25hdmlnYXRp
b24vYW5jaG9yLWZyYW1lcy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93
aW4vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCmluZGV4IDY2Njhl
NzguLjdjNTM3YWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVk
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCkBAIC02NjYsNiArNjY2LDcg
QEAgZmFzdC9mb3Jtcy9pbnB1dC1zZWxlY3RlZG9wdGlvbi5odG1sCiBodHRwL3Rlc3RzL2xvY2Fs
L3NlbmQtZHJhZ2dlZC1maWxlLmh0bWwKIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJh
Z2dlZC1maWxlLmh0bWwKIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEuaHRtbAoraHR0
cC90ZXN0cy9sb2NhbC9zZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNlZC1maWxlLmh0bWwKIAogIyA8
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5Mjg5PgogcGx1Z2lucy9k
ZXN0cm95LWR1cmluZy1ucHAtbmV3Lmh0bWwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDk0NjE0ZS4uNGZmYWZlMCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwzMiBA
QAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAgIFN1cHBv
cnQgdXNpbmcgRm9ybURhdGEgdG8gc2VuZCBhIHNsaWNlZCBmaWxlIHZpYSBYSFIuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjY3OAorCisgICAgICAg
IFRlc3Q6IGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQtZmlsZS5o
dG1sCisKKyAgICAgICAgKiBodG1sL0Jsb2IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6Omlz
RmlsZSk6CisgICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpET01Gb3JtRGF0YTo6YXBwZW5kKToKKyAgICAgICAgKiBodG1sL0ZpbGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGU6OmlzRmlsZSk6CisgICAgICAgICogaHRtbC9Gb3JtRGF0YUxpc3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6YXBwZW5kQmxvYik6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtRGF0YUxpc3Q6Okl0ZW06Okl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGFMaXN0OjpJdGVtOjpibG9iKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNsb3Nl
Q3VycmVudFN0cmVhbSk6CisKKzIwMTAtMDMtMjYgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIEFk
ZCBzdXBwb3J0IHRvIGNyZWF0ZSBVVUlEIHN0cmluZy4KICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NDcyCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9CbG9iLmggYi9XZWJDb3JlL2h0bWwvQmxvYi5oCmluZGV4IDYxMDg0MmUuLmU4YjVmM2YgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmgKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuaApA
QCAtNTMsNiArNTMsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5CbG9iKCkgeyB9CiAKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNGaWxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogI2lmIEVO
QUJMRShCTE9CX1NMSUNFKQogICAgIFBhc3NSZWZQdHI8QmxvYj4gc2xpY2UobG9uZyBsb25nIHN0
YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25zdDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL0RPTUZvcm1EYXRhLmNwcCBiL1dlYkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5jcHAKaW5k
ZXggMTQ0MWU4Yi4uZjg0ODg5OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0RPTUZvcm1EYXRh
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRE9NRm9ybURhdGEuY3BwCkBAIC01MCwxMSArNTAsOCBA
QCB2b2lkIERPTUZvcm1EYXRhOjphcHBlbmQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQogCiB2b2lkIERPTUZvcm1EYXRhOjphcHBlbmQoY29uc3QgU3RyaW5nJiBuYW1l
LCBCbG9iKiBibG9iKQogewotICAgIC8vIEZJWE1FOiBOZWVkIHRvIHN1cHBvcnQgc2xpY2VkIGZp
bGUgd2hlbiBCbG9iLnNsaWNlIHN1cHBvcnQgaXMgbGFuZGVkLgotICAgIGlmICghbmFtZS5pc0Vt
cHR5KCkgJiYgIWJsb2ItPnBhdGgoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgUmVmUHRyPEZpbGU+
IGZpbGUgPSBzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYik7Ci0gICAgICAgIGFwcGVuZEZpbGUobmFt
ZSwgZmlsZS5yZWxlYXNlKCkpOwotICAgIH0KKyAgICBpZiAoIW5hbWUuaXNFbXB0eSgpKQorICAg
ICAgICBhcHBlbmRCbG9iKG5hbWUsIGJsb2IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZS5oIGIvV2ViQ29yZS9odG1sL0ZpbGUuaApp
bmRleCBkZGE0ODJhLi4wNjVkZDg2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZS5oCisr
KyBiL1dlYkNvcmUvaHRtbC9GaWxlLmgKQEAgLTM5LDYgKzM5LDggQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUocGF0aCkpOwogICAgIH0KIAorICAgIHZpcnR1YWwg
Ym9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKICAgICBjb25zdCBTdHJpbmcm
IG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICBjb25zdCBTdHJpbmcmIHR5cGUo
KSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zv
cm1EYXRhTGlzdC5oIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oCmluZGV4IDgzOThkYmMu
LmNjOTM1YWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaAorKysgYi9X
ZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgKQEAgLTIxLDggKzIxLDggQEAKICNpZm5kZWYgRm9y
bURhdGFMaXN0X2gKICNkZWZpbmUgRm9ybURhdGFMaXN0X2gKIAorI2luY2x1ZGUgIkJsb2IuaCIK
ICNpbmNsdWRlICJDU3RyaW5nLmgiCi0jaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIlRleHRF
bmNvZGluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNywyMSArMzcsMjEgQEAgcHVi
bGljOgogICAgICAgICB7IGFwcGVuZFN0cmluZyhrZXkpOyBhcHBlbmRTdHJpbmcodmFsdWUpOyB9
CiAgICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IFN0cmluZyYga2V5LCBpbnQgdmFsdWUpCiAgICAg
ICAgIHsgYXBwZW5kU3RyaW5nKGtleSk7IGFwcGVuZFN0cmluZyhTdHJpbmc6Om51bWJlcih2YWx1
ZSkpOyB9Ci0gICAgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYga2V5LCBQYXNzUmVmUHRy
PEZpbGU+IGZpbGUpCi0gICAgICAgIHsgYXBwZW5kU3RyaW5nKGtleSk7IG1fbGlzdC5hcHBlbmQo
ZmlsZSk7IH0KKyAgICB2b2lkIGFwcGVuZEJsb2IoY29uc3QgU3RyaW5nJiBrZXksIFBhc3NSZWZQ
dHI8QmxvYj4gYmxvYikKKyAgICAgICAgeyBhcHBlbmRTdHJpbmcoa2V5KTsgbV9saXN0LmFwcGVu
ZChibG9iKTsgfQogCiAgICAgY2xhc3MgSXRlbSB7CiAgICAgcHVibGljOgogICAgICAgICBJdGVt
KCkgeyB9CiAgICAgICAgIEl0ZW0oY29uc3QgQ1N0cmluZyYgZGF0YSkgOiBtX2RhdGEoZGF0YSkg
eyB9Ci0gICAgICAgIEl0ZW0oUGFzc1JlZlB0cjxGaWxlPiBmaWxlKSA6IG1fZmlsZShmaWxlKSB7
IH0KKyAgICAgICAgSXRlbShQYXNzUmVmUHRyPEJsb2I+IGJsb2IpIDogbV9ibG9iKGJsb2IpIHsg
fQogCiAgICAgICAgIGNvbnN0IENTdHJpbmcmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7
IH0KLSAgICAgICAgRmlsZSogZmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZS5nZXQoKTsgfQor
ICAgICAgICBCbG9iKiBibG9iKCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLmdldCgpOyB9CiAKICAg
ICBwcml2YXRlOgogICAgICAgICBDU3RyaW5nIG1fZGF0YTsKLSAgICAgICAgUmVmUHRyPEZpbGU+
IG1fZmlsZTsKKyAgICAgICAgUmVmUHRyPEJsb2I+IG1fYmxvYjsKICAgICB9OwogCiAgICAgY29u
c3QgVmVjdG9yPEl0ZW0+JiBsaXN0KCkgY29uc3QgeyByZXR1cm4gbV9saXN0OyB9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAKaW5kZXggNmEyMTRhYi4uMzFkYWMzZSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcApAQCAtMTM1OSwxMiArMTM1OSwxMiBAQCBib29sIEhUTUxJbnB1dEVsZW1l
bnQ6OmFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYgZW5jb2RpbmcsIGJvb2wgbXVsdGlwYXJ0
KQogICAgICAgICAgICAgLy8gSWYgbm8gZmlsZW5hbWUgYXQgYWxsIGlzIGVudGVyZWQsIHJldHVy
biBzdWNjZXNzZnVsIGJ1dCBlbXB0eS4KICAgICAgICAgICAgIC8vIE51bGwgd291bGQgYmUgbW9y
ZSBsb2dpY2FsLCBidXQgTmV0c2NhcGUgcG9zdHMgYW4gZW1wdHkgZmlsZS4gQXJnaC4KICAgICAg
ICAgICAgIGlmICghbnVtRmlsZXMpIHsKLSAgICAgICAgICAgICAgICBlbmNvZGluZy5hcHBlbmRG
aWxlKG5hbWUoKSwgRmlsZTo6Y3JlYXRlKCIiKSk7CisgICAgICAgICAgICAgICAgZW5jb2Rpbmcu
YXBwZW5kQmxvYihuYW1lKCksIEZpbGU6OmNyZWF0ZSgiIikpOwogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtRmlsZXM7ICsraSkKLSAgICAgICAgICAgICAgICBlbmNvZGluZy5hcHBlbmRG
aWxlKG5hbWUoKSwgbV9maWxlTGlzdC0+aXRlbShpKSk7CisgICAgICAgICAgICAgICAgZW5jb2Rp
bmcuYXBwZW5kQmxvYihuYW1lKCksIG1fZmlsZUxpc3QtPml0ZW0oaSkpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhLmNwcAppbmRleCA1OTdmODU5Li5mZjMzYmYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9G
b3JtRGF0YS5jcHAKQEAgLTI3LDExICsyNywxMyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5o
IgogI2luY2x1ZGUgIkRPTUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkZvcm1EYXRh
QnVpbGRlci5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8d3RmL1VVSUQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xODcsOSArMTg5LDIzIEBAIHZvaWQgRm9ybURhdGE6
OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBp
c011bHRpUGFyCiAKICAgICAgICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2U7
CiAgICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCB0eXBlIGlzIEZJTEUsIHRoZW4gd2UgYWxz
byBuZWVkIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lCi0gICAgICAgICAgICBpZiAodmFsdWUuZmls
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gdmFsdWUuZmlsZSgp
LT5wYXRoKCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gdmFsdWUuZmlsZSgp
LT5maWxlTmFtZSgpOworICAgICAgICAgICAgaWYgKHZhbHVlLmJsb2IoKSkgeworICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IHZhbHVlLmJsb2IoKS0+cGF0aCgpOworI2lmIEVO
QUJMRShCTE9CX1NMSUNFKQorICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZTsKKyAgICAg
ICAgICAgICAgICBpZiAodmFsdWUuYmxvYigpLT5pc0ZpbGUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgZmlsZU5hbWUgPSBzdGF0aWNfY2FzdDxGaWxlKj4odmFsdWUuYmxvYigpKS0+ZmlsZU5hbWUo
KTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBi
bG9iIGlzIHNsaWNlZCBmcm9tIGEgZmlsZSwgaXQgZG9lcyBub3QgaGF2ZSB0aGUgZmlsZW5hbWUu
IEluIHRoaXMgY2FzZSwgbGV0J3MgcHJvZHVjZSBhIHVuaXF1ZSBmaWxlbmFtZS4KKyAgICAgICAg
ICAgICAgICAgICAgY2hhciB1dWlkU3RyaW5nWzM3XTsKKyAgICAgICAgICAgICAgICAgICAgV1RG
OjpjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKHV1aWRTdHJpbmcsIDM3KTsKKyAgICAgICAgICAg
ICAgICAgICAgZmlsZU5hbWUgPSAiQmxvYiI7CisgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1l
ICs9IHV1aWRTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lLnJlcGxhY2UoIi0i
LCAiIik7IC8vIEZvciBzYWZlLCByZW1vdmUgJy0nIGluIGNhc2UgdGhhdCBjZXJ0YWluIHNlcnZl
ciBkb2VzIG5vdCBsaWtlIGl0IHRvIGJlIGluIHRoZSBmaWxlbmFtZS4KKyAgICAgICAgICAgICAg
ICB9CisjZWxzZQorICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IHN0YXRpY19jYXN0
PEZpbGUqPih2YWx1ZS5ibG9iKCkpLT5maWxlTmFtZSgpOworI2VuZGlmCiAKICAgICAgICAgICAg
ICAgICAvLyBMZXQgdGhlIGFwcGxpY2F0aW9uIHNwZWNpZnkgYSBmaWxlbmFtZSBpZiBpdCdzIGdv
aW5nIHRvIGdlbmVyYXRlIGEgcmVwbGFjZW1lbnQgZmlsZSBmb3IgdGhlIHVwbG9hZC4KICAgICAg
ICAgICAgICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKSB7CkBAIC0yMDQsNyArMjIwLDEyIEBAIHZv
aWQgRm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3Jt
RGF0YSwgYm9vbCBpc011bHRpUGFyCiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBpbmNs
dWRlIHRoZSBmaWxlbmFtZT0iLi4iIHBhcnQgaW4gdGhlIGhlYWRlciwgZXZlbiBpZiB0aGUgZmls
ZW5hbWUgaXMgZW1wdHkKICAgICAgICAgICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYWRkRmlsZW5h
bWVUb011bHRpUGFydEhlYWRlcihoZWFkZXIsIGVuY29kaW5nLCBmaWxlTmFtZSk7CiAKKyAgICAg
ICAgICAgICAgICAvLyBJZiBhIGJsb2IgaXMgc2xpY2VkIGZyb20gYSBmaWxlLCBkbyBub3QgYWRk
IHRoZSBjb250ZW50IHR5cGUuIAorI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgICAgICAgICAg
ICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpICYmIHZhbHVlLmJsb2IoKS0+aXNGaWxlKCkpIHsK
KyNlbHNlCiAgICAgICAgICAgICAgICAgaWYgKCFmaWxlTmFtZS5pc0VtcHR5KCkpIHsKKyNlbmRp
ZgogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIE1JTUVUeXBlUmVnaXN0cnkgZnVu
Y3Rpb24ncyBuYW1lIG1ha2VzIGl0IHNvdW5kIGxpa2UgaXQgdGFrZXMgYSBwYXRoLAogICAgICAg
ICAgICAgICAgICAgICAvLyBub3QganVzdCBhIGJhc2VuYW1lLiBCdXQgZmlsZW5hbWUgaXMgbm90
IHRoZSBwYXRoLiBCdXQgbm90ZSB0aGF0IGl0J3Mgbm90IHNhZmUgdG8KICAgICAgICAgICAgICAg
ICAgICAgLy8ganVzdCB1c2UgcGF0aCBpbnN0ZWFkIHNpbmNlIGluIHRoZSBnZW5lcmF0ZWQtZmls
ZSBjYXNlIGl0IHdpbGwgbm90IHJlZmxlY3QgdGhlCkBAIC0yMjEsOCArMjQyLDEyIEBAIHZvaWQg
Rm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0
YSwgYm9vbCBpc011bHRpUGFyCiAgICAgICAgICAgICBhcHBlbmREYXRhKGhlYWRlci5kYXRhKCks
IGhlYWRlci5zaXplKCkpOwogICAgICAgICAgICAgaWYgKHNpemVfdCBkYXRhU2l6ZSA9IHZhbHVl
LmRhdGEoKS5sZW5ndGgoKSkKICAgICAgICAgICAgICAgICBhcHBlbmREYXRhKHZhbHVlLmRhdGEo
KS5kYXRhKCksIGRhdGFTaXplKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmZpbGUoKSAm
JiAhdmFsdWUuZmlsZSgpLT5wYXRoKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGFwcGVu
ZEZpbGUodmFsdWUuZmlsZSgpLT5wYXRoKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7CisgICAgICAg
ICAgICBlbHNlIGlmICh2YWx1ZS5ibG9iKCkgJiYgIXZhbHVlLmJsb2IoKS0+cGF0aCgpLmlzRW1w
dHkoKSkKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICAgICAgICAgICAgICBhcHBlbmRGaWxl
UmFuZ2UodmFsdWUuYmxvYigpLT5wYXRoKCksIHZhbHVlLmJsb2IoKS0+c3RhcnQoKSwgdmFsdWUu
YmxvYigpLT5sZW5ndGgoKSwgdmFsdWUuYmxvYigpLT5tb2RpZmljYXRpb25UaW1lKCksIHNob3Vs
ZEdlbmVyYXRlRmlsZSk7CisjZWxzZQorICAgICAgICAgICAgICAgIGFwcGVuZEZpbGUodmFsdWUu
YmxvYigpLT5wYXRoKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7CisjZW5kaWYKIAogICAgICAgICAg
ICAgYXBwZW5kRGF0YSgiXHJcbiIsIDIpOwogICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbSBiL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KaW5kZXggNWU4YzNm
Zi4uM2I4NWI4MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3Jt
RGF0YVN0cmVhbU1hYy5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1E
YXRhU3RyZWFtTWFjLm1tCkBAIC0xNDIsNiArMTQyLDkgQEAgc3RhdGljIHZvaWQgY2xvc2VDdXJy
ZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMgKmZvcm0pCiAgICAgICAgIENGUmVhZFN0cmVhbVNl
dENsaWVudChmb3JtLT5jdXJyZW50U3RyZWFtLCBrQ0ZTdHJlYW1FdmVudE5vbmUsIE5VTEwsIE5V
TEwpOwogICAgICAgICBDRlJlbGVhc2UoZm9ybS0+Y3VycmVudFN0cmVhbSk7CiAgICAgICAgIGZv
cm0tPmN1cnJlbnRTdHJlYW0gPSBOVUxMOworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgICAg
ICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBCbG9iOjp0b0VuZE9mRmlsZTsKKyNl
bmRpZgogICAgIH0KICAgICBpZiAoZm9ybS0+Y3VycmVudERhdGEpIHsKICAgICAgICAgZmFzdEZy
ZWUoZm9ybS0+Y3VycmVudERhdGEpOwo=
</data>
<flag name="commit-queue"
          id="35138"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52204</attachid>
            <date>2010-03-31 13:16:38 -0700</date>
            <delta_ts>2010-03-31 13:19:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-36678-20100331131637.patch</filename>
            <type>text/plain</type>
            <size>82252</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBiNGFjM2VkLi4xYmJkNTgyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDMt
MzAgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgQmxvYkJ1aWxkZXIgZGVm
aW5lZCBpbiBGaWxlQVBJL0ZpbGVXcml0ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNjU2OAorCisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9z
ZW5kLWJsb2ItYnktYmxvYi1idWlsZGVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy9sb2NhbC9zZW5kLWJsb2ItYnktYmxvYi1idWlsZGVyLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtYmxvYi1ieS1ibG9iLWJ1
aWxkZXIuanM6IEFkZGVkLgorCiAyMDEwLTAzLTMwICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRG1pdHJ5IFRpdG92LgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1ibG9iLWJ5LWJsb2It
YnVpbGRlci5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQt
YmxvYi1ieS1ibG9iLWJ1aWxkZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uM2NjNDdkYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9j
YWwvcmVzb3VyY2VzL3NlbmQtYmxvYi1ieS1ibG9iLWJ1aWxkZXIuanMKQEAgLTAsMCArMSw4MyBA
QAorZGVzY3JpcHRpb24oIlRlc3QgZm9yIGJ1aWxkaW5nIGJsb2JzIGJ5IEJsb2JCdWlsZGVyIGFu
ZCBzZW5kaW5nIHRoZW0gdmlhIFhNTEh0dHBSZXF1ZXN0LiIpOworCitmdW5jdGlvbiB1cGxvYWRC
bG9iKGJsb2IsIGV4cGVjdGVkKQoreworICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3Qo
KTsKKyAgICB4aHIub3BlbigiUE9TVCIsICJodHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJl
cXVlc3QvcmVzb3VyY2VzL3Bvc3QtZWNoby5jZ2kiLCBmYWxzZSk7CisKKyAgICB2YXIgcGFzc2Vk
OworICAgIHZhciBtZXNzYWdlOworICAgIHRyeSB7CisgICAgICAgIC8vIFNlbmRpbmcgdGhlIGJs
b2IgKGFzIGEgc3RyaW5nKS4KKyAgICAgICAgeGhyLnNlbmQoYmxvYik7CisgICAgICAgIGlmICh4
aHIucmVzcG9uc2VUZXh0ID09IGV4cGVjdGVkKSB7CisgICAgICAgICAgICBwYXNzZWQgPSB0cnVl
OworICAgICAgICAgICAgbWVzc2FnZSA9ICJFeHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVk
OiAiICsgeGhyLnJlc3BvbnNlVGV4dDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBh
c3NlZCA9IGZhbHNlOworICAgICAgICAgICAgbWVzc2FnZSA9ICJVbmV4cGVjdGVkIHJlc3BvbnNl
IGRhdGEgcmVjZWl2ZWQ6ICIgKyB4aHIucmVzcG9uc2VUZXh0OworICAgICAgICB9CisgICAgfSBj
YXRjaCAoZXgpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgIG1lc3NhZ2UgPSAi
VW5leHBlY3RlZCBleGNlcHRpb24gdGhyb3duOiAiICsgZXg7CisgICAgfQorCisgICAgaWYgKHBh
c3NlZCkKKyAgICAgICAgdGVzdFBhc3NlZChtZXNzYWdlKTsKKyAgICBlbHNlCisgICAgICAgIHRl
c3RGYWlsZWQobWVzc2FnZSk7Cit9CisKK3ZhciBzdHJpbmdBID0gJ0ExMjM0NTY3fCc7Cit2YXIg
c3RyaW5nQiA9ICdCMTIzNDV8JzsKK3ZhciBzdHJpbmdDID0gJ0MxMjM0NTY3ODkwMXwnOworCit2
YXIgYmIgPSBuZXcgQmxvYkJ1aWxkZXIoKTsKK3ZhciBzdHJpbmdWYWx1ZVN1cHBvcnRlZCA9IHR5
cGVvZiBiYi5nZXRCbG9iKCkuc3RyaW5nVmFsdWUgIT0gInVuZGVmaW5lZCI7CisKK2RlYnVnKCcq
IEJsb2JCdWlsZGVyLmFwcGVuZChzdHJpbmcpJyk7CitiYi5hcHBlbmQoc3RyaW5nQSk7Cit2YXIg
YmxvYjEgPSBiYi5nZXRCbG9iKCk7Cit1cGxvYWRCbG9iKGJsb2IxLCBzdHJpbmdBKTsKKworYmIu
YXBwZW5kKHN0cmluZ0IpOwordmFyIGJsb2IyID0gYmIuZ2V0QmxvYigpOwordmFyIGV4cGVjdGVk
ID0gc3RyaW5nQSArIHN0cmluZ0I7Cit1cGxvYWRCbG9iKGJsb2IyLCBleHBlY3RlZCk7CisKK2Rl
YnVnKCcqIEJsb2JCdWlsZGVyLmFwcGVuZChibG9iKScpOworYmIuYXBwZW5kKGJsb2IxKTsKK3Zh
ciBibG9iMyA9IGJiLmdldEJsb2IoKTsKK2V4cGVjdGVkICs9IHN0cmluZ0E7Cit1cGxvYWRCbG9i
KGJsb2IzLCBleHBlY3RlZCk7CisKK2RlYnVnKCcqIEJsb2JCdWlsZGVyLmFwcGVuZChtaXhlZCkn
KTsKK2JiLmFwcGVuZChzdHJpbmdDKTsKK3ZhciBibG9iNCA9IGJiLmdldEJsb2IoKTsKK2V4cGVj
dGVkICs9IHN0cmluZ0M7Cit1cGxvYWRCbG9iKGJsb2I0LCBleHBlY3RlZCk7CisKK2JiLmFwcGVu
ZChibG9iMyk7Cit2YXIgYmxvYjUgPSBiYi5nZXRCbG9iKCk7CitleHBlY3RlZCA9IHN0cmluZ0Eg
KyBzdHJpbmdCICsgc3RyaW5nQSArIHN0cmluZ0MgKyBzdHJpbmdBICsgc3RyaW5nQiArIHN0cmlu
Z0E7Cit1cGxvYWRCbG9iKGJsb2I1LCBleHBlY3RlZCk7CisKK2RlYnVnKCcqIENvbWJpbmVkQmxv
Yi5zbGljZSgpJyk7Cit2YXIgYmxvYjYgPSBibG9iNS5zbGljZSgzLCAxMik7Cit2YXIgc2xpY2VF
eHBlY3RlZDEgPSBleHBlY3RlZC5zdWJzdHIoMywgMTIpOwordXBsb2FkQmxvYihibG9iNiwgc2xp
Y2VFeHBlY3RlZDEpOworCit2YXIgYmxvYjcgPSBibG9iNS5zbGljZSgxMywgNDApOwordmFyIHNs
aWNlRXhwZWN0ZWQyID0gZXhwZWN0ZWQuc3Vic3RyKDEzLCA0MCk7Cit1cGxvYWRCbG9iKGJsb2I3
LCBzbGljZUV4cGVjdGVkMik7CisKK2RlYnVnKCcqIHNsaWNlIG9mIHNsaWNlJyk7Cit2YXIgYmxv
YjggPSBibG9iNi5zbGljZSgyLCA5KTsKK3NsaWNlRXhwZWN0ZWQxID0gc2xpY2VFeHBlY3RlZDEu
c3Vic3RyKDIsIDkpOwordXBsb2FkQmxvYihibG9iOCwgc2xpY2VFeHBlY3RlZDEpOworCit2YXIg
YmxvYjkgPSBibG9iNy5zbGljZSg1LCAxNyk7CitzbGljZUV4cGVjdGVkMiA9IHNsaWNlRXhwZWN0
ZWQyLnN1YnN0cig1LCAxNyk7Cit1cGxvYWRCbG9iKGJsb2I5LCBzbGljZUV4cGVjdGVkMik7CisK
K3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2NhbC9zZW5kLWJsb2ItYnktYmxvYi1idWlsZGVyLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1ibG9iLWJ5LWJsb2ItYnVpbGRlci1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q5OWI0Mgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1ibG9i
LWJ5LWJsb2ItYnVpbGRlci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyMyBAQAorVGVzdCBmb3Ig
YnVpbGRpbmcgYmxvYnMgYnkgQmxvYkJ1aWxkZXIgYW5kIHNlbmRpbmcgdGhlbSB2aWEgWE1MSHR0
cFJlcXVlc3QuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisqIEJsb2JCdWlsZGVy
LmFwcGVuZChzdHJpbmcpCitQQVNTIEV4cGVjdGVkIHJlc3BvbnNlIGRhdGEgcmVjZWl2ZWQ6IEEx
MjM0NTY3fAorUEFTUyBFeHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiBBMTIzNDU2N3xC
MTIzNDV8CisqIEJsb2JCdWlsZGVyLmFwcGVuZChibG9iKQorUEFTUyBFeHBlY3RlZCByZXNwb25z
ZSBkYXRhIHJlY2VpdmVkOiBBMTIzNDU2N3xCMTIzNDV8QTEyMzQ1Njd8CisqIEJsb2JCdWlsZGVy
LmFwcGVuZChtaXhlZCkKK1BBU1MgRXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZDogQTEy
MzQ1Njd8QjEyMzQ1fEExMjM0NTY3fEMxMjM0NTY3ODkwMXwKK1BBU1MgRXhwZWN0ZWQgcmVzcG9u
c2UgZGF0YSByZWNlaXZlZDogQTEyMzQ1Njd8QjEyMzQ1fEExMjM0NTY3fEMxMjM0NTY3ODkwMXxB
MTIzNDU2N3xCMTIzNDV8QTEyMzQ1Njd8CisqIENvbWJpbmVkQmxvYi5zbGljZSgpCitQQVNTIEV4
cGVjdGVkIHJlc3BvbnNlIGRhdGEgcmVjZWl2ZWQ6IDM0NTY3fEIxMjM0NQorUEFTUyBFeHBlY3Rl
ZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiA0NXxBMTIzNDU2N3xDMTIzNDU2Nzg5MDF8QTEyMzQ1
Njd8QjEyMzQ1CisqIHNsaWNlIG9mIHNsaWNlCitQQVNTIEV4cGVjdGVkIHJlc3BvbnNlIGRhdGEg
cmVjZWl2ZWQ6IDU2N3xCMTIzNAorUEFTUyBFeHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVk
OiAyMzQ1Njd8QzEyMzQ1Njc4OQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwv
c2VuZC1ibG9iLWJ5LWJsb2ItYnVpbGRlci5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9s
b2NhbC9zZW5kLWJsb2ItYnktYmxvYi1idWlsZGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOTU3OTk0MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvbG9jYWwvc2VuZC1ibG9iLWJ5LWJsb2ItYnVpbGRlci5odG1sCkBAIC0wLDAgKzEs
MTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxo
dG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3NlbmQtYmxvYi1ieS1ibG9iLWJ1aWxkZXIuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0FuZHJv
aWQuZGVyaXZlZC5qc2NiaW5kaW5ncy5tayBiL1dlYkNvcmUvQW5kcm9pZC5kZXJpdmVkLmpzY2Jp
bmRpbmdzLm1rCmluZGV4IGIzYzUzMWMuLjE0MTI2NmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQW5k
cm9pZC5kZXJpdmVkLmpzY2JpbmRpbmdzLm1rCisrKyBiL1dlYkNvcmUvQW5kcm9pZC5kZXJpdmVk
LmpzY2JpbmRpbmdzLm1rCkBAIC0xNTMsNiArMTUzLDcgQEAgJChwYXRzdWJzdCAlLmgsJS5jcHAs
JChHRU4pKTogJChpbnRlcm1lZGlhdGVzKS9kb20vJS5jcHAgOiAkKGludGVybWVkaWF0ZXMpL2Rv
bS8KICMgSFRNTAogR0VOIDo9IFwKICAgICAkKGludGVybWVkaWF0ZXMpL2h0bWwvSlNCbG9iLmgg
XAorICAgICQoaW50ZXJtZWRpYXRlcykvaHRtbC9KU0Jsb2JCdWlsZGVyLmggXAogICAgICQoaW50
ZXJtZWRpYXRlcykvaHRtbC9KU0RPTUZvcm1EYXRhLmggXAogICAgICQoaW50ZXJtZWRpYXRlcykv
aHRtbC9KU0RhdGFHcmlkQ29sdW1uLmggXAogICAgICQoaW50ZXJtZWRpYXRlcykvaHRtbC9KU0Rh
dGFHcmlkQ29sdW1uTGlzdC5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQW5kcm9pZC5kZXJpdmVk
LnY4YmluZGluZ3MubWsgYi9XZWJDb3JlL0FuZHJvaWQuZGVyaXZlZC52OGJpbmRpbmdzLm1rCmlu
ZGV4IGY2YTVlZmQuLmFkY2I3MzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQW5kcm9pZC5kZXJpdmVk
LnY4YmluZGluZ3MubWsKKysrIGIvV2ViQ29yZS9BbmRyb2lkLmRlcml2ZWQudjhiaW5kaW5ncy5t
awpAQCAtMTM1LDYgKzEzNSw3IEBAICQocGF0c3Vic3QgJS5oLCUuY3BwLCQoR0VOKSk6ICQoaW50
ZXJtZWRpYXRlcykvYmluZGluZ3MvJS5jcHAgOiAkKGludGVybWVkaWF0ZXMpCiAjIEhUTUwKIEdF
TiA6PSBcCiAgICAgJChpbnRlcm1lZGlhdGVzKS9iaW5kaW5ncy9WOEJsb2IuaCBcCisgICAgJChp
bnRlcm1lZGlhdGVzKS9iaW5kaW5ncy9WOEJsb2JCdWlsZGVyLmggXAogICAgICQoaW50ZXJtZWRp
YXRlcykvYmluZGluZ3MvVjhEYXRhR3JpZENvbHVtbi5oIFwKICAgICAkKGludGVybWVkaWF0ZXMp
L2JpbmRpbmdzL1Y4RGF0YUdyaWRDb2x1bW5MaXN0LmggXAogICAgICQoaW50ZXJtZWRpYXRlcykv
YmluZGluZ3MvVjhGaWxlLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9BbmRyb2lkLm1rIGIvV2Vi
Q29yZS9BbmRyb2lkLm1rCmluZGV4IDhmZmQ3NjcuLmRjZDk0Y2MgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvQW5kcm9pZC5taworKysgYi9XZWJDb3JlL0FuZHJvaWQubWsKQEAgLTIzOCw2ICsyMzgsOCBA
QCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAloaXN0b3J5L2FuZHJv
aWQvSGlzdG9yeUl0ZW1BbmRyb2lkLmNwcCBcCiAJXAogCWh0bWwvQmxvYi5jcHAgXAorCWh0bWwv
QmxvYkJ1aWxkZXIuY3BwIFwKKwlodG1sL0J5dGVTdG9yZS5jcHAgXAogCWh0bWwvQ29sbGVjdGlv
bkNhY2hlLmNwcCBcCiAJaHRtbC9ET01Gb3JtRGF0YS5jcHAgXAogCWh0bWwvRmlsZS5jcHAgXApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9BbmRyb2lkLnY4YmluZGluZ3MubWsgYi9XZWJDb3JlL0FuZHJv
aWQudjhiaW5kaW5ncy5tawppbmRleCA1MTJiNmNlLi4zM2M1NGFmIDEwMDY0NAotLS0gYS9XZWJD
b3JlL0FuZHJvaWQudjhiaW5kaW5ncy5taworKysgYi9XZWJDb3JlL0FuZHJvaWQudjhiaW5kaW5n
cy5tawpAQCAtODYsNiArODYsNyBAQCBMT0NBTF9TUkNfRklMRVMgKz0gXAogCVwKIAliaW5kaW5n
cy92OC9jdXN0b20vVjhBdHRyQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmFy
SW5mb0N1c3RvbS5jcHAgXAorCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JCdWlsZGVyQ3VzdG9t
LmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTUnVsZUN1c3RvbS5jcHAgXAogCWJpbmRp
bmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwIFwKIAliaW5kaW5n
cy92OC9jdXN0b20vVjhDU1NTdHlsZVNoZWV0Q3VzdG9tLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdlNWY4M2IuLmZhNmU1ZjMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTM5IEBACisyMDEwLTAzLTMwICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTdXBwb3J0IEJsb2JCdWlsZGVyIGRlZmluZWQgaW4gRmlsZUFQSS9GaWxlV3JpdGVyIGRyYWZ0
LgorICAgICAgICBodHRwOi8vZGV2LnczLm9yZy8yMDA5L2RhcC9maWxlLXN5c3RlbS9maWxlLXdy
aXRlci5odG1sCisgICAgICAgIEFkZCBCbG9iQnVpbGRlciBhbmQgQnl0ZVN0b3JlIHRoYXQgc3Rv
cmVzIGFjdHVhbCBieXRlIGFycmF5IGRhdGEKKyAgICAgICAgZm9yIGEgbm9uLWZpbGUgYmFzZWQg
YmxvYi4gIFRoZSBwYXRjaCBhbHNvIGFkZHMgdjggYW5kIGpzYworICAgICAgICBiaW5kaW5ncyBm
b3IgQmxvYkJ1aWxkZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNjU2OAorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1ibG9i
LWJ5LWJsb2ItYnVpbGRlci5odG1sCisKKyAgICAgICAgKiBBbmRyb2lkLmRlcml2ZWQuanNjYmlu
ZGluZ3MubWs6CisgICAgICAgICogQW5kcm9pZC5kZXJpdmVkLnY4YmluZGluZ3MubWs6CisgICAg
ICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBBbmRyb2lkLnY4YmluZGluZ3MubWs6CisgICAg
ICAgICogRGVyaXZlZFNvdXJjZXMuY3BwOgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6
CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIFdlYkNvcmUucHJpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5P
bmUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQmxvYkJ1aWxkZXJDb25zdHJ1Y3Rvci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQmxv
YkJ1aWxkZXJDb25zdHJ1Y3Rvcjo6SlNCbG9iQnVpbGRlckNvbnN0cnVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnN0cnVjdEJsb2JCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQmxv
YkJ1aWxkZXJDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNCbG9iQnVpbGRlckNvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SlNCbG9iQnVpbGRlckNvbnN0cnVjdG9yOjpjbGFzc0luZm8pOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTQmxvYkJ1aWxkZXJDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkpTQmxvYkJ1aWxkZXI6OmFwcGVuZCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5k
b3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmJsb2JCdWlsZGVy
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhCbG9iQnVpbGRlckN1c3RvbS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VjhCbG9iQnVpbGRlcjo6Y29uc3RydWN0b3JDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOEJsb2JCdWlsZGVyOjphcHBlbmRDYWxsYmFjayk6
CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKiBodG1sL0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6c2xpY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6QmxvYjo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsZUJsb2I6OkZpbGVCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVCbG9iOjpzaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbGVCbG9iOjpyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bGVCbG9iOjpyZWFkRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVCbG9iOjpzbmFwc2hv
dEVuZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVCbG9iOjpzbGljZUludGVybmFs
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFCbG9iOjpEYXRhQmxvYik6CisgICAgICAgIChXZWJD
b3JlOjpDb21iaW5lZEJsb2I6OkNvbWJpbmVkQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpDb21i
aW5lZEJsb2I6OmFwcGVuZEJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6Q29tYmluZWRCbG9iOjph
cHBlbmRCbG9iTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21iaW5lZEJsb2I6OnJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tYmluZWRCbG9iOjpyZWFkRGlyZWN0KToKKyAgICAgICAgKiBo
dG1sL0Jsb2IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmlzVXNpbmdGaWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJsb2I6OmlzVXNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6
OmlzQ29tYmluZWQpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6dG9GaWxlQmxvYik6CisgICAg
ICAgIChXZWJDb3JlOjpCbG9iOjp0b0RhdGFCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6
OnRvQ29tYmluZWRCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJsb2I6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpzbmFw
c2hvdEVuZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6Om1vZGlmaWNhdGlvblRp
bWUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUJsb2I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpGaWxlQmxvYjo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlQmxvYjo6aXNVc2lu
Z0ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUJsb2I6OnRvRmlsZUJsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsZUJsb2I6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVCbG9i
OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUJsb2I6Om1vZGlmaWNhdGlvblRpbWUp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YUJsb2I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhQmxvYjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhQmxvYjo6cmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhQmxvYjo6cmVhZERpcmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhQmxvYjo6aXNVc2luZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YUJsb2I6OnRv
RGF0YUJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YUJsb2I6OnN0YXJ0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFCbG9iOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YUJsb2I6
OnNsaWNlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q29tYmluZWRCbG9iOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tYmluZWRCbG9iOjpzaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbWJpbmVkQmxvYjo6aXNDb21iaW5lZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21iaW5l
ZEJsb2I6OnRvQ29tYmluZWRCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbWJpbmVkQmxvYjo6
bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbWJpbmVkQmxvYjo6c2xpY2VJbnRlcm5hbCk6
CisgICAgICAgICogaHRtbC9CbG9iLmlkbDoKKyAgICAgICAgKiBodG1sL0Jsb2JCdWlsZGVyLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpCbG9iQnVpbGRlcjo6QmxvYkJ1aWxkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6QmxvYkJ1aWxkZXI6On5CbG9iQnVpbGRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHJpbmdXcml0ZXJXaXRoRml4TGluZUJyZWFrczo6ZmluYWxTdHJpbmdMZW5ndGgp
OgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nV3JpdGVyV2l0aEZpeExpbmVCcmVha3M6OlN0cmlu
Z1dyaXRlcldpdGhGaXhMaW5lQnJlYWtzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ1dyaXRl
cldpdGhGaXhMaW5lQnJlYWtzOjp3cml0ZVRvQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJs
b2JCdWlsZGVyOjphcHBlbmRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYkJ1aWxkZXI6
OmFwcGVuZEJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYkJ1aWxkZXI6OmdldEJsb2IpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRW5kaW5nc1R5cGVNYXApOgorICAgICAgICAoV2ViQ29y
ZTo6QmxvYkJ1aWxkZXI6OnNldEVuZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYkJ1aWxk
ZXI6OmVuZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYkJ1aWxkZXI6OmdldEVuZGluZ0No
YXJzKToKKyAgICAgICAgKiBodG1sL0Jsb2JCdWlsZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6QmxvYkJ1aWxkZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iQnVpbGRl
cjo6KToKKyAgICAgICAgKiBodG1sL0Jsb2JCdWlsZGVyLmlkbDogQWRkZWQuCisgICAgICAgICog
aHRtbC9CeXRlU3RvcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJ5dGVTdG9yZTo6
Qnl0ZVN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkJ5dGVTdG9yZTo6fkJ5dGVTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCeXRlU3RvcmU6OmFwcGVuZERpcmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpCeXRlU3RvcmU6OnJlYWREaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVtY3B5V3Jp
dGVyOjpNZW1jcHlXcml0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVtY3B5V3JpdGVyOjp3cml0
ZVRvQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbWNweVJlYWRlcjo6TWVtY3B5UmVhZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbWNweVJlYWRlcjo6cmVhZEZyb21CdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Qnl0ZVN0b3JlOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6Qnl0
ZVN0b3JlOjpyZWFkKToKKyAgICAgICAgKiBodG1sL0J5dGVTdG9yZS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkJ5dGVTdG9yZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJ5dGVT
dG9yZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCeXRlU3RvcmU6OmVtcHR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJ5dGVTdG9yZTo6UmVhZGVyOjp+UmVhZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkJ5dGVTdG9yZTo6V3JpdGVyOjp+V3JpdGVyKToKKyAgICAgICAgKiBodG1sL0RPTUZvcm1E
YXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZvcm1EYXRhOjphcHBlbmQpOgorICAgICAg
ICAqIGh0bWwvRmlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpGaWxlKToKKyAgICAg
ICAgKiBodG1sL0ZpbGUuaDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YTo6YXBwZW5kRE9NRm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9y
bURhdGEuaDoKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNlbmQpOgorCiAyMDEwLTAzLTMwICBLZXZpbiBPbGxpdmll
ciAgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgogCiAgICAgICAgIFt3eF0gQnVpbGQgZml4IGFm
dGVyIG5ldyBsb2NhbGl6ZWQgc3RyaW5nIGFkZGl0aW9uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9E
ZXJpdmVkU291cmNlcy5jcHAgYi9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLmNwcAppbmRleCBiMTcy
MmMwLi4zYjU2Yzc0IDEwMDY0NAotLS0gYS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLmNwcAorKysg
Yi9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUg
IkpTQmFySW5mby5jcHAiCiAjaW5jbHVkZSAiSlNCZWZvcmVMb2FkRXZlbnQuY3BwIgogI2luY2x1
ZGUgIkpTQmxvYi5jcHAiCisjaW5jbHVkZSAiSlNCbG9iQnVpbGRlci5jcHAiCiAjaW5jbHVkZSAi
SlNDYW52YXNHcmFkaWVudC5jcHAiCiAjaW5jbHVkZSAiSlNDYW52YXNQYXR0ZXJuLmNwcCIKICNp
bmNsdWRlICJKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwIgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4
IDM2OTQyNzAuLjE1ZjkwMDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZQorKysgYi9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTU0LDYgKzU0LDcgQEAgRE9N
X0NMQVNTRVMgPSBcCiAgICAgQmFySW5mbyBcCiAgICAgQmVmb3JlTG9hZEV2ZW50IFwKICAgICBC
bG9iIFwKKyAgICBCbG9iQnVpbGRlciBcCiAgICAgQ0RBVEFTZWN0aW9uIFwKICAgICBDU1NDaGFy
c2V0UnVsZSBcCiAgICAgQ1NTRm9udEZhY2VSdWxlIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDllZTJhNzYuLjQzYWQz
NmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQpAQCAtMTY4LDYgKzE2OCw3IEBAIElETF9CSU5ESU5HUyArPSBcCiAJV2ViQ29y
ZS9kb20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmlkbCBcCiAJV2ViQ29yZS9kb20vV2hlZWxFdmVu
dC5pZGwgXAogCVdlYkNvcmUvaHRtbC9CbG9iLmlkbCBcCisJV2ViQ29yZS9odG1sL0Jsb2JCdWls
ZGVyLmlkbCBcCiAJV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5LmlkbCBcCiAJV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmlkbCBcCiAJV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTEJ5dGVBcnJheS5pZGwgXApAQCAtMzU1LDYgKzM1Niw5IEBAIHdlYmNvcmVfc291cmNl
cyArPSBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwIFwKIAlXZWJDb3Jl
L2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0
ckN1c3RvbS5jcHAgXAorCVdlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQnVpbGRlckNvbnN0cnVj
dG9yLmNwcCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JCdWlsZGVyQ29uc3RydWN0b3Iu
aCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JCdWlsZGVyQ3VzdG9tLmNwcCBcCiAJV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NEQVRBU2VjdGlvbkN1c3RvbS5jcHAgXAogCVdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEYXRhR3JpZENvbHVtbkxpc3RDdXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGF0YUdyaWREYXRhU291cmNlLmNwcCBcCkBAIC05OTAsNiArOTk0LDEwIEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5oIFwKIAlXZWJD
b3JlL2h0bWwvQmxvYi5jcHAgXAogCVdlYkNvcmUvaHRtbC9CbG9iLmggXAorCVdlYkNvcmUvaHRt
bC9CbG9iQnVpbGRlci5jcHAgXAorCVdlYkNvcmUvaHRtbC9CbG9iQnVpbGRlci5oIFwKKwlXZWJD
b3JlL2h0bWwvQnl0ZVN0b3JlLmNwcCBcCisJV2ViQ29yZS9odG1sL0J5dGVTdG9yZS5oIFwKIAlX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmggXAogCVdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwIFwKIAlXZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc0dyYWRpZW50LmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQppbmRleCA1MDllZDgxLi5kOTcxYjZhIDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtODEsNiArODEs
NyBAQAogICAgICAgICAgICAgJ2RvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuaWRsJywKICAgICAg
ICAgICAgICdkb20vV2hlZWxFdmVudC5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvQmxvYi5pZGwn
LAorICAgICAgICAgICAgJ2h0bWwvQmxvYkJ1aWxkZXIuaWRsJywKICAgICAgICAgICAgICdodG1s
L2NhbnZhcy9XZWJHTEFjdGl2ZUluZm8uaWRsJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9X
ZWJHTEFycmF5LmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xBcnJheUJ1ZmZl
ci5pZGwnLApAQCAtNDc2LDYgKzQ3Nyw5IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNB
dHRyQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVj
dG9yLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVjdG9yLmgn
LAorICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTQmxvYkJ1aWxkZXJDb25zdHJ1Y3Rvci5jcHAn
LAorICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTQmxvYkJ1aWxkZXJDb25zdHJ1Y3Rvci5oJywK
KyAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0Jsb2JCdWlsZGVyQ3VzdG9tLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0
b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0NEQVRBU2VjdGlvbkN1c3RvbS5j
cHAnLApAQCAtNjc3LDYgKzY4MSw3IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvQ2hpbGRU
aHJlYWRET01EYXRhLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEF0dHJD
dXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhCYXJJbmZvQ3Vz
dG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmxvYkJ1aWxkZXJD
dXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNQaXhl
bEFycmF5Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2Vi
R0xBcnJheUN1c3RvbS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJH
TEFycmF5Q3VzdG9tLmNwcCcsCkBAIC0xMzU1LDYgKzEzNjAsMTAgQEAKICAgICAgICAgICAgICdo
aXN0b3J5L1BhZ2VDYWNoZS5oJywKICAgICAgICAgICAgICdodG1sL0Jsb2IuY3BwJywKICAgICAg
ICAgICAgICdodG1sL0Jsb2IuaCcsCisgICAgICAgICAgICAnaHRtbC9CbG9iQnVpbGRlci5jcHAn
LAorICAgICAgICAgICAgJ2h0bWwvQmxvYkJ1aWxkZXIuaCcsCisgICAgICAgICAgICAnaHRtbC9C
eXRlU3RvcmUuY3BwJywKKyAgICAgICAgICAgICdodG1sL0J5dGVTdG9yZS5oJywKICAgICAgICAg
ICAgICdodG1sL2NhbnZhcy9XZWJHTEFycmF5LmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52
YXMvV2ViR0xBcnJheS5oJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTEFycmF5QnVm
ZmVyLmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJpIGIvV2ViQ29yZS9XZWJD
b3JlLnByaQppbmRleCA5NTBjNzZiLi5lZTMwYjEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUucHJpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcmkKQEAgLTI5MCw2ICsyOTAsNyBAQCBJRExf
QklORElOR1MgKz0gXAogICAgIGRvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuaWRsIFwKICAgICBk
b20vV2hlZWxFdmVudC5pZGwgXAogICAgIGh0bWwvQmxvYi5pZGwgXAorICAgIGh0bWwvQmxvYkJ1
aWxkZXIuaWRsIFwKICAgICBodG1sL2NhbnZhcy9XZWJHTEFycmF5LmlkbCBcCiAgICAgaHRtbC9j
YW52YXMvV2ViR0xBcnJheUJ1ZmZlci5pZGwgXAogICAgIGh0bWwvY2FudmFzL1dlYkdMQnl0ZUFy
cmF5LmlkbCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJD
b3JlLnBybwppbmRleCA3MjMwMTI1Li4zZDIwMmJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTI3OSw2ICsyNzksOSBAQCBTT1VS
Q0VTICs9IFwKICAgICBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwIFwKICAgICBiaW5k
aW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTQXR0ckN1c3Rv
bS5jcHAgXAorICAgIGJpbmRpbmdzL2pzL0pTQmxvYkJ1aWxkZXJDb25zdHJ1Y3Rvci5jcHAgXAor
ICAgIGJpbmRpbmdzL2pzL0pTQmxvYkJ1aWxkZXJDb25zdHJ1Y3Rvci5oIFwKKyAgICBiaW5kaW5n
cy9qcy9KU0Jsb2JCdWlsZGVyQ3VzdG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNDREFUQVNl
Y3Rpb25DdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHRDdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REN1c3RvbS5jcHAgXApAQCAtNTk4LDYgKzYwMSw4IEBAIFNPVVJDRVMgKz0gXAogICAgIGhpc3Rv
cnkvcXQvSGlzdG9yeUl0ZW1RdC5jcHAgXAogICAgIGhpc3RvcnkvUGFnZUNhY2hlLmNwcCBcCiAg
ICAgaHRtbC9CbG9iLmNwcCBcCisgICAgaHRtbC9CbG9iQnVpbGRlci5jcHAgXAorICAgIGh0bWwv
Qnl0ZVN0b3JlLmNwcCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwIFwKICAg
ICBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmNwcCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFz
UGl4ZWxBcnJheS5jcHAgXApAQCAtMTAyNyw2ICsxMDMyLDcgQEAgSEVBREVSUyArPSBcCiAgICAg
YmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmggXAogICAgIGJpbmRpbmdzL2pzL0pTQ2FsbGJh
Y2tEYXRhLmggXAogICAgIGJpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5oIFwKKyAgICBi
aW5kaW5ncy9qcy9KU0Jsb2JCdWlsZGVyQ29uc3RydWN0b3IuaCBcCiAgICAgYmluZGluZ3MvanMv
SlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmggXAogICAgIGJpbmRpbmdzL2pzL0pTQ3VzdG9t
UG9zaXRpb25DYWxsYmFjay5oIFwKICAgICBiaW5kaW5ncy9qcy9KU0N1c3RvbVBvc2l0aW9uRXJy
b3JDYWxsYmFjay5oIFwKQEAgLTEzMDQsNiArMTMxMCw4IEBAIEhFQURFUlMgKz0gXAogICAgIGhp
c3RvcnkvSGlzdG9yeUl0ZW0uaCBcCiAgICAgaGlzdG9yeS9QYWdlQ2FjaGUuaCBcCiAgICAgaHRt
bC9CbG9iLmggXAorICAgIGh0bWwvQmxvYkJ1aWxkZXIuaCBcCisgICAgaHRtbC9CeXRlU3RvcmUu
aCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaCBcCiAgICAgaHRtbC9jYW52YXMv
Q2FudmFzUGF0dGVybi5oIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmggXApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggOTQ5NjdkNS4uZTYxNjllMSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC03NzcsNiArNzc3LDE0IEBA
CiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9IiQoV2Vi
S2l0T3V0cHV0RGlyKVxvYmpcV2ViQ29yZVxEZXJpdmVkU291cmNlc1xKU0Jsb2JCdWlsZGVyLmNw
cCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9IiQo
V2ViS2l0T3V0cHV0RGlyKVxvYmpcV2ViQ29yZVxEZXJpdmVkU291cmNlc1xKU0Jsb2JCdWlsZGVy
LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIk
KFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTQ2Fu
dmFzR3JhZGllbnQuY3BwIg0KIAkJCQk+DQogCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KQEAgLTMw
MDk3LDYgKzMwMTA1LDIyIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcQmxvYkJ1aWxkZXIuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxCbG9iQnVpbGRlci5oIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRt
bFxCeXRlU3RvcmUuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5caHRtbFxCeXRlU3RvcmUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcY2FudmFzXENhbnZhc0dyYWRpZW50
LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGU4MGE2ZmIuLmQwYzljMzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjA1LDYgKzIyMDUsMTYgQEAKIAkJODVGNzRF
MEEwQUE4REY4QzAwMERDMjg0IC8qIERPTUNTU1Vua25vd25SdWxlLmggaW4gQ29weSBHZW5lcmF0
ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTAzMkRENTBB
QThDOUJFMDA3RDNCN0QgLyogRE9NQ1NTVW5rbm93blJ1bGUuaCAqLzsgfTsKIAkJODVGRjMxNUEw
QUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1RkYzMTU4MEFBRkJGQ0IwMDM3NEYzOCAvKiBE
T01LZXlib2FyZEV2ZW50LmggKi87IH07CiAJCTg1RkYzMTVCMEFBRkJGQ0IwMDM3NEYzOCAvKiBE
T01LZXlib2FyZEV2ZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODVGRjMxNTkwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0g
Ki87IH07CisJCTg5NEY5RUFFMTE2MUQwMTkwMERBQTM1NyAvKiBKU0Jsb2JCdWlsZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NEY5RUFDMTE2
MUQwMTkwMERBQTM1NyAvKiBKU0Jsb2JCdWlsZGVyLmNwcCAqLzsgfTsKKwkJODk0RjlFQUYxMTYx
RDAxOTAwREFBMzU3IC8qIEpTQmxvYkJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NEY5RUFEMTE2MUQwMTkwMERBQTM1NyAvKiBKU0Jsb2JC
dWlsZGVyLmggKi87IH07CisJCTg5OEJFRDIwMTE2MThEMzgwMEE2RUEwNiAvKiBCbG9iQnVpbGRl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OThC
RUQxRjExNjE4RDM4MDBBNkVBMDYgLyogQmxvYkJ1aWxkZXIuY3BwICovOyB9OworCQk4OThCRUQy
MjExNjE4RDQyMDBBNkVBMDYgLyogQmxvYkJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5OEJFRDIxMTE2MThENDIwMEE2RUEwNiAvKiBCbG9i
QnVpbGRlci5oICovOyB9OworCQk4OThCRUQyNDExNjE4RDRCMDBBNkVBMDYgLyogQnl0ZVN0b3Jl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5OEJF
RDIzMTE2MThENEIwMEE2RUEwNiAvKiBCeXRlU3RvcmUuY3BwICovOyB9OworCQk4OThCRUQyNjEx
NjE4RDU2MDBBNkVBMDYgLyogQnl0ZVN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4OThCRUQyNTExNjE4RDU2MDBBNkVBMDYgLyogQnl0ZVN0b3Jl
LmggKi87IH07CisJCTg5OEJFRDI4MTE2MThFQzEwMEE2RUEwNiAvKiBCbG9iQnVpbGRlci5pZGwg
aW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5OEJFRDI3
MTE2MThFQzEwMEE2RUEwNiAvKiBCbG9iQnVpbGRlci5pZGwgKi87IH07CisJCTg5QTM1RDVBMTE2
MTg5MjUwMEU3MDFFNiAvKiBKU0Jsb2JCdWlsZGVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5QTM1RDU5MTE2MTg5MjUwMEU3MDFF
NiAvKiBKU0Jsb2JCdWlsZGVyQ29uc3RydWN0b3IuaCAqLzsgfTsKKwkJODlBMzVENUMxMTYxODk0
QTAwRTcwMUU2IC8qIEpTQmxvYkJ1aWxkZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODlBMzVENUIxMTYxODk0QTAwRTcwMUU2IC8qIEpT
QmxvYkJ1aWxkZXJDdXN0b20uY3BwICovOyB9OworCQk4OUEzNUQ1RTExNjE4OTU5MDBFNzAxRTYg
LyogSlNCbG9iQnVpbGRlckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5QTM1RDVEMTE2MTg5NTkwMEU3MDFFNiAvKiBKU0Jsb2JC
dWlsZGVyQ29uc3RydWN0b3IuY3BwICovOyB9OwogCQk5MzAyQjBCRDBENzlGODI5MDBDN0VFODMg
LyogUGFnZUdyb3VwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovOyB9Owog
CQk5MzAyQjBCRjBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzAyQjBCRTBENzlGODJDMDBDN0VFODMg
LyogUGFnZUdyb3VwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJOTMwNUIyNEQwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA1QjI0QzA5OEYxQjZCMDBDMjg4
NTUgLyogVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtNzY0NSw2ICs3NjU1LDE2IEBACiAJCTg1RjU2QTc5MEE5OENFMzcwMEFEQjYwQSAv
KiBET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gRE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NUZGMzE1ODBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRF
dmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NS2V5Ym9hcmRFdmVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NUZGMzE1OTBBQUZCRkNCMDAzNzRG
MzggLyogRE9NS2V5Ym9hcmRFdmVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBET01LZXlib2FyZEV2ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk4OTRGOUVBQzExNjFEMDE5MDBEQUEzNTcgLyogSlNCbG9iQnVpbGRlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Jsb2JCdWlsZGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk0RjlFQUQxMTYxRDAxOTAwREFBMzU3IC8qIEpTQmxv
YkJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCbG9iQnVpbGRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OThCRUQxRjExNjE4RDM4MDBBNkVB
MDYgLyogQmxvYkJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQmxvYkJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OThCRUQy
MTExNjE4RDQyMDBBNkVBMDYgLyogQmxvYkJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQmxvYkJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
ODk4QkVEMjMxMTYxOEQ0QjAwQTZFQTA2IC8qIEJ5dGVTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCeXRlU3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk4OThCRUQyNTExNjE4RDU2MDBBNkVBMDYgLyogQnl0ZVN0b3JlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk4OThCRUQyNzExNjE4RUMxMDBBNkVBMDYgLyogQmxvYkJ1aWxkZXIuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEJsb2JCdWlsZGVyLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJODlBMzVENTkxMTYxODkyNTAwRTcwMUU2IC8qIEpTQmxvYkJ1aWxkZXJD
b25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jsb2JCdWls
ZGVyQ29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODlBMzVENUIx
MTYxODk0QTAwRTcwMUU2IC8qIEpTQmxvYkJ1aWxkZXJDdXN0b20uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNCbG9iQnVpbGRlckN1c3RvbS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5QTM1RDVEMTE2MTg5NTkwMEU3MDFFNiAvKiBKU0Jsb2JC
dWlsZGVyQ29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNCbG9iQnVpbGRlckNvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlR3JvdXAuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VHcm91cC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGltZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEyOTI0LDYgKzEyOTQ0LDExIEBACiAJCTkzRUVDMUVDMDlDMjg3Nzcw
MEM1MTVEMSAvKiBodG1sICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQk4OThCRUQyNzExNjE4RUMxMDBBNkVBMDYgLyogQmxvYkJ1aWxkZXIuaWRsICovLAor
CQkJCTg5OEJFRDI1MTE2MThENTYwMEE2RUEwNiAvKiBCeXRlU3RvcmUuaCAqLywKKwkJCQk4OThC
RUQyMzExNjE4RDRCMDBBNkVBMDYgLyogQnl0ZVN0b3JlLmNwcCAqLywKKwkJCQk4OThCRUQyMTEx
NjE4RDQyMDBBNkVBMDYgLyogQmxvYkJ1aWxkZXIuaCAqLywKKwkJCQk4OThCRUQxRjExNjE4RDM4
MDBBNkVBMDYgLyogQmxvYkJ1aWxkZXIuY3BwICovLAogCQkJCUE0M0JGNTk2MTE0OTI5MEEwMEM2
NDNDQSAvKiBIVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcCAqLywKIAkJCQlBNDNCRjU5NzExNDkyOTBB
MDBDNjQzQ0EgLyogSFRNTFByb2dyZXNzRWxlbWVudC5oICovLAogCQkJCTQ5NDg0RkFFMTAyQ0Yw
MUUwMDE4N0REMyAvKiBjYW52YXMgKi8sCkBAIC0xMzI3MCw2ICsxMzI5NSw4IEBACiAJCUE4M0I3
OTA4MENDQUZGMkIwMDBCMDgyNSAvKiBIVE1MICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQk4OTRGOUVBQzExNjFEMDE5MDBEQUEzNTcgLyogSlNCbG9iQnVp
bGRlci5jcHAgKi8sCisJCQkJODk0RjlFQUQxMTYxRDAxOTAwREFBMzU3IC8qIEpTQmxvYkJ1aWxk
ZXIuaCAqLywKIAkJCQkyRTJEOTlDQjEwRTJCQkRBMDA0OTYzMzcgLyogSlNCbG9iLmNwcCAqLywK
IAkJCQkyRTJEOTlDQzEwRTJCQkRBMDA0OTYzMzcgLyogSlNCbG9iLmggKi8sCiAJCQkJNjVERjMy
MzMwOUQxREU2NTAwMEJFMzI1IC8qIEpTQ2FudmFzR3JhZGllbnQuY3BwICovLApAQCAtMTQ5MTYs
NiArMTQ5NDMsNyBAQAogCQlCQzRFREVGNzBDMDhGNDE0MDA3RURENDkgLyogQ3VzdG9tICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk4OUEzNUQ1QjExNjE4
OTRBMDBFNzAxRTYgLyogSlNCbG9iQnVpbGRlckN1c3RvbS5jcHAgKi8sCiAJCQkJNDE1QjdDNTQw
RkY1OThFNjAwNjc3MEY3IC8qIEpTQWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwICovLAogCQkJCUJD
MkVENkJCMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0dHJDdXN0b20uY3BwICovLAogCQkJCTQ5RUVE
MTRCMTA1MTk3MTkwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5j
cHAgKi8sCkBAIC0xNTI3MCw2ICsxNTI5OCw4IEBACiAJCUJDQ0U1OEI0MTA2MUU5MjUwMDhGQjM1
QSAvKiBDb25zdHJ1Y3RvcnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCTg5QTM1RDVEMTE2MTg5NTkwMEU3MDFFNiAvKiBKU0Jsb2JCdWlsZGVyQ29uc3Ry
dWN0b3IuY3BwICovLAorCQkJCTg5QTM1RDU5MTE2MTg5MjUwMEU3MDFFNiAvKiBKU0Jsb2JCdWls
ZGVyQ29uc3RydWN0b3IuaCAqLywKIAkJCQlFNEVFRkZDNjBEMzQ1NTBDMDA0NjlBNTggLyogSlNB
dWRpb0NvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlFNEVFRkZDNzBEMzQ1NTBDMDA0NjlBNTggLyog
SlNBdWRpb0NvbnN0cnVjdG9yLmggKi8sCiAJCQkJRTBGRUYzNzFCNzdDNTNFQUMxQzFGQkVFIC8q
IEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5jcHAgKi8sCkBAIC0xODc2OCw2ICsxODc5OCwxMCBA
QAogCQkJCUU0Nzc4QjgwMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2ZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMUUxQkYwMDExNUZGNkZCMDA2RjUyQ0EgLyogV2luZG93c0tleWJvYXJk
Q29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0OTlBNTE1MTE1RkIzMzAwMEY1NjZFMyAvKiBS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJODlBMzVENUExMTYx
ODkyNTAwRTcwMUU2IC8qIEpTQmxvYkJ1aWxkZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJODk4QkVEMjIxMTYxOEQ0MjAwQTZFQTA2IC8qIEJsb2JCdWlsZGVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk4OThCRUQyNjExNjE4RDU2MDBBNkVBMDYgLyogQnl0ZVN0b3JlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk4OTRGOUVBRjExNjFEMDE5MDBEQUEzNTcgLyogSlNCbG9iQnVpbGRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC0xODg3MSw2ICsxODkwNSw3IEBACiAJCQkJMUFCMUFFN0EwQzA1
MUZERTAwMTM5RjRGIC8qIHpvb21JbkN1cnNvci5wbmcgaW4gUmVzb3VyY2VzICovLAogCQkJCTFB
QjFBRTdCMEMwNTFGREUwMDEzOUY0RiAvKiB6b29tT3V0Q3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMg
Ki8sCiAJCQkJMkUwODg4QzQxMTQ4ODNBOTAwQUY0MjY1IC8qIERPTUZvcm1EYXRhLmlkbCBpbiBS
ZXNvdXJjZXMgKi8sCisJCQkJODk4QkVEMjgxMTYxOEVDMTAwQTZFQTA2IC8qIEJsb2JCdWlsZGVy
LmlkbCBpbiBSZXNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMDk4Miw2ICsyMTAxNywxMSBAQAogCQkJCTYyQ0Qz
MjU5MTE1N0U1N0MwMDYzQjBBNyAvKiBDdXN0b21FdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFNDc3OEI3RjExNUE1ODFBMDBCNUQzNzIgLyogSlNDdXN0b21FdmVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4NDk5QTUxNDExNUZCMzMwMDBGNTY2RTMgLyogUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODlBMzVENUMxMTYxODk0QTAwRTcwMUU2IC8q
IEpTQmxvYkJ1aWxkZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODlBMzVENUUxMTYx
ODk1OTAwRTcwMUU2IC8qIEpTQmxvYkJ1aWxkZXJDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk4OThCRUQyMDExNjE4RDM4MDBBNkVBMDYgLyogQmxvYkJ1aWxkZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJODk4QkVEMjQxMTYxOEQ0QjAwQTZFQTA2IC8qIEJ5dGVTdG9yZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk4OTRGOUVBRTExNjFEMDE5MDBEQUEzNTcgLyogSlNCbG9iQnVp
bGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNCaW5kaW5nc0FsbEluT25lLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCaW5kaW5nc0Fs
bEluT25lLmNwcAppbmRleCA1YTA4MjBiLi5hOTMzYWNiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQmluZGluZ3NBbGxJbk9uZS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiSlNB
YnN0cmFjdFdvcmtlckN1c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNBdHRyQ3VzdG9tLmNwcCIKICNp
bmNsdWRlICJKU0F1ZGlvQ29uc3RydWN0b3IuY3BwIgorI2luY2x1ZGUgIkpTQmxvYkJ1aWxkZXJD
b25zdHJ1Y3Rvci5jcHAiCisjaW5jbHVkZSAiSlNCbG9iQnVpbGRlckN1c3RvbS5jcHAiCiAjaW5j
bHVkZSAiSlNDREFUQVNlY3Rpb25DdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTQ1NTUnVsZUN1c3Rv
bS5jcHAiCiAjaW5jbHVkZSAiSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAiCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkJ1aWxkZXJDb25zdHJ1Y3Rvci5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQmxvYkJ1aWxkZXJDb25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZTRmZmFhZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNCbG9iQnVpbGRlckNvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDcyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkpTQmxvYkJ1aWxkZXJDb25zdHJ1Y3Rv
ci5oIgorCisjaW5jbHVkZSAiQmxvYkJ1aWxkZXIuaCIKKyNpbmNsdWRlICJKU0Jsb2JCdWlsZGVy
LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgPHJ1bnRp
bWUvRXJyb3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTQmxvYkJ1aWxkZXJDb25zdHJ1Y3Rvcik7
CisKK2NvbnN0IENsYXNzSW5mbyBKU0Jsb2JCdWlsZGVyQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsg
IkJsb2JCdWlsZGVyQ29uc3RydWN0b3IiLCAwLCAwLCAwIH07CisKK0pTQmxvYkJ1aWxkZXJDb25z
dHJ1Y3Rvcjo6SlNCbG9iQnVpbGRlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KEpT
QmxvYkJ1aWxkZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+b2Jq
ZWN0UHJvdG90eXBlKCkpLCBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTQmxvYkJ1aWxkZXJQcm90b3R5cGU6OnNlbGYoZXhl
YywgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDEpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBE
b250RW51bSk7Cit9CisKK3N0YXRpYyBKU09iamVjdCogY29uc3RydWN0QmxvYkJ1aWxkZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmKQorewor
ICAgIEpTQmxvYkJ1aWxkZXJDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0
PEpTQmxvYkJ1aWxkZXJDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKTsKKyAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0ID0ganNDb25zdHJ1Y3Rvci0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgUmVmZXJlbmNlRXJyb3IsICJCbG9iQnVpbGRlciBjb25zdHJ1Y3RvciBhc3NvY2lhdGVkIGRv
Y3VtZW50IGlzIHVuYXZhaWxhYmxlIik7CisKKyAgICBSZWZQdHI8QmxvYkJ1aWxkZXI+IGJsb2JC
dWlsZGVyID0gQmxvYkJ1aWxkZXI6OmNyZWF0ZSgpOworICAgIHJldHVybiBDUkVBVEVfRE9NX09C
SkVDVF9XUkFQUEVSKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBCbG9iQnVp
bGRlciwgYmxvYkJ1aWxkZXIuZ2V0KCkpOworfQorCitDb25zdHJ1Y3RUeXBlIEpTQmxvYkJ1aWxk
ZXJDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3RE
YXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0Qmxv
YkJ1aWxkZXI7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkJ1aWxk
ZXJDb25zdHJ1Y3Rvci5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JCdWlsZGVyQ29uc3Ry
dWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWRkZTVhCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JCdWlsZGVyQ29uc3RydWN0
b3IuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSlNCbG9iQnVpbGRlckNvbnN0cnVjdG9yX2gK
KyNkZWZpbmUgSlNCbG9iQnVpbGRlckNvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTQmxvYkJ1aWxkZXJDb25z
dHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7CisgIHB1YmxpYzoKKyAgICBK
U0Jsb2JCdWlsZGVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVj
dCopOworICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisKKyAgcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6
Q29uc3RydWN0RGF0YSYpOworICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNz
SW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEpTQmxvYkJ1aWxkZXJDb25zdHJ1Y3Rvcl9oCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkJ1aWxkZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0Jsb2JCdWlsZGVyQ3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5mNjIwODk4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0Jsb2JCdWlsZGVyQ3VzdG9tLmNwcApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIkpTQmxvYkJ1aWxkZXIuaCIKKworI2luY2x1ZGUgIkJsb2Iu
aCIKKyNpbmNsdWRlICJCbG9iQnVpbGRlci5oIgorI2luY2x1ZGUgIkpTQmxvYi5oIgorI2luY2x1
ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBDdXN0b20gZnVuY3Rpb25zCitKU1ZhbHVlIEpTQmxvYkJ1aWxkZXI6
OmFwcGVuZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYg
KGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4
RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgSlNWYWx1ZSB2YWwgPSBhcmdzLmF0KDApOworICAgIGlmICh2YWwuaXNVbmRlZmlu
ZWRPck51bGwoKSkKKyAgICAgICAgaW1wbCgpLT5hcHBlbmRTdHJpbmcoU3RyaW5nKCIiKSwgZWMp
OworICAgIGVsc2UgaWYgKHZhbC5pbmhlcml0cygmSlNCbG9iOjpzX2luZm8pKQorICAgICAgICBp
bXBsKCktPmFwcGVuZEJsb2IodG9CbG9iKHZhbCkpOworICAgIGVsc2UKKyAgICAgICAgaW1wbCgp
LT5hcHBlbmRTdHJpbmcodmFsLnRvU3RyaW5nKGV4ZWMpLCBlYyk7CisKKyAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3Bw
CmluZGV4IGJhNTZlMjguLmQ3YjY3YWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dDdXN0b20uY3BwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiSFRNTERvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiSGlzdG9yeS5oIgogI2luY2x1ZGUgIkpTQXVkaW9Db25zdHJ1Y3Rvci5oIgor
I2luY2x1ZGUgIkpTQmxvYkJ1aWxkZXJDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTRGF0YWJh
c2UuaCIKICNpbmNsdWRlICJKU0RhdGFiYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJKU0RPTVdp
bmRvd1NoZWxsLmgiCkBAIC02NTgsNiArNjU5LDExIEBAIEpTVmFsdWUgSlNET01XaW5kb3c6Ondl
YlNvY2tldChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB9CiAjZW5kaWYKIAorSlNWYWx1ZSBKU0RP
TVdpbmRvdzo6YmxvYkJ1aWxkZXIoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIHJldHVy
biBnZXRET01Db25zdHJ1Y3RvcjxKU0Jsb2JCdWlsZGVyQ29uc3RydWN0b3I+KGV4ZWMsIHRoaXMp
OworfQorCiAvLyBDdXN0b20gZnVuY3Rpb25zCiAKIC8vIEhlbHBlciBmb3Igd2luZG93Lm9wZW4o
KSBhbmQgd2luZG93LnNob3dNb2RhbERpYWxvZygpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEJsb2JCdWlsZGVyQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4QmxvYkJ1aWxkZXJDdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjlmODM1NGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEJsb2JCdWlsZGVyQ3VzdG9tLmNwcApAQCAtMCwwICsxLDgzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlY4QmxvYkJ1aWxkZXIuaCIKKworI2luY2x1ZGUg
IlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4QmxvYi5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIK
KyNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOEJsb2JCdWlsZGVyOjpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uQmxvYkJ1aWxkZXIu
Q29uc3RydWN0b3IiKTsKKyAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCisgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGN1c3RydWN0b3IgY2Fubm90IGJlIGNhbGxl
ZCBhcyBhIGZ1bmN0aW9uLiIpOworCisgICAgUmVmUHRyPEJsb2JCdWlsZGVyPiBibG9iQnVpbGRl
ciA9IEJsb2JCdWlsZGVyOjpjcmVhdGUoKTsKKworICAgIC8vIFNldHVwIHRoZSBzdGFuZGFyZCB3
cmFwcGVyIG9iamVjdCBpbnRlcm5hbCBmaWVsZHMuCisgICAgVjhET01XcmFwcGVyOjpzZXRET01X
cmFwcGVyKGFyZ3MuSG9sZGVyKCksICZpbmZvLCBibG9iQnVpbGRlci5nZXQoKSk7CisKKyAgICAv
LyBBZGQgb2JqZWN0IHRvIHRoZSB3cmFwcGVyIG1hcC4KKyAgICBibG9iQnVpbGRlci0+cmVmKCk7
CisgICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3QoYmxvYkJ1aWxkZXIu
Z2V0KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoYXJncy5Ib2xkZXIoKSkpOwor
CisgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OEJsb2JCdWlsZGVyOjphcHBlbmRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQor
eworICAgIElOQ19TVEFUUygiRE9NLkJsb2JCdWlsZGVyLmFwcGVuZCIpOworICAgIEJsb2JCdWls
ZGVyKiBibG9iQnVpbGRlciA9IFY4QmxvYkJ1aWxkZXI6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkp
OworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkK
KyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94
eTo6U3ludGF4RXJyb3IpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmcgPSBhcmdzWzBd
OworICAgIGlmIChWOEJsb2I6Okhhc0luc3RhbmNlKGFyZykpIHsKKyAgICAgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBvYmplY3QgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZyk7
CisgICAgICAgIEJsb2IqIGJsb2IgPSBWOEJsb2I6OnRvTmF0aXZlKG9iamVjdCk7CisgICAgICAg
IGJsb2JCdWlsZGVyLT5hcHBlbmRCbG9iKGJsb2IpOworICAgIH0gZWxzZSB7CisgICAgICAgIFN0
cmluZyBtc2cgPSB0b1dlYkNvcmVTdHJpbmcoYXJnKTsKKyAgICAgICAgYmxvYkJ1aWxkZXItPmFw
cGVuZFN0cmluZyhtc2csIGVjKTsKKyAgICB9CisKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGVjKTsKKworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
RE9NV2luZG93Q3VzdG9tLmNwcAppbmRleCA2MjE1ZDM4Li5lOWEwZDUzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKIAor
I2luY2x1ZGUgIkJsb2JCdWlsZGVyLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAi
RGF0YWJhc2UuaCIKICNpbmNsdWRlICJET01UaW1lci5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9o
dG1sL0Jsb2IuY3BwIGIvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCmluZGV4IDgzYmJkYzAuLjc3N2Yw
ZTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmNwcAorKysgYi9XZWJDb3JlL2h0bWwv
QmxvYi5jcHAKQEAgLTI5LDE4ICsyOSw1MiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
KwogI2luY2x1ZGUgIkJsb2IuaCIKIAogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBFTkFCTEUo
QkxPQl9TTElDRSkKIGNvbnN0IGludCBCbG9iOjp0b0VuZE9mRmlsZSA9IC0xOwogY29uc3QgZG91
YmxlIEJsb2I6OmRvTm90Q2hlY2tGaWxlQ2hhbmdlID0gMDsKKworUGFzc1JlZlB0cjxCbG9iPiBC
bG9iOjpzbGljZShsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25zdAorewor
ICAgIC8vIENsYW1wIHRoZSByYW5nZSBpZiBpdCBleGNlZWRzIHRoZSBzaXplIGxpbWl0LgorICAg
IG9mZnNldCArPSBzdGFydCgpOworICAgIGlmIChvZmZzZXQgPiBzbmFwc2hvdEVuZFBvc2l0aW9u
KCkpIHsKKyAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgbGVuZ3RoID0gMDsKKyAgICB9IGVs
c2UgaWYgKG9mZnNldCArIGxlbmd0aCA+IHNuYXBzaG90RW5kUG9zaXRpb24oKSkKKyAgICAgICAg
bGVuZ3RoID0gc25hcHNob3RFbmRQb3NpdGlvbigpIC0gb2Zmc2V0OworCisgICAgaWYgKG9mZnNl
dCA8IDApCisgICAgICAgIG9mZnNldCA9IDA7CisgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAg
IGxlbmd0aCA9IDA7CisKKyAgICByZXR1cm4gYWRvcHRSZWYoc2xpY2VJbnRlcm5hbChvZmZzZXQs
IGxlbmd0aCkpOworfQogI2VuZGlmCiAKLUJsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKQor
U3RyaW5nIEJsb2I6OnN0cmluZ1ZhbHVlKCkgY29uc3QKK3sKKyAgICAvLyBMZXQncyBhc3N1bWUg
d2Ugb25seSBjYXJlIHVwIHRvIHNpemVfdCdzIG1heCBzaXplIG9mIGNvbnRlbnQuCisgICAgc2l6
ZV90IG91dHB1dExlbmd0aCA9ICBzdGF0aWNfY2FzdDxzaXplX3Q+KHNpemUoKSk7CisgICAgaWYg
KHNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLSAxKQorICAgICAg
ICBvdXRwdXRMZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8
c2l6ZV90Pjo6bWF4KCkgLSAxKTsKKyAgICBWZWN0b3I8Y2hhcj4gb3V0KG91dHB1dExlbmd0aCAr
IDEpOworICAgIHJlYWQob3V0LmRhdGEoKSwgb3V0cHV0TGVuZ3RoKTsKKyAgICBvdXRbb3V0cHV0
TGVuZ3RoXSA9IDA7CisgICAgcmV0dXJuIFN0cmluZyhvdXQuZGF0YSgpKTsKK30KKworLy8gRmls
ZUJsb2IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworRmlsZUJsb2I6OkZpbGVCbG9iKGNvbnN0IFN0cmluZyYgcGF0
aCkKICAgICA6IG1fcGF0aChwYXRoKQogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogICAgICwgbV9z
dGFydCgwKQpAQCAtNTMsNyArODcsNyBAQCBCbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCkK
IH0KIAogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotQmxvYjo6QmxvYihjb25zdCBTdHJpbmcmIHBh
dGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgbG9uZyBsb25nIHNuYXBzaG90
U2l6ZSwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKK0ZpbGVCbG9iOjpGaWxlQmxv
Yihjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwg
bG9uZyBsb25nIHNuYXBzaG90U2l6ZSwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkK
ICAgICA6IG1fcGF0aChwYXRoKQogICAgICwgbV9zdGFydChzdGFydCkKICAgICAsIG1fbGVuZ3Ro
KGxlbmd0aCkKQEAgLTYxLDExICs5NSwxMiBAQCBCbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgcGF0
aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBsb25nIGxvbmcgc25hcAogICAg
ICwgbV9zbmFwc2hvdFNpemUoc25hcHNob3RTaXplKQogICAgICwgbV9zbmFwc2hvdE1vZGlmaWNh
dGlvblRpbWUoc25hcHNob3RNb2RpZmljYXRpb25UaW1lKQogewotICAgIEFTU0VSVChzdGFydCA+
PSAwICYmIGxlbmd0aCA+PSAwICYmIHN0YXJ0ICsgbGVuZ3RoIDw9IHNuYXBzaG90U2l6ZSAmJiBz
bmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpOworICAgIC8vIHNuYXBzaG90TW9kaWZpY2F0aW9uVGlt
ZSBjYW4gYmUgMCB3aGVuIHRoZSBmaWxlIGlzIGFscmVhZHkgcmVtb3ZlZC4KKyAgICBBU1NFUlQo
c3RhcnQgPj0gMCAmJiBsZW5ndGggPj0gMCAmJiBzdGFydCArIGxlbmd0aCA8PSBzbmFwc2hvdFNp
emUpOwogfQogI2VuZGlmCiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBCbG9iOjpzaXplKCkgY29uc3QK
K3Vuc2lnbmVkIGxvbmcgbG9uZyBGaWxlQmxvYjo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8gRklY
TUU6IEphdmFTY3JpcHQgY2Fubm90IHJlcHJlc2VudCBzaXplcyBhcyBsYXJnZSBhcyB1bnNpZ25l
ZCBsb25nIGxvbmcsIHdlIG5lZWQgdG8KICAgICAvLyBjb21lIHVwIHdpdGggYW4gZXhjZXB0aW9u
IHRvIHRocm93IGlmIGZpbGUgc2l6ZSBpcyBub3QgcmVwcmVzZXRhYmxlLgpAQCAtNzksNDAgKzEx
NCwxNDIgQEAgdW5zaWduZWQgbG9uZyBsb25nIEJsb2I6OnNpemUoKSBjb25zdAogICAgIHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNpemUpOwogfQogCitpbnQ2NF90IEZp
bGVCbG9iOjpyZWFkKGNoYXIqLCBzaXplX3QpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFNob3Vs
ZCBiZSBpbXBsZW1lbnRlZCB3aGVuIEZpbGVSZWFkZXIncyB1bmRlcmx5aW5nIGltcGxlbWVudGF0
aW9uIGJlY29tZXMgcmVhZHkuICBUaGlzIHdvbid0IGJlIGNhbGxlZCBpbiBub3JtYWwgY2FzZXMg
YnV0IENvbWJpbmVkQmxvYiBtYXkgY2FsbCByZWFkKCkgcmVjdXJzaXZlbHkgd2hlbiBhIEZpbGVC
bG9iIGlzIGNvbWJpbmVkIHdpdGggRGF0YUJsb2JzIHZpYSBCbG9iQnVpbGRlci4KKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiAtMTsKK30KKworaW50NjRfdCBGaWxlQmxvYjo6cmVh
ZERpcmVjdChSZWFkZXIqLCBpbnQ2NF90KSBjb25zdAoreworICAgIC8vIEZJWE1FCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gLTE7Cit9CisKICNpZiBFTkFCTEUoQkxPQl9TTElD
RSkKLVBhc3NSZWZQdHI8QmxvYj4gQmxvYjo6c2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxv
bmcgbGVuZ3RoKSBjb25zdAorbG9uZyBsb25nIEZpbGVCbG9iOjpzbmFwc2hvdEVuZFBvc2l0aW9u
KCkgY29uc3QKK3sKKyAgICBpZiAobV9zbmFwc2hvdENhcHR1cmVkKQorICAgICAgICByZXR1cm4g
bV9zbmFwc2hvdFNpemU7CisgICAgbG9uZyBsb25nIHNuYXBzaG90U2l6ZSA9IDA7CisgICAgaWYg
KCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNuYXBzaG90U2l6ZSkpCisgICAgICAgIHJldHVybiAtMTsK
KyAgICByZXR1cm4gc25hcHNob3RTaXplOworfQorCitCbG9iKiBGaWxlQmxvYjo6c2xpY2VJbnRl
cm5hbChsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0CiB7CiAgICAgLy8g
V2hlbiB3ZSBzbGljZSBhIGZpbGUgZm9yIHRoZSBmaXJzdCB0aW1lLCB3ZSBvYnRhaW4gYSBzbmFw
c2hvdCBvZiB0aGUgZmlsZSBieSBjYXB0dXJpbmcgaXRzIGN1cnJlbnQgc2l6ZSBhbmQgbW9kaWZp
Y2F0aW9uIHRpbWUuCiAgICAgLy8gVGhlIG1vZGlmaWNhdGlvbiB0aW1lIHdpbGwgYmUgdXNlZCB0
byB2ZXJpZnkgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3QsIHdoZW4gdGhlIHVu
ZGVybHlpbmcgZGF0YSBhcmUgYWNjZXNzZWQuCi0gICAgbG9uZyBsb25nIHNuYXBzaG90U2l6ZTsK
ICAgICBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lOwotICAgIGlmIChtX3NuYXBzaG90
Q2FwdHVyZWQpIHsKLSAgICAgICAgc25hcHNob3RTaXplID0gbV9zbmFwc2hvdFNpemU7CisgICAg
bG9uZyBsb25nIHNuYXBzaG90U2l6ZSA9IHNuYXBzaG90RW5kUG9zaXRpb24oKTsKKyAgICBpZiAo
bV9zbmFwc2hvdENhcHR1cmVkKQogICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSBt
X3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKLSAgICB9IGVsc2UgeworICAgIGVsc2UgewogICAg
ICAgICAvLyBJZiB3ZSBmYWlsIHRvIHJldHJpZXZlIHRoZSBzaXplIG9yIG1vZGlmaWNhdGlvbiB0
aW1lLCBwcm9iYWJseSBkdWUgdG8gdGhhdCB0aGUgZmlsZSBoYXMgYmVlbiBkZWxldGVkLCBhbiBl
bXB0eSBibG9iIHdpbGwgYmUgcmV0dXJuZWQuCiAgICAgICAgIHRpbWVfdCBtb2RpZmljYXRpb25U
aW1lOwotICAgICAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0aCwgc25hcHNob3RTaXplKSB8fCAh
Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUobV9wYXRoLCBtb2RpZmljYXRpb25UaW1lKSkgeworICAg
ICAgICBpZiAoc25hcHNob3RTaXplID09IC0xIHx8ICFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZSht
X3BhdGgsIG1vZGlmaWNhdGlvblRpbWUpKSB7CiAgICAgICAgICAgICBzbmFwc2hvdFNpemUgPSAw
OwogICAgICAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1lID0gMDsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSBtb2RpZmljYXRpb25U
aW1lOwogICAgIH0KIAotICAgIC8vIENsYW1wIHRoZSByYW5nZSBpZiBpdCBleGNlZWRzIHRoZSBz
aXplIGxpbWl0LgorICAgIHJldHVybiBzdGF0aWNfY2FzdDxCbG9iKj4obmV3IEZpbGVCbG9iKG1f
cGF0aCwgc3RhcnQsIGxlbmd0aCwgc25hcHNob3RTaXplLCBzbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUpKTsKK30KKyNlbmRpZgorCisvLyBEYXRhQmxvYiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEYXRhQmxvYjo6
RGF0YUJsb2IoTm9uTnVsbFBhc3NSZWZQdHI8Qnl0ZVN0b3JlPiBkYXRhKQorICAgIDogbV9kYXRh
KGRhdGEpCisgICAgLCBtX3N0YXJ0KDApCisgICAgLCBtX2xlbmd0aChtX2RhdGEtPnNpemUoKSkK
K3sKK30KKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorRGF0YUJsb2I6OkRhdGFCbG9iKE5vbk51
bGxQYXNzUmVmUHRyPEJ5dGVTdG9yZT4gZGF0YSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcg
bGVuZ3RoKQorICAgIDogbV9kYXRhKGRhdGEpCisgICAgLCBtX3N0YXJ0KHN0YXJ0KQorICAgICwg
bV9sZW5ndGgobGVuZ3RoKQoreworfQorI2VuZGlmCisKKy8vIENvbWJpbmVkQmxvYiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK0NvbWJpbmVkQmxvYjo6Q29tYmluZWRCbG9iKGNvbnN0IFZlY3RvcjxSZWZQdHI8QmxvYj4g
PiYgYmxvYkxpc3QpCisgICAgOiBtX3RvdGFsU2l6ZSgwKQoreworICAgIGFwcGVuZEJsb2JMaXN0
KGJsb2JMaXN0KTsKK30KKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorQ29tYmluZWRCbG9iOjpD
b21iaW5lZEJsb2IoY29uc3QgVmVjdG9yPFJlZlB0cjxCbG9iPiA+JiBibG9iTGlzdCwgbG9uZyBs
b25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKQorICAgIDogbV90b3RhbFNpemUoMCkKK3sKKyAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0ID0gc3RhcnQ7CiAgICAgaWYgKHN0YXJ0IDwgMCkK
LSAgICAgICAgc3RhcnQgPSAwOworICAgICAgICBvZmZzZXQgPSAwOwogICAgIGlmIChsZW5ndGgg
PCAwKQotICAgICAgICBsZW5ndGggPSAwOworICAgICAgICByZXR1cm47CisgICAgc2l6ZV90IGkg
PSAwOworICAgIGZvciAoOyBpIDwgYmxvYkxpc3Quc2l6ZSgpICYmIG9mZnNldCA+PSBibG9iTGlz
dFtpXS0+c2l6ZSgpOyArK2kpCisgICAgICAgIG9mZnNldCAtPSBibG9iTGlzdFtpXS0+c2l6ZSgp
OworICAgIGZvciAoOyBsZW5ndGggPiAwICYmIGkgPCBibG9iTGlzdC5zaXplKCk7ICsraSkgewor
ICAgICAgICBhcHBlbmRCbG9iKGJsb2JMaXN0W2ldLT5zbGljZShvZmZzZXQsIGxlbmd0aCkpOwor
ICAgICAgICBsZW5ndGggLT0gbV9ibG9iTGlzdC5sYXN0KCktPnNpemUoKTsKKyAgICAgICAgaWYg
KG9mZnNldCA+IDApCisgICAgICAgICAgICBvZmZzZXQgPSAwOworICAgIH0KK30KKyNlbmRpZgog
Ci0gICAgaWYgKHN0YXJ0ID4gc25hcHNob3RTaXplKSB7Ci0gICAgICAgIHN0YXJ0ID0gMDsKLSAg
ICAgICAgbGVuZ3RoID0gMDsKLSAgICB9IGVsc2UgaWYgKHN0YXJ0ICsgbGVuZ3RoID4gc25hcHNo
b3RTaXplKQotICAgICAgICBsZW5ndGggPSBzbmFwc2hvdFNpemUgLSBzdGFydDsKK3ZvaWQgQ29t
YmluZWRCbG9iOjphcHBlbmRCbG9iKE5vbk51bGxQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCit7Cisg
ICAgaWYgKGJsb2ItPmlzQ29tYmluZWQoKSkKKyAgICAgICAgYXBwZW5kQmxvYkxpc3Qoc3RhdGlj
X2Nhc3Q8Q29tYmluZWRCbG9iKj4oYmxvYi5nZXQoKSktPm1fYmxvYkxpc3QpOworICAgIGVsc2Ug
eworICAgICAgICBtX3RvdGFsU2l6ZSArPSBibG9iLT5zaXplKCk7CisgICAgICAgIG1fYmxvYkxp
c3QuYXBwZW5kKGJsb2IpOworICAgIH0KK30KIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxv
YihtX3BhdGgsIG1fc3RhcnQgKyBzdGFydCwgbGVuZ3RoLCBzbmFwc2hvdFNpemUsIHNuYXBzaG90
TW9kaWZpY2F0aW9uVGltZSkpOwordm9pZCBDb21iaW5lZEJsb2I6OmFwcGVuZEJsb2JMaXN0KGNv
bnN0IFZlY3RvcjxSZWZQdHI8QmxvYj4gPiYgYmxvYkxpc3QpCit7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBibG9iTGlzdC5zaXplKCk7ICsraSkKKyAgICAgICAgYXBwZW5kQmxvYihibG9i
TGlzdFtpXSk7Cit9CisKK2ludDY0X3QgQ29tYmluZWRCbG9iOjpyZWFkKGNoYXIqIG91dCwgc2l6
ZV90IG1heExlbmd0aCkgY29uc3QKK3sKKyAgICBpZiAobWF4TGVuZ3RoID4gbV90b3RhbFNpemUp
CisgICAgICAgIG1heExlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4obV90b3RhbFNpemUpOwor
ICAgIGludDY0X3QgdG90YWxTaXplID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
YmxvYkxpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaW50NjRfdCBzaXplID0gbV9ibG9iTGlz
dC5hdChpKS0+c2l6ZSgpOworICAgICAgICBpZiAodG90YWxTaXplICsgc2l6ZSA+IG1heExlbmd0
aCkKKyAgICAgICAgICAgIHNpemUgPSBtYXhMZW5ndGggLSB0b3RhbFNpemU7CisgICAgICAgIHRv
dGFsU2l6ZSArPSBtX2Jsb2JMaXN0LmF0KGkpLT5yZWFkKG91dCArIHRvdGFsU2l6ZSwgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihzaXplKSk7CisgICAgfQorICAgIHJldHVybiB0b3RhbFNpemU7Cit9CisK
K2ludDY0X3QgQ29tYmluZWRCbG9iOjpyZWFkRGlyZWN0KEJsb2I6OlJlYWRlciogcmVhZGVyLCBp
bnQ2NF90IG1heExlbmd0aCkgY29uc3QKK3sKKyAgICBpZiAobWF4TGVuZ3RoID4gbV90b3RhbFNp
emUpCisgICAgICAgIG1heExlbmd0aCA9IG1fdG90YWxTaXplOworICAgIGludDY0X3QgdG90YWxT
aXplID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYmxvYkxpc3Quc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgaW50NjRfdCBzaXplID0gbV9ibG9iTGlzdC5hdChpKS0+c2l6ZSgpOwor
ICAgICAgICBpZiAodG90YWxTaXplICsgc2l6ZSA+IG1heExlbmd0aCkKKyAgICAgICAgICAgIHNp
emUgPSBtYXhMZW5ndGggLSB0b3RhbFNpemU7CisgICAgICAgIHRvdGFsU2l6ZSArPSBtX2Jsb2JM
aXN0LmF0KGkpLT5yZWFkRGlyZWN0KHJlYWRlciwgc2l6ZSk7CisgICAgfQorICAgIHJldHVybiB0
b3RhbFNpemU7CiB9Ci0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9odG1sL0Jsb2IuaCBiL1dlYkNvcmUvaHRtbC9CbG9iLmgKaW5kZXggNjEwODQy
ZS4uM2RhZDBjNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuaAorKysgYi9XZWJDb3Jl
L2h0bWwvQmxvYi5oCkBAIC0zMSw2NyArMzEsMTkwIEBACiAjaWZuZGVmIEJsb2JfaAogI2RlZmlu
ZSBCbG9iX2gKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJCeXRlU3Rv
cmUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHRpbWUuaD4KICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBCbG9iIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYj4g
eworY2xhc3MgRmlsZUJsb2I7CitjbGFzcyBEYXRhQmxvYjsKK2NsYXNzIENvbWJpbmVkQmxvYjsK
KworY2xhc3MgQmxvYiA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPEJsb2I+IHsKIHB1YmxpYzoK
ICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICBzdGF0aWMgY29uc3QgaW50IHRvRW5kT2ZGaWxl
OwogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZG9Ob3RDaGVja0ZpbGVDaGFuZ2U7CiAjZW5kaWYK
IAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2IocGF0aCkpOwotICAgIH0K
KyAgICB0eXBlZGVmIEJ5dGVTdG9yZTo6UmVhZGVyIFJlYWRlcjsKIAogICAgIHZpcnR1YWwgfkJs
b2IoKSB7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgaW50NjRfdCByZWFkKGNoYXIqIG91dCwgc2l6ZV90IG1heExlbmd0aCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50NjRfdCByZWFkRGlyZWN0KFJlYWRlciogcmVhZGVy
LCBpbnQ2NF90IG1heExlbmd0aCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBib29sIGlzVXNp
bmdGaWxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNVc2lu
Z0RhdGEoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0NvbWJp
bmVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgRmlsZUJsb2IqIHRv
RmlsZUJsb2IoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBEYXRhQmxvYiogdG9EYXRhQmxv
YigpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIENvbWJpbmVkQmxvYiogdG9Db21iaW5lZEJs
b2IoKSB7IHJldHVybiAwOyB9CiAKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICBQYXNzUmVm
UHRyPEJsb2I+IHNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCkgY29uc3Q7
CisgICAgdmlydHVhbCBsb25nIGxvbmcgc3RhcnQoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAg
dmlydHVhbCBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpOyB9CisgICAg
dmlydHVhbCBsb25nIGxvbmcgc25hcHNob3RFbmRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0
YXJ0KCkgKyBsZW5ndGgoKTsgfQorICAgIHZpcnR1YWwgZG91YmxlIG1vZGlmaWNhdGlvblRpbWUo
KSBjb25zdCB7IHJldHVybiBkb05vdENoZWNrRmlsZUNoYW5nZTsgfQogI2VuZGlmCiAKLSAgICBj
b25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KLSAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHN0cmluZ1ZhbHVl
KCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBsb25n
IGxvbmcgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9Ci0gICAgbG9uZyBsb25nIGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0gICAgZG91YmxlIG1vZGlmaWNhdGlv
blRpbWUoKSBjb25zdCB7IHJldHVybiBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsgfQorICAg
IHZpcnR1YWwgQmxvYiogc2xpY2VJbnRlcm5hbChsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBs
ZW5ndGgpIGNvbnN0ID0gMDsKICNlbmRpZgorfTsKIAotcHJvdGVjdGVkOgotICAgIEJsb2IoY29u
c3QgU3RyaW5nJiBwYXRoKTsKKy8vIEZpbGVCbG9iIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIEZpbGVC
bG9iIDogcHVibGljIEJsb2IgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+
IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoc3RhdGljX2Nhc3Q8QmxvYio+KG5ldyBGaWxlQmxvYihwYXRoKSkpOworICAgIH0KKworICAg
IGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQorCisgICAgdmly
dHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50NjRf
dCByZWFkKGNoYXIqIG91dCwgc2l6ZV90IG1heExlbmd0aCkgY29uc3Q7CisgICAgdmlydHVhbCBp
bnQ2NF90IHJlYWREaXJlY3QoUmVhZGVyKiByZWFkZXIsIGludDY0X3QgbWF4TGVuZ3RoKSBjb25z
dDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1VzaW5nRmlsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIEZpbGVCbG9iKiB0b0ZpbGVCbG9iKCkgeyByZXR1cm4gdGhpczsgfQog
Ci1wcml2YXRlOgogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIEJsb2IoY29uc3QgU3RyaW5n
JiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGxvbmcgbG9uZyBzbmFw
c2hvdFNpemUsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpOworICAgIHZpcnR1YWwg
bG9uZyBsb25nIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsgfQorICAgIHZpcnR1YWwg
bG9uZyBsb25nIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgdmlydHVh
bCBkb3VibGUgbW9kaWZpY2F0aW9uVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fc25hcHNob3RNb2Rp
ZmljYXRpb25UaW1lOyB9CiAjZW5kaWYKIAotICAgIC8vIFRoZSB1bmRlcmx5aW5nIHBhdGggb2Yg
dGhlIGZpbGUtYmFzZWQgYmxvYi4gCitwcm90ZWN0ZWQ6CisgICAgRmlsZUJsb2IoY29uc3QgU3Ry
aW5nJiBwYXRoKTsKKworcHJpdmF0ZToKKyAgICAvLyBUaGUgdW5kZXJseWluZyBwYXRoIG9mIHRo
ZSBmaWxlLWJhc2VkIGJsb2IuCiAgICAgU3RyaW5nIG1fcGF0aDsKIAogI2lmIEVOQUJMRShCTE9C
X1NMSUNFKQotICAgIC8vIFRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgZmlsZS1iYXNlZCBi
bG9iLgotICAgIGxvbmcgbG9uZyBtX3N0YXJ0OworICAgIEZpbGVCbG9iKGNvbnN0IFN0cmluZyYg
cGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBsb25nIGxvbmcgc25hcHNo
b3RTaXplLCBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKKyAgICB2aXJ0dWFsIEJs
b2IqIHNsaWNlSW50ZXJuYWwobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGxvbmcgbG9uZyBzbmFwc2hvdEVuZFBvc2l0aW9uKCkgY29uc3Q7CiAK
LSAgICAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBmaWxlLWJhc2VkIGJsb2IuIFRoZSB2YWx1ZSBvZiAt
MSBtZWFucyB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLgotICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsK
KyAgICAvLyBUaGUgc3RhcnRpbmcgcG9zaXRpb24gaW4gdGhlIGZpbGUgb3IgaW4gdGhlIGJ5dGUt
c3RvcmUgZm9yIHRoaXMgYmxvYi4KKyAgICBjb25zdCBsb25nIGxvbmcgbV9zdGFydDsKKworICAg
IC8vIFRoZSBsZW5ndGggb2YgdGhlIHNuYXBzaG90IGRhdGEuIFRoZSB2YWx1ZSBvZiAtMSBtZWFu
cyB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGZvciBmaWxlLWJhc2VkIGJsb2JzLgorICAgIGNvbnN0
IGxvbmcgbG9uZyBtX2xlbmd0aDsKIAogICAgIC8vIEEgZmxhZyB0byB0ZWxsIGlmIGEgc25hcHNo
b3QgaGFzIGJlZW4gY2FwdHVyZWQuCi0gICAgYm9vbCBtX3NuYXBzaG90Q2FwdHVyZWQ7CisgICAg
Y29uc3QgYm9vbCBtX3NuYXBzaG90Q2FwdHVyZWQ7CiAKICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUg
ZmlsZSB3aGVuIGEgc25hcHNob3QgaXMgY2FwdHVyZWQuIEl0IGNhbiBiZSAwIGlmIHRoZSBmaWxl
IGlzIGVtcHR5LgotICAgIGxvbmcgbG9uZyBtX3NuYXBzaG90U2l6ZTsKKyAgICBjb25zdCBsb25n
IGxvbmcgbV9zbmFwc2hvdFNpemU7CiAKICAgICAvLyBUaGUgbGFzdCBtb2RpZmljYXRpb24gdGlt
ZSBvZiB0aGUgZmlsZSB3aGVuIGEgc25hcHNob3QgaXMgY2FwdHVyZWQuIFRoZSB2YWx1ZSBvZiAw
IGFsc28gbWVhbnMgdGhhdCB0aGUgc25hcHNob3QgaXMgbm90IGNhcHR1cmVkLgotICAgIGRvdWJs
ZSBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKKyAgICBjb25zdCBkb3VibGUgbV9zbmFwc2hv
dE1vZGlmaWNhdGlvblRpbWU7CisjZW5kaWYKK307CisKKy8vIERhdGFCbG9iIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK2NsYXNzIERhdGFCbG9iIDogcHVibGljIEJsb2IgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShjb25zdCBOb25OdWxsUGFzc1JlZlB0cjxCeXRlU3RvcmU+
IGRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYio+
KG5ldyBEYXRhQmxvYihkYXRhKSkpOworICAgIH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9u
ZyBsb25nIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorCisgICAgdmlydHVhbCBp
bnQ2NF90IHJlYWQoY2hhciogb3V0LCBzaXplX3QgbWF4TGVuZ3RoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fZGF0YS0+cmVhZChvdXQsIG1fc3RhcnQsIG1heExlbmd0aCk7CisgICAg
fQorICAgIHZpcnR1YWwgaW50NjRfdCByZWFkRGlyZWN0KEJsb2I6OlJlYWRlciogcmVhZGVyLCBp
bnQ2NF90IG1heExlbmd0aCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RhdGEtPnJl
YWREaXJlY3QocmVhZGVyLCBtX3N0YXJ0LCBtYXhMZW5ndGgpOworICAgIH0KKworICAgIHZpcnR1
YWwgYm9vbCBpc1VzaW5nRGF0YSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFs
IERhdGFCbG9iKiB0b0RhdGFCbG9iKCkgeyByZXR1cm4gdGhpczsgfQorCisjaWYgRU5BQkxFKEJM
T0JfU0xJQ0UpCisgICAgdmlydHVhbCBsb25nIGxvbmcgc3RhcnQoKSBjb25zdCB7IHJldHVybiBt
X3N0YXJ0OyB9CisgICAgdmlydHVhbCBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9sZW5ndGg7IH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIERhdGFCbG9iKE5vbk51bGxQYXNz
UmVmUHRyPEJ5dGVTdG9yZT4gZGF0YSk7CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgRGF0
YUJsb2IoTm9uTnVsbFBhc3NSZWZQdHI8Qnl0ZVN0b3JlPiBkYXRhLCBsb25nIGxvbmcgc3RhcnQs
IGxvbmcgbG9uZyBsZW5ndGgpOworICAgIHZpcnR1YWwgQmxvYiogc2xpY2VJbnRlcm5hbChsb25n
IGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8QmxvYio+KG5ldyBEYXRhQmxvYihtX2RhdGEsIHN0YXJ0LCBsZW5ndGgp
KTsKKyAgICB9CisjZW5kaWYKKworICAgIFJlZlB0cjxCeXRlU3RvcmU+IG1fZGF0YTsKKyAgICBj
b25zdCBsb25nIGxvbmcgbV9zdGFydDsKKyAgICBjb25zdCBsb25nIGxvbmcgbV9sZW5ndGg7Cit9
OworCisvLyBDb21iaW5lZEJsb2IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBDb21iaW5lZEJsb2IgOiBwdWJs
aWMgQmxvYiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKGNv
bnN0IFZlY3RvcjxSZWZQdHI8QmxvYj4gPiYgYmxvYkxpc3QpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYio+KG5ldyBDb21iaW5lZEJsb2IoYmxvYkxpc3Qp
KSk7CisgICAgfQorCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdG90YWxTaXplOyB9CisgICAgdmlydHVhbCBpbnQ2NF90IHJlYWQoY2hhciog
b3V0LCBzaXplX3QgbWF4TGVuZ3RoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludDY0X3QgcmVhZERp
cmVjdChCbG9iOjpSZWFkZXIqIHJlYWRlciwgaW50NjRfdCBtYXhMZW5ndGgpIGNvbnN0OworCisg
ICAgdmlydHVhbCBib29sIGlzQ29tYmluZWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAg
dmlydHVhbCBDb21iaW5lZEJsb2IqIHRvQ29tYmluZWRCbG9iKCkgeyByZXR1cm4gdGhpczsgfQor
CisgICAgdm9pZCBhcHBlbmRCbG9iKE5vbk51bGxQYXNzUmVmUHRyPEJsb2I+IGJsb2IpOworCisj
aWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgbG9uZyBsb25nIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fdG90YWxTaXplOyB9CiAjZW5kaWYKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
QmxvYjsKKyAgICBDb21iaW5lZEJsb2IoY29uc3QgVmVjdG9yPFJlZlB0cjxCbG9iPiA+JiBibG9i
TGlzdCk7CisgICAgdm9pZCBhcHBlbmRCbG9iTGlzdChjb25zdCBWZWN0b3I8UmVmUHRyPEJsb2I+
ID4mIGJsb2JMaXN0KTsKKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIENvbWJpbmVkQmxv
Yihjb25zdCBWZWN0b3I8UmVmUHRyPEJsb2I+ID4mIGJsb2JMaXN0LCBsb25nIGxvbmcgc3RhcnQs
IGxvbmcgbG9uZyBsZW5ndGgpOworICAgIHZpcnR1YWwgQmxvYiogc2xpY2VJbnRlcm5hbChsb25n
IGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8QmxvYio+KG5ldyBDb21iaW5lZEJsb2IobV9ibG9iTGlzdCwgc3RhcnQs
IGxlbmd0aCkpOworICAgIH0KKyNlbmRpZgorCisgICAgVmVjdG9yPFJlZlB0cjxCbG9iPiA+IG1f
YmxvYkxpc3Q7CisgICAgbG9uZyBsb25nIG1fdG90YWxTaXplOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2IuaWRsIGIvV2ViQ29yZS9o
dG1sL0Jsb2IuaWRsCmluZGV4IDhkYjYwNjQuLmI3NTVjYzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aHRtbC9CbG9iLmlkbAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYi5pZGwKQEAgLTMyLDEwICszMiw5
IEBAIG1vZHVsZSBodG1sIHsKIAogICAgIGludGVyZmFjZSBCbG9iIHsKICAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplOwotICAgICAgICAKKwogI2lmIGRl
ZmluZWQoRU5BQkxFX0JMT0JfU0xJQ0UpICYmIEVOQUJMRV9CTE9CX1NMSUNFCiAgICAgICAgIEJs
b2Igc2xpY2UoaW4gbG9uZyBsb25nIHN0YXJ0LCBpbiBsb25nIGxvbmcgbGVuZ3RoKTsKICNlbmRp
ZgogICAgIH07Ci0KIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iQnVpbGRlci5jcHAg
Yi9XZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjRiYzQwNDEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYkJ1
aWxkZXIuY3BwCkBAIC0wLDAgKzEsMjEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkJsb2JCdWlsZGVyLmgiCisKKyNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAiQnl0ZVN0b3Jl
LmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBPUyhXSU5E
T1dTKQorc3RhdGljIGNvbnN0IEJsb2JCdWlsZGVyOjpFbmRpbmdzVHlwZSBuYXRpdmVFbmRpbmcg
PSBCbG9iQnVpbGRlcjo6RU5ESU5HX0NSTEY7CisjZWxzZQorc3RhdGljIGNvbnN0IEJsb2JCdWls
ZGVyOjpFbmRpbmdzVHlwZSBuYXRpdmVFbmRpbmcgPSBCbG9iQnVpbGRlcjo6RU5ESU5HX0xGOwor
I2VuZGlmCisKK0Jsb2JCdWlsZGVyOjpCbG9iQnVpbGRlcigpCisgICAgOiBtX2J5dGVTdG9yZShC
eXRlU3RvcmU6OmNyZWF0ZSgpKQorICAgICwgbV9lbmRpbmdzKEVORElOR19UUkFOU1BBUkVOVCkK
K3sKK30KKworQmxvYkJ1aWxkZXI6On5CbG9iQnVpbGRlcigpCit7Cit9CisKK2NsYXNzIFN0cmlu
Z1dyaXRlcldpdGhGaXhMaW5lQnJlYWtzIDogcHVibGljIEJ5dGVTdG9yZTo6V3JpdGVyIHsKK3B1
YmxpYzoKKyAgICBTdHJpbmdXcml0ZXJXaXRoRml4TGluZUJyZWFrcyhjb25zdCBDU3RyaW5nJiBm
cm9tLCBCbG9iQnVpbGRlcjo6RW5kaW5nc1R5cGUgZGVzaXJlZCk7CisgICAgaW50NjRfdCBmaW5h
bFN0cmluZ0xlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsY3VsYXRlZEZpbmFsU3RyaW5nTGVu
Z3RoOyB9CisgICAgdmlydHVhbCBpbnQ2NF90IHdyaXRlVG9CdWZmZXIoY2hhciogb3V0LCBpbnQ2
NF90IGxlbmd0aCk7Citwcml2YXRlOgorICAgIENTdHJpbmcgbV9mcm9tOworICAgIEJsb2JCdWls
ZGVyOjpFbmRpbmdzVHlwZSBtX2VuZGluZ3M7CisgICAgY29uc3QgY2hhciogbV9lbmRpbmdDaGFy
czsKKyAgICB1bnNpZ25lZCBpbnQgbV9lbmRpbmdMZW5ndGg7CisgICAgaW50IG1fbmVlZEZpeDsK
KyAgICBpbnQ2NF90IG1fY2FsY3VsYXRlZEZpbmFsU3RyaW5nTGVuZ3RoOworfTsKKworU3RyaW5n
V3JpdGVyV2l0aEZpeExpbmVCcmVha3M6OlN0cmluZ1dyaXRlcldpdGhGaXhMaW5lQnJlYWtzKGNv
bnN0IENTdHJpbmcmIGZyb20sIEJsb2JCdWlsZGVyOjpFbmRpbmdzVHlwZSBlbmRpbmdzKQorICAg
IDogbV9mcm9tKGZyb20pCisgICAgLCBtX2VuZGluZ3MoZW5kaW5ncyA9PSBCbG9iQnVpbGRlcjo6
RU5ESU5HX05BVElWRSA/IG5hdGl2ZUVuZGluZyA6IGVuZGluZ3MpCisgICAgLCBtX2VuZGluZ0No
YXJzKEJsb2JCdWlsZGVyOjpnZXRFbmRpbmdDaGFycyhtX2VuZGluZ3MpKQorICAgICwgbV9lbmRp
bmdMZW5ndGgoc3RybGVuKG1fZW5kaW5nQ2hhcnMpKQorICAgICwgbV9uZWVkRml4KDApCit7Cisg
ICAgbV9jYWxjdWxhdGVkRmluYWxTdHJpbmdMZW5ndGggPSBtX2Zyb20ubGVuZ3RoKCk7CisgICAg
aWYgKG1fZW5kaW5ncyA9PSBCbG9iQnVpbGRlcjo6RU5ESU5HX1RSQU5TUEFSRU5UKQorICAgICAg
ICByZXR1cm47CisKKyAgICBjb25zdCBjaGFyKiBwID0gbV9mcm9tLmRhdGEoKTsKKyAgICB3aGls
ZSAoY2hhciBjID0gKnArKykgeworICAgICAgICBpZiAoYyA9PSAnXHInKSB7CisgICAgICAgICAg
ICAvLyBTYWZlIHRvIGxvb2sgYWhlYWQgYmVjYXVzZSBvZiB0cmFpbGluZyAnXDAnLgorICAgICAg
ICAgICAgaWYgKCpwID09ICdcbicgJiYgbV9lbmRpbmdzICE9IEJsb2JCdWlsZGVyOjpFTkRJTkdf
Q1JMRikgeworICAgICAgICAgICAgICAgIG1fY2FsY3VsYXRlZEZpbmFsU3RyaW5nTGVuZ3RoICs9
IChtX2VuZGluZ0xlbmd0aCAtIDIpOworICAgICAgICAgICAgICAgICsrbV9uZWVkRml4OworICAg
ICAgICAgICAgfSBlbHNlIGlmIChtX2VuZGluZ3MgIT0gQmxvYkJ1aWxkZXI6OkVORElOR19DUikg
eworICAgICAgICAgICAgICAgIG1fY2FsY3VsYXRlZEZpbmFsU3RyaW5nTGVuZ3RoICs9IChtX2Vu
ZGluZ0xlbmd0aCAtIDEpOworICAgICAgICAgICAgICAgICsrbV9uZWVkRml4OworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJyAmJiBtX2VuZGluZ3MgIT0gQmxvYkJ1
aWxkZXI6OkVORElOR19MRikgeworICAgICAgICAgICAgbV9jYWxjdWxhdGVkRmluYWxTdHJpbmdM
ZW5ndGggKz0gKG1fZW5kaW5nTGVuZ3RoIC0gMSk7CisgICAgICAgICAgICArK21fbmVlZEZpeDsK
KyAgICAgICAgfQorICAgIH0KK30KKworaW50NjRfdCBTdHJpbmdXcml0ZXJXaXRoRml4TGluZUJy
ZWFrczo6d3JpdGVUb0J1ZmZlcihjaGFyKiBvdXQsIGludDY0X3QgbGVuZ3RoKQoreworICAgIEFT
U0VSVChtX2Zyb20uZGF0YSgpKTsKKyAgICBsZW5ndGggPSBzdGQ6Om1pbihsZW5ndGgsIG1fY2Fs
Y3VsYXRlZEZpbmFsU3RyaW5nTGVuZ3RoKTsKKworICAgIGlmICghbV9uZWVkRml4KSB7CisgICAg
ICAgIEFTU0VSVChsZW5ndGggPD0gbV9mcm9tLmxlbmd0aCgpKTsKKyAgICAgICAgbWVtY3B5KG91
dCwgbV9mcm9tLmRhdGEoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpKTsKKyAgICAgICAg
cmV0dXJuIGxlbmd0aDsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBwID0gbV9mcm9tLmRhdGEo
KTsKKyAgICBpbnQ2NF90IG53cml0dGVuID0gMDsKKyAgICB3aGlsZSAoKnAgJiYgbndyaXR0ZW4r
KyA8IGxlbmd0aCkgeworICAgICAgICBjaGFyIGMgPSAqcCsrOworICAgICAgICBpZiAoYyA9PSAn
XHInKSB7CisgICAgICAgICAgICBpZiAoKnAgPT0gJ1xuJyAmJiBtX2VuZGluZ3MgIT0gQmxvYkJ1
aWxkZXI6OkVORElOR19DUkxGKSB7CisgICAgICAgICAgICAgICAgLy8gVHVybiBDUkxGIGludG8g
ZGVzaXJlZEVuZGluZ3MuCisgICAgICAgICAgICAgICAgbWVtY3B5KG91dCwgbV9lbmRpbmdDaGFy
cywgbV9lbmRpbmdMZW5ndGgpOworICAgICAgICAgICAgICAgIG91dCArPSBtX2VuZGluZ0xlbmd0
aDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKnAgIT0gJ1xuJyAmJiBtX2VuZGluZ3MgIT0gQmxv
YkJ1aWxkZXI6OkVORElOR19DUikgeworICAgICAgICAgICAgICAgIC8vIFR1cm4gQ1IgaW50byBk
ZXNpcmVkRW5kaW5ncy4KKyAgICAgICAgICAgICAgICBtZW1jcHkob3V0LCBtX2VuZGluZ0NoYXJz
LCBtX2VuZGluZ0xlbmd0aCk7CisgICAgICAgICAgICAgICAgb3V0ICs9IG1fZW5kaW5nTGVuZ3Ro
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJyAmJiBtX2VuZGlu
Z3MgIT0gQmxvYkJ1aWxkZXI6OkVORElOR19MRikgeworICAgICAgICAgICAgLy8gVHVybiBMRiBp
bnRvIGRlc2lyZWRFbmRpbmdzLgorICAgICAgICAgICAgbWVtY3B5KG91dCwgbV9lbmRpbmdDaGFy
cywgbV9lbmRpbmdMZW5ndGgpOworICAgICAgICAgICAgb3V0ICs9IG1fZW5kaW5nTGVuZ3RoOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTGVhdmUgb3RoZXIgY2hhcmFjdGVycyBh
bG9uZS4KKyAgICAgICAgICAgICpvdXQrKyA9IGM7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIG53cml0dGVuOworfQorCitib29sIEJsb2JCdWlsZGVyOjphcHBlbmRTdHJpbmcoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICBTdHJpbmdXcml0ZXJXaXRoRml4
TGluZUJyZWFrcyB3cml0ZXIodGV4dC51dGY4KCksIG1fZW5kaW5ncyk7CisgICAgcmV0dXJuIG1f
Ynl0ZVN0b3JlLT5hcHBlbmREaXJlY3QoJndyaXRlciwgd3JpdGVyLmZpbmFsU3RyaW5nTGVuZ3Ro
KCkpOworfQorCitib29sIEJsb2JCdWlsZGVyOjphcHBlbmRCbG9iKFBhc3NSZWZQdHI8QmxvYj4g
YmxvYikKK3sKKyAgICBpZiAoIWJsb2ItPnNpemUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgaWYgKCFtX2J5dGVTdG9yZS0+ZW1wdHkoKSkgeworICAgICAgICBtX2Jsb2JMaXN0LmFwcGVu
ZChEYXRhQmxvYjo6Y3JlYXRlKG1fYnl0ZVN0b3JlLnJlbGVhc2UoKSkpOworICAgICAgICBtX2J5
dGVTdG9yZSA9IEJ5dGVTdG9yZTo6Y3JlYXRlKCk7CisgICAgfQorICAgIG1fYmxvYkxpc3QuYXBw
ZW5kKGJsb2IpOworICAgIHJldHVybiB0cnVlOworfQorCitQYXNzUmVmUHRyPEJsb2I+IEJsb2JC
dWlsZGVyOjpnZXRCbG9iKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYmxvYkxpc3Quc2l6ZSgpKQor
ICAgICAgICByZXR1cm4gRGF0YUJsb2I6OmNyZWF0ZShtX2J5dGVTdG9yZSk7CisgICAgaWYgKG1f
YmxvYkxpc3Quc2l6ZSgpID09IDEgJiYgbV9ieXRlU3RvcmUtPmVtcHR5KCkpCisgICAgICAgIHJl
dHVybiBtX2Jsb2JMaXN0Lmxhc3QoKTsKKworICAgIFJlZlB0cjxCbG9iPiBibG9iID0gQ29tYmlu
ZWRCbG9iOjpjcmVhdGUobV9ibG9iTGlzdCk7CisgICAgaWYgKCFtX2J5dGVTdG9yZS0+ZW1wdHko
KSkKKyAgICAgICAgYmxvYi0+dG9Db21iaW5lZEJsb2IoKS0+YXBwZW5kQmxvYihEYXRhQmxvYjo6
Y3JlYXRlKG1fYnl0ZVN0b3JlKSk7CisKKyAgICByZXR1cm4gYmxvYi5yZWxlYXNlKCk7Cit9CisK
K3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEJsb2JCdWlsZGVyOjpFbmRpbmdzVHlwZSwgQ2FzZUZv
bGRpbmdIYXNoPiBFbmRpbmdzVHlwZU1hcDsKK3N0YXRpYyBjb25zdCBFbmRpbmdzVHlwZU1hcCog
Y3JlYXRlRW5kaW5nc1R5cGVNYXAoKQoreworICAgIEVuZGluZ3NUeXBlTWFwKiBtYXAgPSBuZXcg
RW5kaW5nc1R5cGVNYXA7CisgICAgbWFwLT5hZGQoInRyYW5zcGFyZW50IiwgQmxvYkJ1aWxkZXI6
OkVORElOR19UUkFOU1BBUkVOVCk7CisgICAgbWFwLT5hZGQoIm5hdGl2ZSIsIEJsb2JCdWlsZGVy
OjpFTkRJTkdfTkFUSVZFKTsKKyAgICBtYXAtPmFkZCgibGYiLCBCbG9iQnVpbGRlcjo6RU5ESU5H
X0xGKTsKKyAgICBtYXAtPmFkZCgiY3IiLCBCbG9iQnVpbGRlcjo6RU5ESU5HX0NSKTsKKyAgICBt
YXAtPmFkZCgiY3JsZiIsIEJsb2JCdWlsZGVyOjpFTkRJTkdfQ1JMRik7CisgICAgcmV0dXJuIG1h
cDsKK30KKwordm9pZCBCbG9iQnVpbGRlcjo6c2V0RW5kaW5ncyhjb25zdCBTdHJpbmcmIHR5cGUp
Cit7CisgICAgc3RhdGljIGNvbnN0IEVuZGluZ3NUeXBlTWFwKiB0eXBlTWFwID0gY3JlYXRlRW5k
aW5nc1R5cGVNYXAoKTsKKyAgICBtX2VuZGluZ3MgPSB0eXBlLmlzTnVsbCgpID8gRU5ESU5HX1RS
QU5TUEFSRU5UIDogdHlwZU1hcC0+Z2V0KHR5cGUpOworfQorCitTdHJpbmcgQmxvYkJ1aWxkZXI6
OmVuZGluZ3MoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9lbmRpbmdzKSB7CisgICAgY2FzZSBF
TkRJTkdfVFJBTlNQQVJFTlQ6IHJldHVybiAidHJhbnNwYXJlbnQiOworICAgIGNhc2UgRU5ESU5H
X05BVElWRTogcmV0dXJuICJuYXRpdmUiOworICAgIGNhc2UgRU5ESU5HX0xGOiByZXR1cm4gImxm
IjsKKyAgICBjYXNlIEVORElOR19DUjogcmV0dXJuICJjciI7CisgICAgY2FzZSBFTkRJTkdfQ1JM
RjogcmV0dXJuICJjcmxmIjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuICJ0cmFuc3BhcmVudCI7Cit9CisKK2NvbnN0IGNoYXIqIEJsb2JCdWlsZGVyOjpnZXRF
bmRpbmdDaGFycyhFbmRpbmdzVHlwZSBlbmRpbmdzKQoreworICAgIHN3aXRjaCAoZW5kaW5ncykg
eworICAgIGNhc2UgRU5ESU5HX0NSTEY6IHJldHVybiAiXHJcbiI7CisgICAgY2FzZSBFTkRJTkdf
Q1I6IHJldHVybiAiXHIiOworICAgIGNhc2UgRU5ESU5HX05BVElWRTogZ2V0RW5kaW5nQ2hhcnMo
bmF0aXZlRW5kaW5nKTsKKyAgICBkZWZhdWx0OiByZXR1cm4gIlxuIjsKKyAgICB9CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICJcbiI7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iQnVpbGRlci5oIGIvV2ViQ29y
ZS9odG1sL0Jsb2JCdWlsZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZDRjOWI5YwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9CbG9iQnVpbGRlci5oCkBA
IC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEJsb2JCdWlsZGVyX2gKKyNkZWZpbmUgQmxvYkJ1aWxkZXJf
aAorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBCbG9iOworY2xhc3MgQnl0ZVN0b3JlOworY2xhc3MgQmxvYkJ1aWxkZXIgOiBwdWJsaWMg
UmVmQ291bnRlZDxCbG9iQnVpbGRlcj4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEJsb2JCdWlsZGVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQmxvYkJ1aWxkZXIo
KSk7IH0KKyAgICB2aXJ0dWFsIH5CbG9iQnVpbGRlcigpOworCisgICAgLy8gQXBwZW5kcyBzdHJp
bmcuICBSZXR1cm5zIGZhbHNlIGlmIHRoZSBkYXRhIGNvdWxkIG5vdCBiZSBhZGRlZC4KKyAgICBi
b29sIGFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmKTsKKwor
ICAgIC8vIEFwcGVuZHMgYmxvYi4gIFJldHVybnMgZmFsc2UgaWYgdGhlIGRhdGEgY291bGQgbm90
IGJlIGFkZGVkLgorICAgIGJvb2wgYXBwZW5kQmxvYihQYXNzUmVmUHRyPEJsb2I+IGJsb2IpOwor
CisgICAgUGFzc1JlZlB0cjxCbG9iPiBnZXRCbG9iKCkgY29uc3Q7CisKKyAgICBlbnVtIEVuZGlu
Z3NUeXBlIHsKKyAgICAgICAgRU5ESU5HX1RSQU5TUEFSRU5UID0gMCwKKyAgICAgICAgRU5ESU5H
X05BVElWRSwKKyAgICAgICAgRU5ESU5HX0xGLAorICAgICAgICBFTkRJTkdfQ1IsCisgICAgICAg
IEVORElOR19DUkxGLAorICAgIH07CisgICAgdm9pZCBzZXRFbmRpbmdzKGNvbnN0IFN0cmluZyYp
OworICAgIFN0cmluZyBlbmRpbmdzKCkgY29uc3Q7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGdl
dEVuZGluZ0NoYXJzKEVuZGluZ3NUeXBlKTsKKworcHJpdmF0ZToKKyAgICBCbG9iQnVpbGRlcigp
OworCisgICAgVmVjdG9yPFJlZlB0cjxCbG9iPiA+IG1fYmxvYkxpc3Q7CisgICAgUmVmUHRyPEJ5
dGVTdG9yZT4gbV9ieXRlU3RvcmU7CisKKyAgICBFbmRpbmdzVHlwZSBtX2VuZGluZ3M7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCbG9iQnVpbGRlcl9oCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIuaWRsIGIvV2ViQ29yZS9odG1sL0Jsb2JC
dWlsZGVyLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTkzNDBkCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2JCdWlsZGVyLmlkbApAQCAtMCwwICsx
LDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworbW9kdWxlIGh0bWwgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ3VzdG9tQ29u
c3RydWN0b3IKKyAgICBdIEJsb2JCdWlsZGVyIHsKKyAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0
TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGVuZGluZ3M7CisKKyAgICAgICAgQmxvYiBnZXRC
bG9iKCk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgYXBwZW5kKC8qIG92ZXJsb2FkZWQgKi8pOwor
ICAgIH07CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CeXRlU3RvcmUuY3BwIGIvV2Vi
Q29yZS9odG1sL0J5dGVTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMGNlMjgxMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9CeXRlU3RvcmUuY3Bw
CkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQnl0ZVN0
b3JlLmgiCisKKyNpbmNsdWRlIDxsaW1pdHM+CisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0J5dGVTdG9yZTo6Qnl0ZVN0b3JlKCkKKyAgICA6
IG1fYnVmZmVyKDApCisgICAgLCBtX2J1ZmZlclNpemUoMCkKK3sKK30KKworQnl0ZVN0b3JlOjp+
Qnl0ZVN0b3JlKCkKK3sKKyAgICBmYXN0RnJlZShtX2J1ZmZlcik7Cit9CisKK2Jvb2wgQnl0ZVN0
b3JlOjphcHBlbmREaXJlY3QoV3JpdGVyKiB3cml0ZXIsIGludDY0X3QgbGVuZ3RoKQoreworICAg
IE11dGV4TG9ja2VyIGxvY2sobV9sb2NrKTsKKyAgICBjaGFyKiBuZXdCdWZmZXIgPSAwOworICAg
IC8vIEZJWE1FOiBoYW5kbGUgc2l6ZW9mKHNpemVfdCkgPCBsZW5ndGggY2FzZXMKKyAgICBpZiAo
bV9idWZmZXJTaXplICsgbGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHNpemVfdCBuZXdTaXplID0gc3RhdGljX2Nh
c3Q8c2l6ZV90PihtX2J1ZmZlclNpemUgKyBsZW5ndGgpOworICAgIGlmICh0cnlGYXN0TWFsbG9j
KG5ld1NpemUpLmdldFZhbHVlKG5ld0J1ZmZlcikpIHsKKyAgICAgICAgaWYgKG1fYnVmZmVyKQor
ICAgICAgICAgICAgbWVtY3B5KG5ld0J1ZmZlciwgbV9idWZmZXIsIG1fYnVmZmVyU2l6ZSk7Cisg
ICAgICAgIGludDY0X3QgbndyaXR0ZW4gPSB3cml0ZXItPndyaXRlVG9CdWZmZXIobmV3QnVmZmVy
ICsgbV9idWZmZXJTaXplLCBsZW5ndGgpOworICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7Cisg
ICAgICAgIG1fYnVmZmVyID0gbmV3QnVmZmVyOworICAgICAgICBpZiAobndyaXR0ZW4gPCAwKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2J1ZmZlclNpemUgKz0gc3RhdGlj
X2Nhc3Q8c2l6ZV90Pihud3JpdHRlbik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2ludDY0X3QgQnl0ZVN0b3JlOjpyZWFkRGlyZWN0KFJlYWRl
ciogcmVhZGVyLCBpbnQ2NF90IG9mZnNldCwgaW50NjRfdCBtYXhMZW5ndGgpIGNvbnN0Cit7Cisg
ICAgaWYgKG9mZnNldCA8IDAgfHwgbWF4TGVuZ3RoIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOwor
ICAgIGlmICghbWF4TGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKyAgICBNdXRleExvY2tlciBs
b2NrKG1fbG9jayk7CisgICAgaWYgKG9mZnNldCA+PSBtX2J1ZmZlclNpemUpCisgICAgICAgIHJl
dHVybiAwOworICAgIGlmIChvZmZzZXQgKyBtYXhMZW5ndGggPiBtX2J1ZmZlclNpemUpCisgICAg
ICAgIG1heExlbmd0aCA9IG1fYnVmZmVyU2l6ZSAtIG9mZnNldDsKKyAgICByZXR1cm4gcmVhZGVy
LT5yZWFkRnJvbUJ1ZmZlcigmbV9idWZmZXJbb2Zmc2V0XSwgbWF4TGVuZ3RoKTsKK30KKworc3Ry
dWN0IE1lbWNweVdyaXRlciA6IHB1YmxpYyBCeXRlU3RvcmU6OldyaXRlciB7CisgICAgTWVtY3B5
V3JpdGVyKGNvbnN0IGNoYXIqIGluKSA6IG1faW4oaW4pIHsgfQorICAgIHZpcnR1YWwgaW50NjRf
dCB3cml0ZVRvQnVmZmVyKGNoYXIqIG91dCwgaW50NjRfdCBsZW5ndGgpCisgICAgeworICAgICAg
ICBBU1NFUlQobGVuZ3RoIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwor
ICAgICAgICBtZW1jcHkob3V0LCBtX2luLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkpOwor
ICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgIH0KKyAgICBjb25zdCBjaGFyKiBtX2luOworfTsK
Kworc3RydWN0IE1lbWNweVJlYWRlciA6IHB1YmxpYyBCeXRlU3RvcmU6OlJlYWRlciB7CisgICAg
TWVtY3B5UmVhZGVyKGNoYXIqIG91dCkgOiBtX291dChvdXQpIHsgfQorICAgIHZpcnR1YWwgaW50
NjRfdCByZWFkRnJvbUJ1ZmZlcihjb25zdCBjaGFyKiBpbiwgaW50NjRfdCBsZW5ndGgpCisgICAg
eworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6
bWF4KCkpOworICAgICAgICBtZW1jcHkobV9vdXQsIGluLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxl
bmd0aCkpOworICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgIH0KKyAgICBjaGFyKiBtX291dDsK
K307CisKK2Jvb2wgQnl0ZVN0b3JlOjphcHBlbmQoY29uc3QgY2hhciogaW4sIHNpemVfdCBsZW5n
dGgpCit7CisgICAgTWVtY3B5V3JpdGVyIHdyaXRlcihpbik7CisgICAgcmV0dXJuIGFwcGVuZERp
cmVjdCgmd3JpdGVyLCBsZW5ndGgpOworfQorCitpbnQ2NF90IEJ5dGVTdG9yZTo6cmVhZChjaGFy
KiBvdXQsIGludDY0X3Qgb2Zmc2V0LCBzaXplX3QgbWF4TGVuZ3RoKSBjb25zdAoreworICAgIE1l
bWNweVJlYWRlciByZWFkZXIob3V0KTsKKyAgICByZXR1cm4gcmVhZERpcmVjdCgmcmVhZGVyLCBv
ZmZzZXQsIG1heExlbmd0aCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9CeXRlU3RvcmUuaCBiL1dlYkNvcmUvaHRtbC9CeXRlU3RvcmUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzRmZTk1Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9odG1sL0J5dGVTdG9yZS5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJ5
dGVTdG9yZV9oCisjZGVmaW5lIEJ5dGVTdG9yZV9oCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBCeXRlU3RvcmUgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxCeXRlU3RvcmU+IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCeXRlU3RvcmU+IGNyZWF0ZSgpIHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBCeXRlU3RvcmUoKSk7IH0KKyAgICB2aXJ0dWFsIH5CeXRlU3RvcmUo
KTsKKworICAgIGludDY0X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyU2l6ZTsgfQor
ICAgIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CisKKyAgICAvLyBSZWFk
cyB0aGUgZGF0YSBpbnRvIHxvdXR8IGF0IG1vc3QgfG1heExlbmd0aHwgYnl0ZXMuCisgICAgaW50
NjRfdCByZWFkKGNoYXIqIG91dCwgaW50NjRfdCBvZmZzZXQsIHNpemVfdCBtYXhMZW5ndGgpIGNv
bnN0OworCisgICAgLy8gQXBwZW5kcyByYXcgZGF0YSB8aW58LiAgUmV0dXJucyBmYWxzZSBpZiB0
aGUgZGF0YSBjb3VsZCBub3QgYmUgYWRkZWQuCisgICAgYm9vbCBhcHBlbmQoY29uc3QgY2hhciog
aW4sIHNpemVfdCBsZW5ndGgpOworCisgICAgY2xhc3MgUmVhZGVyIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHZpcnR1YWwgaW50NjRfdCByZWFkRnJvbUJ1ZmZlcihjb25zdCBjaGFyKiBpbiwgaW50
NjRfdCBtYXhMZW5ndGgpID0gMDsKKyAgICAgICAgdmlydHVhbCB+UmVhZGVyKCkgeyB9CisgICAg
fTsKKworICAgIGNsYXNzIFdyaXRlciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIGlu
dDY0X3Qgd3JpdGVUb0J1ZmZlcihjaGFyKiBvdXQsIGludDY0X3QgbWF4TGVuZ3RoKSA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgfldyaXRlcigpIHsgfQorICAgIH07CisKKyAgICBib29sIGFwcGVuZERp
cmVjdChXcml0ZXIqIHdyaXRlciwgaW50NjRfdCBtYXhMZW5ndGgpOworICAgIGludDY0X3QgcmVh
ZERpcmVjdChSZWFkZXIqIHJlYWRlciwgaW50NjRfdCBvZmZzZXQsIGludDY0X3QgbWF4TGVuZ3Ro
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBCeXRlU3RvcmUoKTsKKworICAgIGNoYXIqIG1fYnVm
ZmVyOworICAgIHNpemVfdCBtX2J1ZmZlclNpemU7CisgICAgbXV0YWJsZSBNdXRleCBtX2xvY2s7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCeXRlU3RvcmVfaApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0RPTUZvcm1EYXRhLmNwcCBiL1dlYkNvcmUvaHRtbC9E
T01Gb3JtRGF0YS5jcHAKaW5kZXggMTQ0MWU4Yi4uNjE1N2UxZCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9odG1sL0RPTUZvcm1EYXRhLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRE9NRm9ybURhdGEuY3Bw
CkBAIC01MSw4ICs1MSw4IEBAIHZvaWQgRE9NRm9ybURhdGE6OmFwcGVuZChjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB2b2lkIERPTUZvcm1EYXRhOjphcHBlbmQoY29u
c3QgU3RyaW5nJiBuYW1lLCBCbG9iKiBibG9iKQogewogICAgIC8vIEZJWE1FOiBOZWVkIHRvIHN1
cHBvcnQgc2xpY2VkIGZpbGUgd2hlbiBCbG9iLnNsaWNlIHN1cHBvcnQgaXMgbGFuZGVkLgotICAg
IGlmICghbmFtZS5pc0VtcHR5KCkgJiYgIWJsb2ItPnBhdGgoKS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgUmVmUHRyPEZpbGU+IGZpbGUgPSBzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYik7CisgICAgaWYg
KCFuYW1lLmlzRW1wdHkoKSAmJiBibG9iLT5pc1VzaW5nRmlsZSgpICYmICFibG9iLT50b0ZpbGVC
bG9iKCktPnBhdGgoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRyPEZpbGU+IGZpbGUgPSBz
dGF0aWNfY2FzdDxGaWxlKj4oYmxvYi0+dG9GaWxlQmxvYigpKTsKICAgICAgICAgYXBwZW5kRmls
ZShuYW1lLCBmaWxlLnJlbGVhc2UoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9o
dG1sL0ZpbGUuY3BwIGIvV2ViQ29yZS9odG1sL0ZpbGUuY3BwCmluZGV4IDk3ZmRjNDUuLmVkZDMy
NTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlLmNwcAorKysgYi9XZWJDb3JlL2h0bWwv
RmlsZS5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRmlsZTo6
RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCi0gICAgOiBCbG9iKHBhdGgpCisgICAgOiBGaWxlQmxv
YihwYXRoKQogICAgICwgbV9uYW1lKHBhdGhHZXRGaWxlTmFtZShwYXRoKSkKIHsKICAgICAvLyBX
ZSBkb24ndCB1c2UgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQYXRoKCkgYmVjYXVz
ZSBpdCByZXR1cm5zICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iIHVwb24gZmFpbHVyZS4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlLmggYi9XZWJDb3JlL2h0bWwvRmlsZS5oCmluZGV4
IGRkYTQ4MmEuLjcxYTMxZDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlLmgKKysrIGIv
V2ViQ29yZS9odG1sL0ZpbGUuaApAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIEZpbGUgOiBwdWJsaWMgQmxvYiB7CitjbGFzcyBGaWxlIDogcHVibGljIEZp
bGVCbG9iIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlPiBjcmVhdGUoY29u
c3QgU3RyaW5nJiBwYXRoKQogICAgIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuaWRsIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKaW5kZXggZDQ1N2JkYy4uNTJjZWJi
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5pZGwKQEAgLTQ4Niw2ICs0ODYsNyBAQCBtb2R1bGUgd2luZG93IHsKICAg
ICAgICAgYXR0cmlidXRlIEZpbGVDb25zdHJ1Y3RvciBGaWxlOwogICAgICAgICBhdHRyaWJ1dGUg
RmlsZUxpc3RDb25zdHJ1Y3RvciBGaWxlTGlzdDsKICAgICAgICAgYXR0cmlidXRlIEJsb2JDb25z
dHJ1Y3RvciBCbG9iOworICAgICAgICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbUdldHRlcl0gQmxvYkJ1
aWxkZXJDb25zdHJ1Y3RvciBCbG9iQnVpbGRlcjsgLy8gVXNhYmxlIHdpdGggbmV3IG9wZXJhdG9y
CiAKICAgICAgICAgYXR0cmlidXRlIE5vZGVGaWx0ZXJDb25zdHJ1Y3RvciBOb2RlRmlsdGVyOwog
ICAgICAgICBhdHRyaWJ1dGUgUmFuZ2VDb25zdHJ1Y3RvciBSYW5nZTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvRm9ybURhdGEuY3BwCmluZGV4IDU5N2Y4NTkuLjkyZjcwODggMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmNwcApAQCAtMTg4LDcgKzE4OCw5IEBAIHZvaWQgRm9ybURhdGE6
OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBp
c011bHRpUGFyCiAgICAgICAgICAgICBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlOwog
ICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBGSUxFLCB0aGVuIHdlIGFsc28g
bmVlZCB0byBpbmNsdWRlIHRoZSBmaWxlbmFtZQogICAgICAgICAgICAgaWYgKHZhbHVlLmZpbGUo
KSkgewotICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IHZhbHVlLmZpbGUoKS0+
cGF0aCgpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FIG5lZWQgdG8gc3luYyB3aXRoIGh0dHA6
Ly93ZWJraXQub3JnL2IvMzY2NzgKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWUuZmlsZSgp
LT5pc1VzaW5nRmlsZSgpKTsKKyAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSB2
YWx1ZS5maWxlKCktPnRvRmlsZUJsb2IoKS0+cGF0aCgpOwogICAgICAgICAgICAgICAgIFN0cmlu
ZyBmaWxlTmFtZSA9IHZhbHVlLmZpbGUoKS0+ZmlsZU5hbWUoKTsKIAogICAgICAgICAgICAgICAg
IC8vIExldCB0aGUgYXBwbGljYXRpb24gc3BlY2lmeSBhIGZpbGVuYW1lIGlmIGl0J3MgZ29pbmcg
dG8gZ2VuZXJhdGUgYSByZXBsYWNlbWVudCBmaWxlIGZvciB0aGUgdXBsb2FkLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvRm9ybURhdGEuaAppbmRleCA3NmI2YmU2Li41MDNhMjhkIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvRm9ybURhdGEuaApAQCAtMjYsNiArMjYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIEJsb2I7CiBjbGFzcyBDaHJvbWVDbGllbnQ7CiBjbGFzcyBET01Gb3JtRGF0
YTsKIGNsYXNzIERvY3VtZW50OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuY3BwIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IGYxMGI1ODkuLjM5
YmQ3ZWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9X
ZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTQ0NywxNCArNDQ3LDIwIEBAIHZvaWQg
WE1MSHR0cFJlcXVlc3Q6OnNlbmQoQmxvYiogYm9keSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAg
aWYgKCFpbml0U2VuZChlYykpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIEZJWE1FOiBub24t
ZmlsZSBiYXNlZCBibG9iIG1heSBuZWVkIHRvIGJlIHNlbnQgd2l0aCBhIHByb3BlciBjb250ZW50
LXR5cGUKKyAgICBpZiAoIWJvZHktPmlzVXNpbmdGaWxlKCkpIHsKKyAgICAgICAgc2VuZChib2R5
LT5zdHJpbmdWYWx1ZSgpLCBlYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAo
bV9tZXRob2QgIT0gIkdFVCIgJiYgbV9tZXRob2QgIT0gIkhFQUQiICYmIG1fdXJsLnByb3RvY29s
SW5IVFRQRmFtaWx5KCkpIHsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBzZXQgYSBDb250
ZW50LVR5cGUgaWYgb25lIGlzIG5vdCBzZXQuCiAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9y
dCBmb3IgdXBsb2FkaW5nIGJ1bmRsZXMuCiAgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHkgPSBG
b3JtRGF0YTo6Y3JlYXRlKCk7CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgIG1fcmVx
dWVzdEVudGl0eUJvZHktPmFwcGVuZEZpbGVSYW5nZShib2R5LT5wYXRoKCksIGJvZHktPnN0YXJ0
KCksIGJvZHktPmxlbmd0aCgpLCBib2R5LT5tb2RpZmljYXRpb25UaW1lKCkpOworICAgICAgICBt
X3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxlUmFuZ2UoYm9keS0+dG9GaWxlQmxvYigpLT5w
YXRoKCksIGJvZHktPnN0YXJ0KCksIGJvZHktPmxlbmd0aCgpLCBib2R5LT5tb2RpZmljYXRpb25U
aW1lKCkpOwogI2Vsc2UKLSAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5kRmlsZShi
b2R5LT5wYXRoKCksIGZhbHNlKTsKKyAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5k
RmlsZShib2R5LT50b0ZpbGVCbG9iKCktPnBhdGgoKSwgZmFsc2UpOwogI2VuZGlmCiAgICAgfQog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52211</attachid>
            <date>2010-03-31 14:35:00 -0700</date>
            <delta_ts>2010-04-14 11:27:59 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>36678_3</filename>
            <type>text/plain</type>
            <size>21532</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlNmY0MmMzLi5mZmU4ODdlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTAtMDMt
MzEgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgdXNpbmcgRm9ybURhdGEgdG8gc2Vu
ZCBhIHNsaWNlZCBmaWxlIHZpYSBYSFIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zNjY3OAorCisgICAgICAgIE1vdmUgY29tbW9uIGZ1bmN0aW9uYWxp
dGllcyB0byB0ZXN0IHNlbmRpbmcgRm9ybURhdGEgaW50byBhIGhlbHBlciBmaWxlCisgICAgICAg
IHNvIHRoYXQgaXQgY2FuIGJlIHNoYXJlZCBieSBGb3JtRGF0YSBsYXlvdXQgdGVzdHMuCisKKyAg
ICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWZvcm0tZGF0YS1jb21tb24u
anM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtZm9y
bS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUuanM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
bG9jYWwvcmVzb3VyY2VzL3NlbmQtZm9ybS1kYXRhLmpzOgorICAgICAgICAqIGh0dHAvdGVzdHMv
bG9jYWwvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQtZmlsZS1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQt
ZmlsZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1k
YXRhLmh0bWw6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6CisgICAgICAgICogcGxh
dGZvcm0vcXQvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoKKwogMjAx
MC0wMy0zMSAgUWkgWmhhbmcgIDxxaS4yLnpoYW5nQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBMYXN6bG8gR29tYm9zLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1mb3JtLWRhdGEtY29tbW9uLmpzIGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1mb3JtLWRhdGEtY29tbW9uLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2Njc3MWMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWZvcm0tZGF0YS1j
b21tb24uanMKQEAgLTAsMCArMSw3OCBAQAordmFyIGZpbGVJbnB1dCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImlucHV0Iik7CitmaWxlSW5wdXQudHlwZSA9ICdmaWxlJzsKK2ZpbGVJbnB1dC5z
dHlsZS53aWR0aCA9ICIxMDAlIjsgLy8gU28gdGhhdCBhbnkgbWFudWFsIHRlc3Rpbmcgd2lsbCBz
aG93IGZ1bGwgZmlsZSBuYW1lcworLy8gSW1wb3J0YW50IHRoYXQgd2UgcHV0IHRoaXMgYXQgdGhl
IHRvcCBvZiB0aGUgZG9jIHNvIHRoYXQgbG9nZ2luZyBkb2VzIG5vdCBjYXVzZSBpdCB0byBnbyBv
dXQgb2YgdmlldyAod2hlcmUgaXQgY2FuJ3QgYmUgZHJhZ2dlZCB0bykKK2RvY3VtZW50LmJvZHku
aW5zZXJ0QmVmb3JlKGZpbGVJbnB1dCwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTsKKworZnVu
Y3Rpb24gbW92ZU1vdXNlVG9DZW50ZXJPZkVsZW1lbnQoZWxlbWVudCkKK3sKKyAgICB2YXIgY2Vu
dGVyWCA9IGVsZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOworICAg
IHZhciBjZW50ZXJZID0gZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAv
IDI7CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oY2VudGVyWCwgY2VudGVyWSk7Cit9CisK
K2Z1bmN0aW9uIGdldEZpbGVOYW1lKGZpbGVQYXRoKQoreworICAgIHZhciBpbmRleCA9IGZpbGVQ
YXRoLmxhc3RJbmRleE9mKCcvJyk7CisgICAgaWYgKGluZGV4ID09IC0xKQorICAgICAgICByZXR1
cm4gZmlsZVBhdGg7CisgICAgcmV0dXJuIGZpbGVQYXRoLnN1YnN0cihpbmRleCArIDEpOworfQor
CitmdW5jdGlvbiBzZW5kRm9ybURhdGEoZm9ybURhdGFMaXN0LCBmaWxlU2xpY2VkKQoreworICAg
IHZhciBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
Zm9ybURhdGFMaXN0Lmxlbmd0aDsgaSsrKQorICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZm9ybURh
dGFMaXN0W2ldWyduYW1lJ10sIGZvcm1EYXRhTGlzdFtpXVsndmFsdWUnXSk7CisKKyAgICB2YXIg
eGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLm9wZW4oIlBPU1QiLCAiaHR0cDov
LzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9tdWx0aXBhcnQtcG9zdC1l
Y2hvLnBocCIsIGZhbHNlKTsKKyAgICB4aHIuc2VuZChmb3JtRGF0YSk7CisgICAgdmFyIHJlc3Bv
bnNlVGV4dCA9IHhoci5yZXNwb25zZVRleHQ7CisKKyAgICAvLyBJZiB3ZSdyZSBzZW5kaW5nIGEg
c2xpY2VkIGZpbGUgYW1vbmcgdGhlIEZvcm1EYXRhLCBhIHVuaXF1ZWx5IGdlbmVyYXRlZCBuYW1l
IHByZWZpeGVkIHdpdGggIkJsb2IiIGlzIHVzZWQuCisgICAgLy8gV2UgbmVlZCB0byByZW1vdmUg
dGhlIHJhbmRvbSBwYXJ0IGluIHRoZSBmaWxlbmFtZSBzbyB0aGF0IHdlIGdldCBjb25zaXN0ZW50
IHJlc3VsdC4KKyAgICBpZiAoZmlsZVNsaWNlZCkKKyAgICAgICAgcmVzcG9uc2VUZXh0ID0gcmVz
cG9uc2VUZXh0LnJlcGxhY2UoL0Jsb2Jcd3szMn0vZywgIkJsb2IiKTsKKworICAgIGRlYnVnKHJl
c3BvbnNlVGV4dCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RTZW5kaW5nRm9ybURhdGEoZGF0YUxpc3Qp
Cit7CisgICAgdmFyIGZpbGVzVG9EcmFnID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBk
YXRhTGlzdC5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoZGF0YUxpc3RbaV1bJ3R5cGUnXSA9
PSAnZmlsZScpCisgICAgICAgICAgICBmaWxlc1RvRHJhZy5wdXNoKGRhdGFMaXN0W2ldWyd2YWx1
ZSddKTsKKyAgICB9CisKKyAgICBpZiAoZmlsZXNUb0RyYWcpIHsKKyAgICAgICAgZXZlbnRTZW5k
ZXIuYmVnaW5EcmFnV2l0aEZpbGVzKGZpbGVzVG9EcmFnKTsKKyAgICAgICAgbW92ZU1vdXNlVG9D
ZW50ZXJPZkVsZW1lbnQoZmlsZUlucHV0KTsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgp
OworICAgIH0KKworICAgIHZhciBmaWxlcyA9IGZpbGVJbnB1dC5maWxlczsKKyAgICB2YXIgZm9y
bURhdGFMaXN0ID0gW107CisgICAgdmFyIGZpbGVTbGljZWQgPSBmYWxzZTsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGRhdGFMaXN0Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChkYXRhTGlz
dFtpXVsndHlwZSddID09ICdmaWxlJykgeworICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gZ2V0
RmlsZU5hbWUoZGF0YUxpc3RbaV1bJ3ZhbHVlJ10pOworICAgICAgICAgICAgZm9yICh2YXIgaiA9
IDA7IGogPCBmaWxlcy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIGlmIChmaWxlTmFt
ZSA9PSBmaWxlc1tqXS5uYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBmaWxlID0gZmls
ZXNbal07CisgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhTGlzdFtpXVsnc3RhcnQnXSAmJiBk
YXRhTGlzdFtpXVsnbGVuZ3RoJ10pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTbGlj
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUuc2xpY2UoZGF0
YUxpc3RbaV1bJ3N0YXJ0J10sIGRhdGFMaXN0W2ldWydsZW5ndGgnXSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9ybURhdGFMaXN0LnB1c2goeyduYW1lJzog
ZGF0YUxpc3RbaV1bJ25hbWUnXSwgJ3ZhbHVlJzogZmlsZX0pOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBmb3JtRGF0YUxpc3QucHVzaCh7J25hbWUnOiBkYXRhTGlzdFtpXVsn
bmFtZSddLCAndmFsdWUnOiBkYXRhTGlzdFtpXVsndmFsdWUnXX0pOworICAgICAgICB9CisgICAg
fQorCisgICAgc2VuZEZvcm1EYXRhKGZvcm1EYXRhTGlzdCwgZmlsZVNsaWNlZCk7Cit9CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWZvcm0t
ZGF0YS13aXRoLXNsaWNlZC1maWxlLmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9y
ZXNvdXJjZXMvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQtZmlsZS5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjIwM2E2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGlj
ZWQtZmlsZS5qcwpAQCAtMCwwICsxLDM4IEBACitkZXNjcmlwdGlvbigiVGVzdCBmb3Igc2VuZGlu
ZyBGb3JtRGF0YSB3aXRoIHNsaWNlZCBmaWxlcyB2aWEgWE1MSHR0cFJlcXVlc3QuIik7CisKK2Z1
bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGRlYnVnKCJTZW5kaW5nIEZvcm1EYXRhIGNvbnRhaW5p
bmcgb25lIHNsaWNlZCBmaWxlIHdpdGggZW1wdHkgbmFtZToiKTsKKyAgICB0ZXN0U2VuZGluZ0Zv
cm1EYXRhKFsKKyAgICAgICAgeyAndHlwZSc6ICdmaWxlJywgJ25hbWUnOiAnJywgJ3ZhbHVlJzog
J3Jlc291cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0JyB9CisgICAgXSk7CisKKyAgICBk
ZWJ1ZygiU2VuZGluZyBGb3JtRGF0YSBjb250YWluaW5nIG9uZSBzbGljZWQgZmlsZToiKTsKKyAg
ICB0ZXN0U2VuZGluZ0Zvcm1EYXRhKFsKKyAgICAgICAgeyAndHlwZSc6ICdmaWxlJywgJ25hbWUn
OiAnZmlsZScsICd2YWx1ZSc6ICdyZXNvdXJjZXMvZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dCcs
ICdzdGFydCcgOiAxLCAnbGVuZ3RoJyA6IDUgfQorICAgIF0pOworCisgICAgZGVidWcoIlNlbmRp
bmcgRm9ybURhdGEgY29udGFpbmluZyBvbmUgc3RyaW5nIGFuZCBvbmUgc2xpY2VkIGZpbGU6Iik7
CisgICAgdGVzdFNlbmRpbmdGb3JtRGF0YShbCisgICAgICAgIHsgJ3R5cGUnOiAnc3RyaW5nJywg
J25hbWUnOiAnc3RyaW5nMScsICd2YWx1ZSc6ICdmb28nIH0sCisgICAgICAgIHsgJ3R5cGUnOiAn
ZmlsZScsICduYW1lJzogJ2ZpbGUxJywgJ3ZhbHVlJzogJ3Jlc291cmNlcy9maWxlLWZvci1kcmFn
LXRvLXNlbmQudHh0JywgJ3N0YXJ0JyA6IDEsICdsZW5ndGgnIDogNSB9CisgICAgXSk7CisKKyAg
ICBkZWJ1ZygiU2VuZGluZyBGb3JtRGF0YSBjb250YWluaW5nIHR3byBzdHJpbmdzIGFuZCB0d28g
c2xpY2VkIGZpbGVzOiIpOworICAgIHRlc3RTZW5kaW5nRm9ybURhdGEoWworICAgICAgICB7ICd0
eXBlJzogJ3N0cmluZycsICduYW1lJzogJ3N0cmluZzEnLCAndmFsdWUnOiAnZm9vJyB9LAorICAg
ICAgICB7ICd0eXBlJzogJ2ZpbGUnLCAnbmFtZSc6ICdmaWxlMScsICd2YWx1ZSc6ICdyZXNvdXJj
ZXMvZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dCcsICdzdGFydCcgOiAxLCAnbGVuZ3RoJyA6IDUg
fSwKKyAgICAgICAgeyAndHlwZSc6ICdzdHJpbmcnLCAnbmFtZSc6ICdzdHJpbmcyJywgJ3ZhbHVl
JzogJ2JhcicgfSwKKyAgICAgICAgeyAndHlwZSc6ICdmaWxlJywgJ25hbWUnOiAnZmlsZTInLCAn
dmFsdWUnOiAncmVzb3VyY2VzL2ZpbGUtZm9yLWRyYWctdG8tc2VuZC50eHQnLCAnc3RhcnQnIDog
MywgJ2xlbmd0aCcgOiAyIH0KKyAgICBdKTsKK30KKworaWYgKHdpbmRvdy5ldmVudFNlbmRlcikg
eworICAgIHJ1blRlc3QoKTsKKyAgICAvLyBDbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMKKyAgICBm
aWxlSW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmaWxlSW5wdXQpOworfSBlbHNlIHsKKyAg
ICB0ZXN0RmFpbGVkKCJUaGlzIHRlc3QgaXMgbm90IGludGVyYWN0aXZlLCBwbGVhc2UgcnVuIHVz
aW5nIER1bXBSZW5kZXJUcmVlIik7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2Vu
ZC1mb3JtLWRhdGEuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9z
ZW5kLWZvcm0tZGF0YS5qcwppbmRleCBkZWY3YzQ0Li5jNjk0MTY4IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWZvcm0tZGF0YS5qcworKysg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWZvcm0tZGF0YS5q
cwpAQCAtMSw3MiArMSw1IEBACiBkZXNjcmlwdGlvbigiVGVzdCBmb3Igc2VuZGluZyBGb3JtRGF0
YSB2aWEgWE1MSHR0cFJlcXVlc3QuIik7CiAKLXZhciBmaWxlSW5wdXQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJpbnB1dCIpOwotZmlsZUlucHV0LnR5cGUgPSAnZmlsZSc7Ci1maWxlSW5wdXQu
c3R5bGUud2lkdGggPSAiMTAwJSI7IC8vIFNvIHRoYXQgYW55IG1hbnVhbCB0ZXN0aW5nIHdpbGwg
c2hvdyBmdWxsIGZpbGUgbmFtZXMKLS8vIEltcG9ydGFudCB0aGF0IHdlIHB1dCB0aGlzIGF0IHRo
ZSB0b3Agb2YgdGhlIGRvYyBzbyB0aGF0IGxvZ2dpbmcgZG9lcyBub3QgY2F1c2UgaXQgdG8gZ28g
b3V0IG9mIHZpZXcgKHdoZXJlIGl0IGNhbid0IGJlIGRyYWdnZWQgdG8pCi1kb2N1bWVudC5ib2R5
Lmluc2VydEJlZm9yZShmaWxlSW5wdXQsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7Ci0KLWZ1
bmN0aW9uIG1vdmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KGVsZW1lbnQpCi17Ci0gICAgdmFyIGNl
bnRlclggPSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gMjsKLSAg
ICB2YXIgY2VudGVyWSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQg
LyAyOwotICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGNlbnRlclgsIGNlbnRlclkpOwotfQot
Ci1mdW5jdGlvbiBnZXRGaWxlTmFtZShmaWxlUGF0aCkKLXsKLSAgICB2YXIgaW5kZXggPSBmaWxl
UGF0aC5sYXN0SW5kZXhPZignLycpOwotICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgICAgcmV0
dXJuIGZpbGVQYXRoOwotICAgIHJldHVybiBmaWxlUGF0aC5zdWJzdHIoaW5kZXggKyAxKTsKLX0K
LQotZnVuY3Rpb24gc2VuZEZvcm1EYXRhKGZvcm1EYXRhTGlzdCkKLXsKLSAgICB2YXIgZm9ybURh
dGEgPSBuZXcgRm9ybURhdGEoKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcm1EYXRhTGlz
dC5sZW5ndGg7IGkrKykKLSAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZvcm1EYXRhTGlzdFtpXVsn
bmFtZSddLCBmb3JtRGF0YUxpc3RbaV1bJ3ZhbHVlJ10pOwotCi0gICAgdmFyIHhociA9IG5ldyBY
TUxIdHRwUmVxdWVzdCgpOwotICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8xMjcuMC4wLjE6
ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvbXVsdGlwYXJ0LXBvc3QtZWNoby5waHAiLCBm
YWxzZSk7Ci0gICAgeGhyLnNlbmQoZm9ybURhdGEpOwotCi0gICAgZGVidWcoeGhyLnJlc3BvbnNl
VGV4dCk7Ci19Ci0KLWZ1bmN0aW9uIHRlc3RTZW5kaW5nRm9ybURhdGEoZGF0YUxpc3QpCi17Ci0g
ICAgdmFyIGZpbGVzVG9EcmFnID0gW107Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhTGlz
dC5sZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoZGF0YUxpc3RbaV1bJ3R5cGUnXSA9PSAnZmls
ZScpCi0gICAgICAgICAgICBmaWxlc1RvRHJhZy5wdXNoKGRhdGFMaXN0W2ldWyd2YWx1ZSddKTsK
LSAgICB9Ci0KLSAgICBpZiAoZmlsZXNUb0RyYWcpIHsKLSAgICAgICAgZXZlbnRTZW5kZXIuYmVn
aW5EcmFnV2l0aEZpbGVzKGZpbGVzVG9EcmFnKTsKLSAgICAgICAgbW92ZU1vdXNlVG9DZW50ZXJP
ZkVsZW1lbnQoZmlsZUlucHV0KTsKLSAgICAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOwotICAg
IH0KLQotICAgIHZhciBmaWxlcyA9IGZpbGVJbnB1dC5maWxlczsKLSAgICB2YXIgZm9ybURhdGFM
aXN0ID0gW107Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhTGlzdC5sZW5ndGg7IGkrKykg
ewotICAgICAgICBpZiAoZGF0YUxpc3RbaV1bJ3R5cGUnXSA9PSAnZmlsZScpIHsKLSAgICAgICAg
ICAgIHZhciBmaWxlTmFtZSA9IGdldEZpbGVOYW1lKGRhdGFMaXN0W2ldWyd2YWx1ZSddKTsKLSAg
ICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZmlsZXMubGVuZ3RoOyBqKyspIHsKLSAgICAg
ICAgICAgICAgICBpZiAoZmlsZU5hbWUgPT0gZmlsZXNbal0ubmFtZSkgewotICAgICAgICAgICAg
ICAgICAgICBmb3JtRGF0YUxpc3QucHVzaCh7J25hbWUnOiBkYXRhTGlzdFtpXVsnbmFtZSddLCAn
dmFsdWUnOiBmaWxlc1tqXX0pOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBm
b3JtRGF0YUxpc3QucHVzaCh7J25hbWUnOiBkYXRhTGlzdFtpXVsnbmFtZSddLCAndmFsdWUnOiBk
YXRhTGlzdFtpXVsndmFsdWUnXX0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc2VuZEZvcm1E
YXRhKGZvcm1EYXRhTGlzdCk7Ci19Ci0KIGZ1bmN0aW9uIHJ1blRlc3QoKQogewogICAgIGRlYnVn
KCJTZW5kaW5nIEZvcm1EYXRhIGNvbnRhaW5pbmcgb25lIHN0cmluZyB3aXRoIGVtcHR5IG5hbWU6
Iik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1k
YXRhLXdpdGgtc2xpY2VkLWZpbGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9sb2NhbC9zZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNlZC1maWxlLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2E1MGE0Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNl
ZC1maWxlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACitUZXN0IGZvciBzZW5kaW5nIEZv
cm1EYXRhIHdpdGggc2xpY2VkIGZpbGVzIHZpYSBYTUxIdHRwUmVxdWVzdC4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1NlbmRpbmcgRm9ybURhdGEgY29udGFpbmluZyBvbmUgc2xp
Y2VkIGZpbGUgd2l0aCBlbXB0eSBuYW1lOgorCitTZW5kaW5nIEZvcm1EYXRhIGNvbnRhaW5pbmcg
b25lIHNsaWNlZCBmaWxlOgorZmlsZT1CbG9iOjIzNDU2CitTZW5kaW5nIEZvcm1EYXRhIGNvbnRh
aW5pbmcgb25lIHN0cmluZyBhbmQgb25lIHNsaWNlZCBmaWxlOgorc3RyaW5nMT1mb28mZmlsZTE9
QmxvYjoyMzQ1NgorU2VuZGluZyBGb3JtRGF0YSBjb250YWluaW5nIHR3byBzdHJpbmdzIGFuZCB0
d28gc2xpY2VkIGZpbGVzOgorc3RyaW5nMT1mb28mc3RyaW5nMj1iYXImZmlsZTE9QmxvYjoyMzQ1
NiZmaWxlMj1CbG9iOjQ1CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5k
LWZvcm0tZGF0YS13aXRoLXNsaWNlZC1maWxlLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2xvY2FsL3NlbmQtZm9ybS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzE0OWEwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNlZC1maWxlLmh0
bWwKQEAgLTAsMCArMSwxNCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQg
SFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Li4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2VuZC1mb3JtLWRhdGEtY29tbW9u
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2VuZC1mb3JtLWRhdGEtd2l0
aC1zbGljZWQtZmlsZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEu
aHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEuaHRtbApp
bmRleCAxOGM3MGIxLi43YTJiMzE3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2xvY2FsL3NlbmQtZm9ybS1kYXRhLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9s
b2NhbC9zZW5kLWZvcm0tZGF0YS5odG1sCkBAIC03LDYgKzcsNyBAQAogPGJvZHk+CiA8cCBpZD0i
ZGVzY3JpcHRpb24iPjwvcD4KIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy9zZW5kLWZvcm0tZGF0YS1jb21tb24uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBz
cmM9InJlc291cmNlcy9zZW5kLWZvcm0tZGF0YS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KIDwv
Ym9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggNjc4MjlkYy4uMGFlMTQyMCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTM0MjIsNiArMzQyMiw3IEBAIGh0dHAvdGVzdHMv
bG9hZGluZy90ZXh0LWNvbnRlbnQtdHlwZS13aXRoLWJpbmFyeS1leHRlbnNpb24uaHRtbAogaHR0
cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5odG1sCiBodHRwL3Rlc3RzL2xvY2FsL3Nl
bmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5odG1sCiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1k
YXRhLmh0bWwKK2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQtZmls
ZS5odG1sCiBodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLXBsYXktc3RhbGwtc2Vlay5odG1sCiBodHRw
L3Rlc3RzL21lZGlhL3ZpZGVvLXBsYXktc3RhbGwuaHRtbAogaHR0cC90ZXN0cy9tZWRpYS92aWRl
by1zZWVrYWJsZS1zdGFsbC5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9x
dC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAppbmRleCAyMTQ4Y2M3
Li43M2Q3NThmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKQEAgLTU0LDYgKzU0LDcgQEAgaHR0
cC90ZXN0cy9sb2NhbC9kcmFnLW92ZXItcmVtb3RlLWNvbnRlbnQuaHRtbAogaHR0cC90ZXN0cy9s
b2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5odG1sCiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2Vk
LWRyYWdnZWQtZmlsZS5odG1sCiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1kYXRhLmh0bWwK
K2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQtZmlsZS5odG1sCiAK
ICMgRmFpbGluZyBuYXZpZ2F0aW9uIHRlc3RzCiBodHRwL3Rlc3RzL25hdmlnYXRpb24vYW5jaG9y
LWZyYW1lcy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBl
ZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCmluZGV4IDFiMjY3MGYuLmU4NmFl
NmQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCisrKyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCkBAIC02NjYsNiArNjY2LDcgQEAgZmFzdC9m
b3Jtcy9pbnB1dC1zZWxlY3RlZG9wdGlvbi5odG1sCiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtZHJh
Z2dlZC1maWxlLmh0bWwKIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxl
Lmh0bWwKIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEuaHRtbAoraHR0cC90ZXN0cy9s
b2NhbC9zZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNlZC1maWxlLmh0bWwKIAogIyA8aHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5Mjg5PgogcGx1Z2lucy9kZXN0cm95LWR1
cmluZy1ucHAtbmV3Lmh0bWwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggOGNhNTE5OC4uZTE3ZDhmMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwzMSBAQAogMjAxMC0w
My0zMSAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydCB1c2luZyBGb3JtRGF0YSB0byBz
ZW5kIGEgc2xpY2VkIGZpbGUgdmlhIFhIUi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM2Njc4CisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9sb2Nh
bC9zZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNlZC1maWxlLmh0bWwKKworICAgICAgICAqIGh0bWwv
QmxvYi5oOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6aXNGaWxlKToKKyAgICAgICAgKiBodG1s
L0RPTUZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZvcm1EYXRhOjphcHBlbmQp
OgorICAgICAgICAqIGh0bWwvRmlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6aXNGaWxl
KToKKyAgICAgICAgKiBodG1sL0Zvcm1EYXRhTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGFMaXN0OjphcHBlbmRCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6
SXRlbTo6SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6Okl0ZW06OmJsb2Ip
OgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50OjphcHBlbmRGb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5k
RE9NRm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3Ry
ZWFtTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VDdXJyZW50U3RyZWFtKToKKworMjAx
MC0wMy0zMSAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgUmV2aWV3
ZWQgYnkgRG1pdHJ5IFRpdG92LgogCiAgICAgICAgIEFkZCBzdXBwb3J0IHRvIGNyZWF0ZSBVVUlE
IHN0cmluZy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iLmggYi9XZWJDb3JlL2h0bWwv
QmxvYi5oCmluZGV4IDYxMDg0MmUuLmU4YjVmM2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9C
bG9iLmgKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuaApAQCAtNTMsNiArNTMsOCBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIH5CbG9iKCkgeyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNGaWxlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogICAgIFBh
c3NSZWZQdHI8QmxvYj4gc2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSBj
b25zdDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0RPTUZvcm1EYXRhLmNwcCBi
L1dlYkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5jcHAKaW5kZXggMTQ0MWU4Yi4uZjg0ODg5OCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL0RPTUZvcm1EYXRhLmNwcAorKysgYi9XZWJDb3JlL2h0bWwv
RE9NRm9ybURhdGEuY3BwCkBAIC01MCwxMSArNTAsOCBAQCB2b2lkIERPTUZvcm1EYXRhOjphcHBl
bmQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogCiB2b2lkIERPTUZv
cm1EYXRhOjphcHBlbmQoY29uc3QgU3RyaW5nJiBuYW1lLCBCbG9iKiBibG9iKQogewotICAgIC8v
IEZJWE1FOiBOZWVkIHRvIHN1cHBvcnQgc2xpY2VkIGZpbGUgd2hlbiBCbG9iLnNsaWNlIHN1cHBv
cnQgaXMgbGFuZGVkLgotICAgIGlmICghbmFtZS5pc0VtcHR5KCkgJiYgIWJsb2ItPnBhdGgoKS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgUmVmUHRyPEZpbGU+IGZpbGUgPSBzdGF0aWNfY2FzdDxGaWxl
Kj4oYmxvYik7Ci0gICAgICAgIGFwcGVuZEZpbGUobmFtZSwgZmlsZS5yZWxlYXNlKCkpOwotICAg
IH0KKyAgICBpZiAoIW5hbWUuaXNFbXB0eSgpKQorICAgICAgICBhcHBlbmRCbG9iKG5hbWUsIGJs
b2IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvRmlsZS5oIGIvV2ViQ29yZS9odG1sL0ZpbGUuaAppbmRleCBkZGE0ODJhLi4wNjVkZDg2IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZS5oCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlLmgK
QEAgLTM5LDYgKzM5LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZp
bGUocGF0aCkpOwogICAgIH0KIAorICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CisKICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBt
X25hbWU7IH0KICAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oIGIvV2ViQ29yZS9o
dG1sL0Zvcm1EYXRhTGlzdC5oCmluZGV4IGVjZjQ0NzguLjRiZjhjYWYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaAorKysgYi9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0
LmgKQEAgLTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgRm9ybURhdGFMaXN0X2gKICNkZWZpbmUgRm9y
bURhdGFMaXN0X2gKIAotI2luY2x1ZGUgIkZpbGUuaCIKKyNpbmNsdWRlICJCbG9iLmgiCiAjaW5j
bHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBA
IC0zNywyMSArMzcsMjEgQEAgcHVibGljOgogICAgICAgICB7IGFwcGVuZFN0cmluZyhrZXkpOyBh
cHBlbmRTdHJpbmcodmFsdWUpOyB9CiAgICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IFN0cmluZyYg
a2V5LCBpbnQgdmFsdWUpCiAgICAgICAgIHsgYXBwZW5kU3RyaW5nKGtleSk7IGFwcGVuZFN0cmlu
ZyhTdHJpbmc6Om51bWJlcih2YWx1ZSkpOyB9Ci0gICAgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFN0
cmluZyYga2V5LCBQYXNzUmVmUHRyPEZpbGU+IGZpbGUpCi0gICAgICAgIHsgYXBwZW5kU3RyaW5n
KGtleSk7IG1fbGlzdC5hcHBlbmQoZmlsZSk7IH0KKyAgICB2b2lkIGFwcGVuZEJsb2IoY29uc3Qg
U3RyaW5nJiBrZXksIFBhc3NSZWZQdHI8QmxvYj4gYmxvYikKKyAgICAgICAgeyBhcHBlbmRTdHJp
bmcoa2V5KTsgbV9saXN0LmFwcGVuZChibG9iKTsgfQogCiAgICAgY2xhc3MgSXRlbSB7CiAgICAg
cHVibGljOgogICAgICAgICBJdGVtKCkgeyB9CiAgICAgICAgIEl0ZW0oY29uc3QgV1RGOjpDU3Ry
aW5nJiBkYXRhKSA6IG1fZGF0YShkYXRhKSB7IH0KLSAgICAgICAgSXRlbShQYXNzUmVmUHRyPEZp
bGU+IGZpbGUpIDogbV9maWxlKGZpbGUpIHsgfQorICAgICAgICBJdGVtKFBhc3NSZWZQdHI8Qmxv
Yj4gYmxvYikgOiBtX2Jsb2IoYmxvYikgeyB9CiAKICAgICAgICAgY29uc3QgV1RGOjpDU3RyaW5n
JiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgICAgIEZpbGUqIGZpbGUoKSBj
b25zdCB7IHJldHVybiBtX2ZpbGUuZ2V0KCk7IH0KKyAgICAgICAgQmxvYiogYmxvYigpIGNvbnN0
IHsgcmV0dXJuIG1fYmxvYi5nZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgV1RGOjpD
U3RyaW5nIG1fZGF0YTsKLSAgICAgICAgUmVmUHRyPEZpbGU+IG1fZmlsZTsKKyAgICAgICAgUmVm
UHRyPEJsb2I+IG1fYmxvYjsKICAgICB9OwogCiAgICAgY29uc3QgVmVjdG9yPEl0ZW0+JiBsaXN0
KCkgY29uc3QgeyByZXR1cm4gbV9saXN0OyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5k
ZXggNmEyMTRhYi4uMzFkYWMzZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtMTM1
OSwxMiArMTM1OSwxMiBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEZv
cm1EYXRhTGlzdCYgZW5jb2RpbmcsIGJvb2wgbXVsdGlwYXJ0KQogICAgICAgICAgICAgLy8gSWYg
bm8gZmlsZW5hbWUgYXQgYWxsIGlzIGVudGVyZWQsIHJldHVybiBzdWNjZXNzZnVsIGJ1dCBlbXB0
eS4KICAgICAgICAgICAgIC8vIE51bGwgd291bGQgYmUgbW9yZSBsb2dpY2FsLCBidXQgTmV0c2Nh
cGUgcG9zdHMgYW4gZW1wdHkgZmlsZS4gQXJnaC4KICAgICAgICAgICAgIGlmICghbnVtRmlsZXMp
IHsKLSAgICAgICAgICAgICAgICBlbmNvZGluZy5hcHBlbmRGaWxlKG5hbWUoKSwgRmlsZTo6Y3Jl
YXRlKCIiKSk7CisgICAgICAgICAgICAgICAgZW5jb2RpbmcuYXBwZW5kQmxvYihuYW1lKCksIEZp
bGU6OmNyZWF0ZSgiIikpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRmlsZXM7ICsr
aSkKLSAgICAgICAgICAgICAgICBlbmNvZGluZy5hcHBlbmRGaWxlKG5hbWUoKSwgbV9maWxlTGlz
dC0+aXRlbShpKSk7CisgICAgICAgICAgICAgICAgZW5jb2RpbmcuYXBwZW5kQmxvYihuYW1lKCks
IG1fZmlsZUxpc3QtPml0ZW0oaSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAppbmRleCA2YTQ4NzM2
Li4wOGYwZjJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEu
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKQEAgLTI2LDEx
ICsyNiwxMyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRPTUZvcm1E
YXRhLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVk
ZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkZvcm1EYXRhQnVpbGRlci5oIgogI2luY2x1ZGUg
Ik1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiVGV4dEVu
Y29kaW5nLmgiCisjaW5jbHVkZSAiVVVJRC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTE4Niw5ICsxODgsMjAgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRE9NRm9ybURhdGEoY29uc3Qg
RE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXIKIAogICAgICAgICAgICAg
Ym9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZTsKICAgICAgICAgICAgIC8vIElmIHRoZSBj
dXJyZW50IHR5cGUgaXMgRklMRSwgdGhlbiB3ZSBhbHNvIG5lZWQgdG8gaW5jbHVkZSB0aGUgZmls
ZW5hbWUKLSAgICAgICAgICAgIGlmICh2YWx1ZS5maWxlKCkpIHsKLSAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIHBhdGggPSB2YWx1ZS5maWxlKCktPnBhdGgoKTsKLSAgICAgICAgICAgICAg
ICBTdHJpbmcgZmlsZU5hbWUgPSB2YWx1ZS5maWxlKCktPmZpbGVOYW1lKCk7CisgICAgICAgICAg
ICBpZiAodmFsdWUuYmxvYigpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRo
ID0gdmFsdWUuYmxvYigpLT5wYXRoKCk7CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgICAg
ICAgICAgICAgU3RyaW5nIGZpbGVOYW1lOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9i
KCktPmlzRmlsZSgpKQorICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHN0YXRpY19jYXN0
PEZpbGUqPih2YWx1ZS5ibG9iKCkpLT5maWxlTmFtZSgpOworICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIGJsb2IgaXMgc2xpY2VkIGZyb20gYSBmaWxl
LCBpdCBkb2VzIG5vdCBoYXZlIHRoZSBmaWxlbmFtZS4gSW4gdGhpcyBjYXNlLCBsZXQncyBwcm9k
dWNlIGEgdW5pcXVlIGZpbGVuYW1lLgorICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9ICJC
bG9iIiArIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAg
ZmlsZU5hbWUucmVwbGFjZSgiLSIsICIiKTsgLy8gRm9yIHNhZmUsIHJlbW92ZSAnLScgaW4gY2Fz
ZSB0aGF0IGNlcnRhaW4gc2VydmVyIGRvZXMgbm90IGxpa2UgaXQgdG8gYmUgaW4gdGhlIGZpbGVu
YW1lLgorICAgICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICAgICAgU3RyaW5nIGZp
bGVOYW1lID0gc3RhdGljX2Nhc3Q8RmlsZSo+KHZhbHVlLmJsb2IoKSktPmZpbGVOYW1lKCk7Cisj
ZW5kaWYKIAogICAgICAgICAgICAgICAgIC8vIExldCB0aGUgYXBwbGljYXRpb24gc3BlY2lmeSBh
IGZpbGVuYW1lIGlmIGl0J3MgZ29pbmcgdG8gZ2VuZXJhdGUgYSByZXBsYWNlbWVudCBmaWxlIGZv
ciB0aGUgdXBsb2FkLgogICAgICAgICAgICAgICAgIGlmICghcGF0aC5pc0VtcHR5KCkpIHsKQEAg
LTIwMyw3ICsyMTYsMTIgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRE9NRm9ybURhdGEoY29uc3Qg
RE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXIKICAgICAgICAgICAgICAg
ICAvLyBXZSBoYXZlIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lPSIuLiIgcGFydCBpbiB0aGUgaGVh
ZGVyLCBldmVuIGlmIHRoZSBmaWxlbmFtZSBpcyBlbXB0eQogICAgICAgICAgICAgICAgIGZvcm1E
YXRhQnVpbGRlci5hZGRGaWxlbmFtZVRvTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgZW5jb2Rpbmcs
IGZpbGVOYW1lKTsKIAorICAgICAgICAgICAgICAgIC8vIElmIGEgYmxvYiBpcyBzbGljZWQgZnJv
bSBhIGZpbGUsIGRvIG5vdCBhZGQgdGhlIGNvbnRlbnQgdHlwZS4gCisjaWYgRU5BQkxFKEJMT0Jf
U0xJQ0UpCisgICAgICAgICAgICAgICAgaWYgKCFmaWxlTmFtZS5pc0VtcHR5KCkgJiYgdmFsdWUu
YmxvYigpLT5pc0ZpbGUoKSkgeworI2Vsc2UKICAgICAgICAgICAgICAgICBpZiAoIWZpbGVOYW1l
LmlzRW1wdHkoKSkgeworI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUg
TUlNRVR5cGVSZWdpc3RyeSBmdW5jdGlvbidzIG5hbWUgbWFrZXMgaXQgc291bmQgbGlrZSBpdCB0
YWtlcyBhIHBhdGgsCiAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBqdXN0IGEgYmFzZW5hbWUu
IEJ1dCBmaWxlbmFtZSBpcyBub3QgdGhlIHBhdGguIEJ1dCBub3RlIHRoYXQgaXQncyBub3Qgc2Fm
ZSB0bwogICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IHVzZSBwYXRoIGluc3RlYWQgc2luY2Ug
aW4gdGhlIGdlbmVyYXRlZC1maWxlIGNhc2UgaXQgd2lsbCBub3QgcmVmbGVjdCB0aGUKQEAgLTIy
MCw4ICsyMzgsMTIgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9N
Rm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXIKICAgICAgICAgICAgIGFwcGVu
ZERhdGEoaGVhZGVyLmRhdGEoKSwgaGVhZGVyLnNpemUoKSk7CiAgICAgICAgICAgICBpZiAoc2l6
ZV90IGRhdGFTaXplID0gdmFsdWUuZGF0YSgpLmxlbmd0aCgpKQogICAgICAgICAgICAgICAgIGFw
cGVuZERhdGEodmFsdWUuZGF0YSgpLmRhdGEoKSwgZGF0YVNpemUpOwotICAgICAgICAgICAgZWxz
ZSBpZiAodmFsdWUuZmlsZSgpICYmICF2YWx1ZS5maWxlKCktPnBhdGgoKS5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgYXBwZW5kRmlsZSh2YWx1ZS5maWxlKCktPnBhdGgoKSwgc2hvdWxkR2Vu
ZXJhdGVGaWxlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmJsb2IoKSAmJiAhdmFsdWUu
YmxvYigpLT5wYXRoKCkuaXNFbXB0eSgpKQorI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgICAg
ICAgICAgICAgIGFwcGVuZEZpbGVSYW5nZSh2YWx1ZS5ibG9iKCktPnBhdGgoKSwgdmFsdWUuYmxv
YigpLT5zdGFydCgpLCB2YWx1ZS5ibG9iKCktPmxlbmd0aCgpLCB2YWx1ZS5ibG9iKCktPm1vZGlm
aWNhdGlvblRpbWUoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKKyNlbHNlCisgICAgICAgICAgICAg
ICAgYXBwZW5kRmlsZSh2YWx1ZS5ibG9iKCktPnBhdGgoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsK
KyNlbmRpZgogCiAgICAgICAgICAgICBhcHBlbmREYXRhKCJcclxuIiwgMik7CiAgICAgICAgIH0g
ZWxzZSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRh
U3RyZWFtTWFjLm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVh
bU1hYy5tbQppbmRleCA2ODUzZDZlLi4yN2VjZmQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KQEAgLTE0MSw2ICsxNDEsOSBAQCBz
dGF0aWMgdm9pZCBjbG9zZUN1cnJlbnRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyAqZm9ybSkKICAg
ICAgICAgQ0ZSZWFkU3RyZWFtU2V0Q2xpZW50KGZvcm0tPmN1cnJlbnRTdHJlYW0sIGtDRlN0cmVh
bUV2ZW50Tm9uZSwgTlVMTCwgTlVMTCk7CiAgICAgICAgIENGUmVsZWFzZShmb3JtLT5jdXJyZW50
U3RyZWFtKTsKICAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbSA9IE5VTEw7CisjaWYgRU5BQkxF
KEJMT0JfU0xJQ0UpCisgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IEJs
b2I6OnRvRW5kT2ZGaWxlOworI2VuZGlmCiAgICAgfQogICAgIGlmIChmb3JtLT5jdXJyZW50RGF0
YSkgewogICAgICAgICBmYXN0RnJlZShmb3JtLT5jdXJyZW50RGF0YSk7Cg==
</data>
<flag name="review"
          id="35627"
          type_id="1"
          status="-"
          setter="dimich"
    />
    <flag name="commit-queue"
          id="35628"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53347</attachid>
            <date>2010-04-14 11:27:59 -0700</date>
            <delta_ts>2010-04-15 13:46:19 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>36678</filename>
            <type>text/plain</type>
            <size>29484</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxYTk4NDM4Li5hZjc3MDQ2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTAtMDQt
MTQgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgdXNpbmcgRm9ybURhdGEgdG8gc2Vu
ZCBhIHNsaWNlZCBmaWxlIHZpYSBYSFIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zNjY3OAorCisgICAgICAgIE1vdmUgY29tbW9uIGZ1bmN0aW9uYWxp
dGllcyB0byB0ZXN0IHNlbmRpbmcgRm9ybURhdGEgaW50byBhIGhlbHBlciBmaWxlCisgICAgICAg
IHNvIHRoYXQgaXQgY2FuIGJlIHNoYXJlZCBieSBGb3JtRGF0YSBsYXlvdXQgdGVzdHMuIAorICAg
ICAgICBBbHNvIG1vdmUgdGhlIGZvcm0gZGF0YSB0ZXN0aW5nIGZpbGVzIHRvIGEgbmV3IHN1YmRp
cmVjdG9yeSBmb3JtZGF0YS8uCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL2Zvcm1kYXRh
L3Jlc291cmNlcy9zZW5kLWZvcm0tZGF0YS1jb21tb24uanM6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvbG9jYWwvZm9ybWRhdGEvc2NyaXB0LXRlc3RzL1RFTVBMQVRFLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvZm9ybWRhdGEvc2NyaXB0LXRlc3RzL3NlbmQt
Zm9ybS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUuanM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvbG9jYWwvZm9ybWRhdGEvc2NyaXB0LXRlc3RzL3NlbmQtZm9ybS1kYXRhLmpzOiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL2Zvcm1kYXRhL3NlbmQtZm9ybS1kYXRhLWV4cGVj
dGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1m
b3JtLWRhdGEtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvZm9ybWRh
dGEvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQtZmlsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvZm9ybWRhdGEvc2VuZC1mb3JtLWRhdGEtd2l0aC1z
bGljZWQtZmlsZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL2Zvcm1k
YXRhL3NlbmQtZm9ybS1kYXRhLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9j
YWwvcmVzb3VyY2VzL3NlbmQtZm9ybS1kYXRhLmpzOiBSZW1vdmVkLgorICAgICAgICAqIGh0dHAv
dGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEuaHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOgorICAgICAg
ICAqIHBsYXRmb3JtL3dpbi9Ta2lwcGVkOgorCiAyMDEwLTA0LTA5ICBEdW1pdHJ1IERhbmlsaXVj
ICA8ZHVtaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgc2tpcHBpbmcgYSB0
ZXN0IG9uIExpbnV4IGluIENocm9taXVtLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9sb2NhbC9mb3JtZGF0YS9yZXNvdXJjZXMvc2VuZC1mb3JtLWRhdGEtY29tbW9uLmpzIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9mb3JtZGF0YS9yZXNvdXJjZXMvc2VuZC1mb3Jt
LWRhdGEtY29tbW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2Njc3
MWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL2Zvcm1k
YXRhL3Jlc291cmNlcy9zZW5kLWZvcm0tZGF0YS1jb21tb24uanMKQEAgLTAsMCArMSw3OCBAQAor
dmFyIGZpbGVJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CitmaWxlSW5w
dXQudHlwZSA9ICdmaWxlJzsKK2ZpbGVJbnB1dC5zdHlsZS53aWR0aCA9ICIxMDAlIjsgLy8gU28g
dGhhdCBhbnkgbWFudWFsIHRlc3Rpbmcgd2lsbCBzaG93IGZ1bGwgZmlsZSBuYW1lcworLy8gSW1w
b3J0YW50IHRoYXQgd2UgcHV0IHRoaXMgYXQgdGhlIHRvcCBvZiB0aGUgZG9jIHNvIHRoYXQgbG9n
Z2luZyBkb2VzIG5vdCBjYXVzZSBpdCB0byBnbyBvdXQgb2YgdmlldyAod2hlcmUgaXQgY2FuJ3Qg
YmUgZHJhZ2dlZCB0bykKK2RvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGZpbGVJbnB1dCwgZG9j
dW1lbnQuYm9keS5maXJzdENoaWxkKTsKKworZnVuY3Rpb24gbW92ZU1vdXNlVG9DZW50ZXJPZkVs
ZW1lbnQoZWxlbWVudCkKK3sKKyAgICB2YXIgY2VudGVyWCA9IGVsZW1lbnQub2Zmc2V0TGVmdCAr
IGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOworICAgIHZhciBjZW50ZXJZID0gZWxlbWVudC5vZmZz
ZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7CisgICAgZXZlbnRTZW5kZXIubW91c2VN
b3ZlVG8oY2VudGVyWCwgY2VudGVyWSk7Cit9CisKK2Z1bmN0aW9uIGdldEZpbGVOYW1lKGZpbGVQ
YXRoKQoreworICAgIHZhciBpbmRleCA9IGZpbGVQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisgICAg
aWYgKGluZGV4ID09IC0xKQorICAgICAgICByZXR1cm4gZmlsZVBhdGg7CisgICAgcmV0dXJuIGZp
bGVQYXRoLnN1YnN0cihpbmRleCArIDEpOworfQorCitmdW5jdGlvbiBzZW5kRm9ybURhdGEoZm9y
bURhdGFMaXN0LCBmaWxlU2xpY2VkKQoreworICAgIHZhciBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0
YSgpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9ybURhdGFMaXN0Lmxlbmd0aDsgaSsrKQor
ICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZm9ybURhdGFMaXN0W2ldWyduYW1lJ10sIGZvcm1EYXRh
TGlzdFtpXVsndmFsdWUnXSk7CisKKyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7
CisgICAgeGhyLm9wZW4oIlBPU1QiLCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1
ZXN0L3Jlc291cmNlcy9tdWx0aXBhcnQtcG9zdC1lY2hvLnBocCIsIGZhbHNlKTsKKyAgICB4aHIu
c2VuZChmb3JtRGF0YSk7CisgICAgdmFyIHJlc3BvbnNlVGV4dCA9IHhoci5yZXNwb25zZVRleHQ7
CisKKyAgICAvLyBJZiB3ZSdyZSBzZW5kaW5nIGEgc2xpY2VkIGZpbGUgYW1vbmcgdGhlIEZvcm1E
YXRhLCBhIHVuaXF1ZWx5IGdlbmVyYXRlZCBuYW1lIHByZWZpeGVkIHdpdGggIkJsb2IiIGlzIHVz
ZWQuCisgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgdGhlIHJhbmRvbSBwYXJ0IGluIHRoZSBmaWxl
bmFtZSBzbyB0aGF0IHdlIGdldCBjb25zaXN0ZW50IHJlc3VsdC4KKyAgICBpZiAoZmlsZVNsaWNl
ZCkKKyAgICAgICAgcmVzcG9uc2VUZXh0ID0gcmVzcG9uc2VUZXh0LnJlcGxhY2UoL0Jsb2Jcd3sz
Mn0vZywgIkJsb2IiKTsKKworICAgIGRlYnVnKHJlc3BvbnNlVGV4dCk7Cit9CisKK2Z1bmN0aW9u
IHRlc3RTZW5kaW5nRm9ybURhdGEoZGF0YUxpc3QpCit7CisgICAgdmFyIGZpbGVzVG9EcmFnID0g
W107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhTGlzdC5sZW5ndGg7IGkrKykgeworICAg
ICAgICBpZiAoZGF0YUxpc3RbaV1bJ3R5cGUnXSA9PSAnZmlsZScpCisgICAgICAgICAgICBmaWxl
c1RvRHJhZy5wdXNoKGRhdGFMaXN0W2ldWyd2YWx1ZSddKTsKKyAgICB9CisKKyAgICBpZiAoZmls
ZXNUb0RyYWcpIHsKKyAgICAgICAgZXZlbnRTZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzKGZpbGVz
VG9EcmFnKTsKKyAgICAgICAgbW92ZU1vdXNlVG9DZW50ZXJPZkVsZW1lbnQoZmlsZUlucHV0KTsK
KyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworICAgIH0KKworICAgIHZhciBmaWxlcyA9
IGZpbGVJbnB1dC5maWxlczsKKyAgICB2YXIgZm9ybURhdGFMaXN0ID0gW107CisgICAgdmFyIGZp
bGVTbGljZWQgPSBmYWxzZTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFMaXN0Lmxlbmd0
aDsgaSsrKSB7CisgICAgICAgIGlmIChkYXRhTGlzdFtpXVsndHlwZSddID09ICdmaWxlJykgewor
ICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gZ2V0RmlsZU5hbWUoZGF0YUxpc3RbaV1bJ3ZhbHVl
J10pOworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmaWxlcy5sZW5ndGg7IGorKykg
eworICAgICAgICAgICAgICAgIGlmIChmaWxlTmFtZSA9PSBmaWxlc1tqXS5uYW1lKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBmaWxlID0gZmlsZXNbal07CisgICAgICAgICAgICAgICAgICAg
IGlmIChkYXRhTGlzdFtpXVsnc3RhcnQnXSAmJiBkYXRhTGlzdFtpXVsnbGVuZ3RoJ10pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZpbGVTbGljZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgZmlsZSA9IGZpbGUuc2xpY2UoZGF0YUxpc3RbaV1bJ3N0YXJ0J10sIGRhdGFMaXN0
W2ldWydsZW5ndGgnXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZm9ybURhdGFMaXN0LnB1c2goeyduYW1lJzogZGF0YUxpc3RbaV1bJ25hbWUnXSwgJ3ZhbHVl
JzogZmlsZX0pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3JtRGF0YUxp
c3QucHVzaCh7J25hbWUnOiBkYXRhTGlzdFtpXVsnbmFtZSddLCAndmFsdWUnOiBkYXRhTGlzdFtp
XVsndmFsdWUnXX0pOworICAgICAgICB9CisgICAgfQorCisgICAgc2VuZEZvcm1EYXRhKGZvcm1E
YXRhTGlzdCwgZmlsZVNsaWNlZCk7Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2xvY2FsL2Zvcm1kYXRhL3NjcmlwdC10ZXN0cy9URU1QTEFURS5odG1sIGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9sb2NhbC9mb3JtZGF0YS9zY3JpcHQtdGVzdHMvVEVNUExBVEUuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGIwNWFhCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9mb3JtZGF0YS9zY3JpcHQtdGVzdHMv
VEVNUExBVEUuaHRtbApAQCAtMCwwICsxLDE0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNz
cyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwv
cD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zZW5k
LWZvcm0tZGF0YS1jb21tb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IllPVVJfSlNfRklM
RV9IRVJFIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9mb3JtZGF0YS9zY3JpcHQtdGVzdHMv
c2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQtZmlsZS5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvbG9jYWwvZm9ybWRhdGEvc2NyaXB0LXRlc3RzL3NlbmQtZm9ybS1kYXRhLXdpdGgtc2xpY2Vk
LWZpbGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg4MmYzYQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvZm9ybWRhdGEvc2Ny
aXB0LXRlc3RzL3NlbmQtZm9ybS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUuanMKQEAgLTAsMCArMSwz
OCBAQAorZGVzY3JpcHRpb24oIlRlc3QgZm9yIHNlbmRpbmcgRm9ybURhdGEgd2l0aCBzbGljZWQg
ZmlsZXMgdmlhIFhNTEh0dHBSZXF1ZXN0LiIpOworCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAg
ICBkZWJ1ZygiU2VuZGluZyBGb3JtRGF0YSBjb250YWluaW5nIG9uZSBzbGljZWQgZmlsZSB3aXRo
IGVtcHR5IG5hbWU6Iik7CisgICAgdGVzdFNlbmRpbmdGb3JtRGF0YShbCisgICAgICAgIHsgJ3R5
cGUnOiAnZmlsZScsICduYW1lJzogJycsICd2YWx1ZSc6ICcuLi9yZXNvdXJjZXMvZmlsZS1mb3It
ZHJhZy10by1zZW5kLnR4dCcgfQorICAgIF0pOworCisgICAgZGVidWcoIlNlbmRpbmcgRm9ybURh
dGEgY29udGFpbmluZyBvbmUgc2xpY2VkIGZpbGU6Iik7CisgICAgdGVzdFNlbmRpbmdGb3JtRGF0
YShbCisgICAgICAgIHsgJ3R5cGUnOiAnZmlsZScsICduYW1lJzogJ2ZpbGUnLCAndmFsdWUnOiAn
Li4vcmVzb3VyY2VzL2ZpbGUtZm9yLWRyYWctdG8tc2VuZC50eHQnLCAnc3RhcnQnIDogMSwgJ2xl
bmd0aCcgOiA1IH0KKyAgICBdKTsKKworICAgIGRlYnVnKCJTZW5kaW5nIEZvcm1EYXRhIGNvbnRh
aW5pbmcgb25lIHN0cmluZyBhbmQgb25lIHNsaWNlZCBmaWxlOiIpOworICAgIHRlc3RTZW5kaW5n
Rm9ybURhdGEoWworICAgICAgICB7ICd0eXBlJzogJ3N0cmluZycsICduYW1lJzogJ3N0cmluZzEn
LCAndmFsdWUnOiAnZm9vJyB9LAorICAgICAgICB7ICd0eXBlJzogJ2ZpbGUnLCAnbmFtZSc6ICdm
aWxlMScsICd2YWx1ZSc6ICcuLi9yZXNvdXJjZXMvZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dCcs
ICdzdGFydCcgOiAxLCAnbGVuZ3RoJyA6IDUgfQorICAgIF0pOworCisgICAgZGVidWcoIlNlbmRp
bmcgRm9ybURhdGEgY29udGFpbmluZyB0d28gc3RyaW5ncyBhbmQgdHdvIHNsaWNlZCBmaWxlczoi
KTsKKyAgICB0ZXN0U2VuZGluZ0Zvcm1EYXRhKFsKKyAgICAgICAgeyAndHlwZSc6ICdzdHJpbmcn
LCAnbmFtZSc6ICdzdHJpbmcxJywgJ3ZhbHVlJzogJ2ZvbycgfSwKKyAgICAgICAgeyAndHlwZSc6
ICdmaWxlJywgJ25hbWUnOiAnZmlsZTEnLCAndmFsdWUnOiAnLi4vcmVzb3VyY2VzL2ZpbGUtZm9y
LWRyYWctdG8tc2VuZC50eHQnLCAnc3RhcnQnIDogMSwgJ2xlbmd0aCcgOiA1IH0sCisgICAgICAg
IHsgJ3R5cGUnOiAnc3RyaW5nJywgJ25hbWUnOiAnc3RyaW5nMicsICd2YWx1ZSc6ICdiYXInIH0s
CisgICAgICAgIHsgJ3R5cGUnOiAnZmlsZScsICduYW1lJzogJ2ZpbGUyJywgJ3ZhbHVlJzogJy4u
L3Jlc291cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0JywgJ3N0YXJ0JyA6IDMsICdsZW5n
dGgnIDogMiB9CisgICAgXSk7Cit9CisKK2lmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICBy
dW5UZXN0KCk7CisgICAgLy8gQ2xlYW4gdXAgYWZ0ZXIgb3Vyc2VsdmVzCisgICAgZmlsZUlucHV0
LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZmlsZUlucHV0KTsKK30gZWxzZSB7CisgICAgdGVzdEZh
aWxlZCgiVGhpcyB0ZXN0IGlzIG5vdCBpbnRlcmFjdGl2ZSwgcGxlYXNlIHJ1biB1c2luZyBEdW1w
UmVuZGVyVHJlZSIpOworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvZm9ybWRhdGEvc2NyaXB0LXRlc3Rz
L3NlbmQtZm9ybS1kYXRhLmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9mb3JtZGF0
YS9zY3JpcHQtdGVzdHMvc2VuZC1mb3JtLWRhdGEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZDhkMjVlMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvbG9jYWwvZm9ybWRhdGEvc2NyaXB0LXRlc3RzL3NlbmQtZm9ybS1kYXRhLmpzCkBAIC0w
LDAgKzEsNDggQEAKK2Rlc2NyaXB0aW9uKCJUZXN0IGZvciBzZW5kaW5nIEZvcm1EYXRhIHZpYSBY
TUxIdHRwUmVxdWVzdC4iKTsKKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgZGVidWcoIlNl
bmRpbmcgRm9ybURhdGEgY29udGFpbmluZyBvbmUgc3RyaW5nIHdpdGggZW1wdHkgbmFtZToiKTsK
KyAgICB0ZXN0U2VuZGluZ0Zvcm1EYXRhKFsKKyAgICAgICAgeyAndHlwZSc6ICdzdHJpbmcnLCAn
bmFtZSc6ICcnLCAndmFsdWUnOiAnZm9vJyB9CisgICAgXSk7CisKKyAgICBkZWJ1ZygiU2VuZGlu
ZyBGb3JtRGF0YSBjb250YWluaW5nIG9uZSBmaWxlIHdpdGggZW1wdHkgbmFtZToiKTsKKyAgICB0
ZXN0U2VuZGluZ0Zvcm1EYXRhKFsKKyAgICAgICAgeyAndHlwZSc6ICdmaWxlJywgJ25hbWUnOiAn
JywgJ3ZhbHVlJzogJy4uL3Jlc291cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0JyB9Cisg
ICAgXSk7CisKKyAgICBkZWJ1ZygiU2VuZGluZyBGb3JtRGF0YSBjb250YWluaW5nIG9uZSBzdHJp
bmc6Iik7CisgICAgdGVzdFNlbmRpbmdGb3JtRGF0YShbCisgICAgICAgIHsgJ3R5cGUnOiAnc3Ry
aW5nJywgJ25hbWUnOiAnc3RyaW5nJywgJ3ZhbHVlJzogJ2ZvbycgfQorICAgIF0pOworCisgICAg
ZGVidWcoIlNlbmRpbmcgRm9ybURhdGEgY29udGFpbmluZyBvbmUgZmlsZToiKTsKKyAgICB0ZXN0
U2VuZGluZ0Zvcm1EYXRhKFsKKyAgICAgICAgeyAndHlwZSc6ICdmaWxlJywgJ25hbWUnOiAnZmls
ZScsICd2YWx1ZSc6ICcuLi9yZXNvdXJjZXMvZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dCcgfQor
ICAgIF0pOworCisgICAgZGVidWcoIlNlbmRpbmcgRm9ybURhdGEgY29udGFpbmluZyBvbmUgc3Ry
aW5nIGFuZCBvbmUgZmlsZToiKTsKKyAgICB0ZXN0U2VuZGluZ0Zvcm1EYXRhKFsKKyAgICAgICAg
eyAndHlwZSc6ICdzdHJpbmcnLCAnbmFtZSc6ICdzdHJpbmcxJywgJ3ZhbHVlJzogJ2ZvbycgfSwK
KyAgICAgICAgeyAndHlwZSc6ICdmaWxlJywgJ25hbWUnOiAnZmlsZTEnLCAndmFsdWUnOiAnLi4v
cmVzb3VyY2VzL2ZpbGUtZm9yLWRyYWctdG8tc2VuZC50eHQnIH0KKyAgICBdKTsKKworICAgIGRl
YnVnKCJTZW5kaW5nIEZvcm1EYXRhIGNvbnRhaW5pbmcgdHdvIHN0cmluZ3MgYW5kIHR3byBmaWxl
czoiKTsKKyAgICB0ZXN0U2VuZGluZ0Zvcm1EYXRhKFsKKyAgICAgICAgeyAndHlwZSc6ICdzdHJp
bmcnLCAnbmFtZSc6ICdzdHJpbmcxJywgJ3ZhbHVlJzogJ2ZvbycgfSwKKyAgICAgICAgeyAndHlw
ZSc6ICdmaWxlJywgJ25hbWUnOiAnZmlsZTEnLCAndmFsdWUnOiAnLi4vcmVzb3VyY2VzL2ZpbGUt
Zm9yLWRyYWctdG8tc2VuZC50eHQnIH0sCisgICAgICAgIHsgJ3R5cGUnOiAnc3RyaW5nJywgJ25h
bWUnOiAnc3RyaW5nMicsICd2YWx1ZSc6ICdiYXInIH0sCisgICAgICAgIHsgJ3R5cGUnOiAnZmls
ZScsICduYW1lJzogJ2ZpbGUyJywgJ3ZhbHVlJzogJy4uL3Jlc291cmNlcy9maWxlLWZvci1kcmFn
LXRvLXNlbmQudHh0JyB9CisgICAgXSk7Cit9CisKK2lmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsK
KyAgICBydW5UZXN0KCk7CisgICAgLy8gQ2xlYW4gdXAgYWZ0ZXIgb3Vyc2VsdmVzCisgICAgZmls
ZUlucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZmlsZUlucHV0KTsKK30gZWxzZSB7CisgICAg
dGVzdEZhaWxlZCgiVGhpcyB0ZXN0IGlzIG5vdCBpbnRlcmFjdGl2ZSwgcGxlYXNlIHJ1biB1c2lu
ZyBEdW1wUmVuZGVyVHJlZSIpOworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvZm9ybWRhdGEvc2VuZC1m
b3JtLWRhdGEtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9mb3Jt
ZGF0YS9zZW5kLWZvcm0tZGF0YS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNmM3ODlmNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvbG9jYWwvZm9ybWRhdGEvc2VuZC1mb3JtLWRhdGEtZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsMjEgQEAKK1Rlc3QgZm9yIHNlbmRpbmcgRm9ybURhdGEgdmlhIFhNTEh0dHBSZXF1ZXN0Lgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworU2VuZGluZyBGb3JtRGF0YSBjb250YWlu
aW5nIG9uZSBzdHJpbmcgd2l0aCBlbXB0eSBuYW1lOgorCitTZW5kaW5nIEZvcm1EYXRhIGNvbnRh
aW5pbmcgb25lIGZpbGUgd2l0aCBlbXB0eSBuYW1lOgorCitTZW5kaW5nIEZvcm1EYXRhIGNvbnRh
aW5pbmcgb25lIHN0cmluZzoKK3N0cmluZz1mb28KK1NlbmRpbmcgRm9ybURhdGEgY29udGFpbmlu
ZyBvbmUgZmlsZToKK2ZpbGU9ZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dDoxMjM0NTY3ODkwCitT
ZW5kaW5nIEZvcm1EYXRhIGNvbnRhaW5pbmcgb25lIHN0cmluZyBhbmQgb25lIGZpbGU6CitzdHJp
bmcxPWZvbyZmaWxlMT1maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0OjEyMzQ1Njc4OTAKK1NlbmRp
bmcgRm9ybURhdGEgY29udGFpbmluZyB0d28gc3RyaW5ncyBhbmQgdHdvIGZpbGVzOgorc3RyaW5n
MT1mb28mc3RyaW5nMj1iYXImZmlsZTE9ZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dDoxMjM0NTY3
ODkwJmZpbGUyPWZpbGUtZm9yLWRyYWctdG8tc2VuZC50eHQ6MTIzNDU2Nzg5MAorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvZm9ybWRhdGEvc2VuZC1mb3JtLWRhdGEtd2l0aC1z
bGljZWQtZmlsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL2Zv
cm1kYXRhL3NlbmQtZm9ybS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YTUwYTQKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL2Zvcm1kYXRhL3NlbmQtZm9ybS1kYXRhLXdp
dGgtc2xpY2VkLWZpbGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTcgQEAKK1Rlc3QgZm9yIHNl
bmRpbmcgRm9ybURhdGEgd2l0aCBzbGljZWQgZmlsZXMgdmlhIFhNTEh0dHBSZXF1ZXN0LgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworU2VuZGluZyBGb3JtRGF0YSBjb250YWluaW5n
IG9uZSBzbGljZWQgZmlsZSB3aXRoIGVtcHR5IG5hbWU6CisKK1NlbmRpbmcgRm9ybURhdGEgY29u
dGFpbmluZyBvbmUgc2xpY2VkIGZpbGU6CitmaWxlPUJsb2I6MjM0NTYKK1NlbmRpbmcgRm9ybURh
dGEgY29udGFpbmluZyBvbmUgc3RyaW5nIGFuZCBvbmUgc2xpY2VkIGZpbGU6CitzdHJpbmcxPWZv
byZmaWxlMT1CbG9iOjIzNDU2CitTZW5kaW5nIEZvcm1EYXRhIGNvbnRhaW5pbmcgdHdvIHN0cmlu
Z3MgYW5kIHR3byBzbGljZWQgZmlsZXM6CitzdHJpbmcxPWZvbyZzdHJpbmcyPWJhciZmaWxlMT1C
bG9iOjIzNDU2JmZpbGUyPUJsb2I6NDUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xv
Y2FsL2Zvcm1kYXRhL3NlbmQtZm9ybS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUuaHRtbCBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvZm9ybWRhdGEvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGlj
ZWQtZmlsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YTliMDQK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL2Zvcm1kYXRh
L3NlbmQtZm9ybS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUuaHRtbApAQCAtMCwwICsxLDE0IEBACis8
IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxo
ZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9zZW5kLWZvcm0tZGF0YS1jb21tb24uanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9zZW5kLWZvcm0tZGF0YS13aXRoLXNsaWNlZC1maWxl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9mb3JtZGF0YS9zZW5kLWZvcm0tZGF0YS5o
dG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9mb3JtZGF0YS9zZW5kLWZvcm0tZGF0
YS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMGY0N2IKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL2Zvcm1kYXRhL3NlbmQt
Zm9ybS1kYXRhLmh0bWwKQEAgLTAsMCArMSwxNCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48
L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2Vu
ZC1mb3JtLWRhdGEtY29tbW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVz
dHMvc2VuZC1mb3JtLWRhdGEuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNl
cy9zZW5kLWZvcm0tZGF0YS5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3Vy
Y2VzL3NlbmQtZm9ybS1kYXRhLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWY3
YzQ0Li4wMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2Vz
L3NlbmQtZm9ybS1kYXRhLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLWRlc2Ny
aXB0aW9uKCJUZXN0IGZvciBzZW5kaW5nIEZvcm1EYXRhIHZpYSBYTUxIdHRwUmVxdWVzdC4iKTsK
LQotdmFyIGZpbGVJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci1maWxl
SW5wdXQudHlwZSA9ICdmaWxlJzsKLWZpbGVJbnB1dC5zdHlsZS53aWR0aCA9ICIxMDAlIjsgLy8g
U28gdGhhdCBhbnkgbWFudWFsIHRlc3Rpbmcgd2lsbCBzaG93IGZ1bGwgZmlsZSBuYW1lcwotLy8g
SW1wb3J0YW50IHRoYXQgd2UgcHV0IHRoaXMgYXQgdGhlIHRvcCBvZiB0aGUgZG9jIHNvIHRoYXQg
bG9nZ2luZyBkb2VzIG5vdCBjYXVzZSBpdCB0byBnbyBvdXQgb2YgdmlldyAod2hlcmUgaXQgY2Fu
J3QgYmUgZHJhZ2dlZCB0bykKLWRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGZpbGVJbnB1dCwg
ZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTsKLQotZnVuY3Rpb24gbW92ZU1vdXNlVG9DZW50ZXJP
ZkVsZW1lbnQoZWxlbWVudCkKLXsKLSAgICB2YXIgY2VudGVyWCA9IGVsZW1lbnQub2Zmc2V0TGVm
dCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOwotICAgIHZhciBjZW50ZXJZID0gZWxlbWVudC5v
ZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7Ci0gICAgZXZlbnRTZW5kZXIubW91
c2VNb3ZlVG8oY2VudGVyWCwgY2VudGVyWSk7Ci19Ci0KLWZ1bmN0aW9uIGdldEZpbGVOYW1lKGZp
bGVQYXRoKQotewotICAgIHZhciBpbmRleCA9IGZpbGVQYXRoLmxhc3RJbmRleE9mKCcvJyk7Ci0g
ICAgaWYgKGluZGV4ID09IC0xKQotICAgICAgICByZXR1cm4gZmlsZVBhdGg7Ci0gICAgcmV0dXJu
IGZpbGVQYXRoLnN1YnN0cihpbmRleCArIDEpOwotfQotCi1mdW5jdGlvbiBzZW5kRm9ybURhdGEo
Zm9ybURhdGFMaXN0KQotewotICAgIHZhciBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgZm9ybURhdGFMaXN0Lmxlbmd0aDsgaSsrKQotICAgICAgICBm
b3JtRGF0YS5hcHBlbmQoZm9ybURhdGFMaXN0W2ldWyduYW1lJ10sIGZvcm1EYXRhTGlzdFtpXVsn
dmFsdWUnXSk7Ci0KLSAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Ci0gICAgeGhy
Lm9wZW4oIlBPU1QiLCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291
cmNlcy9tdWx0aXBhcnQtcG9zdC1lY2hvLnBocCIsIGZhbHNlKTsKLSAgICB4aHIuc2VuZChmb3Jt
RGF0YSk7Ci0KLSAgICBkZWJ1Zyh4aHIucmVzcG9uc2VUZXh0KTsKLX0KLQotZnVuY3Rpb24gdGVz
dFNlbmRpbmdGb3JtRGF0YShkYXRhTGlzdCkKLXsKLSAgICB2YXIgZmlsZXNUb0RyYWcgPSBbXTsK
LSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFMaXN0Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
IGlmIChkYXRhTGlzdFtpXVsndHlwZSddID09ICdmaWxlJykKLSAgICAgICAgICAgIGZpbGVzVG9E
cmFnLnB1c2goZGF0YUxpc3RbaV1bJ3ZhbHVlJ10pOwotICAgIH0KLQotICAgIGlmIChmaWxlc1Rv
RHJhZykgewotICAgICAgICBldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMoZmlsZXNUb0Ry
YWcpOwotICAgICAgICBtb3ZlTW91c2VUb0NlbnRlck9mRWxlbWVudChmaWxlSW5wdXQpOwotICAg
ICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7Ci0gICAgfQotCi0gICAgdmFyIGZpbGVzID0gZmls
ZUlucHV0LmZpbGVzOwotICAgIHZhciBmb3JtRGF0YUxpc3QgPSBbXTsKLSAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGRhdGFMaXN0Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChkYXRhTGlzdFtp
XVsndHlwZSddID09ICdmaWxlJykgewotICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gZ2V0Rmls
ZU5hbWUoZGF0YUxpc3RbaV1bJ3ZhbHVlJ10pOwotICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7
IGogPCBmaWxlcy5sZW5ndGg7IGorKykgewotICAgICAgICAgICAgICAgIGlmIChmaWxlTmFtZSA9
PSBmaWxlc1tqXS5uYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhTGlzdC5wdXNo
KHsnbmFtZSc6IGRhdGFMaXN0W2ldWyduYW1lJ10sICd2YWx1ZSc6IGZpbGVzW2pdfSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvcm1EYXRhTGlzdC5wdXNoKHsnbmFtZSc6
IGRhdGFMaXN0W2ldWyduYW1lJ10sICd2YWx1ZSc6IGRhdGFMaXN0W2ldWyd2YWx1ZSddfSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBzZW5kRm9ybURhdGEoZm9ybURhdGFMaXN0KTsKLX0KLQot
ZnVuY3Rpb24gcnVuVGVzdCgpCi17Ci0gICAgZGVidWcoIlNlbmRpbmcgRm9ybURhdGEgY29udGFp
bmluZyBvbmUgc3RyaW5nIHdpdGggZW1wdHkgbmFtZToiKTsKLSAgICB0ZXN0U2VuZGluZ0Zvcm1E
YXRhKFsKLSAgICAgICAgeyAndHlwZSc6ICdzdHJpbmcnLCAnbmFtZSc6ICcnLCAndmFsdWUnOiAn
Zm9vJyB9Ci0gICAgXSk7Ci0KLSAgICBkZWJ1ZygiU2VuZGluZyBGb3JtRGF0YSBjb250YWluaW5n
IG9uZSBmaWxlIHdpdGggZW1wdHkgbmFtZToiKTsKLSAgICB0ZXN0U2VuZGluZ0Zvcm1EYXRhKFsK
LSAgICAgICAgeyAndHlwZSc6ICdmaWxlJywgJ25hbWUnOiAnJywgJ3ZhbHVlJzogJ3Jlc291cmNl
cy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0JyB9Ci0gICAgXSk7Ci0KLSAgICBkZWJ1ZygiU2Vu
ZGluZyBGb3JtRGF0YSBjb250YWluaW5nIG9uZSBzdHJpbmc6Iik7Ci0gICAgdGVzdFNlbmRpbmdG
b3JtRGF0YShbCi0gICAgICAgIHsgJ3R5cGUnOiAnc3RyaW5nJywgJ25hbWUnOiAnc3RyaW5nJywg
J3ZhbHVlJzogJ2ZvbycgfQotICAgIF0pOwotCi0gICAgZGVidWcoIlNlbmRpbmcgRm9ybURhdGEg
Y29udGFpbmluZyBvbmUgZmlsZToiKTsKLSAgICB0ZXN0U2VuZGluZ0Zvcm1EYXRhKFsKLSAgICAg
ICAgeyAndHlwZSc6ICdmaWxlJywgJ25hbWUnOiAnZmlsZScsICd2YWx1ZSc6ICdyZXNvdXJjZXMv
ZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dCcgfQotICAgIF0pOwotCi0gICAgZGVidWcoIlNlbmRp
bmcgRm9ybURhdGEgY29udGFpbmluZyBvbmUgc3RyaW5nIGFuZCBvbmUgZmlsZToiKTsKLSAgICB0
ZXN0U2VuZGluZ0Zvcm1EYXRhKFsKLSAgICAgICAgeyAndHlwZSc6ICdzdHJpbmcnLCAnbmFtZSc6
ICdzdHJpbmcxJywgJ3ZhbHVlJzogJ2ZvbycgfSwKLSAgICAgICAgeyAndHlwZSc6ICdmaWxlJywg
J25hbWUnOiAnZmlsZTEnLCAndmFsdWUnOiAncmVzb3VyY2VzL2ZpbGUtZm9yLWRyYWctdG8tc2Vu
ZC50eHQnIH0KLSAgICBdKTsKLQotICAgIGRlYnVnKCJTZW5kaW5nIEZvcm1EYXRhIGNvbnRhaW5p
bmcgdHdvIHN0cmluZ3MgYW5kIHR3byBmaWxlczoiKTsKLSAgICB0ZXN0U2VuZGluZ0Zvcm1EYXRh
KFsKLSAgICAgICAgeyAndHlwZSc6ICdzdHJpbmcnLCAnbmFtZSc6ICdzdHJpbmcxJywgJ3ZhbHVl
JzogJ2ZvbycgfSwKLSAgICAgICAgeyAndHlwZSc6ICdmaWxlJywgJ25hbWUnOiAnZmlsZTEnLCAn
dmFsdWUnOiAncmVzb3VyY2VzL2ZpbGUtZm9yLWRyYWctdG8tc2VuZC50eHQnIH0sCi0gICAgICAg
IHsgJ3R5cGUnOiAnc3RyaW5nJywgJ25hbWUnOiAnc3RyaW5nMicsICd2YWx1ZSc6ICdiYXInIH0s
Ci0gICAgICAgIHsgJ3R5cGUnOiAnZmlsZScsICduYW1lJzogJ2ZpbGUyJywgJ3ZhbHVlJzogJ3Jl
c291cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0JyB9Ci0gICAgXSk7Ci19Ci0KLWlmICh3
aW5kb3cuZXZlbnRTZW5kZXIpIHsKLSAgICBydW5UZXN0KCk7Ci0gICAgLy8gQ2xlYW4gdXAgYWZ0
ZXIgb3Vyc2VsdmVzCi0gICAgZmlsZUlucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZmlsZUlu
cHV0KTsKLX0gZWxzZSB7Ci0gICAgdGVzdEZhaWxlZCgiVGhpcyB0ZXN0IGlzIG5vdCBpbnRlcmFj
dGl2ZSwgcGxlYXNlIHJ1biB1c2luZyBEdW1wUmVuZGVyVHJlZSIpOwotfQotCi12YXIgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
bG9jYWwvc2VuZC1mb3JtLWRhdGEtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9sb2NhbC9zZW5kLWZvcm0tZGF0YS1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDZjNzg5ZjYuLjAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9s
b2NhbC9zZW5kLWZvcm0tZGF0YS1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyMSAr
MCwwIEBACi1UZXN0IGZvciBzZW5kaW5nIEZvcm1EYXRhIHZpYSBYTUxIdHRwUmVxdWVzdC4KLQot
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgotCi0KLVNlbmRpbmcgRm9ybURhdGEgY29udGFpbmlu
ZyBvbmUgc3RyaW5nIHdpdGggZW1wdHkgbmFtZToKLQotU2VuZGluZyBGb3JtRGF0YSBjb250YWlu
aW5nIG9uZSBmaWxlIHdpdGggZW1wdHkgbmFtZToKLQotU2VuZGluZyBGb3JtRGF0YSBjb250YWlu
aW5nIG9uZSBzdHJpbmc6Ci1zdHJpbmc9Zm9vCi1TZW5kaW5nIEZvcm1EYXRhIGNvbnRhaW5pbmcg
b25lIGZpbGU6Ci1maWxlPWZpbGUtZm9yLWRyYWctdG8tc2VuZC50eHQ6MTIzNDU2Nzg5MAotU2Vu
ZGluZyBGb3JtRGF0YSBjb250YWluaW5nIG9uZSBzdHJpbmcgYW5kIG9uZSBmaWxlOgotc3RyaW5n
MT1mb28mZmlsZTE9ZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dDoxMjM0NTY3ODkwCi1TZW5kaW5n
IEZvcm1EYXRhIGNvbnRhaW5pbmcgdHdvIHN0cmluZ3MgYW5kIHR3byBmaWxlczoKLXN0cmluZzE9
Zm9vJnN0cmluZzI9YmFyJmZpbGUxPWZpbGUtZm9yLWRyYWctdG8tc2VuZC50eHQ6MTIzNDU2Nzg5
MCZmaWxlMj1maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0OjEyMzQ1Njc4OTAKLVBBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1kYXRhLmh0bWwgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1kYXRhLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDE4YzcwYjEuLjAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9sb2NhbC9zZW5kLWZvcm0tZGF0YS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBA
QAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgotPGh0bWw+
Ci08aGVhZD4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgotPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5Pgot
PHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Ci08ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KLTxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvc2VuZC1mb3JtLWRhdGEuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
U2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IGZiYzhhOTAu
LmY4NmQ2MmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC0zNDIyLDYgKzM0MjIsNyBA
QCBodHRwL3Rlc3RzL2xvYWRpbmcvdGV4dC1jb250ZW50LXR5cGUtd2l0aC1iaW5hcnktZXh0ZW5z
aW9uLmh0bWwKIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFnZ2VkLWZpbGUuaHRtbAogaHR0cC90
ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRtbAogaHR0cC90ZXN0cy9sb2Nh
bC9zZW5kLWZvcm0tZGF0YS5odG1sCitodHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1kYXRhLXdp
dGgtc2xpY2VkLWZpbGUuaHRtbAogaHR0cC90ZXN0cy9tZWRpYS92aWRlby1wbGF5LXN0YWxsLXNl
ZWsuaHRtbAogaHR0cC90ZXN0cy9tZWRpYS92aWRlby1wbGF5LXN0YWxsLmh0bWwKIGh0dHAvdGVz
dHMvbWVkaWEvdmlkZW8tc2Vla2FibGUtc3RhbGwuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQK
aW5kZXggMGI5ZWU4NC4uMDQ1NTI4NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCkBAIC01MCw2
ICs1MCw3IEBAIGh0dHAvdGVzdHMvbG9jYWwvZHJhZy1vdmVyLXJlbW90ZS1jb250ZW50Lmh0bWwK
IGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFnZ2VkLWZpbGUuaHRtbAogaHR0cC90ZXN0cy9sb2Nh
bC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRtbAogaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWZv
cm0tZGF0YS5odG1sCitodHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1kYXRhLXdpdGgtc2xpY2Vk
LWZpbGUuaHRtbAogCiAjIEZhaWxpbmcgbmF2aWdhdGlvbiB0ZXN0cwogaHR0cC90ZXN0cy9uYXZp
Z2F0aW9uL2FuY2hvci1mcmFtZXMuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2luL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAppbmRleCA1
OGYwY2EzLi4xNmM5NDYxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tp
cHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZApAQCAtNjcwLDYgKzY3
MCw3IEBAIGZhc3QvZm9ybXMvaW5wdXQtc2VsZWN0ZWRvcHRpb24uaHRtbAogaHR0cC90ZXN0cy9s
b2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5odG1sCiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2Vk
LWRyYWdnZWQtZmlsZS5odG1sCiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtZm9ybS1kYXRhLmh0bWwK
K2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1mb3JtLWRhdGEtd2l0aC1zbGljZWQtZmlsZS5odG1sCiAK
ICMgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTI4OT4KIHBsdWdp
bnMvZGVzdHJveS1kdXJpbmctbnBwLW5ldy5odG1sCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDJkMTQzNmUuLjc4OWZhMDIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjkgQEAKKzIwMTAtMDQtMTQgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgdXNpbmcg
Rm9ybURhdGEgdG8gc2VuZCBhIHNsaWNlZCBmaWxlIHZpYSBYSFIuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjY3OAorCisgICAgICAgIFRlc3RzOiBo
dHRwL3Rlc3RzL2xvY2FsL2Zvcm1kYXRhL3NlbmQtZm9ybS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUu
aHRtbAorCisgICAgICAgICogaHRtbC9CbG9iLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpp
c0ZpbGUpOgorICAgICAgICAqIGh0bWwvRE9NRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NRm9ybURhdGE6OmFwcGVuZCk6CisgICAgICAgICogaHRtbC9GaWxlLmg6CisgICAgICAg
IChXZWJDb3JlOjpGaWxlOjppc0ZpbGUpOgorICAgICAgICAqIGh0bWwvRm9ybURhdGFMaXN0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6OmFwcGVuZEJsb2IpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGFMaXN0OjpJdGVtOjpJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhTGlzdDo6SXRlbTo6YmxvYik6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZvcm1EYXRhOjphcHBlbmRET01Gb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW06CisgICAgICAgIChXZWJDb3JlOjpjbG9z
ZUN1cnJlbnRTdHJlYW0pOgorCiAyMDEwLTA0LTA5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgQWRkIGFub3RoZXIgbWlzc2luZyBleHBvcnQgdG8gZml4IHRoZSBidWls
ZC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iLmggYi9XZWJDb3JlL2h0bWwvQmxvYi5o
CmluZGV4IDYxMDg0MmUuLmU4YjVmM2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmgK
KysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuaApAQCAtNTMsNiArNTMsOCBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIH5CbG9iKCkgeyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNGaWxlKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogICAgIFBhc3NSZWZQ
dHI8QmxvYj4gc2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25zdDsK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0RPTUZvcm1EYXRhLmNwcCBiL1dlYkNv
cmUvaHRtbC9ET01Gb3JtRGF0YS5jcHAKaW5kZXggMTQ0MWU4Yi4uZjg0ODg5OCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9odG1sL0RPTUZvcm1EYXRhLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRE9NRm9y
bURhdGEuY3BwCkBAIC01MCwxMSArNTAsOCBAQCB2b2lkIERPTUZvcm1EYXRhOjphcHBlbmQoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogCiB2b2lkIERPTUZvcm1EYXRh
OjphcHBlbmQoY29uc3QgU3RyaW5nJiBuYW1lLCBCbG9iKiBibG9iKQogewotICAgIC8vIEZJWE1F
OiBOZWVkIHRvIHN1cHBvcnQgc2xpY2VkIGZpbGUgd2hlbiBCbG9iLnNsaWNlIHN1cHBvcnQgaXMg
bGFuZGVkLgotICAgIGlmICghbmFtZS5pc0VtcHR5KCkgJiYgIWJsb2ItPnBhdGgoKS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgUmVmUHRyPEZpbGU+IGZpbGUgPSBzdGF0aWNfY2FzdDxGaWxlKj4oYmxv
Yik7Ci0gICAgICAgIGFwcGVuZEZpbGUobmFtZSwgZmlsZS5yZWxlYXNlKCkpOwotICAgIH0KKyAg
ICBpZiAoIW5hbWUuaXNFbXB0eSgpKQorICAgICAgICBhcHBlbmRCbG9iKG5hbWUsIGJsb2IpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmls
ZS5oIGIvV2ViQ29yZS9odG1sL0ZpbGUuaAppbmRleCBkZGE0ODJhLi4wNjVkZDg2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvRmlsZS5oCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlLmgKQEAgLTM5
LDYgKzM5LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUocGF0
aCkpOwogICAgIH0KIAorICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CisKICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7
IH0KICAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oIGIvV2ViQ29yZS9odG1sL0Zv
cm1EYXRhTGlzdC5oCmluZGV4IGVjZjQ0NzguLjRiZjhjYWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aHRtbC9Gb3JtRGF0YUxpc3QuaAorKysgYi9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgKQEAg
LTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgRm9ybURhdGFMaXN0X2gKICNkZWZpbmUgRm9ybURhdGFM
aXN0X2gKIAotI2luY2x1ZGUgIkZpbGUuaCIKKyNpbmNsdWRlICJCbG9iLmgiCiAjaW5jbHVkZSAi
VGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC0zNywy
MSArMzcsMjEgQEAgcHVibGljOgogICAgICAgICB7IGFwcGVuZFN0cmluZyhrZXkpOyBhcHBlbmRT
dHJpbmcodmFsdWUpOyB9CiAgICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IFN0cmluZyYga2V5LCBp
bnQgdmFsdWUpCiAgICAgICAgIHsgYXBwZW5kU3RyaW5nKGtleSk7IGFwcGVuZFN0cmluZyhTdHJp
bmc6Om51bWJlcih2YWx1ZSkpOyB9Ci0gICAgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYg
a2V5LCBQYXNzUmVmUHRyPEZpbGU+IGZpbGUpCi0gICAgICAgIHsgYXBwZW5kU3RyaW5nKGtleSk7
IG1fbGlzdC5hcHBlbmQoZmlsZSk7IH0KKyAgICB2b2lkIGFwcGVuZEJsb2IoY29uc3QgU3RyaW5n
JiBrZXksIFBhc3NSZWZQdHI8QmxvYj4gYmxvYikKKyAgICAgICAgeyBhcHBlbmRTdHJpbmcoa2V5
KTsgbV9saXN0LmFwcGVuZChibG9iKTsgfQogCiAgICAgY2xhc3MgSXRlbSB7CiAgICAgcHVibGlj
OgogICAgICAgICBJdGVtKCkgeyB9CiAgICAgICAgIEl0ZW0oY29uc3QgV1RGOjpDU3RyaW5nJiBk
YXRhKSA6IG1fZGF0YShkYXRhKSB7IH0KLSAgICAgICAgSXRlbShQYXNzUmVmUHRyPEZpbGU+IGZp
bGUpIDogbV9maWxlKGZpbGUpIHsgfQorICAgICAgICBJdGVtKFBhc3NSZWZQdHI8QmxvYj4gYmxv
YikgOiBtX2Jsb2IoYmxvYikgeyB9CiAKICAgICAgICAgY29uc3QgV1RGOjpDU3RyaW5nJiBkYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgICAgIEZpbGUqIGZpbGUoKSBjb25zdCB7
IHJldHVybiBtX2ZpbGUuZ2V0KCk7IH0KKyAgICAgICAgQmxvYiogYmxvYigpIGNvbnN0IHsgcmV0
dXJuIG1fYmxvYi5nZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgV1RGOjpDU3RyaW5n
IG1fZGF0YTsKLSAgICAgICAgUmVmUHRyPEZpbGU+IG1fZmlsZTsKKyAgICAgICAgUmVmUHRyPEJs
b2I+IG1fYmxvYjsKICAgICB9OwogCiAgICAgY29uc3QgVmVjdG9yPEl0ZW0+JiBsaXN0KCkgY29u
c3QgeyByZXR1cm4gbV9saXN0OyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggODBl
ODRlZC4uMmM3YjU1MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtMTM1NCwxMiAr
MTM1NCwxMiBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEZvcm1EYXRh
TGlzdCYgZW5jb2RpbmcsIGJvb2wgbXVsdGlwYXJ0KQogICAgICAgICAgICAgLy8gSWYgbm8gZmls
ZW5hbWUgYXQgYWxsIGlzIGVudGVyZWQsIHJldHVybiBzdWNjZXNzZnVsIGJ1dCBlbXB0eS4KICAg
ICAgICAgICAgIC8vIE51bGwgd291bGQgYmUgbW9yZSBsb2dpY2FsLCBidXQgTmV0c2NhcGUgcG9z
dHMgYW4gZW1wdHkgZmlsZS4gQXJnaC4KICAgICAgICAgICAgIGlmICghbnVtRmlsZXMpIHsKLSAg
ICAgICAgICAgICAgICBlbmNvZGluZy5hcHBlbmRGaWxlKG5hbWUoKSwgRmlsZTo6Y3JlYXRlKCIi
KSk7CisgICAgICAgICAgICAgICAgZW5jb2RpbmcuYXBwZW5kQmxvYihuYW1lKCksIEZpbGU6OmNy
ZWF0ZSgiIikpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRmlsZXM7ICsraSkKLSAg
ICAgICAgICAgICAgICBlbmNvZGluZy5hcHBlbmRGaWxlKG5hbWUoKSwgbV9maWxlTGlzdC0+aXRl
bShpKSk7CisgICAgICAgICAgICAgICAgZW5jb2RpbmcuYXBwZW5kQmxvYihuYW1lKCksIG1fZmls
ZUxpc3QtPml0ZW0oaSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAppbmRleCA2YTQ4NzM2Li40YWQ4
MmZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKQEAgLTI2LDExICsyNiwx
MyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRPTUZvcm1EYXRhLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiRmls
ZVN5c3RlbS5oIgogI2luY2x1ZGUgIkZvcm1EYXRhQnVpbGRlci5oIgogI2luY2x1ZGUgIk1JTUVU
eXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5n
LmgiCisjaW5jbHVkZSAiVVVJRC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE4Niw5
ICsxODgsMjEgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9NRm9y
bURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXIKIAogICAgICAgICAgICAgYm9vbCBz
aG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZTsKICAgICAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50
IHR5cGUgaXMgRklMRSwgdGhlbiB3ZSBhbHNvIG5lZWQgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWUK
LSAgICAgICAgICAgIGlmICh2YWx1ZS5maWxlKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIHBhdGggPSB2YWx1ZS5maWxlKCktPnBhdGgoKTsKLSAgICAgICAgICAgICAgICBTdHJp
bmcgZmlsZU5hbWUgPSB2YWx1ZS5maWxlKCktPmZpbGVOYW1lKCk7CisgICAgICAgICAgICBpZiAo
dmFsdWUuYmxvYigpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gdmFs
dWUuYmxvYigpLT5wYXRoKCk7CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgICAgICAgICAg
ICAgU3RyaW5nIGZpbGVOYW1lOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCktPmlz
RmlsZSgpKQorICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHN0YXRpY19jYXN0PEZpbGUq
Pih2YWx1ZS5ibG9iKCkpLT5maWxlTmFtZSgpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAvLyBJZiBhIGJsb2IgaXMgc2xpY2VkIGZyb20gYSBmaWxlLCBpdCBk
b2VzIG5vdCBoYXZlIHRoZSBmaWxlbmFtZS4gSW4gdGhpcyBjYXNlLCBsZXQncyBwcm9kdWNlIGEg
dW5pcXVlIGZpbGVuYW1lLgorICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9ICJCbG9iIiAr
IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgZmlsZU5h
bWUucmVwbGFjZSgiLSIsICIiKTsgLy8gRm9yIHNhZnR5LCByZW1vdmUgJy0nIGZyb20gdGhlIGZp
bGVuYW1lIHNuY2Ugc29tZSBzZXJ2ZXJzIG1heSBub3QgbGlrZSBpdC4KKyAgICAgICAgICAgICAg
ICB9CisjZWxzZQorICAgICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZS5ibG9iKCktPmlzRmlsZSgp
KTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBzdGF0aWNfY2FzdDxGaWxlKj4o
dmFsdWUuYmxvYigpKS0+ZmlsZU5hbWUoKTsKKyNlbmRpZgogCiAgICAgICAgICAgICAgICAgLy8g
TGV0IHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZ5IGEgZmlsZW5hbWUgaWYgaXQncyBnb2luZyB0byBn
ZW5lcmF0ZSBhIHJlcGxhY2VtZW50IGZpbGUgZm9yIHRoZSB1cGxvYWQuCiAgICAgICAgICAgICAg
ICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgewpAQCAtMjAzLDcgKzIxNywxMiBAQCB2b2lkIEZvcm1E
YXRhOjphcHBlbmRET01Gb3JtRGF0YShjb25zdCBET01Gb3JtRGF0YSYgZG9tRm9ybURhdGEsIGJv
b2wgaXNNdWx0aVBhcgogICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gaW5jbHVkZSB0aGUg
ZmlsZW5hbWU9Ii4uIiBwYXJ0IGluIHRoZSBoZWFkZXIsIGV2ZW4gaWYgdGhlIGZpbGVuYW1lIGlz
IGVtcHR5CiAgICAgICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmFkZEZpbGVuYW1lVG9NdWx0
aVBhcnRIZWFkZXIoaGVhZGVyLCBlbmNvZGluZywgZmlsZU5hbWUpOwogCisgICAgICAgICAgICAg
ICAgLy8gSWYgYSBibG9iIGlzIHNsaWNlZCBmcm9tIGEgZmlsZSwgZG8gbm90IGFkZCB0aGUgY29u
dGVudCB0eXBlLiAKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICAgICAgICAgICAgICBpZiAo
IWZpbGVOYW1lLmlzRW1wdHkoKSAmJiB2YWx1ZS5ibG9iKCktPmlzRmlsZSgpKSB7CisjZWxzZQog
ICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpKSB7CisjZW5kaWYKICAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBNSU1FVHlwZVJlZ2lzdHJ5IGZ1bmN0aW9uJ3Mg
bmFtZSBtYWtlcyBpdCBzb3VuZCBsaWtlIGl0IHRha2VzIGEgcGF0aCwKICAgICAgICAgICAgICAg
ICAgICAgLy8gbm90IGp1c3QgYSBiYXNlbmFtZS4gQnV0IGZpbGVuYW1lIGlzIG5vdCB0aGUgcGF0
aC4gQnV0IG5vdGUgdGhhdCBpdCdzIG5vdCBzYWZlIHRvCiAgICAgICAgICAgICAgICAgICAgIC8v
IGp1c3QgdXNlIHBhdGggaW5zdGVhZCBzaW5jZSBpbiB0aGUgZ2VuZXJhdGVkLWZpbGUgY2FzZSBp
dCB3aWxsIG5vdCByZWZsZWN0IHRoZQpAQCAtMjIwLDggKzIzOSwxMiBAQCB2b2lkIEZvcm1EYXRh
OjphcHBlbmRET01Gb3JtRGF0YShjb25zdCBET01Gb3JtRGF0YSYgZG9tRm9ybURhdGEsIGJvb2wg
aXNNdWx0aVBhcgogICAgICAgICAgICAgYXBwZW5kRGF0YShoZWFkZXIuZGF0YSgpLCBoZWFkZXIu
c2l6ZSgpKTsKICAgICAgICAgICAgIGlmIChzaXplX3QgZGF0YVNpemUgPSB2YWx1ZS5kYXRhKCku
bGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgYXBwZW5kRGF0YSh2YWx1ZS5kYXRhKCkuZGF0YSgp
LCBkYXRhU2l6ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5maWxlKCkgJiYgIXZhbHVl
LmZpbGUoKS0+cGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBhcHBlbmRGaWxlKHZh
bHVlLmZpbGUoKS0+cGF0aCgpLCBzaG91bGRHZW5lcmF0ZUZpbGUpOworICAgICAgICAgICAgZWxz
ZSBpZiAodmFsdWUuYmxvYigpICYmICF2YWx1ZS5ibG9iKCktPnBhdGgoKS5pc0VtcHR5KCkpCisj
aWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgICAgICAgICAgICAgYXBwZW5kRmlsZVJhbmdlKHZh
bHVlLmJsb2IoKS0+cGF0aCgpLCB2YWx1ZS5ibG9iKCktPnN0YXJ0KCksIHZhbHVlLmJsb2IoKS0+
bGVuZ3RoKCksIHZhbHVlLmJsb2IoKS0+bW9kaWZpY2F0aW9uVGltZSgpLCBzaG91bGRHZW5lcmF0
ZUZpbGUpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBhcHBlbmRGaWxlKHZhbHVlLmJsb2IoKS0+
cGF0aCgpLCBzaG91bGRHZW5lcmF0ZUZpbGUpOworI2VuZGlmCiAKICAgICAgICAgICAgIGFwcGVu
ZERhdGEoIlxyXG4iLCAyKTsKICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0gYi9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCmluZGV4IDY4NTNkNmUuLjI3ZWNm
ZDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJl
YW1NYWMubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVh
bU1hYy5tbQpAQCAtMTQxLDYgKzE0MSw5IEBAIHN0YXRpYyB2b2lkIGNsb3NlQ3VycmVudFN0cmVh
bShGb3JtU3RyZWFtRmllbGRzICpmb3JtKQogICAgICAgICBDRlJlYWRTdHJlYW1TZXRDbGllbnQo
Zm9ybS0+Y3VycmVudFN0cmVhbSwga0NGU3RyZWFtRXZlbnROb25lLCBOVUxMLCBOVUxMKTsKICAg
ICAgICAgQ0ZSZWxlYXNlKGZvcm0tPmN1cnJlbnRTdHJlYW0pOwogICAgICAgICBmb3JtLT5jdXJy
ZW50U3RyZWFtID0gTlVMTDsKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICAgICAgZm9ybS0+
Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gQmxvYjo6dG9FbmRPZkZpbGU7CisjZW5kaWYKICAg
ICB9CiAgICAgaWYgKGZvcm0tPmN1cnJlbnREYXRhKSB7CiAgICAgICAgIGZhc3RGcmVlKGZvcm0t
PmN1cnJlbnREYXRhKTsK
</data>
<flag name="review"
          id="37056"
          type_id="1"
          status="+"
          setter="dimich"
    />
    <flag name="commit-queue"
          id="37057"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
      

    </bug>

</bugzilla>