<?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>173172</bug_id>
          
          <creation_ts>2017-06-09 11:35:36 -0700</creation_ts>
          <short_desc>Use Function rather than std::function for thread safety in WebsiteDataStore</short_desc>
          <delta_ts>2017-06-09 12:40:38 -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>WebKit2</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>173168</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1317529</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-09 11:35:36 -0700</bug_when>
    <thetext>Audit the WebsiteDataStore code for use of std::function, and switch to our safer WTF::Function version.

Also attempt to reduce copies and ref churn by using WTFMove in more places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317535</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-06-09 11:39:11 -0700</bug_when>
    <thetext>&lt;rdar://problem/32679311&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317546</commentid>
    <comment_count>2</comment_count>
      <attachid>312467</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-09 11:47:58 -0700</bug_when>
    <thetext>Created attachment 312467
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317558</commentid>
    <comment_count>3</comment_count>
      <attachid>312467</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-09 11:59:53 -0700</bug_when>
    <thetext>Comment on attachment 312467
Patch

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

Will wait for debug bot to be happy before r+ given all the new assertions :)

&gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:267
&gt; +            callbackAggregator-&gt;addDomainsWithDeletedWebsiteData(domainsWithDeletedWebsiteData);

Wouldn&apos;t hurt to WTFMove(domainsWithDeletedWebsiteData) here.

&gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:533
&gt; +            String&amp;&amp; domain = dataRecord.topPrivatelyControlledDomain();

This is weird. I think this should stay a String.

&gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:583
&gt; +        explicit CallbackAggregator(Function&lt;void()&gt; completionHandler)

Missing &amp;&amp;.

&gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:820
&gt; +        explicit CallbackAggregator(Function&lt;void()&gt; completionHandler)

Missing &amp;&amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317565</commentid>
    <comment_count>4</comment_count>
      <attachid>312467</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-09 12:05:54 -0700</bug_when>
    <thetext>Comment on attachment 312467
Patch

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

&gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:214
&gt; +    // We expect this to be called on the main thread so we get the default website data store

Missing period at the end.

&gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:275
&gt; +    // We expect this to be called on the main thread so we get the default website data store

Missing period at the end.

&gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:188
&gt; +        explicit CallbackAggregator(OptionSet&lt;WebsiteDataFetchOption&gt; fetchOptions, Function&lt;void(Vector&lt;WebsiteDataRecord&gt;)&gt; completionHandler)

Missing &amp;&amp;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317567</commentid>
    <comment_count>5</comment_count>
      <attachid>312467</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-09 12:13:51 -0700</bug_when>
    <thetext>Comment on attachment 312467
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:267
&gt;&gt; +            callbackAggregator-&gt;addDomainsWithDeletedWebsiteData(domainsWithDeletedWebsiteData);
&gt; 
&gt; Wouldn&apos;t hurt to WTFMove(domainsWithDeletedWebsiteData) here.

OK!

&gt;&gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:275
&gt;&gt; +    // We expect this to be called on the main thread so we get the default website data store
&gt; 
&gt; Missing period at the end.

Fixed (and the other one).

&gt;&gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:188
&gt;&gt; +        explicit CallbackAggregator(OptionSet&lt;WebsiteDataFetchOption&gt; fetchOptions, Function&lt;void(Vector&lt;WebsiteDataRecord&gt;)&gt; completionHandler)
&gt; 
&gt; Missing &amp;&amp;.

Whoops!

&gt;&gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:533
&gt;&gt; +            String&amp;&amp; domain = dataRecord.topPrivatelyControlledDomain();
&gt; 
&gt; This is weird. I think this should stay a String.

OK!

&gt;&gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:583
&gt;&gt; +        explicit CallbackAggregator(Function&lt;void()&gt; completionHandler)
&gt; 
&gt; Missing &amp;&amp;.

Good catch!

&gt;&gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:820
&gt;&gt; +        explicit CallbackAggregator(Function&lt;void()&gt; completionHandler)
&gt; 
&gt; Missing &amp;&amp;

+1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317577</commentid>
    <comment_count>6</comment_count>
      <attachid>312467</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-09 12:39:44 -0700</bug_when>
    <thetext>Comment on attachment 312467
Patch

r=me with nit fixes I suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317578</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-09 12:40:38 -0700</bug_when>
    <thetext>Committed r218011: &lt;http://trac.webkit.org/changeset/218011&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>312467</attachid>
            <date>2017-06-09 11:47:58 -0700</date>
            <delta_ts>2017-06-09 12:39:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173172-20170609114757.patch</filename>
            <type>text/plain</type>
            <size>23931</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODAwMikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE3LTA2LTA5ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBGdW5jdGlvbiByYXRo
