<?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>27787</bug_id>
          
          <creation_ts>2009-07-28 17:36:30 -0700</creation_ts>
          <short_desc>The type information about the resource loading is not forwarded to the network layer</short_desc>
          <delta_ts>2010-06-10 19:46:56 -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>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zsombor">gzsombor</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>135436</commentid>
    <comment_count>0</comment_count>
    <who name="Zsombor">gzsombor</who>
    <bug_when>2009-07-28 17:36:30 -0700</bug_when>
    <thetext>It would be useful, for the network layer to know, not only the url, but also the type of the resource being requested. For example, for a &apos;Do not download images&apos; feature, or an advanced adblocker filtering, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135437</commentid>
    <comment_count>1</comment_count>
      <attachid>33682</attachid>
    <who name="Zsombor">gzsombor</who>
    <bug_when>2009-07-28 17:38:14 -0700</bug_when>
    <thetext>Created attachment 33682
patch which resource type information to the ResourceRequestBase class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135749</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-07-29 17:30:32 -0700</bug_when>
    <thetext>Please set review? flag if this patch is intended for review; see &lt;http://webkit.org/coding/contributing.html&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136269</commentid>
    <comment_count>3</comment_count>
      <attachid>33682</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-31 15:22:36 -0700</bug_when>
    <thetext>Comment on attachment 33682
patch which resource type information to the ResourceRequestBase class

Style:
 361     case CachedResource::ImageResource :</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136578</commentid>
    <comment_count>4</comment_count>
    <who name="Zsombor">gzsombor</who>
    <bug_when>2009-08-02 18:40:04 -0700</bug_when>
    <thetext>?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137744</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-06 19:16:51 -0700</bug_when>
    <thetext>Extra space before the :.  Please run check-webkit-style if you have not already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138126</commentid>
    <comment_count>6</comment_count>
      <attachid>33682</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-07 13:50:51 -0700</bug_when>
    <thetext>Comment on attachment 33682
patch which resource type information to the ResourceRequestBase class

r- for lack of ChangeLog.

Please run check-webkit-style.

I think this should just be an argument to the constructor, but I can see how that would be harry to add given the current design.

Please don&apos;t add a default here:
+    default : 
+        m_resourceType = GenericRequest;
+        break;
it defeats the point of using a switch for an enum (which is to catch when something is added to the enum).

Never used, and not needed:
+        void setResourceType(RequestType type) { m_resourceType = type; }

Hum... but Platform can never depend on WebCore. So this is a layering violation.

I suggest that instead you make CachedResource use these constants.  And then CachedResource can cast its own constancts back to these for setting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138582</commentid>
    <comment_count>7</comment_count>
      <attachid>34437</attachid>
    <who name="Zsombor">gzsombor</who>
    <bug_when>2009-08-09 18:41:58 -0700</bug_when>
    <thetext>Created attachment 34437
new version of the patch

I&apos;m hopefull, that this patch is better suited for incorporation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140384</commentid>
    <comment_count>8</comment_count>
      <attachid>34879</attachid>
    <who name="Zsombor">gzsombor</who>
    <bug_when>2009-08-14 16:54:07 -0700</bug_when>
    <thetext>Created attachment 34879
new version of the patch, with changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144422</commentid>
    <comment_count>9</comment_count>
      <attachid>34879</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-03 01:12:31 -0700</bug_when>
    <thetext>Comment on attachment 34879
new version of the patch, with changelog

In general this looks good!

Please remove this:
42     default:
 243          return Other;
and put a &quot;return Other&quot; after the switch.  See my previous comment about default: cases for switches over enums as being bad. :)

We could avoid all this search/replace by adding a typedef ResourceRequestBase::Type Type; into CachedResponse.  I&apos;m not sure I really care one way or the other, but it would definitely make the patch smaller.

Style:
 45     case ResourceRequestBase::ImageResource :
(no space after value before &apos;:&apos;)

Otherwise looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147001</commentid>
    <comment_count>10</comment_count>
      <attachid>39527</attachid>
    <who name="Zsombor">gzsombor</who>
    <bug_when>2009-09-13 17:02:03 -0700</bug_when>
    <thetext>Created attachment 39527
patch implementing the base functionality

I don&apos;t want to mess too much with the switch-cases - there is already some &apos;default:&apos; branch in the touched code, so this is way I haven&apos;t originaly  modified it. I&apos;ve removed the qt - specific translation code, because it&apos;s unknown when ResourceRequestType enum value is added to QtNetworkRequest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149658</commentid>
    <comment_count>11</comment_count>
      <attachid>39527</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-23 22:27:28 -0700</bug_when>
    <thetext>Comment on attachment 39527
patch implementing the base functionality

This is a layering violation.  The network layer shouldn&apos;t know what an image or a style sheet is.  If you want to implement a &quot;block all images feature,&quot; you should use a client callback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149687</commentid>
    <comment_count>12</comment_count>
    <who name="Zsombor">gzsombor</who>
    <bug_when>2009-09-24 00:18:07 -0700</bug_when>
    <thetext>Can you explain, what do you mean, when you say &apos;client callback&apos; ? I would like to have a proper adblocker, which is compatible with the de facto standard firefox extension. For this it needs to discriminate between several type of network request, for example &apos;image&apos;,&apos;stylesheet&apos;,&apos;dtd&apos;,&apos;xmlhttprequest&apos;,&apos;object&apos;, etc. Please check the documentation at : http://adblockplus.org/en/filters in the &apos;Specifying filter options&apos; section.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149784</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-24 11:11:58 -0700</bug_when>
    <thetext>The *Client.h files in WebCore.  WebCore asks WebKit to make network requests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168939</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-04 14:52:17 -0800</bug_when>
    <thetext>Bug 32167 is very similar.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33682</attachid>
            <date>2009-07-28 17:38:14 -0700</date>
            <delta_ts>2009-08-09 18:41:58 -0700</delta_ts>
            <desc>patch which resource type information to the ResourceRequestBase class</desc>
            <filename>show-resource-type.patch</filename>
            <type>text/plain</type>
            <size>3706</size>
            <attacher name="Zsombor">gzsombor</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2Uu
aAkocmV2aXNpb24gNDY0MTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VS
ZXF1ZXN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWZuZGVmIFJl
c291cmNlUmVxdWVzdEJhc2VfaAogI2RlZmluZSBSZXNvdXJjZVJlcXVlc3RCYXNlX2gKIAorI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCiAjaW5jbHVkZSAiRm9ybURhdGEuaCIKICNpbmNsdWRl
ICJLVVJMLmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgpAQCAtNDQsNiArNDUsMTMgQEAK
ICAgICAgICAgUmV0dXJuQ2FjaGVEYXRhRG9udExvYWQsIC8vIHJlc3VsdHMgb2YgYSBwb3N0IC0g
YWxsb3cgc3RhbGUgZGF0YSBhbmQgb25seSB1c2UgY2FjaGUKICAgICB9OwogCisgICAgZW51bSBS
ZXF1ZXN0VHlwZSB7CisgICAgICAgIEdlbmVyaWNSZXF1ZXN0LAorICAgICAgICBJbWFnZVJlcXVl
c3QsCisgICAgICAgIENTU1JlcXVlc3QsCisgICAgICAgIFNjcmlwdFJlcXVlc3QsCisgICAgfTsK
KwogICAgIGNvbnN0IGludCB1bnNwZWNpZmllZFRpbWVvdXRJbnRlcnZhbCA9IElOVF9NQVg7CiAK
ICAgICBzdHJ1Y3QgUmVzb3VyY2VSZXF1ZXN0OwpAQCAtNjMsNiArNzEsOCBAQAogICAgICAgICBj
b25zdCBLVVJMJiB1cmwoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRVUkwoY29uc3QgS1VSTCYg
dXJsKTsKIAorICAgICAgICBSZXF1ZXN0VHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3Jlc291cmNlVHlwZTsgfQorCiAgICAgICAgIHZvaWQgcmVtb3ZlQ3JlZGVudGlhbHMoKTsK
IAogICAgICAgICBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSBjYWNoZVBvbGljeSgpIGNvbnN0
OwpAQCAtMTE1LDEyICsxMjUsMTYgQEAKICAgICAgICAgYm9vbCByZXBvcnRVcGxvYWRQcm9ncmVz
cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwb3J0VXBsb2FkUHJvZ3Jlc3M7IH0KICAgICAgICAgdm9p
ZCBzZXRSZXBvcnRVcGxvYWRQcm9ncmVzcyhib29sIHJlcG9ydFVwbG9hZFByb2dyZXNzKSB7IG1f
cmVwb3J0VXBsb2FkUHJvZ3Jlc3MgPSByZXBvcnRVcGxvYWRQcm9ncmVzczsgfQogCisgICAgICAg
IHZvaWQgc2V0UmVzb3VyY2VUeXBlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUpOworICAgICAg
ICB2b2lkIHNldFJlc291cmNlVHlwZShSZXF1ZXN0VHlwZSB0eXBlKSB7IG1fcmVzb3VyY2VUeXBl
ID0gdHlwZTsgfQorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICAvLyBVc2VkIHdoZW4gUmVzb3Vy
Y2VSZXF1ZXN0IGlzIGluaXRpYWxpemVkIGZyb20gYSBwbGF0Zm9ybSByZXByZXNlbnRhdGlvbiBv
ZiB0aGUgcmVxdWVzdAogICAgICAgICBSZXNvdXJjZVJlcXVlc3RCYXNlKCkKICAgICAgICAgICAg
IDogbV9yZXNvdXJjZVJlcXVlc3RVcGRhdGVkKGZhbHNlKQogICAgICAgICAgICAgLCBtX3BsYXRm
b3JtUmVxdWVzdFVwZGF0ZWQodHJ1ZSkKICAgICAgICAgICAgICwgbV9yZXBvcnRVcGxvYWRQcm9n
cmVzcyhmYWxzZSkKKyAgICAgICAgICAgICwgbV9yZXNvdXJjZVR5cGUoR2VuZXJpY1JlcXVlc3Qp
CiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0xMzMsNiArMTQ3LDcgQEAKICAgICAgICAgICAg
ICwgbV9yZXNvdXJjZVJlcXVlc3RVcGRhdGVkKHRydWUpCiAgICAgICAgICAgICAsIG1fcGxhdGZv
cm1SZXF1ZXN0VXBkYXRlZChmYWxzZSkKICAgICAgICAgICAgICwgbV9yZXBvcnRVcGxvYWRQcm9n
cmVzcyhmYWxzZSkKKyAgICAgICAgICAgICwgbV9yZXNvdXJjZVR5cGUoR2VuZXJpY1JlcXVlc3Qp
CiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0xNTIsNiArMTY3LDcgQEAKICAgICAgICAgbXV0
YWJsZSBib29sIG1fcmVzb3VyY2VSZXF1ZXN0VXBkYXRlZDsKICAgICAgICAgbXV0YWJsZSBib29s
IG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZDsKICAgICAgICAgYm9vbCBtX3JlcG9ydFVwbG9hZFBy
b2dyZXNzOworICAgICAgICBSZXF1ZXN0VHlwZSBtX3Jlc291cmNlVHlwZTsKIAogICAgIHByaXZh
dGU6CiAgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgYXNSZXNvdXJjZVJlcXVlc3QoKSBj
b25zdDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1
ZXN0QmFzZS5jcHAJKHJldmlzaW9uIDQ2NDEwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTUsNiArMzU1LDI1
IEBACiAgICAgbV9yZXNvdXJjZVJlcXVlc3RVcGRhdGVkID0gdHJ1ZTsKIH0KIAordm9pZCBSZXNv
dXJjZVJlcXVlc3RCYXNlOjpzZXRSZXNvdXJjZVR5cGUoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlw
ZSkgCit7CisgICAgc3dpdGNoICh0eXBlKSB7IAorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Oklt
YWdlUmVzb3VyY2UgOiAKKyAgICAgICAgbV9yZXNvdXJjZVR5cGUgPSBJbWFnZVJlcXVlc3Q7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQgOiAK
KyAgICAgICAgbV9yZXNvdXJjZVR5cGUgPSBDU1NSZXF1ZXN0OworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQgOiAKKyAgICAgICAgbV9yZXNvdXJjZVR5cGUg
PSBTY3JpcHRSZXF1ZXN0OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0IDogCisgICAgICAg
IG1fcmVzb3VyY2VUeXBlID0gR2VuZXJpY1JlcXVlc3Q7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworCiAjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVVTRShDRk5FVFdPUkspCiB1bnNpZ25lZCBp
bml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KCkKIHsKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL2xvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbG9h
ZGVyLmNwcAkocmV2aXNpb24gNDY0MTApCisrKyBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTUsNyArMjk1LDggQEAKICAgICAgICAgcmVxdWVzdHNQZW5kaW5n
LnJlbW92ZUZpcnN0KCk7CiAgICAgICAgIAogICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVzb3Vy
Y2VSZXF1ZXN0KHJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCktPnVybCgpKTsKLSAgICAgICAgCisg
ICAgICAgIHJlc291cmNlUmVxdWVzdC5zZXRSZXNvdXJjZVR5cGUocmVxdWVzdC0+Y2FjaGVkUmVz
b3VyY2UoKS0+dHlwZSgpKTsKKwogICAgICAgICBpZiAoIXJlcXVlc3QtPmNhY2hlZFJlc291cmNl
KCktPmFjY2VwdCgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlc291cmNlUmVxdWVzdC5zZXRI
VFRQQWNjZXB0KHJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCktPmFjY2VwdCgpKTsKICAgICAgICAg
Cg==
</data>
<flag name="review"
          id="17969"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34437</attachid>
            <date>2009-08-09 18:41:58 -0700</date>
            <delta_ts>2009-08-14 16:54:07 -0700</delta_ts>
            <desc>new version of the patch</desc>
            <filename>show-resource-type-v2.patch</filename>
            <type>text/plain</type>
            <size>23285</size>
            <attacher name="Zsombor">gzsombor</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkocmV2aXNpb24gNDY5NTMpCisrKyBXZWJDb3Jl
