<?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>90043</bug_id>
          
          <creation_ts>2012-06-26 22:12:22 -0700</creation_ts>
          <short_desc>[V8] Optimize Integer::New() by caching persistent handles for small integers</short_desc>
          <delta_ts>2012-06-29 08:29:59 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kentaro Hara">haraken</reporter>
          <assigned_to name="Kentaro Hara">haraken</assigned_to>
          <cc>abarth</cc>
    
    <cc>antonm</cc>
    
    <cc>arv</cc>
    
    <cc>danno</cc>
    
    <cc>japhet</cc>
    
    <cc>jochen</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>658331</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-26 22:12:22 -0700</bug_when>
    <thetext>Just like V8BindingPerIsolateData::StringCache, we can introduce V8BindingPerIsolateData::IntegerCache that caches persistent handles for small integers. This will improve performance of Dromaeo/dom-query.html and Bindings/scroll-top.html.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658333</commentid>
    <comment_count>1</comment_count>
      <attachid>149677</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-26 22:14:18 -0700</bug_when>
    <thetext>Created attachment 149677
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658346</commentid>
    <comment_count>2</comment_count>
      <attachid>149677</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-26 22:46:25 -0700</bug_when>
    <thetext>Comment on attachment 149677
Patch

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

&gt; Source/WebCore/bindings/v8/V8Binding.cpp:501
&gt; +        m_smallIntegers[value] = v8::Persistent&lt;v8::Integer&gt;::New(v8::Integer::New(value));

Are these persistent handles leaked?  Presumably we need to Dispose them when the V8BindingPerIsolateData gets destructed.

&gt; Source/WebCore/bindings/v8/V8Binding.h:92
&gt; +#define NumberOfCachedSmallIntegers 64

Can we use a const rather than a #define?  Aren&apos;t compilers smart enough to use const variables for array sizes?

&gt; Source/WebCore/bindings/v8/V8Binding.h:103
&gt; +                return m_smallIntegers[value];

Should we return new local handles to the integers?  I guess it depends on when these handles get Disposed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658347</commentid>
    <comment_count>3</comment_count>
      <attachid>149677</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-26 22:46:58 -0700</bug_when>
    <thetext>Comment on attachment 149677
Patch

Marking r- for memory leak in WebWorkers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658351</commentid>
    <comment_count>4</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-26 22:53:19 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 149677 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=149677&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/V8Binding.cpp:501
&gt; &gt; +        m_smallIntegers[value] = v8::Persistent&lt;v8::Integer&gt;::New(v8::Integer::New(value));
&gt; 
&gt; Are these persistent handles leaked?  Presumably we need to Dispose them when the V8BindingPerIsolateData gets destructed.
&gt; 

Will fix.

&gt; &gt; Source/WebCore/bindings/v8/V8Binding.h:103
&gt; &gt; +                return m_smallIntegers[value];
&gt; 
&gt; Should we return new local handles to the integers?  I guess it depends on when these handles get Disposed.

Given that the persistent handle is Disposed when the V8BindingPerIsolateData gets destructed (i.e. at the end of a Worker), would it be safe to return the same persistent handle to JavaScript?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658363</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-26 23:06:59 -0700</bug_when>
    <thetext>I think it is safe, but I&apos;m not 100% sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658364</commentid>
    <comment_count>6</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-26 23:08:16 -0700</bug_when>
    <thetext>CC-ing arv and antonm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658371</commentid>
    <comment_count>7</comment_count>
      <attachid>149687</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-26 23:15:31 -0700</bug_when>
    <thetext>Created attachment 149687
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658378</commentid>
    <comment_count>8</comment_count>
      <attachid>149687</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-26 23:26:44 -0700</bug_when>
    <thetext>Comment on attachment 149687
Patch

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

I think this is fine, but you might want to check with folks who understand Dispose better than I do.

&gt; Source/WebCore/bindings/v8/V8Binding.h:92
&gt; +    const int NumberOfCachedSmallIntegers = 64;

nit: NumberOfCachedSmallIntegers -&gt; numberOfCachedSmallIntegers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658403</commentid>
    <comment_count>9</comment_count>
      <attachid>149694</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-26 23:59:06 -0700</bug_when>
    <thetext>Created attachment 149694
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658404</commentid>
    <comment_count>10</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-27 00:01:15 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 149687 [details])
&gt; I think this is fine, but you might want to check with folks who understand Dispose better than I do.

OK.

arv, antonm: The question is &quot;Given that a persistent handle is Disposed when V8BindingPerIsolateData gets destructed (i.e. at the end of a Worker), would it be safe to return the same persistent handle to JavaScript (without creating a new handle every time)?&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658657</commentid>
    <comment_count>11</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2012-06-27 09:24:36 -0700</bug_when>
    <thetext>I am sorry, I am not sure I fully understand the question.

Are you concerned that one may return some value to JS itself, then invoke ::Dispose on returned handle, and then JS will continue to use the object?

That should be alright as JS code doesn&apos;t operate on handles, but on values.

The problematic case could be something like that:

Handle&lt;Value&gt; val = &lt;get cached persistent handle, w/o any new&gt;
// Force ::Dispose on this handle
// use val

That could lead to hard to detect bugs as handle can get reused and all of sudden you&apos;ll get a different object here.

But in any event, isn&apos;t that true that V8BindingPerIsolateData are destroyed when the corresponding isolate is destroyed, or are workers a special case?

Overall, I am somewhat surprised that helps with the performance (yes, I saw your numbers, Kentaro)---handle creation should not be very expensive unless you create tons of them (what might be the case.)  And if it&apos;s a real speedup, another way to attack the problem might be with better V8 integration: those small numbers that are cached technically need no handles at all as they are Smis and shouldn&apos;t be adjusted by GC.

So, if it real buys that much, maybe V8 should provide a fast path for creation of handles for Smis.

I may be biased here though as I considered this optimization myself, but decided it&apos;s not worth it :)

