<?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>142476</bug_id>
          
          <creation_ts>2015-03-09 02:47:56 -0700</creation_ts>
          <short_desc>[OpenWebRTC] RealtimeMediaSourceCenter implementation</short_desc>
          <delta_ts>2015-05-18 02:22:34 -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>Platform</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>
          <dependson>142393</dependson>
    
    <dependson>142778</dependson>
    
    <dependson>145119</dependson>
          <blocked>79203</blocked>
    
    <blocked>124288</blocked>
    
    <blocked>143211</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Philippe Normand">pnormand</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>adam.bergkvist</cc>
    
    <cc>agouaillard</cc>
    
    <cc>pnormand</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1075556</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2015-03-09 02:47:56 -0700</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077828</commentid>
    <comment_count>1</comment_count>
      <attachid>248833</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2015-03-17 02:28:21 -0700</bug_when>
    <thetext>Created attachment 248833
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077831</commentid>
    <comment_count>2</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2015-03-17 02:40:23 -0700</bug_when>
    <thetext>I&apos;ll file a bug for EFL&apos;s jhbuild</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077883</commentid>
    <comment_count>3</comment_count>
      <attachid>248833</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-03-17 08:23:42 -0700</bug_when>
    <thetext>Comment on attachment 248833
patch

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

&gt; Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:67
&gt; +    DEPRECATED_DEFINE_STATIC_LOCAL(RealtimeMediaSourceCenterOwr, center, ());

Nit: is there any reason to not use NeverDestroyed?

&gt; Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:80
&gt; +void RealtimeMediaSourceCenterOwr::validateRequestConstraints(PassRefPtr&lt;MediaStreamCreationClient&gt; prpClient, PassRefPtr&lt;MediaConstraints&gt; prpAudioConstraints, PassRefPtr&lt;MediaConstraints&gt; prpVideoConstraints)

Nit: it would be good to switch from PassRefPtr/RefPtr to Ref before the WebRTC implementation(s) get any bigger. Not necessarily in this patch, but soon.

&gt; Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:146
&gt; +    GList* item;
&gt; +
&gt; +    for (item = sources; item; item = item-&gt;next) {

Nit: this isn&apos;t needed outside of the loop so you shouldn&apos;t need to pre-declare it. Can you use &quot;auto&quot;?

&gt; Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:159
&gt; +        if (mediaType &amp; OWR_MEDIA_TYPE_AUDIO)
&gt; +            sourceType = RealtimeMediaSource::Audio;
&gt; +        else if (mediaType &amp; OWR_MEDIA_TYPE_VIDEO)
&gt; +            sourceType = RealtimeMediaSource::Video;

else ASSERT()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078189</commentid>
    <comment_count>4</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2015-03-18 08:07:08 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 248833 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=248833&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:67
&gt; &gt; +    DEPRECATED_DEFINE_STATIC_LOCAL(RealtimeMediaSourceCenterOwr, center, ());
&gt; 
&gt; Nit: is there any reason to not use NeverDestroyed?
&gt; 

Hum, nope :)

&gt; &gt; Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:80
&gt; &gt; +void RealtimeMediaSourceCenterOwr::validateRequestConstraints(PassRefPtr&lt;MediaStreamCreationClient&gt; prpClient, PassRefPtr&lt;MediaConstraints&gt; prpAudioConstraints, PassRefPtr&lt;MediaConstraints&gt; prpVideoConstraints)
&gt; 
&gt; Nit: it would be good to switch from PassRefPtr/RefPtr to Ref before the
&gt; WebRTC implementation(s) get any bigger. Not necessarily in this patch, but
&gt; soon.
&gt; 

Good idea, I&apos;ll file a separate patch for this.

