<?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>162559</bug_id>
          
          <creation_ts>2016-09-26 07:38:57 -0700</creation_ts>
          <short_desc>[Fetch API] Refactor FetchBody to use std::experimental::variant</short_desc>
          <delta_ts>2016-10-01 06:16:25 -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 Misc.</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>151937</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1233400</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-26 07:38:57 -0700</bug_when>
    <thetext>A body can only have one type of data at a time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233401</commentid>
    <comment_count>1</comment_count>
      <attachid>289829</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-26 07:43:56 -0700</bug_when>
    <thetext>Created attachment 289829
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233405</commentid>
    <comment_count>2</comment_count>
      <attachid>289829</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-26 08:03:29 -0700</bug_when>
    <thetext>Comment on attachment 289829
Patch

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

Cool! I like this.

&gt; Source/WebCore/Modules/fetch/FetchBody.cpp:321
&gt; +        RefPtr&lt;FormData&gt; body = const_cast&lt;FormData*&gt;(&amp;formDataBody());

Can we do a RefPtr&lt;const FormData&gt;?  See https://trac.webkit.org/changeset/203257

&gt; Source/WebCore/Modules/fetch/FetchBody.cpp:344
&gt; +        clone.m_data = const_cast&lt;Blob&amp;&gt;(blobBody());

Could we make m_data a variant of types like Ref&lt;const Blob&gt; to avoid const_casts here?

&gt; Source/WebCore/Modules/fetch/FetchBody.h:98
&gt;      FetchBody(Type type) : m_type(type) { }

Do we need this?

&gt; Source/WebCore/Modules/fetch/FetchBody.h:119
&gt;      Type m_type { Type::None };

Doesn&apos;t the variant keep track of the type now?  This seems like redundant information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233407</commentid>
    <comment_count>3</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-26 08:13:37 -0700</bug_when>
    <thetext>Thanks for the feedback.

&gt; &gt; Source/WebCore/Modules/fetch/FetchBody.cpp:321
&gt; &gt; +        RefPtr&lt;FormData&gt; body = const_cast&lt;FormData*&gt;(&amp;formDataBody());
&gt; 
&gt; Can we do a RefPtr&lt;const FormData&gt;?  See
&gt; https://trac.webkit.org/changeset/203257

Interesting, will check this.

&gt; &gt; Source/WebCore/Modules/fetch/FetchBody.cpp:344
&gt; &gt; +        clone.m_data = const_cast&lt;Blob&amp;&gt;(blobBody());
&gt; 
&gt; Could we make m_data a variant of types like Ref&lt;const Blob&gt; to avoid
&gt; const_casts here?

Will check this.

&gt; &gt; Source/WebCore/Modules/fetch/FetchBody.h:98
&gt; &gt;      FetchBody(Type type) : m_type(type) { }
&gt; 
&gt; Do we need this?

Probably no longer, will check this.

&gt; &gt; Source/WebCore/Modules/fetch/FetchBody.h:119
&gt; &gt;      Type m_type { Type::None };
&gt; 
&gt; Doesn&apos;t the variant keep track of the type now?  This seems like redundant
&gt; information.

Type is tracking other things, like if data is a ReadableStream, if data is stored in FetchBodyConsumer, or if its being loaded.
While we need to keep that information, it may be nicer to split the Type enum into two or more fields, one of which being redundant with the variant.
I plan to check this as a follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233418</commentid>
    <comment_count>4</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-26 08:42:02 -0700</bug_when>
    <thetext>&gt; &gt; &gt; Source/WebCore/Modules/fetch/FetchBody.cpp:344
&gt; &gt; &gt; +        clone.m_data = const_cast&lt;Blob&amp;&gt;(blobBody());
&gt; &gt; 
&gt; &gt; Could we make m_data a variant of types like Ref&lt;const Blob&gt; to avoid
&gt; &gt; const_casts here?
&gt; 
&gt; Will check this.

That is working for Blob, it is not working for ArrayBuffer and ArrayBufferView.
DeferrableRefCounted::ref/deref are not marked as const.

For FormData, I am not sure we should be using a Ref&lt;const FormData&gt; since we sometimes call FormData::generateFiles which is not const.

I think it makes sense to change Blob, ArrayBuffer and ArrayBufferView at the same time. Can we tackle it in a follow-up patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233419</commentid>
    <comment_count>5</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-26 08:44:45 -0700</bug_when>
    <thetext>&gt; &gt; &gt; Source/WebCore/Modules/fetch/FetchBody.h:98
&gt; &gt; &gt;      FetchBody(Type type) : m_type(type) { }
&gt; &gt; 
&gt; &gt; Do we need this?
&gt; 
&gt; Probably no longer, will check this.

It is used to build FetchBody using readable code like { Type::Loading }.
I would prefer keeping it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233741</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-26 22:53:02 -0700</bug_when>
    <thetext>Sure.  Followup patches can be done.