(In reply to comment #10)
&gt; (In reply to comment #8)
&gt; &gt; (From update of attachment 149687 [details] [details])
&gt; &gt; I think this is fine, but you might want to check with folks who understand Dispose better than I do.
&gt; 
&gt; OK.
&gt; 
&gt; arv, antonm: The question is &quot;Given that a persistent handle is Disposed when V8BindingPerIsolateData gets destructed (i.e. at the end of a Worker), would it be safe to return the same persistent handle to JavaScript (without creating a new handle every time)?&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658840</commentid>
    <comment_count>12</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-06-27 13:48:36 -0700</bug_when>
    <thetext>This makes me sad. It is very unfortunate that we need to do this. Could we get V8 to be faster for the greater good?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658893</commentid>
    <comment_count>13</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-06-27 14:45:04 -0700</bug_when>
    <thetext>I agree that this should probably be adressed on the V8 side. Is there a V8 bug about this?

Also, if you can&apos;t guarantee that the persistent handle you have is the last handle to the object, you shouldn&apos;t dispose it. Alternatively, you could make the handle weak, so the object gets collected when it&apos;s no longer needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658999</commentid>
    <comment_count>14</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-27 17:16:00 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; This makes me sad. It is very unfortunate that we need to do this. Could we get V8 to be faster for the greater good?

I am sad too, but I think that at some point the persistent handles should be cached in the V8 binding side. v8::Integer::New() is already caching objects for small integers, but v8::Integer::New() cannot avoid creating a local handle for the cached object every time, in terms of providing a general V8 API. Thus it would be a work of the V8 binding side to appropriately manage the lifetime of the persistent handles, depending on the lifetime of Workers etc. (The same discussion holds for V8BindingPerIsolateData::StringCache.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659002</commentid>
    <comment_count>15</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-27 17:21:34 -0700</bug_when>
    <thetext>Thanks, antonm!

(In reply to comment #11)
&gt; The problematic case could be something like that:
&gt; 
&gt; Handle&lt;Value&gt; val = &lt;get cached persistent handle, w/o any new&gt;
&gt; // Force ::Dispose on this handle
&gt; // use val
&gt; 
&gt; That could lead to hard to detect bugs as handle can get reused and all of sudden you&apos;ll get a different object here.

This is the exact problem I am concerning about.

&gt; But in any event, isn&apos;t that true that V8BindingPerIsolateData are destroyed when the corresponding isolate is destroyed, or are workers a special case?

Yes, I and abarth think that it is true (i.e. the patch won&apos;t cause the problem). We wanted to confirm that the above problem won&apos;t happen both in the main thread and in workers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659259</commentid>
    <comment_count>16</comment_count>
      <attachid>149694</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-27 23:41:16 -0700</bug_when>
    <thetext>Comment on attachment 149694
patch for landing

A bunch of tests are crashing. Looks like we need to create a new handle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659278</commentid>
    <comment_count>17</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-28 00:04:35 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 149694 [details])
&gt; A bunch of tests are crashing. Looks like we need to create a new handle.

It seems that this is not a problem of whether we create a new local handle or not. m_smallIntegers[i].Dispose() in ~IntegerCache() crashes. Investigating...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659299</commentid>
    <comment_count>18</comment_count>
      <attachid>149895</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-28 00:34:15 -0700</bug_when>
    <thetext>Created attachment 149895
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659301</commentid>
    <comment_count>19</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-28 00:36:26 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; It seems that this is not a problem of whether we create a new local handle or not. m_smallIntegers[i].Dispose() in ~IntegerCache() crashes. Investigating...

Just swapped the order of isolate-&gt;Exit() and ~V8BindingPerIsolateData(). ~V8BindingPerIsolateData() should be called before isolate-&gt;Exit(), because ~V8BindingPerIsolateData() can call V8 APIs (Dispose() in our case) that require the current isolate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659341</commentid>
    <comment_count>20</comment_count>
      <attachid>149895</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-28 01:52:14 -0700</bug_when>
    <thetext>Comment on attachment 149895
patch for landing

Clearing flags on attachment: 149895

Committed r121421: &lt;http://trac.webkit.org/changeset/121421&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660252</commentid>
    <comment_count>21</comment_count>
      <attachid>149687</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-06-29 00:54:39 -0700</bug_when>
    <thetext>Comment on attachment 149687
Patch

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

&gt; Source/WebCore/bindings/v8/V8Binding.h:105
&gt; +            return v8::Integer::New(value);

You might want to change v8::Integer::New signature to accept isolate as an optional second parameter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660256</commentid>
    <comment_count>22</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-29 00:59:04 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; &gt; +            return v8::Integer::New(value);
&gt; 
&gt; You might want to change v8::Integer::New signature to accept isolate as an optional second parameter.

I&apos;ve been asking the V8 team to accept isolate for three months...:)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660522</commentid>
    <comment_count>23</comment_count>
    <who name="Daniel Clifford">danno</who>
    <bug_when>2012-06-29 08:29:59 -0700</bug_when>
    <thetext>and we&apos;ve been listening. :-) It&apos;s on our list of things to tackle next, as you know we were recently focusing on adding other isolate parameter support to the first round of hot APIs you identified.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149677</attachid>
            <date>2012-06-26 22:14:18 -0700</date>
            <delta_ts>2012-06-26 23:15:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90043-20120627141418.patch</filename>
            <type>text/plain</type>
            <size>22929</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMzA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWU2YTAwM2YzODM0NTZi
NTAwNjU0ZTM0M2JkZWRkNjk2NjhjZjM1YS4uMWEyZmNjNGE3ZDhhMzk5MGUwZjE2ZTAyZjcyNDE2
OWFhOGU1NjE1NyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTA2LTI2ICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVjhdIE9wdGltaXpl
IEludGVnZXI6Ok5ldygpIGJ5IGNhY2hpbmcgcGVyc2lzdGVudCBoYW5kbGVzIGZvciBzbWFsbCBp
bnRlZ2VycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTAwNDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGUgcGF0Y2ggaW1wcm92ZXMgcGVyZm9ybWFuY2Ugb2YgRHJvbWFlby9kb20tcXVlcnkuaHRtbCBi
eSAzLjYlLAorICAgICAgICBhbmQgQmluZGluZ3Mvc2Nyb2xsLXRvcC5odG1sIGJ5IDE3LjMlLgor
CisgICAgICAgIFRoZSBwZXJmb3JtYW5jZSByZXN1bHRzIGluIG15IENocm9taXVtL0xpbnV4Ogor
CisgICAgICAgIFtEcm9tYWVvL2RvbS1xdWVyeS5odG1sXQorICAgICAgICA3OTYzMTAuNCBydW5z
L3MgPT4gODI0NzQ1LjQgcnVucy9zICgrMy42JSkKKworICAgICAgICBbQmluZGluZ3Mvc2Nyb2xs
LXRvcC5odG1sXQorICAgICAgICAyMDQuNjggcnVucy9zID0+IDI0MC4xNSBydW5zL3MgKCsxNy4z
JSkKKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgVjhCaW5kaW5nUGVySXNvbGF0ZURh
dGE6OkludGVnZXJDYWNoZSAoanVzdCBsaWtlCisgICAgICAgIFY4QmluZGluZ1Blcklzb2xhdGVE
YXRhOjpTdHJpbmdDYWNoZSkgdG8gY2FjaGUgcGVyc2lzdGVudCBoYW5kbGVzCisgICAgICAgIGZv
ciBzbWFsbCBpbnRlZ2Vycy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGNoYW5nZSBpbiBi
ZWhhdmlvci4KKworICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5oOiBJbXBsZW1lbnRl
ZCB2OEludGVnZXIoKSBhbmQgdjhVbnNpZ25lZEludGVnZXIoKSwKKyAgICAgICAgd2hpY2ggcmV0
dXJucyBjYWNoZWQgcGVyc2lzdGVudCBoYW5kbGVzIGZvciBpbnRlZ2VycyBzbWFsbGVyIHRoYW4g
NjQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEludGVnZXJDYWNoZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnRlZ2VyQ2FjaGU6OkludGVnZXJDYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnRlZ2VyQ2FjaGU6OnY4SW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlZ2VyQ2Fj
aGU6OnY4VW5zaWduZWRJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4QmluZGluZ1Blcklz
b2xhdGVEYXRhOjppbnRlZ2VyQ2FjaGUpOgorICAgICAgICAoVjhCaW5kaW5nUGVySXNvbGF0ZURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6djhJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OnY4
VW5zaWduZWRJbnRlZ2VyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlZ2VyQ2FjaGU6OmNyZWF0
ZVNtYWxsSW50ZWdlcnMpOgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG06IFJlcGxhY2VkIEludGVnZXI6Ok5ldygpIGFuZCBJbnRlZ2VyOjpOZXdGcm9tVW5z
aWduZWQoKQorICAgICAgICB3aXRoIHY4SW50ZWdlcigpIGFuZCB2OFVuc2lnbmVkSW50ZWdlcigp
LgorICAgICAgICAoR2VuZXJhdGVOb3JtYWxBdHRyR2V0dGVyKToKKyAgICAgICAgKE5hdGl2ZVRv
SlNWYWx1ZSk6CisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0
aXZlRE9NT2JqZWN0LmNwcDogVXBkYXRlZCBydW4tYmluZGluZ3MtdGVzdHMgcmVzdWx0cy4KKyAg
ICAgICAgKFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3RWOEludGVybmFsOjpleGNpdGluZ0F0
dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
T2JqLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6cmVh
ZE9ubHlJbnRBdHRyQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRl
cm5hbDo6c2hvcnRBdHRyQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJ
bnRlcm5hbDo6dW5zaWduZWRTaG9ydEF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlRlc3RPYmpWOEludGVybmFsOjppbnRBdHRyQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVkSW50ZWdyYWxBdHRyQXR0ckdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVkVW5zaWduZWRJbnRl
Z3JhbEF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFs
OjpyZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RPYmpWOEludGVybmFsOjphdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmF0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6
d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpU
ZXN0T2JqVjhJbnRlcm5hbDo6Y29uZGl0aW9uYWxBdHRyMUF0dHJHZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmNvbmRpdGlvbmFsQXR0cjJBdHRyR2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpjb25kaXRpb25hbEF0dHIzQXR0
ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6ZW5hYmxlZEF0
UnVudGltZUF0dHIxQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRl
cm5hbDo6ZW5hYmxlZEF0UnVudGltZUF0dHIyQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXN0T2JqVjhJbnRlcm5hbDo6ZW5hYmxlZEF0Q29udGV4dEF0dHIxQXR0ckdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6ZW5hYmxlZEF0Q29udGV4dEF0dHIy
QXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6c3RyYXdi
ZXJyeUF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmRl
c2NyaXB0aW9uQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5h
bDo6aWRBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpp
bnRNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6
aW50TWV0aG9kV2l0aEFyZ3NDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJ
bnRlcm5hbDo6Y2xhc3NNZXRob2RXaXRoT3B0aW9uYWxDYWxsYmFjayk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZS5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZVY4SW50ZXJuYWw6OnBvcnRzQXR0ckdldHRlcik6CisKIDIwMTItMDYtMjYgIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgU3RvcCBjYWxsaW5nIG5v
ZGUoKSBhbmQgZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSBpbiBjb21wYXJlUG9zaXRpb25zCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
CmluZGV4IDI1NGVjOTM5NmJiNDI3MTFmY2UxNmJlMTA1MDEyMWRmNmZlZWNiMzUuLmIzNmRhNDAz
OTY0OTdmZWYyNjcyZWQwNTk3Zjk0MGNmMmExYmVmYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0xMDYwLDcgKzEwNjAs
NyBAQCBFTkQKICAgICBNZXNzYWdlUG9ydEFycmF5IHBvcnRzQ29weSgqcG9ydHMpOwogICAgIHY4
OjpMb2NhbDx2ODo6QXJyYXk+IHBvcnRBcnJheSA9IHY4OjpBcnJheTo6TmV3KHBvcnRzQ29weS5z
aXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9ydHNDb3B5LnNpemUoKTsgKytp
KQotICAgICAgICBwb3J0QXJyYXktPlNldCh2ODo6SW50ZWdlcjo6TmV3KGkpLCB0b1Y4KHBvcnRz
Q29weVtpXS5nZXQoKSwgaW5mby5HZXRJc29sYXRlKCkpKTsKKyAgICAgICAgcG9ydEFycmF5LT5T
ZXQodjhJbnRlZ2VyKGksIGluZm8uR2V0SXNvbGF0ZSgpKSwgdG9WOChwb3J0c0NvcHlbaV0uZ2V0
KCksIGluZm8uR2V0SXNvbGF0ZSgpKSk7CiAgICAgcmV0dXJuIHBvcnRBcnJheTsKIEVORAogICAg
IH0gZWxzZSB7CkBAIC0zODkyLDE0ICszODkyLDE0IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAg
ICAjIHNob3VsZCBiZSByZXR1cm5lZCBpbnN0ZWFkLgogICAgIGlmICgkc2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiUmVmbGVjdCJ9IGFuZCAoJHR5cGUgZXEgInVuc2lnbmVkIGxvbmci
IG9yICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCIpKSB7CiAgICAgICAgICR2YWx1ZSA9fiBzL2dl
dFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUvZ2V0SW50ZWdyYWxBdHRyaWJ1dGUvZzsKLSAgICAg
ICAgcmV0dXJuICJ2ODo6SW50ZWdlcjo6TmV3RnJvbVVuc2lnbmVkKHN0ZDo6bWF4KDAsICIgLiAk
dmFsdWUgLiAiKSkiOworICAgICAgICByZXR1cm4gInY4VW5zaWduZWRJbnRlZ2VyKHN0ZDo6bWF4
KDAsICIgLiAkdmFsdWUgLiAiKSRnZXRJc29sYXRlQXJnKSI7CiAgICAgfQogCiAgICAgIyBGb3Ig
YWxsIHRoZSB0eXBlcyB3aGVyZSB3ZSB1c2UgJ2ludCcgYXMgdGhlIHJlcHJlc2VudGF0aW9uIHR5
cGUsCi0gICAgIyB3ZSB1c2UgSW50ZWdlcjo6TmV3IHdoaWNoIGhhcyBhIGZhc3QgU21pIGNvbnZl
cnNpb24gY2hlY2suCisgICAgIyB3ZSB1c2UgdjhJbnRlZ2VyKCkgd2hpY2ggaGFzIGEgZmFzdCBz
bWFsbCBpbnRlZ2VyIGNvbnZlcnNpb24gY2hlY2suCiAgICAgbXkgJG5hdGl2ZVR5cGUgPSBHZXRO
YXRpdmVUeXBlKCR0eXBlKTsKLSAgICByZXR1cm4gInY4OjpJbnRlZ2VyOjpOZXcoJHZhbHVlKSIg
aWYgJG5hdGl2ZVR5cGUgZXEgImludCI7Ci0gICAgcmV0dXJuICJ2ODo6SW50ZWdlcjo6TmV3RnJv
bVVuc2lnbmVkKCR2YWx1ZSkiIGlmICRuYXRpdmVUeXBlIGVxICJ1bnNpZ25lZCI7CisgICAgcmV0
dXJuICJ2OEludGVnZXIoJHZhbHVlJGdldElzb2xhdGVBcmcpIiBpZiAkbmF0aXZlVHlwZSBlcSAi
aW50IjsKKyAgICByZXR1cm4gInY4VW5zaWduZWRJbnRlZ2VyKCR2YWx1ZSRnZXRJc29sYXRlQXJn
KSIgaWYgJG5hdGl2ZVR5cGUgZXEgInVuc2lnbmVkIjsKIAogICAgIHJldHVybiAidjhEYXRlT3JO
dWxsKCR2YWx1ZSRnZXRJc29sYXRlQXJnKSIgaWYgJHR5cGUgZXEgIkRhdGUiOwogICAgICMgbG9u
ZyBsb25nIGFuZCB1bnNpZ25lZCBsb25nIGxvbmcgYXJlIG5vdCByZXByZXNlbnRhYmxlIGluIEVD
TUFTY3JpcHQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCmluZGV4IDM3ODE3ZDVm
ZjdiNzcyZDA4ODM4ZWU2NWE0ZWI3NmY1NDViMDNhMzcuLjBhOWI4OGFkYTdlNzM1NDgwZjZjYmEx
M2QwZjQxMDFiOTEzMTVlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCkBA
IC00NSw3ICs0NSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZXhjaXRpbmdBdHRy
QXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwKIHsKICAgICBJTkNfU1RBVFMo
IkRPTS5UZXN0QWN0aXZlRE9NT2JqZWN0LmV4Y2l0aW5nQXR0ci5fZ2V0Iik7CiAgICAgVGVzdEFj
dGl2ZURPTU9iamVjdCogaW1wID0gVjhUZXN0QWN0aXZlRE9NT2JqZWN0Ojp0b05hdGl2ZShpbmZv
LkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPmV4Y2l0aW5nQXR0
cigpKTsKKyAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+ZXhjaXRpbmdBdHRyKCksIGluZm8uR2V0
SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBleGNpdGluZ0Z1
bmN0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXgg
NDBiOGQ5ZGJkNzY5Y2QyOTA4YmEzMzlkYjQ4Y2ZkNjBhMzBiMWRlMS4uMzcyZWFkZjg0ODAyNjI0
MGRhYWQ3MzgxNDMzZTMxY2IwODVjNGI1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKQEAgLTg2LDcgKzg2LDcgQEAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWFkT25seUludEF0dHJBdHRyR2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW0KIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnJl
YWRPbmx5SW50QXR0ci5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05h
dGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPnJl
YWRPbmx5SW50QXR0cigpKTsKKyAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+cmVhZE9ubHlJbnRB
dHRyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiByZWFkT25seVN0cmluZ0F0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtMTE0LDcgKzExNCw3IEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2hvcnRBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgY29uCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zaG9y
dEF0dHIuX2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5m
by5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5zaG9ydEF0dHIo
KSk7CisgICAgcmV0dXJuIHY4SW50ZWdlcihpbXAtPnNob3J0QXR0cigpLCBpbmZvLkdldElzb2xh
dGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNob3J0QXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQpAQCAtMTMwLDcgKzEzMCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdW5zaWduZWRTaG9ydEF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai51bnNpZ25lZFNob3J0QXR0ci5fZ2V0
Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigp
KTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPnVuc2lnbmVkU2hvcnRBdHRyKCkp
OworICAgIHJldHVybiB2OEludGVnZXIoaW1wLT51bnNpZ25lZFNob3J0QXR0cigpLCBpbmZvLkdl
dElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHVuc2lnbmVkU2hvcnRBdHRyQXR0clNldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC0xNDYsNyArMTQ2LDcgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpbnRBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmFtZSwgY29uc3QKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmludEF0dHIu
X2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5pbnRBdHRyKCkpOworICAg
IHJldHVybiB2OEludGVnZXIoaW1wLT5pbnRBdHRyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0K
IAogc3RhdGljIHZvaWQgaW50QXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQpAQCAtMjc0LDcgKzI3NCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVm
bGVjdGVkSW50ZWdyYWxBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluCiB7CiAgICAg
SU5DX1NUQVRTKCJET00uVGVzdE9iai5yZWZsZWN0ZWRJbnRlZ3JhbEF0dHIuX2dldCIpOwogICAg
IFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAg
cmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIpKTsKKyAgICByZXR1cm4gdjhJ
bnRlZ2VyKGltcC0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZs
ZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMg
dm9pZCByZWZsZWN0ZWRJbnRlZ3JhbEF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5m
byYgaW5mbykKQEAgLTI5MCw3ICsyOTAsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8dgogewog
ICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoucmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIu
X2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXdGcm9tVW5zaWduZWQoc3RkOjptYXgo
MCwgaW1wLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3Rl
ZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0cikpKTsKKyAgICByZXR1cm4gdjhVbnNpZ25lZEludGVn
ZXIoc3RkOjptYXgoMCwgaW1wLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0cikpLCBpbmZvLkdldElzb2xhdGUo
KSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyQXR0clNl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFs
dWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC0zNTQsNyArMzU0LDcgQEAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJBdHRy
R2V0dGVyKHY4OjpMb2NhbDx2ODoKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnJlZmxl
Y3RlZEN1c3RvbUludGVncmFsQXR0ci5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0
T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5l
dyhpbXAtPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29u
dGVudEludGVncmFsQXR0ckF0dHIpKTsKKyAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+Z2V0SW50
ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxB
dHRyQXR0ciksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHZvaWQgcmVmbGVjdGVk
Q3VzdG9tSW50ZWdyYWxBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
CkBAIC00MDYsNyArNDA2LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhdHRyV2l0
aEdldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHIKICAgICBpbnQgdiA9
IGltcC0+YXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpOwogICAgIGlmIChVTkxJS0VMWShlYykp
CiAgICAgICAgIHJldHVybiBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMsIGluZm8uR2V0SXNv
bGF0ZSgpKTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyh2KTsKKyAgICByZXR1cm4gdjhJ
bnRlZ2VyKHYsIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHZvaWQgYXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAg
LTQyNSw3ICs0MjUsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGF0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cgogewogICAgIElOQ19TVEFU
UygiRE9NLlRlc3RPYmouYXR0cldpdGhTZXR0ZXJFeGNlcHRpb24uX2dldCIpOwogICAgIFRlc3RP
YmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJu
IHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKKyAgICBy
ZXR1cm4gdjhJbnRlZ2VyKGltcC0+YXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSwgaW5mby5HZXRJ
c29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCBhdHRyV2l0aFNldHRlckV4Y2VwdGlvbkF0dHJT
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZh
bHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtNDg5LDcgKzQ4OSw3IEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlQXR0ckdl
dHRlcih2ODo6TG9jYWw8djg6OlN0CiAgICAgU2NyaXB0U3RhdGUqIHN0YXRlID0gU2NyaXB0U3Rh
dGU6OmN1cnJlbnQoKTsKICAgICBpZiAoIXN0YXRlKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+d2l0aFNjcmlwdFN0YXRl
QXR0cmlidXRlKHN0YXRlKSk7CisgICAgcmV0dXJuIHY4SW50ZWdlcihpbXAtPndpdGhTY3JpcHRT
dGF0ZUF0dHJpYnV0ZShzdGF0ZSksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHZv
aWQgd2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3Nvcklu
Zm8mIGluZm8pCkBAIC03MTcsNyArNzE3LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBjb25kaXRpb25hbEF0dHIxQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmEKIHsK
ICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmNvbmRpdGlvbmFsQXR0cjEuX2dldCIpOwogICAg
IFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAg
cmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5jb25kaXRpb25hbEF0dHIxKCkpOworICAgIHJl
dHVybiB2OEludGVnZXIoaW1wLT5jb25kaXRpb25hbEF0dHIxKCksIGluZm8uR2V0SXNvbGF0ZSgp
KTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKQpAQCAtNzQxLDcgKzc0MSw3IEBA
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uZGl0aW9uYWxBdHRyMkF0dHJHZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5j
b25kaXRpb25hbEF0dHIyLl9nZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRv
TmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+
Y29uZGl0aW9uYWxBdHRyMigpKTsKKyAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+Y29uZGl0aW9u
YWxBdHRyMigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQ29u
ZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCkBAIC03NjUsNyArNzY1LDcgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb25kaXRpb25hbEF0dHIzQXR0ckdldHRlcih2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmEKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmNvbmRpdGlv
bmFsQXR0cjMuX2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUo
aW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5jb25kaXRp
b25hbEF0dHIzKCkpOworICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5jb25kaXRpb25hbEF0dHIz
KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24x
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKQEAgLTgxNSw3ICs4MTUsNyBAQCBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGVuYWJsZWRBdFJ1bnRpbWVBdHRyMUF0dHJHZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbgogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouZW5hYmxlZEF0UnVudGlt
ZUF0dHIxLl9nZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGlu
Zm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+ZW5hYmxlZEF0
UnVudGltZUF0dHIxKCkpOworICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5lbmFibGVkQXRSdW50
aW1lQXR0cjEoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVk
QXRSdW50aW1lQXR0cjFBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAg
LTgzMSw3ICs4MzEsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGVuYWJsZWRBdFJ1
bnRpbWVBdHRyMkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbgogewogICAgIElOQ19TVEFU
UygiRE9NLlRlc3RPYmouZW5hYmxlZEF0UnVudGltZUF0dHIyLl9nZXQiKTsKICAgICBUZXN0T2Jq
KiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2
ODo6SW50ZWdlcjo6TmV3KGltcC0+ZW5hYmxlZEF0UnVudGltZUF0dHIyKCkpOworICAgIHJldHVy
biB2OEludGVnZXIoaW1wLT5lbmFibGVkQXRSdW50aW1lQXR0cjIoKSwgaW5mby5HZXRJc29sYXRl
KCkpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVkQXRSdW50aW1lQXR0cjJBdHRyU2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29u
c3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTg0Nyw3ICs4NDcsNyBAQCBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGVuYWJsZWRBdENvbnRleHRBdHRyMUF0dHJHZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbgogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouZW5hYmxlZEF0Q29u
dGV4dEF0dHIxLl9nZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+ZW5hYmxl
ZEF0Q29udGV4dEF0dHIxKCkpOworICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5lbmFibGVkQXRD
b250ZXh0QXR0cjEoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFi
bGVkQXRDb250ZXh0QXR0cjFBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2
ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykK
QEAgLTg2Myw3ICs4NjMsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGVuYWJsZWRB
dENvbnRleHRBdHRyMkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbgogewogICAgIElOQ19T
VEFUUygiRE9NLlRlc3RPYmouZW5hYmxlZEF0Q29udGV4dEF0dHIyLl9nZXQiKTsKICAgICBUZXN0
T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVy
biB2ODo6SW50ZWdlcjo6TmV3KGltcC0+ZW5hYmxlZEF0Q29udGV4dEF0dHIyKCkpOworICAgIHJl
dHVybiB2OEludGVnZXIoaW1wLT5lbmFibGVkQXRDb250ZXh0QXR0cjIoKSwgaW5mby5HZXRJc29s
YXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVkQXRDb250ZXh0QXR0cjJBdHRyU2V0dGVy
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTk1Myw3ICs5NTMsNyBAQCBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHN0cmF3YmVycnlBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCBjbwogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouc3RyYXdiZXJy
eS5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhv
bGRlcigpKTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPmJsdWViZXJyeSgpKTsK
KyAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+Ymx1ZWJlcnJ5KCksIGluZm8uR2V0SXNvbGF0ZSgp
KTsKIH0KIAogc3RhdGljIHZvaWQgc3RyYXdiZXJyeUF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQpAQCAtOTg1LDE0ICs5ODUsMTQgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBkZXNjcmlwdGlvbkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IGMKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmRlc2NyaXB0aW9uLl9nZXQiKTsKICAg
ICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAg
IHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+ZGVzY3JpcHRpb24oKSk7CisgICAgcmV0dXJu
IHY4SW50ZWdlcihpbXAtPmRlc2NyaXB0aW9uKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAog
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpZEF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NU
QVRTKCJET00uVGVzdE9iai5pZC5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2Jq
Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhp
bXAtPmlkKCkpOworICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5pZCgpLCBpbmZvLkdldElzb2xh
dGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGlkQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3Nvcklu
Zm8mIGluZm8pCkBAIC0xMDQ0LDcgKzEwNDQsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGludE1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAg
SU5DX1NUQVRTKCJET00uVGVzdE9iai5pbnRNZXRob2QiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBW
OFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdl
cjo6TmV3KGltcC0+aW50TWV0aG9kKCkpOworICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5pbnRN
ZXRob2QoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGludE1ldGhvZFdpdGhBcmdzQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKQEAgLTEwNTYsNyArMTA1Niw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaW50
TWV0aG9kV2l0aEFyZ3NDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzCiAgICAgRVhD
RVBUSU9OX0JMT0NLKGludCwgaW50QXJnLCB0b0ludDMyKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVS
KGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKICAgICBTVFJJTkdfVE9fVjhQQVJBTUVU
RVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIHN0ckFyZywgTUFZQkVfTUlTU0lOR19Q
QVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSk7CiAgICAgRVhDRVBUSU9OX0JM
T0NLKFRlc3RPYmoqLCBvYmpBcmcsIFY4VGVzdE9iajo6SGFzSW5zdGFuY2UoTUFZQkVfTUlTU0lO
R19QQVJBTUVURVIoYXJncywgMiwgRGVmYXVsdElzVW5kZWZpbmVkKSkgPyBWOFRlc3RPYmo6OnRv
TmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoTUFZQkVfTUlTU0lOR19QQVJBTUVU
RVIoYXJncywgMiwgRGVmYXVsdElzVW5kZWZpbmVkKSkpIDogMCk7Ci0gICAgcmV0dXJuIHY4OjpJ
bnRlZ2VyOjpOZXcoaW1wLT5pbnRNZXRob2RXaXRoQXJncyhpbnRBcmcsIHN0ckFyZywgb2JqQXJn
KSk7CisgICAgcmV0dXJuIHY4SW50ZWdlcihpbXAtPmludE1ldGhvZFdpdGhBcmdzKGludEFyZywg
c3RyQXJnLCBvYmpBcmcpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gb2JqTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKQEAgLTE2MDMsMTAgKzE2MDMsMTAgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBj
bGFzc01ldGhvZFdpdGhPcHRpb25hbENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMKIHsKICAg
ICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsIik7CiAgICAg
aWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMCkgewotICAgICAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5l
dyhUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRpb25hbCgpKTsKKyAgICAgICAgcmV0dXJuIHY4
SW50ZWdlcihUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRpb25hbCgpLCBhcmdzLkdldElzb2xh
dGUoKSk7CiAgICAgfQogICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIGFyZywgdG9JbnQzMihNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7Ci0gICAg
cmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoVGVzdE9iajo6Y2xhc3NNZXRob2RXaXRoT3B0aW9uYWwo
YXJnKSk7CisgICAgcmV0dXJuIHY4SW50ZWdlcihUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRp
b25hbChhcmcpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5jcHAKaW5kZXggMjhlY2Q5NDA4NTkwZjU5ZDU4NmZlN2JlOGFjMGIwYTcyMDhkODQxYi4u
M2IwZjJmNjdkNjEwMDJmODc4OWZhNDYxNmMwZmU3Yzk2NjdlNTUxMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTEw
Myw3ICsxMDMsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBvcnRzQXR0ckdldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3QgdgogICAgIE1lc3NhZ2VQb3J0QXJy
YXkgcG9ydHNDb3B5KCpwb3J0cyk7CiAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gcG9ydEFycmF5
ID0gdjg6OkFycmF5OjpOZXcocG9ydHNDb3B5LnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwb3J0c0NvcHkuc2l6ZSgpOyArK2kpCi0gICAgICAgIHBvcnRBcnJheS0+U2V0KHY4
OjpJbnRlZ2VyOjpOZXcoaSksIHRvVjgocG9ydHNDb3B5W2ldLmdldCgpLCBpbmZvLkdldElzb2xh
dGUoKSkpOworICAgICAgICBwb3J0QXJyYXktPlNldCh2OEludGVnZXIoaSwgaW5mby5HZXRJc29s
YXRlKCkpLCB0b1Y4KHBvcnRzQ29weVtpXS5nZXQoKSwgaW5mby5HZXRJc29sYXRlKCkpKTsKICAg
ICByZXR1cm4gcG9ydEFycmF5OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEJpbmRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5k
aW5nLmNwcAppbmRleCA2OTkwMTg2OTJhYWVlYjFjZTA5ODk3OGExYWVkM2MyOGUwYjJjMzRlLi42
ZTUyN2EyMjBhYzFkMjY0ODA1YzU3NmI4MzA3MGJlN2EyMTAyMzU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAKQEAgLTQ5MCw3ICs0OTAsMTggQEAgdjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IFN0cmluZ0NhY2hlOjp2OEV4dGVybmFsU3RyaW5nU2xvdyhTdHJpbmdJbXBs
KiBzdHJpbmdJbXBsLAogCiAgICAgcmV0dXJuIG5ld1N0cmluZzsKIH0KLSAgICAKKwordm9pZCBJ
bnRlZ2VyQ2FjaGU6OmNyZWF0ZVNtYWxsSW50ZWdlcnMoKQoreworICAgIEFTU0VSVCghbV9pbml0
aWFsaXplZCk7CisgICAgLy8gV2UgaW5pdGlhbGl6ZSBtX3NtYWxsSW50ZWdlcnMgbm90IGluIGEg
Y29uc3RydWN0b3IgYnV0IGluIHY4SW50ZWdlcigpLAorICAgIC8vIGJlY2F1c2UgSW50ZWdlcjo6
TmV3KCkgcmVxdWlyZXMgYSBIYW5kbGVTY29wZS4gQXQgdGhlIHBvaW50IHdoZXJlCisgICAgLy8g
SW50ZWdlckNhY2hlIGlzIGNvbnN0cnVjdGVkLCBhIEhhbmRsZVNjb3BlIG1pZ2h0IG5vdCBleGlz
dC4KKyAgICBmb3IgKGludCB2YWx1ZSA9IDA7IHZhbHVlIDwgTnVtYmVyT2ZDYWNoZWRTbWFsbElu
dGVnZXJzOyB2YWx1ZSsrKQorICAgICAgICBtX3NtYWxsSW50ZWdlcnNbdmFsdWVdID0gdjg6OlBl
cnNpc3RlbnQ8djg6OkludGVnZXI+OjpOZXcodjg6OkludGVnZXI6Ok5ldyh2YWx1ZSkpOworICAg
IG1faW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCiB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gY3JlYXRlUmF3VGVtcGxhdGUoKQogewogICAgIHY4OjpIYW5kbGVTY29wZSBzY29w
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKaW5kZXggMTAyOTZhNzAwYjVl
MzQ2MDQwOWVkZWU4NDM4ZTk5MDJlMzkwNmI5NS4uM2ZkZTViNGNiZjhjZjFiNmZhN2JlZWZjNjll
YzE4YzQ4NzVhZjg4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhC
aW5kaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKQEAg
LTg5LDYgKzg5LDM3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IG1fbGFzdFN0cmluZ0ltcGw7CiAgICAgfTsKIAorI2RlZmluZSBOdW1iZXJPZkNhY2hl
ZFNtYWxsSW50ZWdlcnMgNjQKKworICAgIGNsYXNzIEludGVnZXJDYWNoZSB7CisgICAgcHVibGlj
OgorICAgICAgICBJbnRlZ2VyQ2FjaGUoKSA6IG1faW5pdGlhbGl6ZWQoZmFsc2UpIHsgfTsKKwor
ICAgICAgICB2ODo6SGFuZGxlPHY4OjpJbnRlZ2VyPiB2OEludGVnZXIoaW50IHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIW1faW5pdGlhbGl6ZWQpKQorICAgICAg
ICAgICAgICAgIGNyZWF0ZVNtYWxsSW50ZWdlcnMoKTsKKyAgICAgICAgICAgIGlmIChMSUtFTFko
MCA8PSB2YWx1ZSAmJiB2YWx1ZSA8IE51bWJlck9mQ2FjaGVkU21hbGxJbnRlZ2VycykpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fc21hbGxJbnRlZ2Vyc1t2YWx1ZV07CisgICAgICAgICAgICBy
ZXR1cm4gdjg6OkludGVnZXI6Ok5ldyh2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICB2ODo6
SGFuZGxlPHY4OjpJbnRlZ2VyPiB2OFVuc2lnbmVkSW50ZWdlcih1bnNpZ25lZCB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFtX2luaXRpYWxpemVkKSkKKyAgICAg
ICAgICAgICAgICBjcmVhdGVTbWFsbEludGVnZXJzKCk7CisgICAgICAgICAgICBpZiAoTElLRUxZ
KHZhbHVlIDwgTnVtYmVyT2ZDYWNoZWRTbWFsbEludGVnZXJzKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9zbWFsbEludGVnZXJzW3ZhbHVlXTsKKyAgICAgICAgICAgIHJldHVybiB2ODo6SW50
ZWdlcjo6TmV3RnJvbVVuc2lnbmVkKHZhbHVlKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToK
KyAgICAgICAgdm9pZCBjcmVhdGVTbWFsbEludGVnZXJzKCk7CisKKyAgICAgICAgdjg6OlBlcnNp
c3RlbnQ8djg6OkludGVnZXI+IG1fc21hbGxJbnRlZ2Vyc1tOdW1iZXJPZkNhY2hlZFNtYWxsSW50
ZWdlcnNdOworICAgICAgICBib29sIG1faW5pdGlhbGl6ZWQ7CisgICAgfTsKKwogICAgIGNsYXNz
IFNjcmlwdEdDRXZlbnRMaXN0ZW5lcjsKIAogICAgIGNsYXNzIEdDRXZlbnREYXRhIHsKQEAgLTE0
NSw2ICsxNzYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH0KIAogICAgICAgICBT
dHJpbmdDYWNoZSogc3RyaW5nQ2FjaGUoKSB7IHJldHVybiAmbV9zdHJpbmdDYWNoZTsgfQorICAg
ICAgICBJbnRlZ2VyQ2FjaGUqIGludGVnZXJDYWNoZSgpIHsgcmV0dXJuICZtX2ludGVnZXJDYWNo
ZTsgfQorCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICAgICAgdm9pZCB2aXNpdEV4dGVybmFs
U3RyaW5ncyhFeHRlcm5hbFN0cmluZ1Zpc2l0b3IqKTsKICNlbmRpZgpAQCAtMTkzLDYgKzIyNiw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IG1fdG9TdHJpbmdUZW1wbGF0ZTsKICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IG1fbGF6eUV2ZW50TGlzdGVuZXJUb1N0cmluZ1RlbXBsYXRl
OwogICAgICAgICBTdHJpbmdDYWNoZSBtX3N0cmluZ0NhY2hlOworICAgICAgICBJbnRlZ2VyQ2Fj
aGUgbV9pbnRlZ2VyQ2FjaGU7CiAKICAgICAgICAgRE9NRGF0YUxpc3QgbV9kb21EYXRhTGlzdDsK
ICAgICAgICAgRE9NRGF0YVN0b3JlKiBtX2RvbURhdGFTdG9yZTsKQEAgLTI5Myw2ICszMjcsMTgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICByZXR1cm4gdjhFeHRlcm5hbFN0cmluZyhz
dHJpbmcsIGlzb2xhdGUpOwogICAgIH0KIAorICAgIGlubGluZSB2ODo6SGFuZGxlPHY4OjpJbnRl
Z2VyPiB2OEludGVnZXIoaW50IHZhbHVlLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCisgICAg
eworICAgICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklz
b2xhdGVEYXRhOjpjdXJyZW50KGlzb2xhdGUpOworICAgICAgICByZXR1cm4gZGF0YS0+aW50ZWdl
ckNhY2hlKCktPnY4SW50ZWdlcih2YWx1ZSk7CisgICAgfQorCisgICAgaW5saW5lIHY4OjpIYW5k
bGU8djg6OkludGVnZXI+IHY4VW5zaWduZWRJbnRlZ2VyKHVuc2lnbmVkIHZhbHVlLCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSA9IDApCisgICAgeworICAgICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0
YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KGlzb2xhdGUpOworICAg
ICAgICByZXR1cm4gZGF0YS0+aW50ZWdlckNhY2hlKCktPnY4VW5zaWduZWRJbnRlZ2VyKHZhbHVl
KTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB2OEFycmF5KGNvbnN0IFZlY3RvcjxUPiYgaXRlcmF0b3IsIHY4OjpJc29sYXRlKiBp
c29sYXRlKQogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149687</attachid>
            <date>2012-06-26 23:15:31 -0700</date>
            <delta_ts>2012-06-29 00:54:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90043-20120627151531.patch</filename>
            <type>text/plain</type>
            <size>23213</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMzA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWU2YTAwM2YzODM0NTZi
NTAwNjU0ZTM0M2JkZWRkNjk2NjhjZjM1YS4uMWEyZmNjNGE3ZDhhMzk5MGUwZjE2ZTAyZjcyNDE2
OWFhOGU1NjE1NyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTA2LTI2ICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVjhdIE9wdGltaXpl
IEludGVnZXI6Ok5ldygpIGJ5IGNhY2hpbmcgcGVyc2lzdGVudCBoYW5kbGVzIGZvciBzbWFsbCBp
bnRlZ2VycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTAwNDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGUgcGF0Y2ggaW1wcm92ZXMgcGVyZm9ybWFuY2Ugb2YgRHJvbWFlby9kb20tcXVlcnkuaHRtbCBi
eSAzLjYlLAorICAgICAgICBhbmQgQmluZGluZ3Mvc2Nyb2xsLXRvcC5odG1sIGJ5IDE3LjMlLgor
CisgICAgICAgIFRoZSBwZXJmb3JtYW5jZSByZXN1bHRzIGluIG15IENocm9taXVtL0xpbnV4Ogor
CisgICAgICAgIFtEcm9tYWVvL2RvbS1xdWVyeS5odG1sXQorICAgICAgICA3OTYzMTAuNCBydW5z
L3MgPT4gODI0NzQ1LjQgcnVucy9zICgrMy42JSkKKworICAgICAgICBbQmluZGluZ3Mvc2Nyb2xs
LXRvcC5odG1sXQorICAgICAgICAyMDQuNjggcnVucy9zID0+IDI0MC4xNSBydW5zL3MgKCsxNy4z
JSkKKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgVjhCaW5kaW5nUGVySXNvbGF0ZURh
dGE6OkludGVnZXJDYWNoZSAoanVzdCBsaWtlCisgICAgICAgIFY4QmluZGluZ1Blcklzb2xhdGVE
YXRhOjpTdHJpbmdDYWNoZSkgdG8gY2FjaGUgcGVyc2lzdGVudCBoYW5kbGVzCisgICAgICAgIGZv
ciBzbWFsbCBpbnRlZ2Vycy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGNoYW5nZSBpbiBi
ZWhhdmlvci4KKworICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5oOiBJbXBsZW1lbnRl
ZCB2OEludGVnZXIoKSBhbmQgdjhVbnNpZ25lZEludGVnZXIoKSwKKyAgICAgICAgd2hpY2ggcmV0
dXJucyBjYWNoZWQgcGVyc2lzdGVudCBoYW5kbGVzIGZvciBpbnRlZ2VycyBzbWFsbGVyIHRoYW4g
NjQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEludGVnZXJDYWNoZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnRlZ2VyQ2FjaGU6OkludGVnZXJDYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnRlZ2VyQ2FjaGU6OnY4SW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlZ2VyQ2Fj
aGU6OnY4VW5zaWduZWRJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4QmluZGluZ1Blcklz
b2xhdGVEYXRhOjppbnRlZ2VyQ2FjaGUpOgorICAgICAgICAoVjhCaW5kaW5nUGVySXNvbGF0ZURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6djhJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OnY4
VW5zaWduZWRJbnRlZ2VyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlZ2VyQ2FjaGU6OmNyZWF0
ZVNtYWxsSW50ZWdlcnMpOgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG06IFJlcGxhY2VkIEludGVnZXI6Ok5ldygpIGFuZCBJbnRlZ2VyOjpOZXdGcm9tVW5z
aWduZWQoKQorICAgICAgICB3aXRoIHY4SW50ZWdlcigpIGFuZCB2OFVuc2lnbmVkSW50ZWdlcigp
LgorICAgICAgICAoR2VuZXJhdGVOb3JtYWxBdHRyR2V0dGVyKToKKyAgICAgICAgKE5hdGl2ZVRv
SlNWYWx1ZSk6CisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0
aXZlRE9NT2JqZWN0LmNwcDogVXBkYXRlZCBydW4tYmluZGluZ3MtdGVzdHMgcmVzdWx0cy4KKyAg
ICAgICAgKFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3RWOEludGVybmFsOjpleGNpdGluZ0F0
dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
T2JqLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6cmVh
ZE9ubHlJbnRBdHRyQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRl
cm5hbDo6c2hvcnRBdHRyQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJ
bnRlcm5hbDo6dW5zaWduZWRTaG9ydEF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlRlc3RPYmpWOEludGVybmFsOjppbnRBdHRyQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVkSW50ZWdyYWxBdHRyQXR0ckdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVkVW5zaWduZWRJbnRl
Z3JhbEF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFs
OjpyZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RPYmpWOEludGVybmFsOjphdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmF0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6
d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpU
ZXN0T2JqVjhJbnRlcm5hbDo6Y29uZGl0aW9uYWxBdHRyMUF0dHJHZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmNvbmRpdGlvbmFsQXR0cjJBdHRyR2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpjb25kaXRpb25hbEF0dHIzQXR0
ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6ZW5hYmxlZEF0
UnVudGltZUF0dHIxQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRl
cm5hbDo6ZW5hYmxlZEF0UnVudGltZUF0dHIyQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXN0T2JqVjhJbnRlcm5hbDo6ZW5hYmxlZEF0Q29udGV4dEF0dHIxQXR0ckdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6ZW5hYmxlZEF0Q29udGV4dEF0dHIy
QXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6c3RyYXdi
ZXJyeUF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmRl
c2NyaXB0aW9uQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5h
bDo6aWRBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpp
bnRNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6
aW50TWV0aG9kV2l0aEFyZ3NDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJ
bnRlcm5hbDo6Y2xhc3NNZXRob2RXaXRoT3B0aW9uYWxDYWxsYmFjayk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZS5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZVY4SW50ZXJuYWw6OnBvcnRzQXR0ckdldHRlcik6CisKIDIwMTItMDYtMjYgIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgU3RvcCBjYWxsaW5nIG5v
ZGUoKSBhbmQgZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSBpbiBjb21wYXJlUG9zaXRpb25zCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
CmluZGV4IDI1NGVjOTM5NmJiNDI3MTFmY2UxNmJlMTA1MDEyMWRmNmZlZWNiMzUuLmIzNmRhNDAz
OTY0OTdmZWYyNjcyZWQwNTk3Zjk0MGNmMmExYmVmYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0xMDYwLDcgKzEwNjAs
NyBAQCBFTkQKICAgICBNZXNzYWdlUG9ydEFycmF5IHBvcnRzQ29weSgqcG9ydHMpOwogICAgIHY4
OjpMb2NhbDx2ODo6QXJyYXk+IHBvcnRBcnJheSA9IHY4OjpBcnJheTo6TmV3KHBvcnRzQ29weS5z
aXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9ydHNDb3B5LnNpemUoKTsgKytp
KQotICAgICAgICBwb3J0QXJyYXktPlNldCh2ODo6SW50ZWdlcjo6TmV3KGkpLCB0b1Y4KHBvcnRz
Q29weVtpXS5nZXQoKSwgaW5mby5HZXRJc29sYXRlKCkpKTsKKyAgICAgICAgcG9ydEFycmF5LT5T
ZXQodjhJbnRlZ2VyKGksIGluZm8uR2V0SXNvbGF0ZSgpKSwgdG9WOChwb3J0c0NvcHlbaV0uZ2V0
KCksIGluZm8uR2V0SXNvbGF0ZSgpKSk7CiAgICAgcmV0dXJuIHBvcnRBcnJheTsKIEVORAogICAg
IH0gZWxzZSB7CkBAIC0zODkyLDE0ICszODkyLDE0IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAg
ICAjIHNob3VsZCBiZSByZXR1cm5lZCBpbnN0ZWFkLgogICAgIGlmICgkc2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiUmVmbGVjdCJ9IGFuZCAoJHR5cGUgZXEgInVuc2lnbmVkIGxvbmci
IG9yICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCIpKSB7CiAgICAgICAgICR2YWx1ZSA9fiBzL2dl
dFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUvZ2V0SW50ZWdyYWxBdHRyaWJ1dGUvZzsKLSAgICAg
ICAgcmV0dXJuICJ2ODo6SW50ZWdlcjo6TmV3RnJvbVVuc2lnbmVkKHN0ZDo6bWF4KDAsICIgLiAk
dmFsdWUgLiAiKSkiOworICAgICAgICByZXR1cm4gInY4VW5zaWduZWRJbnRlZ2VyKHN0ZDo6bWF4
KDAsICIgLiAkdmFsdWUgLiAiKSRnZXRJc29sYXRlQXJnKSI7CiAgICAgfQogCiAgICAgIyBGb3Ig
YWxsIHRoZSB0eXBlcyB3aGVyZSB3ZSB1c2UgJ2ludCcgYXMgdGhlIHJlcHJlc2VudGF0aW9uIHR5
cGUsCi0gICAgIyB3ZSB1c2UgSW50ZWdlcjo6TmV3IHdoaWNoIGhhcyBhIGZhc3QgU21pIGNvbnZl
cnNpb24gY2hlY2suCisgICAgIyB3ZSB1c2UgdjhJbnRlZ2VyKCkgd2hpY2ggaGFzIGEgZmFzdCBz
bWFsbCBpbnRlZ2VyIGNvbnZlcnNpb24gY2hlY2suCiAgICAgbXkgJG5hdGl2ZVR5cGUgPSBHZXRO
YXRpdmVUeXBlKCR0eXBlKTsKLSAgICByZXR1cm4gInY4OjpJbnRlZ2VyOjpOZXcoJHZhbHVlKSIg
aWYgJG5hdGl2ZVR5cGUgZXEgImludCI7Ci0gICAgcmV0dXJuICJ2ODo6SW50ZWdlcjo6TmV3RnJv
bVVuc2lnbmVkKCR2YWx1ZSkiIGlmICRuYXRpdmVUeXBlIGVxICJ1bnNpZ25lZCI7CisgICAgcmV0
dXJuICJ2OEludGVnZXIoJHZhbHVlJGdldElzb2xhdGVBcmcpIiBpZiAkbmF0aXZlVHlwZSBlcSAi
aW50IjsKKyAgICByZXR1cm4gInY4VW5zaWduZWRJbnRlZ2VyKCR2YWx1ZSRnZXRJc29sYXRlQXJn
KSIgaWYgJG5hdGl2ZVR5cGUgZXEgInVuc2lnbmVkIjsKIAogICAgIHJldHVybiAidjhEYXRlT3JO
dWxsKCR2YWx1ZSRnZXRJc29sYXRlQXJnKSIgaWYgJHR5cGUgZXEgIkRhdGUiOwogICAgICMgbG9u
ZyBsb25nIGFuZCB1bnNpZ25lZCBsb25nIGxvbmcgYXJlIG5vdCByZXByZXNlbnRhYmxlIGluIEVD
TUFTY3JpcHQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCmluZGV4IDM3ODE3ZDVm
ZjdiNzcyZDA4ODM4ZWU2NWE0ZWI3NmY1NDViMDNhMzcuLjBhOWI4OGFkYTdlNzM1NDgwZjZjYmEx
M2QwZjQxMDFiOTEzMTVlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCkBA
IC00NSw3ICs0NSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZXhjaXRpbmdBdHRy
QXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwKIHsKICAgICBJTkNfU1RBVFMo
IkRPTS5UZXN0QWN0aXZlRE9NT2JqZWN0LmV4Y2l0aW5nQXR0ci5fZ2V0Iik7CiAgICAgVGVzdEFj
dGl2ZURPTU9iamVjdCogaW1wID0gVjhUZXN0QWN0aXZlRE9NT2JqZWN0Ojp0b05hdGl2ZShpbmZv
LkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPmV4Y2l0aW5nQXR0
cigpKTsKKyAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+ZXhjaXRpbmdBdHRyKCksIGluZm8uR2V0
SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBleGNpdGluZ0Z1
bmN0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXgg
NDBiOGQ5ZGJkNzY5Y2QyOTA4YmEzMzlkYjQ4Y2ZkNjBhMzBiMWRlMS4uMzcyZWFkZjg0ODAyNjI0
MGRhYWQ3MzgxNDMzZTMxY2IwODVjNGI1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKQEAgLTg2LDcgKzg2LDcgQEAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWFkT25seUludEF0dHJBdHRyR2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW0KIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnJl
YWRPbmx5SW50QXR0ci5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05h
dGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPnJl
YWRPbmx5SW50QXR0cigpKTsKKyAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+cmVhZE9ubHlJbnRB
dHRyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiByZWFkT25seVN0cmluZ0F0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtMTE0LDcgKzExNCw3IEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2hvcnRBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgY29uCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zaG9y
dEF0dHIuX2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5m
by5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5zaG9ydEF0dHIo
KSk7CisgICAgcmV0dXJuIHY4SW50ZWdlcihpbXAtPnNob3J0QXR0cigpLCBpbmZvLkdldElzb2xh
dGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNob3J0QXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQpAQCAtMTMwLDcgKzEzMCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdW5zaWduZWRTaG9ydEF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai51bnNpZ25lZFNob3J0QXR0ci5fZ2V0
Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigp
KTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPnVuc2lnbmVkU2hvcnRBdHRyKCkp
OworICAgIHJldHVybiB2OEludGVnZXIoaW1wLT51bnNpZ25lZFNob3J0QXR0cigpLCBpbmZvLkdl
dElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHVuc2lnbmVkU2hvcnRBdHRyQXR0clNldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC0xNDYsNyArMTQ2LDcgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpbnRBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmFtZSwgY29uc3QKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmludEF0dHIu
X2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5pbnRBdHRyKCkpOworICAg
IHJldHVybiB2OEludGVnZXIoaW1wLT5pbnRBdHRyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0K
IAogc3RhdGljIHZvaWQgaW50QXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQpAQCAtMjc0LDcgKzI3NCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVm
bGVjdGVkSW50ZWdyYWxBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluCiB7CiAgICAg
SU5DX1NUQVRTKCJET00uVGVzdE9iai5yZWZsZWN0ZWRJbnRlZ3JhbEF0dHIuX2dldCIpOwogICAg
IFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAg
cmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIpKTsKKyAgICByZXR1cm4gdjhJ
bnRlZ2VyKGltcC0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZs
ZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMg
dm9pZCByZWZsZWN0ZWRJbnRlZ3JhbEF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5m
byYgaW5mbykKQEAgLTI5MCw3ICsyOTAsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8dgogewog
ICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoucmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIu
X2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXdGcm9tVW5zaWduZWQoc3RkOjptYXgo
MCwgaW1wLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3Rl
ZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0cikpKTsKKyAgICByZXR1cm4gdjhVbnNpZ25lZEludGVn
ZXIoc3RkOjptYXgoMCwgaW1wLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0cikpLCBpbmZvLkdldElzb2xhdGUo
KSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyQXR0clNl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFs
dWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC0zNTQsNyArMzU0LDcgQEAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJBdHRy
R2V0dGVyKHY4OjpMb2NhbDx2ODoKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnJlZmxl
Y3RlZEN1c3RvbUludGVncmFsQXR0ci5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0
T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5l
dyhpbXAtPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29u
dGVudEludGVncmFsQXR0ckF0dHIpKTsKKyAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+Z2V0SW50
ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxB
dHRyQXR0ciksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHZvaWQgcmVmbGVjdGVk
Q3VzdG9tSW50ZWdyYWxBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
CkBAIC00MDYsNyArNDA2LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhdHRyV2l0
aEdldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHIKICAgICBpbnQgdiA9
IGltcC0+YXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpOwogICAgIGlmIChVTkxJS0VMWShlYykp
CiAgICAgICAgIHJldHVybiBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMsIGluZm8uR2V0SXNv
bGF0ZSgpKTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyh2KTsKKyAgICByZXR1cm4gdjhJ
bnRlZ2VyKHYsIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHZvaWQgYXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAg
LTQyNSw3ICs0MjUsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGF0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cgogewogICAgIElOQ19TVEFU
UygiRE9NLlRlc3RPYmouYXR0cldpdGhTZXR0ZXJFeGNlcHRpb24uX2dldCIpOwogICAgIFRlc3RP
YmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJu
IHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKKyAgICBy
ZXR1cm4gdjhJbnRlZ2VyKGltcC0+YXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSwgaW5mby5HZXRJ
c29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCBhdHRyV2l0aFNldHRlckV4Y2VwdGlvbkF0dHJT
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZh
bHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtNDg5LDcgKzQ4OSw3IEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlQXR0ckdl
dHRlcih2ODo6TG9jYWw8djg6OlN0CiAgICAgU2NyaXB0U3RhdGUqIHN0YXRlID0gU2NyaXB0U3Rh
dGU6OmN1cnJlbnQoKTsKICAgICBpZiAoIXN0YXRlKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+d2l0aFNjcmlwdFN0YXRl
QXR0cmlidXRlKHN0YXRlKSk7CisgICAgcmV0dXJuIHY4SW50ZWdlcihpbXAtPndpdGhTY3JpcHRT
dGF0ZUF0dHJpYnV0ZShzdGF0ZSksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHZv
aWQgd2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3Nvcklu
Zm8mIGluZm8pCkBAIC03MTcsNyArNzE3LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBjb25kaXRpb25hbEF0dHIxQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmEKIHsK
ICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmNvbmRpdGlvbmFsQXR0cjEuX2dldCIpOwogICAg
IFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAg
cmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5jb25kaXRpb25hbEF0dHIxKCkpOworICAgIHJl
dHVybiB2OEludGVnZXIoaW1wLT5jb25kaXRpb25hbEF0dHIxKCksIGluZm8uR2V0SXNvbGF0ZSgp
KTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKQpAQCAtNzQxLDcgKzc0MSw3IEBA
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uZGl0aW9uYWxBdHRyMkF0dHJHZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5j
b25kaXRpb25hbEF0dHIyLl9nZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRv
TmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+
Y29uZGl0aW9uYWxBdHRyMigpKTsKKyAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+Y29uZGl0aW9u
YWxBdHRyMigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQ29u
ZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCkBAIC03NjUsNyArNzY1LDcgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb25kaXRpb25hbEF0dHIzQXR0ckdldHRlcih2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmEKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmNvbmRpdGlv
bmFsQXR0cjMuX2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUo
aW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5jb25kaXRp
b25hbEF0dHIzKCkpOworICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5jb25kaXRpb25hbEF0dHIz
KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24x
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKQEAgLTgxNSw3ICs4MTUsNyBAQCBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGVuYWJsZWRBdFJ1bnRpbWVBdHRyMUF0dHJHZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbgogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouZW5hYmxlZEF0UnVudGlt
ZUF0dHIxLl9nZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGlu
Zm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+ZW5hYmxlZEF0
UnVudGltZUF0dHIxKCkpOworICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5lbmFibGVkQXRSdW50
aW1lQXR0cjEoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVk
QXRSdW50aW1lQXR0cjFBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAg
LTgzMSw3ICs4MzEsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGVuYWJsZWRBdFJ1
bnRpbWVBdHRyMkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbgogewogICAgIElOQ19TVEFU
UygiRE9NLlRlc3RPYmouZW5hYmxlZEF0UnVudGltZUF0dHIyLl9nZXQiKTsKICAgICBUZXN0T2Jq
KiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2
ODo6SW50ZWdlcjo6TmV3KGltcC0+ZW5hYmxlZEF0UnVudGltZUF0dHIyKCkpOworICAgIHJldHVy
biB2OEludGVnZXIoaW1wLT5lbmFibGVkQXRSdW50aW1lQXR0cjIoKSwgaW5mby5HZXRJc29sYXRl
KCkpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVkQXRSdW50aW1lQXR0cjJBdHRyU2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29u
c3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTg0Nyw3ICs4NDcsNyBAQCBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGVuYWJsZWRBdENvbnRleHRBdHRyMUF0dHJHZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbgogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouZW5hYmxlZEF0Q29u
dGV4dEF0dHIxLl9nZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+ZW5hYmxl
ZEF0Q29udGV4dEF0dHIxKCkpOworICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5lbmFibGVkQXRD
b250ZXh0QXR0cjEoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFi
bGVkQXRDb250ZXh0QXR0cjFBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2
ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykK
QEAgLTg2Myw3ICs4NjMsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGVuYWJsZWRB
dENvbnRleHRBdHRyMkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbgogewogICAgIElOQ19T
VEFUUygiRE9NLlRlc3RPYmouZW5hYmxlZEF0Q29udGV4dEF0dHIyLl9nZXQiKTsKICAgICBUZXN0
T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVy
biB2ODo6SW50ZWdlcjo6TmV3KGltcC0+ZW5hYmxlZEF0Q29udGV4dEF0dHIyKCkpOworICAgIHJl
dHVybiB2OEludGVnZXIoaW1wLT5lbmFibGVkQXRDb250ZXh0QXR0cjIoKSwgaW5mby5HZXRJc29s
YXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVkQXRDb250ZXh0QXR0cjJBdHRyU2V0dGVy
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTk1Myw3ICs5NTMsNyBAQCBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHN0cmF3YmVycnlBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCBjbwogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouc3RyYXdiZXJy
eS5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhv
bGRlcigpKTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPmJsdWViZXJyeSgpKTsK
KyAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+Ymx1ZWJlcnJ5KCksIGluZm8uR2V0SXNvbGF0ZSgp
KTsKIH0KIAogc3RhdGljIHZvaWQgc3RyYXdiZXJyeUF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQpAQCAtOTg1LDE0ICs5ODUsMTQgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBkZXNjcmlwdGlvbkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IGMKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmRlc2NyaXB0aW9uLl9nZXQiKTsKICAg
ICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAg
IHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+ZGVzY3JpcHRpb24oKSk7CisgICAgcmV0dXJu
IHY4SW50ZWdlcihpbXAtPmRlc2NyaXB0aW9uKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAog
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpZEF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NU
QVRTKCJET00uVGVzdE9iai5pZC5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2Jq
Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhp
bXAtPmlkKCkpOworICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5pZCgpLCBpbmZvLkdldElzb2xh
dGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGlkQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3Nvcklu
Zm8mIGluZm8pCkBAIC0xMDQ0LDcgKzEwNDQsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGludE1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAg
SU5DX1NUQVRTKCJET00uVGVzdE9iai5pbnRNZXRob2QiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBW
OFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdl
cjo6TmV3KGltcC0+aW50TWV0aG9kKCkpOworICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5pbnRN
ZXRob2QoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGludE1ldGhvZFdpdGhBcmdzQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKQEAgLTEwNTYsNyArMTA1Niw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaW50
TWV0aG9kV2l0aEFyZ3NDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzCiAgICAgRVhD
RVBUSU9OX0JMT0NLKGludCwgaW50QXJnLCB0b0ludDMyKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVS
KGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKICAgICBTVFJJTkdfVE9fVjhQQVJBTUVU
RVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIHN0ckFyZywgTUFZQkVfTUlTU0lOR19Q
QVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSk7CiAgICAgRVhDRVBUSU9OX0JM
T0NLKFRlc3RPYmoqLCBvYmpBcmcsIFY4VGVzdE9iajo6SGFzSW5zdGFuY2UoTUFZQkVfTUlTU0lO
R19QQVJBTUVURVIoYXJncywgMiwgRGVmYXVsdElzVW5kZWZpbmVkKSkgPyBWOFRlc3RPYmo6OnRv
TmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoTUFZQkVfTUlTU0lOR19QQVJBTUVU
RVIoYXJncywgMiwgRGVmYXVsdElzVW5kZWZpbmVkKSkpIDogMCk7Ci0gICAgcmV0dXJuIHY4OjpJ
bnRlZ2VyOjpOZXcoaW1wLT5pbnRNZXRob2RXaXRoQXJncyhpbnRBcmcsIHN0ckFyZywgb2JqQXJn
KSk7CisgICAgcmV0dXJuIHY4SW50ZWdlcihpbXAtPmludE1ldGhvZFdpdGhBcmdzKGludEFyZywg
c3RyQXJnLCBvYmpBcmcpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gb2JqTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKQEAgLTE2MDMsMTAgKzE2MDMsMTAgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBj
bGFzc01ldGhvZFdpdGhPcHRpb25hbENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMKIHsKICAg
ICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsIik7CiAgICAg
aWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMCkgewotICAgICAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5l
dyhUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRpb25hbCgpKTsKKyAgICAgICAgcmV0dXJuIHY4
SW50ZWdlcihUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRpb25hbCgpLCBhcmdzLkdldElzb2xh
dGUoKSk7CiAgICAgfQogICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIGFyZywgdG9JbnQzMihNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7Ci0gICAg
cmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoVGVzdE9iajo6Y2xhc3NNZXRob2RXaXRoT3B0aW9uYWwo
YXJnKSk7CisgICAgcmV0dXJuIHY4SW50ZWdlcihUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRp
b25hbChhcmcpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5jcHAKaW5kZXggMjhlY2Q5NDA4NTkwZjU5ZDU4NmZlN2JlOGFjMGIwYTcyMDhkODQxYi4u
M2IwZjJmNjdkNjEwMDJmODc4OWZhNDYxNmMwZmU3Yzk2NjdlNTUxMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTEw
Myw3ICsxMDMsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBvcnRzQXR0ckdldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3QgdgogICAgIE1lc3NhZ2VQb3J0QXJy
YXkgcG9ydHNDb3B5KCpwb3J0cyk7CiAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gcG9ydEFycmF5
ID0gdjg6OkFycmF5OjpOZXcocG9ydHNDb3B5LnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwb3J0c0NvcHkuc2l6ZSgpOyArK2kpCi0gICAgICAgIHBvcnRBcnJheS0+U2V0KHY4
OjpJbnRlZ2VyOjpOZXcoaSksIHRvVjgocG9ydHNDb3B5W2ldLmdldCgpLCBpbmZvLkdldElzb2xh
dGUoKSkpOworICAgICAgICBwb3J0QXJyYXktPlNldCh2OEludGVnZXIoaSwgaW5mby5HZXRJc29s
YXRlKCkpLCB0b1Y4KHBvcnRzQ29weVtpXS5nZXQoKSwgaW5mby5HZXRJc29sYXRlKCkpKTsKICAg
ICByZXR1cm4gcG9ydEFycmF5OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEJpbmRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5k
aW5nLmNwcAppbmRleCA2OTkwMTg2OTJhYWVlYjFjZTA5ODk3OGExYWVkM2MyOGUwYjJjMzRlLi44
ZTM2Mjc4NjJlM2Q2OGFjODQwMzU3ZjM5YjZiZGRiZWQzMzQyOTRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAKQEAgLTQ5MCw3ICs0OTAsMjcgQEAgdjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IFN0cmluZ0NhY2hlOjp2OEV4dGVybmFsU3RyaW5nU2xvdyhTdHJpbmdJbXBs
KiBzdHJpbmdJbXBsLAogCiAgICAgcmV0dXJuIG5ld1N0cmluZzsKIH0KLSAgICAKKwordm9pZCBJ
bnRlZ2VyQ2FjaGU6OmNyZWF0ZVNtYWxsSW50ZWdlcnMoKQoreworICAgIEFTU0VSVCghbV9pbml0
aWFsaXplZCk7CisgICAgLy8gV2UgaW5pdGlhbGl6ZSBtX3NtYWxsSW50ZWdlcnMgbm90IGluIGEg
Y29uc3RydWN0b3IgYnV0IGluIHY4SW50ZWdlcigpLAorICAgIC8vIGJlY2F1c2UgSW50ZWdlcjo6
TmV3KCkgcmVxdWlyZXMgYSBIYW5kbGVTY29wZS4gQXQgdGhlIHBvaW50IHdoZXJlCisgICAgLy8g
SW50ZWdlckNhY2hlIGlzIGNvbnN0cnVjdGVkLCBhIEhhbmRsZVNjb3BlIG1pZ2h0IG5vdCBleGlz
dC4KKyAgICBmb3IgKGludCB2YWx1ZSA9IDA7IHZhbHVlIDwgTnVtYmVyT2ZDYWNoZWRTbWFsbElu
dGVnZXJzOyB2YWx1ZSsrKQorICAgICAgICBtX3NtYWxsSW50ZWdlcnNbdmFsdWVdID0gdjg6OlBl
cnNpc3RlbnQ8djg6OkludGVnZXI+OjpOZXcodjg6OkludGVnZXI6Ok5ldyh2YWx1ZSkpOworICAg
IG1faW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCitJbnRlZ2VyQ2FjaGU6On5JbnRlZ2VyQ2FjaGUo
KQoreworICAgIGlmIChtX2luaXRpYWxpemVkKSB7CisgICAgICAgIGZvciAoaW50IHZhbHVlID0g
MDsgdmFsdWUgPCBOdW1iZXJPZkNhY2hlZFNtYWxsSW50ZWdlcnM7IHZhbHVlKyspCisgICAgICAg
ICAgICBtX3NtYWxsSW50ZWdlcnNbdmFsdWVdLkRpc3Bvc2UoKTsKKyAgICAgICAgbV9pbml0aWFs
aXplZCA9IGZhbHNlOworICAgIH0KK30KKwogdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IGNyZWF0ZVJhd1RlbXBsYXRlKCkKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCmluZGV4IDEwMjk2YTcwMGI1ZTM0
NjA0MDllZGVlODQzOGU5OTAyZTM5MDZiOTUuLmI0ODBlNmZhZTNiMmJiMWUxMjBhZDU4YzUzM2Jl
OGIwNTYwZWM2OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Qmlu
ZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCkBAIC04
OSw2ICs4OSwzOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlZlB0cjxTdHJpbmdJ
bXBsPiBtX2xhc3RTdHJpbmdJbXBsOwogICAgIH07CiAKKyAgICBjb25zdCBpbnQgTnVtYmVyT2ZD
YWNoZWRTbWFsbEludGVnZXJzID0gNjQ7CisKKyAgICBjbGFzcyBJbnRlZ2VyQ2FjaGUgeworICAg
IHB1YmxpYzoKKyAgICAgICAgSW50ZWdlckNhY2hlKCkgOiBtX2luaXRpYWxpemVkKGZhbHNlKSB7
IH07CisgICAgICAgIH5JbnRlZ2VyQ2FjaGUoKTsKKworICAgICAgICB2ODo6SGFuZGxlPHY4OjpJ
bnRlZ2VyPiB2OEludGVnZXIoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
VU5MSUtFTFkoIW1faW5pdGlhbGl6ZWQpKQorICAgICAgICAgICAgICAgIGNyZWF0ZVNtYWxsSW50
ZWdlcnMoKTsKKyAgICAgICAgICAgIGlmIChMSUtFTFkoMCA8PSB2YWx1ZSAmJiB2YWx1ZSA8IE51
bWJlck9mQ2FjaGVkU21hbGxJbnRlZ2VycykpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fc21h
bGxJbnRlZ2Vyc1t2YWx1ZV07CisgICAgICAgICAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyh2
YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICB2ODo6SGFuZGxlPHY4OjpJbnRlZ2VyPiB2OFVu
c2lnbmVkSW50ZWdlcih1bnNpZ25lZCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KFVOTElLRUxZKCFtX2luaXRpYWxpemVkKSkKKyAgICAgICAgICAgICAgICBjcmVhdGVTbWFsbElu
dGVnZXJzKCk7CisgICAgICAgICAgICBpZiAoTElLRUxZKHZhbHVlIDwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KE51bWJlck9mQ2FjaGVkU21hbGxJbnRlZ2VycykpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBtX3NtYWxsSW50ZWdlcnNbdmFsdWVdOworICAgICAgICAgICAgcmV0dXJuIHY4OjpJbnRl
Z2VyOjpOZXdGcm9tVW5zaWduZWQodmFsdWUpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgor
ICAgICAgICB2b2lkIGNyZWF0ZVNtYWxsSW50ZWdlcnMoKTsKKworICAgICAgICB2ODo6UGVyc2lz
dGVudDx2ODo6SW50ZWdlcj4gbV9zbWFsbEludGVnZXJzW051bWJlck9mQ2FjaGVkU21hbGxJbnRl
Z2Vyc107CisgICAgICAgIGJvb2wgbV9pbml0aWFsaXplZDsKKyAgICB9OworCiAgICAgY2xhc3Mg
U2NyaXB0R0NFdmVudExpc3RlbmVyOwogCiAgICAgY2xhc3MgR0NFdmVudERhdGEgewpAQCAtMTQ1
LDYgKzE3Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgfQogCiAgICAgICAgIFN0
cmluZ0NhY2hlKiBzdHJpbmdDYWNoZSgpIHsgcmV0dXJuICZtX3N0cmluZ0NhY2hlOyB9CisgICAg
ICAgIEludGVnZXJDYWNoZSogaW50ZWdlckNhY2hlKCkgeyByZXR1cm4gJm1faW50ZWdlckNhY2hl
OyB9CisKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgICAgICB2b2lkIHZpc2l0RXh0ZXJuYWxT
dHJpbmdzKEV4dGVybmFsU3RyaW5nVmlzaXRvciopOwogI2VuZGlmCkBAIC0xOTMsNiArMjI3LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gbV90b1N0cmluZ1RlbXBsYXRlOwogICAgICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gbV9sYXp5RXZlbnRMaXN0ZW5lclRvU3RyaW5nVGVtcGxhdGU7
CiAgICAgICAgIFN0cmluZ0NhY2hlIG1fc3RyaW5nQ2FjaGU7CisgICAgICAgIEludGVnZXJDYWNo
ZSBtX2ludGVnZXJDYWNoZTsKIAogICAgICAgICBET01EYXRhTGlzdCBtX2RvbURhdGFMaXN0Owog
ICAgICAgICBET01EYXRhU3RvcmUqIG1fZG9tRGF0YVN0b3JlOwpAQCAtMjkzLDYgKzMyOCwxOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHJldHVybiB2OEV4dGVybmFsU3RyaW5nKHN0
cmluZywgaXNvbGF0ZSk7CiAgICAgfQogCisgICAgaW5saW5lIHY4OjpIYW5kbGU8djg6OkludGVn
ZXI+IHY4SW50ZWdlcihpbnQgdmFsdWUsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKKyAgICB7
CisgICAgICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGE6OmN1cnJlbnQoaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiBkYXRhLT5pbnRlZ2Vy
Q2FjaGUoKS0+djhJbnRlZ2VyKHZhbHVlKTsKKyAgICB9CisKKyAgICBpbmxpbmUgdjg6OkhhbmRs
ZTx2ODo6SW50ZWdlcj4gdjhVbnNpZ25lZEludGVnZXIodW5zaWduZWQgdmFsdWUsIHY4OjpJc29s
YXRlKiBpc29sYXRlID0gMCkKKyAgICB7CisgICAgICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRh
KiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoaXNvbGF0ZSk7CisgICAg
ICAgIHJldHVybiBkYXRhLT5pbnRlZ2VyQ2FjaGUoKS0+djhVbnNpZ25lZEludGVnZXIodmFsdWUp
OworICAgIH0KKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHY4QXJyYXkoY29uc3QgVmVjdG9yPFQ+JiBpdGVyYXRvciwgdjg6Oklzb2xhdGUqIGlz
b2xhdGUpCiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149694</attachid>
            <date>2012-06-26 23:59:06 -0700</date>
            <delta_ts>2012-06-27 23:41:16 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>bug-90043-20120627155906.patch</filename>
            <type>text/plain</type>
            <size>23209</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMzA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWU2YTAwM2YzODM0NTZi
NTAwNjU0ZTM0M2JkZWRkNjk2NjhjZjM1YS4uMjZlODY2MTAzOWIxZWZiZDEzOWJiZDdmYTBmNzEx
Njg2MTk5ZjNmNiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTA2LTI2ICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVjhdIE9wdGltaXpl
IEludGVnZXI6Ok5ldygpIGJ5IGNhY2hpbmcgcGVyc2lzdGVudCBoYW5kbGVzIGZvciBzbWFsbCBp
bnRlZ2VycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTAwNDMKKworICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgorCisgICAgICAgIFRoZSBw
YXRjaCBpbXByb3ZlcyBwZXJmb3JtYW5jZSBvZiBEcm9tYWVvL2RvbS1xdWVyeS5odG1sIGJ5IDMu
NiUsCisgICAgICAgIGFuZCBCaW5kaW5ncy9zY3JvbGwtdG9wLmh0bWwgYnkgMTcuMyUuCisKKyAg
ICAgICAgVGhlIHBlcmZvcm1hbmNlIHJlc3VsdHMgaW4gbXkgQ2hyb21pdW0vTGludXg6CisKKyAg
ICAgICAgW0Ryb21hZW8vZG9tLXF1ZXJ5Lmh0bWxdCisgICAgICAgIDc5NjMxMC40IHJ1bnMvcyA9
PiA4MjQ3NDUuNCBydW5zL3MgKCszLjYlKQorCisgICAgICAgIFtCaW5kaW5ncy9zY3JvbGwtdG9w
Lmh0bWxdCisgICAgICAgIDIwNC42OCBydW5zL3MgPT4gMjQwLjE1IHJ1bnMvcyAoKzE3LjMlKQor
CisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6
SW50ZWdlckNhY2hlIChqdXN0IGxpa2UKKyAgICAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6
OlN0cmluZ0NhY2hlKSB0byBjYWNoZSBwZXJzaXN0ZW50IGhhbmRsZXMKKyAgICAgICAgZm9yIHNt
YWxsIGludGVnZXJzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2
aW9yLgorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmg6IEltcGxlbWVudGVkIHY4
SW50ZWdlcigpIGFuZCB2OFVuc2lnbmVkSW50ZWdlcigpLAorICAgICAgICB3aGljaCByZXR1cm5z
IGNhY2hlZCBwZXJzaXN0ZW50IGhhbmRsZXMgZm9yIGludGVnZXJzIHNtYWxsZXIgdGhhbiA2NC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW50ZWdlckNhY2hlKToKKyAgICAgICAgKFdl
YkNvcmU6OkludGVnZXJDYWNoZTo6SW50ZWdlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVnZXJDYWNoZTo6djhJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVnZXJDYWNoZTo6
djhVbnNpZ25lZEludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhCaW5kaW5nUGVySXNvbGF0
ZURhdGE6OmludGVnZXJDYWNoZSk6CisgICAgICAgIChWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjp2OEludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6djhVbnNp
Z25lZEludGVnZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVnZXJDYWNoZTo6Y3JlYXRlU21h
bGxJbnRlZ2Vycyk6CisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbTogUmVwbGFjZWQgSW50ZWdlcjo6TmV3KCkgYW5kIEludGVnZXI6Ok5ld0Zyb21VbnNpZ25l
ZCgpCisgICAgICAgIHdpdGggdjhJbnRlZ2VyKCkgYW5kIHY4VW5zaWduZWRJbnRlZ2VyKCkuCisg
ICAgICAgIChHZW5lcmF0ZU5vcm1hbEF0dHJHZXR0ZXIpOgorICAgICAgICAoTmF0aXZlVG9KU1Zh
bHVlKToKKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVE
T01PYmplY3QuY3BwOiBVcGRhdGVkIHJ1bi1iaW5kaW5ncy10ZXN0cyByZXN1bHRzLgorICAgICAg
ICAoV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdFY4SW50ZXJuYWw6OmV4Y2l0aW5nQXR0ckF0
dHJHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmou
Y3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpyZWFkT25s
eUludEF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFs
OjpzaG9ydEF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVy
bmFsOjp1bnNpZ25lZFNob3J0QXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVz
dE9ialY4SW50ZXJuYWw6OmludEF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
c3RPYmpWOEludGVybmFsOjpyZWZsZWN0ZWRJbnRlZ3JhbEF0dHJBdHRyR2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpyZWZsZWN0ZWRVbnNpZ25lZEludGVncmFs
QXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OnJl
ZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
VGVzdE9ialY4SW50ZXJuYWw6OmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6YXR0cldpdGhTZXR0ZXJFeGNlcHRp
b25BdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjp3aXRo
U2NyaXB0U3RhdGVBdHRyaWJ1dGVBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RP
YmpWOEludGVybmFsOjpjb25kaXRpb25hbEF0dHIxQXR0ckdldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6Y29uZGl0aW9uYWxBdHRyMkF0dHJHZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmNvbmRpdGlvbmFsQXR0cjNBdHRyR2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjplbmFibGVkQXRSdW50
aW1lQXR0cjFBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFs
OjplbmFibGVkQXRSdW50aW1lQXR0cjJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
c3RPYmpWOEludGVybmFsOjplbmFibGVkQXRDb250ZXh0QXR0cjFBdHRyR2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjplbmFibGVkQXRDb250ZXh0QXR0cjJBdHRy
R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpzdHJhd2JlcnJ5
QXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6ZGVzY3Jp
cHRpb25BdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpp
ZEF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmludE1l
dGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjppbnRN
ZXRob2RXaXRoQXJnc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVy
bmFsOjpjbGFzc01ldGhvZFdpdGhPcHRpb25hbENhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNw
cDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlVjhJbnRlcm5hbDo6cG9ydHNBdHRyR2V0dGVyKToKKwogMjAxMi0wNi0yNiAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBTdG9wIGNhbGxpbmcgbm9kZSgp
IGFuZCBkZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIGluIGNvbXBhcmVQb3NpdGlvbnMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5k
ZXggMjU0ZWM5Mzk2YmI0MjcxMWZjZTE2YmUxMDUwMTIxZGY2ZmVlY2IzNS4uYjM2ZGE0MDM5NjQ5
N2ZlZjI2NzJlZDA1OTdmOTQwY2YyYTFiZWZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTEwNjAsNyArMTA2MCw3IEBA
IEVORAogICAgIE1lc3NhZ2VQb3J0QXJyYXkgcG9ydHNDb3B5KCpwb3J0cyk7CiAgICAgdjg6Okxv
Y2FsPHY4OjpBcnJheT4gcG9ydEFycmF5ID0gdjg6OkFycmF5OjpOZXcocG9ydHNDb3B5LnNpemUo
KSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb3J0c0NvcHkuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIHBvcnRBcnJheS0+U2V0KHY4OjpJbnRlZ2VyOjpOZXcoaSksIHRvVjgocG9ydHNDb3B5
W2ldLmdldCgpLCBpbmZvLkdldElzb2xhdGUoKSkpOworICAgICAgICBwb3J0QXJyYXktPlNldCh2
OEludGVnZXIoaSwgaW5mby5HZXRJc29sYXRlKCkpLCB0b1Y4KHBvcnRzQ29weVtpXS5nZXQoKSwg
aW5mby5HZXRJc29sYXRlKCkpKTsKICAgICByZXR1cm4gcG9ydEFycmF5OwogRU5ECiAgICAgfSBl
bHNlIHsKQEAgLTM4OTIsMTQgKzM4OTIsMTQgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgICMg
c2hvdWxkIGJlIHJldHVybmVkIGluc3RlYWQuCiAgICAgaWYgKCRzaWduYXR1cmUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJSZWZsZWN0In0gYW5kICgkdHlwZSBlcSAidW5zaWduZWQgbG9uZyIgb3Ig
JHR5cGUgZXEgInVuc2lnbmVkIHNob3J0IikpIHsKICAgICAgICAgJHZhbHVlID1+IHMvZ2V0VW5z
aWduZWRJbnRlZ3JhbEF0dHJpYnV0ZS9nZXRJbnRlZ3JhbEF0dHJpYnV0ZS9nOwotICAgICAgICBy
ZXR1cm4gInY4OjpJbnRlZ2VyOjpOZXdGcm9tVW5zaWduZWQoc3RkOjptYXgoMCwgIiAuICR2YWx1
ZSAuICIpKSI7CisgICAgICAgIHJldHVybiAidjhVbnNpZ25lZEludGVnZXIoc3RkOjptYXgoMCwg
IiAuICR2YWx1ZSAuICIpJGdldElzb2xhdGVBcmcpIjsKICAgICB9CiAKICAgICAjIEZvciBhbGwg
dGhlIHR5cGVzIHdoZXJlIHdlIHVzZSAnaW50JyBhcyB0aGUgcmVwcmVzZW50YXRpb24gdHlwZSwK
LSAgICAjIHdlIHVzZSBJbnRlZ2VyOjpOZXcgd2hpY2ggaGFzIGEgZmFzdCBTbWkgY29udmVyc2lv
biBjaGVjay4KKyAgICAjIHdlIHVzZSB2OEludGVnZXIoKSB3aGljaCBoYXMgYSBmYXN0IHNtYWxs
IGludGVnZXIgY29udmVyc2lvbiBjaGVjay4KICAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2
ZVR5cGUoJHR5cGUpOwotICAgIHJldHVybiAidjg6OkludGVnZXI6Ok5ldygkdmFsdWUpIiBpZiAk
bmF0aXZlVHlwZSBlcSAiaW50IjsKLSAgICByZXR1cm4gInY4OjpJbnRlZ2VyOjpOZXdGcm9tVW5z
aWduZWQoJHZhbHVlKSIgaWYgJG5hdGl2ZVR5cGUgZXEgInVuc2lnbmVkIjsKKyAgICByZXR1cm4g
InY4SW50ZWdlcigkdmFsdWUkZ2V0SXNvbGF0ZUFyZykiIGlmICRuYXRpdmVUeXBlIGVxICJpbnQi
OworICAgIHJldHVybiAidjhVbnNpZ25lZEludGVnZXIoJHZhbHVlJGdldElzb2xhdGVBcmcpIiBp
ZiAkbmF0aXZlVHlwZSBlcSAidW5zaWduZWQiOwogCiAgICAgcmV0dXJuICJ2OERhdGVPck51bGwo
JHZhbHVlJGdldElzb2xhdGVBcmcpIiBpZiAkdHlwZSBlcSAiRGF0ZSI7CiAgICAgIyBsb25nIGxv
bmcgYW5kIHVuc2lnbmVkIGxvbmcgbG9uZyBhcmUgbm90IHJlcHJlc2VudGFibGUgaW4gRUNNQVNj
cmlwdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKaW5kZXggMzc4MTdkNWZmN2I3
NzJkMDg4MzhlZTY1YTRlYjc2ZjU0NWIwM2EzNy4uMGE5Yjg4YWRhN2U3MzU0ODBmNmNiYTEzZDBm
NDEwMWI5MTMxNWU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKQEAgLTQ1
LDcgKzQ1LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBleGNpdGluZ0F0dHJBdHRy
R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLAogewogICAgIElOQ19TVEFUUygiRE9N
LlRlc3RBY3RpdmVET01PYmplY3QuZXhjaXRpbmdBdHRyLl9nZXQiKTsKICAgICBUZXN0QWN0aXZl
RE9NT2JqZWN0KiBpbXAgPSBWOFRlc3RBY3RpdmVET01PYmplY3Q6OnRvTmF0aXZlKGluZm8uSG9s
ZGVyKCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+ZXhjaXRpbmdBdHRyKCkp
OworICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5leGNpdGluZ0F0dHIoKSwgaW5mby5HZXRJc29s
YXRlKCkpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGV4Y2l0aW5nRnVuY3Rp
b25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAppbmRleCA0MGI4
ZDlkYmQ3NjljZDI5MDhiYTMzOWRiNDhjZmQ2MGEzMGIxZGUxLi4zNzJlYWRmODQ4MDI2MjQwZGFh
ZDczODE0MzNlMzFjYjA4NWM0YjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcApAQCAtODYsNyArODYsNyBAQCBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlYWRPbmx5SW50QXR0ckF0dHJHZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoucmVhZE9u
bHlJbnRBdHRyLl9nZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+cmVhZE9u
bHlJbnRBdHRyKCkpOworICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5yZWFkT25seUludEF0dHIo
KSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHJlYWRPbmx5U3RyaW5nQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC0xMTQsNyArMTE0LDcgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzaG9ydEF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCBjb24KIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnNob3J0QXR0
ci5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhv
bGRlcigpKTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPnNob3J0QXR0cigpKTsK
KyAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+c2hvcnRBdHRyKCksIGluZm8uR2V0SXNvbGF0ZSgp
KTsKIH0KIAogc3RhdGljIHZvaWQgc2hvcnRBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCkBAIC0xMzAsNyArMTMwLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB1bnNpZ25lZFNob3J0QXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG4K
IHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnVuc2lnbmVkU2hvcnRBdHRyLl9nZXQiKTsK
ICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwot
ICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+dW5zaWduZWRTaG9ydEF0dHIoKSk7Cisg
ICAgcmV0dXJuIHY4SW50ZWdlcihpbXAtPnVuc2lnbmVkU2hvcnRBdHRyKCksIGluZm8uR2V0SXNv
bGF0ZSgpKTsKIH0KIAogc3RhdGljIHZvaWQgdW5zaWduZWRTaG9ydEF0dHJBdHRyU2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29u
c3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTE0Niw3ICsxNDYsNyBAQCBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGludEF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCBjb25zdAogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouaW50QXR0ci5fZ2V0
Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigp
KTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPmludEF0dHIoKSk7CisgICAgcmV0
dXJuIHY4SW50ZWdlcihpbXAtPmludEF0dHIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBz
dGF0aWMgdm9pZCBpbnRBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
CkBAIC0yNzQsNyArMjc0LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWZsZWN0
ZWRJbnRlZ3JhbEF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW4KIHsKICAgICBJTkNf
U1RBVFMoIkRPTS5UZXN0T2JqLnJlZmxlY3RlZEludGVncmFsQXR0ci5fZ2V0Iik7CiAgICAgVGVz
dE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1
cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0cikpOworICAgIHJldHVybiB2OEludGVn
ZXIoaW1wLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3Rl
ZGludGVncmFsYXR0ckF0dHIpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lk
IHJlZmxlY3RlZEludGVncmFsQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQpAQCAtMjkwLDcgKzI5MCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVm
bGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2CiB7CiAgICAg
SU5DX1NUQVRTKCJET00uVGVzdE9iai5yZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ci5fZ2V0
Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigp
KTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ld0Zyb21VbnNpZ25lZChzdGQ6Om1heCgwLCBp
bXAtPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5z
aWduZWRpbnRlZ3JhbGF0dHJBdHRyKSkpOworICAgIHJldHVybiB2OFVuc2lnbmVkSW50ZWdlcihz
dGQ6Om1heCgwLCBpbXAtPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
cmVmbGVjdGVkdW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRyKSksIGluZm8uR2V0SXNvbGF0ZSgpKTsK
IH0KIAogc3RhdGljIHZvaWQgcmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJBdHRyU2V0dGVy
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTM1NCw3ICszNTQsNyBAQCBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ckF0dHJHZXR0
ZXIodjg6OkxvY2FsPHY4OgogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoucmVmbGVjdGVk
Q3VzdG9tSW50ZWdyYWxBdHRyLl9nZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6
OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGlt
cC0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50
SW50ZWdyYWxBdHRyQXR0cikpOworICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5nZXRJbnRlZ3Jh
bEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJB
dHRyKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCByZWZsZWN0ZWRDdXN0
b21JbnRlZ3JhbEF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAg
LTQwNiw3ICs0MDYsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGF0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cgogICAgIGludCB2ID0gaW1w
LT5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYyk7CiAgICAgaWYgKFVOTElLRUxZKGVjKSkKICAg
ICAgICAgcmV0dXJuIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYywgaW5mby5HZXRJc29sYXRl
KCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KHYpOworICAgIHJldHVybiB2OEludGVn
ZXIodiwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCBhdHRyV2l0aEdldHRl
ckV4Y2VwdGlvbkF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtNDI1
LDcgKzQyNSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXR0cldpdGhTZXR0ZXJF
eGNlcHRpb25BdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyCiB7CiAgICAgSU5DX1NUQVRTKCJE
T00uVGVzdE9iai5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbi5fZ2V0Iik7CiAgICAgVGVzdE9iaiog
aW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjg6
OkludGVnZXI6Ok5ldyhpbXAtPmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOworICAgIHJldHVy
biB2OEludGVnZXIoaW1wLT5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpLCBpbmZvLkdldElzb2xh
dGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uQXR0clNldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC00ODksNyArNDg5LDcgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVBdHRyR2V0dGVy
KHY4OjpMb2NhbDx2ODo6U3QKICAgICBTY3JpcHRTdGF0ZSogc3RhdGUgPSBTY3JpcHRTdGF0ZTo6
Y3VycmVudCgpOwogICAgIGlmICghc3RhdGUpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT53aXRoU2NyaXB0U3RhdGVBdHRy
aWJ1dGUoc3RhdGUpKTsKKyAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+d2l0aFNjcmlwdFN0YXRl
QXR0cmlidXRlKHN0YXRlKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCB3
aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKQEAgLTcxNyw3ICs3MTcsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNv
bmRpdGlvbmFsQXR0cjFBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYQogewogICAg
IElOQ19TVEFUUygiRE9NLlRlc3RPYmouY29uZGl0aW9uYWxBdHRyMS5fZ2V0Iik7CiAgICAgVGVz
dE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1
cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPmNvbmRpdGlvbmFsQXR0cjEoKSk7CisgICAgcmV0dXJu
IHY4SW50ZWdlcihpbXAtPmNvbmRpdGlvbmFsQXR0cjEoKSwgaW5mby5HZXRJc29sYXRlKCkpOwog
fQogCiAjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpCkBAIC03NDEsNyArNzQxLDcgQEAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb25kaXRpb25hbEF0dHIyQXR0ckdldHRlcih2ODo6
TG9jYWw8djg6OlN0cmluZz4gbmEKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmNvbmRp
dGlvbmFsQXR0cjIuX2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRp
dmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5jb25k
aXRpb25hbEF0dHIyKCkpOworICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5jb25kaXRpb25hbEF0
dHIyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShDb25kaXRp
b24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKQEAgLTc2NSw3ICs3NjUsNyBAQCBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGNvbmRpdGlvbmFsQXR0cjNBdHRyR2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouY29uZGl0aW9uYWxB
dHRyMy5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZv
LkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPmNvbmRpdGlvbmFs
QXR0cjMoKSk7CisgICAgcmV0dXJuIHY4SW50ZWdlcihpbXAtPmNvbmRpdGlvbmFsQXR0cjMoKSwg
aW5mby5HZXRJc29sYXRlKCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpIHx8
IEVOQUJMRShDb25kaXRpb24yKQpAQCAtODE1LDcgKzgxNSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gZW5hYmxlZEF0UnVudGltZUF0dHIxQXR0ckdldHRlcih2ODo6TG9jYWw8djg6
OlN0cmluCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5lbmFibGVkQXRSdW50aW1lQXR0
cjEuX2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5lbmFibGVkQXRSdW50
aW1lQXR0cjEoKSk7CisgICAgcmV0dXJuIHY4SW50ZWdlcihpbXAtPmVuYWJsZWRBdFJ1bnRpbWVB
dHRyMSgpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZWRBdFJ1
bnRpbWVBdHRyMUF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtODMx
LDcgKzgzMSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZW5hYmxlZEF0UnVudGlt
ZUF0dHIyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluCiB7CiAgICAgSU5DX1NUQVRTKCJE
T00uVGVzdE9iai5lbmFibGVkQXRSdW50aW1lQXR0cjIuX2dldCIpOwogICAgIFRlc3RPYmoqIGlt
cCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJ
bnRlZ2VyOjpOZXcoaW1wLT5lbmFibGVkQXRSdW50aW1lQXR0cjIoKSk7CisgICAgcmV0dXJuIHY4
SW50ZWdlcihpbXAtPmVuYWJsZWRBdFJ1bnRpbWVBdHRyMigpLCBpbmZvLkdldElzb2xhdGUoKSk7
CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZWRBdFJ1bnRpbWVBdHRyMkF0dHJTZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2
ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtODQ3LDcgKzg0Nyw3IEBAIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gZW5hYmxlZEF0Q29udGV4dEF0dHIxQXR0ckdldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5lbmFibGVkQXRDb250ZXh0
QXR0cjEuX2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5m
by5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5lbmFibGVkQXRD
b250ZXh0QXR0cjEoKSk7CisgICAgcmV0dXJuIHY4SW50ZWdlcihpbXAtPmVuYWJsZWRBdENvbnRl
eHRBdHRyMSgpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZWRB
dENvbnRleHRBdHRyMUF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAt
ODYzLDcgKzg2Myw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZW5hYmxlZEF0Q29u
dGV4dEF0dHIyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluCiB7CiAgICAgSU5DX1NUQVRT
KCJET00uVGVzdE9iai5lbmFibGVkQXRDb250ZXh0QXR0cjIuX2dldCIpOwogICAgIFRlc3RPYmoq
IGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4
OjpJbnRlZ2VyOjpOZXcoaW1wLT5lbmFibGVkQXRDb250ZXh0QXR0cjIoKSk7CisgICAgcmV0dXJu
IHY4SW50ZWdlcihpbXAtPmVuYWJsZWRBdENvbnRleHRBdHRyMigpLCBpbmZvLkdldElzb2xhdGUo
KSk7CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZWRBdENvbnRleHRBdHRyMkF0dHJTZXR0ZXIodjg6
OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtOTUzLDcgKzk1Myw3IEBAIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gc3RyYXdiZXJyeUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIGNvCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zdHJhd2JlcnJ5Ll9n
ZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVy
KCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+Ymx1ZWJlcnJ5KCkpOworICAg
IHJldHVybiB2OEludGVnZXIoaW1wLT5ibHVlYmVycnkoKSwgaW5mby5HZXRJc29sYXRlKCkpOwog
fQogCiBzdGF0aWMgdm9pZCBzdHJhd2JlcnJ5QXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3Nvcklu
Zm8mIGluZm8pCkBAIC05ODUsMTQgKzk4NSwxNCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGRlc2NyaXB0aW9uQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgYwog
ewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouZGVzY3JpcHRpb24uX2dldCIpOwogICAgIFRl
c3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0
dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5kZXNjcmlwdGlvbigpKTsKKyAgICByZXR1cm4gdjhJ
bnRlZ2VyKGltcC0+ZGVzY3JpcHRpb24oKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGlkQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBJTkNfU1RBVFMo
IkRPTS5UZXN0T2JqLmlkLl9nZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRv
TmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+
aWQoKSk7CisgICAgcmV0dXJuIHY4SW50ZWdlcihpbXAtPmlkKCksIGluZm8uR2V0SXNvbGF0ZSgp
KTsKIH0KIAogc3RhdGljIHZvaWQgaWRBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKQEAgLTEwNDQsNyArMTA0NCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
aW50TWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNf
U1RBVFMoIkRPTS5UZXN0T2JqLmludE1ldGhvZCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVz
dE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpO
ZXcoaW1wLT5pbnRNZXRob2QoKSk7CisgICAgcmV0dXJuIHY4SW50ZWdlcihpbXAtPmludE1ldGhv
ZCgpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gaW50TWV0aG9kV2l0aEFyZ3NDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpA
QCAtMTA1Niw3ICsxMDU2LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpbnRNZXRo
b2RXaXRoQXJnc0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MKICAgICBFWENFUFRJ
T05fQkxPQ0soaW50LCBpbnRBcmcsIHRvSW50MzIoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJn
cywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOwogICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9F
WENFUFRJT05fQkxPQ0soVjhQYXJhbWV0ZXI8Piwgc3RyQXJnLCBNQVlCRV9NSVNTSU5HX1BBUkFN
RVRFUihhcmdzLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKICAgICBFWENFUFRJT05fQkxPQ0so
VGVzdE9iaiosIG9iakFyZywgVjhUZXN0T2JqOjpIYXNJbnN0YW5jZShNQVlCRV9NSVNTSU5HX1BB
UkFNRVRFUihhcmdzLCAyLCBEZWZhdWx0SXNVbmRlZmluZWQpKSA/IFY4VGVzdE9iajo6dG9OYXRp
dmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihh
cmdzLCAyLCBEZWZhdWx0SXNVbmRlZmluZWQpKSkgOiAwKTsKLSAgICByZXR1cm4gdjg6OkludGVn
ZXI6Ok5ldyhpbXAtPmludE1ldGhvZFdpdGhBcmdzKGludEFyZywgc3RyQXJnLCBvYmpBcmcpKTsK
KyAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+aW50TWV0aG9kV2l0aEFyZ3MoaW50QXJnLCBzdHJB
cmcsIG9iakFyZyksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBvYmpNZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpA
QCAtMTYwMywxMCArMTYwMywxMCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNsYXNz
TWV0aG9kV2l0aE9wdGlvbmFsQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cwogewogICAgIElO
Q19TVEFUUygiRE9NLlRlc3RPYmouY2xhc3NNZXRob2RXaXRoT3B0aW9uYWwiKTsKICAgICBpZiAo
YXJncy5MZW5ndGgoKSA8PSAwKSB7Ci0gICAgICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KFRl
c3RPYmo6OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKCkpOworICAgICAgICByZXR1cm4gdjhJbnRl
Z2VyKFRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKCksIGFyZ3MuR2V0SXNvbGF0ZSgp
KTsKICAgICB9CiAgICAgRVhDRVBUSU9OX0JMT0NLKGludCwgYXJnLCB0b0ludDMyKE1BWUJFX01J
U1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKLSAgICByZXR1
cm4gdjg6OkludGVnZXI6Ok5ldyhUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRpb25hbChhcmcp
KTsKKyAgICByZXR1cm4gdjhJbnRlZ2VyKFRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFs
KGFyZyksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAogI2lmIEVOQUJMRShDb25kaXRpb24xKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmNwcAppbmRleCAyOGVjZDk0MDg1OTBmNTlkNTg2ZmU3YmU4YWMwYjBhNzIwOGQ4NDFiLi4zYjBm
MmY2N2Q2MTAwMmY4Nzg5ZmE0NjE2YzBmZTdjOTY2N2U1NTExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApAQCAtMTAzLDcg
KzEwMyw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcG9ydHNBdHRyR2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2CiAgICAgTWVzc2FnZVBvcnRBcnJheSBw
b3J0c0NvcHkoKnBvcnRzKTsKICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBwb3J0QXJyYXkgPSB2
ODo6QXJyYXk6Ok5ldyhwb3J0c0NvcHkuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHBvcnRzQ29weS5zaXplKCk7ICsraSkKLSAgICAgICAgcG9ydEFycmF5LT5TZXQodjg6Oklu
dGVnZXI6Ok5ldyhpKSwgdG9WOChwb3J0c0NvcHlbaV0uZ2V0KCksIGluZm8uR2V0SXNvbGF0ZSgp
KSk7CisgICAgICAgIHBvcnRBcnJheS0+U2V0KHY4SW50ZWdlcihpLCBpbmZvLkdldElzb2xhdGUo
KSksIHRvVjgocG9ydHNDb3B5W2ldLmdldCgpLCBpbmZvLkdldElzb2xhdGUoKSkpOwogICAgIHJl
dHVybiBwb3J0QXJyYXk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4QmluZGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcu
Y3BwCmluZGV4IDY5OTAxODY5MmFhZWViMWNlMDk4OTc4YTFhZWQzYzI4ZTBiMmMzNGUuLmQ4ODM2
YzdlNDY4ZWIzNGQ5ZTQwMjkwNjE1NjIwN2Q3OTI2NjI3YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhCaW5kaW5nLmNwcApAQCAtNDkwLDcgKzQ5MCwyNyBAQCB2ODo6TG9jYWw8djg6
OlN0cmluZz4gU3RyaW5nQ2FjaGU6OnY4RXh0ZXJuYWxTdHJpbmdTbG93KFN0cmluZ0ltcGwqIHN0
cmluZ0ltcGwsCiAKICAgICByZXR1cm4gbmV3U3RyaW5nOwogfQotICAgIAorCit2b2lkIEludGVn
ZXJDYWNoZTo6Y3JlYXRlU21hbGxJbnRlZ2VycygpCit7CisgICAgQVNTRVJUKCFtX2luaXRpYWxp
emVkKTsKKyAgICAvLyBXZSBpbml0aWFsaXplIG1fc21hbGxJbnRlZ2VycyBub3QgaW4gYSBjb25z
dHJ1Y3RvciBidXQgaW4gdjhJbnRlZ2VyKCksCisgICAgLy8gYmVjYXVzZSBJbnRlZ2VyOjpOZXco
KSByZXF1aXJlcyBhIEhhbmRsZVNjb3BlLiBBdCB0aGUgcG9pbnQgd2hlcmUKKyAgICAvLyBJbnRl
Z2VyQ2FjaGUgaXMgY29uc3RydWN0ZWQsIGEgSGFuZGxlU2NvcGUgbWlnaHQgbm90IGV4aXN0Lgor
ICAgIGZvciAoaW50IHZhbHVlID0gMDsgdmFsdWUgPCBudW1iZXJPZkNhY2hlZFNtYWxsSW50ZWdl
cnM7IHZhbHVlKyspCisgICAgICAgIG1fc21hbGxJbnRlZ2Vyc1t2YWx1ZV0gPSB2ODo6UGVyc2lz
dGVudDx2ODo6SW50ZWdlcj46Ok5ldyh2ODo6SW50ZWdlcjo6TmV3KHZhbHVlKSk7CisgICAgbV9p
bml0aWFsaXplZCA9IHRydWU7Cit9CisKK0ludGVnZXJDYWNoZTo6fkludGVnZXJDYWNoZSgpCit7
CisgICAgaWYgKG1faW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgZm9yIChpbnQgdmFsdWUgPSAwOyB2
YWx1ZSA8IG51bWJlck9mQ2FjaGVkU21hbGxJbnRlZ2VyczsgdmFsdWUrKykKKyAgICAgICAgICAg
IG1fc21hbGxJbnRlZ2Vyc1t2YWx1ZV0uRGlzcG9zZSgpOworICAgICAgICBtX2luaXRpYWxpemVk
ID0gZmFsc2U7CisgICAgfQorfQorCiB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gY3JlYXRlUmF3VGVtcGxhdGUoKQogewogICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKaW5kZXggMTAyOTZhNzAwYjVlMzQ2MDQw
OWVkZWU4NDM4ZTk5MDJlMzkwNmI5NS4uNTYxNmQxOTJhNGYyYTI1NTU2ZDQ0ZTQ4NWFkNzI3NDJj
NTA1NTM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5n
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKQEAgLTg5LDYg
Kzg5LDM4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+
IG1fbGFzdFN0cmluZ0ltcGw7CiAgICAgfTsKIAorICAgIGNvbnN0IGludCBudW1iZXJPZkNhY2hl
ZFNtYWxsSW50ZWdlcnMgPSA2NDsKKworICAgIGNsYXNzIEludGVnZXJDYWNoZSB7CisgICAgcHVi
bGljOgorICAgICAgICBJbnRlZ2VyQ2FjaGUoKSA6IG1faW5pdGlhbGl6ZWQoZmFsc2UpIHsgfTsK
KyAgICAgICAgfkludGVnZXJDYWNoZSgpOworCisgICAgICAgIHY4OjpIYW5kbGU8djg6OkludGVn
ZXI+IHY4SW50ZWdlcihpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWSghbV9pbml0aWFsaXplZCkpCisgICAgICAgICAgICAgICAgY3JlYXRlU21hbGxJbnRlZ2Vy
cygpOworICAgICAgICAgICAgaWYgKExJS0VMWSgwIDw9IHZhbHVlICYmIHZhbHVlIDwgbnVtYmVy
T2ZDYWNoZWRTbWFsbEludGVnZXJzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zbWFsbElu
dGVnZXJzW3ZhbHVlXTsKKyAgICAgICAgICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KHZhbHVl
KTsKKyAgICAgICAgfQorCisgICAgICAgIHY4OjpIYW5kbGU8djg6OkludGVnZXI+IHY4VW5zaWdu
ZWRJbnRlZ2VyKHVuc2lnbmVkIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoIW1faW5pdGlhbGl6ZWQpKQorICAgICAgICAgICAgICAgIGNyZWF0ZVNtYWxsSW50ZWdl
cnMoKTsKKyAgICAgICAgICAgIGlmIChMSUtFTFkodmFsdWUgPCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4obnVtYmVyT2ZDYWNoZWRTbWFsbEludGVnZXJzKSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fc21hbGxJbnRlZ2Vyc1t2YWx1ZV07CisgICAgICAgICAgICByZXR1cm4gdjg6OkludGVnZXI6
Ok5ld0Zyb21VbnNpZ25lZCh2YWx1ZSk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIHZvaWQgY3JlYXRlU21hbGxJbnRlZ2VycygpOworCisgICAgICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpJbnRlZ2VyPiBtX3NtYWxsSW50ZWdlcnNbbnVtYmVyT2ZDYWNoZWRTbWFsbEludGVnZXJz
XTsKKyAgICAgICAgYm9vbCBtX2luaXRpYWxpemVkOworICAgIH07CisKICAgICBjbGFzcyBTY3Jp
cHRHQ0V2ZW50TGlzdGVuZXI7CiAKICAgICBjbGFzcyBHQ0V2ZW50RGF0YSB7CkBAIC0xNDUsNiAr
MTc3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB9CiAKICAgICAgICAgU3RyaW5n
Q2FjaGUqIHN0cmluZ0NhY2hlKCkgeyByZXR1cm4gJm1fc3RyaW5nQ2FjaGU7IH0KKyAgICAgICAg
SW50ZWdlckNhY2hlKiBpbnRlZ2VyQ2FjaGUoKSB7IHJldHVybiAmbV9pbnRlZ2VyQ2FjaGU7IH0K
KwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgICAgIHZvaWQgdmlzaXRFeHRlcm5hbFN0cmlu
Z3MoRXh0ZXJuYWxTdHJpbmdWaXNpdG9yKik7CiAjZW5kaWYKQEAgLTE5Myw2ICsyMjcsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiBtX3RvU3RyaW5nVGVtcGxhdGU7CiAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBtX2xhenlFdmVudExpc3RlbmVyVG9TdHJpbmdUZW1wbGF0ZTsKICAg
ICAgICAgU3RyaW5nQ2FjaGUgbV9zdHJpbmdDYWNoZTsKKyAgICAgICAgSW50ZWdlckNhY2hlIG1f
aW50ZWdlckNhY2hlOwogCiAgICAgICAgIERPTURhdGFMaXN0IG1fZG9tRGF0YUxpc3Q7CiAgICAg
ICAgIERPTURhdGFTdG9yZSogbV9kb21EYXRhU3RvcmU7CkBAIC0yOTMsNiArMzI4LDE4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgcmV0dXJuIHY4RXh0ZXJuYWxTdHJpbmcoc3RyaW5n
LCBpc29sYXRlKTsKICAgICB9CiAKKyAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6SW50ZWdlcj4g
djhJbnRlZ2VyKGludCB2YWx1ZSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQorICAgIHsKKyAg
ICAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRl
RGF0YTo6Y3VycmVudChpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIGRhdGEtPmludGVnZXJDYWNo
ZSgpLT52OEludGVnZXIodmFsdWUpOworICAgIH0KKworICAgIGlubGluZSB2ODo6SGFuZGxlPHY4
OjpJbnRlZ2VyPiB2OFVuc2lnbmVkSW50ZWdlcih1bnNpZ25lZCB2YWx1ZSwgdjg6Oklzb2xhdGUq
IGlzb2xhdGUgPSAwKQorICAgIHsKKyAgICAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRh
dGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudChpc29sYXRlKTsKKyAgICAgICAg
cmV0dXJuIGRhdGEtPmludGVnZXJDYWNoZSgpLT52OFVuc2lnbmVkSW50ZWdlcih2YWx1ZSk7Cisg
ICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdjhBcnJheShjb25zdCBWZWN0b3I8VD4mIGl0ZXJhdG9yLCB2ODo6SXNvbGF0ZSogaXNvbGF0
ZSkKICAgICB7Cg==
</data>
<flag name="commit-queue"
          id="157941"
          type_id="3"
          status="-"
          setter="haraken"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149895</attachid>
            <date>2012-06-28 00:34:15 -0700</date>
            <delta_ts>2012-06-28 01:52:14 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>bug-90043-20120628163414.patch</filename>
            <type>text/plain</type>
            <size>24080</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGFiZTIzNTI2YmM2YTY1
YWFjMjc1MTFiNzY0MzZlYWY3YWU4OWE4My4uMTllZTM1OTY0ZDY0NjBiYjE4YzZiMDc4YjdmZjYw
MThlNzc2NGIwNiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDEyLTA2LTI2ICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVjhdIE9wdGltaXpl
IEludGVnZXI6Ok5ldygpIGJ5IGNhY2hpbmcgcGVyc2lzdGVudCBoYW5kbGVzIGZvciBzbWFsbCBp
bnRlZ2VycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTAwNDMKKworICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgorCisgICAgICAgIFRoZSBw
YXRjaCBpbXByb3ZlcyBwZXJmb3JtYW5jZSBvZiBEcm9tYWVvL2RvbS1xdWVyeS5odG1sIGJ5IDMu
NiUsCisgICAgICAgIGFuZCBCaW5kaW5ncy9zY3JvbGwtdG9wLmh0bWwgYnkgMTcuMyUuCisKKyAg
ICAgICAgVGhlIHBlcmZvcm1hbmNlIHJlc3VsdHMgaW4gbXkgQ2hyb21pdW0vTGludXg6CisKKyAg
ICAgICAgW0Ryb21hZW8vZG9tLXF1ZXJ5Lmh0bWxdCisgICAgICAgIDc5NjMxMC40IHJ1bnMvcyA9
PiA4MjQ3NDUuNCBydW5zL3MgKCszLjYlKQorCisgICAgICAgIFtCaW5kaW5ncy9zY3JvbGwtdG9w
Lmh0bWxdCisgICAgICAgIDIwNC42OCBydW5zL3MgPT4gMjQwLjE1IHJ1bnMvcyAoKzE3LjMlKQor
CisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6
SW50ZWdlckNhY2hlIChqdXN0IGxpa2UKKyAgICAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6
OlN0cmluZ0NhY2hlKSB0byBjYWNoZSBwZXJzaXN0ZW50IGhhbmRsZXMKKyAgICAgICAgZm9yIHNt
YWxsIGludGVnZXJzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2
aW9yLgorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmg6IEltcGxlbWVudGVkIHY4
SW50ZWdlcigpIGFuZCB2OFVuc2lnbmVkSW50ZWdlcigpLAorICAgICAgICB3aGljaCByZXR1cm5z
IGNhY2hlZCBwZXJzaXN0ZW50IGhhbmRsZXMgZm9yIGludGVnZXJzIHNtYWxsZXIgdGhhbiA2NC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW50ZWdlckNhY2hlKToKKyAgICAgICAgKFdl
YkNvcmU6OkludGVnZXJDYWNoZTo6SW50ZWdlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVnZXJDYWNoZTo6djhJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVnZXJDYWNoZTo6
djhVbnNpZ25lZEludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhCaW5kaW5nUGVySXNvbGF0
ZURhdGE6OmludGVnZXJDYWNoZSk6CisgICAgICAgIChWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjp2OEludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6djhVbnNp
Z25lZEludGVnZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVnZXJDYWNoZTo6Y3JlYXRlU21h
bGxJbnRlZ2Vycyk6CisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxl
ci5jcHA6CisgICAgICAgICh+V29ya2VyU2NyaXB0Q29udHJvbGxlcik6IH5WOEJpbmRpbmdQZXJJ
c29sYXRlRGF0YSgpIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlCisgICAgICAgIGlzb2xhdGUtPkV4
aXQoKSwgc2luY2UgflY4QmluZGluZ1Blcklzb2xhdGVEYXRhKCkgY2FsbHMgVjggQVBJcyB0aGF0
IHJlcXVpcmVzCisgICAgICAgIHRoZSBjdXJyZW50IGlzb2xhdGUuCisKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbTogUmVwbGFjZWQgSW50ZWdlcjo6TmV3KCkg
YW5kIEludGVnZXI6Ok5ld0Zyb21VbnNpZ25lZCgpCisgICAgICAgIHdpdGggdjhJbnRlZ2VyKCkg
YW5kIHY4VW5zaWduZWRJbnRlZ2VyKCkuCisgICAgICAgIChHZW5lcmF0ZU5vcm1hbEF0dHJHZXR0
ZXIpOgorICAgICAgICAoTmF0aXZlVG9KU1ZhbHVlKToKKworICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwOiBVcGRhdGVkIHJ1bi1iaW5k
aW5ncy10ZXN0cyByZXN1bHRzLgorICAgICAgICAoV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVj
dFY4SW50ZXJuYWw6OmV4Y2l0aW5nQXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlRlc3RPYmpWOEludGVybmFsOjpyZWFkT25seUludEF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpzaG9ydEF0dHJBdHRyR2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjp1bnNpZ25lZFNob3J0QXR0ckF0dHJHZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmludEF0dHJBdHRyR2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpyZWZsZWN0ZWRJbnRl
Z3JhbEF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFs
OjpyZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OnJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ckF0dHJH
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmF0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRl
cm5hbDo6YXR0cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVBdHRyR2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpjb25kaXRpb25hbEF0dHIx
QXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6Y29uZGl0
aW9uYWxBdHRyMkF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJu
YWw6OmNvbmRpdGlvbmFsQXR0cjNBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RP
YmpWOEludGVybmFsOjplbmFibGVkQXRSdW50aW1lQXR0cjFBdHRyR2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjplbmFibGVkQXRSdW50aW1lQXR0cjJBdHRyR2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjplbmFibGVkQXRDb250
ZXh0QXR0cjFBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFs
OjplbmFibGVkQXRDb250ZXh0QXR0cjJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
c3RPYmpWOEludGVybmFsOjpzdHJhd2JlcnJ5QXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXN0T2JqVjhJbnRlcm5hbDo6ZGVzY3JpcHRpb25BdHRyR2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjppZEF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdE9ialY4SW50ZXJuYWw6OmludE1ldGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RPYmpWOEludGVybmFsOjppbnRNZXRob2RXaXRoQXJnc0NhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpjbGFzc01ldGhvZFdpdGhPcHRpb25hbENh
bGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVjhJbnRlcm5hbDo6cG9ydHNBdHRyR2V0
dGVyKToKKwogMjAxMi0wNi0yNyAgRGFuaWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBGaXggY3Jhc2ggaW4gRnJhbWU6Om5vZGVJbWFnZS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggMjU0ZWM5
Mzk2YmI0MjcxMWZjZTE2YmUxMDUwMTIxZGY2ZmVlY2IzNS4uYjM2ZGE0MDM5NjQ5N2ZlZjI2NzJl
ZDA1OTdmOTQwY2YyYTFiZWZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTEwNjAsNyArMTA2MCw3IEBAIEVORAogICAg
IE1lc3NhZ2VQb3J0QXJyYXkgcG9ydHNDb3B5KCpwb3J0cyk7CiAgICAgdjg6OkxvY2FsPHY4OjpB
cnJheT4gcG9ydEFycmF5ID0gdjg6OkFycmF5OjpOZXcocG9ydHNDb3B5LnNpemUoKSk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb3J0c0NvcHkuc2l6ZSgpOyArK2kpCi0gICAgICAgIHBv
cnRBcnJheS0+U2V0KHY4OjpJbnRlZ2VyOjpOZXcoaSksIHRvVjgocG9ydHNDb3B5W2ldLmdldCgp
LCBpbmZvLkdldElzb2xhdGUoKSkpOworICAgICAgICBwb3J0QXJyYXktPlNldCh2OEludGVnZXIo
aSwgaW5mby5HZXRJc29sYXRlKCkpLCB0b1Y4KHBvcnRzQ29weVtpXS5nZXQoKSwgaW5mby5HZXRJ
c29sYXRlKCkpKTsKICAgICByZXR1cm4gcG9ydEFycmF5OwogRU5ECiAgICAgfSBlbHNlIHsKQEAg
LTM4OTIsMTQgKzM4OTIsMTQgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgICMgc2hvdWxkIGJl
IHJldHVybmVkIGluc3RlYWQuCiAgICAgaWYgKCRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJSZWZsZWN0In0gYW5kICgkdHlwZSBlcSAidW5zaWduZWQgbG9uZyIgb3IgJHR5cGUgZXEg
InVuc2lnbmVkIHNob3J0IikpIHsKICAgICAgICAgJHZhbHVlID1+IHMvZ2V0VW5zaWduZWRJbnRl
Z3JhbEF0dHJpYnV0ZS9nZXRJbnRlZ3JhbEF0dHJpYnV0ZS9nOwotICAgICAgICByZXR1cm4gInY4
OjpJbnRlZ2VyOjpOZXdGcm9tVW5zaWduZWQoc3RkOjptYXgoMCwgIiAuICR2YWx1ZSAuICIpKSI7
CisgICAgICAgIHJldHVybiAidjhVbnNpZ25lZEludGVnZXIoc3RkOjptYXgoMCwgIiAuICR2YWx1
ZSAuICIpJGdldElzb2xhdGVBcmcpIjsKICAgICB9CiAKICAgICAjIEZvciBhbGwgdGhlIHR5cGVz
IHdoZXJlIHdlIHVzZSAnaW50JyBhcyB0aGUgcmVwcmVzZW50YXRpb24gdHlwZSwKLSAgICAjIHdl
IHVzZSBJbnRlZ2VyOjpOZXcgd2hpY2ggaGFzIGEgZmFzdCBTbWkgY29udmVyc2lvbiBjaGVjay4K
KyAgICAjIHdlIHVzZSB2OEludGVnZXIoKSB3aGljaCBoYXMgYSBmYXN0IHNtYWxsIGludGVnZXIg
Y29udmVyc2lvbiBjaGVjay4KICAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2ZVR5cGUoJHR5
cGUpOwotICAgIHJldHVybiAidjg6OkludGVnZXI6Ok5ldygkdmFsdWUpIiBpZiAkbmF0aXZlVHlw
ZSBlcSAiaW50IjsKLSAgICByZXR1cm4gInY4OjpJbnRlZ2VyOjpOZXdGcm9tVW5zaWduZWQoJHZh
bHVlKSIgaWYgJG5hdGl2ZVR5cGUgZXEgInVuc2lnbmVkIjsKKyAgICByZXR1cm4gInY4SW50ZWdl
cigkdmFsdWUkZ2V0SXNvbGF0ZUFyZykiIGlmICRuYXRpdmVUeXBlIGVxICJpbnQiOworICAgIHJl
dHVybiAidjhVbnNpZ25lZEludGVnZXIoJHZhbHVlJGdldElzb2xhdGVBcmcpIiBpZiAkbmF0aXZl
VHlwZSBlcSAidW5zaWduZWQiOwogCiAgICAgcmV0dXJuICJ2OERhdGVPck51bGwoJHZhbHVlJGdl
dElzb2xhdGVBcmcpIiBpZiAkdHlwZSBlcSAiRGF0ZSI7CiAgICAgIyBsb25nIGxvbmcgYW5kIHVu
c2lnbmVkIGxvbmcgbG9uZyBhcmUgbm90IHJlcHJlc2VudGFibGUgaW4gRUNNQVNjcmlwdC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RB
Y3RpdmVET01PYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKaW5kZXggMzc4MTdkNWZmN2I3NzJkMDg4Mzhl
ZTY1YTRlYjc2ZjU0NWIwM2EzNy4uMGE5Yjg4YWRhN2U3MzU0ODBmNmNiYTEzZDBmNDEwMWI5MTMx
NWU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKQEAgLTQ1LDcgKzQ1LDcg
QEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBleGNpdGluZ0F0dHJBdHRyR2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLAogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RBY3Rp
dmVET01PYmplY3QuZXhjaXRpbmdBdHRyLl9nZXQiKTsKICAgICBUZXN0QWN0aXZlRE9NT2JqZWN0
KiBpbXAgPSBWOFRlc3RBY3RpdmVET01PYmplY3Q6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwot
ICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+ZXhjaXRpbmdBdHRyKCkpOworICAgIHJl
dHVybiB2OEludGVnZXIoaW1wLT5leGNpdGluZ0F0dHIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwog
fQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGV4Y2l0aW5nRnVuY3Rpb25DYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAppbmRleCA0MGI4ZDlkYmQ3Njlj
ZDI5MDhiYTMzOWRiNDhjZmQ2MGEzMGIxZGUxLi4zNzJlYWRmODQ4MDI2MjQwZGFhZDczODE0MzNl
MzFjYjA4NWM0YjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcApAQCAtODYsNyArODYsNyBAQCBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHJlYWRPbmx5SW50QXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoucmVhZE9ubHlJbnRBdHRy
Ll9nZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9s
ZGVyKCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+cmVhZE9ubHlJbnRBdHRy
KCkpOworICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5yZWFkT25seUludEF0dHIoKSwgaW5mby5H
ZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlYWRPbmx5
U3RyaW5nQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4
OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC0xMTQsNyArMTE0LDcgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBzaG9ydEF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCBjb24KIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnNob3J0QXR0ci5fZ2V0Iik7
CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsK
LSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPnNob3J0QXR0cigpKTsKKyAgICByZXR1
cm4gdjhJbnRlZ2VyKGltcC0+c2hvcnRBdHRyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAog
c3RhdGljIHZvaWQgc2hvcnRBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFt
ZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGlu
Zm8pCkBAIC0xMzAsNyArMTMwLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB1bnNp
Z25lZFNob3J0QXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG4KIHsKICAgICBJ
TkNfU1RBVFMoIkRPTS5UZXN0T2JqLnVuc2lnbmVkU2hvcnRBdHRyLl9nZXQiKTsKICAgICBUZXN0
T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVy
biB2ODo6SW50ZWdlcjo6TmV3KGltcC0+dW5zaWduZWRTaG9ydEF0dHIoKSk7CisgICAgcmV0dXJu
IHY4SW50ZWdlcihpbXAtPnVuc2lnbmVkU2hvcnRBdHRyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsK
IH0KIAogc3RhdGljIHZvaWQgdW5zaWduZWRTaG9ydEF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKQEAgLTE0Niw3ICsxNDYsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGludEF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBj
b25zdAogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouaW50QXR0ci5fZ2V0Iik7CiAgICAg
VGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBy
ZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPmludEF0dHIoKSk7CisgICAgcmV0dXJuIHY4SW50
ZWdlcihpbXAtPmludEF0dHIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9p
ZCBpbnRBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC0yNzQs
NyArMjc0LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWZsZWN0ZWRJbnRlZ3Jh
bEF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW4KIHsKICAgICBJTkNfU1RBVFMoIkRP
TS5UZXN0T2JqLnJlZmxlY3RlZEludGVncmFsQXR0ci5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1w
ID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjg6Oklu
dGVnZXI6Ok5ldyhpbXAtPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0cikpOworICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5n
ZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFs
YXR0ckF0dHIpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlZmxlY3Rl
ZEludGVncmFsQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAt
MjkwLDcgKzI5MCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVmbGVjdGVkVW5z
aWduZWRJbnRlZ3JhbEF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2CiB7CiAgICAgSU5DX1NUQVRT
KCJET00uVGVzdE9iai5yZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ci5fZ2V0Iik7CiAgICAg
VGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBy
ZXR1cm4gdjg6OkludGVnZXI6Ok5ld0Zyb21VbnNpZ25lZChzdGQ6Om1heCgwLCBpbXAtPmdldElu
dGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRpbnRl
Z3JhbGF0dHJBdHRyKSkpOworICAgIHJldHVybiB2OFVuc2lnbmVkSW50ZWdlcihzdGQ6Om1heCgw
LCBpbXAtPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVk
dW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRyKSksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3Rh
dGljIHZvaWQgcmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJBdHRyU2V0dGVyKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTM1NCw3ICszNTQsNyBAQCBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ckF0dHJHZXR0ZXIodjg6Okxv
Y2FsPHY4OgogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoucmVmbGVjdGVkQ3VzdG9tSW50
ZWdyYWxBdHRyLl9nZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+Z2V0SW50
ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxB
dHRyQXR0cikpOworICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5nZXRJbnRlZ3JhbEF0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyKSwgaW5m
by5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCByZWZsZWN0ZWRDdXN0b21JbnRlZ3Jh
bEF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6
OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTQwNiw3ICs0
MDYsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGF0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cgogICAgIGludCB2ID0gaW1wLT5hdHRyV2l0
aEdldHRlckV4Y2VwdGlvbihlYyk7CiAgICAgaWYgKFVOTElLRUxZKGVjKSkKICAgICAgICAgcmV0
dXJuIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYywgaW5mby5HZXRJc29sYXRlKCkpOwotICAg
IHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KHYpOworICAgIHJldHVybiB2OEludGVnZXIodiwgaW5m
by5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCBhdHRyV2l0aEdldHRlckV4Y2VwdGlv
bkF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtNDI1LDcgKzQyNSw3
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXR0cldpdGhTZXR0ZXJFeGNlcHRpb25B
dHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9i
ai5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbi5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6
Ok5ldyhpbXAtPmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOworICAgIHJldHVybiB2OEludGVn
ZXIoaW1wLT5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9
CiAKIHN0YXRpYyB2b2lkIGF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uQXR0clNldHRlcih2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4
OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC00ODksNyArNDg5LDcgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVBdHRyR2V0dGVyKHY4OjpMb2Nh
bDx2ODo6U3QKICAgICBTY3JpcHRTdGF0ZSogc3RhdGUgPSBTY3JpcHRTdGF0ZTo6Y3VycmVudCgp
OwogICAgIGlmICghc3RhdGUpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0gICAg
cmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoc3Rh
dGUpKTsKKyAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRl
KHN0YXRlKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCB3aXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dGVBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAg
LTcxNyw3ICs3MTcsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbmRpdGlvbmFs
QXR0cjFBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYQogewogICAgIElOQ19TVEFU
UygiRE9NLlRlc3RPYmouY29uZGl0aW9uYWxBdHRyMS5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1w
ID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjg6Oklu
dGVnZXI6Ok5ldyhpbXAtPmNvbmRpdGlvbmFsQXR0cjEoKSk7CisgICAgcmV0dXJuIHY4SW50ZWdl
cihpbXAtPmNvbmRpdGlvbmFsQXR0cjEoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiAjZW5k
aWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpCkBAIC03NDEsNyArNzQxLDcgQEAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBjb25kaXRpb25hbEF0dHIyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6
OlN0cmluZz4gbmEKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmNvbmRpdGlvbmFsQXR0
cjIuX2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5jb25kaXRpb25hbEF0
dHIyKCkpOworICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5jb25kaXRpb25hbEF0dHIyKCksIGlu
Zm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSAmJiBF
TkFCTEUoQ29uZGl0aW9uMikKQEAgLTc2NSw3ICs3NjUsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGNvbmRpdGlvbmFsQXR0cjNBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouY29uZGl0aW9uYWxBdHRyMy5fZ2V0
Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigp
KTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPmNvbmRpdGlvbmFsQXR0cjMoKSk7
CisgICAgcmV0dXJuIHY4SW50ZWdlcihpbXAtPmNvbmRpdGlvbmFsQXR0cjMoKSwgaW5mby5HZXRJ
c29sYXRlKCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKQpAQCAtODE1LDcgKzgxNSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gZW5hYmxlZEF0UnVudGltZUF0dHIxQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluCiB7
CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5lbmFibGVkQXRSdW50aW1lQXR0cjEuX2dldCIp
OwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7
Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5lbmFibGVkQXRSdW50aW1lQXR0cjEo
KSk7CisgICAgcmV0dXJuIHY4SW50ZWdlcihpbXAtPmVuYWJsZWRBdFJ1bnRpbWVBdHRyMSgpLCBp
bmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZWRBdFJ1bnRpbWVBdHRy
MUF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtODMxLDcgKzgzMSw3
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZW5hYmxlZEF0UnVudGltZUF0dHIyQXR0
ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9i
ai5lbmFibGVkQXRSdW50aW1lQXR0cjIuX2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVz
dE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpO
ZXcoaW1wLT5lbmFibGVkQXRSdW50aW1lQXR0cjIoKSk7CisgICAgcmV0dXJuIHY4SW50ZWdlcihp
bXAtPmVuYWJsZWRBdFJ1bnRpbWVBdHRyMigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0
YXRpYyB2b2lkIGVuYWJsZWRBdFJ1bnRpbWVBdHRyMkF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQpAQCAtODQ3LDcgKzg0Nyw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gZW5hYmxlZEF0Q29udGV4dEF0dHIxQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
CiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5lbmFibGVkQXRDb250ZXh0QXR0cjEuX2dl
dCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIo
KSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5lbmFibGVkQXRDb250ZXh0QXR0
cjEoKSk7CisgICAgcmV0dXJuIHY4SW50ZWdlcihpbXAtPmVuYWJsZWRBdENvbnRleHRBdHRyMSgp
LCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZWRBdENvbnRleHRB
dHRyMUF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtODYzLDcgKzg2
Myw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZW5hYmxlZEF0Q29udGV4dEF0dHIy
QXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVz
dE9iai5lbmFibGVkQXRDb250ZXh0QXR0cjIuX2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4
VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2Vy
OjpOZXcoaW1wLT5lbmFibGVkQXRDb250ZXh0QXR0cjIoKSk7CisgICAgcmV0dXJuIHY4SW50ZWdl
cihpbXAtPmVuYWJsZWRBdENvbnRleHRBdHRyMigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAK
IHN0YXRpYyB2b2lkIGVuYWJsZWRBdENvbnRleHRBdHRyMkF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQpAQCAtOTUzLDcgKzk1Myw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gc3RyYXdiZXJyeUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IGNvCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zdHJhd2JlcnJ5Ll9nZXQiKTsKICAg
ICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAg
IHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+Ymx1ZWJlcnJ5KCkpOworICAgIHJldHVybiB2
OEludGVnZXIoaW1wLT5ibHVlYmVycnkoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0
aWMgdm9pZCBzdHJhd2JlcnJ5QXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
CkBAIC05ODUsMTQgKzk4NSwxNCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGRlc2Ny
aXB0aW9uQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgYwogewogICAgIElO
Q19TVEFUUygiRE9NLlRlc3RPYmouZGVzY3JpcHRpb24uX2dldCIpOwogICAgIFRlc3RPYmoqIGlt
cCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJ
bnRlZ2VyOjpOZXcoaW1wLT5kZXNjcmlwdGlvbigpKTsKKyAgICByZXR1cm4gdjhJbnRlZ2VyKGlt
cC0+ZGVzY3JpcHRpb24oKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGlkQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0
T2JqLmlkLl9nZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGlu
Zm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+aWQoKSk7Cisg
ICAgcmV0dXJuIHY4SW50ZWdlcihpbXAtPmlkKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAog
c3RhdGljIHZvaWQgaWRBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAg
LTEwNDQsNyArMTA0NCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaW50TWV0aG9k
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRP
TS5UZXN0T2JqLmludE1ldGhvZCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9O
YXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5p
bnRNZXRob2QoKSk7CisgICAgcmV0dXJuIHY4SW50ZWdlcihpbXAtPmludE1ldGhvZCgpLCBhcmdz
LkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaW50TWV0
aG9kV2l0aEFyZ3NDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTA1Niw3
ICsxMDU2LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpbnRNZXRob2RXaXRoQXJn
c0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MKICAgICBFWENFUFRJT05fQkxPQ0so
aW50LCBpbnRBcmcsIHRvSW50MzIoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVm
YXVsdElzVW5kZWZpbmVkKSkpOwogICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05f
QkxPQ0soVjhQYXJhbWV0ZXI8Piwgc3RyQXJnLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdz
LCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKICAgICBFWENFUFRJT05fQkxPQ0soVGVzdE9iaios
IG9iakFyZywgVjhUZXN0T2JqOjpIYXNJbnN0YW5jZShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihh
cmdzLCAyLCBEZWZhdWx0SXNVbmRlZmluZWQpKSA/IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6Okhh
bmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAyLCBE
ZWZhdWx0SXNVbmRlZmluZWQpKSkgOiAwKTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhp
bXAtPmludE1ldGhvZFdpdGhBcmdzKGludEFyZywgc3RyQXJnLCBvYmpBcmcpKTsKKyAgICByZXR1
cm4gdjhJbnRlZ2VyKGltcC0+aW50TWV0aG9kV2l0aEFyZ3MoaW50QXJnLCBzdHJBcmcsIG9iakFy
ZyksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBvYmpNZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTYwMywx
MCArMTYwMywxMCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNsYXNzTWV0aG9kV2l0
aE9wdGlvbmFsQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cwogewogICAgIElOQ19TVEFUUygi
RE9NLlRlc3RPYmouY2xhc3NNZXRob2RXaXRoT3B0aW9uYWwiKTsKICAgICBpZiAoYXJncy5MZW5n
dGgoKSA8PSAwKSB7Ci0gICAgICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KFRlc3RPYmo6OmNs
YXNzTWV0aG9kV2l0aE9wdGlvbmFsKCkpOworICAgICAgICByZXR1cm4gdjhJbnRlZ2VyKFRlc3RP
Ymo6OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICB9
CiAgICAgRVhDRVBUSU9OX0JMT0NLKGludCwgYXJnLCB0b0ludDMyKE1BWUJFX01JU1NJTkdfUEFS
QU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKLSAgICByZXR1cm4gdjg6Oklu
dGVnZXI6Ok5ldyhUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRpb25hbChhcmcpKTsKKyAgICBy
ZXR1cm4gdjhJbnRlZ2VyKFRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKGFyZyksIGFy
Z3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAogI2lmIEVOQUJMRShDb25kaXRpb24xKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAppbmRl
eCAyOGVjZDk0MDg1OTBmNTlkNTg2ZmU3YmU4YWMwYjBhNzIwOGQ4NDFiLi4zYjBmMmY2N2Q2MTAw
MmY4Nzg5ZmE0NjE2YzBmZTdjOTY2N2U1NTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApAQCAtMTAzLDcgKzEwMyw3IEBA
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcG9ydHNBdHRyR2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2CiAgICAgTWVzc2FnZVBvcnRBcnJheSBwb3J0c0NvcHko
KnBvcnRzKTsKICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBwb3J0QXJyYXkgPSB2ODo6QXJyYXk6
Ok5ldyhwb3J0c0NvcHkuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBvcnRz
Q29weS5zaXplKCk7ICsraSkKLSAgICAgICAgcG9ydEFycmF5LT5TZXQodjg6OkludGVnZXI6Ok5l
dyhpKSwgdG9WOChwb3J0c0NvcHlbaV0uZ2V0KCksIGluZm8uR2V0SXNvbGF0ZSgpKSk7CisgICAg
ICAgIHBvcnRBcnJheS0+U2V0KHY4SW50ZWdlcihpLCBpbmZvLkdldElzb2xhdGUoKSksIHRvVjgo
cG9ydHNDb3B5W2ldLmdldCgpLCBpbmZvLkdldElzb2xhdGUoKSkpOwogICAgIHJldHVybiBwb3J0
QXJyYXk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Qmlu
ZGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwCmluZGV4
IDY5OTAxODY5MmFhZWViMWNlMDk4OTc4YTFhZWQzYzI4ZTBiMmMzNGUuLmQ4ODM2YzdlNDY4ZWIz
NGQ5ZTQwMjkwNjE1NjIwN2Q3OTI2NjI3YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhCaW5kaW5nLmNwcApAQCAtNDkwLDcgKzQ5MCwyNyBAQCB2ODo6TG9jYWw8djg6OlN0cmluZz4g
U3RyaW5nQ2FjaGU6OnY4RXh0ZXJuYWxTdHJpbmdTbG93KFN0cmluZ0ltcGwqIHN0cmluZ0ltcGws
CiAKICAgICByZXR1cm4gbmV3U3RyaW5nOwogfQotICAgIAorCit2b2lkIEludGVnZXJDYWNoZTo6
Y3JlYXRlU21hbGxJbnRlZ2VycygpCit7CisgICAgQVNTRVJUKCFtX2luaXRpYWxpemVkKTsKKyAg
ICAvLyBXZSBpbml0aWFsaXplIG1fc21hbGxJbnRlZ2VycyBub3QgaW4gYSBjb25zdHJ1Y3RvciBi
dXQgaW4gdjhJbnRlZ2VyKCksCisgICAgLy8gYmVjYXVzZSBJbnRlZ2VyOjpOZXcoKSByZXF1aXJl
cyBhIEhhbmRsZVNjb3BlLiBBdCB0aGUgcG9pbnQgd2hlcmUKKyAgICAvLyBJbnRlZ2VyQ2FjaGUg
aXMgY29uc3RydWN0ZWQsIGEgSGFuZGxlU2NvcGUgbWlnaHQgbm90IGV4aXN0LgorICAgIGZvciAo
aW50IHZhbHVlID0gMDsgdmFsdWUgPCBudW1iZXJPZkNhY2hlZFNtYWxsSW50ZWdlcnM7IHZhbHVl
KyspCisgICAgICAgIG1fc21hbGxJbnRlZ2Vyc1t2YWx1ZV0gPSB2ODo6UGVyc2lzdGVudDx2ODo6
SW50ZWdlcj46Ok5ldyh2ODo6SW50ZWdlcjo6TmV3KHZhbHVlKSk7CisgICAgbV9pbml0aWFsaXpl
ZCA9IHRydWU7Cit9CisKK0ludGVnZXJDYWNoZTo6fkludGVnZXJDYWNoZSgpCit7CisgICAgaWYg
KG1faW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgZm9yIChpbnQgdmFsdWUgPSAwOyB2YWx1ZSA8IG51
bWJlck9mQ2FjaGVkU21hbGxJbnRlZ2VyczsgdmFsdWUrKykKKyAgICAgICAgICAgIG1fc21hbGxJ
bnRlZ2Vyc1t2YWx1ZV0uRGlzcG9zZSgpOworICAgICAgICBtX2luaXRpYWxpemVkID0gZmFsc2U7
CisgICAgfQorfQorCiB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY3JlYXRl
UmF3VGVtcGxhdGUoKQogewogICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKaW5kZXggOWU5YzViYjU3MGJhM2UxNmUyMWNjM2U1Zjkx
ZjllZTYxOTUzNzRkMC4uNWQwZGJlMmM5Y2YwNjYzNTcwY2Y1MjVkZjRkOWFjM2JkOWIyM2YyOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKQEAgLTg5LDYgKzg5LDM4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fbGFzdFN0
cmluZ0ltcGw7CiAgICAgfTsKIAorICAgIGNvbnN0IGludCBudW1iZXJPZkNhY2hlZFNtYWxsSW50
ZWdlcnMgPSA2NDsKKworICAgIGNsYXNzIEludGVnZXJDYWNoZSB7CisgICAgcHVibGljOgorICAg
ICAgICBJbnRlZ2VyQ2FjaGUoKSA6IG1faW5pdGlhbGl6ZWQoZmFsc2UpIHsgfTsKKyAgICAgICAg
fkludGVnZXJDYWNoZSgpOworCisgICAgICAgIHY4OjpIYW5kbGU8djg6OkludGVnZXI+IHY4SW50
ZWdlcihpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9pbml0aWFsaXpl
ZCkKKyAgICAgICAgICAgICAgICBjcmVhdGVTbWFsbEludGVnZXJzKCk7CisgICAgICAgICAgICBp
ZiAoMCA8PSB2YWx1ZSAmJiB2YWx1ZSA8IG51bWJlck9mQ2FjaGVkU21hbGxJbnRlZ2VycykKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbV9zbWFsbEludGVnZXJzW3ZhbHVlXTsKKyAgICAgICAgICAg
IHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KHZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHY4
OjpIYW5kbGU8djg6OkludGVnZXI+IHY4VW5zaWduZWRJbnRlZ2VyKHVuc2lnbmVkIHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1faW5pdGlhbGl6ZWQpCisgICAgICAgICAgICAg
ICAgY3JlYXRlU21hbGxJbnRlZ2VycygpOworICAgICAgICAgICAgaWYgKHZhbHVlIDwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG51bWJlck9mQ2FjaGVkU21hbGxJbnRlZ2VycykpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1fc21hbGxJbnRlZ2Vyc1t2YWx1ZV07CisgICAgICAgICAgICByZXR1cm4g
djg6OkludGVnZXI6Ok5ld0Zyb21VbnNpZ25lZCh2YWx1ZSk7CisgICAgICAgIH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIHZvaWQgY3JlYXRlU21hbGxJbnRlZ2VycygpOworCisgICAgICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpJbnRlZ2VyPiBtX3NtYWxsSW50ZWdlcnNbbnVtYmVyT2ZDYWNoZWRT
bWFsbEludGVnZXJzXTsKKyAgICAgICAgYm9vbCBtX2luaXRpYWxpemVkOworICAgIH07CisKICAg
ICBjbGFzcyBTY3JpcHRHQ0V2ZW50TGlzdGVuZXI7CiAKICAgICBjbGFzcyBHQ0V2ZW50RGF0YSB7
CkBAIC0xNDIsNiArMTc0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB9CiAKICAg
ICAgICAgU3RyaW5nQ2FjaGUqIHN0cmluZ0NhY2hlKCkgeyByZXR1cm4gJm1fc3RyaW5nQ2FjaGU7
IH0KKyAgICAgICAgSW50ZWdlckNhY2hlKiBpbnRlZ2VyQ2FjaGUoKSB7IHJldHVybiAmbV9pbnRl
Z2VyQ2FjaGU7IH0KKwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgICAgIHZvaWQgdmlzaXRF
eHRlcm5hbFN0cmluZ3MoRXh0ZXJuYWxTdHJpbmdWaXNpdG9yKik7CiAjZW5kaWYKQEAgLTE5MCw2
ICsyMjQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBtX3RvU3RyaW5nVGVtcGxhdGU7CiAgICAgICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBtX2xhenlFdmVudExpc3RlbmVyVG9TdHJpbmdU
ZW1wbGF0ZTsKICAgICAgICAgU3RyaW5nQ2FjaGUgbV9zdHJpbmdDYWNoZTsKKyAgICAgICAgSW50
ZWdlckNhY2hlIG1faW50ZWdlckNhY2hlOwogCiAgICAgICAgIERPTURhdGFMaXN0IG1fZG9tRGF0
YUxpc3Q7CiAgICAgICAgIERPTURhdGFTdG9yZSogbV9kb21EYXRhU3RvcmU7CkBAIC0yOTAsNiAr
MzI1LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgcmV0dXJuIHY4RXh0ZXJuYWxT
dHJpbmcoc3RyaW5nLCBpc29sYXRlKTsKICAgICB9CiAKKyAgICBpbmxpbmUgdjg6OkhhbmRsZTx2
ODo6SW50ZWdlcj4gdjhJbnRlZ2VyKGludCB2YWx1ZSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAw
KQorICAgIHsKKyAgICAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRp
bmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudChpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIGRhdGEt
PmludGVnZXJDYWNoZSgpLT52OEludGVnZXIodmFsdWUpOworICAgIH0KKworICAgIGlubGluZSB2
ODo6SGFuZGxlPHY4OjpJbnRlZ2VyPiB2OFVuc2lnbmVkSW50ZWdlcih1bnNpZ25lZCB2YWx1ZSwg
djg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQorICAgIHsKKyAgICAgICAgVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudChpc29sYXRl
KTsKKyAgICAgICAgcmV0dXJuIGRhdGEtPmludGVnZXJDYWNoZSgpLT52OFVuc2lnbmVkSW50ZWdl
cih2YWx1ZSk7CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdjhBcnJheShjb25zdCBWZWN0b3I8VD4mIGl0ZXJhdG9yLCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IGNmMTllMGVlYzRkZTUzODc0YzAy
MmJjNDE1M2RjYjkxZDZkYWQxOTIuLjc5Yzg4MTBmYjZiYmMzZDg3ZmZkMjlkZjIxZjNjMWQ3YWVh
NjdlNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlw
dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNj
cmlwdENvbnRyb2xsZXIuY3BwCkBAIC03Nyw4ICs3Nyw4IEBAIFdvcmtlclNjcmlwdENvbnRyb2xs
ZXI6On5Xb3JrZXJTY3JpcHRDb250cm9sbGVyKCkKICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJy
ZW50KCktPmRpZFN0b3BXb3JrZXJSdW5Mb29wKFdlYktpdDo6V2ViV29ya2VyUnVuTG9vcCgmbV93
b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+cnVuTG9vcCgpKSk7CiAjZW5kaWYKICAgICBtX3Byb3h5
LmNsZWFyKCk7Ci0gICAgbV9pc29sYXRlLT5FeGl0KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0
ZURhdGE6OmRpc3Bvc2UobV9pc29sYXRlKTsKKyAgICBtX2lzb2xhdGUtPkV4aXQoKTsKICAgICBt
X2lzb2xhdGUtPkRpc3Bvc2UoKTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>