L2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBA
CiAKICNpbmNsdWRlICJDYWNoZVBvbGljeS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVz
cG9uc2UuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaENv
dW50ZWRTZXQuaD4KQEAgLTQ5LDIwICs1MCw4IEBACiBjbGFzcyBDYWNoZWRSZXNvdXJjZSB7CiAg
ICAgZnJpZW5kIGNsYXNzIENhY2hlOwogICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JSZXNvdXJj
ZTsKLSAgICAKKwogcHVibGljOgotICAgIGVudW0gVHlwZSB7Ci0gICAgICAgIEltYWdlUmVzb3Vy
Y2UsCi0gICAgICAgIENTU1N0eWxlU2hlZXQsCi0gICAgICAgIFNjcmlwdCwKLSAgICAgICAgRm9u
dFJlc291cmNlCi0jaWYgRU5BQkxFKFhTTFQpCi0gICAgICAgICwgWFNMU3R5bGVTaGVldAotI2Vu
ZGlmCi0jaWYgRU5BQkxFKFhCTCkKLSAgICAgICAgLCBYQkwKLSNlbmRpZgotICAgIH07CiAKICAg
ICBlbnVtIFN0YXR1cyB7CiAgICAgICAgIE5vdENhY2hlZCwgICAgLy8gdGhpcyBVUkwgaXMgbm90
IGNhY2hlZApAQCAtNzIsNyArNjEsNyBAQAogICAgICAgICBDYWNoZWQgICAgICAgIC8vIHJlZ3Vs
YXIgY2FzZQogICAgIH07CiAKLSAgICBDYWNoZWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwg
VHlwZSk7CisgICAgQ2FjaGVkUmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIFJlc291cmNlUmVx
dWVzdEJhc2U6OlR5cGUgdHlwZSk7CiAgICAgdmlydHVhbCB+Q2FjaGVkUmVzb3VyY2UoKTsKICAg
ICAKICAgICB2aXJ0dWFsIHZvaWQgbG9hZChEb2NMb2FkZXIqIGRvY0xvYWRlcikgIHsgbG9hZChk
b2NMb2FkZXIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7IH0KQEAgLTg1LDcgKzc0LDcgQEAKICAgICB2
aXJ0dWFsIHZvaWQgaHR0cFN0YXR1c0NvZGVFcnJvcigpIHsgZXJyb3IoKTsgfSAvLyBJbWFnZXMg
a2VlcCBsb2FkaW5nIGluIHNwaXRlIG9mIEhUVFAgZXJyb3JzIChmb3IgbGVnYWN5IGNvbXBhdCB3
aXRoIDxpbWc+LCBldGMuKS4KIAogICAgIGNvbnN0IFN0cmluZyAmdXJsKCkgY29uc3QgeyByZXR1
cm4gbV91cmw7IH0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAg
ICBSZXNvdXJjZVJlcXVlc3RCYXNlOjpUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KIAogICAgIHZvaWQgYWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7CiAgICAgdm9p
ZCByZW1vdmVDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKQEAgLTE5OSw3ICsxODgsNyBA
QAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKICAgICBPd25QdHI8UHVyZ2VhYmxl
QnVmZmVyPiBtX3B1cmdlYWJsZURhdGE7CiAKLSAgICBUeXBlIG1fdHlwZTsKKyAgICBSZXNvdXJj
ZVJlcXVlc3RCYXNlOjpUeXBlIG1fdHlwZTsKICAgICBTdGF0dXMgbV9zdGF0dXM7CiAKICAgICBi
b29sIG1fZXJyb3JPY2N1cnJlZDsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0LmNwcAkocmV2aXNp
b24gNDY5NTMpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRTY3JpcHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw3ICszNSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENhY2hlZFNjcmlw
dDo6Q2FjaGVkU2NyaXB0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQp
Ci0gICAgOiBDYWNoZWRSZXNvdXJjZSh1cmwsIFNjcmlwdCkKKyAgICA6IENhY2hlZFJlc291cmNl
KHVybCwgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6U2NyaXB0KQogICAgICwgbV9kZWNvZGVyKFRleHRS
ZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgiYXBwbGljYXRpb24vamF2YXNjcmlwdCIsIGNoYXJzZXQp
KQogICAgICwgbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXIodGhpcywgJkNhY2hlZFNjcmlwdDo6
ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmlyZWQpCiB7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9D
YWNoZWRGb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRGb250LmNw
cAkocmV2aXNpb24gNDY5NTMpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRGb250LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDYWNo
ZWRGb250OjpDYWNoZWRGb250KGNvbnN0IFN0cmluZyAmdXJsKQotICAgIDogQ2FjaGVkUmVzb3Vy
Y2UodXJsLCBGb250UmVzb3VyY2UpCisgICAgOiBDYWNoZWRSZXNvdXJjZSh1cmwsIFJlc291cmNl
UmVxdWVzdEJhc2U6OkZvbnRSZXNvdXJjZSkKICAgICAsIG1fZm9udERhdGEoMCkKICAgICAsIG1f
bG9hZEluaXRpYXRlZChmYWxzZSkKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Nh
Y2hlZEltYWdlLmNwcAkocmV2aXNpb24gNDY5NTMpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRJ
bWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogQ2FjaGVkSW1hZ2U6OkNhY2hlZEltYWdlKGNvbnN0IFN0cmluZyYgdXJsKQotICAg
IDogQ2FjaGVkUmVzb3VyY2UodXJsLCBJbWFnZVJlc291cmNlKQorICAgIDogQ2FjaGVkUmVzb3Vy
Y2UodXJsLCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpJbWFnZVJlc291cmNlKQogICAgICwgbV9pbWFn
ZSgwKQogICAgICwgbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXIodGhpcywgJkNhY2hlZEltYWdl
OjpkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZCkKICAgICAsIG1faHR0cFN0YXR1c0NvZGVF
cnJvck9jY3VycmVkKGZhbHNlKQpAQCAtNTksNyArNTksNyBAQAogfQogCiBDYWNoZWRJbWFnZTo6
Q2FjaGVkSW1hZ2UoSW1hZ2UqIGltYWdlKQotICAgIDogQ2FjaGVkUmVzb3VyY2UoU3RyaW5nKCks
IEltYWdlUmVzb3VyY2UpCisgICAgOiBDYWNoZWRSZXNvdXJjZShTdHJpbmcoKSwgUmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6SW1hZ2VSZXNvdXJjZSkKICAgICAsIG1faW1hZ2UoaW1hZ2UpCiAgICAgLCBt
X2RlY29kZWREYXRhRGVsZXRpb25UaW1lcih0aGlzLCAmQ2FjaGVkSW1hZ2U6OmRlY29kZWREYXRh
RGVsZXRpb25UaW1lckZpcmVkKQogICAgICwgbV9odHRwU3RhdHVzQ29kZUVycm9yT2NjdXJyZWQo
ZmFsc2UpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA0Njk1MykK
KysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNyBAQAogc3RhdGljIFJlZkNvdW50ZWRMZWFrQ291bnRlciBjYWNoZWRSZXNvdXJj
ZUxlYWtDb3VudGVyKCJDYWNoZWRSZXNvdXJjZSIpOwogI2VuZGlmCiAKLUNhY2hlZFJlc291cmNl
OjpDYWNoZWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgVHlwZSB0eXBlKQorQ2FjaGVkUmVz
b3VyY2U6OkNhY2hlZFJlc291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBSZXNvdXJjZVJlcXVlc3RC
YXNlOjpUeXBlIHR5cGUpCiAgICAgOiBtX3VybCh1cmwpCiAgICAgLCBtX3Jlc3BvbnNlVGltZXN0
YW1wKGN1cnJlbnRUaW1lKCkpCiAgICAgLCBtX2xhc3REZWNvZGVkQWNjZXNzVGltZSgwKQpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9Eb2NMb2FkZXIuY3BwCShyZXZpc2lvbiA0Njk1MykKKysrIFdlYkNvcmUvbG9hZGVyL0Rv
Y0xvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQAogCiBDYWNoZWRJ
bWFnZSogRG9jTG9hZGVyOjpyZXF1ZXN0SW1hZ2UoY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAg
Q2FjaGVkSW1hZ2UqIHJlc291cmNlID0gc3RhdGljX2Nhc3Q8Q2FjaGVkSW1hZ2UqPihyZXF1ZXN0
UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UsIHVybCwgU3RyaW5nKCkpKTsK
KyAgICBDYWNoZWRJbWFnZSogcmVzb3VyY2UgPSBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZSo+KHJl
cXVlc3RSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3RCYXNlOjpJbWFnZVJlc291cmNlLCB1cmwsIFN0
cmluZygpKSk7CiAgICAgaWYgKGF1dG9Mb2FkSW1hZ2VzKCkgJiYgcmVzb3VyY2UgJiYgcmVzb3Vy
Y2UtPnN0aWxsTmVlZHNMb2FkKCkpIHsKICAgICAgICAgcmVzb3VyY2UtPnNldExvYWRpbmcodHJ1
ZSk7CiAgICAgICAgIGNhY2hlKCktPmxvYWRlcigpLT5sb2FkKHRoaXMsIHJlc291cmNlLCB0cnVl
KTsKQEAgLTEzMCwxMiArMTMwLDEyIEBACiAKIENhY2hlZEZvbnQqIERvY0xvYWRlcjo6cmVxdWVz
dEZvbnQoY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhY2hl
ZEZvbnQqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZSwgdXJs
LCBTdHJpbmcoKSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWNoZWRGb250Kj4ocmVxdWVz
dFJlc291cmNlKFJlc291cmNlUmVxdWVzdEJhc2U6OkZvbnRSZXNvdXJjZSwgdXJsLCBTdHJpbmco
KSkpOwogfQogCiBDYWNoZWRDU1NTdHlsZVNoZWV0KiBEb2NMb2FkZXI6OnJlcXVlc3RDU1NTdHls
ZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCiB7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PENhY2hlZENTU1N0eWxlU2hlZXQqPihyZXF1ZXN0UmVzb3VyY2Uo
Q2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQsIHVybCwgY2hhcnNldCkpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxDYWNoZWRDU1NTdHlsZVNoZWV0Kj4ocmVxdWVzdFJlc291cmNlKFJlc291
cmNlUmVxdWVzdEJhc2U6OkNTU1N0eWxlU2hlZXQsIHVybCwgY2hhcnNldCkpOwogfQogCiBDYWNo
ZWRDU1NTdHlsZVNoZWV0KiBEb2NMb2FkZXI6OnJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVldChjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQpAQCAtMTQ1LDQxICsxNDUsNDEg
QEAKIAogQ2FjaGVkU2NyaXB0KiBEb2NMb2FkZXI6OnJlcXVlc3RTY3JpcHQoY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Q2FjaGVkU2NyaXB0Kj4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpTY3JpcHQsIHVy
bCwgY2hhcnNldCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWNoZWRTY3JpcHQqPihyZXF1
ZXN0UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0QmFzZTo6U2NyaXB0LCB1cmwsIGNoYXJzZXQpKTsK
IH0KIAogI2lmIEVOQUJMRShYU0xUKQogQ2FjaGVkWFNMU3R5bGVTaGVldCogRG9jTG9hZGVyOjpy
ZXF1ZXN0WFNMU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q2FjaGVkWFNMU3R5bGVTaGVldCo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNv
dXJjZTo6WFNMU3R5bGVTaGVldCwgdXJsLCBTdHJpbmcoKSkpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxDYWNoZWRYU0xTdHlsZVNoZWV0Kj4ocmVxdWVzdFJlc291cmNlKFJlc291cmNlUmVxdWVz
dEJhc2U6OlhTTFN0eWxlU2hlZXQsIHVybCwgU3RyaW5nKCkpKTsKIH0KICNlbmRpZgogCiAjaWYg
RU5BQkxFKFhCTCkKIENhY2hlZFhCTERvY3VtZW50KiBEb2NMb2FkZXI6OnJlcXVlc3RYQkxEb2N1
bWVudChjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVk
WFNMU3R5bGVTaGVldCo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6WEJMLCB1cmws
IFN0cmluZygpKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhY2hlZFhTTFN0eWxlU2hlZXQq
PihyZXF1ZXN0UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0QmFzZTo6WEJMLCB1cmwsIFN0cmluZygp
KSk7CiB9CiAjZW5kaWYKIAotYm9vbCBEb2NMb2FkZXI6OmNhblJlcXVlc3QoQ2FjaGVkUmVzb3Vy
Y2U6OlR5cGUgdHlwZSwgY29uc3QgS1VSTCYgdXJsKQorYm9vbCBEb2NMb2FkZXI6OmNhblJlcXVl
c3QoUmVzb3VyY2VSZXF1ZXN0QmFzZTo6VHlwZSB0eXBlLCBjb25zdCBLVVJMJiB1cmwpCiB7CiAg
ICAgLy8gU29tZSB0eXBlcyBvZiByZXNvdXJjZXMgY2FuIGJlIGxvYWRlZCBvbmx5IGZyb20gdGhl
IHNhbWUgb3JpZ2luLiAgT3RoZXIKICAgICAvLyB0eXBlcyBvZiByZXNvdXJjZXMsIGxpa2UgSW1h
Z2VzLCBTY3JpcHRzLCBhbmQgQ1NTLCBjYW4gYmUgbG9hZGVkIGZyb20KICAgICAvLyBhbnkgVVJM
LgogICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVz
b3VyY2U6Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKLSAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpTY3JpcHQ6Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJl
c291cmNlOgorICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6SW1hZ2VSZXNvdXJjZToKKyAg
ICBjYXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OkNTU1N0eWxlU2hlZXQ6CisgICAgY2FzZSBSZXNv
dXJjZVJlcXVlc3RCYXNlOjpTY3JpcHQ6CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpG
b250UmVzb3VyY2U6CiAgICAgICAgIC8vIFRoZXNlIHR5cGVzIG9mIHJlc291cmNlcyBjYW4gYmUg
bG9hZGVkIGZyb20gYW55IG9yaWdpbi4KICAgICAgICAgLy8gRklYTUU6IEFyZSB3ZSBzdXJlIGFi
b3V0IENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U/CiAgICAgICAgIGJyZWFrOwogI2lmIEVO
QUJMRShYU0xUKQotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6CisgICAg
Y2FzZSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpYU0xTdHlsZVNoZWV0OgogI2VuZGlmCiAjaWYgRU5B
QkxFKFhCTCkKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYQkw6CisgICAgY2FzZSBSZXNvdXJj
ZVJlcXVlc3RCYXNlOjpYQkw6CiAjZW5kaWYKICNpZiBFTkFCTEUoWFNMVCkgfHwgRU5BQkxFKFhC
TCkKICAgICAgICAgaWYgKCFtX2RvYy0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwp
KSB7CkBAIC0xOTUsNyArMTk1LDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQ2FjaGVkUmVz
b3VyY2UqIERvY0xvYWRlcjo6cmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5
cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIGJvb2wgaXNQcmVs
b2FkKQorQ2FjaGVkUmVzb3VyY2UqIERvY0xvYWRlcjo6cmVxdWVzdFJlc291cmNlKFJlc291cmNl
UmVxdWVzdEJhc2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYg
Y2hhcnNldCwgYm9vbCBpc1ByZWxvYWQpCiB7CiAgICAgS1VSTCBmdWxsVVJMID0gbV9kb2MtPmNv
bXBsZXRlVVJMKHVybCk7CiAKQEAgLTI2Myw3ICsyNjMsNyBAQAogICAgIERvY3VtZW50UmVzb3Vy
Y2VNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9y
IChEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIENhY2hlZFJlc291cmNlKiByZXNv
dXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7Ci0gICAgICAgIGlmIChyZXNvdXJjZS0+dHlwZSgpID09
IENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlKSB7CisgICAgICAgIGlmIChyZXNvdXJjZS0+
dHlwZSgpID09IFJlc291cmNlUmVxdWVzdEJhc2U6OkltYWdlUmVzb3VyY2UpIHsKICAgICAgICAg
ICAgIENhY2hlZEltYWdlKiBpbWFnZSA9IGNvbnN0X2Nhc3Q8Q2FjaGVkSW1hZ2UqPihzdGF0aWNf
Y2FzdDxjb25zdCBDYWNoZWRJbWFnZSo+KHJlc291cmNlKSk7CiAKICAgICAgICAgICAgIGlmIChp
bWFnZS0+c3RpbGxOZWVkc0xvYWQoKSkKQEAgLTMzMiwxMCArMzMyLDEwIEBACiAgICAgcmV0dXJu
IG1fcmVxdWVzdENvdW50OwogfQogICAgIAotdm9pZCBEb2NMb2FkZXI6OnByZWxvYWQoQ2FjaGVk
UmVzb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hh
cnNldCwgYm9vbCByZWZlcmVuY2VkRnJvbUJvZHkpCit2b2lkIERvY0xvYWRlcjo6cHJlbG9hZChS
ZXNvdXJjZVJlcXVlc3RCYXNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIGNoYXJzZXQsIGJvb2wgcmVmZXJlbmNlZEZyb21Cb2R5KQogewogICAgIGJvb2wgaGFz
UmVuZGVyaW5nID0gbV9kb2MtPmJvZHkoKSAmJiBtX2RvYy0+Ym9keSgpLT5yZW5kZXJlcigpOwot
ICAgIGlmICghaGFzUmVuZGVyaW5nICYmIChyZWZlcmVuY2VkRnJvbUJvZHkgfHwgdHlwZSA9PSBD
YWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSkpIHsKKyAgICBpZiAoIWhhc1JlbmRlcmluZyAm
JiAocmVmZXJlbmNlZEZyb21Cb2R5IHx8IHR5cGUgPT0gUmVzb3VyY2VSZXF1ZXN0QmFzZTo6SW1h
Z2VSZXNvdXJjZSkpIHsKICAgICAgICAgLy8gRG9uJ3QgcHJlbG9hZCBpbWFnZXMgb3IgYm9keSBy
ZXNvdXJjZXMgYmVmb3JlIHdlIGhhdmUgc29tZXRoaW5nIHRvIGRyYXcuIFRoaXMgcHJldmVudHMK
ICAgICAgICAgLy8gcHJlbG9hZHMgZnJvbSBib2R5IGRlbGF5aW5nIGZpcnN0IGRpc3BsYXkgd2hl
biBiYW5kd2lkdGggaXMgbGltaXRlZC4KICAgICAgICAgUGVuZGluZ1ByZWxvYWQgcGVuZGluZ1By
ZWxvYWQgPSB7IHR5cGUsIHVybCwgY2hhcnNldCB9OwpAQCAtMzU5LDEwICszNTksMTAgQEAKICAg
ICBtX3BlbmRpbmdQcmVsb2Fkcy5jbGVhcigpOwogfQogCi12b2lkIERvY0xvYWRlcjo6cmVxdWVz
dFByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgY2hhcnNldCkKK3ZvaWQgRG9jTG9hZGVyOjpyZXF1ZXN0UHJlbG9hZChSZXNv
dXJjZVJlcXVlc3RCYXNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIGNoYXJzZXQpCiB7CiAgICAgU3RyaW5nIGVuY29kaW5nOwotICAgIGlmICh0eXBlID09IENh
Y2hlZFJlc291cmNlOjpTY3JpcHQgfHwgdHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVT
aGVldCkKKyAgICBpZiAodHlwZSA9PSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpTY3JpcHQgfHwgdHlw
ZSA9PSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpDU1NTdHlsZVNoZWV0KQogICAgICAgICBlbmNvZGlu
ZyA9IGNoYXJzZXQuaXNFbXB0eSgpID8gbV9kb2MtPmZyYW1lKCktPmxvYWRlcigpLT5lbmNvZGlu
ZygpIDogY2hhcnNldDsKIAogICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IHJlcXVlc3RS
ZXNvdXJjZSh0eXBlLCB1cmwsIGVuY29kaW5nLCB0cnVlKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L0NhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGUuaAkocmV2aXNpb24g
NDY5NTMpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3
ICs5Niw3IEBACiAKICAgICAvLyBSZXF1ZXN0IHJlc291cmNlcyBmcm9tIHRoZSBjYWNoZS4gIEEg
bG9hZCB3aWxsIGJlIGluaXRpYXRlZCBhbmQgYSBjYWNoZSBvYmplY3QgY3JlYXRlZCBpZiB0aGUg
b2JqZWN0IGlzIG5vdAogICAgIC8vIGZvdW5kIGluIHRoZSBjYWNoZS4KLSAgICBDYWNoZWRSZXNv
dXJjZSogcmVxdWVzdFJlc291cmNlKERvY0xvYWRlciosIENhY2hlZFJlc291cmNlOjpUeXBlLCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgYm9vbCBpc1ByZWxvYWQgPSBm
YWxzZSk7CisgICAgQ2FjaGVkUmVzb3VyY2UqIHJlcXVlc3RSZXNvdXJjZShEb2NMb2FkZXIqLCBS
ZXNvdXJjZVJlcXVlc3RCYXNlOjpUeXBlLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
Y2hhcnNldCwgYm9vbCBpc1ByZWxvYWQgPSBmYWxzZSk7CiAKICAgICBDYWNoZWRDU1NTdHlsZVNo
ZWV0KiByZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQoRG9jTG9hZGVyKiwgY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCk7CiAgICAgCkluZGV4OiBXZWJDb3JlL2xvYWRlci9D
YWNoZWRDU1NTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNo
ZWRDU1NTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gNDY5NTMpCisrKyBXZWJDb3JlL2xvYWRlci9D
YWNoZWRDU1NTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBDYWNoZWRDU1NTdHlsZVNoZWV0OjpDYWNoZWRDU1NTdHls
ZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCi0gICAgOiBD
YWNoZWRSZXNvdXJjZSh1cmwsIENTU1N0eWxlU2hlZXQpCisgICAgOiBDYWNoZWRSZXNvdXJjZSh1
cmwsIFJlc291cmNlUmVxdWVzdEJhc2U6OkNTU1N0eWxlU2hlZXQpCiAgICAgLCBtX2RlY29kZXIo
VGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L2NzcyIsIGNoYXJzZXQpKQogewogICAg
IC8vIFByZWZlciB0ZXh0L2NzcyBidXQgYWNjZXB0IGFueSB0eXBlIChkZWxsLmNvbSBzZXJ2ZXMg
YSBzdHlsZXNoZWV0CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuaAkocmV2aXNpb24gNDY5NTMpCisrKyBXZWJD
b3JlL2xvYWRlci9Eb2NMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTgsMTcgKzk4LDE3IEBA
CiAgICAgCiAgICAgdm9pZCBjbGVhclByZWxvYWRzKCk7CiAgICAgdm9pZCBjbGVhclBlbmRpbmdQ
cmVsb2FkcygpOwotICAgIHZvaWQgcHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6VHlwZSwgY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgYm9vbCByZWZlcmVuY2VkRnJvbUJv
ZHkpOworICAgIHZvaWQgcHJlbG9hZChSZXNvdXJjZVJlcXVlc3RCYXNlOjpUeXBlLCBjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBib29sIHJlZmVyZW5jZWRGcm9tQm9k
eSk7CiAgICAgdm9pZCBjaGVja0ZvclBlbmRpbmdQcmVsb2FkcygpOwogICAgIHZvaWQgcHJpbnRQ
cmVsb2FkU3RhdHMoKTsKICAgICAKIHByaXZhdGU6Ci0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlcXVl
c3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgY2hhcnNldCwgYm9vbCBpc1ByZWxvYWQgPSBmYWxzZSk7Ci0gICAgdm9pZCByZXF1
ZXN0UHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6VHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgY2hhcnNldCk7CisgICAgQ2FjaGVkUmVzb3VyY2UqIHJlcXVlc3RSZXNvdXJjZShS
ZXNvdXJjZVJlcXVlc3RCYXNlOjpUeXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiBjaGFyc2V0LCBib29sIGlzUHJlbG9hZCA9IGZhbHNlKTsKKyAgICB2b2lkIHJlcXVlc3RQcmVs
b2FkKFJlc291cmNlUmVxdWVzdEJhc2U6OlR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIGNoYXJzZXQpOwogCiAgICAgdm9pZCBjaGVja0ZvclJlbG9hZChjb25zdCBLVVJMJik7
CiAgICAgdm9pZCBjaGVja0NhY2hlT2JqZWN0U3RhdHVzKENhY2hlZFJlc291cmNlKik7Ci0gICAg
Ym9vbCBjYW5SZXF1ZXN0KENhY2hlZFJlc291cmNlOjpUeXBlLCBjb25zdCBLVVJMJik7CisgICAg
Ym9vbCBjYW5SZXF1ZXN0KFJlc291cmNlUmVxdWVzdEJhc2U6OlR5cGUsIGNvbnN0IEtVUkwmKTsK
ICAgICAKICAgICBDYWNoZSogbV9jYWNoZTsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWxvYWRl
ZFVSTHM7CkBAIC0xMTksNyArMTE5LDcgQEAKICAgICAKICAgICBMaXN0SGFzaFNldDxDYWNoZWRS
ZXNvdXJjZSo+IG1fcHJlbG9hZHM7CiAgICAgc3RydWN0IFBlbmRpbmdQcmVsb2FkIHsKLSAgICAg
ICAgQ2FjaGVkUmVzb3VyY2U6OlR5cGUgbV90eXBlOworICAgICAgICBSZXNvdXJjZVJlcXVlc3RC
YXNlOjpUeXBlIG1fdHlwZTsKICAgICAgICAgU3RyaW5nIG1fdXJsOwogICAgICAgICBTdHJpbmcg
bV9jaGFyc2V0OwogICAgIH07CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGUuY3BwCShyZXZpc2lvbiA0Njk1MykKKysrIFdl
YkNvcmUvbG9hZGVyL0NhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsMjMgKzY1LDIzIEBA
CiB7CiB9CiAKLXN0YXRpYyBDYWNoZWRSZXNvdXJjZSogY3JlYXRlUmVzb3VyY2UoQ2FjaGVkUmVz
b3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQp
CitzdGF0aWMgQ2FjaGVkUmVzb3VyY2UqIGNyZWF0ZVJlc291cmNlKFJlc291cmNlUmVxdWVzdEJh
c2U6OlR5cGUgdHlwZSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCiB7
CiAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNv
dXJjZToKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OkltYWdlUmVzb3VyY2U6CiAgICAg
ICAgIHJldHVybiBuZXcgQ2FjaGVkSW1hZ2UodXJsLnN0cmluZygpKTsKLSAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgorICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6
Q1NTU3R5bGVTaGVldDoKICAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRDU1NTdHlsZVNoZWV0KHVy
bC5zdHJpbmcoKSwgY2hhcnNldCk7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0Ogor
ICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6U2NyaXB0OgogICAgICAgICByZXR1cm4gbmV3
IENhY2hlZFNjcmlwdCh1cmwuc3RyaW5nKCksIGNoYXJzZXQpOwotICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6OkZvbnRSZXNvdXJjZToKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OkZvbnRS
ZXNvdXJjZToKICAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRGb250KHVybC5zdHJpbmcoKSk7CiAj
aWYgRU5BQkxFKFhTTFQpCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoK
KyAgICBjYXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OlhTTFN0eWxlU2hlZXQ6CiAgICAgICAgIHJl
dHVybiBuZXcgQ2FjaGVkWFNMU3R5bGVTaGVldCh1cmwuc3RyaW5nKCkpOwogI2VuZGlmCiAjaWYg
RU5BQkxFKFhCTCkKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYQkxTdHlsZVNoZWV0OgorICAg
IGNhc2UgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6WEJMU3R5bGVTaGVldDoKICAgICAgICAgcmV0dXJu
IG5ldyBDYWNoZWRYQkxEb2N1bWVudCh1cmwuc3RyaW5nKCkpOwogI2VuZGlmCiAgICAgZGVmYXVs
dDoKQEAgLTkxLDcgKzkxLDcgQEAKICAgICByZXR1cm4gMDsKIH0KIAotQ2FjaGVkUmVzb3VyY2Uq
IENhY2hlOjpyZXF1ZXN0UmVzb3VyY2UoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIENhY2hlZFJlc291
cmNlOjpUeXBlIHR5cGUsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBi
b29sIHJlcXVlc3RJc1ByZWxvYWQpCitDYWNoZWRSZXNvdXJjZSogQ2FjaGU6OnJlcXVlc3RSZXNv
dXJjZShEb2NMb2FkZXIqIGRvY0xvYWRlciwgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6VHlwZSB0eXBl
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgYm9vbCByZXF1ZXN0SXNQ
cmVsb2FkKQogewogICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgbmVlZCB0byBzcGVjaWFsLWNh
c2UgYW4gZW1wdHkgVVJMPwogICAgIC8vIFdvdWxkIGl0IGJlIGJldHRlciB0byBqdXN0IGdvIG9u
IHdpdGggdGhlIGNhY2hlIGNvZGUgYW5kIGxldCBpdCBmYWlsIGxhdGVyPwpAQCAtMTUzLDcgKzE1
Myw3IEBACiB7CiAgICAgQ2FjaGVkQ1NTU3R5bGVTaGVldCogdXNlclNoZWV0OwogICAgIGlmIChD
YWNoZWRSZXNvdXJjZSogZXhpc3RpbmcgPSByZXNvdXJjZUZvclVSTCh1cmwpKSB7Ci0gICAgICAg
IGlmIChleGlzdGluZy0+dHlwZSgpICE9IENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0KQor
ICAgICAgICBpZiAoZXhpc3RpbmctPnR5cGUoKSAhPSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpDU1NT
dHlsZVNoZWV0KQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHVzZXJTaGVldCA9IHN0
YXRpY19jYXN0PENhY2hlZENTU1N0eWxlU2hlZXQqPihleGlzdGluZyk7CiAgICAgfSBlbHNlIHsK
QEAgLTY1OCwyNSArNjU4LDI1IEBACiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0
b3IgaSA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGkgIT0gZTsgKytpKSB7CiAgICAgICAgIENhY2hl
ZFJlc291cmNlKiByZXNvdXJjZSA9IGktPnNlY29uZDsKICAgICAgICAgc3dpdGNoIChyZXNvdXJj
ZS0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6
CisgICAgICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6SW1hZ2VSZXNvdXJjZToKICAgICAg
ICAgICAgIHN0YXRzLmltYWdlcy5hZGRSZXNvdXJjZShyZXNvdXJjZSk7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKKyAgICAg
ICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpDU1NTdHlsZVNoZWV0OgogICAgICAgICAgICAg
c3RhdHMuY3NzU3R5bGVTaGVldHMuYWRkUmVzb3VyY2UocmVzb3VyY2UpOwogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKKyAgICAgICAgY2Fz
ZSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpTY3JpcHQ6CiAgICAgICAgICAgICBzdGF0cy5zY3JpcHRz
LmFkZFJlc291cmNlKHJlc291cmNlKTsKICAgICAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShY
U0xUKQotICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgorICAgICAg
ICBjYXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OlhTTFN0eWxlU2hlZXQ6CiAgICAgICAgICAgICBz
dGF0cy54c2xTdHlsZVNoZWV0cy5hZGRSZXNvdXJjZShyZXNvdXJjZSk7CiAgICAgICAgICAgICBi
cmVhazsKICNlbmRpZgotICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6
CisgICAgICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Rm9udFJlc291cmNlOgogICAgICAg
ICAgICAgc3RhdHMuZm9udHMuYWRkUmVzb3VyY2UocmVzb3VyY2UpOwogICAgICAgICAgICAgYnJl
YWs7CiAjaWYgRU5BQkxFKFhCTCkKLSAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WEJMOgor
ICAgICAgICBjYXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OlhCTDoKICAgICAgICAgICAgIHN0YXRz
LnhibERvY3MuYWRkUmVzb3VyY2UocmVzb3VyY2UpCiAgICAgICAgICAgICBicmVhazsKICNlbmRp
ZgpJbmRleDogV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2xvYWRlci9sb2FkZXIuY3BwCShyZXZpc2lvbiA0Njk1MykKKysrIFdlYkNvcmUvbG9hZGVyL2xv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE4ICs3MywxOCBAQAogewogI2lmIFJFUVVF
U1RfTUFOQUdFTUVOVF9FTkFCTEVECiAgICAgc3dpdGNoIChyZXNvdXJjZS0+dHlwZSgpKSB7Ci0g
ICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6CisgICAgY2FzZSBSZXNv
dXJjZVJlcXVlc3RCYXNlOjpDU1NTdHlsZVNoZWV0OgogI2lmIEVOQUJMRShYU0xUKQotICAgICAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgorICAgIGNhc2UgUmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6WFNMU3R5bGVTaGVldDoKICNlbmRpZgogI2lmIEVOQUJMRShYQkwpCi0gICAg
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhCTDoKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdEJh
c2U6OlhCTDoKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIEhpZ2g7Ci0gICAgICAgIGNhc2Ug
Q2FjaGVkUmVzb3VyY2U6OlNjcmlwdDogCi0gICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZv
bnRSZXNvdXJjZToKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OlNjcmlwdDoKKyAgICBj
YXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OkZvbnRSZXNvdXJjZToKICAgICAgICAgICAgIHJldHVy
biBNZWRpdW07Ci0gICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6Cisg
ICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpJbWFnZVJlc291cmNlOgogICAgICAgICAgICAg
cmV0dXJuIExvdzsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yOTksNyAr
Mjk5LDggQEAKICAgICAgICAgcmVxdWVzdHNQZW5kaW5nLnJlbW92ZUZpcnN0KCk7CiAgICAgICAg
IAogICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QtPmNhY2hl
ZFJlc291cmNlKCktPnVybCgpKTsKLSAgICAgICAgCisgICAgICAgIHJlc291cmNlUmVxdWVzdC5z
ZXRSZXNvdXJjZVR5cGUocmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2UoKS0+dHlwZSgpKTsKKwogICAg
ICAgICBpZiAoIXJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCktPmFjY2VwdCgpLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIHJlc291cmNlUmVxdWVzdC5zZXRIVFRQQWNjZXB0KHJlcXVlc3QtPmNhY2hl
ZFJlc291cmNlKCktPmFjY2VwdCgpKTsKICAgICAgICAgCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NJ
bWFnZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NJbWFnZVZhbHVlLmNw
cAkocmV2aXNpb24gNDY5NTMpCisrKyBXZWJDb3JlL2Nzcy9DU1NJbWFnZVZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgICAgY2FjaGVkSW1hZ2UgPSBs
b2FkZXItPnJlcXVlc3RJbWFnZSh1cmwpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8v
IEZJWE1FOiBTaG91bGQgZmluZCBhIHdheSB0byBtYWtlIHRoZXNlIGltYWdlcyBzaXQgaW4gdGhl
aXIgb3duIG1lbW9yeSBwYXJ0aXRpb24sIHNpbmNlIHRoZXkgYXJlIHVzZXIgYWdlbnQgaW1hZ2Vz
LgotICAgICAgICAgICAgY2FjaGVkSW1hZ2UgPSBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZSo+KGNh
Y2hlKCktPnJlcXVlc3RSZXNvdXJjZSgwLCBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSwg
S1VSTCh1cmwpLCBTdHJpbmcoKSkpOworICAgICAgICAgICAgY2FjaGVkSW1hZ2UgPSBzdGF0aWNf
Y2FzdDxDYWNoZWRJbWFnZSo+KGNhY2hlKCktPnJlcXVlc3RSZXNvdXJjZSgwLCBSZXNvdXJjZVJl
cXVlc3RCYXNlOjpJbWFnZVJlc291cmNlLCBLVVJMKHVybCksIFN0cmluZygpKSk7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoY2FjaGVkSW1hZ2UpIHsKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclJlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDQ2OTUzKQorKysgV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsMTkgKzIyOCwx
OSBAQAogICAgICAgICByZXR1cm4gT3RoZXI7CiAKICAgICBzd2l0Y2ggKGNhY2hlZFJlc291cmNl
LT50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToK
LSAgICAgICAgICAgIHJldHVybiBJbWFnZTsKLSAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
Rm9udFJlc291cmNlOgotICAgICAgICAgICAgcmV0dXJuIEZvbnQ7Ci0gICAgICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RCYXNl
OjpJbWFnZVJlc291cmNlOgorICAgICAgICAgcmV0dXJuIEltYWdlOworICAgIGNhc2UgUmVzb3Vy
Y2VSZXF1ZXN0QmFzZTo6Rm9udFJlc291cmNlOgorICAgICAgICByZXR1cm4gRm9udDsKKyAgICBj
YXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OkNTU1N0eWxlU2hlZXQ6CiAjaWYgRU5BQkxFKFhTTFQp
Ci0gICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6CisgICAgY2FzZSBS
ZXNvdXJjZVJlcXVlc3RCYXNlOjpYU0xTdHlsZVNoZWV0OgogI2VuZGlmCi0gICAgICAgICAgICBy
ZXR1cm4gU3R5bGVzaGVldDsKLSAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0Ogot
ICAgICAgICAgICAgcmV0dXJuIFNjcmlwdDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHJldHVybiBPdGhlcjsKKyAgICAgICAgIHJldHVybiBTdHlsZXNoZWV0OworICAgIGNhc2UgUmVz
b3VyY2VSZXF1ZXN0QmFzZTo6U2NyaXB0OgorICAgICAgICAgcmV0dXJuIFNjcmlwdDsKKyAgICBk
ZWZhdWx0OgorICAgICAgICAgcmV0dXJuIE90aGVyOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29y
ZS9odG1sL1ByZWxvYWRTY2FubmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvUHJl
bG9hZFNjYW5uZXIuY3BwCShyZXZpc2lvbiA0Njk1MykKKysrIFdlYkNvcmUvaHRtbC9QcmVsb2Fk
U2Nhbm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzMiwxMSArODMyLDExIEBACiAgICAgfQog
ICAgIAogICAgIGlmICh0YWcgPT0gc2NyaXB0VGFnKQotICAgICAgICBtX2RvY3VtZW50LT5kb2NM
b2FkZXIoKS0+cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6U2NyaXB0LCBtX3VybFRvTG9hZCwgbV9j
aGFyc2V0LCBzY2FubmluZ0JvZHkoKSk7CisgICAgICAgIG1fZG9jdW1lbnQtPmRvY0xvYWRlcigp
LT5wcmVsb2FkKFJlc291cmNlUmVxdWVzdEJhc2U6OlNjcmlwdCwgbV91cmxUb0xvYWQsIG1fY2hh
cnNldCwgc2Nhbm5pbmdCb2R5KCkpOwogICAgIGVsc2UgaWYgKHRhZyA9PSBpbWdUYWcpIAotICAg
ICAgICBtX2RvY3VtZW50LT5kb2NMb2FkZXIoKS0+cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6SW1h
Z2VSZXNvdXJjZSwgbV91cmxUb0xvYWQsIFN0cmluZygpLCBzY2FubmluZ0JvZHkoKSk7CisgICAg
ICAgIG1fZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5wcmVsb2FkKFJlc291cmNlUmVxdWVzdEJhc2U6
OkltYWdlUmVzb3VyY2UsIG1fdXJsVG9Mb2FkLCBTdHJpbmcoKSwgc2Nhbm5pbmdCb2R5KCkpOwog
ICAgIGVsc2UgaWYgKHRhZyA9PSBsaW5rVGFnICYmIG1fbGlua0lzU3R5bGVTaGVldCkgCi0gICAg
ICAgIG1fZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5wcmVsb2FkKENhY2hlZFJlc291cmNlOjpDU1NT
dHlsZVNoZWV0LCBtX3VybFRvTG9hZCwgbV9jaGFyc2V0LCBzY2FubmluZ0JvZHkoKSk7CisgICAg
ICAgIG1fZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5wcmVsb2FkKFJlc291cmNlUmVxdWVzdEJhc2U6
OkNTU1N0eWxlU2hlZXQsIG1fdXJsVG9Mb2FkLCBtX2NoYXJzZXQsIHNjYW5uaW5nQm9keSgpKTsK
IAogICAgIG1fdXJsVG9Mb2FkID0gU3RyaW5nKCk7CiAgICAgbV9jaGFyc2V0ID0gU3RyaW5nKCk7
CkBAIC04NTAsNyArODUwLDcgQEAKICAgICAgICAgU3RyaW5nIHZhbHVlKG1fY3NzUnVsZVZhbHVl
LmRhdGEoKSwgbV9jc3NSdWxlVmFsdWUuc2l6ZSgpKTsKICAgICAgICAgU3RyaW5nIHVybCA9IGRl
cHJlY2F0ZWRQYXJzZVVSTCh2YWx1ZSk7CiAgICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIG1fZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5wcmVsb2FkKENhY2hlZFJlc291cmNl
OjpDU1NTdHlsZVNoZWV0LCB1cmwsIFN0cmluZygpLCBzY2FubmluZ0JvZHkoKSk7CisgICAgICAg
ICAgICBtX2RvY3VtZW50LT5kb2NMb2FkZXIoKS0+cHJlbG9hZChSZXNvdXJjZVJlcXVlc3RCYXNl
OjpDU1NTdHlsZVNoZWV0LCB1cmwsIFN0cmluZygpLCBzY2FubmluZ0JvZHkoKSk7CiAgICAgfQog
ICAgIG1fY3NzUnVsZS5jbGVhcigpOwogICAgIG1fY3NzUnVsZVZhbHVlLmNsZWFyKCk7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHJl
dmlzaW9uIDQ2OTUzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVz
dEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMjAgQEAKICAgICAvLyBEbyBub3Qg
dXNlIHRoaXMgdHlwZSBkaXJlY3RseS4gIFVzZSBSZXNvdXJjZVJlcXVlc3QgaW5zdGVhZC4KICAg
ICBjbGFzcyBSZXNvdXJjZVJlcXVlc3RCYXNlIHsKICAgICBwdWJsaWM6CisgICAgICAgIGVudW0g
VHlwZSB7CisgICAgICAgICAgICBHZW5lcmljLAorICAgICAgICAgICAgSW1hZ2VSZXNvdXJjZSwK
KyAgICAgICAgICAgIENTU1N0eWxlU2hlZXQsCisgICAgICAgICAgICBTY3JpcHQsCisgICAgICAg
ICAgICBGb250UmVzb3VyY2UKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICAgICAgICAgICwgWFNMU3R5
bGVTaGVldAorI2VuZGlmCisjaWYgRU5BQkxFKFhCTCkKKyAgICAgICAgICAgICwgWEJMCisjZW5k
aWYKKyAgICAgICAgfTsKKwogICAgICAgICBzdGF0aWMgc3RkOjphdXRvX3B0cjxSZXNvdXJjZVJl
cXVlc3Q+IGFkb3B0KHN0ZDo6YXV0b19wdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRh
Pik7CiAKICAgICAgICAgLy8gR2V0cyBhIGNvcHkgb2YgdGhlIGRhdGEgc3VpdGFibGUgZm9yIHBh
c3NpbmcgdG8gYW5vdGhlciB0aHJlYWQuCkBAIC02Myw2ICs3Nyw4IEBACiAgICAgICAgIGNvbnN0
IEtVUkwmIHVybCgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldFVSTChjb25zdCBLVVJMJiB1cmwp
OwogCisgICAgICAgIFJlc291cmNlUmVxdWVzdEJhc2U6OlR5cGUgcmVzb3VyY2VUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9yZXNvdXJjZVR5cGU7IH0KKwogICAgICAgICB2b2lkIHJlbW92ZUNyZWRl
bnRpYWxzKCk7CiAKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgY2FjaGVQb2xp
Y3koKSBjb25zdDsKQEAgLTExNSwxMiArMTMxLDE1IEBACiAgICAgICAgIGJvb2wgcmVwb3J0VXBs
b2FkUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX3JlcG9ydFVwbG9hZFByb2dyZXNzOyB9CiAg
ICAgICAgIHZvaWQgc2V0UmVwb3J0VXBsb2FkUHJvZ3Jlc3MoYm9vbCByZXBvcnRVcGxvYWRQcm9n
cmVzcykgeyBtX3JlcG9ydFVwbG9hZFByb2dyZXNzID0gcmVwb3J0VXBsb2FkUHJvZ3Jlc3M7IH0K
IAorICAgICAgICB2b2lkIHNldFJlc291cmNlVHlwZShSZXNvdXJjZVJlcXVlc3RCYXNlOjpUeXBl
IHR5cGUpIHsgbV9yZXNvdXJjZVR5cGUgPSB0eXBlOyB9CisKICAgICBwcm90ZWN0ZWQ6CiAgICAg
ICAgIC8vIFVzZWQgd2hlbiBSZXNvdXJjZVJlcXVlc3QgaXMgaW5pdGlhbGl6ZWQgZnJvbSBhIHBs
YXRmb3JtIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXF1ZXN0CiAgICAgICAgIFJlc291cmNlUmVx
dWVzdEJhc2UoKQogICAgICAgICAgICAgOiBtX3Jlc291cmNlUmVxdWVzdFVwZGF0ZWQoZmFsc2Up
CiAgICAgICAgICAgICAsIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCh0cnVlKQogICAgICAgICAg
ICAgLCBtX3JlcG9ydFVwbG9hZFByb2dyZXNzKGZhbHNlKQorICAgICAgICAgICAgLCBtX3Jlc291
cmNlVHlwZShHZW5lcmljKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMTMzLDYgKzE1Miw3
IEBACiAgICAgICAgICAgICAsIG1fcmVzb3VyY2VSZXF1ZXN0VXBkYXRlZCh0cnVlKQogICAgICAg
ICAgICAgLCBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQoZmFsc2UpCiAgICAgICAgICAgICAsIG1f
cmVwb3J0VXBsb2FkUHJvZ3Jlc3MoZmFsc2UpCisgICAgICAgICAgICAsIG1fcmVzb3VyY2VUeXBl
KEdlbmVyaWMpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0xNTIsNiArMTcyLDcgQEAKICAg
ICAgICAgbXV0YWJsZSBib29sIG1fcmVzb3VyY2VSZXF1ZXN0VXBkYXRlZDsKICAgICAgICAgbXV0
YWJsZSBib29sIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZDsKICAgICAgICAgYm9vbCBtX3JlcG9y
dFVwbG9hZFByb2dyZXNzOworICAgICAgICBSZXNvdXJjZVJlcXVlc3RCYXNlOjpUeXBlIG1fcmVz
b3VyY2VUeXBlOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiBhc1Jlc291cmNlUmVxdWVzdCgpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34879</attachid>
            <date>2009-08-14 16:54:07 -0700</date>
            <delta_ts>2009-09-13 17:02:03 -0700</delta_ts>
            <desc>new version of the patch, with changelog</desc>
            <filename>show-resource-type-v3.patch</filename>
            <type>text/plain</type>
            <size>28770</size>
            <attacher name="Zsombor">gzsombor</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ3Mjkz
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDgt
MTQgIEdlZ2VzeSBac29tYm9yICA8Z3pzb21ib3JAZ21haWwuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhc3MgdGhlIHJlc291cmNlIHR5cGUg
aW5mb3JtYXRpb24gdG8gdGhlIG5ldHdvcmsgaGFuZGxlciBsYXllciwgdGhpcyBpcyAKKyAgICAg
ICAgZnVsZmlsbGVkIHdpdGggaW50cm9kdWNpbmcgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6VHlwZSBl
bnVtZXJhdGlvbiwgd2hpY2ggaXMgdXNlZAorICAgICAgICBpbiB0aGUgQ2FjaGVkUmVzb3VyY2Ug
Y29kZSwgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgQ2FjaGVkUmVzb3VyY2U6OlR5cGUgZW51bS4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc3ODcK
KworCiAyMDA5LTA4LTEyICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBKYW4gQWxvbnpvLgpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3MjkzKQorKysgV2ViQ29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2MiBAQAorMjAwOS0wOC0xNCAgR2Vn
ZXN5IFpzb21ib3IgIDxnenNvbWJvckBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTI3Nzg3CisKKyAgICAgICAgUGFzcyB0aGUgcmVzb3VyY2UgdHlwZSBpbmZvcm1h
dGlvbiB0byB0aGUgbmV0d29yayBoYW5kbGVyIGxheWVyLCB0aGlzIGlzIAorICAgICAgICBmdWxm
aWxsZWQgd2l0aCBpbnRyb2R1Y2luZyBSZXNvdXJjZVJlcXVlc3RCYXNlOjpUeXBlIGVudW1lcmF0
aW9uLCB3aGljaCBpcyB1c2VkIAorICAgICAgICBpbiB0aGUgQ2FjaGVkUmVzb3VyY2UgY29kZSwg
aW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgQ2FjaGVkUmVzb3VyY2U6OlR5cGUgZW51bS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgYXJlIGFkZGVkLgorCisgICAgICAgICogY3NzL0NTU0ltYWdlVmFs
dWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VWYWx1ZTo6Y2FjaGVkSW1hZ2UpOgor
ICAgICAgICAqIGh0bWwvUHJlbG9hZFNjYW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJl
bG9hZFNjYW5uZXI6OmVtaXRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6UHJlbG9hZFNjYW5uZXI6
OmVtaXRDU1NSdWxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2U6OnR5cGUpOgorICAgICAgICAq
IGxvYWRlci9DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSZXNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZTo6cmVxdWVzdFJlc291cmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhY2hlOjpyZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGU6OmdldFN0YXRpc3RpY3MpOgorICAgICAgICAqIGxvYWRlci9DYWNoZS5oOgorICAgICAg
ICAqIGxvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
Y2hlZENTU1N0eWxlU2hlZXQ6OkNhY2hlZENTU1N0eWxlU2hlZXQpOgorICAgICAgICAqIGxvYWRl
ci9DYWNoZWRGb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEZvbnQ6OkNhY2hlZEZv
bnQpOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2UpOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNv
dXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6Q2FjaGVkUmVzb3Vy
Y2UpOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkUmVzb3VyY2U6OnR5cGUpOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRTY3JpcHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkU2NyaXB0OjpDYWNoZWRTY3JpcHQpOgorICAg
ICAgICAqIGxvYWRlci9Eb2NMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jTG9hZGVy
OjpyZXF1ZXN0SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RG9jTG9hZGVyOjpyZXF1ZXN0Rm9u
dCk6CisgICAgICAgIChXZWJDb3JlOjpEb2NMb2FkZXI6OnJlcXVlc3RDU1NTdHlsZVNoZWV0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY0xvYWRlcjo6cmVxdWVzdFNjcmlwdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2NMb2FkZXI6OnJlcXVlc3RYU0xTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY0xvYWRlcjo6cmVxdWVzdFhCTERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y0xvYWRlcjo6Y2FuUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpEb2NMb2FkZXI6OnJlcXVl
c3RSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2NMb2FkZXI6OnNldEF1dG9Mb2FkSW1h
Z2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY0xvYWRlcjo6cHJlbG9hZCk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2NMb2FkZXI6OnJlcXVlc3RQcmVsb2FkKToKKyAgICAgICAgKiBsb2FkZXIvRG9j
TG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL2xvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMb2FkZXI6OmRldGVybWluZVByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlcjo6
SG9zdDo6c2VydmVQZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
QmFzZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnJlc291cmNl
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRSZXNvdXJj
ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVzb3VyY2VS
ZXF1ZXN0QmFzZSk6CisKIDIwMDktMDgtMTQgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBXZWJD
b3JlL2Nzcy9DU1NJbWFnZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NJ
bWFnZVZhbHVlLmNwcAkocmV2aXNpb24gNDcyOTMpCisrKyBXZWJDb3JlL2Nzcy9DU1NJbWFnZVZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBTdHlsZUNhY2hlZEltYWdl
KiBDU1NJbWFnZVZhbHVlOjpjYWNoZWRJCiAgICAgICAgICAgICBjYWNoZWRJbWFnZSA9IGxvYWRl
ci0+cmVxdWVzdEltYWdlKHVybCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gRklY
TUU6IFNob3VsZCBmaW5kIGEgd2F5IHRvIG1ha2UgdGhlc2UgaW1hZ2VzIHNpdCBpbiB0aGVpciBv
d24gbWVtb3J5IHBhcnRpdGlvbiwgc2luY2UgdGhleSBhcmUgdXNlciBhZ2VudCBpbWFnZXMuCi0g
ICAgICAgICAgICBjYWNoZWRJbWFnZSA9IHN0YXRpY19jYXN0PENhY2hlZEltYWdlKj4oY2FjaGUo
KS0+cmVxdWVzdFJlc291cmNlKDAsIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlLCBLVVJM
KHVybCksIFN0cmluZygpKSk7CisgICAgICAgICAgICBjYWNoZWRJbWFnZSA9IHN0YXRpY19jYXN0
PENhY2hlZEltYWdlKj4oY2FjaGUoKS0+cmVxdWVzdFJlc291cmNlKDAsIFJlc291cmNlUmVxdWVz
dEJhc2U6OkltYWdlUmVzb3VyY2UsIEtVUkwodXJsKSwgU3RyaW5nKCkpKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChjYWNoZWRJbWFnZSkgewpJbmRleDogV2ViQ29yZS9odG1sL1ByZWxvYWRT
Y2FubmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvUHJlbG9hZFNjYW5uZXIuY3Bw
CShyZXZpc2lvbiA0NzI5MykKKysrIFdlYkNvcmUvaHRtbC9QcmVsb2FkU2Nhbm5lci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgzMiwxMSArODMyLDExIEBAIHZvaWQgUHJlbG9hZFNjYW5uZXI6OmVt
aXRUYWcoKQogICAgIH0KICAgICAKICAgICBpZiAodGFnID09IHNjcmlwdFRhZykKLSAgICAgICAg
bV9kb2N1bWVudC0+ZG9jTG9hZGVyKCktPnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdCwg
bV91cmxUb0xvYWQsIG1fY2hhcnNldCwgc2Nhbm5pbmdCb2R5KCkpOworICAgICAgICBtX2RvY3Vt
ZW50LT5kb2NMb2FkZXIoKS0+cHJlbG9hZChSZXNvdXJjZVJlcXVlc3RCYXNlOjpTY3JpcHQsIG1f
dXJsVG9Mb2FkLCBtX2NoYXJzZXQsIHNjYW5uaW5nQm9keSgpKTsKICAgICBlbHNlIGlmICh0YWcg
PT0gaW1nVGFnKSAKLSAgICAgICAgbV9kb2N1bWVudC0+ZG9jTG9hZGVyKCktPnByZWxvYWQoQ2Fj
aGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UsIG1fdXJsVG9Mb2FkLCBTdHJpbmcoKSwgc2Nhbm5p
bmdCb2R5KCkpOworICAgICAgICBtX2RvY3VtZW50LT5kb2NMb2FkZXIoKS0+cHJlbG9hZChSZXNv
dXJjZVJlcXVlc3RCYXNlOjpJbWFnZVJlc291cmNlLCBtX3VybFRvTG9hZCwgU3RyaW5nKCksIHNj
YW5uaW5nQm9keSgpKTsKICAgICBlbHNlIGlmICh0YWcgPT0gbGlua1RhZyAmJiBtX2xpbmtJc1N0
eWxlU2hlZXQpIAotICAgICAgICBtX2RvY3VtZW50LT5kb2NMb2FkZXIoKS0+cHJlbG9hZChDYWNo
ZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCwgbV91cmxUb0xvYWQsIG1fY2hhcnNldCwgc2Nhbm5p
bmdCb2R5KCkpOworICAgICAgICBtX2RvY3VtZW50LT5kb2NMb2FkZXIoKS0+cHJlbG9hZChSZXNv
dXJjZVJlcXVlc3RCYXNlOjpDU1NTdHlsZVNoZWV0LCBtX3VybFRvTG9hZCwgbV9jaGFyc2V0LCBz
Y2FubmluZ0JvZHkoKSk7CiAKICAgICBtX3VybFRvTG9hZCA9IFN0cmluZygpOwogICAgIG1fY2hh
cnNldCA9IFN0cmluZygpOwpAQCAtODUwLDcgKzg1MCw3IEBAIHZvaWQgUHJlbG9hZFNjYW5uZXI6
OmVtaXRDU1NSdWxlKCkKICAgICAgICAgU3RyaW5nIHZhbHVlKG1fY3NzUnVsZVZhbHVlLmRhdGEo
KSwgbV9jc3NSdWxlVmFsdWUuc2l6ZSgpKTsKICAgICAgICAgU3RyaW5nIHVybCA9IGRlcHJlY2F0
ZWRQYXJzZVVSTCh2YWx1ZSk7CiAgICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIG1fZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5wcmVsb2FkKENhY2hlZFJlc291cmNlOjpDU1NT
dHlsZVNoZWV0LCB1cmwsIFN0cmluZygpLCBzY2FubmluZ0JvZHkoKSk7CisgICAgICAgICAgICBt
X2RvY3VtZW50LT5kb2NMb2FkZXIoKS0+cHJlbG9hZChSZXNvdXJjZVJlcXVlc3RCYXNlOjpDU1NT
dHlsZVNoZWV0LCB1cmwsIFN0cmluZygpLCBzY2FubmluZ0JvZHkoKSk7CiAgICAgfQogICAgIG1f
Y3NzUnVsZS5jbGVhcigpOwogICAgIG1fY3NzUnVsZVZhbHVlLmNsZWFyKCk7CkluZGV4OiBXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA0NzI5MykKKysrIFdl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI4LDE5ICsyMjgsMTkgQEAgSW5zcGVjdG9yUmVzb3VyY2U6OlR5cGUgSW5zcGVjdG9yUmVzb3Vy
YwogICAgICAgICByZXR1cm4gT3RoZXI7CiAKICAgICBzd2l0Y2ggKGNhY2hlZFJlc291cmNlLT50
eXBlKCkpIHsKLSAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKLSAg
ICAgICAgICAgIHJldHVybiBJbWFnZTsKLSAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9u
dFJlc291cmNlOgotICAgICAgICAgICAgcmV0dXJuIEZvbnQ7Ci0gICAgICAgIGNhc2UgQ2FjaGVk
UmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpJ
bWFnZVJlc291cmNlOgorICAgICAgICAgcmV0dXJuIEltYWdlOworICAgIGNhc2UgUmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6Rm9udFJlc291cmNlOgorICAgICAgICByZXR1cm4gRm9udDsKKyAgICBjYXNl
IFJlc291cmNlUmVxdWVzdEJhc2U6OkNTU1N0eWxlU2hlZXQ6CiAjaWYgRU5BQkxFKFhTTFQpCi0g
ICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6CisgICAgY2FzZSBSZXNv
dXJjZVJlcXVlc3RCYXNlOjpYU0xTdHlsZVNoZWV0OgogI2VuZGlmCi0gICAgICAgICAgICByZXR1
cm4gU3R5bGVzaGVldDsKLSAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgotICAg
ICAgICAgICAgcmV0dXJuIFNjcmlwdDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBPdGhlcjsKKyAgICAgICAgIHJldHVybiBTdHlsZXNoZWV0OworICAgIGNhc2UgUmVzb3Vy
Y2VSZXF1ZXN0QmFzZTo6U2NyaXB0OgorICAgICAgICAgcmV0dXJuIFNjcmlwdDsKKyAgICBkZWZh
dWx0OgorICAgICAgICAgcmV0dXJuIE90aGVyOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9s
b2FkZXIvQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlLmNwcAko
cmV2aXNpb24gNDcyOTMpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY1LDIzICs2NSwyMyBAQCBDYWNoZTo6Q2FjaGUoKQogewogfQogCi1zdGF0aWMgQ2Fj
aGVkUmVzb3VyY2UqIGNyZWF0ZVJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQorc3RhdGljIENhY2hlZFJlc291
cmNlKiBjcmVhdGVSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3RCYXNlOjpUeXBlIHR5cGUsIGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQogewogICAgIHN3aXRjaCAodHlwZSkg
ewotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6CisgICAgY2FzZSBSZXNv
dXJjZVJlcXVlc3RCYXNlOjpJbWFnZVJlc291cmNlOgogICAgICAgICByZXR1cm4gbmV3IENhY2hl
ZEltYWdlKHVybC5zdHJpbmcoKSk7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVT
aGVldDoKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OkNTU1N0eWxlU2hlZXQ6CiAgICAg
ICAgIHJldHVybiBuZXcgQ2FjaGVkQ1NTU3R5bGVTaGVldCh1cmwuc3RyaW5nKCksIGNoYXJzZXQp
OwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKKyAgICBjYXNlIFJlc291cmNlUmVx
dWVzdEJhc2U6OlNjcmlwdDoKICAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRTY3JpcHQodXJsLnN0
cmluZygpLCBjaGFyc2V0KTsKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6
CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpGb250UmVzb3VyY2U6CiAgICAgICAgIHJl
dHVybiBuZXcgQ2FjaGVkRm9udCh1cmwuc3RyaW5nKCkpOwogI2lmIEVOQUJMRShYU0xUKQotICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6CisgICAgY2FzZSBSZXNvdXJjZVJl
cXVlc3RCYXNlOjpYU0xTdHlsZVNoZWV0OgogICAgICAgICByZXR1cm4gbmV3IENhY2hlZFhTTFN0
eWxlU2hlZXQodXJsLnN0cmluZygpKTsKICNlbmRpZgogI2lmIEVOQUJMRShYQkwpCi0gICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6WEJMU3R5bGVTaGVldDoKKyAgICBjYXNlIFJlc291cmNlUmVxdWVz
dEJhc2U6OlhCTFN0eWxlU2hlZXQ6CiAgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkWEJMRG9jdW1l
bnQodXJsLnN0cmluZygpKTsKICNlbmRpZgogICAgIGRlZmF1bHQ6CkBAIC05MSw3ICs5MSw3IEBA
IHN0YXRpYyBDYWNoZWRSZXNvdXJjZSogY3JlYXRlUmVzb3VyY2UoQ2EKICAgICByZXR1cm4gMDsK
IH0KIAotQ2FjaGVkUmVzb3VyY2UqIENhY2hlOjpyZXF1ZXN0UmVzb3VyY2UoRG9jTG9hZGVyKiBk
b2NMb2FkZXIsIENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiBjaGFyc2V0LCBib29sIHJlcXVlc3RJc1ByZWxvYWQpCitDYWNoZWRSZXNvdXJj
ZSogQ2FjaGU6OnJlcXVlc3RSZXNvdXJjZShEb2NMb2FkZXIqIGRvY0xvYWRlciwgUmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6VHlwZSB0eXBlLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hh
cnNldCwgYm9vbCByZXF1ZXN0SXNQcmVsb2FkKQogewogICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFs
bHkgbmVlZCB0byBzcGVjaWFsLWNhc2UgYW4gZW1wdHkgVVJMPwogICAgIC8vIFdvdWxkIGl0IGJl
IGJldHRlciB0byBqdXN0IGdvIG9uIHdpdGggdGhlIGNhY2hlIGNvZGUgYW5kIGxldCBpdCBmYWls
IGxhdGVyPwpAQCAtMTUzLDcgKzE1Myw3IEBAIENhY2hlZENTU1N0eWxlU2hlZXQqIENhY2hlOjpy
ZXF1ZXN0VXNlckMKIHsKICAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KiB1c2VyU2hlZXQ7CiAgICAg
aWYgKENhY2hlZFJlc291cmNlKiBleGlzdGluZyA9IHJlc291cmNlRm9yVVJMKHVybCkpIHsKLSAg
ICAgICAgaWYgKGV4aXN0aW5nLT50eXBlKCkgIT0gQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hl
ZXQpCisgICAgICAgIGlmIChleGlzdGluZy0+dHlwZSgpICE9IFJlc291cmNlUmVxdWVzdEJhc2U6
OkNTU1N0eWxlU2hlZXQpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgdXNlclNoZWV0
ID0gc3RhdGljX2Nhc3Q8Q2FjaGVkQ1NTU3R5bGVTaGVldCo+KGV4aXN0aW5nKTsKICAgICB9IGVs
c2UgewpAQCAtNjU4LDI1ICs2NTgsMjUgQEAgQ2FjaGU6OlN0YXRpc3RpY3MgQ2FjaGU6OmdldFN0
YXRpc3RpY3MoKQogICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGkgPSBtX3Jl
c291cmNlcy5iZWdpbigpOyBpICE9IGU7ICsraSkgewogICAgICAgICBDYWNoZWRSZXNvdXJjZSog
cmVzb3VyY2UgPSBpLT5zZWNvbmQ7CiAgICAgICAgIHN3aXRjaCAocmVzb3VyY2UtPnR5cGUoKSkg
ewotICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgorICAgICAgICBj
YXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OkltYWdlUmVzb3VyY2U6CiAgICAgICAgICAgICBzdGF0
cy5pbWFnZXMuYWRkUmVzb3VyY2UocmVzb3VyY2UpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6CisgICAgICAgIGNhc2UgUmVz
b3VyY2VSZXF1ZXN0QmFzZTo6Q1NTU3R5bGVTaGVldDoKICAgICAgICAgICAgIHN0YXRzLmNzc1N0
eWxlU2hlZXRzLmFkZFJlc291cmNlKHJlc291cmNlKTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6CisgICAgICAgIGNhc2UgUmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6U2NyaXB0OgogICAgICAgICAgICAgc3RhdHMuc2NyaXB0cy5hZGRSZXNvdXJj
ZShyZXNvdXJjZSk7CiAgICAgICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoWFNMVCkKLSAgICAg
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKKyAgICAgICAgY2FzZSBSZXNv
dXJjZVJlcXVlc3RCYXNlOjpYU0xTdHlsZVNoZWV0OgogICAgICAgICAgICAgc3RhdHMueHNsU3R5
bGVTaGVldHMuYWRkUmVzb3VyY2UocmVzb3VyY2UpOwogICAgICAgICAgICAgYnJlYWs7CiAjZW5k
aWYKLSAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgorICAgICAgICBj
YXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OkZvbnRSZXNvdXJjZToKICAgICAgICAgICAgIHN0YXRz
LmZvbnRzLmFkZFJlc291cmNlKHJlc291cmNlKTsKICAgICAgICAgICAgIGJyZWFrOwogI2lmIEVO
QUJMRShYQkwpCi0gICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhCTDoKKyAgICAgICAgY2Fz
ZSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpYQkw6CiAgICAgICAgICAgICBzdGF0cy54YmxEb2NzLmFk
ZFJlc291cmNlKHJlc291cmNlKQogICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL0NhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGUu
aAkocmV2aXNpb24gNDcyOTMpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFJlcXVlc3QgcmVzb3VyY2Vz
IGZyb20gdGhlIGNhY2hlLiAgQSBsb2FkIHdpbGwgYmUgaW5pdGlhdGVkIGFuZCBhIGNhY2hlIG9i
amVjdCBjcmVhdGVkIGlmIHRoZSBvYmplY3QgaXMgbm90CiAgICAgLy8gZm91bmQgaW4gdGhlIGNh
Y2hlLgotICAgIENhY2hlZFJlc291cmNlKiByZXF1ZXN0UmVzb3VyY2UoRG9jTG9hZGVyKiwgQ2Fj
aGVkUmVzb3VyY2U6OlR5cGUsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0
LCBib29sIGlzUHJlbG9hZCA9IGZhbHNlKTsKKyAgICBDYWNoZWRSZXNvdXJjZSogcmVxdWVzdFJl
c291cmNlKERvY0xvYWRlciosIFJlc291cmNlUmVxdWVzdEJhc2U6OlR5cGUsIGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBib29sIGlzUHJlbG9hZCA9IGZhbHNlKTsKIAog
ICAgIENhY2hlZENTU1N0eWxlU2hlZXQqIHJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVldChEb2NMb2Fk
ZXIqLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKICAgICAKSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiA0NzI5MykK
KysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw3ICszNyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENhY2hlZENTU1N0eWxl
U2hlZXQ6OkNhY2hlZENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgY2hhcnNldCkKLSAgICA6IENhY2hlZFJlc291cmNlKHVybCwgQ1NTU3R5bGVTaGVldCkKKyAg
ICA6IENhY2hlZFJlc291cmNlKHVybCwgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Q1NTU3R5bGVTaGVl
dCkKICAgICAsIG1fZGVjb2RlcihUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQvY3Nz
IiwgY2hhcnNldCkpCiB7CiAgICAgLy8gUHJlZmVyIHRleHQvY3NzIGJ1dCBhY2NlcHQgYW55IHR5
cGUgKGRlbGwuY29tIHNlcnZlcyBhIHN0eWxlc2hlZXQKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0Nh
Y2hlZEZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3Bw
CShyZXZpc2lvbiA0NzI5MykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENhY2hl
ZEZvbnQ6OkNhY2hlZEZvbnQoY29uc3QgU3RyaW5nICZ1cmwpCi0gICAgOiBDYWNoZWRSZXNvdXJj
ZSh1cmwsIEZvbnRSZXNvdXJjZSkKKyAgICA6IENhY2hlZFJlc291cmNlKHVybCwgUmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6Rm9udFJlc291cmNlKQogICAgICwgbV9mb250RGF0YSgwKQogICAgICwgbV9s
b2FkSW5pdGlhdGVkKGZhbHNlKQogI2lmIEVOQUJMRShTVkdfRk9OVFMpCkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9DYWNoZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2Fj
aGVkSW1hZ2UuY3BwCShyZXZpc2lvbiA0NzI5MykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZElt
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCB1c2luZyBzdGQ6Om1heDsK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ2FjaGVkSW1hZ2U6OkNhY2hlZEltYWdlKGNvbnN0IFN0
cmluZyYgdXJsKQotICAgIDogQ2FjaGVkUmVzb3VyY2UodXJsLCBJbWFnZVJlc291cmNlKQorICAg
IDogQ2FjaGVkUmVzb3VyY2UodXJsLCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpJbWFnZVJlc291cmNl
KQogICAgICwgbV9pbWFnZSgwKQogICAgICwgbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXIodGhp
cywgJkNhY2hlZEltYWdlOjpkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZCkKICAgICAsIG1f
aHR0cFN0YXR1c0NvZGVFcnJvck9jY3VycmVkKGZhbHNlKQpAQCAtNTksNyArNTksNyBAQCBDYWNo
ZWRJbWFnZTo6Q2FjaGVkSW1hZ2UoY29uc3QgU3RyaW5nJiB1CiB9CiAKIENhY2hlZEltYWdlOjpD
YWNoZWRJbWFnZShJbWFnZSogaW1hZ2UpCi0gICAgOiBDYWNoZWRSZXNvdXJjZShTdHJpbmcoKSwg
SW1hZ2VSZXNvdXJjZSkKKyAgICA6IENhY2hlZFJlc291cmNlKFN0cmluZygpLCBSZXNvdXJjZVJl
cXVlc3RCYXNlOjpJbWFnZVJlc291cmNlKQogICAgICwgbV9pbWFnZShpbWFnZSkKICAgICAsIG1f
ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyKHRoaXMsICZDYWNoZWRJbWFnZTo6ZGVjb2RlZERhdGFE
ZWxldGlvblRpbWVyRmlyZWQpCiAgICAgLCBtX2h0dHBTdGF0dXNDb2RlRXJyb3JPY2N1cnJlZChm
YWxzZSkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDQ3MjkzKQor
KysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBSZWZDb3VudGVkTGVha0Nv
dW50ZXIgY2FjaGVkUmVzb3VyY2VMZWFrQ291bnRlcigiQ2FjaGVkUmVzb3VyY2UiKTsKICNlbmRp
ZgogCi1DYWNoZWRSZXNvdXJjZTo6Q2FjaGVkUmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIFR5
cGUgdHlwZSkKK0NhY2hlZFJlc291cmNlOjpDYWNoZWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHVy
bCwgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6VHlwZSB0eXBlKQogICAgIDogbV91cmwodXJsKQogICAg
ICwgbV9yZXNwb25zZVRpbWVzdGFtcChjdXJyZW50VGltZSgpKQogICAgICwgbV9sYXN0RGVjb2Rl
ZEFjY2Vzc1RpbWUoMCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkocmV2aXNpb24gNDcy
OTMpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJDYWNoZVBvbGljeS5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIgogI2luY2x1
ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNs
dWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KQEAgLTQ5LDIwICs1MCw4IEBAIGNsYXNzIFB1cmdl
YWJsZUJ1ZmZlcjsKIGNsYXNzIENhY2hlZFJlc291cmNlIHsKICAgICBmcmllbmQgY2xhc3MgQ2Fj
aGU7CiAgICAgZnJpZW5kIGNsYXNzIEluc3BlY3RvclJlc291cmNlOwotICAgIAorCiBwdWJsaWM6
Ci0gICAgZW51bSBUeXBlIHsKLSAgICAgICAgSW1hZ2VSZXNvdXJjZSwKLSAgICAgICAgQ1NTU3R5
bGVTaGVldCwKLSAgICAgICAgU2NyaXB0LAotICAgICAgICBGb250UmVzb3VyY2UKLSNpZiBFTkFC
TEUoWFNMVCkKLSAgICAgICAgLCBYU0xTdHlsZVNoZWV0Ci0jZW5kaWYKLSNpZiBFTkFCTEUoWEJM
KQotICAgICAgICAsIFhCTAotI2VuZGlmCi0gICAgfTsKIAogICAgIGVudW0gU3RhdHVzIHsKICAg
ICAgICAgTm90Q2FjaGVkLCAgICAvLyB0aGlzIFVSTCBpcyBub3QgY2FjaGVkCkBAIC03Miw3ICs2
MSw3IEBAIHB1YmxpYzoKICAgICAgICAgQ2FjaGVkICAgICAgICAvLyByZWd1bGFyIGNhc2UKICAg
ICB9OwogCi0gICAgQ2FjaGVkUmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIFR5cGUpOworICAg
IENhY2hlZFJlc291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpU
eXBlIHR5cGUpOwogICAgIHZpcnR1YWwgfkNhY2hlZFJlc291cmNlKCk7CiAgICAgCiAgICAgdmly
dHVhbCB2b2lkIGxvYWQoRG9jTG9hZGVyKiBkb2NMb2FkZXIpICB7IGxvYWQoZG9jTG9hZGVyLCBm
YWxzZSwgZmFsc2UsIHRydWUpOyB9CkBAIC04NSw3ICs3NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgaHR0cFN0YXR1c0NvZGVFcnJvcigpIHsgZXJyb3IoKTsgfSAvLyBJbWFnZXMga2Vl
cCBsb2FkaW5nIGluIHNwaXRlIG9mIEhUVFAgZXJyb3JzIChmb3IgbGVnYWN5IGNvbXBhdCB3aXRo
IDxpbWc+LCBldGMuKS4KIAogICAgIGNvbnN0IFN0cmluZyAmdXJsKCkgY29uc3QgeyByZXR1cm4g
bV91cmw7IH0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBS
ZXNvdXJjZVJlcXVlc3RCYXNlOjpUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
IAogICAgIHZvaWQgYWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7CiAgICAgdm9pZCBy
ZW1vdmVDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKQEAgLTE5OSw3ICsxODgsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOwogICAgIE93blB0cjxQ
dXJnZWFibGVCdWZmZXI+IG1fcHVyZ2VhYmxlRGF0YTsKIAotICAgIFR5cGUgbV90eXBlOworICAg
IFJlc291cmNlUmVxdWVzdEJhc2U6OlR5cGUgbV90eXBlOwogICAgIFN0YXR1cyBtX3N0YXR1czsK
IAogICAgIGJvb2wgbV9lcnJvck9jY3VycmVkOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
U2NyaXB0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRTY3JpcHQuY3Bw
CShyZXZpc2lvbiA0NzI5MykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ2Fj
aGVkU2NyaXB0OjpDYWNoZWRTY3JpcHQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYg
Y2hhcnNldCkKLSAgICA6IENhY2hlZFJlc291cmNlKHVybCwgU2NyaXB0KQorICAgIDogQ2FjaGVk
UmVzb3VyY2UodXJsLCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpTY3JpcHQpCiAgICAgLCBtX2RlY29k
ZXIoVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Iiwg
Y2hhcnNldCkpCiAgICAgLCBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lcih0aGlzLCAmQ2FjaGVk
U2NyaXB0OjpkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZCkKIHsKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL0RvY0xvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jTG9h
ZGVyLmNwcAkocmV2aXNpb24gNDcyOTMpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBEb2NMb2FkZXI6OmNoZWNr
Rm9yUmVsb2FkKGNvbnN0IEtVUgogCiBDYWNoZWRJbWFnZSogRG9jTG9hZGVyOjpyZXF1ZXN0SW1h
Z2UoY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgQ2FjaGVkSW1hZ2UqIHJlc291cmNlID0gc3Rh
dGljX2Nhc3Q8Q2FjaGVkSW1hZ2UqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6Oklt
YWdlUmVzb3VyY2UsIHVybCwgU3RyaW5nKCkpKTsKKyAgICBDYWNoZWRJbWFnZSogcmVzb3VyY2Ug
PSBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZSo+KHJlcXVlc3RSZXNvdXJjZShSZXNvdXJjZVJlcXVl
c3RCYXNlOjpJbWFnZVJlc291cmNlLCB1cmwsIFN0cmluZygpKSk7CiAgICAgaWYgKGF1dG9Mb2Fk
SW1hZ2VzKCkgJiYgcmVzb3VyY2UgJiYgcmVzb3VyY2UtPnN0aWxsTmVlZHNMb2FkKCkpIHsKICAg
ICAgICAgcmVzb3VyY2UtPnNldExvYWRpbmcodHJ1ZSk7CiAgICAgICAgIGNhY2hlKCktPmxvYWRl
cigpLT5sb2FkKHRoaXMsIHJlc291cmNlLCB0cnVlKTsKQEAgLTEzMCwxMiArMTMwLDEyIEBAIENh
Y2hlZEltYWdlKiBEb2NMb2FkZXI6OnJlcXVlc3RJbWFnZShjb24KIAogQ2FjaGVkRm9udCogRG9j
TG9hZGVyOjpyZXF1ZXN0Rm9udChjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q2FjaGVkRm9udCo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6Rm9u
dFJlc291cmNlLCB1cmwsIFN0cmluZygpKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhY2hl
ZEZvbnQqPihyZXF1ZXN0UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Rm9udFJlc291cmNl
LCB1cmwsIFN0cmluZygpKSk7CiB9CiAKIENhY2hlZENTU1N0eWxlU2hlZXQqIERvY0xvYWRlcjo6
cmVxdWVzdENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hh
cnNldCkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkQ1NTU3R5bGVTaGVldCo+KHJl
cXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCwgdXJsLCBjaGFyc2V0
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhY2hlZENTU1N0eWxlU2hlZXQqPihyZXF1ZXN0
UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Q1NTU3R5bGVTaGVldCwgdXJsLCBjaGFyc2V0
KSk7CiB9CiAKIENhY2hlZENTU1N0eWxlU2hlZXQqIERvY0xvYWRlcjo6cmVxdWVzdFVzZXJDU1NT
dHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCkBAIC0x
NDUsNDEgKzE0NSw0MSBAQCBDYWNoZWRDU1NTdHlsZVNoZWV0KiBEb2NMb2FkZXI6OnJlcXVlc3RV
CiAKIENhY2hlZFNjcmlwdCogRG9jTG9hZGVyOjpyZXF1ZXN0U2NyaXB0KGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENh
Y2hlZFNjcmlwdCo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6U2NyaXB0LCB1cmws
IGNoYXJzZXQpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkU2NyaXB0Kj4ocmVxdWVz
dFJlc291cmNlKFJlc291cmNlUmVxdWVzdEJhc2U6OlNjcmlwdCwgdXJsLCBjaGFyc2V0KSk7CiB9
CiAKICNpZiBFTkFCTEUoWFNMVCkKIENhY2hlZFhTTFN0eWxlU2hlZXQqIERvY0xvYWRlcjo6cmVx
dWVzdFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PENhY2hlZFhTTFN0eWxlU2hlZXQqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3Vy
Y2U6OlhTTFN0eWxlU2hlZXQsIHVybCwgU3RyaW5nKCkpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Q2FjaGVkWFNMU3R5bGVTaGVldCo+KHJlcXVlc3RSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3RC
YXNlOjpYU0xTdHlsZVNoZWV0LCB1cmwsIFN0cmluZygpKSk7CiB9CiAjZW5kaWYKIAogI2lmIEVO
QUJMRShYQkwpCiBDYWNoZWRYQkxEb2N1bWVudCogRG9jTG9hZGVyOjpyZXF1ZXN0WEJMRG9jdW1l
bnQoY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhY2hlZFhT
TFN0eWxlU2hlZXQqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlhCTCwgdXJsLCBT
dHJpbmcoKSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWNoZWRYU0xTdHlsZVNoZWV0Kj4o
cmVxdWVzdFJlc291cmNlKFJlc291cmNlUmVxdWVzdEJhc2U6OlhCTCwgdXJsLCBTdHJpbmcoKSkp
OwogfQogI2VuZGlmCiAKLWJvb2wgRG9jTG9hZGVyOjpjYW5SZXF1ZXN0KENhY2hlZFJlc291cmNl
OjpUeXBlIHR5cGUsIGNvbnN0IEtVUkwmIHVybCkKK2Jvb2wgRG9jTG9hZGVyOjpjYW5SZXF1ZXN0
KFJlc291cmNlUmVxdWVzdEJhc2U6OlR5cGUgdHlwZSwgY29uc3QgS1VSTCYgdXJsKQogewogICAg
IC8vIFNvbWUgdHlwZXMgb2YgcmVzb3VyY2VzIGNhbiBiZSBsb2FkZWQgb25seSBmcm9tIHRoZSBz
YW1lIG9yaWdpbi4gIE90aGVyCiAgICAgLy8gdHlwZXMgb2YgcmVzb3VyY2VzLCBsaWtlIEltYWdl
cywgU2NyaXB0cywgYW5kIENTUywgY2FuIGJlIGxvYWRlZCBmcm9tCiAgICAgLy8gYW55IFVSTC4K
ICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291
cmNlOgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6Ci0gICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6U2NyaXB0OgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNv
dXJjZToKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OkltYWdlUmVzb3VyY2U6CisgICAg
Y2FzZSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpDU1NTdHlsZVNoZWV0OgorICAgIGNhc2UgUmVzb3Vy
Y2VSZXF1ZXN0QmFzZTo6U2NyaXB0OgorICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Rm9u
dFJlc291cmNlOgogICAgICAgICAvLyBUaGVzZSB0eXBlcyBvZiByZXNvdXJjZXMgY2FuIGJlIGxv
YWRlZCBmcm9tIGFueSBvcmlnaW4uCiAgICAgICAgIC8vIEZJWE1FOiBBcmUgd2Ugc3VyZSBhYm91
dCBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlPwogICAgICAgICBicmVhazsKICNpZiBFTkFC
TEUoWFNMVCkKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgorICAgIGNh
c2UgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6WFNMU3R5bGVTaGVldDoKICNlbmRpZgogI2lmIEVOQUJM
RShYQkwpCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WEJMOgorICAgIGNhc2UgUmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6WEJMOgogI2VuZGlmCiAjaWYgRU5BQkxFKFhTTFQpIHx8IEVOQUJMRShYQkwp
CiAgICAgICAgIGlmICghbV9kb2MtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKSkg
ewpAQCAtMTk1LDcgKzE5NSw3IEBAIGJvb2wgRG9jTG9hZGVyOjpjYW5SZXF1ZXN0KENhY2hlZFJl
c291cmMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQ2FjaGVkUmVzb3VyY2UqIERvY0xvYWRlcjo6
cmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIGJvb2wgaXNQcmVsb2FkKQorQ2FjaGVkUmVzb3Vy
Y2UqIERvY0xvYWRlcjo6cmVxdWVzdFJlc291cmNlKFJlc291cmNlUmVxdWVzdEJhc2U6OlR5cGUg
dHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgYm9vbCBpc1By
ZWxvYWQpCiB7CiAgICAgS1VSTCBmdWxsVVJMID0gbV9kb2MtPmNvbXBsZXRlVVJMKHVybCk7CiAK
QEAgLTI2Myw3ICsyNjMsNyBAQCB2b2lkIERvY0xvYWRlcjo6c2V0QXV0b0xvYWRJbWFnZXMoYm9v
bCBlCiAgICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9kb2N1bWVudFJl
c291cmNlcy5lbmQoKTsKICAgICBmb3IgKERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9kb2N1bWVudFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKLSAgICAgICAg
aWYgKHJlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UpIHsK
KyAgICAgICAgaWYgKHJlc291cmNlLT50eXBlKCkgPT0gUmVzb3VyY2VSZXF1ZXN0QmFzZTo6SW1h
Z2VSZXNvdXJjZSkgewogICAgICAgICAgICAgQ2FjaGVkSW1hZ2UqIGltYWdlID0gY29uc3RfY2Fz
dDxDYWNoZWRJbWFnZSo+KHN0YXRpY19jYXN0PGNvbnN0IENhY2hlZEltYWdlKj4ocmVzb3VyY2Up
KTsKIAogICAgICAgICAgICAgaWYgKGltYWdlLT5zdGlsbE5lZWRzTG9hZCgpKQpAQCAtMzMyLDEw
ICszMzIsMTAgQEAgaW50IERvY0xvYWRlcjo6cmVxdWVzdENvdW50KCkKICAgICByZXR1cm4gbV9y
ZXF1ZXN0Q291bnQ7CiB9CiAgICAgCi12b2lkIERvY0xvYWRlcjo6cHJlbG9hZChDYWNoZWRSZXNv
dXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0
LCBib29sIHJlZmVyZW5jZWRGcm9tQm9keSkKK3ZvaWQgRG9jTG9hZGVyOjpwcmVsb2FkKFJlc291
cmNlUmVxdWVzdEJhc2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgY2hhcnNldCwgYm9vbCByZWZlcmVuY2VkRnJvbUJvZHkpCiB7CiAgICAgYm9vbCBoYXNSZW5k
ZXJpbmcgPSBtX2RvYy0+Ym9keSgpICYmIG1fZG9jLT5ib2R5KCktPnJlbmRlcmVyKCk7Ci0gICAg
aWYgKCFoYXNSZW5kZXJpbmcgJiYgKHJlZmVyZW5jZWRGcm9tQm9keSB8fCB0eXBlID09IENhY2hl
ZFJlc291cmNlOjpJbWFnZVJlc291cmNlKSkgeworICAgIGlmICghaGFzUmVuZGVyaW5nICYmIChy
ZWZlcmVuY2VkRnJvbUJvZHkgfHwgdHlwZSA9PSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpJbWFnZVJl
c291cmNlKSkgewogICAgICAgICAvLyBEb24ndCBwcmVsb2FkIGltYWdlcyBvciBib2R5IHJlc291
cmNlcyBiZWZvcmUgd2UgaGF2ZSBzb21ldGhpbmcgdG8gZHJhdy4gVGhpcyBwcmV2ZW50cwogICAg
ICAgICAvLyBwcmVsb2FkcyBmcm9tIGJvZHkgZGVsYXlpbmcgZmlyc3QgZGlzcGxheSB3aGVuIGJh
bmR3aWR0aCBpcyBsaW1pdGVkLgogICAgICAgICBQZW5kaW5nUHJlbG9hZCBwZW5kaW5nUHJlbG9h
ZCA9IHsgdHlwZSwgdXJsLCBjaGFyc2V0IH07CkBAIC0zNTksMTAgKzM1OSwxMCBAQCB2b2lkIERv
Y0xvYWRlcjo6Y2hlY2tGb3JQZW5kaW5nUHJlbG9hZHMoCiAgICAgbV9wZW5kaW5nUHJlbG9hZHMu
Y2xlYXIoKTsKIH0KIAotdm9pZCBEb2NMb2FkZXI6OnJlcXVlc3RQcmVsb2FkKENhY2hlZFJlc291
cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQp
Cit2b2lkIERvY0xvYWRlcjo6cmVxdWVzdFByZWxvYWQoUmVzb3VyY2VSZXF1ZXN0QmFzZTo6VHlw
ZSB0eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQogewogICAg
IFN0cmluZyBlbmNvZGluZzsKLSAgICBpZiAodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0
IHx8IHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQpCisgICAgaWYgKHR5cGUg
PT0gUmVzb3VyY2VSZXF1ZXN0QmFzZTo6U2NyaXB0IHx8IHR5cGUgPT0gUmVzb3VyY2VSZXF1ZXN0
QmFzZTo6Q1NTU3R5bGVTaGVldCkKICAgICAgICAgZW5jb2RpbmcgPSBjaGFyc2V0LmlzRW1wdHko
KSA/IG1fZG9jLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKSA6IGNoYXJzZXQ7CiAKICAg
ICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSByZXF1ZXN0UmVzb3VyY2UodHlwZSwgdXJsLCBl
bmNvZGluZywgdHJ1ZSk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuaAkocmV2aXNpb24gNDcyOTMpCisrKyBX
ZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTgsMTcgKzk4LDE3
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGNsZWFyUHJlbG9hZHMoKTsKICAgICB2b2lkIGNs
ZWFyUGVuZGluZ1ByZWxvYWRzKCk7Ci0gICAgdm9pZCBwcmVsb2FkKENhY2hlZFJlc291cmNlOjpU
eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBib29sIHJlZmVy
ZW5jZWRGcm9tQm9keSk7CisgICAgdm9pZCBwcmVsb2FkKFJlc291cmNlUmVxdWVzdEJhc2U6OlR5
cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIGJvb2wgcmVmZXJl
bmNlZEZyb21Cb2R5KTsKICAgICB2b2lkIGNoZWNrRm9yUGVuZGluZ1ByZWxvYWRzKCk7CiAgICAg
dm9pZCBwcmludFByZWxvYWRTdGF0cygpOwogICAgIAogcHJpdmF0ZToKLSAgICBDYWNoZWRSZXNv
dXJjZSogcmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlLCBjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBib29sIGlzUHJlbG9hZCA9IGZhbHNlKTsKLSAg
ICB2b2lkIHJlcXVlc3RQcmVsb2FkKENhY2hlZFJlc291cmNlOjpUeXBlLCBjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKKyAgICBDYWNoZWRSZXNvdXJjZSogcmVxdWVz
dFJlc291cmNlKFJlc291cmNlUmVxdWVzdEJhc2U6OlR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBj
b25zdCBTdHJpbmcmIGNoYXJzZXQsIGJvb2wgaXNQcmVsb2FkID0gZmFsc2UpOworICAgIHZvaWQg
cmVxdWVzdFByZWxvYWQoUmVzb3VyY2VSZXF1ZXN0QmFzZTo6VHlwZSwgY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCk7CiAKICAgICB2b2lkIGNoZWNrRm9yUmVsb2FkKGNv
bnN0IEtVUkwmKTsKICAgICB2b2lkIGNoZWNrQ2FjaGVPYmplY3RTdGF0dXMoQ2FjaGVkUmVzb3Vy
Y2UqKTsKLSAgICBib29sIGNhblJlcXVlc3QoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIGNvbnN0IEtV
UkwmKTsKKyAgICBib29sIGNhblJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0QmFzZTo6VHlwZSwgY29u
c3QgS1VSTCYpOwogICAgIAogICAgIENhY2hlKiBtX2NhY2hlOwogICAgIEhhc2hTZXQ8U3RyaW5n
PiBtX3JlbG9hZGVkVVJMczsKQEAgLTExOSw3ICsxMTksNyBAQCBwcml2YXRlOgogICAgIAogICAg
IExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj4gbV9wcmVsb2FkczsKICAgICBzdHJ1Y3QgUGVu
ZGluZ1ByZWxvYWQgewotICAgICAgICBDYWNoZWRSZXNvdXJjZTo6VHlwZSBtX3R5cGU7CisgICAg
ICAgIFJlc291cmNlUmVxdWVzdEJhc2U6OlR5cGUgbV90eXBlOwogICAgICAgICBTdHJpbmcgbV91
cmw7CiAgICAgICAgIFN0cmluZyBtX2NoYXJzZXQ7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL2xvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAko
cmV2aXNpb24gNDcyOTMpCisrKyBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MywxOCArNzMsMTggQEAgTG9hZGVyOjpQcmlvcml0eSBMb2FkZXI6OmRldGVybWlu
ZVByaW9yaQogewogI2lmIFJFUVVFU1RfTUFOQUdFTUVOVF9FTkFCTEVECiAgICAgc3dpdGNoIChy
ZXNvdXJjZS0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxl
U2hlZXQ6CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpDU1NTdHlsZVNoZWV0OgogI2lm
IEVOQUJMRShYU0xUKQotICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0
OgorICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6WFNMU3R5bGVTaGVldDoKICNlbmRpZgog
I2lmIEVOQUJMRShYQkwpCi0gICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhCTDoKKyAgICBj
YXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OlhCTDoKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJu
IEhpZ2g7Ci0gICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDogCi0gICAgICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZToKKyAgICBjYXNlIFJlc291cmNlUmVxdWVz
dEJhc2U6OlNjcmlwdDoKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OkZvbnRSZXNvdXJj
ZToKICAgICAgICAgICAgIHJldHVybiBNZWRpdW07Ci0gICAgICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6OkltYWdlUmVzb3VyY2U6CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpJbWFnZVJl
c291cmNlOgogICAgICAgICAgICAgcmV0dXJuIExvdzsKICAgICB9CiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC0yOTksNyArMjk5LDggQEAgdm9pZCBMb2FkZXI6Okhvc3Q6OnNlcnZlUGVu
ZGluZ1JlcXVlc3RzKAogICAgICAgICByZXF1ZXN0c1BlbmRpbmcucmVtb3ZlRmlyc3QoKTsKICAg
ICAgICAgCiAgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXNvdXJjZVJlcXVlc3QocmVxdWVzdC0+
Y2FjaGVkUmVzb3VyY2UoKS0+dXJsKCkpOwotICAgICAgICAKKyAgICAgICAgcmVzb3VyY2VSZXF1
ZXN0LnNldFJlc291cmNlVHlwZShyZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpLT50eXBlKCkpOwor
CiAgICAgICAgIGlmICghcmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2UoKS0+YWNjZXB0KCkuaXNFbXB0
eSgpKQogICAgICAgICAgICAgcmVzb3VyY2VSZXF1ZXN0LnNldEhUVFBBY2NlcHQocmVxdWVzdC0+
Y2FjaGVkUmVzb3VyY2UoKS0+YWNjZXB0KCkpOwogICAgICAgICAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkocmV2aXNpb24gNDcyOTMp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw2ICs1MiwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8g
RG8gbm90IHVzZSB0aGlzIHR5cGUgZGlyZWN0bHkuICBVc2UgUmVzb3VyY2VSZXF1ZXN0IGluc3Rl
YWQuCiAgICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0QmFzZSB7CiAgICAgcHVibGljOgorICAgICAg
ICBlbnVtIFR5cGUgeworICAgICAgICAgICAgR2VuZXJpYywKKyAgICAgICAgICAgIEltYWdlUmVz
b3VyY2UsCisgICAgICAgICAgICBDU1NTdHlsZVNoZWV0LAorICAgICAgICAgICAgU2NyaXB0LAor
ICAgICAgICAgICAgRm9udFJlc291cmNlCisjaWYgRU5BQkxFKFhTTFQpCisgICAgICAgICAgICAs
IFhTTFN0eWxlU2hlZXQKKyNlbmRpZgorI2lmIEVOQUJMRShYQkwpCisgICAgICAgICAgICAsIFhC
TAorI2VuZGlmCisgICAgICAgIH07CisKICAgICAgICAgc3RhdGljIHN0ZDo6YXV0b19wdHI8UmVz
b3VyY2VSZXF1ZXN0PiBhZG9wdChzdGQ6OmF1dG9fcHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1
ZXN0RGF0YT4pOwogCiAgICAgICAgIC8vIEdldHMgYSBjb3B5IG9mIHRoZSBkYXRhIHN1aXRhYmxl
IGZvciBwYXNzaW5nIHRvIGFub3RoZXIgdGhyZWFkLgpAQCAtNjMsNiArNzcsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0OwogICAgICAgICB2
b2lkIHNldFVSTChjb25zdCBLVVJMJiB1cmwpOwogCisgICAgICAgIFJlc291cmNlUmVxdWVzdEJh
c2U6OlR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVR5cGU7IH0K
KwogICAgICAgICB2b2lkIHJlbW92ZUNyZWRlbnRpYWxzKCk7CiAKICAgICAgICAgUmVzb3VyY2VS
ZXF1ZXN0Q2FjaGVQb2xpY3kgY2FjaGVQb2xpY3koKSBjb25zdDsKQEAgLTExNSwxMiArMTMxLDE1
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCByZXBvcnRVcGxvYWRQcm9ncmVz
cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwb3J0VXBsb2FkUHJvZ3Jlc3M7IH0KICAgICAgICAgdm9p
ZCBzZXRSZXBvcnRVcGxvYWRQcm9ncmVzcyhib29sIHJlcG9ydFVwbG9hZFByb2dyZXNzKSB7IG1f
cmVwb3J0VXBsb2FkUHJvZ3Jlc3MgPSByZXBvcnRVcGxvYWRQcm9ncmVzczsgfQogCisgICAgICAg
IHZvaWQgc2V0UmVzb3VyY2VUeXBlKFJlc291cmNlUmVxdWVzdEJhc2U6OlR5cGUgdHlwZSkgeyBt
X3Jlc291cmNlVHlwZSA9IHR5cGU7IH0KKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgLy8gVXNl
ZCB3aGVuIFJlc291cmNlUmVxdWVzdCBpcyBpbml0aWFsaXplZCBmcm9tIGEgcGxhdGZvcm0gcmVw
cmVzZW50YXRpb24gb2YgdGhlIHJlcXVlc3QKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0QmFzZSgp
CiAgICAgICAgICAgICA6IG1fcmVzb3VyY2VSZXF1ZXN0VXBkYXRlZChmYWxzZSkKICAgICAgICAg
ICAgICwgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkKHRydWUpCiAgICAgICAgICAgICAsIG1fcmVw
b3J0VXBsb2FkUHJvZ3Jlc3MoZmFsc2UpCisgICAgICAgICAgICAsIG1fcmVzb3VyY2VUeXBlKEdl
bmVyaWMpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0xMzMsNiArMTUyLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX3Jlc291cmNlUmVxdWVzdFVwZGF0ZWQodHJ1
ZSkKICAgICAgICAgICAgICwgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkKGZhbHNlKQogICAgICAg
ICAgICAgLCBtX3JlcG9ydFVwbG9hZFByb2dyZXNzKGZhbHNlKQorICAgICAgICAgICAgLCBtX3Jl
c291cmNlVHlwZShHZW5lcmljKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMTUyLDYgKzE3
Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgbXV0YWJsZSBib29sIG1fcmVzb3Vy
Y2VSZXF1ZXN0VXBkYXRlZDsKICAgICAgICAgbXV0YWJsZSBib29sIG1fcGxhdGZvcm1SZXF1ZXN0
VXBkYXRlZDsKICAgICAgICAgYm9vbCBtX3JlcG9ydFVwbG9hZFByb2dyZXNzOworICAgICAgICBS
ZXNvdXJjZVJlcXVlc3RCYXNlOjpUeXBlIG1fcmVzb3VyY2VUeXBlOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBhc1Jlc291cmNlUmVxdWVzdCgpIGNvbnN0
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1
ZXN0UXQuY3BwCShyZXZpc2lvbiA0NzI5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9x
dC9SZXNvdXJjZVJlcXVlc3RRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDIyIEBA
IFFOZXR3b3JrUmVxdWVzdCBSZXNvdXJjZVJlcXVlc3Q6OnRvTmV0d28KICAgICAgICAgcmVxdWVz
dC5zZXRSYXdIZWFkZXIobmFtZSwgdmFsdWUpOwogICAgIH0KIAorICAgIHN3aXRjaCAocmVzb3Vy
Y2VUeXBlKCkpIHsKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OkltYWdlUmVzb3VyY2Ug
OgorICAgICAgICByZXF1ZXN0LnNldEF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6OlJlc291cmNl
VHlwZUF0dHJpYnV0ZSwgUVZhcmlhbnQoMSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJl
c291cmNlUmVxdWVzdEJhc2U6OkNTU1N0eWxlU2hlZXQgOgorICAgICAgICByZXF1ZXN0LnNldEF0
dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6OlJlc291cmNlVHlwZUF0dHJpYnV0ZSwgUVZhcmlhbnQo
MikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OlNjcmlw
dCA6CisgICAgICAgIHJlcXVlc3Quc2V0QXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6UmVzb3Vy
Y2VUeXBlQXR0cmlidXRlLCBRVmFyaWFudCgzKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UmVzb3VyY2VSZXF1ZXN0QmFzZTo6R2VuZXJpYyA6CisgICAgZGVmYXVsdCA6CisgICAgICAgIHJl
cXVlc3Quc2V0QXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6UmVzb3VyY2VUeXBlQXR0cmlidXRl
LCBRVmFyaWFudCgwKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIHN3aXRjaCAoY2Fj
aGVQb2xpY3koKSkgewogICAgIGNhc2UgUmVsb2FkSWdub3JpbmdDYWNoZURhdGE6CiAgICAgICAg
IHJlcXVlc3Quc2V0QXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6Q2FjaGVMb2FkQ29udHJvbEF0
dHJpYnV0ZSwgUU5ldHdvcmtSZXF1ZXN0OjpBbHdheXNOZXR3b3JrKTsK
</data>
<flag name="review"
          id="19074"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39527</attachid>
            <date>2009-09-13 17:02:03 -0700</date>
            <delta_ts>2010-06-10 19:46:56 -0700</delta_ts>
            <desc>patch implementing the base functionality</desc>
            <filename>resource-type.patch</filename>
            <type>text/plain</type>
            <size>27029</size>
            <attacher name="Zsombor">gzsombor</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODM0MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjMgQEAKKzIwMDktMDktMTMgIFpzb21ib3IgR2VnZXN5ICA8Z3pzb21ib3JAZ21h
aWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFBhc3MgdGhlIHJlc291cmNlIHR5cGUgaW5mb3JtYXRpb24gdG8gdGhlIG5ldHdvcmsgaGFuZGxl
ciBsYXllciwgdGhpcyBpcyAKKyAgICAgICAgZnVsZmlsbGVkIHdpdGggaW50cm9kdWNpbmcgUmVz
b3VyY2VSZXF1ZXN0QmFzZTo6VHlwZSBlbnVtZXJhdGlvbiwgd2hpY2ggaXMgdXNlZAorICAgICAg
ICBpbiB0aGUgQ2FjaGVkUmVzb3VyY2UgY29kZSwgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgQ2Fj
aGVkUmVzb3VyY2U6OlR5cGUgZW51bS4KKyAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI3Nzg3CisKKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BT
ISkKKworICAgICAgICAqIGNzcy9DU1NJbWFnZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ltYWdlVmFsdWU6OmNhY2hlZEltYWdlKToKKyAgICAgICAgKiBodG1sL1ByZWxvYWRTY2Fu
bmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByZWxvYWRTY2FubmVyOjplbWl0VGFnKToKKyAg
ICAgICAgKFdlYkNvcmU6OlByZWxvYWRTY2FubmVyOjplbWl0Q1NTUnVsZSk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclJlc291cmNlOjp0eXBlKToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnJl
cXVlc3RSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZTo6cmVxdWVzdFVzZXJDU1NT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpnZXRTdGF0aXN0aWNzKToKKyAg
ICAgICAgKiBsb2FkZXIvQ2FjaGUuaDoKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkQ1NTU3R5bGVT
aGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRDU1NTdHlsZVNoZWV0OjpDYWNoZWRD
U1NTdHlsZVNoZWV0KToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkRm9udC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRGb250OjpDYWNoZWRGb250KToKKyAgICAgICAgKiBsb2FkZXIvQ2Fj
aGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OkNhY2hlZEltYWdl
KToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkUmVzb3VyY2U6OkNhY2hlZFJlc291cmNlKToKKyAgICAgICAgKiBsb2FkZXIvQ2Fj
aGVkUmVzb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjp0eXBlKToK
KyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkU2NyaXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
Y2hlZFNjcmlwdDo6Q2FjaGVkU2NyaXB0KToKKyAgICAgICAgKiBsb2FkZXIvRG9jTG9hZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY0xvYWRlcjo6cmVxdWVzdEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY0xvYWRlcjo6cmVxdWVzdEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
TG9hZGVyOjpyZXF1ZXN0Q1NTU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2NMb2Fk
ZXI6OnJlcXVlc3RTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jTG9hZGVyOjpyZXF1ZXN0
WFNMU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2NMb2FkZXI6OnJlcXVlc3RYQkxE
b2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2NMb2FkZXI6OmNhblJlcXVlc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jTG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jTG9hZGVyOjpzZXRBdXRvTG9hZEltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpE
b2NMb2FkZXI6OnByZWxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jTG9hZGVyOjpyZXF1ZXN0
UHJlbG9hZCk6CisgICAgICAgICogbG9hZGVyL0RvY0xvYWRlci5oOgorICAgICAgICAqIGxvYWRl
ci9sb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpkZXRlcm1pbmVQcmlvcml0
eSk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Okhvc3Q6OnNlcnZlUGVuZGluZ1JlcXVlc3Rz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6Oik6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpyZXNvdXJjZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0UmVzb3VyY2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdEJhc2U6OlJlc291cmNlUmVxdWVzdEJhc2UpOgorCiAyMDA5LTA5LTEy
ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgogCiAgICAgICAgIHd4
IGJ1aWxkIGZpeGVzIGZvciB3eCAyLjkuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXF1ZXN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHJldmlzaW9uIDQ4MzQzKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NTIsNiArNTIsMjAgQEAKICAgICAvLyBEbyBub3QgdXNlIHRoaXMgdHlwZSBkaXJlY3RseS4gIFVz
ZSBSZXNvdXJjZVJlcXVlc3QgaW5zdGVhZC4KICAgICBjbGFzcyBSZXNvdXJjZVJlcXVlc3RCYXNl
IHsKICAgICBwdWJsaWM6CisgICAgICAgIGVudW0gVHlwZSB7CisgICAgICAgICAgICBHZW5lcmlj
LAorICAgICAgICAgICAgSW1hZ2VSZXNvdXJjZSwKKyAgICAgICAgICAgIENTU1N0eWxlU2hlZXQs
CisgICAgICAgICAgICBTY3JpcHQsCisgICAgICAgICAgICBGb250UmVzb3VyY2UKKyNpZiBFTkFC
TEUoWFNMVCkKKyAgICAgICAgICAgICwgWFNMU3R5bGVTaGVldAorI2VuZGlmCisjaWYgRU5BQkxF
KFhCTCkKKyAgICAgICAgICAgICwgWEJMCisjZW5kaWYKKyAgICAgICAgfTsKKwogICAgICAgICBz
dGF0aWMgc3RkOjphdXRvX3B0cjxSZXNvdXJjZVJlcXVlc3Q+IGFkb3B0KHN0ZDo6YXV0b19wdHI8
Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPik7CiAKICAgICAgICAgLy8gR2V0cyBhIGNv
cHkgb2YgdGhlIGRhdGEgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gYW5vdGhlciB0aHJlYWQuCkBA
IC02Myw2ICs3Nyw4IEBACiAgICAgICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0OwogICAgICAg
ICB2b2lkIHNldFVSTChjb25zdCBLVVJMJiB1cmwpOwogCisgICAgICAgIFJlc291cmNlUmVxdWVz
dEJhc2U6OlR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVR5cGU7
IH0KKwogICAgICAgICB2b2lkIHJlbW92ZUNyZWRlbnRpYWxzKCk7CiAKICAgICAgICAgUmVzb3Vy
Y2VSZXF1ZXN0Q2FjaGVQb2xpY3kgY2FjaGVQb2xpY3koKSBjb25zdDsKQEAgLTExNSwxMiArMTMx
LDE1IEBACiAgICAgICAgIGJvb2wgcmVwb3J0VXBsb2FkUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVy
biBtX3JlcG9ydFVwbG9hZFByb2dyZXNzOyB9CiAgICAgICAgIHZvaWQgc2V0UmVwb3J0VXBsb2Fk
UHJvZ3Jlc3MoYm9vbCByZXBvcnRVcGxvYWRQcm9ncmVzcykgeyBtX3JlcG9ydFVwbG9hZFByb2dy
ZXNzID0gcmVwb3J0VXBsb2FkUHJvZ3Jlc3M7IH0KIAorICAgICAgICB2b2lkIHNldFJlc291cmNl
VHlwZShSZXNvdXJjZVJlcXVlc3RCYXNlOjpUeXBlIHR5cGUpIHsgbV9yZXNvdXJjZVR5cGUgPSB0
eXBlOyB9CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIC8vIFVzZWQgd2hlbiBSZXNvdXJjZVJl
cXVlc3QgaXMgaW5pdGlhbGl6ZWQgZnJvbSBhIHBsYXRmb3JtIHJlcHJlc2VudGF0aW9uIG9mIHRo
ZSByZXF1ZXN0CiAgICAgICAgIFJlc291cmNlUmVxdWVzdEJhc2UoKQogICAgICAgICAgICAgOiBt
X3Jlc291cmNlUmVxdWVzdFVwZGF0ZWQoZmFsc2UpCiAgICAgICAgICAgICAsIG1fcGxhdGZvcm1S
ZXF1ZXN0VXBkYXRlZCh0cnVlKQogICAgICAgICAgICAgLCBtX3JlcG9ydFVwbG9hZFByb2dyZXNz
KGZhbHNlKQorICAgICAgICAgICAgLCBtX3Jlc291cmNlVHlwZShHZW5lcmljKQogICAgICAgICB7
CiAgICAgICAgIH0KIApAQCAtMTMzLDYgKzE1Miw3IEBACiAgICAgICAgICAgICAsIG1fcmVzb3Vy
Y2VSZXF1ZXN0VXBkYXRlZCh0cnVlKQogICAgICAgICAgICAgLCBtX3BsYXRmb3JtUmVxdWVzdFVw
ZGF0ZWQoZmFsc2UpCiAgICAgICAgICAgICAsIG1fcmVwb3J0VXBsb2FkUHJvZ3Jlc3MoZmFsc2Up
CisgICAgICAgICAgICAsIG1fcmVzb3VyY2VUeXBlKEdlbmVyaWMpCiAgICAgICAgIHsKICAgICAg
ICAgfQogCkBAIC0xNTIsNiArMTcyLDcgQEAKICAgICAgICAgbXV0YWJsZSBib29sIG1fcmVzb3Vy
Y2VSZXF1ZXN0VXBkYXRlZDsKICAgICAgICAgbXV0YWJsZSBib29sIG1fcGxhdGZvcm1SZXF1ZXN0
VXBkYXRlZDsKICAgICAgICAgYm9vbCBtX3JlcG9ydFVwbG9hZFByb2dyZXNzOworICAgICAgICBS
ZXNvdXJjZVJlcXVlc3RCYXNlOjpUeXBlIG1fcmVzb3VyY2VUeXBlOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBhc1Jlc291cmNlUmVxdWVzdCgpIGNvbnN0
OwpJbmRleDogV2ViQ29yZS9odG1sL1ByZWxvYWRTY2FubmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvUHJlbG9hZFNjYW5uZXIuY3BwCShyZXZpc2lvbiA0ODM0MykKKysrIFdlYkNv
cmUvaHRtbC9QcmVsb2FkU2Nhbm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzMiwxMSArODMy
LDExIEBACiAgICAgfQogICAgIAogICAgIGlmICh0YWcgPT0gc2NyaXB0VGFnKQotICAgICAgICBt
X2RvY3VtZW50LT5kb2NMb2FkZXIoKS0+cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6U2NyaXB0LCBt
X3VybFRvTG9hZCwgbV9jaGFyc2V0LCBzY2FubmluZ0JvZHkoKSk7CisgICAgICAgIG1fZG9jdW1l
bnQtPmRvY0xvYWRlcigpLT5wcmVsb2FkKFJlc291cmNlUmVxdWVzdEJhc2U6OlNjcmlwdCwgbV91
cmxUb0xvYWQsIG1fY2hhcnNldCwgc2Nhbm5pbmdCb2R5KCkpOwogICAgIGVsc2UgaWYgKHRhZyA9
PSBpbWdUYWcpIAotICAgICAgICBtX2RvY3VtZW50LT5kb2NMb2FkZXIoKS0+cHJlbG9hZChDYWNo
ZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSwgbV91cmxUb0xvYWQsIFN0cmluZygpLCBzY2Fubmlu
Z0JvZHkoKSk7CisgICAgICAgIG1fZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5wcmVsb2FkKFJlc291
cmNlUmVxdWVzdEJhc2U6OkltYWdlUmVzb3VyY2UsIG1fdXJsVG9Mb2FkLCBTdHJpbmcoKSwgc2Nh
bm5pbmdCb2R5KCkpOwogICAgIGVsc2UgaWYgKHRhZyA9PSBsaW5rVGFnICYmIG1fbGlua0lzU3R5
bGVTaGVldCkgCi0gICAgICAgIG1fZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5wcmVsb2FkKENhY2hl
ZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0LCBtX3VybFRvTG9hZCwgbV9jaGFyc2V0LCBzY2Fubmlu
Z0JvZHkoKSk7CisgICAgICAgIG1fZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5wcmVsb2FkKFJlc291
cmNlUmVxdWVzdEJhc2U6OkNTU1N0eWxlU2hlZXQsIG1fdXJsVG9Mb2FkLCBtX2NoYXJzZXQsIHNj
YW5uaW5nQm9keSgpKTsKIAogICAgIG1fdXJsVG9Mb2FkID0gU3RyaW5nKCk7CiAgICAgbV9jaGFy
c2V0ID0gU3RyaW5nKCk7CkBAIC04NTAsNyArODUwLDcgQEAKICAgICAgICAgU3RyaW5nIHZhbHVl
KG1fY3NzUnVsZVZhbHVlLmRhdGEoKSwgbV9jc3NSdWxlVmFsdWUuc2l6ZSgpKTsKICAgICAgICAg
U3RyaW5nIHVybCA9IGRlcHJlY2F0ZWRQYXJzZVVSTCh2YWx1ZSk7CiAgICAgICAgIGlmICghdXJs
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5wcmVsb2Fk
KENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0LCB1cmwsIFN0cmluZygpLCBzY2FubmluZ0Jv
ZHkoKSk7CisgICAgICAgICAgICBtX2RvY3VtZW50LT5kb2NMb2FkZXIoKS0+cHJlbG9hZChSZXNv
dXJjZVJlcXVlc3RCYXNlOjpDU1NTdHlsZVNoZWV0LCB1cmwsIFN0cmluZygpLCBzY2FubmluZ0Jv
ZHkoKSk7CiAgICAgfQogICAgIG1fY3NzUnVsZS5jbGVhcigpOwogICAgIG1fY3NzUnVsZVZhbHVl
LmNsZWFyKCk7CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwCShy
ZXZpc2lvbiA0ODM0MykKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDE5ICsyMzUsMTcgQEAKICAgICAgICAgcmV0dXJuIE90
aGVyOwogCiAgICAgc3dpdGNoIChjYWNoZWRSZXNvdXJjZS0+dHlwZSgpKSB7Ci0gICAgICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6Ci0gICAgICAgICAgICByZXR1cm4gSW1h
Z2U7Ci0gICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZToKLSAgICAgICAg
ICAgIHJldHVybiBGb250OwotICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNo
ZWV0OgorICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6SW1hZ2VSZXNvdXJjZToKKyAgICAg
ICAgIHJldHVybiBJbWFnZTsKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OkZvbnRSZXNv
dXJjZToKKyAgICAgICAgcmV0dXJuIEZvbnQ7CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RCYXNl
OjpDU1NTdHlsZVNoZWV0OgogI2lmIEVOQUJMRShYU0xUKQotICAgICAgICBjYXNlIENhY2hlZFJl
c291cmNlOjpYU0xTdHlsZVNoZWV0OgorICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6WFNM
U3R5bGVTaGVldDoKICNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIFN0eWxlc2hlZXQ7Ci0gICAg
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKLSAgICAgICAgICAgIHJldHVybiBTY3Jp
cHQ7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gT3RoZXI7CisgICAgICAg
ICByZXR1cm4gU3R5bGVzaGVldDsKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OlNjcmlw
dDoKKyAgICAgICAgIHJldHVybiBTY3JpcHQ7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL2Nz
cy9DU1NJbWFnZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NJbWFnZVZh
bHVlLmNwcAkocmV2aXNpb24gNDgzNDMpCisrKyBXZWJDb3JlL2Nzcy9DU1NJbWFnZVZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgICAgY2FjaGVkSW1h
Z2UgPSBsb2FkZXItPnJlcXVlc3RJbWFnZSh1cmwpOwogICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBTaG91bGQgZmluZCBhIHdheSB0byBtYWtlIHRoZXNlIGltYWdlcyBzaXQg
aW4gdGhlaXIgb3duIG1lbW9yeSBwYXJ0aXRpb24sIHNpbmNlIHRoZXkgYXJlIHVzZXIgYWdlbnQg
aW1hZ2VzLgotICAgICAgICAgICAgY2FjaGVkSW1hZ2UgPSBzdGF0aWNfY2FzdDxDYWNoZWRJbWFn
ZSo+KGNhY2hlKCktPnJlcXVlc3RSZXNvdXJjZSgwLCBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNv
dXJjZSwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCksIFN0cmluZygpKSk7CisgICAgICAgICAg
ICBjYWNoZWRJbWFnZSA9IHN0YXRpY19jYXN0PENhY2hlZEltYWdlKj4oY2FjaGUoKS0+cmVxdWVz
dFJlc291cmNlKDAsIFJlc291cmNlUmVxdWVzdEJhc2U6OkltYWdlUmVzb3VyY2UsIEtVUkwoUGFy
c2VkVVJMU3RyaW5nLCB1cmwpLCBTdHJpbmcoKSkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KGNhY2hlZEltYWdlKSB7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHJldmlzaW9uIDQ4
MzQzKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiQ2FjaGVQb2xpY3kuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdEJhc2UuaCIKICNpbmNs
dWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5j
bHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CkBAIC00OSwyMCArNTAsOCBAQAogY2xhc3MgQ2Fj
aGVkUmVzb3VyY2UgewogICAgIGZyaWVuZCBjbGFzcyBDYWNoZTsKICAgICBmcmllbmQgY2xhc3Mg
SW5zcGVjdG9yUmVzb3VyY2U7Ci0gICAgCisKIHB1YmxpYzoKLSAgICBlbnVtIFR5cGUgewotICAg
ICAgICBJbWFnZVJlc291cmNlLAotICAgICAgICBDU1NTdHlsZVNoZWV0LAotICAgICAgICBTY3Jp
cHQsCi0gICAgICAgIEZvbnRSZXNvdXJjZQotI2lmIEVOQUJMRShYU0xUKQotICAgICAgICAsIFhT
TFN0eWxlU2hlZXQKLSNlbmRpZgotI2lmIEVOQUJMRShYQkwpCi0gICAgICAgICwgWEJMCi0jZW5k
aWYKLSAgICB9OwogCiAgICAgZW51bSBTdGF0dXMgewogICAgICAgICBOb3RDYWNoZWQsICAgIC8v
IHRoaXMgVVJMIGlzIG5vdCBjYWNoZWQKQEAgLTcyLDcgKzYxLDcgQEAKICAgICAgICAgQ2FjaGVk
ICAgICAgICAvLyByZWd1bGFyIGNhc2UKICAgICB9OwogCi0gICAgQ2FjaGVkUmVzb3VyY2UoY29u
c3QgU3RyaW5nJiB1cmwsIFR5cGUpOworICAgIENhY2hlZFJlc291cmNlKGNvbnN0IFN0cmluZyYg
dXJsLCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpUeXBlIHR5cGUpOwogICAgIHZpcnR1YWwgfkNhY2hl
ZFJlc291cmNlKCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGxvYWQoRG9jTG9hZGVyKiBkb2NM
b2FkZXIpICB7IGxvYWQoZG9jTG9hZGVyLCBmYWxzZSwgZmFsc2UsIHRydWUpOyB9CkBAIC04NSw3
ICs3NCw3IEBACiAgICAgdmlydHVhbCB2b2lkIGh0dHBTdGF0dXNDb2RlRXJyb3IoKSB7IGVycm9y
KCk7IH0gLy8gSW1hZ2VzIGtlZXAgbG9hZGluZyBpbiBzcGl0ZSBvZiBIVFRQIGVycm9ycyAoZm9y
IGxlZ2FjeSBjb21wYXQgd2l0aCA8aW1nPiwgZXRjLikuCiAKICAgICBjb25zdCBTdHJpbmcgJnVy
bCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9Ci0gICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlOyB9CisgICAgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6VHlwZSB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlOyB9CiAKICAgICB2b2lkIGFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNs
aWVudCopOwogICAgIHZvaWQgcmVtb3ZlQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7CkBA
IC0xOTksNyArMTg4LDcgQEAKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CiAgICAg
T3duUHRyPFB1cmdlYWJsZUJ1ZmZlcj4gbV9wdXJnZWFibGVEYXRhOwogCi0gICAgVHlwZSBtX3R5
cGU7CisgICAgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6VHlwZSBtX3R5cGU7CiAgICAgU3RhdHVzIG1f
c3RhdHVzOwogCiAgICAgYm9vbCBtX2Vycm9yT2NjdXJyZWQ7CkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9DYWNoZWRTY3JpcHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNj
cmlwdC5jcHAJKHJldmlzaW9uIDQ4MzQzKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBDYWNoZWRTY3JpcHQ6OkNhY2hlZFNjcmlwdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
U3RyaW5nJiBjaGFyc2V0KQotICAgIDogQ2FjaGVkUmVzb3VyY2UodXJsLCBTY3JpcHQpCisgICAg
OiBDYWNoZWRSZXNvdXJjZSh1cmwsIFJlc291cmNlUmVxdWVzdEJhc2U6OlNjcmlwdCkKICAgICAs
IG1fZGVjb2RlcihUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoImFwcGxpY2F0aW9uL2phdmFz
Y3JpcHQiLCBjaGFyc2V0KSkKICAgICAsIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyKHRoaXMs
ICZDYWNoZWRTY3JpcHQ6OmRlY29kZWREYXRhRGVsZXRpb25UaW1lckZpcmVkKQogewpJbmRleDog
V2ViQ29yZS9sb2FkZXIvQ2FjaGVkRm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGVkRm9udC5jcHAJKHJldmlzaW9uIDQ4MzQzKQorKysgV2ViQ29yZS9sb2FkZXIvQ2Fj
aGVkRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogQ2FjaGVkRm9udDo6Q2FjaGVkRm9udChjb25zdCBTdHJpbmcgJnVybCkKLSAg
ICA6IENhY2hlZFJlc291cmNlKHVybCwgRm9udFJlc291cmNlKQorICAgIDogQ2FjaGVkUmVzb3Vy
Y2UodXJsLCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpGb250UmVzb3VyY2UpCiAgICAgLCBtX2ZvbnRE
YXRhKDApCiAgICAgLCBtX2xvYWRJbml0aWF0ZWQoZmFsc2UpCiAjaWYgRU5BQkxFKFNWR19GT05U
UykKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAJKHJldmlzaW9uIDQ4MzQzKQorKysgV2ViQ29y
ZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShjb25zdCBT
dHJpbmcmIHVybCkKLSAgICA6IENhY2hlZFJlc291cmNlKHVybCwgSW1hZ2VSZXNvdXJjZSkKKyAg
ICA6IENhY2hlZFJlc291cmNlKHVybCwgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6SW1hZ2VSZXNvdXJj
ZSkKICAgICAsIG1faW1hZ2UoMCkKICAgICAsIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyKHRo
aXMsICZDYWNoZWRJbWFnZTo6ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmlyZWQpCiAgICAgLCBt
X2h0dHBTdGF0dXNDb2RlRXJyb3JPY2N1cnJlZChmYWxzZSkKQEAgLTU5LDcgKzU5LDcgQEAKIH0K
IAogQ2FjaGVkSW1hZ2U6OkNhY2hlZEltYWdlKEltYWdlKiBpbWFnZSkKLSAgICA6IENhY2hlZFJl
c291cmNlKFN0cmluZygpLCBJbWFnZVJlc291cmNlKQorICAgIDogQ2FjaGVkUmVzb3VyY2UoU3Ry
aW5nKCksIFJlc291cmNlUmVxdWVzdEJhc2U6OkltYWdlUmVzb3VyY2UpCiAgICAgLCBtX2ltYWdl
KGltYWdlKQogICAgICwgbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXIodGhpcywgJkNhY2hlZElt
YWdlOjpkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZCkKICAgICAsIG1faHR0cFN0YXR1c0Nv
ZGVFcnJvck9jY3VycmVkKGZhbHNlKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3Vy
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAko
cmV2aXNpb24gNDgzNDMpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAKIHN0YXRpYyBSZWZDb3VudGVkTGVha0NvdW50
ZXIgY2FjaGVkUmVzb3VyY2VMZWFrQ291bnRlcigiQ2FjaGVkUmVzb3VyY2UiKTsKICNlbmRpZgog
Ci1DYWNoZWRSZXNvdXJjZTo6Q2FjaGVkUmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIFR5cGUg
dHlwZSkKK0NhY2hlZFJlc291cmNlOjpDYWNoZWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwg
UmVzb3VyY2VSZXF1ZXN0QmFzZTo6VHlwZSB0eXBlKQogICAgIDogbV91cmwodXJsKQogICAgICwg
bV9yZXNwb25zZVRpbWVzdGFtcChjdXJyZW50VGltZSgpKQogICAgICwgbV9sYXN0RGVjb2RlZEFj
Y2Vzc1RpbWUoMCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY0xvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmNwcAkocmV2aXNpb24gNDgzNDMpCisrKyBX
ZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIw
LDcgQEAKIAogQ2FjaGVkSW1hZ2UqIERvY0xvYWRlcjo6cmVxdWVzdEltYWdlKGNvbnN0IFN0cmlu
ZyYgdXJsKQogewotICAgIENhY2hlZEltYWdlKiByZXNvdXJjZSA9IHN0YXRpY19jYXN0PENhY2hl
ZEltYWdlKj4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlLCB1
cmwsIFN0cmluZygpKSk7CisgICAgQ2FjaGVkSW1hZ2UqIHJlc291cmNlID0gc3RhdGljX2Nhc3Q8
Q2FjaGVkSW1hZ2UqPihyZXF1ZXN0UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0QmFzZTo6SW1hZ2VS
ZXNvdXJjZSwgdXJsLCBTdHJpbmcoKSkpOwogICAgIGlmIChhdXRvTG9hZEltYWdlcygpICYmIHJl
c291cmNlICYmIHJlc291cmNlLT5zdGlsbE5lZWRzTG9hZCgpKSB7CiAgICAgICAgIHJlc291cmNl
LT5zZXRMb2FkaW5nKHRydWUpOwogICAgICAgICBjYWNoZSgpLT5sb2FkZXIoKS0+bG9hZCh0aGlz
LCByZXNvdXJjZSwgdHJ1ZSk7CkBAIC0xMzAsMTIgKzEzMCwxMiBAQAogCiBDYWNoZWRGb250KiBE
b2NMb2FkZXI6OnJlcXVlc3RGb250KGNvbnN0IFN0cmluZyYgdXJsKQogewotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxDYWNoZWRGb250Kj4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpG
b250UmVzb3VyY2UsIHVybCwgU3RyaW5nKCkpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2Fj
aGVkRm9udCo+KHJlcXVlc3RSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3RCYXNlOjpGb250UmVzb3Vy
Y2UsIHVybCwgU3RyaW5nKCkpKTsKIH0KIAogQ2FjaGVkQ1NTU3R5bGVTaGVldCogRG9jTG9hZGVy
OjpyZXF1ZXN0Q1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBj
aGFyc2V0KQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWNoZWRDU1NTdHlsZVNoZWV0Kj4o
cmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0LCB1cmwsIGNoYXJz
ZXQpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkQ1NTU3R5bGVTaGVldCo+KHJlcXVl
c3RSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3RCYXNlOjpDU1NTdHlsZVNoZWV0LCB1cmwsIGNoYXJz
ZXQpKTsKIH0KIAogQ2FjaGVkQ1NTU3R5bGVTaGVldCogRG9jTG9hZGVyOjpyZXF1ZXN0VXNlckNT
U1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKQEAg
LTE0NSw0MSArMTQ1LDQxIEBACiAKIENhY2hlZFNjcmlwdCogRG9jTG9hZGVyOjpyZXF1ZXN0U2Ny
aXB0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCiB7Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PENhY2hlZFNjcmlwdCo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNv
dXJjZTo6U2NyaXB0LCB1cmwsIGNoYXJzZXQpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2Fj
aGVkU2NyaXB0Kj4ocmVxdWVzdFJlc291cmNlKFJlc291cmNlUmVxdWVzdEJhc2U6OlNjcmlwdCwg
dXJsLCBjaGFyc2V0KSk7CiB9CiAKICNpZiBFTkFCTEUoWFNMVCkKIENhY2hlZFhTTFN0eWxlU2hl
ZXQqIERvY0xvYWRlcjo6cmVxdWVzdFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwpCiB7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhY2hlZFhTTFN0eWxlU2hlZXQqPihyZXF1ZXN0UmVz
b3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQsIHVybCwgU3RyaW5nKCkpKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkWFNMU3R5bGVTaGVldCo+KHJlcXVlc3RSZXNvdXJj
ZShSZXNvdXJjZVJlcXVlc3RCYXNlOjpYU0xTdHlsZVNoZWV0LCB1cmwsIFN0cmluZygpKSk7CiB9
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShYQkwpCiBDYWNoZWRYQkxEb2N1bWVudCogRG9jTG9hZGVy
OjpyZXF1ZXN0WEJMRG9jdW1lbnQoY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PENhY2hlZFhTTFN0eWxlU2hlZXQqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVz
b3VyY2U6OlhCTCwgdXJsLCBTdHJpbmcoKSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWNo
ZWRYU0xTdHlsZVNoZWV0Kj4ocmVxdWVzdFJlc291cmNlKFJlc291cmNlUmVxdWVzdEJhc2U6OlhC
TCwgdXJsLCBTdHJpbmcoKSkpOwogfQogI2VuZGlmCiAKLWJvb2wgRG9jTG9hZGVyOjpjYW5SZXF1
ZXN0KENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IEtVUkwmIHVybCkKK2Jvb2wgRG9j
TG9hZGVyOjpjYW5SZXF1ZXN0KFJlc291cmNlUmVxdWVzdEJhc2U6OlR5cGUgdHlwZSwgY29uc3Qg
S1VSTCYgdXJsKQogewogICAgIC8vIFNvbWUgdHlwZXMgb2YgcmVzb3VyY2VzIGNhbiBiZSBsb2Fk
ZWQgb25seSBmcm9tIHRoZSBzYW1lIG9yaWdpbi4gIE90aGVyCiAgICAgLy8gdHlwZXMgb2YgcmVz
b3VyY2VzLCBsaWtlIEltYWdlcywgU2NyaXB0cywgYW5kIENTUywgY2FuIGJlIGxvYWRlZCBmcm9t
CiAgICAgLy8gYW55IFVSTC4KICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIENhY2hlZFJl
c291cmNlOjpJbWFnZVJlc291cmNlOgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxl
U2hlZXQ6Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgotICAgIGNhc2UgQ2FjaGVk
UmVzb3VyY2U6OkZvbnRSZXNvdXJjZToKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdEJhc2U6Oklt
YWdlUmVzb3VyY2U6CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpDU1NTdHlsZVNoZWV0
OgorICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6U2NyaXB0OgorICAgIGNhc2UgUmVzb3Vy
Y2VSZXF1ZXN0QmFzZTo6Rm9udFJlc291cmNlOgogICAgICAgICAvLyBUaGVzZSB0eXBlcyBvZiBy
ZXNvdXJjZXMgY2FuIGJlIGxvYWRlZCBmcm9tIGFueSBvcmlnaW4uCiAgICAgICAgIC8vIEZJWE1F
OiBBcmUgd2Ugc3VyZSBhYm91dCBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlPwogICAgICAg
ICBicmVhazsKICNpZiBFTkFCTEUoWFNMVCkKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xT
dHlsZVNoZWV0OgorICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6WFNMU3R5bGVTaGVldDoK
ICNlbmRpZgogI2lmIEVOQUJMRShYQkwpCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WEJMOgor
ICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6WEJMOgogI2VuZGlmCiAjaWYgRU5BQkxFKFhT
TFQpIHx8IEVOQUJMRShYQkwpCiAgICAgICAgIGlmICghbV9kb2MtPnNlY3VyaXR5T3JpZ2luKCkt
PmNhblJlcXVlc3QodXJsKSkgewpAQCAtMjAxLDIwICsyMDEsMjAgQEAKICAgICAvLyAgICAgICB1
cGRhdGUgYW55IHNlY3VyaXR5IGluZGljYXRvcnMuCiAgICAgLy8gCiAgICAgc3dpdGNoICh0eXBl
KSB7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgorICAgIGNhc2UgUmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6U2NyaXB0OgogI2lmIEVOQUJMRShYU0xUKQotICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6OlhTTFN0eWxlU2hlZXQ6CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpYU0xT
dHlsZVNoZWV0OgogI2VuZGlmCiAjaWYgRU5BQkxFKFhCTCkKLSAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpYQkw6CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpYQkw6CiAjZW5kaWYKICAg
ICAgICAgLy8gVGhlc2UgcmVzb3VyY2UgY2FuIGluamVjdCBzY3JpcHQgaW50byB0aGUgY3VycmVu
dCBkb2N1bWVudC4KICAgICAgICAgaWYgKEZyYW1lKiBmID0gZnJhbWUoKSkKICAgICAgICAgICAg
IGYtPmxvYWRlcigpLT5jaGVja0lmUnVuSW5zZWN1cmVDb250ZW50KG1fZG9jLT5zZWN1cml0eU9y
aWdpbigpLCB1cmwpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJ
bWFnZVJlc291cmNlOgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6Ci0g
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOiB7CisgICAgY2FzZSBSZXNvdXJj
ZVJlcXVlc3RCYXNlOjpJbWFnZVJlc291cmNlOgorICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0QmFz
ZTo6Q1NTU3R5bGVTaGVldDoKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OkZvbnRSZXNv
dXJjZTogewogICAgICAgICAvLyBUaGVzZSByZXNvdXJjZXMgY2FuIGNvcnJ1cHQgb25seSB0aGUg
ZnJhbWUncyBwaXhlbHMuCiAgICAgICAgIGlmIChGcmFtZSogZiA9IGZyYW1lKCkpIHsKICAgICAg
ICAgICAgIEZyYW1lKiB0b3AgPSBmLT50cmVlKCktPnRvcCgpOwpAQCAtMjMwLDcgKzIzMCw3IEBA
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUNhY2hlZFJlc291cmNlKiBEb2NMb2FkZXI6OnJlcXVl
c3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHVybCwg
Y29uc3QgU3RyaW5nJiBjaGFyc2V0LCBib29sIGlzUHJlbG9hZCkKK0NhY2hlZFJlc291cmNlKiBE
b2NMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3RCYXNlOjpUeXBlIHR5cGUs
IGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIGJvb2wgaXNQcmVsb2Fk
KQogewogICAgIEtVUkwgZnVsbFVSTCA9IG1fZG9jLT5jb21wbGV0ZVVSTCh1cmwpOwogCkBAIC0y
OTgsNyArMjk4LDcgQEAKICAgICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBlbmQgPSBt
X2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRG9jdW1lbnRSZXNvdXJjZU1hcDo6
aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdldCgp
OwotICAgICAgICBpZiAocmVzb3VyY2UtPnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VS
ZXNvdXJjZSkgeworICAgICAgICBpZiAocmVzb3VyY2UtPnR5cGUoKSA9PSBSZXNvdXJjZVJlcXVl
c3RCYXNlOjpJbWFnZVJlc291cmNlKSB7CiAgICAgICAgICAgICBDYWNoZWRJbWFnZSogaW1hZ2Ug
PSBjb25zdF9jYXN0PENhY2hlZEltYWdlKj4oc3RhdGljX2Nhc3Q8Y29uc3QgQ2FjaGVkSW1hZ2Uq
PihyZXNvdXJjZSkpOwogCiAgICAgICAgICAgICBpZiAoaW1hZ2UtPnN0aWxsTmVlZHNMb2FkKCkp
CkBAIC0zNjcsMTAgKzM2NywxMCBAQAogICAgIHJldHVybiBtX3JlcXVlc3RDb3VudDsKIH0KICAg
ICAKLXZvaWQgRG9jTG9hZGVyOjpwcmVsb2FkKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIGNv
bnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIGJvb2wgcmVmZXJlbmNlZEZy
b21Cb2R5KQordm9pZCBEb2NMb2FkZXI6OnByZWxvYWQoUmVzb3VyY2VSZXF1ZXN0QmFzZTo6VHlw
ZSB0eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBib29sIHJl
ZmVyZW5jZWRGcm9tQm9keSkKIHsKICAgICBib29sIGhhc1JlbmRlcmluZyA9IG1fZG9jLT5ib2R5
KCkgJiYgbV9kb2MtPmJvZHkoKS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIWhhc1JlbmRlcmluZyAm
JiAocmVmZXJlbmNlZEZyb21Cb2R5IHx8IHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVz
b3VyY2UpKSB7CisgICAgaWYgKCFoYXNSZW5kZXJpbmcgJiYgKHJlZmVyZW5jZWRGcm9tQm9keSB8
fCB0eXBlID09IFJlc291cmNlUmVxdWVzdEJhc2U6OkltYWdlUmVzb3VyY2UpKSB7CiAgICAgICAg
IC8vIERvbid0IHByZWxvYWQgaW1hZ2VzIG9yIGJvZHkgcmVzb3VyY2VzIGJlZm9yZSB3ZSBoYXZl
IHNvbWV0aGluZyB0byBkcmF3LiBUaGlzIHByZXZlbnRzCiAgICAgICAgIC8vIHByZWxvYWRzIGZy
b20gYm9keSBkZWxheWluZyBmaXJzdCBkaXNwbGF5IHdoZW4gYmFuZHdpZHRoIGlzIGxpbWl0ZWQu
CiAgICAgICAgIFBlbmRpbmdQcmVsb2FkIHBlbmRpbmdQcmVsb2FkID0geyB0eXBlLCB1cmwsIGNo
YXJzZXQgfTsKQEAgLTM5NCwxMCArMzk0LDEwIEBACiAgICAgbV9wZW5kaW5nUHJlbG9hZHMuY2xl
YXIoKTsKIH0KIAotdm9pZCBEb2NMb2FkZXI6OnJlcXVlc3RQcmVsb2FkKENhY2hlZFJlc291cmNl
OjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCit2
b2lkIERvY0xvYWRlcjo6cmVxdWVzdFByZWxvYWQoUmVzb3VyY2VSZXF1ZXN0QmFzZTo6VHlwZSB0
eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQogewogICAgIFN0
cmluZyBlbmNvZGluZzsKLSAgICBpZiAodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0IHx8
IHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQpCisgICAgaWYgKHR5cGUgPT0g
UmVzb3VyY2VSZXF1ZXN0QmFzZTo6U2NyaXB0IHx8IHR5cGUgPT0gUmVzb3VyY2VSZXF1ZXN0QmFz
ZTo6Q1NTU3R5bGVTaGVldCkKICAgICAgICAgZW5jb2RpbmcgPSBjaGFyc2V0LmlzRW1wdHkoKSA/
IG1fZG9jLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKSA6IGNoYXJzZXQ7CiAKICAgICBD
YWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSByZXF1ZXN0UmVzb3VyY2UodHlwZSwgdXJsLCBlbmNv
ZGluZywgdHJ1ZSk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL0NhY2hlLmgJKHJldmlzaW9uIDQ4MzQzKQorKysgV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQAogCiAgICAgLy8gUmVx
dWVzdCByZXNvdXJjZXMgZnJvbSB0aGUgY2FjaGUuICBBIGxvYWQgd2lsbCBiZSBpbml0aWF0ZWQg
YW5kIGEgY2FjaGUgb2JqZWN0IGNyZWF0ZWQgaWYgdGhlIG9iamVjdCBpcyBub3QKICAgICAvLyBm
b3VuZCBpbiB0aGUgY2FjaGUuCi0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlcXVlc3RSZXNvdXJjZShE
b2NMb2FkZXIqLCBDYWNoZWRSZXNvdXJjZTo6VHlwZSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIGNoYXJzZXQsIGJvb2wgaXNQcmVsb2FkID0gZmFsc2UpOworICAgIENhY2hlZFJlc291
cmNlKiByZXF1ZXN0UmVzb3VyY2UoRG9jTG9hZGVyKiwgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6VHlw
ZSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIGJvb2wgaXNQcmVsb2Fk
ID0gZmFsc2UpOwogCiAgICAgQ2FjaGVkQ1NTU3R5bGVTaGVldCogcmVxdWVzdFVzZXJDU1NTdHls
ZVNoZWV0KERvY0xvYWRlciosIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJz
ZXQpOwogICAgIApJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAJKHJl
dmlzaW9uIDQ4MzQzKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Q2FjaGVkQ1NTU3R5bGVTaGVldDo6Q2FjaGVkQ1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQotICAgIDogQ2FjaGVkUmVzb3VyY2UodXJsLCBDU1NT
dHlsZVNoZWV0KQorICAgIDogQ2FjaGVkUmVzb3VyY2UodXJsLCBSZXNvdXJjZVJlcXVlc3RCYXNl
OjpDU1NTdHlsZVNoZWV0KQogICAgICwgbV9kZWNvZGVyKFRleHRSZXNvdXJjZURlY29kZXI6OmNy
ZWF0ZSgidGV4dC9jc3MiLCBjaGFyc2V0KSkKIHsKICAgICAvLyBQcmVmZXIgdGV4dC9jc3MgYnV0
IGFjY2VwdCBhbnkgdHlwZSAoZGVsbC5jb20gc2VydmVzIGEgc3R5bGVzaGVldApJbmRleDogV2Vi
Q29yZS9sb2FkZXIvRG9jTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9j
TG9hZGVyLmgJKHJldmlzaW9uIDQ4MzQzKQorKysgV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk4LDE3ICs5OCwxNyBAQAogICAgIAogICAgIHZvaWQgY2xlYXJQ
cmVsb2FkcygpOwogICAgIHZvaWQgY2xlYXJQZW5kaW5nUHJlbG9hZHMoKTsKLSAgICB2b2lkIHBy
ZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIGNoYXJzZXQsIGJvb2wgcmVmZXJlbmNlZEZyb21Cb2R5KTsKKyAgICB2b2lkIHByZWxvYWQo
UmVzb3VyY2VSZXF1ZXN0QmFzZTo6VHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgY2hhcnNldCwgYm9vbCByZWZlcmVuY2VkRnJvbUJvZHkpOwogICAgIHZvaWQgY2hlY2tGb3JQ
ZW5kaW5nUHJlbG9hZHMoKTsKICAgICB2b2lkIHByaW50UHJlbG9hZFN0YXRzKCk7CiAgICAgCiBw
cml2YXRlOgotICAgIENhY2hlZFJlc291cmNlKiByZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3Vy
Y2U6OlR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIGJvb2wg
aXNQcmVsb2FkID0gZmFsc2UpOwotICAgIHZvaWQgcmVxdWVzdFByZWxvYWQoQ2FjaGVkUmVzb3Vy
Y2U6OlR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOworICAg
IENhY2hlZFJlc291cmNlKiByZXF1ZXN0UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0QmFzZTo6VHlw
ZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgYm9vbCBpc1ByZWxv
YWQgPSBmYWxzZSk7CisgICAgdm9pZCByZXF1ZXN0UHJlbG9hZChSZXNvdXJjZVJlcXVlc3RCYXNl
OjpUeXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKIAogICAg
IHZvaWQgY2hlY2tGb3JSZWxvYWQoY29uc3QgS1VSTCYpOwogICAgIHZvaWQgY2hlY2tDYWNoZU9i
amVjdFN0YXR1cyhDYWNoZWRSZXNvdXJjZSopOwotICAgIGJvb2wgY2FuUmVxdWVzdChDYWNoZWRS
ZXNvdXJjZTo6VHlwZSwgY29uc3QgS1VSTCYpOworICAgIGJvb2wgY2FuUmVxdWVzdChSZXNvdXJj
ZVJlcXVlc3RCYXNlOjpUeXBlLCBjb25zdCBLVVJMJik7CiAgICAgCiAgICAgQ2FjaGUqIG1fY2Fj
aGU7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVsb2FkZWRVUkxzOwpAQCAtMTE5LDcgKzExOSw3
IEBACiAgICAgCiAgICAgTGlzdEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPiBtX3ByZWxvYWRzOwog
ICAgIHN0cnVjdCBQZW5kaW5nUHJlbG9hZCB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlOjpUeXBl
IG1fdHlwZTsKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6VHlwZSBtX3R5cGU7CiAgICAg
ICAgIFN0cmluZyBtX3VybDsKICAgICAgICAgU3RyaW5nIG1fY2hhcnNldDsKICAgICB9OwpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L0NhY2hlLmNwcAkocmV2aXNpb24gNDgzNDMpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY1LDIzICs2NSwyMyBAQAogewogfQogCi1zdGF0aWMgQ2FjaGVk
UmVzb3VyY2UqIGNyZWF0ZVJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQorc3RhdGljIENhY2hlZFJlc291cmNl
KiBjcmVhdGVSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3RCYXNlOjpUeXBlIHR5cGUsIGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQogewogICAgIHN3aXRjaCAodHlwZSkgewot
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6CisgICAgY2FzZSBSZXNvdXJj
ZVJlcXVlc3RCYXNlOjpJbWFnZVJlc291cmNlOgogICAgICAgICByZXR1cm4gbmV3IENhY2hlZElt
YWdlKHVybC5zdHJpbmcoKSk7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVl
dDoKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OkNTU1N0eWxlU2hlZXQ6CiAgICAgICAg
IHJldHVybiBuZXcgQ2FjaGVkQ1NTU3R5bGVTaGVldCh1cmwuc3RyaW5nKCksIGNoYXJzZXQpOwot
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKKyAgICBjYXNlIFJlc291cmNlUmVxdWVz
dEJhc2U6OlNjcmlwdDoKICAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRTY3JpcHQodXJsLnN0cmlu
ZygpLCBjaGFyc2V0KTsKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6Cisg
ICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpGb250UmVzb3VyY2U6CiAgICAgICAgIHJldHVy
biBuZXcgQ2FjaGVkRm9udCh1cmwuc3RyaW5nKCkpOwogI2lmIEVOQUJMRShYU0xUKQotICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6CisgICAgY2FzZSBSZXNvdXJjZVJlcXVl
c3RCYXNlOjpYU0xTdHlsZVNoZWV0OgogICAgICAgICByZXR1cm4gbmV3IENhY2hlZFhTTFN0eWxl
U2hlZXQodXJsLnN0cmluZygpKTsKICNlbmRpZgogI2lmIEVOQUJMRShYQkwpCi0gICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6WEJMU3R5bGVTaGVldDoKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdEJh
c2U6OlhCTFN0eWxlU2hlZXQ6CiAgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkWEJMRG9jdW1lbnQo
dXJsLnN0cmluZygpKTsKICNlbmRpZgogICAgIGRlZmF1bHQ6CkBAIC05MSw3ICs5MSw3IEBACiAg
ICAgcmV0dXJuIDA7CiB9CiAKLUNhY2hlZFJlc291cmNlKiBDYWNoZTo6cmVxdWVzdFJlc291cmNl
KERvY0xvYWRlciogZG9jTG9hZGVyLCBDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgYm9vbCByZXF1ZXN0SXNQcmVsb2FkKQor
Q2FjaGVkUmVzb3VyY2UqIENhY2hlOjpyZXF1ZXN0UmVzb3VyY2UoRG9jTG9hZGVyKiBkb2NMb2Fk
ZXIsIFJlc291cmNlUmVxdWVzdEJhc2U6OlR5cGUgdHlwZSwgY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIGNoYXJzZXQsIGJvb2wgcmVxdWVzdElzUHJlbG9hZCkKIHsKICAgICAvLyBGSVhN
RTogRG8gd2UgcmVhbGx5IG5lZWQgdG8gc3BlY2lhbC1jYXNlIGFuIGVtcHR5IFVSTD8KICAgICAv
LyBXb3VsZCBpdCBiZSBiZXR0ZXIgdG8ganVzdCBnbyBvbiB3aXRoIHRoZSBjYWNoZSBjb2RlIGFu
ZCBsZXQgaXQgZmFpbCBsYXRlcj8KQEAgLTE1Myw3ICsxNTMsNyBAQAogewogICAgIENhY2hlZENT
U1N0eWxlU2hlZXQqIHVzZXJTaGVldDsKICAgICBpZiAoQ2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5n
ID0gcmVzb3VyY2VGb3JVUkwodXJsKSkgewotICAgICAgICBpZiAoZXhpc3RpbmctPnR5cGUoKSAh
PSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCkKKyAgICAgICAgaWYgKGV4aXN0aW5nLT50
eXBlKCkgIT0gUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Q1NTU3R5bGVTaGVldCkKICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICB1c2VyU2hlZXQgPSBzdGF0aWNfY2FzdDxDYWNoZWRDU1NTdHls
ZVNoZWV0Kj4oZXhpc3RpbmcpOwogICAgIH0gZWxzZSB7CkBAIC02NjAsMjUgKzY2MCwyNSBAQAog
ICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGkgPSBtX3Jlc291cmNlcy5iZWdp
bigpOyBpICE9IGU7ICsraSkgewogICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBp
LT5zZWNvbmQ7CiAgICAgICAgIHN3aXRjaCAocmVzb3VyY2UtPnR5cGUoKSkgewotICAgICAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgorICAgICAgICBjYXNlIFJlc291cmNl
UmVxdWVzdEJhc2U6OkltYWdlUmVzb3VyY2U6CiAgICAgICAgICAgICBzdGF0cy5pbWFnZXMuYWRk
UmVzb3VyY2UocmVzb3VyY2UpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6CisgICAgICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0
QmFzZTo6Q1NTU3R5bGVTaGVldDoKICAgICAgICAgICAgIHN0YXRzLmNzc1N0eWxlU2hlZXRzLmFk
ZFJlc291cmNlKHJlc291cmNlKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpTY3JpcHQ6CisgICAgICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6
U2NyaXB0OgogICAgICAgICAgICAgc3RhdHMuc2NyaXB0cy5hZGRSZXNvdXJjZShyZXNvdXJjZSk7
CiAgICAgICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoWFNMVCkKLSAgICAgICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKKyAgICAgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RC
YXNlOjpYU0xTdHlsZVNoZWV0OgogICAgICAgICAgICAgc3RhdHMueHNsU3R5bGVTaGVldHMuYWRk
UmVzb3VyY2UocmVzb3VyY2UpOwogICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYKLSAgICAgICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgorICAgICAgICBjYXNlIFJlc291cmNl
UmVxdWVzdEJhc2U6OkZvbnRSZXNvdXJjZToKICAgICAgICAgICAgIHN0YXRzLmZvbnRzLmFkZFJl
c291cmNlKHJlc291cmNlKTsKICAgICAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShYQkwpCi0g
ICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhCTDoKKyAgICAgICAgY2FzZSBSZXNvdXJjZVJl
cXVlc3RCYXNlOjpYQkw6CiAgICAgICAgICAgICBzdGF0cy54YmxEb2NzLmFkZFJlc291cmNlKHJl
c291cmNlKQogICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L2xvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAkocmV2
aXNpb24gNDgzNDMpCisrKyBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MywxOCArNzMsMTggQEAKIHsKICNpZiBSRVFVRVNUX01BTkFHRU1FTlRfRU5BQkxFRAog
ICAgIHN3aXRjaCAocmVzb3VyY2UtPnR5cGUoKSkgewotICAgICAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpDU1NTdHlsZVNoZWV0OgorICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Q1NTU3R5
bGVTaGVldDoKICNpZiBFTkFCTEUoWFNMVCkKLSAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
WFNMU3R5bGVTaGVldDoKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdEJhc2U6OlhTTFN0eWxlU2hl
ZXQ6CiAjZW5kaWYKICNpZiBFTkFCTEUoWEJMKQotICAgICAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpYQkw6CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpYQkw6CiAjZW5kaWYKICAgICAg
ICAgICAgIHJldHVybiBIaWdoOwotICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6
IAotICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6CisgICAgY2FzZSBS
ZXNvdXJjZVJlcXVlc3RCYXNlOjpTY3JpcHQ6CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RCYXNl
OjpGb250UmVzb3VyY2U6CiAgICAgICAgICAgICByZXR1cm4gTWVkaXVtOwotICAgICAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgorICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0
QmFzZTo6SW1hZ2VSZXNvdXJjZToKICAgICAgICAgICAgIHJldHVybiBMb3c7CiAgICAgfQogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjk5LDcgKzI5OSw4IEBACiAgICAgICAgIHJlcXVl
c3RzUGVuZGluZy5yZW1vdmVGaXJzdCgpOwogICAgICAgICAKICAgICAgICAgUmVzb3VyY2VSZXF1
ZXN0IHJlc291cmNlUmVxdWVzdChyZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpLT51cmwoKSk7Ci0g
ICAgICAgIAorICAgICAgICByZXNvdXJjZVJlcXVlc3Quc2V0UmVzb3VyY2VUeXBlKHJlcXVlc3Qt
PmNhY2hlZFJlc291cmNlKCktPnR5cGUoKSk7CisKICAgICAgICAgaWYgKCFyZXF1ZXN0LT5jYWNo
ZWRSZXNvdXJjZSgpLT5hY2NlcHQoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXNvdXJjZVJl
cXVlc3Quc2V0SFRUUEFjY2VwdChyZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpLT5hY2NlcHQoKSk7
CiAgICAgICAgIAo=
</data>
<flag name="review"
          id="20628"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>