ZXIgdGhhbiBzdGQ6OmZ1bmN0aW9uIGZvciB0aHJlYWQgc2FmZXR5IGluIFdlYnNpdGVEYXRhU3Rv
cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzE3
MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzI2NzkzMTE+CisKKyAgICAgICAgUmVtb3ZlIGEg
ZmV3IG1vcmUgaW5zdGFuY2VzIG9mIHN0ZDo6ZnVuY3Rpb24gaW4gdGhlIFdlYnNpdGVEYXRhU3Rv
cmUsIGFuZCBXVEZNb3ZlIGNvbXBsZXRpb24gaGFuZGxlciB0bworICAgICAgICBhdm9pZCB1bm5l
Y2Vzc2FyeSBjb3BpZXMuCisKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFUeXBlLmg6IFJlbW92ZSByZWR1bmRhbnQgV2Vic2l0ZURhdGFUeXBlIGZyb20gbmFtZS4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFSZWNvcmRJbnRlcm5hbC5o
OgorICAgICAgICAoV2ViS2l0Ojp0b1dlYnNpdGVEYXRhVHlwZSk6IFVwZGF0ZSBmb3IgcmV2aXNl
ZCBuYW1lLgorICAgICAgICAoV2ViS2l0Ojp0b1dLV2Vic2l0ZURhdGFUeXBlcyk6IERpdHRvLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUHJveHk6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yVG9wUHJpdmF0ZWx5Q29udHJv
bGxlZERvbWFpbnNJbkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKTogQVNTRVJUIHRoYXQKKyAgICAg
ICAgdGhpcyBmdW5jdGlvbiwgYXMgd2VsbCBhcyBpdHMgY29tcGxldGlvbiBoYW5kbGVyLCBhcmUg
Z2V0dGluZyBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQcm94eTo6dG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRoV2ViaXRlRGF0
YSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmZldGNoV2Vic2l0
ZURhdGEpOiBNb3ZlIHRoZSBjb21wbGV0aW9uSGFuZGxlci4KKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Byb3h5OjpkZWxldGVXZWJzaXRlRGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUHJveHk6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyk6IERpdHRvLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YSk6IFN3aXRjaCB0byBGdW5jdGlvbiwgYW5kIG1vdmUg
Y29tcGxldGlvbiBoYW5kbGVyLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpm
ZXRjaERhdGFGb3JUb3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlucyk6IERpdHRvLgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjp0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlu
c1dpdGhXZWJzaXRlRGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpyZW1vdmVEYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnJlbW92ZURhdGFGb3JUb3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlucyk6IERpdHRvLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisKIDIw
MTctMDYtMDkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBdm9p
ZCBzb21lIHJlZiBjb3VudGluZyBjaHVybiBpbiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFUeXBlLmgJKHJldmlzaW9uIDIxODAwMikKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw3ICs0Niw3
IEBAIGVudW0gY2xhc3MgV2Vic2l0ZURhdGFUeXBlIHsKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQogICAgIE1lZGlhRGV2aWNlSWRlbnRpZmllciA9IDEgPDwgMTIsCiAjZW5kaWYKLSAgICBXZWJz
aXRlRGF0YVR5cGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gMSA8PCAxMywKKyAgICBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzID0gMSA8PCAxMywKICAgICBDcmVkZW50aWFscyA9IDEgPDwgMTQsCiB9
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cAkocmV2aXNpb24gMjE4MDAyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw2ICsyMTEsOSBAQCBXZWJQYWdlUHJv
eHkqIFdlYlByb2Nlc3NQcm94eTo6d2ViUGFnZSh1CiAKIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpk
ZWxldGVXZWJzaXRlRGF0YUZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zSW5BbGxQZXJz
aXN0ZW50RGF0YVN0b3JlcyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFZl
Y3RvcjxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnMsIGJvb2wgc2hvdWxk
Tm90aWZ5UGFnZSwgRnVuY3Rpb248dm9pZChWZWN0b3I8U3RyaW5nPik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CisgICAgLy8gV2UgZXhwZWN0IHRoaXMgdG8gYmUgY2FsbGVkIG9uIHRoZSBtYWlu
IHRocmVhZCBzbyB3ZSBnZXQgdGhlIGRlZmF1bHQgd2Vic2l0ZSBkYXRhIHN0b3JlCisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAKICAgICBzdHJ1Y3QgQ2FsbGJhY2tBZ2dyZWdhdG9y
IDogVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q2FsbGJhY2tBZ2dyZWdhdG9yPiB7CiAgICAgICAgIGV4
cGxpY2l0IENhbGxiYWNrQWdncmVnYXRvcihGdW5jdGlvbjx2b2lkKFZlY3RvcjxTdHJpbmc+KT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIDogY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpCkBAIC0yNTQsMTkgKzI1NywyNCBAQCB2b2lkIFdlYlBy
b2Nlc3NQcm94eTo6ZGVsZXRlV2Vic2l0ZURhdGFGCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgdmlzaXRlZFNlc3Npb25JRHMuYWRkKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSk7CiAgICAg
ICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgIGRh
dGFTdG9yZS5yZW1vdmVEYXRhRm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnMoZGF0YVR5
cGVzLCB7IH0sIFdURk1vdmUodG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnMpLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yLCBzaG91bGROb3RpZnlQYWdlLCBwYWdlXShhdXRvIGRvbWFpbnNXaXRoRGVs
ZXRlZFdlYnNpdGVEYXRhKSB7CisgICAgICAgIGRhdGFTdG9yZS5yZW1vdmVEYXRhRm9yVG9wUHJp
dmF0ZWx5Q29udHJvbGxlZERvbWFpbnMoZGF0YVR5cGVzLCB7IH0sIFdURk1vdmUodG9wUHJpdmF0
ZWx5Q29udHJvbGxlZERvbWFpbnMpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBzaG91bGROb3RpZnlQ
YWdlLCBwYWdlXShWZWN0b3I8U3RyaW5nPiYmIGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRh
KSB7CisgICAgICAgICAgICAvLyBXaGVuIGNvbXBsZXRpbmcgdGhlIHRhc2ssIHdlIHNob3VsZCBi
ZSBnZXR0aW5nIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2hvdWxkTm90
aWZ5UGFnZSkKICAgICAgICAgICAgICAgICBwYWdlLnZhbHVlLT5wb3N0TWVzc2FnZVRvSW5qZWN0
ZWRCdW5kbGUoIldlYnNpdGVEYXRhRGVsZXRpb25Gb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnNG
aW5pc2hlZCIsIG51bGxwdHIpOwotICAgICAgICAgICAgV1RGOjpSdW5Mb29wOjptYWluKCkuZGlz
cGF0Y2goW2NhbGxiYWNrQWdncmVnYXRvciwgZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGFd
IHsKLSAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZERvbWFpbnNXaXRoRGVs
ZXRlZFdlYnNpdGVEYXRhKGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKTsKLSAgICAgICAg
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwotICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRv
ci0+YWRkRG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEoZG9tYWluc1dpdGhEZWxldGVkV2Vi
c2l0ZURhdGEpOworICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5n
Q2FsbGJhY2soKTsKICAgICAgICAgfSk7CiAgICAgfQogfQogCi12b2lkIFdlYlByb2Nlc3NQcm94
eTo6dG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRoV2ViaXRlRGF0YShPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGJvb2wgc2hvdWxkTm90aWZ5UGFnZSwgRnVuY3Rp
b248dm9pZChIYXNoU2V0PFN0cmluZz4mJik+IGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJQ
cm9jZXNzUHJveHk6OnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdlYml0ZURhdGEo
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBib29sIHNob3VsZE5vdGlmeVBh
Z2UsIEZ1bmN0aW9uPHZvaWQoSGFzaFNldDxTdHJpbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogeworICAgIC8vIFdlIGV4cGVjdCB0aGlzIHRvIGJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJl
YWQgc28gd2UgZ2V0IHRoZSBkZWZhdWx0IHdlYnNpdGUgZGF0YSBzdG9yZQorICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgCiAgICAgc3RydWN0IENhbGxiYWNrQWdncmVnYXRvciA6IFRo
cmVhZFNhZmVSZWZDb3VudGVkPENhbGxiYWNrQWdncmVnYXRvcj4gewogICAgICAgICBleHBsaWNp
dCBDYWxsYmFja0FnZ3JlZ2F0b3IoRnVuY3Rpb248dm9pZChIYXNoU2V0PFN0cmluZz4mJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgICAgICA6IGNvbXBsZXRpb25IYW5kbGVyKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKQpAQCAtMzEyLDEzICszMjAsMTQgQEAgdm9pZCBXZWJQcm9j
ZXNzUHJveHk6OnRvcFByaXZhdGVseUNvbnRybwogICAgICAgICB2aXNpdGVkU2Vzc2lvbklEcy5h
ZGQoZGF0YVN0b3JlLnNlc3Npb25JRCgpKTsKICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5h
ZGRQZW5kaW5nQ2FsbGJhY2soKTsKICAgICAgICAgZGF0YVN0b3JlLnRvcFByaXZhdGVseUNvbnRy
b2xsZWREb21haW5zV2l0aFdlYnNpdGVEYXRhKGRhdGFUeXBlcywgeyB9LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yLCBzaG91bGROb3RpZnlQYWdlLCBwYWdlXShIYXNoU2V0PFN0cmluZz4mJiBkb21haW5z
V2l0aERhdGFSZWNvcmRzKSB7CisgICAgICAgICAgICAvLyBXaGVuIGNvbXBsZXRpbmcgdGhlIHRh
c2ssIHdlIHNob3VsZCBiZSBnZXR0aW5nIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAg
ICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAoc2hvdWxkTm90aWZ5UGFnZSkKICAgICAgICAgICAgICAgICBwYWdlLnZhbHVlLT5wb3N0
TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoIldlYnNpdGVEYXRhU2NhbkZvclRvcFByaXZhdGVseUNv
bnRyb2xsZWREb21haW5zRmluaXNoZWQiLCBudWxscHRyKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgV1RGOjpSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NhbGxiYWNrQWdncmVnYXRvciwg
ZG9tYWluc1dpdGhEYXRhUmVjb3JkcyA9IFdURk1vdmUoZG9tYWluc1dpdGhEYXRhUmVjb3Jkcyld
KCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGREb21h
aW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YShXVEZNb3ZlKGRvbWFpbnNXaXRoRGF0YVJlY29yZHMp
KTsKLSAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxs
YmFjaygpOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3It
PmFkZERvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKFdURk1vdmUoZG9tYWluc1dpdGhEYXRh
UmVjb3JkcykpOworICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5n
Q2FsbGJhY2soKTsKICAgICAgICAgfSk7CiAgICAgfQogfQpAQCAtODY3LDcgKzg3Niw3IEBAIHZv
aWQgV2ViUHJvY2Vzc1Byb3h5Ojp3aW5kb3dTZXJ2ZXJDb25uZWMKICAgICAgICAgcGFnZS0+YWN0
aXZpdHlTdGF0ZURpZENoYW5nZShBY3Rpdml0eVN0YXRlOjpJc1Zpc3VhbGx5SWRsZSk7CiB9CiAK
LXZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpmZXRjaFdlYnNpdGVEYXRhKFNlc3Npb25JRCBzZXNzaW9u
SUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgRnVuY3Rpb248dm9pZCAo
V2Vic2l0ZURhdGEpPiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpm
ZXRjaFdlYnNpdGVEYXRhKFNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0
YVR5cGU+IGRhdGFUeXBlcywgRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0YSk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKGNhblNlbmRNZXNzYWdlKCkpOwogCkBAIC04ODUsNyAr
ODk0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OmZldGNoV2Vic2l0ZURhdGEoUwogICAgIH0p
OwogfQogCi12b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGVsZXRlV2Vic2l0ZURhdGEoU2Vzc2lvbklE
IHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBzdGQ6OmNo
cm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlmaWVkU2luY2UsIEZ1bmN0aW9uPHZv
aWQgKCk+IGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJQcm9jZXNzUHJveHk6OmRlbGV0ZVdl
YnNpdGVEYXRhKFNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IGRhdGFUeXBlcywgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmll
ZFNpbmNlLCBGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKGNhblNlbmRNZXNzYWdlKCkpOwogCkBAIC04OTgsNyArOTA3LDcgQEAgdm9pZCBXZWJQcm9j
ZXNzUHJveHk6OmRlbGV0ZVdlYnNpdGVEYXRhKAogICAgIH0pOwogfQogCi12b2lkIFdlYlByb2Nl
c3NQcm94eTo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFNlc3Npb25JRCBzZXNzaW9uSUQs
IE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29uc3QgVmVjdG9yPFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbnMsIEZ1bmN0aW9uPHZvaWQoKT4gY29tcGxl
dGlvbkhhbmRsZXIpCit2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JP
cmlnaW5zKFNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRh
dGFUeXBlcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdp
bnMsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQo
Y2FuU2VuZE1lc3NhZ2UoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDIxODAwMikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDExICsxMzgsMTEg
QEAgcHVibGljOgogICAgIHZvaWQgZGlkU2F2ZVRvUGFnZUNhY2hlKCk7CiAgICAgdm9pZCByZWxl
YXNlUGFnZUNhY2hlKCk7CiAKLSAgICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoV2ViQ29yZTo6U2Vz
c2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgRnVuY3Rpb248dm9pZChXZWJzaXRl
RGF0YSk+IGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFdl
YkNvcmU6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIHN0ZDo6Y2hyb25v
OjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5jZSwgRnVuY3Rpb248dm9pZCgp
PiBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdp
bnMoV2ViQ29yZTo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mLCBGdW5jdGlvbjx2b2lkKCk+IGNv
bXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoV2ViQ29yZTo6U2Vz
c2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgRnVuY3Rpb248dm9pZChXZWJzaXRl
RGF0YSk+JiYgY29tcGxldGlvbkhhbmRsZXIpOworICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEo
V2ViQ29yZTo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgc3RkOjpjaHJv
bm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlLCBGdW5jdGlvbjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOworICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGFGb3JP
cmlnaW5zKFdlYkNvcmU6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiwgRnVuY3Rpb248dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBzdGF0aWMgdm9pZCBkZWxldGVXZWJzaXRlRGF0
YUZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0b3Jl
cyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgVmVjdG9yPFN0cmluZz4mJiB0b3BQcml2YXRl
bHlDb250cm9sbGVkRG9tYWlucywgYm9vbCBzaG91bGROb3RpZnlQYWdlcywgRnVuY3Rpb248dm9p
ZChWZWN0b3I8U3RyaW5nPik+JiYgY29tcGxldGlvbkhhbmRsZXIpOwotICAgIHN0YXRpYyB2b2lk
IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdlYml0ZURhdGEoT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBib29sIHNob3VsZE5vdGlmeVBhZ2UsIEZ1bmN0aW9u
PHZvaWQoSGFzaFNldDxTdHJpbmc+JiYpPiBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgc3RhdGlj
IHZvaWQgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRoV2ViaXRlRGF0YShPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGJvb2wgc2hvdWxkTm90aWZ5UGFnZSwgRnVu
Y3Rpb248dm9pZChIYXNoU2V0PFN0cmluZz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogICAg
IHN0YXRpYyB2b2lkIG5vdGlmeVBhZ2VTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzZWQo
KTsKIAogICAgIHZvaWQgZW5hYmxlU3VkZGVuVGVybWluYXRpb24oKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVJlY29yZEludGVybmFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhUmVjb3JkSW50ZXJuYWwuaAkocmV2aXNpb24gMjE4MDAyKQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhUmVjb3JkSW50ZXJuYWwuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFs
PFdlYnNpdGVEYXRhVAogICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFUeXBlOjpQbHVnSW5EYXRh
OwogI2VuZGlmCiAgICAgaWYgKFt3ZWJzaXRlRGF0YVR5cGUgaXNFcXVhbFRvU3RyaW5nOl9XS1dl
YnNpdGVEYXRhVHlwZVJlc291cmNlTG9hZFN0YXRpc3RpY3NdKQotICAgICAgICByZXR1cm4gV2Vi
c2l0ZURhdGFUeXBlOjpXZWJzaXRlRGF0YVR5cGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOworICAg
ICAgICByZXR1cm4gV2Vic2l0ZURhdGFUeXBlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwogICAg
IGlmIChbd2Vic2l0ZURhdGFUeXBlIGlzRXF1YWxUb1N0cmluZzpfV0tXZWJzaXRlRGF0YVR5cGVD
cmVkZW50aWFsc10pCiAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YVR5cGU6OkNyZWRlbnRpYWxz
OwogICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CkBAIC0xMTcsNyArMTE3LDcgQEAgc3RhdGljIGlu
bGluZSBSZXRhaW5QdHI8TlNTZXQ+IHRvV0tXZWJzaQogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVz
LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UGx1Z0luRGF0YSkpCiAgICAgICAgIFt3a1dlYnNp
dGVEYXRhVHlwZXMgYWRkT2JqZWN0Ol9XS1dlYnNpdGVEYXRhVHlwZVBsdWdJbkRhdGFdOwogI2Vu
ZGlmCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpX
ZWJzaXRlRGF0YVR5cGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSkKKyAgICBpZiAod2Vic2l0ZURh
dGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3Mp
KQogICAgICAgICBbd2tXZWJzaXRlRGF0YVR5cGVzIGFkZE9iamVjdDpfV0tXZWJzaXRlRGF0YVR5
cGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzXTsKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250
YWlucyhXZWJzaXRlRGF0YVR5cGU6OkNyZWRlbnRpYWxzKSkKICAgICAgICAgW3drV2Vic2l0ZURh
dGFUeXBlcyBhZGRPYmplY3Q6X1dLV2Vic2l0ZURhdGFUeXBlQ3JlZGVudGlhbHNdOwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmNwcAkocmV2aXNpb24gMjE4MDAyKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODIsMTAgKzE4MiwxMCBAQCBzdGF0aWMgUHJvY2Vzc0FjY2Vzc1R5cGUgY29tcHV0ZVdlYlBy
b2NlCiAgICAgcmV0dXJuIHByb2Nlc3NBY2Nlc3NUeXBlOwogfQogCi12b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmZldGNoRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE9w
dGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMsIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPik+IGNvbXBsZXRpb25IYW5kbGVyKQor
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZT4gZGF0YVR5cGVzLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRp
b25zLCBGdW5jdGlvbjx2b2lkKFZlY3RvcjxXZWJzaXRlRGF0YVJlY29yZD4pPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIHN0cnVjdCBDYWxsYmFja0FnZ3JlZ2F0b3IgZmluYWwgOiBUaHJl
YWRTYWZlUmVmQ291bnRlZDxDYWxsYmFja0FnZ3JlZ2F0b3I+IHsKLSAgICAgICAgZXhwbGljaXQg
Q2FsbGJhY2tBZ2dyZWdhdG9yKE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRj
aE9wdGlvbnMsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPik+
IGNvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICBleHBsaWNpdCBDYWxsYmFja0FnZ3JlZ2F0b3Io
T3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgRnVuY3Rpb248
dm9pZChWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+KT4gY29tcGxldGlvbkhhbmRsZXIpCiAgICAg
ICAgICAgICA6IGZldGNoT3B0aW9ucyhmZXRjaE9wdGlvbnMpCiAgICAgICAgICAgICAsIGNvbXBs
ZXRpb25IYW5kbGVyKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKQogICAgICAgICB7CkBAIC0y
ODEsNyArMjgxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGEoT3B0aW9uUwog
ICAgICAgICBjb25zdCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRp
b25zOwogCiAgICAgICAgIHVuc2lnbmVkIHBlbmRpbmdDYWxsYmFja3MgPSAwOwotICAgICAgICBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKFZlY3RvcjxXZWJzaXRlRGF0YVJlY29yZD4pPiBjb21wbGV0aW9u
SGFuZGxlcjsKKyAgICAgICAgRnVuY3Rpb248dm9pZChWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+
KT4gY29tcGxldGlvbkhhbmRsZXI7CiAKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFdlYnNpdGVE
YXRhUmVjb3JkPiBtX3dlYnNpdGVEYXRhUmVjb3JkczsKICAgICB9OwpAQCAtNTA3LDkgKzUwNyw5
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhKE9wdGlvblMKICAgICBjYWxsYmFj
a0FnZ3JlZ2F0b3ItPmNhbGxJZk5lZWRlZCgpOwogfQogCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmZldGNoRGF0YUZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zKE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+
IGZldGNoT3B0aW9ucywgVmVjdG9yPFN0cmluZz4mJiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9t
YWlucywgc3RkOjpmdW5jdGlvbjx2b2lkKFZlY3RvcjxXZWJzaXRlRGF0YVJlY29yZD4mJiwgVmVj
dG9yPFN0cmluZz4mJik+IGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpmZXRjaERhdGFGb3JUb3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlucyhPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9u
PiBmZXRjaE9wdGlvbnMsIFZlY3RvcjxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERv
bWFpbnMsIEZ1bmN0aW9uPHZvaWQoVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiYmLCBWZWN0b3I8
U3RyaW5nPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBmZXRjaERhdGEoZGF0YVR5
cGVzLCBmZXRjaE9wdGlvbnMsIFt0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlucyA9IFdURk1v
dmUodG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnMpLCBjb21wbGV0aW9uSGFuZGxlcl0oYXV0
byYmIGV4aXN0aW5nRGF0YVJlY29yZHMpIHsKKyAgICBmZXRjaERhdGEoZGF0YVR5cGVzLCBmZXRj
aE9wdGlvbnMsIFt0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlucyA9IFdURk1vdmUodG9wUHJp
dmF0ZWx5Q29udHJvbGxlZERvbWFpbnMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZXhpc3RpbmdEYXRhUmVjb3JkcykgewogICAgICAgICBW
ZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+IG1hdGNoaW5nRGF0YVJlY29yZHM7CiAgICAgICAgIFZl
Y3RvcjxTdHJpbmc+IGRvbWFpbnNXaXRoTWF0Y2hpbmdEYXRhUmVjb3JkczsKICAgICAgICAgZm9y
IChhdXRvJiYgZGF0YVJlY29yZCA6IGV4aXN0aW5nRGF0YVJlY29yZHMpIHsKQEAgLTUyNSwxNSAr
NTI1LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhRm9yVG9wUHIKICAgICB9
KTsKIH0KICAgICAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dG9wUHJpdmF0ZWx5Q29udHJvbGxl
ZERvbWFpbnNXaXRoV2Vic2l0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5
cGVzLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRpb25zLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoSGFzaFNldDxTdHJpbmc+JiYpPiBjb21wbGV0aW9uSGFuZGxlcikKK3Zv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6dG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRoV2Vi
c2l0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRpb25zLCBGdW5jdGlvbjx2b2lkKEhhc2hT
ZXQ8U3RyaW5nPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBmZXRjaERhdGEoZGF0
YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjb21wbGV0aW9uSGFuZGxlciwgdGhpc10oYXV0byYmIGV4
aXN0aW5nRGF0YVJlY29yZHMpIHsKKyAgICBmZXRjaERhdGEoZGF0YVR5cGVzLCBmZXRjaE9wdGlv
bnMsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCB0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKGF1dG8mJiBleGlzdGluZ0RhdGFSZWNv
cmRzKSB7CiAgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBkb21haW5zV2l0aERhdGFSZWNvcmRzOwog
ICAgICAgICBmb3IgKGF1dG8mJiBkYXRhUmVjb3JkIDogZXhpc3RpbmdEYXRhUmVjb3Jkcykgewot
ICAgICAgICAgICAgU3RyaW5nIGRvbWFpbiA9IGRhdGFSZWNvcmQudG9wUHJpdmF0ZWx5Q29udHJv
bGxlZERvbWFpbigpOworICAgICAgICAgICAgU3RyaW5nJiYgZG9tYWluID0gZGF0YVJlY29yZC50
b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluKCk7CiAgICAgICAgICAgICBpZiAoZG9tYWluLmlz
RW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGRvbWFpbnNX
aXRoRGF0YVJlY29yZHMuYWRkKGRvbWFpbik7CisgICAgICAgICAgICBkb21haW5zV2l0aERhdGFS
ZWNvcmRzLmFkZChXVEZNb3ZlKGRvbWFpbikpOwogICAgICAgICB9CiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKFdURk1vdmUoZG9tYWluc1dpdGhEYXRhUmVjb3JkcykpOwogICAgIH0pOwpAQCAt
NTc3LDEwICs1NzcsMTAgQEAgc3RhdGljIFByb2Nlc3NBY2Nlc3NUeXBlIGNvbXB1dGVXZWJQcm9j
ZQogICAgIHJldHVybiBwcm9jZXNzQWNjZXNzVHlwZTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgc3Rk
OjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQgKCk+IGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgc3RkOjpj
aHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlLCBGdW5jdGlvbjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgc3RydWN0IENhbGxiYWNrQWdncmVn
YXRvciA6IFRocmVhZFNhZmVSZWZDb3VudGVkPENhbGxiYWNrQWdncmVnYXRvcj4gewotICAgICAg
ICBleHBsaWNpdCBDYWxsYmFja0FnZ3JlZ2F0b3IgKHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY29t
cGxldGlvbkhhbmRsZXIpCisgICAgICAgIGV4cGxpY2l0IENhbGxiYWNrQWdncmVnYXRvcihGdW5j
dGlvbjx2b2lkKCk+IGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICAgICAgOiBjb21wbGV0aW9u
SGFuZGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgewogICAgICAgICB9
CkBAIC02MDUsNyArNjA1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9w
dGlvbgogICAgICAgICB9CiAKICAgICAgICAgdW5zaWduZWQgcGVuZGluZ0NhbGxiYWNrcyA9IDA7
Ci0gICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uSGFuZGxlcjsKKyAgICAg
ICAgRnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uSGFuZGxlcjsKICAgICB9OwogCiAgICAgUmVm
UHRyPENhbGxiYWNrQWdncmVnYXRvcj4gY2FsbGJhY2tBZ2dyZWdhdG9yID0gYWRvcHRSZWYobmV3
IENhbGxiYWNrQWdncmVnYXRvcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOwpAQCAtODAw
LDE0ICs4MDAsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvbgog
ICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OldlYnNpdGVEYXRhVHlwZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpKQorICAgIGlmIChkYXRh
VHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSkK
ICAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCku
Y2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZShtb2RpZmllZFNpbmNlKTsKIAogICAgIC8v
IFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCB3ZSBkb24ndCBoYXZlIGFueSBwZW5kaW5nIGNhbGxiYWNr
cy4gSWYgc28sIHdlIHdhbnQgdG8gZGlzcGF0Y2ggdGhlIGNvbXBsZXRpb24gaGFuZGxlciByaWdo
dCBhd2F5LgogICAgIGNhbGxiYWNrQWdncmVnYXRvci0+Y2FsbElmTmVlZGVkKCk7CiB9CiAKLXZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiBkYXRhVHlwZXMsIGNvbnN0IFZlY3RvcjxXZWJzaXRlRGF0YVJlY29yZD4mIGRhdGFSZWNvcmRz
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBl
cywgY29uc3QgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiYgZGF0YVJlY29yZHMsIEZ1bmN0aW9u
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBWZWN0b3I8V2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zOwogCkBAIC04MTcsNyArODE3LDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvbgogICAgIH0KIAogICAgIHN0cnVjdCBDYWxs
YmFja0FnZ3JlZ2F0b3IgOiBUaHJlYWRTYWZlUmVmQ291bnRlZDxDYWxsYmFja0FnZ3JlZ2F0b3I+
IHsKLSAgICAgICAgZXhwbGljaXQgQ2FsbGJhY2tBZ2dyZWdhdG9yIChzdGQ6OmZ1bmN0aW9uPHZv
aWQgKCk+IGNvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICBleHBsaWNpdCBDYWxsYmFja0FnZ3Jl
Z2F0b3IoRnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIDog
Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpCiAgICAgICAgIHsK
ICAgICAgICAgfQpAQCAtODQyLDcgKzg0Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVt
b3ZlRGF0YShPcHRpb24KICAgICAgICAgfQogCiAgICAgICAgIHVuc2lnbmVkIHBlbmRpbmdDYWxs
YmFja3MgPSAwOwotICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkhhbmRs
ZXI7CisgICAgICAgIEZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkhhbmRsZXI7CiAgICAgfTsK
IAogICAgIFJlZlB0cjxDYWxsYmFja0FnZ3JlZ2F0b3I+IGNhbGxiYWNrQWdncmVnYXRvciA9IGFk
b3B0UmVmKG5ldyBDYWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
KTsKQEAgLTEwNjksMTggKzEwNjksMTggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVE
YXRhKE9wdGlvbgogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhX
ZWJzaXRlRGF0YVR5cGU6OldlYnNpdGVEYXRhVHlwZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpKQor
ICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzKSkKICAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZE9ic2VydmVyKCkuY2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwogCiAgICAgLy8g
VGhlcmUncyBhIGNoYW5jZSB0aGF0IHdlIGRvbid0IGhhdmUgYW55IHBlbmRpbmcgY2FsbGJhY2tz
LiBJZiBzbywgd2Ugd2FudCB0byBkaXNwYXRjaCB0aGUgY29tcGxldGlvbiBoYW5kbGVyIHJpZ2h0
IGF3YXkuCiAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5jYWxsSWZOZWVkZWQoKTsKIH0KIAotdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhRm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxlZERv
bWFpbnMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRpb25zLCBWZWN0b3I8U3RyaW5nPiYmIHRvcFBy
aXZhdGVseUNvbnRyb2xsZWREb21haW5zLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoVmVjdG9yPFN0cmlu
Zz4pPiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0
YUZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0
aW9ucywgVmVjdG9yPFN0cmluZz4mJiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlucywgRnVu
Y3Rpb248dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAg
ICBmZXRjaERhdGFGb3JUb3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlucyhkYXRhVHlwZXMsIGZl
dGNoT3B0aW9ucywgV1RGTW92ZSh0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlucyksIFtkYXRh
VHlwZXMsIGNvbXBsZXRpb25IYW5kbGVyLCB0aGlzXShhdXRvIHdlYnNpdGVEYXRhUmVjb3Jkcywg
YXV0byBkb21haW5zV2l0aERhdGFSZWNvcmRzKSB7Ci0gICAgICAgIHRoaXMtPnJlbW92ZURhdGEo
ZGF0YVR5cGVzLCB3ZWJzaXRlRGF0YVJlY29yZHMsIFtkb21haW5zV2l0aERhdGFSZWNvcmRzLCBj
b21wbGV0aW9uSGFuZGxlcl0oKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihkb21h
aW5zV2l0aERhdGFSZWNvcmRzKTsKKyAgICBmZXRjaERhdGFGb3JUb3BQcml2YXRlbHlDb250cm9s
bGVkRG9tYWlucyhkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgV1RGTW92ZSh0b3BQcml2YXRlbHlD
b250cm9sbGVkRG9tYWlucyksIFtkYXRhVHlwZXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIHRoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KV0oVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiYmIHdlYnNpdGVEYXRhUmVjb3JkcywgVmVjdG9y
PFN0cmluZz4mJiBkb21haW5zV2l0aERhdGFSZWNvcmRzKSBtdXRhYmxlIHsKKyAgICAgICAgdGhp
cy0+cmVtb3ZlRGF0YShkYXRhVHlwZXMsIHdlYnNpdGVEYXRhUmVjb3JkcywgW2RvbWFpbnNXaXRo
RGF0YVJlY29yZHMgPSBXVEZNb3ZlKGRvbWFpbnNXaXRoRGF0YVJlY29yZHMpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkb21haW5zV2l0aERhdGFSZWNvcmRzKSk7
CiAgICAgICAgIH0pOwogICAgIH0pOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCShyZXZpc2lvbiAy
MTgwMDIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9TZWN1cml0eU9yaWdpbkhhc2guaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5o
PgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTkzLDEyICs5NCwxMiBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgdm9pZCBjbG9uZVNlc3Npb25EYXRhKFdlYlBhZ2VQcm94eSYgc291cmNlUGFnZSwgV2Vi
UGFnZVByb3h5JiBuZXdQYWdlKTsKIAotICAgIHZvaWQgZmV0Y2hEYXRhKE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPik+IGNvbXBsZXRpb25IYW5kbGVy
KTsKLSAgICB2b2lkIGZldGNoRGF0YUZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zKE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlv
bj4sIFZlY3RvcjxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnMsIHN0ZDo6
ZnVuY3Rpb248dm9pZChWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+JiYsIFZlY3RvcjxTdHJpbmc+
JiYpPiBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgdm9pZCB0b3BQcml2YXRlbHlDb250cm9sbGVk
RG9tYWluc1dpdGhXZWJzaXRlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlw
ZXMsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMsIHN0ZDo6
ZnVuY3Rpb248dm9pZChIYXNoU2V0PFN0cmluZz4mJik+IGNvbXBsZXRpb25IYW5kbGVyKTsKLSAg
ICB2b2lkIHJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIHN0ZDo6Y2hyb25v
OjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5jZSwgc3RkOjpmdW5jdGlvbjx2
b2lkICgpPiBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgdm9pZCByZW1vdmVEYXRhKE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+LCBjb25zdCBWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+Jiwgc3Rk
OjpmdW5jdGlvbjx2b2lkICgpPiBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgdm9pZCByZW1vdmVE
YXRhRm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnMoT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgVmVjdG9yPFN0cmluZz4m
JiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlucywgc3RkOjpmdW5jdGlvbjx2b2lkKFZlY3Rv
cjxTdHJpbmc+KT4gY29tcGxldGlvbkhhbmRsZXIpOworICAgIHZvaWQgZmV0Y2hEYXRhKE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4s
IEZ1bmN0aW9uPHZvaWQoVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPik+JiYgY29tcGxldGlvbkhh
bmRsZXIpOworICAgIHZvaWQgZmV0Y2hEYXRhRm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFp
bnMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNo
T3B0aW9uPiwgVmVjdG9yPFN0cmluZz4mJiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlucywg
RnVuY3Rpb248dm9pZChWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+JiYsIFZlY3RvcjxTdHJpbmc+
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIHRvcFByaXZhdGVseUNvbnRyb2xs
ZWREb21haW5zV2l0aFdlYnNpdGVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFU
eXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgRnVu
Y3Rpb248dm9pZChIYXNoU2V0PFN0cmluZz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpOworICAg
IHZvaWQgcmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgc3RkOjpjaHJvbm86
OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlLCBGdW5jdGlvbjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpOworICAgIHZvaWQgcmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiwgY29uc3QgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiYsIEZ1bmN0aW9u
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCByZW1vdmVEYXRhRm9yVG9w
UHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9w
dGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgVmVjdG9yPFN0cmluZz4mJiB0b3BQcml2
YXRlbHlDb250cm9sbGVkRG9tYWlucywgRnVuY3Rpb248dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcik7CiAKICNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJ
VElPTklORykKICAgICB2b2lkIHNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlP
d25lZERvbWFpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb1JlbW92ZSwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0FkZCwgYm9vbCBjbGVhckZpcnN0KTsK
</data>
<flag name="review"
          id="333401"
          type_id="1"
          status="+"
          setter="cdumez"
    />
    <flag name="commit-queue"
          id="333406"
          type_id="3"
          status="-"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>