DeferrableRefCountedBase::m_refCount should be made mutable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233762</commentid>
    <comment_count>7</comment_count>
      <attachid>289829</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-27 01:01:08 -0700</bug_when>
    <thetext>Comment on attachment 289829
Patch

Clearing flags on attachment: 289829

Committed r206421: &lt;http://trac.webkit.org/changeset/206421&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233763</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-27 01:01:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233907</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-09-27 09:45:56 -0700</bug_when>
    <thetext>Even after reading the comments above, I think we should also get rid of m_type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235618</commentid>
    <comment_count>10</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-10-01 06:16:25 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Even after reading the comments above, I think we should also get rid of
&gt; m_type.

Partially done in bug 162559.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289829</attachid>
            <date>2016-09-26 07:43:56 -0700</date>
            <delta_ts>2016-09-27 01:01:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162559-20160926164058.patch</filename>
            <type>text/plain</type>
            <size>14063</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2MzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTIyMDc5YzI3Y2YyMzQw
ZWQxOTMyNGUwMmNlZTY0MDU0ODcxYzhmNS4uYTg5ZjM5YjI4NjU3NmJhNGUzMWM5YmY1MTRkODI1
OGQzM2NmZjY1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE2LTA5LTI2ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBbRmV0Y2ggQVBJXSBSZWZh
Y3RvciBGZXRjaEJvZHkgdG8gdXNlIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI1NTkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXRp
bmcgdGVzdHMuCisKKyAgICAgICAgVXNpbmcgdmFyaWFudCB0byByZXByZXNlbnQgdGhlIHZhcmlh
bnQgZGF0YSB0eXBlcy4KKyAgICAgICAgQWRkaW5nIG51bGxwdHIgYXMgYSBzcGVjaWZpYyB0eXBl
IGZvciBkZWZhdWx0IGVtcHR5IHZhbHVlcyBhbmQgdG8gYWxsb3cgY2xlYW4tdXAuCisgICAgICAg
IEFkZGluZyBGZXRjaEJvZHk6OmNsb25lIGFzIHRoZSBkZWZhdWx0IGNvcHkgY29uc3RydWN0b3Ig
aXMgZGVsZXRlZCB3aXRoIHRoaXMgY2hhbmdlLgorCisgICAgICAgICogTW9kdWxlcy9mZXRjaC9G
ZXRjaEJvZHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5OjpGZXRjaEJvZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojpqc29uKToKKyAgICAgICAgKFdlYkNvcmU6OkZl
dGNoQm9keTo6dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmNvbnN1bWVBc1N0
cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmNvbnN1bWVBcnJheUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmNvbnN1bWVBcnJheUJ1ZmZlclZpZXcpOgor
ICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojpjb25zdW1lVGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpGZXRjaEJvZHk6OmNvbnN1bWVCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9k
eTo6ZXh0cmFjdEZyb21UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6Ym9keUZv
ckludGVybmFsUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmNsb25lKToK
KyAgICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oOgorICAgICAgICAoV2ViQ29yZTo6
RmV0Y2hCb2R5OjpibG9iQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmZvcm1E
YXRhQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmFycmF5QnVmZmVyQm9keSk6
CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmFycmF5QnVmZmVyVmlld0JvZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojp0ZXh0Qm9keSk6CisgICAgICAgICogTW9kdWxlcy9m
ZXRjaC9GZXRjaFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hSZXF1ZXN0Ojpj
bG9uZSk6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaFJlc3BvbnNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZldGNoUmVzcG9uc2U6OmNsb25lRm9ySlMpOgorCiAyMDE2LTA5LTI1ICBB
bnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBBdXRob3JTdHlsZVNo
ZWV0cyBzaG91bGRuJ3QgdHJpZ2dlciBzeW5jaHJvbm91cyBzdHlsZSByZXNvbHV0aW9ucwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCmluZGV4IDAzMjM5OTQzNjg2
OWMzZGY0YzlhOTZlZGNmMTVlZWY5NWMzMjc2MzUuLjAzNTI1ZDIwZWUwOGFmYzZjY2U4NDFhN2Iz
OWRkZGZjZTZkYTZjNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hCb2R5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9k
eS5jcHAKQEAgLTQ4LDIzICs0OCwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZldGNoQm9k
eTo6RmV0Y2hCb2R5KFJlZjxCbG9iPiYmIGJsb2IpCiAgICAgOiBtX3R5cGUoVHlwZTo6QmxvYikK
LSAgICAsIG1fY29udGVudFR5cGUoYmxvYi0+dHlwZSgpKQotICAgICwgbV9ibG9iKFdURk1vdmUo
YmxvYikpCisgICAgLCBtX2RhdGEoV1RGTW92ZShibG9iKSkKKyAgICAsIG1fY29udGVudFR5cGUo
dGhpcy0+YmxvYkJvZHkoKS50eXBlKCkpCiB7CiB9CiAKIEZldGNoQm9keTo6RmV0Y2hCb2R5KERP
TUZvcm1EYXRhJiBmb3JtRGF0YSwgRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDogbV90eXBlKFR5
cGU6OkZvcm1EYXRhKQotICAgICwgbV9jb250ZW50VHlwZShBU0NJSUxpdGVyYWwoIm11bHRpcGFy
dC9mb3JtLWRhdGEiKSkKKyAgICAsIG1fZGF0YShGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGZv
cm1EYXRhLCBmb3JtRGF0YS5lbmNvZGluZygpLCAmZG9jdW1lbnQpKQorICAgICwgbV9jb250ZW50
VHlwZShtYWtlU3RyaW5nKCJtdWx0aXBhcnQvZm9ybS1kYXRhO2JvdW5kYXJ5PSIsIHRoaXMtPmZv
cm1EYXRhQm9keSgpLmJvdW5kYXJ5KCkuZGF0YSgpKSkKIHsKLSAgICBtX2Zvcm1EYXRhID0gRm9y
bURhdGE6OmNyZWF0ZU11bHRpUGFydChmb3JtRGF0YSwgZm9ybURhdGEuZW5jb2RpbmcoKSwgJmRv
Y3VtZW50KTsKLSAgICBtX2NvbnRlbnRUeXBlID0gbWFrZVN0cmluZygibXVsdGlwYXJ0L2Zvcm0t
ZGF0YTtib3VuZGFyeT0iLCBtX2Zvcm1EYXRhLT5ib3VuZGFyeSgpLmRhdGEoKSk7CiB9CiAKIEZl
dGNoQm9keTo6RmV0Y2hCb2R5KFN0cmluZyYmIHRleHQpCiAgICAgOiBtX3R5cGUoVHlwZTo6VGV4
dCkKKyAgICAsIG1fZGF0YShXVEZNb3ZlKHRleHQpKQogICAgICwgbV9jb250ZW50VHlwZShBU0NJ
SUxpdGVyYWwoInRleHQvcGxhaW47Y2hhcnNldD1VVEYtOCIpKQotICAgICwgbV90ZXh0KFdURk1v
dmUodGV4dCkpCiB7CiB9CiAKQEAgLTc2LDcgKzc1LDE0IEBAIEZldGNoQm9keTo6RmV0Y2hCb2R5
KFJlZjxBcnJheUJ1ZmZlcj4mJiBkYXRhKQogCiBGZXRjaEJvZHk6OkZldGNoQm9keShSZWY8QXJy
YXlCdWZmZXJWaWV3PiYmIGRhdGFWaWV3KQogICAgIDogbV90eXBlKFR5cGU6OkFycmF5QnVmZmVy
VmlldykKLSAgICAsIG1fZGF0YVZpZXcoV1RGTW92ZShkYXRhVmlldykpCisgICAgLCBtX2RhdGEo
V1RGTW92ZShkYXRhVmlldykpCit7Cit9CisKK0ZldGNoQm9keTo6RmV0Y2hCb2R5KFR5cGUgdHlw
ZSwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3QgRmV0Y2hCb2R5Q29uc3VtZXImIGNv
bnN1bWVyKQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX2NvbnRlbnRUeXBlKGNvbnRlbnRU
eXBlKQorICAgICwgbV9jb25zdW1lcihjb25zdW1lcikKIHsKIH0KIApAQCAtMTQ0LDcgKzE1MCw3
IEBAIHZvaWQgRmV0Y2hCb2R5Ojpqc29uKEZldGNoQm9keU93bmVyJiBvd25lciwgUmVmPERlZmVy
cmVkUHJvbWlzZT4mJiBwcm9taXNlKQogICAgIEFTU0VSVChtX3R5cGUgIT0gVHlwZTo6Tm9uZSk7
CiAKICAgICBpZiAobV90eXBlID09IFR5cGU6OlRleHQpIHsKLSAgICAgICAgZnVsZmlsbFByb21p
c2VXaXRoSlNPTihXVEZNb3ZlKHByb21pc2UpLCBtX3RleHQpOworICAgICAgICBmdWxmaWxsUHJv
bWlzZVdpdGhKU09OKFdURk1vdmUocHJvbWlzZSksIHRleHRCb2R5KCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIG1fY29uc3VtZXIuc2V0VHlwZShGZXRjaEJvZHlDb25zdW1lcjo6VHlw
ZTo6SlNPTik7CkBAIC0xNTYsNyArMTYyLDcgQEAgdm9pZCBGZXRjaEJvZHk6OnRleHQoRmV0Y2hC
b2R5T3duZXImIG93bmVyLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCiAgICAgQVNT
RVJUKG1fdHlwZSAhPSBUeXBlOjpOb25lKTsKIAogICAgIGlmIChtX3R5cGUgPT0gVHlwZTo6VGV4
dCkgewotICAgICAgICBwcm9taXNlLT5yZXNvbHZlKG1fdGV4dCk7CisgICAgICAgIHByb21pc2Ut
PnJlc29sdmUodGV4dEJvZHkoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb25z
dW1lci5zZXRUeXBlKEZldGNoQm9keUNvbnN1bWVyOjpUeXBlOjpUZXh0KTsKQEAgLTIwOSwyNiAr
MjE1LDIzIEBAIHZvaWQgRmV0Y2hCb2R5Ojpjb25zdW1lQXNTdHJlYW0oRmV0Y2hCb2R5T3duZXIm
IG93bmVyLCBGZXRjaFJlc3BvbnNlU291cmNlJiBzb3VyCiAgICAgYm9vbCBjbG9zZVN0cmVhbSA9
IGZhbHNlOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBUeXBlOjpBcnJheUJ1ZmZl
cjoKLSAgICAgICAgQVNTRVJUKG1fZGF0YSk7Ci0gICAgICAgIGNsb3NlU3RyZWFtID0gc291cmNl
LmVucXVldWUoQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5i
eXRlTGVuZ3RoKCkpKTsKKyAgICAgICAgY2xvc2VTdHJlYW0gPSBzb3VyY2UuZW5xdWV1ZShBcnJh
eUJ1ZmZlcjo6dHJ5Q3JlYXRlKGFycmF5QnVmZmVyQm9keSgpLmRhdGEoKSwgYXJyYXlCdWZmZXJC
b2R5KCkuYnl0ZUxlbmd0aCgpKSk7CiAgICAgICAgIG1fZGF0YSA9IG51bGxwdHI7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgVHlwZTo6QXJyYXlCdWZmZXJWaWV3OiB7Ci0gICAgICAgIEFTU0VS
VChtX2RhdGFWaWV3KTsKLSAgICAgICAgY2xvc2VTdHJlYW0gPSBzb3VyY2UuZW5xdWV1ZShBcnJh
eUJ1ZmZlcjo6dHJ5Q3JlYXRlKG1fZGF0YVZpZXctPmJhc2VBZGRyZXNzKCksIG1fZGF0YVZpZXct
PmJ5dGVMZW5ndGgoKSkpOwotICAgICAgICBtX2RhdGFWaWV3ID0gbnVsbHB0cjsKKyAgICAgICAg
Y2xvc2VTdHJlYW0gPSBzb3VyY2UuZW5xdWV1ZShBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGFycmF5
QnVmZmVyVmlld0JvZHkoKS5iYXNlQWRkcmVzcygpLCBhcnJheUJ1ZmZlclZpZXdCb2R5KCkuYnl0
ZUxlbmd0aCgpKSk7CisgICAgICAgIG1fZGF0YSA9IG51bGxwdHI7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIFR5cGU6OlRleHQ6IHsKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRh
dGEgPSBleHRyYWN0RnJvbVRleHQoKTsKICAgICAgICAgY2xvc2VTdHJlYW0gPSBzb3VyY2UuZW5x
dWV1ZShBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkpOwot
ICAgICAgICBtX3RleHQgPSB7IH07CisgICAgICAgIG1fZGF0YSA9IG51bGxwdHI7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIFR5cGU6OkJsb2I6Ci0gICAgICAgIEFTU0VSVChtX2Js
b2IpOwotICAgICAgICBvd25lci5sb2FkQmxvYigqbV9ibG9iLCBudWxscHRyKTsKLSAgICAgICAg
bV9ibG9iID0gbnVsbHB0cjsKKyAgICAgICAgb3duZXIubG9hZEJsb2IoYmxvYkJvZHkoKSwgbnVs
bHB0cik7CisgICAgICAgIG1fZGF0YSA9IG51bGxwdHI7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgVHlwZTo6Tm9uZToKICAgICAgICAgY2xvc2VTdHJlYW0gPSB0cnVlOwpAQCAtMjQ4LDM5ICsy
NTEsMzUgQEAgdm9pZCBGZXRjaEJvZHk6OmNvbnN1bWVBc1N0cmVhbShGZXRjaEJvZHlPd25lciYg
b3duZXIsIEZldGNoUmVzcG9uc2VTb3VyY2UmIHNvdXIKIAogdm9pZCBGZXRjaEJvZHk6OmNvbnN1
bWVBcnJheUJ1ZmZlcihSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCiB7Ci0gICAgQVNT
RVJUKG1fZGF0YSk7Ci0gICAgbV9jb25zdW1lci5yZXNvbHZlV2l0aERhdGEoV1RGTW92ZShwcm9t
aXNlKSwgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fZGF0YS0+ZGF0YSgpKSwgbV9kYXRh
LT5ieXRlTGVuZ3RoKCkpOworICAgIG1fY29uc3VtZXIucmVzb2x2ZVdpdGhEYXRhKFdURk1vdmUo
cHJvbWlzZSksIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihhcnJheUJ1ZmZlckJvZHkoKS5k
YXRhKCkpLCBhcnJheUJ1ZmZlckJvZHkoKS5ieXRlTGVuZ3RoKCkpOwogICAgIG1fZGF0YSA9IG51
bGxwdHI7CiB9CiAKIHZvaWQgRmV0Y2hCb2R5Ojpjb25zdW1lQXJyYXlCdWZmZXJWaWV3KFJlZjxE
ZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKIHsKLSAgICBBU1NFUlQobV9kYXRhVmlldyk7Ci0g
ICAgbV9jb25zdW1lci5yZXNvbHZlV2l0aERhdGEoV1RGTW92ZShwcm9taXNlKSwgc3RhdGljX2Nh
c3Q8Y29uc3QgdWludDhfdCo+KG1fZGF0YVZpZXctPmJhc2VBZGRyZXNzKCkpLCBtX2RhdGFWaWV3
LT5ieXRlTGVuZ3RoKCkpOwotICAgIG1fZGF0YVZpZXcgPSBudWxscHRyOworICAgIG1fY29uc3Vt
ZXIucmVzb2x2ZVdpdGhEYXRhKFdURk1vdmUocHJvbWlzZSksIHN0YXRpY19jYXN0PGNvbnN0IHVp
bnQ4X3QqPihhcnJheUJ1ZmZlclZpZXdCb2R5KCkuYmFzZUFkZHJlc3MoKSksIGFycmF5QnVmZmVy
Vmlld0JvZHkoKS5ieXRlTGVuZ3RoKCkpOworICAgIG1fZGF0YSA9IG51bGxwdHI7CiB9CiAKIHZv
aWQgRmV0Y2hCb2R5Ojpjb25zdW1lVGV4dChSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2Up
CiB7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGEgPSBleHRyYWN0RnJvbVRleHQoKTsKICAgICBt
X2NvbnN1bWVyLnJlc29sdmVXaXRoRGF0YShXVEZNb3ZlKHByb21pc2UpLCBkYXRhLmRhdGEoKSwg
ZGF0YS5zaXplKCkpOwotICAgIG1fdGV4dCA9IHsgfTsKKyAgICBtX2RhdGEgPSBudWxscHRyOwog
fQogCiB2b2lkIEZldGNoQm9keTo6Y29uc3VtZUJsb2IoRmV0Y2hCb2R5T3duZXImIG93bmVyLCBS
ZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCiB7Ci0gICAgQVNTRVJUKG1fYmxvYik7Ci0K
ICAgICBtX2NvbnN1bWVQcm9taXNlID0gV1RGTW92ZShwcm9taXNlKTsKLSAgICBvd25lci5sb2Fk
QmxvYigqbV9ibG9iLCAmbV9jb25zdW1lcik7Ci0gICAgbV9ibG9iID0gbnVsbHB0cjsKKyAgICBv
d25lci5sb2FkQmxvYihibG9iQm9keSgpLCAmbV9jb25zdW1lcik7CisgICAgbV9kYXRhID0gbnVs
bHB0cjsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+IEZldGNoQm9keTo6ZXh0cmFjdEZyb21UZXh0KCkg
Y29uc3QKIHsKICAgICBBU1NFUlQobV90eXBlID09IFR5cGU6OlRleHQpOwogICAgIC8vIEZJWE1F
OiBUaGlzIGRvdWJsZSBhbGxvY2F0aW9uIGlzIG5vdCBlZmZpY2llbnQuIE1pZ2h0IHdhbnQgdG8g
Zml4IHRoYXQgYXQgV1RGU3RyaW5nIGxldmVsLgotICAgIENTdHJpbmcgZGF0YSA9IG1fdGV4dC51
dGY4KCk7CisgICAgQ1N0cmluZyBkYXRhID0gdGV4dEJvZHkoKS51dGY4KCk7CiAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHZhbHVlKGRhdGEubGVuZ3RoKCkpOwogICAgIG1lbWNweSh2YWx1ZS5kYXRhKCks
IGRhdGEuZGF0YSgpLCBkYXRhLmxlbmd0aCgpKTsKICAgICByZXR1cm4gdmFsdWU7CkBAIC0zMDcs
MjMgKzMwNiwxOSBAQCBSZWZQdHI8Rm9ybURhdGE+IEZldGNoQm9keTo6Ym9keUZvckludGVybmFs
UmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZQogICAgIGNhc2UgVHlwZTo6Tm9u
ZToKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgY2FzZSBUeXBlOjpUZXh0OgotICAgICAg
ICByZXR1cm4gRm9ybURhdGE6OmNyZWF0ZShVVEY4RW5jb2RpbmcoKS5lbmNvZGUobV90ZXh0LCBF
bnRpdGllc0ZvclVuZW5jb2RhYmxlcykpOworICAgICAgICByZXR1cm4gRm9ybURhdGE6OmNyZWF0
ZShVVEY4RW5jb2RpbmcoKS5lbmNvZGUodGV4dEJvZHkoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJs
ZXMpKTsKICAgICBjYXNlIFR5cGU6OkJsb2I6IHsKLSAgICAgICAgQVNTRVJUKG1fYmxvYik7CiAg
ICAgICAgIFJlZlB0cjxGb3JtRGF0YT4gYm9keSA9IEZvcm1EYXRhOjpjcmVhdGUoKTsKLSAgICAg
ICAgYm9keS0+YXBwZW5kQmxvYihtX2Jsb2ItPnVybCgpKTsKKyAgICAgICAgYm9keS0+YXBwZW5k
QmxvYihibG9iQm9keSgpLnVybCgpKTsKICAgICAgICAgcmV0dXJuIGJvZHk7CiAgICAgfQogICAg
IGNhc2UgVHlwZTo6QXJyYXlCdWZmZXI6Ci0gICAgICAgIEFTU0VSVChtX2RhdGEpOwotICAgICAg
ICByZXR1cm4gRm9ybURhdGE6OmNyZWF0ZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5ieXRlTGVu
Z3RoKCkpOworICAgICAgICByZXR1cm4gRm9ybURhdGE6OmNyZWF0ZShhcnJheUJ1ZmZlckJvZHko
KS5kYXRhKCksIGFycmF5QnVmZmVyQm9keSgpLmJ5dGVMZW5ndGgoKSk7CiAgICAgY2FzZSBUeXBl
OjpBcnJheUJ1ZmZlclZpZXc6Ci0gICAgICAgIEFTU0VSVChtX2RhdGFWaWV3KTsKLSAgICAgICAg
cmV0dXJuIEZvcm1EYXRhOjpjcmVhdGUobV9kYXRhVmlldy0+YmFzZUFkZHJlc3MoKSwgbV9kYXRh
Vmlldy0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIEZvcm1EYXRhOjpjcmVhdGUoYXJy
YXlCdWZmZXJWaWV3Qm9keSgpLmJhc2VBZGRyZXNzKCksIGFycmF5QnVmZmVyVmlld0JvZHkoKS5i
eXRlTGVuZ3RoKCkpOwogICAgIGNhc2UgVHlwZTo6Rm9ybURhdGE6IHsKLSAgICAgICAgQVNTRVJU
KG1fZm9ybURhdGEpOwogICAgICAgICBBU1NFUlQoIWNvbnRleHQuaXNXb3JrZXJHbG9iYWxTY29w
ZSgpKTsKLSAgICAgICAgYXV0byBib2R5ID0gbV9mb3JtRGF0YTsKKyAgICAgICAgUmVmUHRyPEZv
cm1EYXRhPiBib2R5ID0gY29uc3RfY2FzdDxGb3JtRGF0YSo+KCZmb3JtRGF0YUJvZHkoKSk7CiAg
ICAgICAgIGJvZHktPmdlbmVyYXRlRmlsZXMoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPigmY29udGV4
dCkpOwogICAgICAgICByZXR1cm4gYm9keTsKICAgICB9CkBAIC0zMzMsNiArMzI4LDM2IEBAIFJl
ZlB0cjxGb3JtRGF0YT4gRmV0Y2hCb2R5Ojpib2R5Rm9ySW50ZXJuYWxSZXF1ZXN0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRlCiAgICAgfQogfQogCitGZXRjaEJvZHkgRmV0Y2hCb2R5Ojpj
bG9uZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFtX2NvbnN1bWVQcm9taXNlKTsKKyAgICBGZXRj
aEJvZHkgY2xvbmUobV90eXBlLCBtX2NvbnRlbnRUeXBlLCBtX2NvbnN1bWVyKTsKKworICAgIHN3
aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBUeXBlOjpBcnJheUJ1ZmZlcjoKKyAgICAgICAgY2xv
bmUubV9kYXRhID0gY29uc3RfY2FzdDxBcnJheUJ1ZmZlciY+KGFycmF5QnVmZmVyQm9keSgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUeXBlOjpBcnJheUJ1ZmZlclZpZXc6CisgICAgICAg
IGNsb25lLm1fZGF0YSA9IGNvbnN0X2Nhc3Q8QXJyYXlCdWZmZXJWaWV3Jj4oYXJyYXlCdWZmZXJW
aWV3Qm9keSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUeXBlOjpCbG9iOgorICAgICAg
ICBjbG9uZS5tX2RhdGEgPSBjb25zdF9jYXN0PEJsb2ImPihibG9iQm9keSgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBUeXBlOjpGb3JtRGF0YToKKyAgICAgICAgY2xvbmUubV9kYXRhID0g
Y29uc3RfY2FzdDxGb3JtRGF0YSY+KGZvcm1EYXRhQm9keSgpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBUeXBlOjpUZXh0OgorICAgICAgICBjbG9uZS5tX2RhdGEgPSB0ZXh0Qm9keSgpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6OkxvYWRlZDoKKyAgICBjYXNlIFR5cGU6Ok5v
bmU6CisgICAgY2FzZSBUeXBlOjpMb2FkaW5nOgorICAgIGNhc2UgVHlwZTo6UmVhZGFibGVTdHJl
YW06CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gY2xvbmU7Cit9CisKIH0KIAog
I2VuZGlmIC8vIEVOQUJMRShGRVRDSF9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9G
ZXRjaEJvZHkuaAppbmRleCA0MDBkMjJkMWUwNDg0MjkxOTY5YmY4Yzc3ZWE4ZmNlZDNhMWRmMzQ0
Li5jMGM5YWExMjIyNGUyNjA2MDgyZGM5N2FkZGE2NWZjYjQwNTc4ZjBjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmgKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRl
ICJGZXRjaExvYWRlci5oIgogI2luY2x1ZGUgIkZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiSlNET01Q
cm9taXNlLmgiCisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiBj
bGFzcyBFeGVjU3RhdGU7CkBAIC04NSwxMiArODYsMTUgQEAgcHVibGljOgogCiAgICAgdm9pZCBj
bGVhbkNvbnN1bWVQcm9taXNlKCkgeyBtX2NvbnN1bWVQcm9taXNlID0gbnVsbHB0cjsgfQogCisg
ICAgRmV0Y2hCb2R5IGNsb25lKCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgRmV0Y2hCb2R5KFJl
ZjxCbG9iPiYmKTsKICAgICBGZXRjaEJvZHkoUmVmPEFycmF5QnVmZmVyPiYmKTsKICAgICBGZXRj
aEJvZHkoUmVmPEFycmF5QnVmZmVyVmlldz4mJik7CiAgICAgRmV0Y2hCb2R5KERPTUZvcm1EYXRh
JiwgRG9jdW1lbnQmKTsKICAgICBGZXRjaEJvZHkoU3RyaW5nJiYpOworICAgIEZldGNoQm9keShU
eXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBGZXRjaEJvZHlDb25zdW1lciYpOwogICAgIEZldGNo
Qm9keShUeXBlIHR5cGUpIDogbV90eXBlKHR5cGUpIHsgfQogCiAgICAgdm9pZCBjb25zdW1lKEZl
dGNoQm9keU93bmVyJiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CkBAIC0xMDEsMTUgKzEwNSwy
MiBAQCBwcml2YXRlOgogICAgIHZvaWQgY29uc3VtZVRleHQoUmVmPERlZmVycmVkUHJvbWlzZT4m
Jik7CiAgICAgdm9pZCBjb25zdW1lQmxvYihGZXRjaEJvZHlPd25lciYsIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYpOwogCisgICAgQmxvYiYgYmxvYkJvZHkoKSB7IHJldHVybiBzdGQ6OmV4cGVyaW1l
bnRhbDo6Z2V0PFJlZjxCbG9iPj4obV9kYXRhKS5nZXQoKTsgfQorICAgIGNvbnN0IEJsb2ImIGJs
b2JCb2R5KCkgY29uc3QgeyByZXR1cm4gc3RkOjpleHBlcmltZW50YWw6OmdldDxSZWY8QmxvYj4+
KG1fZGF0YSkuZ2V0KCk7IH0KKyAgICBGb3JtRGF0YSYgZm9ybURhdGFCb2R5KCkgeyByZXR1cm4g
c3RkOjpleHBlcmltZW50YWw6OmdldDxSZWY8Rm9ybURhdGE+PihtX2RhdGEpLmdldCgpOyB9Cisg
ICAgY29uc3QgRm9ybURhdGEmIGZvcm1EYXRhQm9keSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6ZXhw
ZXJpbWVudGFsOjpnZXQ8UmVmPEZvcm1EYXRhPj4obV9kYXRhKS5nZXQoKTsgfQorICAgIEFycmF5
QnVmZmVyJiBhcnJheUJ1ZmZlckJvZHkoKSB7IHJldHVybiBzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0
PFJlZjxBcnJheUJ1ZmZlcj4+KG1fZGF0YSkuZ2V0KCk7IH0KKyAgICBjb25zdCBBcnJheUJ1ZmZl
ciYgYXJyYXlCdWZmZXJCb2R5KCkgY29uc3QgeyByZXR1cm4gc3RkOjpleHBlcmltZW50YWw6Omdl
dDxSZWY8QXJyYXlCdWZmZXI+PihtX2RhdGEpLmdldCgpOyB9CisgICAgQXJyYXlCdWZmZXJWaWV3
JiBhcnJheUJ1ZmZlclZpZXdCb2R5KCkgeyByZXR1cm4gc3RkOjpleHBlcmltZW50YWw6OmdldDxS
ZWY8QXJyYXlCdWZmZXJWaWV3Pj4obV9kYXRhKS5nZXQoKTsgfQorICAgIGNvbnN0IEFycmF5QnVm
ZmVyVmlldyYgYXJyYXlCdWZmZXJWaWV3Qm9keSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6ZXhwZXJp
bWVudGFsOjpnZXQ8UmVmPEFycmF5QnVmZmVyVmlldz4+KG1fZGF0YSkuZ2V0KCk7IH0KKyAgICBT
dHJpbmcmIHRleHRCb2R5KCkgeyByZXR1cm4gc3RkOjpleHBlcmltZW50YWw6OmdldDxTdHJpbmc+
KG1fZGF0YSk7IH0KKyAgICBjb25zdCBTdHJpbmcmIHRleHRCb2R5KCkgY29uc3QgeyByZXR1cm4g
c3RkOjpleHBlcmltZW50YWw6OmdldDxTdHJpbmc+KG1fZGF0YSk7IH0KKwogICAgIFR5cGUgbV90
eXBlIHsgVHlwZTo6Tm9uZSB9OwotICAgIFN0cmluZyBtX2NvbnRlbnRUeXBlOwogCiAgICAgLy8g
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBVUkxTZWFyY2hQYXJhbXMuCi0gICAgUmVmUHRyPEJsb2I+
IG1fYmxvYjsKLSAgICBSZWZQdHI8Rm9ybURhdGE+IG1fZm9ybURhdGE7Ci0gICAgUmVmUHRyPEFy
cmF5QnVmZmVyPiBtX2RhdGE7Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gbV9kYXRhVmll
dzsKLSAgICBTdHJpbmcgbV90ZXh0OworICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PHN0
ZDo6bnVsbHB0cl90LCBSZWY8QmxvYj4sIFJlZjxGb3JtRGF0YT4sIFJlZjxBcnJheUJ1ZmZlcj4s
IFJlZjxBcnJheUJ1ZmZlclZpZXc+LCBTdHJpbmc+IG1fZGF0YTsKKyAgICBTdHJpbmcgbV9jb250
ZW50VHlwZTsKIAogICAgIEZldGNoQm9keUNvbnN1bWVyIG1fY29uc3VtZXIgeyBGZXRjaEJvZHlD
b25zdW1lcjo6VHlwZTo6Tm9uZSB9OwogICAgIFJlZlB0cjxEZWZlcnJlZFByb21pc2U+IG1fY29u
c3VtZVByb21pc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0Zl
dGNoUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVxdWVz
dC5jcHAKaW5kZXggOWVkMjU5MTFhYzFjOTcyYmRjZDZmMTgyMTdlZjQ2MjU3YjI0NWMwMS4uZGE0
MDQ0NjZmZTFkOTY4Mjg1YmQzZmZlZmNhMzY3NGNhMGI2NjUwZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0LmNwcApAQCAtMzE0LDcgKzMxNCw3IEBAIFJl
ZlB0cjxGZXRjaFJlcXVlc3Q+IEZldGNoUmVxdWVzdDo6Y2xvbmUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCwgRXhjZXB0CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZldGNoUmVxdWVzdChjb250ZXh0LCBGZXRjaEJvZHko
bV9ib2R5KSwgRmV0Y2hIZWFkZXJzOjpjcmVhdGUobV9oZWFkZXJzLmdldCgpKSwgRmV0Y2hSZXF1
ZXN0OjpJbnRlcm5hbFJlcXVlc3QobV9pbnRlcm5hbFJlcXVlc3QpKSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRmV0Y2hSZXF1ZXN0KGNvbnRleHQsIG1fYm9keS5jbG9uZSgpLCBGZXRjaEhl
YWRlcnM6OmNyZWF0ZShtX2hlYWRlcnMuZ2V0KCkpLCBGZXRjaFJlcXVlc3Q6OkludGVybmFsUmVx
dWVzdChtX2ludGVybmFsUmVxdWVzdCkpKTsKIH0KIAogY29uc3QgY2hhciogRmV0Y2hSZXF1ZXN0
OjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXNwb25zZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ZldGNoL0ZldGNoUmVzcG9uc2UuY3BwCmluZGV4IGQ5M2E2ZWJmZDI5NjEwZGE2ODZiYjM4MDVh
MmM2M2Q0YTI5MThhZjcuLmRkMmMxZDM0M2Y5MWY4YThiYmVkOTM0MmE0NTA5OWRkZmE4ZTI5YTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXNwb25zZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlc3BvbnNlLmNwcApA
QCAtOTgsNyArOTgsNyBAQCBSZWY8RmV0Y2hSZXNwb25zZT4gRmV0Y2hSZXNwb25zZTo6Y2xvbmVG
b3JKUygpCiB7CiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgQVNT
RVJUKCFpc0Rpc3R1cmJlZE9yTG9ja2VkKCkpOwotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZl
dGNoUmVzcG9uc2UoKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgRmV0Y2hCb2R5KG1fYm9keSks
IEZldGNoSGVhZGVyczo6Y3JlYXRlKGhlYWRlcnMoKSksIFJlc291cmNlUmVzcG9uc2UobV9yZXNw
b25zZSkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGZXRjaFJlc3BvbnNlKCpzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCksIG1fYm9keS5jbG9uZSgpLCBGZXRjaEhlYWRlcnM6OmNyZWF0ZSho
ZWFkZXJzKCkpLCBSZXNvdXJjZVJlc3BvbnNlKG1fcmVzcG9uc2UpKSk7CiB9CiAKIHZvaWQgRmV0
Y2hSZXNwb25zZTo6ZmV0Y2goU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgRmV0Y2hS
ZXF1ZXN0JiByZXF1ZXN0LCBGZXRjaFByb21pc2UmJiBwcm9taXNlKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>