&gt; &gt; Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:146
&gt; &gt; +    GList* item;
&gt; &gt; +
&gt; &gt; +    for (item = sources; item; item = item-&gt;next) {
&gt; 
&gt; Nit: this isn&apos;t needed outside of the loop so you shouldn&apos;t need to
&gt; pre-declare it. Can you use &quot;auto&quot;?
&gt; 

Sure!

&gt; &gt; Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:159
&gt; &gt; +        if (mediaType &amp; OWR_MEDIA_TYPE_AUDIO)
&gt; &gt; +            sourceType = RealtimeMediaSource::Audio;
&gt; &gt; +        else if (mediaType &amp; OWR_MEDIA_TYPE_VIDEO)
&gt; &gt; +            sourceType = RealtimeMediaSource::Video;
&gt; 
&gt; else ASSERT()

Ok, I can add an ASSERT_NOT_REACHED() here indeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079613</commentid>
    <comment_count>5</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2015-03-24 08:19:21 -0700</bug_when>
    <thetext>Committed r181893: &lt;http://trac.webkit.org/changeset/181893&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248833</attachid>
            <date>2015-03-17 02:28:21 -0700</date>
            <delta_ts>2015-03-17 08:23:42 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>27987</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBlMzRhNzgzZTJlMzg2ZDRmMDRiNjAxNTY1YjAxOGI5OTBkZDc4YjE2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDE3IE1hciAyMDE1IDEwOjA5OjMwICswMTAwClN1YmplY3Q6IFtQQVRDSF0g
cGF0Y2gKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgNDEgKysrKysKIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlICAgICAg
ICAgICAgICAgICAgIHwgICA1ICstCiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSAg
ICAgICAgICAgICAgICAgICB8ICAgNSArLQogLi4uL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRl
ckdTdHJlYW1lci5jcHAgICAgICAgfCAgOTEgLS0tLS0tLS0tLQogLi4uL21lZGlhc3RyZWFtL29w
ZW53ZWJydGMvT3BlbldlYlJUQ1V0aWxpdGllcy5jcHAgfCAgNTIgKysrKysrCiAuLi4vbWVkaWFz
dHJlYW0vb3BlbndlYnJ0Yy9PcGVuV2ViUlRDVXRpbGl0aWVzLmggICB8ICA0MCArKysrKwogLi4u
L29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ci5jcHAgICAgfCAxODYgKysr
KysrKysrKysrKysrKysrKysrCiAuLi4vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ci5ofSAg
ICAgICAgICAgICAgICB8ICAyNyArKy0KIC4uLi9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3Vy
Y2VPd3IuaCAgICAgICAgICAgIHwgIDc4ICsrKysrKysrKwogOSBmaWxlcyBjaGFuZ2VkLCA0MjEg
aW5zZXJ0aW9ucygrKSwgMTA0IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRl
ckdTdHJlYW1lci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMuY3BwCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0
Yy9PcGVuV2ViUlRDVXRpbGl0aWVzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXJPd3IuY3BwCiByZW5hbWUgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0ve2dz
dHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oID0+IG9wZW53ZWJydGMvUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlck93ci5ofSAoNzUlKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNv
dXJjZU93ci5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDE1ZWVmZGUuLjIyMTE4ZDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw0NCBAQAorMjAxNS0wMy0xNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGln
YWxpYS5jb20+CisKKyAgICAgICAgW09wZW5XZWJSVENdIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXIgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0MjQ3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoZSBvbGQgR1N0cmVhbWVyIE1lZGlhU3RyZWFtQ2VudGVyIGlzIHJlcGxhY2Vk
IGJ5IHRoZSBPcGVuV2ViUlRDCisgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuIEl0
IGlzIG5vdCB5ZXQgYWJsZSB0byBjb3JyZWN0bHkgYXNzZXNzCisgICAgICAgIE1lZGlhQ29uc3Ry
YWludHMgc28gaXQgc2VsZWN0cyB0aGUgZmlyc3QgYXVkaW8vdmlkZW8gc291cmNlcworICAgICAg
ICBhdmFpbGFibGUgdGhyb3VnaCBPcGVuV2ViUlRDLgorCisgICAgICAgICogUGxhdGZvcm1FZmwu
Y21ha2U6IEFkZCBuZXcgZmlsZXMgdG8gdGhlIGJ1aWxkLgorICAgICAgICAqIFBsYXRmb3JtR1RL
LmNtYWtlOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvT3BlbldlYlJUQ1V0aWxpdGllcy5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZU9wZW5XZWJSVEMpOiBTaW1wbGUgZnVuY3Rp
b24gdG8gaW5pdGlhbGl6ZSB0aGUKKyAgICAgICAgZnJhbWV3b3JrLCBpdCBpcyBnb2luZyB0byBi
ZSB1c2VkIGJ5IHRoZSBQZWVyQ29ubmVjdGlvbiBiYWNrZW5kIGFzIHdlbGwuCisgICAgICAgICog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9PcGVuV2ViUlRDVXRpbGl0aWVzLmg6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlck93ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFT
b3VyY2VzQXZhaWxhYmxlQ2FsbGJhY2spOiBGdW5jdGlvbiBpbnZva2VkIG9uY2UKKyAgICAgICAg
dGhlIG1lZGlhIHNvdXJjZXMgZGlzY292ZXJ5IHN1Y2NlZWRlZCB3aXRoaW4gT3BlbldlYlJUQy4K
KyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnBsYXRmb3JtQ2Vu
dGVyKTogSW5zdGFudGlhdGUKKyAgICAgICAgdGhlIE9wZW5XZWJSVEMgUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlci4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJP
d3I6OlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlck93cjo6flJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3Ip
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93cjo6dmFsaWRh
dGVSZXF1ZXN0Q29uc3RyYWludHMpOgorICAgICAgICBTY2hlZHVsZSBhIGRpc2NvdmVyeSBwcm9j
ZXNzIGZvciB0aGUgY2FwdHVyZSBzb3VyY2VzLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlck93cjo6Y3JlYXRlTWVkaWFTdHJlYW0pOiBQaWNrCisgICAgICAgIHRo
ZSBmaXJzdCBhdWRpby92aWRlbyBzb3VyY2VzIGFuZCBjcmVhdGUgYSBNZWRpYVN0cmVhbSBhY2Nv
cmRpbmdseS4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I6
OmdldE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzKToKKyAgICAgICAgTm90IHlldCBpbXBsZW1lbnRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I6Om1lZGlh
U291cmNlc0F2YWlsYWJsZSk6CisgICAgICAgIE1ldGhvZCBpbnZva2VkIG9uY2UgdGhlIGNhcHR1
cmUgc291cmNlcyBwcm9jZXNzIHN1Y2NlZWRlZC4gUGFyc2UKKyAgICAgICAgdGhlbSBhbmQgY3Jl
YXRlIGFuIGludGVybmFsIGNhY2hlIG9mIFJlYWx0aW1lTWVkaWFTb3VyY2VzIGFjY29yZGluZ2x5
LgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93cjo6Zmlyc3RT
b3VyY2UpOiBVdGlsaXR5CisgICAgICAgIGZ1bmN0aW9uIHRvIGZldGNoIHRoZSBmaXJzdCBzb3Vy
Y2Ugb2YgdGhlIGdpdmVuIHR5cGUgZnJvbSB0aGUKKyAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJj
ZXMgY2FjaGUuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyT3dyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIu
aC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVk
aWFTb3VyY2VPd3IuaDogQWRkZWQuCisKIDIwMTUtMDMtMTcgIE1hdHQgQmFrZXIgIDxtYXR0YmFr
ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFNob3cgcmVuZGVyaW5nIGZy
YW1lcyAoYW5kIEZQUykgaW4gTGF5b3V0IGFuZCBSZW5kZXJpbmcgdGltZWxpbmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UKaW5kZXggZjBhM2M0My4uOTI0ZmExNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1F
ZmwuY21ha2UKQEAgLTE4LDcgKzE4LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJ
UkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcCIK
ICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9saW51eCIKLSAgICAiJHtXRUJDT1JFX0RJ
Un0vcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyIgorICAgICIke1dFQkNPUkVfRElSfS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9tb2NrL21lZGlhc291cmNlIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3RleHQvZWZsIgpAQCAtMjEz
LDcgKzIxMyw4IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2xp
bnV4L0dhbWVwYWREZXZpY2VMaW51eC5jcHAKICAgICBwbGF0Zm9ybS9saW51eC9NZW1vcnlQcmVz
c3VyZUhhbmRsZXJMaW51eC5jcHAKIAotICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5jcHAKKyAgICBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMuY3BwCisgICAgcGxhdGZvcm0vbWVkaWFz
dHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyLmNwcAogCiAgICAg
cGxhdGZvcm0vbmV0d29yay9lZmwvTmV0d29ya1N0YXRlTm90aWZpZXJFZmwuY3BwCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1HVEsuY21ha2UKaW5kZXggZGQyNjQ5MC4uYzc1M2RiNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1HVEsuY21ha2UKQEAgLTE2LDcgKzE2LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURF
X0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL29wZW50
eXBlIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy93YXlsYW5kIgogICAg
ICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9saW51eCIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9vcGVud2VicnRjIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9t
b2NrL21lZGlhc291cmNlIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9uZXR3b3JrL2d0
ayIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay9zb3VwIgpAQCAtMTUzLDcg
KzE1Myw4IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2xpbnV4
L0dhbWVwYWREZXZpY2VMaW51eC5jcHAKICAgICBwbGF0Zm9ybS9saW51eC9NZW1vcnlQcmVzc3Vy
ZUhhbmRsZXJMaW51eC5jcHAKIAotICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9N
ZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5jcHAKKyAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9v
cGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMuY3BwCisgICAgcGxhdGZvcm0vbWVkaWFzdHJl
YW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyLmNwcAogCiAgICAgcGxh
dGZvcm0vbmV0d29yay9zb3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU291cC5jcHAKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2Vu
dGVyR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDViZjEwNGUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
RXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICog
My4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1DZW50ZXJH
U3RyZWFtZXIuaCIKLQotI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQuaCIKLSNp
bmNsdWRlICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNr
U291cmNlc1JlcXVlc3RDbGllbnQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2lu
Y2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaCIKLSNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXImIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnBsYXRmb3JtQ2VudGVyKCkKLXsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJ
Q19MT0NBTChNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lciwgY2VudGVyLCAoKSk7Ci0gICAgcmV0
dXJuIGNlbnRlcjsKLX0KLQotTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6Ok1lZGlhU3RyZWFt
Q2VudGVyR1N0cmVhbWVyKCkKLXsKLX0KLQotTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6On5N
ZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcigpCi17Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1DZW50
ZXJHU3RyZWFtZXI6OnZhbGlkYXRlUmVxdWVzdENvbnN0cmFpbnRzKFBhc3NSZWZQdHI8TWVkaWFT
dHJlYW1DcmVhdGlvbkNsaWVudD4gcHJwUXVlcnlDbGllbnQsIFBhc3NSZWZQdHI8TWVkaWFDb25z
dHJhaW50cz4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pCi17Ci0gICAgUmVmUHRyPE1l
ZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+IGNsaWVudCA9IHBycFF1ZXJ5Q2xpZW50OwotICAgIC8v
IEZJWE1FOiBBY3R1YWxseSBkbyBjb25zdHJhaW50cyB2YWxpZGF0aW9uLiBUaGUgTWVkaWFDb25z
dHJhaW50cwotICAgIC8vIG5lZWQgdG8gY29tcGx5IHdpdGggdGhlIGF2YWlsYWJsZSBhdWRpby92
aWRlbyBkZXZpY2UocykKLSAgICAvLyBjYXBhYmlsaXRpZXMuIFNlZSBidWcgIzEyMzM0NS4KLSAg
ICBjbGllbnQtPmNvbnN0cmFpbnRzVmFsaWRhdGVkKCk7Ci19Ci0gICAgCi12b2lkIE1lZGlhU3Ry
ZWFtQ2VudGVyR1N0cmVhbWVyOjpjcmVhdGVNZWRpYVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3Ry
ZWFtQ3JlYXRpb25DbGllbnQ+IHBycFF1ZXJ5Q2xpZW50LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3Ry
YWludHM+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+KQotewotICAgIFJlZlB0cjxNZWRp
YVN0cmVhbUNyZWF0aW9uQ2xpZW50PiBjbGllbnQgPSBwcnBRdWVyeUNsaWVudDsKLSAgICBBU1NF
UlQoY2xpZW50KTsKLQotICAgIFZlY3RvcjxSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4+IGF1
ZGlvU291cmNlczsKLSAgICBWZWN0b3I8UmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+PiB2aWRl
b1NvdXJjZXM7Ci0gICAgLy8gRklYTUU6IGZpbGwgc291cmNlIHZlY3RvcnMsIHNlZSBidWcgIzEx
MDE1MC4KLSAgICBjbGllbnQtPmRpZENyZWF0ZVN0cmVhbShNZWRpYVN0cmVhbVByaXZhdGU6OmNy
ZWF0ZShhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNlcykpOwotCi19Ci0KLWJvb2wgTWVkaWFTdHJl
YW1DZW50ZXJHU3RyZWFtZXI6OmdldE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzKFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0Q2xpZW50PikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvT3BlbldlYlJUQ1V0aWxpdGllcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL09wZW5X
ZWJSVENVdGlsaXRpZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5
OTE5NWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9vcGVud2VicnRjL09wZW5XZWJSVENVdGlsaXRpZXMuY3BwCkBAIC0wLDAgKzEsNTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAy
MDE1IE1ldHJvbG9naWNhbAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIFVTRShPUEVOV0VCUlRDKQorI2luY2x1ZGUgIk9wZW5XZWJSVENV
dGlsaXRpZXMuaCIKKworI2luY2x1ZGUgPG93ci9vd3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit2b2lkIGluaXRpYWxpemVPcGVuV2ViUlRDKCkKK3sKKyAgICBvd3JfaW5pdF93aXRoX21h
aW5fY29udGV4dChnX21haW5fY29udGV4dF9kZWZhdWx0KCkpOworfQorCit9CisKKyNlbmRpZiAv
LyBVU0UoT1BFTldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL29wZW53ZWJydGMvT3BlbldlYlJUQ1V0aWxpdGllcy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9PcGVuV2ViUlRDVXRpbGl0aWVzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVkNDc0YgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53ZWJydGMvT3Bl
bldlYlJUQ1V0aWxpdGllcy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgSWdhbGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbAorICoK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBOZWl0aGVyIHRoZSBu
YW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBp
bml0aWFsaXplT3BlbldlYlJUQygpOworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJP
d3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9S
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5iNTYxM2U5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dy
LmNwcApAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3Nv
biBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBT
LkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgTWV0cm9sb2dp
Y2FsLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y
cworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQorI2luY2x1ZGUgIlJlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXJPd3IuaCIKKworI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ3JlYXRpb25D
bGllbnQuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKKyNpbmNsdWRlICJNZWRp
YVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIk9wZW5XZWJSVENVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJSZWFs
dGltZU1lZGlhU291cmNlLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxp
dGllcy5oIgorI2luY2x1ZGUgIlVVSUQuaCIKKyNpbmNsdWRlIDxvd3Ivb3dyLmg+CisjaW5jbHVk
ZSA8b3dyL293cl9sb2NhbC5oPgorI2luY2x1ZGUgPG93ci9vd3JfbWVkaWFfc291cmNlLmg+Cisj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVW5pcXVl
UHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0hhc2guaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2b2lkIG1l
ZGlhU291cmNlc0F2YWlsYWJsZUNhbGxiYWNrKEdMaXN0KiBzb3VyY2VzLCBncG9pbnRlciB1c2Vy
RGF0YSkKK3sKKyAgICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyKiBzdHJlYW1DZW50ZXIg
PSByZWludGVycHJldF9jYXN0PFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IqPih1c2VyRGF0
YSk7CisgICAgc3RyZWFtQ2VudGVyLT5tZWRpYVNvdXJjZXNBdmFpbGFibGUoc291cmNlcyk7Cit9
CisKK1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXImIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6
OnBsYXRmb3JtQ2VudGVyKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIERF
UFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dy
LCBjZW50ZXIsICgpKTsKKyAgICByZXR1cm4gY2VudGVyOworfQorCitSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyT3dyOjpSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyKCkKK3sKKyAgICBpbml0
aWFsaXplT3BlbldlYlJUQygpOworfQorCitSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyOjp+
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93cigpCit7Cit9CisKK3ZvaWQgUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlck93cjo6dmFsaWRhdGVSZXF1ZXN0Q29uc3RyYWludHMoUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiBwcnBDbGllbnQsIFBhc3NSZWZQdHI8TWVkaWFDb25z
dHJhaW50cz4gcHJwQXVkaW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRz
PiBwcnBWaWRlb0NvbnN0cmFpbnRzKQoreworICAgIG1fY2xpZW50ID0gcHJwQ2xpZW50OworICAg
IEFTU0VSVChtX2NsaWVudCk7CisKKyAgICAvLyBGSVhNRTogQWN0dWFsbHkgZG8gY29uc3RyYWlu
dHMgdmFsaWRhdGlvbi4gVGhlIE1lZGlhQ29uc3RyYWludHMKKyAgICAvLyBuZWVkIHRvIGNvbXBs
eSB3aXRoIHRoZSBhdmFpbGFibGUgYXVkaW8vdmlkZW8gZGV2aWNlKHMpCisgICAgLy8gY2FwYWJp
bGl0aWVzLiBTZWUgYnVnICMxMjMzNDUuCisgICAgUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGF1
ZGlvQ29uc3RyYWludHMgPSBwcnBBdWRpb0NvbnN0cmFpbnRzOworICAgIFJlZlB0cjxNZWRpYUNv
bnN0cmFpbnRzPiB2aWRlb0NvbnN0cmFpbnRzID0gcHJwVmlkZW9Db25zdHJhaW50czsKKworICAg
IGludCB0eXBlczsKKyAgICBpZiAoYXVkaW9Db25zdHJhaW50cykKKyAgICAgICAgdHlwZXMgfD0g
T1dSX01FRElBX1RZUEVfQVVESU87CisgICAgaWYgKHZpZGVvQ29uc3RyYWludHMpCisgICAgICAg
IHR5cGVzIHw9IE9XUl9NRURJQV9UWVBFX1ZJREVPOworCisgICAgb3dyX2dldF9jYXB0dXJlX3Nv
dXJjZXMoc3RhdGljX2Nhc3Q8T3dyTWVkaWFUeXBlPih0eXBlcyksIG1lZGlhU291cmNlc0F2YWls
YWJsZUNhbGxiYWNrLCB0aGlzKTsKK30KKwordm9pZCBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
T3dyOjpjcmVhdGVNZWRpYVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGll
bnQ+IHBycFF1ZXJ5Q2xpZW50LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGF1ZGlvQ29u
c3RyYWludHMsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gdmlkZW9Db25zdHJhaW50cykK
K3sKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4gY2xpZW50ID0gcHJwUXVl
cnlDbGllbnQ7CisgICAgQVNTRVJUKGNsaWVudCk7CisKKyAgICBVTlVTRURfUEFSQU0oYXVkaW9D
b25zdHJhaW50cyk7CisgICAgVU5VU0VEX1BBUkFNKHZpZGVvQ29uc3RyYWludHMpOworCisgICAg
VmVjdG9yPFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPj4gYXVkaW9Tb3VyY2VzOworICAgIFZl
Y3RvcjxSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4+IHZpZGVvU291cmNlczsKKworICAgIGlm
IChhdWRpb0NvbnN0cmFpbnRzKSB7CisgICAgICAgIC8vIFRPRE86IHZlcmlmeSBjb25zdHJhaW50
cyBhY2NvcmRpbmcgdG8gcmVnaXN0ZXJlZAorICAgICAgICAvLyBzb3VyY2VzLiBGb3Igbm93LCB1
bmNvbmRpdGlvbmFsbHkgcGljayB0aGUgZmlyc3Qgc291cmNlLCBzZWUgYnVnICMxMjMzNDUuCisg
ICAgICAgIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiBhdWRpb1NvdXJjZSA9IGZpcnN0U291
cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvKTsKKyAgICAgICAgaWYgKGF1ZGlvU291cmNl
KSB7CisgICAgICAgICAgICBhdWRpb1NvdXJjZS0+cmVzZXQoKTsKKyAgICAgICAgICAgIGF1ZGlv
U291cmNlLT5zZXRSZWFkeVN0YXRlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OkxpdmUpOworICAgICAg
ICAgICAgYXVkaW9Tb3VyY2VzLmFwcGVuZChhdWRpb1NvdXJjZS5yZWxlYXNlKCkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKHZpZGVvQ29uc3RyYWludHMpIHsKKyAgICAgICAgLy8gVE9E
TzogdmVyaWZ5IGNvbnN0cmFpbnRzIGFjY29yZGluZyB0byByZWdpc3RlcmVkCisgICAgICAgIC8v
IHNvdXJjZXMuIEZvciBub3csIHVuY29uZGl0aW9uYWxseSBwaWNrIHRoZSBmaXJzdCBzb3VyY2Us
IHNlZSBidWcgIzEyMzM0NS4KKyAgICAgICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IHZp
ZGVvU291cmNlID0gZmlyc3RTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW8pOworICAg
ICAgICBpZiAodmlkZW9Tb3VyY2UpIHsKKyAgICAgICAgICAgIHZpZGVvU291cmNlLT5yZXNldCgp
OworICAgICAgICAgICAgdmlkZW9Tb3VyY2UtPnNldFJlYWR5U3RhdGUoUmVhbHRpbWVNZWRpYVNv
dXJjZTo6TGl2ZSk7CisgICAgICAgICAgICB2aWRlb1NvdXJjZXMuYXBwZW5kKHZpZGVvU291cmNl
LnJlbGVhc2UoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGllbnQtPmRpZENyZWF0ZVN0
cmVhbShNZWRpYVN0cmVhbVByaXZhdGU6OmNyZWF0ZShhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNl
cykpOworfQorCitib29sIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I6OmdldE1lZGlhU3Ry
ZWFtVHJhY2tTb3VyY2VzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0
Q2xpZW50PikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyT3dyOjptZWRpYVNvdXJjZXNBdmFpbGFi
bGUoR0xpc3QqIHNvdXJjZXMpCit7CisgICAgR0xpc3QqIGl0ZW07CisKKyAgICBmb3IgKGl0ZW0g
PSBzb3VyY2VzOyBpdGVtOyBpdGVtID0gaXRlbS0+bmV4dCkgeworICAgICAgICBPd3JNZWRpYVNv
dXJjZSogc291cmNlID0gT1dSX01FRElBX1NPVVJDRShpdGVtLT5kYXRhKTsKKworICAgICAgICBH
VW5pcXVlT3V0UHRyPGdjaGFyPiBuYW1lOworICAgICAgICBPd3JNZWRpYVR5cGUgbWVkaWFUeXBl
OworICAgICAgICBnX29iamVjdF9nZXQoc291cmNlLCAibWVkaWEtdHlwZSIsICZtZWRpYVR5cGUs
ICJuYW1lIiwgJm5hbWUub3V0UHRyKCksIE5VTEwpOworICAgICAgICBTdHJpbmcgc291cmNlTmFt
ZShuYW1lLmdldCgpKTsKKyAgICAgICAgU3RyaW5nIGlkKGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJp
bmcoKSk7CisKKyAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSBzb3VyY2VUeXBlOwor
ICAgICAgICBpZiAobWVkaWFUeXBlICYgT1dSX01FRElBX1RZUEVfQVVESU8pCisgICAgICAgICAg
ICBzb3VyY2VUeXBlID0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW87CisgICAgICAgIGVsc2Ug
aWYgKG1lZGlhVHlwZSAmIE9XUl9NRURJQV9UWVBFX1ZJREVPKQorICAgICAgICAgICAgc291cmNl
VHlwZSA9IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlZpZGVvOworCisgICAgICAgIFJlZlB0cjxSZWFs
dGltZU1lZGlhU291cmNlT3dyPiBtZWRpYVNvdXJjZSA9IGFkb3B0UmVmKG5ldyBSZWFsdGltZU1l
ZGlhU291cmNlT3dyKHNvdXJjZSwgaWQsIHNvdXJjZVR5cGUsIHNvdXJjZU5hbWUpKTsKKworICAg
ICAgICBSZWFsdGltZU1lZGlhU291cmNlT3dyTWFwOjppdGVyYXRvciBzb3VyY2VJdGVyYXRvciA9
IG1fc291cmNlTWFwLmZpbmQoaWQpOworICAgICAgICBpZiAoc291cmNlSXRlcmF0b3IgPT0gbV9z
b3VyY2VNYXAuZW5kKCkpCisgICAgICAgICAgICBtX3NvdXJjZU1hcC5hZGQoaWQsIG1lZGlhU291
cmNlKTsKKworICAgIH0KKworICAgIC8vIFRPRE86IE1ha2Ugc3VyZSBjb250cmFpbnRzIGFyZSBh
Y3R1YWxseSB2YWxpZGF0ZWQgYnkgY2hlY2tpbmcgc291cmNlIHR5cGVzLgorICAgIG1fY2xpZW50
LT5jb25zdHJhaW50c1ZhbGlkYXRlZCgpOworfQorCitQYXNzUmVmUHRyPFJlYWx0aW1lTWVkaWFT
b3VyY2U+IFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3I6OmZpcnN0U291cmNlKFJlYWx0aW1l
TWVkaWFTb3VyY2U6OlR5cGUgdHlwZSkKK3sKKyAgICBmb3IgKGF1dG8gaXRlciA9IG1fc291cmNl
TWFwLmJlZ2luKCk7IGl0ZXIgIT0gbV9zb3VyY2VNYXAuZW5kKCk7ICsraXRlcikgeworICAgICAg
ICBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4gc291cmNlID0gaXRlci0+dmFsdWU7CisgICAg
ICAgIGlmIChzb3VyY2UtPnR5cGUoKSA9PSB0eXBlKQorICAgICAgICAgICAgcmV0dXJuIHNvdXJj
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck93ci5oCnNp
bWlsYXJpdHkgaW5kZXggNzUlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oCnJlbmFtZSB0
byBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9vcGVud2VicnRjL1JlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXJPd3IuaAppbmRleCA4YWYxM2NmLi42NWQ5ZTY0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJl
YW1DZW50ZXJHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9vcGVud2VicnRjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IuaApAQCAtMSw2ICsx
LDggQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMTUgKzMxLDE1
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgTWVkaWFTdHJlYW1DZW50ZXJHU3Ry
ZWFtZXJfaAotI2RlZmluZSBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcl9oCisjaWZuZGVmIFJl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3JfaAorI2RlZmluZSBSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyT3dyX2gKIAotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCiAKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyLmgiCiAKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlT3dyLmgiCiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NSwxOCArNDcsMjUgQEAgY2xhc3MgTWVkaWFT
dHJlYW1Qcml2YXRlOwogY2xhc3MgUmVhbHRpbWVNZWRpYVNvdXJjZTsKIGNsYXNzIE1lZGlhU3Ry
ZWFtU291cmNlc1F1ZXJ5Q2xpZW50OwogCi1jbGFzcyBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1l
ciA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyIHsKK2NsYXNzIFJlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXJPd3IgZmluYWwgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRl
ciB7CiBwdWJsaWM6Ci0gICAgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIoKTsKLSAgICB+TWVk
aWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIoKTsKKyAgICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
T3dyKCk7CisgICAgflJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJPd3IoKTsKIAogICAgIHZpcnR1
YWwgdm9pZCB2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFt
Q3JlYXRpb25DbGllbnQ+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGF1ZGlvQ29uc3Ry
YWludHMsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gdmlkZW9Db25zdHJhaW50cyk7CiAg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZU1lZGlhU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1D
cmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gYXVkaW9Db25zdHJh
aW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0cmFpbnRzKTsKICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0TWVkaWFTdHJlYW1UcmFja1NvdXJjZXMoUGFzc1JlZlB0cjxNZWRp
YVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQ+KSBvdmVycmlkZTsKKworICAgIHZvaWQg
bWVkaWFTb3VyY2VzQXZhaWxhYmxlKEdMaXN0KiBzb3VyY2VzKTsKKworcHJpdmF0ZToKKyAgICBQ
YXNzUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGZpcnN0U291cmNlKFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGUpOworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3JNYXAgbV9zb3VyY2VNYXA7
CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+IG1fY2xpZW50OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkK
KyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoT1BFTldFQlJUQykKIAotI2Vu
ZGlmIC8vIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyX2gKKyNlbmRpZiAvLyBSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyT3dyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL29wZW53ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vb3BlbndlYnJ0Yy9SZWFsdGltZU1lZGlhU291
cmNlT3dyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ3NGQ1YwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL29wZW53
ZWJydGMvUmVhbHRpbWVNZWRpYVNvdXJjZU93ci5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAyMDE1IE1ldHJv
bG9naWNhbAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlYWx0aW1lTWVk
aWFTb3VyY2VPd3JfaAorI2RlZmluZSBSZWFsdGltZU1lZGlhU291cmNlT3dyX2gKKworI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0
ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKyNpbmNsdWRl
IDxvd3Ivb3dyX21lZGlhX3NvdXJjZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRp
ZXM7CisKK2NsYXNzIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IgZmluYWwgOiBwdWJsaWMgUmVhbHRp
bWVNZWRpYVNvdXJjZSB7CitwdWJsaWM6CitSZWFsdGltZU1lZGlhU291cmNlT3dyKE93ck1lZGlh
U291cmNlKiBtZWRpYVNvdXJjZSwgY29uc3QgU3RyaW5nJiBpZCwgUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgOiBSZWFsdGltZU1lZGlhU291
cmNlKGlkLCB0eXBlLCBuYW1lKQorICAgICwgbV9tZWRpYVNvdXJjZShtZWRpYVNvdXJjZSkKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCB+UmVhbHRpbWVNZWRpYVNvdXJjZU93cigpIHsgfQor
CisgICAgdmlydHVhbCBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcz4gY2Fw
YWJpbGl0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9jYXBhYmlsaXRpZXM7IH0KKyAgICB2aXJ0dWFs
IGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXMmIHN0YXRlcygpIHsgcmV0dXJuIG1fY3Vy
cmVudFN0YXRlczsgfQorCisgICAgT3dyTWVkaWFTb3VyY2UqIG1lZGlhU291cmNlKCkgY29uc3Qg
eyByZXR1cm4gbV9tZWRpYVNvdXJjZTsgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxSZWFsdGlt
ZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBtX2NhcGFiaWxpdGllczsKKyAgICBSZWFsdGltZU1l
ZGlhU291cmNlU3RhdGVzIG1fY3VycmVudFN0YXRlczsKKyAgICBPd3JNZWRpYVNvdXJjZSogbV9t
ZWRpYVNvdXJjZTsKK307CisKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxSZWFsdGlt
ZU1lZGlhU291cmNlT3dyPj4gUmVhbHRpbWVNZWRpYVNvdXJjZU93ck1hcDsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKE9Q
RU5XRUJSVEMpCisKKyNlbmRpZiAvLyBSZWFsdGltZU1lZGlhU291cmNlT3dyX2gKLS0gCjIuMS40
</data>
<flag name="review"
          id="273697"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>