<?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>204053</bug_id>
          
          <creation_ts>2019-11-09 15:10:48 -0800</creation_ts>
          <short_desc>Stack allocate StyleResolver state</short_desc>
          <delta_ts>2019-11-12 09:04:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1589046</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-09 15:10:48 -0800</bug_when>
    <thetext>Get rid of the awkward State member.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589049</commentid>
    <comment_count>1</comment_count>
      <attachid>383228</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-09 15:27:02 -0800</bug_when>
    <thetext>Created attachment 383228
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589056</commentid>
    <comment_count>2</comment_count>
      <attachid>383231</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-09 15:37:08 -0800</bug_when>
    <thetext>Created attachment 383231
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589059</commentid>
    <comment_count>3</comment_count>
      <attachid>383232</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-09 16:26:23 -0800</bug_when>
    <thetext>Created attachment 383232
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589067</commentid>
    <comment_count>4</comment_count>
      <attachid>383232</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-11-09 19:47:26 -0800</bug_when>
    <thetext>Comment on attachment 383232
patch

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

&gt; Source/WebCore/css/StyleResolver.cpp:465
&gt; +std::unique_ptr&lt;RenderStyle&gt; StyleResolver::defaultStyleForElement(const Element* element)

It&apos;s sad that we need to pass in a raw pointer just to figure out if it is an svg element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589075</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-09 23:16:14 -0800</bug_when>
    <thetext>&gt; It&apos;s sad that we need to pass in a raw pointer just to figure out if it is
&gt; an svg element.

Bit silly yes. There is still lots of room for improvement here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589078</commentid>
    <comment_count>6</comment_count>
      <attachid>383232</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-10 00:01:58 -0800</bug_when>
    <thetext>Comment on attachment 383232
patch

Clearing flags on attachment: 383232

Committed r252313: &lt;https://trac.webkit.org/changeset/252313&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589079</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-10 00:02:00 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589386</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-11 17:00:33 -0800</bug_when>
    <thetext>&lt;rdar://problem/57099412&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589544</commentid>
    <comment_count>9</comment_count>
      <attachid>383232</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-11-12 09:04:18 -0800</bug_when>
    <thetext>Comment on attachment 383232
patch

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

&gt; Source/WebCore/style/StyleBuilderState.h:48
&gt; +    RefPtr&lt;const Element&gt; element = nullptr;

I think the &quot;= nullptr&quot; here is a no-op since any RefPtr starts out as nullptr.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383228</attachid>
            <date>2019-11-09 15:27:02 -0800</date>
            <delta_ts>2019-11-09 15:37:08 -0800</delta_ts>
            <desc>patch</desc>
            <filename>styleresolver-state-stack.patch</filename>
            <type>text/plain</type>
            <size>39101</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjZmI1MWEwMDA0OS4uY2U4YTc1ZWIyMjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MiBAQAorMjAxOS0xMS0wOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgU3RhY2sgYWxsb2NhdGUgU3R5bGVSZXNvbHZlciBzdGF0ZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0MDUzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3RhdGUgaXMgY3VycmVudGx5
IGF3a3dhcmRseSBhIG1lbWJlciB0aGF0IGdldHMgY2xlYXJlZC4gSXQgc2hvdWxkIGJlIHN0YWNr
IGFsbG9jYXRlZCBhbmQKKyAgICAgICAgcGFzc2VkIGFyb3VuZCB3aGVyZSBuZWVkZWQuCisKKyAg
ICAgICAgKiBhbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
S2V5ZnJhbWVFZmZlY3Q6OnVwZGF0ZUJsZW5kaW5nS2V5ZnJhbWVzKToKKyAgICAgICAgKiBjc3Mv
RE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01D
U1NSZWdpc3RlckN1c3RvbVByb3BlcnR5OjpyZWdpc3RlclByb3BlcnR5KToKKyAgICAgICAgKiBj
c3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpi
dWlsZGVyQ29udGV4dCk6CisKKyAgICAgICAgSGVscGVyIGZvciBpbml0aWFsaXppbmcgU3R5bGU6
OkJ1aWxkZXIgZnJvbSByZXNvbHZlciBzdGF0ZS4KKworICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnN0eWxlRm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OnN0eWxlRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpk
ZWZhdWx0U3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6U3RhdGU6OmNsZWFyKTogRGVsZXRlZC4KKworICAgICAgICBOb3RoaW5nIHRvIGNs
ZWFyLCBzdGF0ZSBpcyB0cmFuc2llbnQuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnNldE5ld1N0YXRlV2l0aEVsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKTogRGVs
ZXRlZC4KKworICAgICAgICBTdHlsZTo6QnVpbGRlciBjYW4gYmUgdXNlZCBkaXJlY3RseSB0byBh
cHBseSBwcm9wZXJ0aWVzIGluc3RlYWQgb2YgdmlhIHRoZXNlIGZ1bmN0aW9ucyB0aGF0IHJlcXVp
cmUgc3RhdGUgc2V0dXAuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRp
YWxpemVGb250U3R5bGUpOiBEZWxldGVkLgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjppbnNwZWN0b3JDU1NPTVdyYXBwZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcmVudFN0eWxlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnJvb3RFbGVtZW50U3R5
bGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6ZWxl
bWVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpz
dGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdGF0ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2V0Rm9udCk6CisKKyAgICAgICAgVXNlIFN0eWxlOjpCdWlsZGVyIGRpcmVjdGx5IHRvIGFwcGx5
IHByb3BlcnRpZXMuCisKKyAgICAgICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXI6OkJ1aWxkZXIpOgorCisgICAgICAgIEVuY2Fwc3Vs
dGUgaW1tdXRhYmxlIGFyZ3VtZW50cyBpbnRvIEJ1aWxkZXJDb250ZXh0IHR5cGUuCisKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyOjphcHBseVByb3BlcnR5VmFsdWUpOgorICAgICAg
ICAqIHN0eWxlL1N0eWxlQnVpbGRlci5oOgorICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlclN0
YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OkJ1aWxkZXJT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjp1cGRhdGVGb250
Rm9yWm9vbUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjp1
cGRhdGVGb250Rm9yR2VuZXJpY0ZhbWlseUNoYW5nZSk6CisgICAgICAgICogc3R5bGUvU3R5bGVC
dWlsZGVyU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnBh
cmVudFN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6
OnJvb3RFbGVtZW50U3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxk
ZXJTdGF0ZTo6ZG9jdW1lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxk
ZXJTdGF0ZTo6ZWxlbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRl
clN0YXRlOjpwYXJlbnRGb250RGVzY3JpcHRpb24pOgorCiAyMDE5LTExLTA5ICBBbnR0aSBLb2l2
aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIHN0eWxlIGFkanVzdG1lbnQg
Y29kZSBvdXQgb2YgU3R5bGVSZXNvbHZlciBhbmQgaW50byBhIGNsYXNzIG9mIGl0cyBvd24KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCmluZGV4IDc1Nzc2YzVj
ZGU1Li5mZDg5YWVkZTZlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tl
eWZyYW1lRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVF
ZmZlY3QuY3BwCkBAIC03NDQsNyArNzQ0LDYgQEAgdm9pZCBLZXlmcmFtZUVmZmVjdDo6dXBkYXRl
QmxlbmRpbmdLZXlmcmFtZXMoUmVuZGVyU3R5bGUmIGVsZW1lbnRTdHlsZSkKICAgICBTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyID0gbV90YXJnZXQtPnN0eWxlUmVzb2x2ZXIoKTsKIAogICAg
IGZvciAoYXV0byYga2V5ZnJhbWUgOiBtX3BhcnNlZEtleWZyYW1lcykgewotICAgICAgICBzdHls
ZVJlc29sdmVyLnNldE5ld1N0YXRlV2l0aEVsZW1lbnQoKm1fdGFyZ2V0KTsKICAgICAgICAgS2V5
ZnJhbWVWYWx1ZSBrZXlmcmFtZVZhbHVlKGtleWZyYW1lLmNvbXB1dGVkT2Zmc2V0LCBudWxscHRy
KTsKIAogICAgICAgICBhdXRvIHN0eWxlUHJvcGVydGllcyA9IGtleWZyYW1lLnN0eWxlLT5pbW11
dGFibGVDb3B5SWZOZWVkZWQoKTsKQEAgLTc1Miw3ICs3NTEsNyBAQCB2b2lkIEtleWZyYW1lRWZm
ZWN0Ojp1cGRhdGVCbGVuZGluZ0tleWZyYW1lcyhSZW5kZXJTdHlsZSYgZWxlbWVudFN0eWxlKQog
ICAgICAgICAgICAga2V5ZnJhbWVMaXN0LmFkZFByb3BlcnR5KHN0eWxlUHJvcGVydGllcy0+cHJv
cGVydHlBdChpKS5pZCgpKTsKIAogICAgICAgICBhdXRvIGtleWZyYW1lUnVsZSA9IFN0eWxlUnVs
ZUtleWZyYW1lOjpjcmVhdGUoV1RGTW92ZShzdHlsZVByb3BlcnRpZXMpKTsKLSAgICAgICAga2V5
ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZVJlc29sdmVyLnN0eWxlRm9yS2V5ZnJhbWUoJmVsZW1l
bnRTdHlsZSwga2V5ZnJhbWVSdWxlLnB0cigpLCBrZXlmcmFtZVZhbHVlKSk7CisgICAgICAgIGtl
eWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVSZXNvbHZlci5zdHlsZUZvcktleWZyYW1lKCptX3Rh
cmdldCwgJmVsZW1lbnRTdHlsZSwga2V5ZnJhbWVSdWxlLnB0cigpLCBrZXlmcmFtZVZhbHVlKSk7
CiAgICAgICAgIGtleWZyYW1lTGlzdC5pbnNlcnQoV1RGTW92ZShrZXlmcmFtZVZhbHVlKSk7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRE9NQ1NTUmVnaXN0ZXJDdXN0
b21Qcm9wZXJ0eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRE9NQ1NTUmVnaXN0ZXJDdXN0b21Q
cm9wZXJ0eS5jcHAKaW5kZXggMjI0OGM1YmUzMDYuLjQyZjgwYWI1ZDhhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvRE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0RPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHkuY3BwCkBAIC01
Miw3ICs1Miw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVy
dHk6OnJlZ2lzdGVyUHJvcGVydHkoRG9jdW1lbnQmIGRvY3VtCiAKICAgICAgICAgLy8gV2UgbmVl
ZCB0byBpbml0aWFsaXplIHRoaXMgc28gdGhhdCB3ZSBjYW4gc3VjY2Vzc2Z1bGx5IHBhcnNlIGNv
bXB1dGF0aW9uYWxseSBkZXBlbmRlbnQgdmFsdWVzIChsaWtlIGVtIHVuaXRzKS4KICAgICAgICAg
Ly8gV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGUgdmFsdWVzIHRvIGJlIGFjY3VyYXRlLCBzaW5j
ZSB0aGV5IHdpbGwgYmUgcmVqZWN0ZWQgbGF0ZXIgYW55d2F5Ci0gICAgICAgIHN0eWxlUmVzb2x2
ZXIuYXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlJbnZhbGlkLCBudWxscHRyLCBzdHls
ZVJlc29sdmVyLmRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKSk7CisgICAgICAgIGF1dG8gc3R5bGUg
PSBzdHlsZVJlc29sdmVyLmRlZmF1bHRTdHlsZUZvckVsZW1lbnQobnVsbHB0cik7CiAKICAgICAg
ICAgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBkZXBlbmRlbmNpZXM7CiAgICAgICAgIENTU1Byb3Bl
cnR5UGFyc2VyOjpjb2xsZWN0UGFyc2VkQ3VzdG9tUHJvcGVydHlWYWx1ZURlcGVuZGVuY2llcyhk
ZXNjcmlwdG9yLnN5bnRheCwgZmFsc2UsIGRlcGVuZGVuY2llcywgdG9rZW5pemVyLnRva2VuUmFu
Z2UoKSwgc3RyaWN0Q1NTUGFyc2VyQ29udGV4dCgpKTsKQEAgLTYwLDggKzYwLDEyIEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IERPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHk6OnJlZ2lzdGVyUHJvcGVy
dHkoRG9jdW1lbnQmIGRvY3VtCiAgICAgICAgIGlmICghZGVwZW5kZW5jaWVzLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciwgIlRoZSBnaXZlbiBp
bml0aWFsIHZhbHVlIG11c3QgYmUgY29tcHV0YXRpb25hbGx5IGluZGVwZW5kZW50LiIgfTsKIAor
CiAgICAgICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0OwotICAgICAgICBTdHlsZTo6QnVpbGRl
ciBkdW1teUJ1aWxkZXIoc3R5bGVSZXNvbHZlciwgbWF0Y2hSZXN1bHQsIHsgfSk7CisKKyAgICAg
ICAgYXV0byBwYXJlbnRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZSgqc3R5bGUpOworICAgICAg
ICBTdHlsZTo6QnVpbGRlciBkdW1teUJ1aWxkZXIoKnN0eWxlLCB7IGRvY3VtZW50LCBwYXJlbnRT
dHlsZSB9LCBtYXRjaFJlc3VsdCwgeyB9KTsKKwogICAgICAgICBpbml0aWFsVmFsdWUgPSBDU1NQ
cm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoZGVzY3JpcHRvci5u
YW1lLCBkZXNjcmlwdG9yLnN5bnRheCwgdG9rZW5pemVyLnRva2VuUmFuZ2UoKSwgZHVtbXlCdWls
ZGVyLnN0YXRlKCksIHN0cmljdENTU1BhcnNlckNvbnRleHQoKSk7CiAKICAgICAgICAgaWYgKCFp
bml0aWFsVmFsdWUgfHwgIWluaXRpYWxWYWx1ZS0+aXNSZXNvbHZlZCgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IGY0MTNmNzJhMzEwLi43OGMwNjBiNTZiYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtODQsMTQgKzg0LDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1pbmxpbmUgdm9pZCBT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2xlYXIoKQotewotICAgIG1fZWxlbWVudCA9IG51bGxwdHI7
Ci0gICAgbV9wYXJlbnRTdHlsZSA9IG51bGxwdHI7Ci0gICAgbV9vd25lZFBhcmVudFN0eWxlID0g
bnVsbHB0cjsKLSAgICBtX3VzZXJBZ2VudEFwcGVhcmFuY2VTdHlsZSA9IG51bGxwdHI7Ci19Ci0K
IFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDog
bV9ydWxlU2V0cygqdGhpcykKICAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCkBAIC0yMDcsMjQg
KzE5OSwyNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNBdFNoYWRvd0JvdW5kYXJ5KGNvbnN0IEVs
ZW1lbnQmIGVsZW1lbnQpCiAgICAgcmV0dXJuIHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS0+aXNT
aGFkb3dSb290KCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0TmV3U3RhdGVXaXRoRWxl
bWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50KQorU3R5bGU6OkJ1aWxkZXJDb250ZXh0IFN0eWxl
UmVzb2x2ZXI6OmJ1aWxkZXJDb250ZXh0KGNvbnN0IFN0YXRlJiBzdGF0ZSkKIHsKLSAgICAvLyBB
cHBseSB0aGUgZGVjbGFyYXRpb24gdG8gdGhlIHN0eWxlLiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2
ZXJzaW9uIG9mIHRoZSBsb2dpYyBpbiBzdHlsZUZvckVsZW1lbnQuCi0gICAgbV9zdGF0ZSA9IFN0
YXRlKGVsZW1lbnQsIG51bGxwdHIpOworICAgIHJldHVybiB7CisgICAgICAgIG1fZG9jdW1lbnQs
CisgICAgICAgICpzdGF0ZS5wYXJlbnRTdHlsZSgpLAorICAgICAgICBzdGF0ZS5yb290RWxlbWVu
dFN0eWxlKCksCisgICAgICAgIHN0YXRlLmVsZW1lbnQoKQorICAgIH07CiB9CiAKIEVsZW1lbnRT
dHlsZSBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcGFy
ZW50Qm94U3R5bGUsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yIG1hdGNoaW5nQmVoYXZpb3IsIGNvbnN0
IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3RvckZpbHRlcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
bV9pc0RlbGV0ZWQpOwogCi0gICAgbV9zdGF0ZSA9IFN0YXRlKGVsZW1lbnQsIHBhcmVudFN0eWxl
LCBtX292ZXJyaWRlRG9jdW1lbnRFbGVtZW50U3R5bGUsIHNlbGVjdG9yRmlsdGVyKTsKLSAgICBT
dGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworICAgIGF1dG8gc3RhdGUgPSBTdGF0ZShlbGVtZW50LCBw
YXJlbnRTdHlsZSwgbV9vdmVycmlkZURvY3VtZW50RWxlbWVudFN0eWxlLCBzZWxlY3RvckZpbHRl
cik7CiAKICAgICBpZiAoc3RhdGUucGFyZW50U3R5bGUoKSkgewogICAgICAgICBzdGF0ZS5zZXRT
dHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlUHRyKCkpOwogICAgICAgICBzdGF0ZS5zdHlsZSgpLT5p
bmhlcml0RnJvbSgqc3RhdGUucGFyZW50U3R5bGUoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
c3RhdGUuc2V0U3R5bGUoZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpKTsKKyAgICAgICAgc3RhdGUu
c2V0U3R5bGUoZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgmZWxlbWVudCkpOwogICAgICAgICBzdGF0
ZS5zZXRQYXJlbnRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoKnN0YXRlLnN0eWxlKCkpKTsK
ICAgICB9CiAKQEAgLTI0Myw3ICsyMzgsNyBAQCBFbGVtZW50U3R5bGUgU3R5bGVSZXNvbHZlcjo6
c3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlcgogCiAg
ICAgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjplbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JFbGVt
ZW50KGVsZW1lbnQpOwogCi0gICAgRWxlbWVudFJ1bGVDb2xsZWN0b3IgY29sbGVjdG9yKGVsZW1l
bnQsIG1fcnVsZVNldHMsIG1fc3RhdGUuc2VsZWN0b3JGaWx0ZXIoKSk7CisgICAgRWxlbWVudFJ1
bGVDb2xsZWN0b3IgY29sbGVjdG9yKGVsZW1lbnQsIG1fcnVsZVNldHMsIHN0YXRlLnNlbGVjdG9y
RmlsdGVyKCkpOwogICAgIGNvbGxlY3Rvci5zZXRNZWRpdW0oJm1fbWVkaWFRdWVyeUV2YWx1YXRv
cik7CiAKICAgICBpZiAobWF0Y2hpbmdCZWhhdmlvciA9PSBSdWxlTWF0Y2hpbmdCZWhhdmlvcjo6
TWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpCkBAIC0yNjAsNyArMjU1LDcgQEAgRWxlbWVudFN0eWxl
IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50LCBj
b25zdCBSZW5kZXIKIAogICAgIGF1dG8gZWxlbWVudFN0eWxlUmVsYXRpb25zID0gU3R5bGU6OmNv
bW1pdFJlbGF0aW9uc1RvUmVuZGVyU3R5bGUoc3R5bGUsIGVsZW1lbnQsIGNvbGxlY3Rvci5zdHls
ZVJlbGF0aW9ucygpKTsKIAotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29sbGVjdG9yLm1h
dGNoUmVzdWx0KCksIGVsZW1lbnQpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoc3RhdGUs
IGNvbGxlY3Rvci5tYXRjaFJlc3VsdCgpLCBlbGVtZW50KTsKIAogICAgIFN0eWxlOjpBZGp1c3Rl
ciBhZGp1c3Rlcihkb2N1bWVudCgpLCAqc3RhdGUucGFyZW50U3R5bGUoKSwgcGFyZW50Qm94U3R5
bGUsICZlbGVtZW50KTsKICAgICBhZGp1c3Rlci5hZGp1c3QoKnN0YXRlLnN0eWxlKCksIHN0YXRl
LnVzZXJBZ2VudEFwcGVhcmFuY2VTdHlsZSgpKTsKQEAgLTI2OCwyNyArMjYzLDIzIEBAIEVsZW1l
bnRTdHlsZSBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgUmVuZGVyCiAgICAgaWYgKHN0YXRlLnN0eWxlKCktPmhhc1ZpZXdwb3J0VW5p
dHMoKSkKICAgICAgICAgZG9jdW1lbnQoKS5zZXRIYXNTdHlsZVdpdGhWaWV3cG9ydFVuaXRzKCk7
CiAKLSAgICBzdGF0ZS5jbGVhcigpOyAvLyBDbGVhciBvdXQgZm9yIHRoZSBuZXh0IHJlc29sdmUu
Ci0KICAgICByZXR1cm4geyBzdGF0ZS50YWtlU3R5bGUoKSwgV1RGTW92ZShlbGVtZW50U3R5bGVS
ZWxhdGlvbnMpIH07CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNv
bHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBj
b25zdCBTdHlsZVJ1bGVLZXlmcmFtZSoga2V5ZnJhbWUsIEtleWZyYW1lVmFsdWUmIGtleWZyYW1l
VmFsdWUpCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxl
Rm9yS2V5ZnJhbWUoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUqIGVs
ZW1lbnRTdHlsZSwgY29uc3QgU3R5bGVSdWxlS2V5ZnJhbWUqIGtleWZyYW1lLCBLZXlmcmFtZVZh
bHVlJiBrZXlmcmFtZVZhbHVlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lzRGVsZXRlZCk7
CiAKICAgICBNYXRjaFJlc3VsdCByZXN1bHQ7CiAgICAgcmVzdWx0LmF1dGhvckRlY2xhcmF0aW9u
cy5hcHBlbmQoeyAma2V5ZnJhbWUtPnByb3BlcnRpZXMoKSB9KTsKIAotICAgIEFTU0VSVCghbV9z
dGF0ZS5zdHlsZSgpKTsKLQotICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgYXV0byBz
dGF0ZSA9IFN0YXRlKGVsZW1lbnQsIG51bGxwdHIpOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBzdHls
ZQogICAgIHN0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZVB0cigqZWxlbWVudFN0eWxl
KSk7CiAgICAgc3RhdGUuc2V0UGFyZW50U3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRyKCplbGVt
ZW50U3R5bGUpKTsKIAotICAgIFN0eWxlOjpCdWlsZGVyIGJ1aWxkZXIoKnRoaXMsIHJlc3VsdCwg
eyBTdHlsZTo6Q2FzY2FkZUxldmVsOjpBdXRob3IgfSk7CisgICAgU3R5bGU6OkJ1aWxkZXIgYnVp
bGRlcigqc3RhdGUuc3R5bGUoKSwgYnVpbGRlckNvbnRleHQoc3RhdGUpLCByZXN1bHQsIHsgU3R5
bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9yIH0pOwogICAgIGJ1aWxkZXIuYXBwbHlBbGxQcm9wZXJ0
aWVzKCk7CiAKICAgICBTdHlsZTo6QWRqdXN0ZXIgYWRqdXN0ZXIoZG9jdW1lbnQoKSwgKnN0YXRl
LnBhcmVudFN0eWxlKCksIG51bGxwdHIsIG51bGxwdHIpOwpAQCAtMzcxLDEyICszNjIsMTAgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihjb25zdCBFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBSZW4KIAogICAgIC8vIENvbnN0cnVjdCBhbmQgcG9wdWxhdGUg
dGhlIHN0eWxlIGZvciBlYWNoIGtleWZyYW1lLgogICAgIGZvciAoYXV0byYga2V5ZnJhbWUgOiAq
a2V5ZnJhbWVzKSB7Ci0gICAgICAgIHNldE5ld1N0YXRlV2l0aEVsZW1lbnQoZWxlbWVudCk7Ci0K
ICAgICAgICAgLy8gQWRkIHRoaXMga2V5ZnJhbWUgc3R5bGUgdG8gYWxsIHRoZSBpbmRpY2F0ZWQg
a2V5IHRpbWVzCiAgICAgICAgIGZvciAoYXV0byBrZXkgOiBrZXlmcmFtZS0+a2V5cygpKSB7CiAg
ICAgICAgICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1lVmFsdWUoMCwgbnVsbHB0cik7Ci0gICAg
ICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0
eWxlLCBrZXlmcmFtZS5wdHIoKSwga2V5ZnJhbWVWYWx1ZSkpOworICAgICAgICAgICAga2V5ZnJh
bWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKGVsZW1lbnQsIGVsZW1lbnRTdHlsZSwg
a2V5ZnJhbWUucHRyKCksIGtleWZyYW1lVmFsdWUpKTsKICAgICAgICAgICAgIGtleWZyYW1lVmFs
dWUuc2V0S2V5KGtleSk7CiAgICAgICAgICAgICBpZiAoYXV0byB0aW1pbmdGdW5jdGlvbkNTU1Zh
bHVlID0ga2V5ZnJhbWUtPnByb3BlcnRpZXMoKS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3Bl
cnR5QW5pbWF0aW9uVGltaW5nRnVuY3Rpb24pKQogICAgICAgICAgICAgICAgIGtleWZyYW1lVmFs
dWUuc2V0VGltaW5nRnVuY3Rpb24oVGltaW5nRnVuY3Rpb246OmNyZWF0ZUZyb21DU1NWYWx1ZSgq
dGltaW5nRnVuY3Rpb25DU1NWYWx1ZS5nZXQoKSkpOwpAQCAtMzkzLDcgKzM4Miw3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oY29uc3QgRWxlbWVudCYg
ZWxlbWVudCwgY29uc3QgUmVuCiAgICAgICAgICAgICB6ZXJvUGVyY2VudEtleWZyYW1lLT5zZXRL
ZXkoMCk7CiAgICAgICAgIH0KICAgICAgICAgS2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDAs
IG51bGxwdHIpOwotICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJh
bWUoZWxlbWVudFN0eWxlLCB6ZXJvUGVyY2VudEtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7Cisg
ICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShlbGVtZW50LCBl
bGVtZW50U3R5bGUsIHplcm9QZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKICAgICAg
ICAgbGlzdC5pbnNlcnQoV1RGTW92ZShrZXlmcmFtZVZhbHVlKSk7CiAgICAgfQogCkBAIC00MDUs
MjIgKzM5NCwyMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0
aW9uKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbgogICAgICAgICAgICAgaHVuZHJl
ZFBlcmNlbnRLZXlmcmFtZS0+c2V0S2V5KDEpOwogICAgICAgICB9CiAgICAgICAgIEtleWZyYW1l
VmFsdWUga2V5ZnJhbWVWYWx1ZSgxLCBudWxscHRyKTsKLSAgICAgICAga2V5ZnJhbWVWYWx1ZS5z
ZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKGVsZW1lbnRTdHlsZSwgaHVuZHJlZFBlcmNlbnRLZXlm
cmFtZSwga2V5ZnJhbWVWYWx1ZSkpOworICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0
eWxlRm9yS2V5ZnJhbWUoZWxlbWVudCwgZWxlbWVudFN0eWxlLCBodW5kcmVkUGVyY2VudEtleWZy
YW1lLCBrZXlmcmFtZVZhbHVlKSk7CiAgICAgICAgIGxpc3QuaW5zZXJ0KFdURk1vdmUoa2V5ZnJh
bWVWYWx1ZSkpOwogICAgIH0KIH0KIAogc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHls
ZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwg
Y29uc3QgUHNldWRvU3R5bGVSZXF1ZXN0JiBwc2V1ZG9TdHlsZVJlcXVlc3QsIGNvbnN0IFJlbmRl
clN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudEJveFN0eWxlLCBj
b25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0b3JGaWx0ZXIpCiB7Ci0gICAgbV9zdGF0ZSA9IFN0
YXRlKGVsZW1lbnQsICZwYXJlbnRTdHlsZSwgbV9vdmVycmlkZURvY3VtZW50RWxlbWVudFN0eWxl
LCBzZWxlY3RvckZpbHRlcik7CisgICAgYXV0byBzdGF0ZSA9IFN0YXRlKGVsZW1lbnQsICZwYXJl
bnRTdHlsZSwgbV9vdmVycmlkZURvY3VtZW50RWxlbWVudFN0eWxlLCBzZWxlY3RvckZpbHRlcik7
CiAKLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotCi0gICAgaWYgKG1fc3RhdGUucGFyZW50
U3R5bGUoKSkgeworICAgIGlmIChzdGF0ZS5wYXJlbnRTdHlsZSgpKSB7CiAgICAgICAgIHN0YXRl
LnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGVQdHIoKSk7Ci0gICAgICAgIHN0YXRlLnN0eWxl
KCktPmluaGVyaXRGcm9tKCptX3N0YXRlLnBhcmVudFN0eWxlKCkpOworICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5pbmhlcml0RnJvbSgqc3RhdGUucGFyZW50U3R5bGUoKSk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgc3RhdGUuc2V0U3R5bGUoZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpKTsKKyAgICAg
ICAgc3RhdGUuc2V0U3R5bGUoZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgmZWxlbWVudCkpOwogICAg
ICAgICBzdGF0ZS5zZXRQYXJlbnRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoKnN0YXRlLnN0
eWxlKCkpKTsKICAgICB9CiAKQEAgLTQyOCw3ICs0MTUsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChjb25zdCBFbGVt
ZW50JgogICAgIC8vIHRob3NlIHJ1bGVzLgogCiAgICAgLy8gQ2hlY2sgVUEsIHVzZXIgYW5kIGF1
dGhvciBydWxlcy4KLSAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IoZWxlbWVudCwg
bV9ydWxlU2V0cywgbV9zdGF0ZS5zZWxlY3RvckZpbHRlcigpKTsKKyAgICBFbGVtZW50UnVsZUNv
bGxlY3RvciBjb2xsZWN0b3IoZWxlbWVudCwgbV9ydWxlU2V0cywgc3RhdGUuc2VsZWN0b3JGaWx0
ZXIoKSk7CiAgICAgY29sbGVjdG9yLnNldFBzZXVkb1N0eWxlUmVxdWVzdChwc2V1ZG9TdHlsZVJl
cXVlc3QpOwogICAgIGNvbGxlY3Rvci5zZXRNZWRpdW0oJm1fbWVkaWFRdWVyeUV2YWx1YXRvcik7
CiAgICAgY29sbGVjdG9yLm1hdGNoVUFSdWxlcygpOwpAQCAtNDQ1LDcgKzQzMiw3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVt
ZW50KGNvbnN0IEVsZW1lbnQmCiAKICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRTdHlsZVR5cGUocHNl
dWRvU3R5bGVSZXF1ZXN0LnBzZXVkb0lkKTsKIAotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMo
Y29sbGVjdG9yLm1hdGNoUmVzdWx0KCksIGVsZW1lbnQpOworICAgIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXMoc3RhdGUsIGNvbGxlY3Rvci5tYXRjaFJlc3VsdCgpLCBlbGVtZW50KTsKIAogICAgIFN0
eWxlOjpBZGp1c3RlciBhZGp1c3Rlcihkb2N1bWVudCgpLCAqc3RhdGUucGFyZW50U3R5bGUoKSwg
cGFyZW50Qm94U3R5bGUsIG51bGxwdHIpOwogICAgIGFkanVzdGVyLmFkanVzdCgqc3RhdGUuc3R5
bGUoKSwgc3RhdGUudXNlckFnZW50QXBwZWFyYW5jZVN0eWxlKCkpOwpAQCAtNDY1LDMwICs0NTIs
NDIgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZv
clBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkKICAgICAgICAg
cmV0dXJuIFJlbmRlclN0eWxlOjpjcmVhdGVQdHIoKTsKIAotICAgIG1fc3RhdGUgPSBTdGF0ZSgq
ZG9jdW1lbnRFbGVtZW50LCBtX2RvY3VtZW50LnJlbmRlclN0eWxlKCkpOworICAgIGF1dG8gc3Rh
dGUgPSBTdGF0ZSgqZG9jdW1lbnRFbGVtZW50LCBtX2RvY3VtZW50LnJlbmRlclN0eWxlKCkpOwog
Ci0gICAgbV9zdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlUHRyKCkpOwotICAgIG1f
c3RhdGUuc3R5bGUoKS0+aW5oZXJpdEZyb20oKm1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsK
KyAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlUHRyKCkpOworICAgIHN0YXRl
LnN0eWxlKCktPmluaGVyaXRGcm9tKCpzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOwogCi0gICAg
UGFnZVJ1bGVDb2xsZWN0b3IgY29sbGVjdG9yKG1fc3RhdGUsIG1fcnVsZVNldHMpOworICAgIFBh
Z2VSdWxlQ29sbGVjdG9yIGNvbGxlY3RvcihzdGF0ZSwgbV9ydWxlU2V0cyk7CiAgICAgY29sbGVj
dG9yLm1hdGNoQWxsUGFnZVJ1bGVzKHBhZ2VJbmRleCk7CiAKICAgICBhdXRvJiByZXN1bHQgPSBj
b2xsZWN0b3IubWF0Y2hSZXN1bHQoKTsKIAotICAgIFN0eWxlOjpCdWlsZGVyIGJ1aWxkZXIoKnRo
aXMsIHJlc3VsdCwgeyBTdHlsZTo6Q2FzY2FkZUxldmVsOjpBdXRob3IgfSk7CisgICAgU3R5bGU6
OkJ1aWxkZXIgYnVpbGRlcigqc3RhdGUuc3R5bGUoKSwgYnVpbGRlckNvbnRleHQoc3RhdGUpLCBy
ZXN1bHQsIHsgU3R5bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9yIH0pOwogICAgIGJ1aWxkZXIuYXBw
bHlBbGxQcm9wZXJ0aWVzKCk7CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICBy
ZXR1cm4gbV9zdGF0ZS50YWtlU3R5bGUoKTsKKyAgICByZXR1cm4gc3RhdGUudGFrZVN0eWxlKCk7
CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6ZGVmYXVs
dFN0eWxlRm9yRWxlbWVudCgpCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVz
b2x2ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsK
LSAgICBtX3N0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGVQdHIoKSk7Ci0gICAgLy8g
TWFrZSBzdXJlIG91ciBmb250cyBhcmUgaW5pdGlhbGl6ZWQgaWYgd2UgZG9uJ3QgaW5oZXJpdCB0
aGVtIGZyb20gb3VyIHBhcmVudCBzdHlsZS4KLSAgICBpbml0aWFsaXplRm9udFN0eWxlKCk7Ci0g
ICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250Q2FzY2FkZSgpLnVwZGF0ZSgmZG9jdW1lbnQoKS5mb250
U2VsZWN0b3IoKSk7Ci0gICAgcmV0dXJuIG1fc3RhdGUudGFrZVN0eWxlKCk7CisgICAgYXV0byBz
dHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVQdHIoKTsKKworICAgIEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdN
b2RlKHNldHRpbmdzKCkuZm9udFJlbmRlcmluZ01vZGUoKSk7CisgICAgZm9udERlc2NyaXB0aW9u
LnNldE9uZUZhbWlseShzdGFuZGFyZEZhbWlseSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEtl
eXdvcmRTaXplRnJvbUlkZW50aWZpZXIoQ1NTVmFsdWVNZWRpdW0pOworCisgICAgYXV0byBzaXpl
ID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1ZU1lZGl1bSwgZmFsc2UsIGRvY3Vt
ZW50KCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOworICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNpemVG
cm9tU3BlY2lmaWVkU2l6ZShzaXplLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwg
aXM8U1ZHRWxlbWVudD4oZWxlbWVudCksIHN0eWxlLmdldCgpLCBkb2N1bWVudCgpKSk7CisKKyAg
ICBmb250RGVzY3JpcHRpb24uc2V0U2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoc2V0dGlu
Z3MoKS5zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cygpID8gQWxsb3dVc2VySW5zdGFsbGVk
Rm9udHM6OlllcyA6IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObyk7CisgICAgc3R5bGUtPnNl
dEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworCisgICAgc3R5bGUt
PmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKKworICAg
IHJldHVybiBzdHlsZTsKIH0KIAogVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiBTdHlsZVJlc29s
dmVyOjpzdHlsZVJ1bGVzRm9yRWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50LCB1bnNpZ25l
ZCBydWxlc1RvSW5jbHVkZSkKQEAgLTUwMSw5ICs1MDAsOSBAQCBWZWN0b3I8UmVmUHRyPFN0eWxl
UnVsZT4+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGNvbnN0IEVs
ZW1lbgogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIG1fc3Rh
dGUgPSBTdGF0ZSgqZWxlbWVudCwgbnVsbHB0cik7CisgICAgYXV0byBzdGF0ZSA9IFN0YXRlKCpl
bGVtZW50LCBudWxscHRyKTsKIAotICAgIEVsZW1lbnRSdWxlQ29sbGVjdG9yIGNvbGxlY3Rvcigq
ZWxlbWVudCwgbV9ydWxlU2V0cywgbV9zdGF0ZS5zZWxlY3RvckZpbHRlcigpKTsKKyAgICBFbGVt
ZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IoKmVsZW1lbnQsIG1fcnVsZVNldHMsIG51bGxwdHIp
OwogICAgIGNvbGxlY3Rvci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6Q29sbGVjdGlu
Z1J1bGVzKTsKICAgICBjb2xsZWN0b3Iuc2V0UHNldWRvU3R5bGVSZXF1ZXN0KFBzZXVkb1N0eWxl
UmVxdWVzdChwc2V1ZG9JZCkpOwogICAgIGNvbGxlY3Rvci5zZXRNZWRpdW0oJm1fbWVkaWFRdWVy
eUV2YWx1YXRvcik7CkBAIC01NDYsOSArNTQ1LDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjbGVh
ckNhY2hlZERlY2xhcmF0aW9uc0FmZmVjdGVkQnlWaWV3cG9ydFVuaXRzKCkKICAgICBtX21hdGNo
ZWREZWNsYXJhdGlvbnNDYWNoZS5jbGVhckVudHJpZXNBZmZlY3RlZEJ5Vmlld3BvcnRVbml0cygp
OwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3Qg
TWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50LCBVc2VNYXRj
aGVkRGVjbGFyYXRpb25zQ2FjaGUgdXNlTWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlKQordm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKFN0YXRlJiBzdGF0ZSwgY29uc3Qg
TWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50LCBVc2VNYXRj
aGVkRGVjbGFyYXRpb25zQ2FjaGUgdXNlTWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlKQogewotICAg
IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgdW5zaWduZWQgY2FjaGVIYXNoID0gdXNlTWF0
Y2hlZERlY2xhcmF0aW9uc0NhY2hlID09IFVzZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZTo6WWVz
ID8gU3R5bGU6Ok1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZTo6Y29tcHV0ZUhhc2gobWF0Y2hSZXN1
bHQpIDogMDsKICAgICBhdXRvIGluY2x1ZGVkUHJvcGVydGllcyA9IFN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGU6OkluY2x1ZGVkUHJvcGVydGllczo6QWxsOwogCkBAIC01NzksMjQgKzU3NywyNCBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1
bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgICAgICAvLyBJZiBzbywgd2UgY2FjaGUgdGhlIGJv
cmRlciBhbmQgYmFja2dyb3VuZCBzdHlsZXMgc28gdGhhdCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5
bGUoKQogICAgICAgICAvLyBjYW4gbG9vayBhdCB0aGVtIGxhdGVyIHRvIGZpZ3VyZSBvdXQgaWYg
dGhpcyBpcyBhIHN0eWxlZCBmb3JtIGNvbnRyb2wgb3Igbm90LgogICAgICAgICBhdXRvIHVzZXJB
Z2VudFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKHN0eWxlKTsKLSAgICAgICAgU3R5bGU6
OkJ1aWxkZXIgYnVpbGRlcigqdXNlckFnZW50U3R5bGUsICp0aGlzLCBtYXRjaFJlc3VsdCwgeyBT
dHlsZTo6Q2FzY2FkZUxldmVsOjpVc2VyQWdlbnQgfSk7CisgICAgICAgIFN0eWxlOjpCdWlsZGVy
IGJ1aWxkZXIoKnVzZXJBZ2VudFN0eWxlLCBidWlsZGVyQ29udGV4dChzdGF0ZSksIG1hdGNoUmVz
dWx0LCB7IFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCB9KTsKICAgICAgICAgYnVpbGRl
ci5hcHBseUFsbFByb3BlcnRpZXMoKTsKIAogICAgICAgICBzdGF0ZS5zZXRVc2VyQWdlbnRBcHBl
YXJhbmNlU3R5bGUoV1RGTW92ZSh1c2VyQWdlbnRTdHlsZSkpOwogICAgIH0KIAotICAgIFN0eWxl
OjpCdWlsZGVyIGJ1aWxkZXIoKnRoaXMsIG1hdGNoUmVzdWx0LCBTdHlsZTo6YWxsQ2FzY2FkZUxl
dmVscygpLCBpbmNsdWRlZFByb3BlcnRpZXMpOworICAgIFN0eWxlOjpCdWlsZGVyIGJ1aWxkZXIo
KnN0YXRlLnN0eWxlKCksIGJ1aWxkZXJDb250ZXh0KHN0YXRlKSwgbWF0Y2hSZXN1bHQsIFN0eWxl
OjphbGxDYXNjYWRlTGV2ZWxzKCksIGluY2x1ZGVkUHJvcGVydGllcyk7CiAKICAgICAvLyBIaWdo
IHByaW9yaXR5IHByb3BlcnRpZXMgbWF5IGFmZmVjdCByZXNvbHV0aW9uIG9mIG90aGVyIHByb3Bl
cnRpZXMgKHRoZXkgYXJlIG1vc3RseSBmb250IHJlbGF0ZWQpLgogICAgIGJ1aWxkZXIuYXBwbHlI
aWdoUHJpb3JpdHlQcm9wZXJ0aWVzKCk7CiAKICAgICAvLyBJZiB0aGUgZWZmZWN0aXZlIHpvb20g
dmFsdWUgY2hhbmdlcywgd2UgY2FuJ3QgdXNlIHRoZSBtYXRjaGVkIHByb3BlcnRpZXMgY2FjaGUu
IFN0YXJ0IG92ZXIuCiAgICAgaWYgKGNhY2hlRW50cnkgJiYgY2FjaGVFbnRyeS0+cmVuZGVyU3R5
bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBzdHlsZS5lZmZlY3RpdmVab29tKCkpCi0gICAgICAgIHJl
dHVybiBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlbGVtZW50LCBVc2VNYXRj
aGVkRGVjbGFyYXRpb25zQ2FjaGU6Ok5vKTsKKyAgICAgICAgcmV0dXJuIGFwcGx5TWF0Y2hlZFBy
b3BlcnRpZXMoc3RhdGUsIG1hdGNoUmVzdWx0LCBlbGVtZW50LCBVc2VNYXRjaGVkRGVjbGFyYXRp
b25zQ2FjaGU6Ok5vKTsKIAogICAgIC8vIElmIHRoZSBmb250IGNoYW5nZWQsIHdlIGNhbid0IHVz
ZSB0aGUgbWF0Y2hlZCBwcm9wZXJ0aWVzIGNhY2hlLiBTdGFydCBvdmVyLgogICAgIGlmIChjYWNo
ZUVudHJ5ICYmIGNhY2hlRW50cnktPnJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRpb24oKSAhPSBz
dHlsZS5mb250RGVzY3JpcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXMobWF0Y2hSZXN1bHQsIGVsZW1lbnQsIFVzZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZTo6
Tm8pOworICAgICAgICByZXR1cm4gYXBwbHlNYXRjaGVkUHJvcGVydGllcyhzdGF0ZSwgbWF0Y2hS
ZXN1bHQsIGVsZW1lbnQsIFVzZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZTo6Tm8pOwogCiAgICAg
YnVpbGRlci5hcHBseUxvd1ByaW9yaXR5UHJvcGVydGllcygpOwogCkBAIC02MTAsMzkgKzYwOCw2
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRj
aFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIG1fbWF0Y2hlZERlY2xhcmF0aW9u
c0NhY2hlLmFkZChzdHlsZSwgcGFyZW50U3R5bGUsIGNhY2hlSGFzaCwgbWF0Y2hSZXN1bHQpOwog
fQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHls
ZSkKLXsKLSAgICBtX3N0YXRlID0gU3RhdGUoKTsKLSAgICBtX3N0YXRlLnNldFBhcmVudFN0eWxl
KFJlbmRlclN0eWxlOjpjbG9uZVB0cigqc3R5bGUpKTsKLSAgICBtX3N0YXRlLnNldFN0eWxlKFdU
Rk1vdmUoc3R5bGUpKTsKLSAgICBhcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoaWQsIHZhbHVl
KTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUo
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICghdmFsdWUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0OwotICAgIFN0eWxl
OjpCdWlsZGVyIGJ1aWxkZXIoKnRoaXMsIG1hdGNoUmVzdWx0LCB7IH0pOwotICAgIGJ1aWxkZXIu
YXBwbHlQcm9wZXJ0eVZhbHVlKGlkLCAqdmFsdWUpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6
OmluaXRpYWxpemVGb250U3R5bGUoKQotewotICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRp
bmdzKCkuZm9udFJlbmRlcmluZ01vZGUoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZh
bWlseShzdGFuZGFyZEZhbWlseSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXpl
RnJvbUlkZW50aWZpZXIoQ1NTVmFsdWVNZWRpdW0pOwotCi0gICAgYXV0byBzaXplID0gU3R5bGU6
OmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1ZU1lZGl1bSwgZmFsc2UsIGRvY3VtZW50KCkpOwot
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNpemVGcm9tU3BlY2lm
aWVkU2l6ZShzaXplLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgaXM8U1ZHRWxl
bWVudD4obV9zdGF0ZS5lbGVtZW50KCkpLCBtX3N0YXRlLnN0eWxlKCksIGRvY3VtZW50KCkpKTsK
LQotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyhz
ZXR0aW5ncygpLnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKCkgPyBBbGxvd1VzZXJJbnN0
YWxsZWRGb250czo6WWVzIDogQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKTsKLSAgICBzdHls
ZSgpLT5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKLX0KLQog
dm9pZCBTdHlsZVJlc29sdmVyOjphZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQo
Y29uc3QgTWVkaWFRdWVyeUV4cHJlc3Npb24mIGV4cHJlc3Npb24sIGJvb2wgcmVzdWx0KQogewog
ICAgIG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cy5hcHBlbmQoTWVkaWFRdWVy
eVJlc3VsdCB7IGV4cHJlc3Npb24sIHJlc3VsdCB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5oCmluZGV4IDkzZTVjNDM1OGZmLi45MjE3YTQ0ZTJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRv
ci5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUnVsZVNldC5oIgorI2lu
Y2x1ZGUgIlN0eWxlQnVpbGRlclN0YXRlLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMTEyLDEyICsxMTMs
OCBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHls
ZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYsIGNvbnN0IFBzZXVkb1N0eWxlUmVxdWVzdCYsIGNv
bnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudEJv
eFN0eWxlID0gbnVsbHB0ciwgY29uc3QgU2VsZWN0b3JGaWx0ZXIqID0gbnVsbHB0cik7CiAKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4
KTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGRlZmF1bHRTdHlsZUZvckVsZW1l
bnQoKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGRlZmF1bHRTdHlsZUZvckVs
ZW1lbnQoY29uc3QgRWxlbWVudCopOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5zdHlsZSgpOyB9Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnRTdHlsZSgpOyB9Ci0gICAgY29u
c3QgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnJvb3RFbGVtZW50U3R5bGUoKTsgfQotICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLmVsZW1lbnQoKTsgfQogICAgIERvY3VtZW50JiBkb2N1bWVudCgp
IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAgICAgY29uc3QgU2V0dGluZ3MmIHNldHRpbmdz
KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudC5zZXR0aW5ncygpOyB9CkBAIC0xMzQsOCArMTMx
LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRDdXJyZW50U1ZHRm9udEZhY2VSdWxlcygpOwog
Ci0gICAgdm9pZCBzZXROZXdTdGF0ZVdpdGhFbGVtZW50KGNvbnN0IEVsZW1lbnQmKTsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVy
U3R5bGUqLCBjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZSosIEtleWZyYW1lVmFsdWUmKTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgRWxlbWVu
dCYsIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVSdWxlS2V5ZnJhbWUqLCBLZXlmcmFt
ZVZhbHVlJik7CiAgICAgYm9vbCBpc0FuaW1hdGlvbk5hbWVWYWxpZChjb25zdCBTdHJpbmcmKTsK
IAogICAgIC8vIFRoZXNlIG1ldGhvZHMgd2lsbCBnaXZlIGJhY2sgdGhlIHNldCBvZiBydWxlcyB0
aGF0IG1hdGNoZWQgZm9yIGEgZ2l2ZW4gZWxlbWVudCAob3IgYSBwc2V1ZG8tZWxlbWVudCkuCkBA
IC0xNDksMTEgKzE0NSw2IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+
IHN0eWxlUnVsZXNGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQqLCB1bnNpZ25lZCBydWxlc1RvSW5j
bHVkZSA9IEFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxl
Pj4gcHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoY29uc3QgRWxlbWVudCosIFBzZXVkb0lkLCB1
bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9IEFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwogCi0gICAgdm9p
ZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4pOwotICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0
eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7Ci0KLSAgICB2b2lkIGluaXRpYWxpemVGb250
U3R5bGUoKTsKLQogICAgIGJvb2wgaGFzU2VsZWN0b3JGb3JJZChjb25zdCBBdG9tU3RyaW5nJikg
Y29uc3Q7CiAgICAgYm9vbCBoYXNTZWxlY3RvckZvckF0dHJpYnV0ZShjb25zdCBFbGVtZW50Jiwg
Y29uc3QgQXRvbVN0cmluZyYpIGNvbnN0OwogCkBAIC0xODEsMjQgKzE3MiwxNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBpbnZhbGlkYXRlTWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlKCk7CiAgICAgdm9p
ZCBjbGVhckNhY2hlZERlY2xhcmF0aW9uc0FmZmVjdGVkQnlWaWV3cG9ydFVuaXRzKCk7CiAKLXBy
aXZhdGU6Ci0gICAgZW51bSBjbGFzcyBVc2VNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUgeyBZZXMs
IE5vIH07Ci0gICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0
JiwgY29uc3QgRWxlbWVudCYsIFVzZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZSA9IFVzZU1hdGNo
ZWREZWNsYXJhdGlvbnNDYWNoZTo6WWVzKTsKLQotICAgIERvY3VtZW50UnVsZVNldHMgbV9ydWxl
U2V0czsKKyAgICBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJz
KCkgeyByZXR1cm4gbV9pbnNwZWN0b3JDU1NPTVdyYXBwZXJzOyB9CiAKLSAgICB0eXBlZGVmIEhh
c2hNYXA8QXRvbVN0cmluZ0ltcGwqLCBSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPj4gS2V5ZnJh
bWVzUnVsZU1hcDsKLSAgICBLZXlmcmFtZXNSdWxlTWFwIG1fa2V5ZnJhbWVzUnVsZU1hcDsKK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBhZ2VSdWxlQ29sbGVjdG9yOwogCi1wdWJsaWM6CiAg
ICAgY2xhc3MgU3RhdGUgewogICAgIHB1YmxpYzoKICAgICAgICAgU3RhdGUoKSB7IH0KICAgICAg
ICAgU3RhdGUoY29uc3QgRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGRvY3VtZW50RWxlbWVudFN0eWxlID0gbnVsbHB0ciwgY29uc3Qg
U2VsZWN0b3JGaWx0ZXIqID0gbnVsbHB0cik7CiAKICAgICBwdWJsaWM6Ci0gICAgICAgIHZvaWQg
Y2xlYXIoKTsKLQogICAgICAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9lbGVtZW50OyB9CiAKICAgICAgICAgdm9pZCBzZXRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyU3R5bGU+KTsKQEAgLTIyNiwxMyArMjEwLDE1IEBAIHB1YmxpYzoKICAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX3VzZXJBZ2VudEFwcGVhcmFuY2VTdHlsZTsKICAg
ICB9OwogCi0gICAgU3RhdGUmIHN0YXRlKCkgeyByZXR1cm4gbV9zdGF0ZTsgfQotICAgIGNvbnN0
IFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICBTdHlsZTo6QnVp
bGRlckNvbnRleHQgYnVpbGRlckNvbnRleHQoY29uc3QgU3RhdGUmKTsKIAotICAgIEluc3BlY3Rv
ckNTU09NV3JhcHBlcnMmIGluc3BlY3RvckNTU09NV3JhcHBlcnMoKSB7IHJldHVybiBtX2luc3Bl
Y3RvckNTU09NV3JhcHBlcnM7IH0KKyAgICBlbnVtIGNsYXNzIFVzZU1hdGNoZWREZWNsYXJhdGlv
bnNDYWNoZSB7IFllcywgTm8gfTsKKyAgICB2b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoU3Rh
dGUmLCBjb25zdCBNYXRjaFJlc3VsdCYsIGNvbnN0IEVsZW1lbnQmLCBVc2VNYXRjaGVkRGVjbGFy
YXRpb25zQ2FjaGUgPSBVc2VNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGU6Olllcyk7CiAKLXByaXZh
dGU6Ci0gICAgdm9pZCBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKKyAgICBEb2N1bWVudFJ1
bGVTZXRzIG1fcnVsZVNldHM7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbVN0cmluZ0ltcGwq
LCBSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPj4gS2V5ZnJhbWVzUnVsZU1hcDsKKyAgICBLZXlm
cmFtZXNSdWxlTWFwIG1fa2V5ZnJhbWVzUnVsZU1hcDsKIAogICAgIE1lZGlhUXVlcnlFdmFsdWF0
b3IgbV9tZWRpYVF1ZXJ5RXZhbHVhdG9yOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4gbV9yb290RGVmYXVsdFN0eWxlOwpAQCAtMjUxLDggKzIzNyw2IEBAIHByaXZhdGU6CiAKICAg
ICBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzIG1faW5zcGVjdG9yQ1NTT01XcmFwcGVyczsKIAotICAg
IFN0YXRlIG1fc3RhdGU7Ci0KICAgICBTdHlsZTo6TWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlIG1f
bWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlOwogCiAgICAgYm9vbCBtX21hdGNoQXV0aG9yQW5kVXNl
clN0eWxlcyB7IHRydWUgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4IGFkYzAzNjE5ZmNiLi42MjQ0NzQx
NmZiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC00Myw4ICs0Myw4IEBACiAjaW5jbHVkZSAiUmVuZGVy
VGhlbWUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgogI2luY2x1ZGUgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKICNpbmNs
dWRlICJTdHlsZVByb3BlcnRpZXMuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5j
bHVkZSAiVGV4dE1ldHJpY3MuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3Rm
L0NoZWNrZWRBcml0aG1ldGljLmg+CkBAIC0xNzEsMTUgKzE3MSwxOSBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjb25zdCBTdHJpbmcmIG5ld0ZvbnQpCiAgICAgbmV3
U3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudC5mb250U2VsZWN0b3IoKSk7CiAK
ICAgICAvLyBOb3cgbWFwIHRoZSBmb250IHByb3BlcnR5IGxvbmdoYW5kcyBpbnRvIHRoZSBzdHls
ZS4KLSAgICBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyID0gY2FudmFzKCkuc3R5bGVSZXNv
bHZlcigpOwotICAgIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVy
dHlGb250RmFtaWx5LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eUZvbnRGYW1pbHkpLmdldCgpLCBXVEZNb3ZlKG5ld1N0eWxlKSk7Ci0gICAgc3R5bGVSZXNvbHZl
ci5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlGb250U3R5bGUsIHBhcnNl
ZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFN0eWxlKS5nZXQoKSk7
Ci0gICAgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVy
dHlGb250VmFyaWFudENhcHMsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1By
b3BlcnR5Rm9udFZhcmlhbnRDYXBzKS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5hcHBseVBy
b3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBwYXJzZWRTdHlsZS0+
Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpLmdldCgpKTsKLSAgICBz
dHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRT
aXplLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXpl
KS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUo
Q1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShD
U1NQcm9wZXJ0eUxpbmVIZWlnaHQpLmdldCgpKTsKLQotICAgIG1vZGlmaWFibGVTdGF0ZSgpLmZv
bnQuaW5pdGlhbGl6ZShkb2N1bWVudC5mb250U2VsZWN0b3IoKSwgKnN0eWxlUmVzb2x2ZXIuc3R5
bGUoKSk7CisKKyAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKKyAgICBhdXRvIHBhcmVudFN0
eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKCpuZXdTdHlsZSk7CisgICAgV2ViQ29yZTo6U3R5bGU6
OkJ1aWxkZXIgc3R5bGVCdWlsZGVyKCpuZXdTdHlsZSwgeyBkb2N1bWVudCwgcGFyZW50U3R5bGUg
fSwgbWF0Y2hSZXN1bHQsIHsgfSk7CisKKyAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZh
bHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFs
dWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KS5nZXQoKSk7CisgICAgc3R5bGVCdWlsZGVyLmFwcGx5
UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgcGFyc2VkU3R5bGUtPmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUpLmdldCgpKTsKKyAgICBzdHlsZUJ1aWxk
ZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzLCBwYXJzZWRT
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2FwcykuZ2V0
KCkpOworICAgIHN0eWxlQnVpbGRlci5hcHBseVByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlGb250
V2VpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRX
ZWlnaHQpLmdldCgpKTsKKyAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKENTU1By
b3BlcnR5Rm9udFNpemUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3Bl
cnR5Rm9udFNpemUpLmdldCgpKTsKKyAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVl
KENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQoKSk7CisKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5m
b250LmluaXRpYWxpemUoZG9jdW1lbnQuZm9udFNlbGVjdG9yKCksICpuZXdTdHlsZSk7CiB9CiAK
IHN0YXRpYyBDYW52YXNUZXh0QWxpZ24gdG9DYW52YXNUZXh0QWxpZ24oVGV4dEFsaWduIHRleHRB
bGlnbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5o
IGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNjYWRlLmgKaW5kZXggMDA3NWY3ZmVi
ZDkuLjU0OGM5ZGUzNzUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0
eUNhc2NhZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaApA
QCAtMzYsMzMgKzM2LDYgQEAgY2xhc3MgU3R5bGVSZXNvbHZlcjsKIAogbmFtZXNwYWNlIFN0eWxl
IHsKIAotaW5saW5lIGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCkKLXsKLSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJU
b3BDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3I6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUNhcmV0Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVt
blJ1bGVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb25Db2xvcjoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzQ29sb3I6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRTdHJva2VDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5RmlsbDoKLSAgICBjYXNlIENTU1By
b3BlcnR5U3Ryb2tlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VDb2xvcjoKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCiBjbGFzcyBQcm9wZXJ0eUNhc2NhZGUgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlci5j
cHAKaW5kZXggMTMyODk2Y2NiZDMuLmQ0YzYwMGU4NGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlQnVpbGRlci5jcHAKQEAgLTM3LDI5ICszNyw0OCBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgi
CiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyR2VuZXJhdGVkLmgiCiAjaW5jbHVkZSAiU3R5bGVGb250
U2l6ZUZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogbmFtZXNwYWNlIFN0eWxlIHsKIAogc3RhdGljIGNvbnN0IENTU1Byb3BlcnR5
SUQgZmlyc3RMb3dQcmlvcml0eVByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4o
bGFzdEhpZ2hQcmlvcml0eVByb3BlcnR5ICsgMSk7CiAKLXN0YXRpYyBQcm9wZXJ0eUNhc2NhZGU6
OkRpcmVjdGlvbiBkaXJlY3Rpb25Gcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQor
aW5saW5lIFByb3BlcnR5Q2FzY2FkZTo6RGlyZWN0aW9uIGRpcmVjdGlvbkZyb21TdHlsZShjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIHsgc3R5bGUuZGlyZWN0aW9uKCks
IHN0eWxlLndyaXRpbmdNb2RlKCkgfTsKIH0KIAotQnVpbGRlcjo6QnVpbGRlcihSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IFN0eWxlUmVzb2x2ZXImIHJlc29sdmVyLCBjb25zdCBNYXRjaFJlc3Vs
dCYgbWF0Y2hSZXN1bHQsIE9wdGlvblNldDxDYXNjYWRlTGV2ZWw+IGNhc2NhZGVMZXZlbHMsIFBy
b3BlcnR5Q2FzY2FkZTo6SW5jbHVkZWRQcm9wZXJ0aWVzIGluY2x1ZGVkUHJvcGVydGllcykKLSAg
ICA6IG1fY2FzY2FkZShtYXRjaFJlc3VsdCwgY2FzY2FkZUxldmVscywgaW5jbHVkZWRQcm9wZXJ0
aWVzLCBkaXJlY3Rpb25Gcm9tU3R5bGUoc3R5bGUpKQotICAgICwgbV9zdGF0ZSgqdGhpcywgc3R5
bGUsICpyZXNvbHZlci5wYXJlbnRTdHlsZSgpLCByZXNvbHZlci5yb290RWxlbWVudFN0eWxlKCks
IHJlc29sdmVyLmRvY3VtZW50KCksIHJlc29sdmVyLmVsZW1lbnQoKSkKK2lubGluZSBib29sIGlz
VmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCiB7Ci0gICAgQVNTRVJU
KHJlc29sdmVyLnBhcmVudFN0eWxlKCkpOworICAgIHN3aXRjaCAoaWQpIHsKKyAgICBjYXNlIENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0
Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3I6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0
b21Db2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Q2FyZXRDb2xvcjoKKyAgICBjYXNlIENTU1By
b3BlcnR5Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcjoKKyAgICBjYXNl
IENTU1Byb3BlcnR5Q29sdW1uUnVsZUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0RGVj
b3JhdGlvbkNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNDb2xv
cjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcjoKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxs
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9r
ZUNvbG9yOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUJ1aWxkZXI6OkJ1aWxkZXIoU3R5
bGVSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgT3B0
aW9uU2V0PENhc2NhZGVMZXZlbD4gY2FzY2FkZUxldmVscywgUHJvcGVydHlDYXNjYWRlOjpJbmNs
dWRlZFByb3BlcnRpZXMgaW5jbHVkZWRQcm9wZXJ0aWVzKQotICAgIDogQnVpbGRlcigqcmVzb2x2
ZXIuc3R5bGUoKSwgcmVzb2x2ZXIsIG1hdGNoUmVzdWx0LCBjYXNjYWRlTGV2ZWxzLCBpbmNsdWRl
ZFByb3BlcnRpZXMpCitCdWlsZGVyOjpCdWlsZGVyKFJlbmRlclN0eWxlJiBzdHlsZSwgQnVpbGRl
ckNvbnRleHQmJiBjb250ZXh0LCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIE9wdGlv
blNldDxDYXNjYWRlTGV2ZWw+IGNhc2NhZGVMZXZlbHMsIFByb3BlcnR5Q2FzY2FkZTo6SW5jbHVk
ZWRQcm9wZXJ0aWVzIGluY2x1ZGVkUHJvcGVydGllcykKKyAgICA6IG1fY2FzY2FkZShtYXRjaFJl
c3VsdCwgY2FzY2FkZUxldmVscywgaW5jbHVkZWRQcm9wZXJ0aWVzLCBkaXJlY3Rpb25Gcm9tU3R5
bGUoc3R5bGUpKQorICAgICwgbV9zdGF0ZSgqdGhpcywgc3R5bGUsIFdURk1vdmUoY29udGV4dCkp
CiB7Ci0gICAgQVNTRVJUKHJlc29sdmVyLnN0eWxlKCkpOwogfQogCiBCdWlsZGVyOjp+QnVpbGRl
cigpID0gZGVmYXVsdDsKQEAgLTk3LDkgKzExNiwxMiBAQCB2b2lkIEJ1aWxkZXI6OmFwcGx5TG93
UHJpb3JpdHlQcm9wZXJ0aWVzKCkKICAgICBBU1NFUlQoIW1fc3RhdGUuZm9udERpcnR5KCkpOwog
fQogCi12b2lkIEJ1aWxkZXI6OmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQsIENTU1ZhbHVlJiB2YWx1ZSkKK3ZvaWQgQnVpbGRlcjo6YXBwbHlQcm9wZXJ0eVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgQ1NTVmFsdWUqIHZhbHVlKQogewotICAgIGFwcGx5
UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0
KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm47CisKKyAgICBhcHBseVByb3BlcnR5
KHByb3BlcnR5SUQsICp2YWx1ZSwgU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQpOwogCiAg
ICAgbV9zdGF0ZS51cGRhdGVGb250KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlci5o
CmluZGV4IDQ2M2Q4NTc0NzljLi4xMGFlNjc2MjI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVC
dWlsZGVyLmgKQEAgLTM1LDggKzM1LDcgQEAgbmFtZXNwYWNlIFN0eWxlIHsKIGNsYXNzIEJ1aWxk
ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEJ1aWxkZXIo
UmVuZGVyU3R5bGUmLCBjb25zdCBTdHlsZVJlc29sdmVyJiwgY29uc3QgTWF0Y2hSZXN1bHQmLCBP
cHRpb25TZXQ8Q2FzY2FkZUxldmVsPiwgUHJvcGVydHlDYXNjYWRlOjpJbmNsdWRlZFByb3BlcnRp
ZXMgPSBQcm9wZXJ0eUNhc2NhZGU6OkluY2x1ZGVkUHJvcGVydGllczo6QWxsKTsKLSAgICBCdWls
ZGVyKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBNYXRjaFJlc3VsdCYsIE9wdGlvblNldDxDYXNjYWRl
TGV2ZWw+LCBQcm9wZXJ0eUNhc2NhZGU6OkluY2x1ZGVkUHJvcGVydGllcyA9IFByb3BlcnR5Q2Fz
Y2FkZTo6SW5jbHVkZWRQcm9wZXJ0aWVzOjpBbGwpOworICAgIEJ1aWxkZXIoUmVuZGVyU3R5bGUm
LCBCdWlsZGVyQ29udGV4dCYmLCBjb25zdCBNYXRjaFJlc3VsdCYsIE9wdGlvblNldDxDYXNjYWRl
TGV2ZWw+LCBQcm9wZXJ0eUNhc2NhZGU6OkluY2x1ZGVkUHJvcGVydGllcyA9IFByb3BlcnR5Q2Fz
Y2FkZTo6SW5jbHVkZWRQcm9wZXJ0aWVzOjpBbGwpOwogICAgIH5CdWlsZGVyKCk7CiAKICAgICB2
b2lkIGFwcGx5QWxsUHJvcGVydGllcygpOwpAQCAtNDYsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkgeyBhcHBseVByb3Bl
cnRpZXMocHJvcGVydHlJRCwgcHJvcGVydHlJRCk7IH0KICAgICB2b2lkIGFwcGx5Q3VzdG9tUHJv
cGVydHkoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAotICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVZhbHVl
KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlJik7CisgICAgdm9pZCBhcHBseVByb3BlcnR5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKIAogICAgIEJ1aWxkZXJTdGF0ZSYgc3RhdGUoKSB7
IHJldHVybiBtX3N0YXRlOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlQnVpbGRlclN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0
YXRlLmNwcAppbmRleCAwMTUxMTZiNTk2Ny4uY2UwOGNhZWNhMjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKQEAgLTUxLDE1ICs1MSwxMiBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFN0eWxlIHsKIAotQnVpbGRlclN0YXRlOjpCdWlsZGVy
U3RhdGUoQnVpbGRlciYgYnVpbGRlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJT
dHlsZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlLCBj
b25zdCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCitCdWlsZGVy
U3RhdGU6OkJ1aWxkZXJTdGF0ZShCdWlsZGVyJiBidWlsZGVyLCBSZW5kZXJTdHlsZSYgc3R5bGUs
IEJ1aWxkZXJDb250ZXh0JiYgY29udGV4dCkKICAgICA6IG1fYnVpbGRlcihidWlsZGVyKQogICAg
ICwgbV9zdHlsZU1hcCgqdGhpcykKICAgICAsIG1fc3R5bGUoc3R5bGUpCi0gICAgLCBtX3BhcmVu
dFN0eWxlKHBhcmVudFN0eWxlKQotICAgICwgbV9yb290RWxlbWVudFN0eWxlKHJvb3RFbGVtZW50
U3R5bGUpCi0gICAgLCBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoJnN0eWxlLCByb290RWxl
bWVudFN0eWxlLCBkb2N1bWVudC5yZW5kZXJWaWV3KCkpCi0gICAgLCBtX2RvY3VtZW50KGRvY3Vt
ZW50KQotICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBtX2NvbnRleHQoV1RGTW92ZShj
b250ZXh0KSkKKyAgICAsIG1fY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgmc3R5bGUsIHJvb3RF
bGVtZW50U3R5bGUoKSwgZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCkpCiB7CiB9CiAKQEAgLTM1OSw3
ICszNTYsNyBAQCB2b2lkIEJ1aWxkZXJTdGF0ZTo6dXBkYXRlRm9udEZvclRleHRTaXplQWRqdXN0
KCkKIAogdm9pZCBCdWlsZGVyU3RhdGU6OnVwZGF0ZUZvbnRGb3Jab29tQ2hhbmdlKCkKIHsKLSAg
ICBpZiAobV9zdHlsZS5lZmZlY3RpdmVab29tKCkgPT0gbV9wYXJlbnRTdHlsZS5lZmZlY3RpdmVa
b29tKCkgJiYgbV9zdHlsZS50ZXh0Wm9vbSgpID09IG1fcGFyZW50U3R5bGUudGV4dFpvb20oKSkK
KyAgICBpZiAobV9zdHlsZS5lZmZlY3RpdmVab29tKCkgPT0gcGFyZW50U3R5bGUoKS5lZmZlY3Rp
dmVab29tKCkgJiYgbV9zdHlsZS50ZXh0Wm9vbSgpID09IHBhcmVudFN0eWxlKCkudGV4dFpvb20o
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29uc3QgYXV0byYgY2hpbGRGb250ID0gbV9zdHls
ZS5mb250RGVzY3JpcHRpb24oKTsKQEAgLTM3Niw3ICszNzMsNyBAQCB2b2lkIEJ1aWxkZXJTdGF0
ZTo6dXBkYXRlRm9udEZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoKQogICAgIGlmIChjaGlsZEZvbnQu
aXNBYnNvbHV0ZVNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgYXV0byYgcGFy
ZW50Rm9udCA9IG1fcGFyZW50U3R5bGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAgY29uc3QgYXV0
byYgcGFyZW50Rm9udCA9IHBhcmVudFN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgaWYg
KGNoaWxkRm9udC51c2VGaXhlZERlZmF1bHRTaXplKCkgPT0gcGFyZW50Rm9udC51c2VGaXhlZERl
ZmF1bHRTaXplKCkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
QnVpbGRlclN0YXRlLmgKaW5kZXggZTU4NjRlZjNkZjAuLjcyNTgzOGNhNjUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmgKQEAgLTQxLDE4ICs0MSwyNSBAQCBuYW1l
c3BhY2UgU3R5bGUgewogCiBjbGFzcyBCdWlsZGVyOwogCitzdHJ1Y3QgQnVpbGRlckNvbnRleHQg
eworICAgIFJlZjxjb25zdCBEb2N1bWVudD4gZG9jdW1lbnQ7CisgICAgY29uc3QgUmVuZGVyU3R5
bGUmIHBhcmVudFN0eWxlOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxl
ID0gbnVsbHB0cjsKKyAgICBSZWZQdHI8Y29uc3QgRWxlbWVudD4gZWxlbWVudCA9IG51bGxwdHI7
Cit9OworCiBjbGFzcyBCdWlsZGVyU3RhdGUgewogcHVibGljOgotICAgIEJ1aWxkZXJTdGF0ZShC
dWlsZGVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIGNv
bnN0IFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlLCBjb25zdCBEb2N1bWVudCYsIGNvbnN0
IEVsZW1lbnQqKTsKKyAgICBCdWlsZGVyU3RhdGUoQnVpbGRlciYsIFJlbmRlclN0eWxlJiwgQnVp
bGRlckNvbnRleHQmJik7CiAKICAgICBCdWlsZGVyJiBidWlsZGVyKCkgeyByZXR1cm4gbV9idWls
ZGVyOyB9CiAKICAgICBSZW5kZXJTdHlsZSYgc3R5bGUoKSB7IHJldHVybiBtX3N0eWxlOyB9Ci0g
ICAgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJl
bnRTdHlsZTsgfQotICAgIGNvbnN0IFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9yb290RWxlbWVudFN0eWxlOyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUm
IHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LnBhcmVudFN0eWxlOyB9Cisg
ICAgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRleHQucm9vdEVsZW1lbnRTdHlsZTsgfQogCi0gICAgY29uc3QgRG9jdW1lbnQmIGRvY3Vt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudC5nZXQoKTsgfQotICAgIGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7IH0KKyAgICBjb25z
dCBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZG9jdW1lbnQu
Z2V0KCk7IH0KKyAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZXh0LmVsZW1lbnQuZ2V0KCk7IH0KIAogICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mJiBmb250RGVzY3JpcHRpb24pIHsgbV9mb250RGlydHkgfD0g
bV9zdHlsZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsgfQog
ICAgIHZvaWQgc2V0Rm9udFNpemUoRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIGZsb2F0IHNpemUp
OwpAQCAtNjUsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRGb250RGlydHkoKSB7IG1f
Zm9udERpcnR5ID0gdHJ1ZTsgfQogCiAgICAgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdHlsZS5mb250RGVzY3JpcHRpb24oKTsgfQot
ICAgIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigp
IHsgcmV0dXJuIG1fcGFyZW50U3R5bGUuZm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICBjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBw
YXJlbnRTdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpOyB9CiAKICAgICAvLyBGSVhNRTogVGhlc2Ug
YXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgY2xlYW4gdXAgdGhlIGNvZGUgdG8gdGFrZSB0aGF0IGlu
dG8gYWNjb3VudC4KICAgICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGlua01hdGNoICE9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOyB9
CkBAIC0xMDUsMTQgKzExMiwxMCBAQCBwcml2YXRlOgogICAgIENTU1RvU3R5bGVNYXAgbV9zdHls
ZU1hcDsKIAogICAgIFJlbmRlclN0eWxlJiBtX3N0eWxlOwotICAgIGNvbnN0IFJlbmRlclN0eWxl
JiBtX3BhcmVudFN0eWxlOwotICAgIGNvbnN0IFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5
bGU7CisgICAgY29uc3QgQnVpbGRlckNvbnRleHQgbV9jb250ZXh0OwogCiAgICAgY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7CiAKLSAg
ICBSZWY8Y29uc3QgRG9jdW1lbnQ+IG1fZG9jdW1lbnQ7Ci0gICAgUmVmUHRyPGNvbnN0IEVsZW1l
bnQ+IG1fZWxlbWVudDsKLQogICAgIEJpdG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBtX2FwcGxpZWRQ
cm9wZXJ0aWVzOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2FwcGxpZWRDdXN0b21Qcm9wZXJ0aWVz
OwogICAgIEJpdG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBtX2luUHJvZ3Jlc3NQcm9wZXJ0aWVzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383231</attachid>
            <date>2019-11-09 15:37:08 -0800</date>
            <delta_ts>2019-11-09 16:26:23 -0800</delta_ts>
            <desc>patch</desc>
            <filename>styleresolver-state-stack-2.patch</filename>
            <type>text/plain</type>
            <size>40718</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjZmI1MWEwMDA0OS4uY2U4YTc1ZWIyMjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MiBAQAorMjAxOS0xMS0wOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgU3RhY2sgYWxsb2NhdGUgU3R5bGVSZXNvbHZlciBzdGF0ZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0MDUzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3RhdGUgaXMgY3VycmVudGx5
IGF3a3dhcmRseSBhIG1lbWJlciB0aGF0IGdldHMgY2xlYXJlZC4gSXQgc2hvdWxkIGJlIHN0YWNr
IGFsbG9jYXRlZCBhbmQKKyAgICAgICAgcGFzc2VkIGFyb3VuZCB3aGVyZSBuZWVkZWQuCisKKyAg
ICAgICAgKiBhbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
S2V5ZnJhbWVFZmZlY3Q6OnVwZGF0ZUJsZW5kaW5nS2V5ZnJhbWVzKToKKyAgICAgICAgKiBjc3Mv
RE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01D
U1NSZWdpc3RlckN1c3RvbVByb3BlcnR5OjpyZWdpc3RlclByb3BlcnR5KToKKyAgICAgICAgKiBj
c3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpi
dWlsZGVyQ29udGV4dCk6CisKKyAgICAgICAgSGVscGVyIGZvciBpbml0aWFsaXppbmcgU3R5bGU6
OkJ1aWxkZXIgZnJvbSByZXNvbHZlciBzdGF0ZS4KKworICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnN0eWxlRm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OnN0eWxlRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpk
ZWZhdWx0U3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6U3RhdGU6OmNsZWFyKTogRGVsZXRlZC4KKworICAgICAgICBOb3RoaW5nIHRvIGNs
ZWFyLCBzdGF0ZSBpcyB0cmFuc2llbnQuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnNldE5ld1N0YXRlV2l0aEVsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKTogRGVs
ZXRlZC4KKworICAgICAgICBTdHlsZTo6QnVpbGRlciBjYW4gYmUgdXNlZCBkaXJlY3RseSB0byBh
cHBseSBwcm9wZXJ0aWVzIGluc3RlYWQgb2YgdmlhIHRoZXNlIGZ1bmN0aW9ucyB0aGF0IHJlcXVp
cmUgc3RhdGUgc2V0dXAuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRp
YWxpemVGb250U3R5bGUpOiBEZWxldGVkLgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjppbnNwZWN0b3JDU1NPTVdyYXBwZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcmVudFN0eWxlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnJvb3RFbGVtZW50U3R5
bGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6ZWxl
bWVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpz
dGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdGF0ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2V0Rm9udCk6CisKKyAgICAgICAgVXNlIFN0eWxlOjpCdWlsZGVyIGRpcmVjdGx5IHRvIGFwcGx5
IHByb3BlcnRpZXMuCisKKyAgICAgICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXI6OkJ1aWxkZXIpOgorCisgICAgICAgIEVuY2Fwc3Vs
dGUgaW1tdXRhYmxlIGFyZ3VtZW50cyBpbnRvIEJ1aWxkZXJDb250ZXh0IHR5cGUuCisKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyOjphcHBseVByb3BlcnR5VmFsdWUpOgorICAgICAg
ICAqIHN0eWxlL1N0eWxlQnVpbGRlci5oOgorICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlclN0
YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OkJ1aWxkZXJT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjp1cGRhdGVGb250
Rm9yWm9vbUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjp1
cGRhdGVGb250Rm9yR2VuZXJpY0ZhbWlseUNoYW5nZSk6CisgICAgICAgICogc3R5bGUvU3R5bGVC
dWlsZGVyU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnBh
cmVudFN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6
OnJvb3RFbGVtZW50U3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxk
ZXJTdGF0ZTo6ZG9jdW1lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxk
ZXJTdGF0ZTo6ZWxlbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRl
clN0YXRlOjpwYXJlbnRGb250RGVzY3JpcHRpb24pOgorCiAyMDE5LTExLTA5ICBBbnR0aSBLb2l2
aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIHN0eWxlIGFkanVzdG1lbnQg
Y29kZSBvdXQgb2YgU3R5bGVSZXNvbHZlciBhbmQgaW50byBhIGNsYXNzIG9mIGl0cyBvd24KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCmluZGV4IDc1Nzc2YzVj
ZGU1Li5mZDg5YWVkZTZlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tl
eWZyYW1lRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVF
ZmZlY3QuY3BwCkBAIC03NDQsNyArNzQ0LDYgQEAgdm9pZCBLZXlmcmFtZUVmZmVjdDo6dXBkYXRl
QmxlbmRpbmdLZXlmcmFtZXMoUmVuZGVyU3R5bGUmIGVsZW1lbnRTdHlsZSkKICAgICBTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyID0gbV90YXJnZXQtPnN0eWxlUmVzb2x2ZXIoKTsKIAogICAg
IGZvciAoYXV0byYga2V5ZnJhbWUgOiBtX3BhcnNlZEtleWZyYW1lcykgewotICAgICAgICBzdHls
ZVJlc29sdmVyLnNldE5ld1N0YXRlV2l0aEVsZW1lbnQoKm1fdGFyZ2V0KTsKICAgICAgICAgS2V5
ZnJhbWVWYWx1ZSBrZXlmcmFtZVZhbHVlKGtleWZyYW1lLmNvbXB1dGVkT2Zmc2V0LCBudWxscHRy
KTsKIAogICAgICAgICBhdXRvIHN0eWxlUHJvcGVydGllcyA9IGtleWZyYW1lLnN0eWxlLT5pbW11
dGFibGVDb3B5SWZOZWVkZWQoKTsKQEAgLTc1Miw3ICs3NTEsNyBAQCB2b2lkIEtleWZyYW1lRWZm
ZWN0Ojp1cGRhdGVCbGVuZGluZ0tleWZyYW1lcyhSZW5kZXJTdHlsZSYgZWxlbWVudFN0eWxlKQog
ICAgICAgICAgICAga2V5ZnJhbWVMaXN0LmFkZFByb3BlcnR5KHN0eWxlUHJvcGVydGllcy0+cHJv
cGVydHlBdChpKS5pZCgpKTsKIAogICAgICAgICBhdXRvIGtleWZyYW1lUnVsZSA9IFN0eWxlUnVs
ZUtleWZyYW1lOjpjcmVhdGUoV1RGTW92ZShzdHlsZVByb3BlcnRpZXMpKTsKLSAgICAgICAga2V5
ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZVJlc29sdmVyLnN0eWxlRm9yS2V5ZnJhbWUoJmVsZW1l
bnRTdHlsZSwga2V5ZnJhbWVSdWxlLnB0cigpLCBrZXlmcmFtZVZhbHVlKSk7CisgICAgICAgIGtl
eWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVSZXNvbHZlci5zdHlsZUZvcktleWZyYW1lKCptX3Rh
cmdldCwgJmVsZW1lbnRTdHlsZSwga2V5ZnJhbWVSdWxlLnB0cigpLCBrZXlmcmFtZVZhbHVlKSk7
CiAgICAgICAgIGtleWZyYW1lTGlzdC5pbnNlcnQoV1RGTW92ZShrZXlmcmFtZVZhbHVlKSk7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRE9NQ1NTUmVnaXN0ZXJDdXN0
b21Qcm9wZXJ0eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRE9NQ1NTUmVnaXN0ZXJDdXN0b21Q
cm9wZXJ0eS5jcHAKaW5kZXggMjI0OGM1YmUzMDYuLjQyZjgwYWI1ZDhhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvRE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0RPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHkuY3BwCkBAIC01
Miw3ICs1Miw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVy
dHk6OnJlZ2lzdGVyUHJvcGVydHkoRG9jdW1lbnQmIGRvY3VtCiAKICAgICAgICAgLy8gV2UgbmVl
ZCB0byBpbml0aWFsaXplIHRoaXMgc28gdGhhdCB3ZSBjYW4gc3VjY2Vzc2Z1bGx5IHBhcnNlIGNv
bXB1dGF0aW9uYWxseSBkZXBlbmRlbnQgdmFsdWVzIChsaWtlIGVtIHVuaXRzKS4KICAgICAgICAg
Ly8gV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGUgdmFsdWVzIHRvIGJlIGFjY3VyYXRlLCBzaW5j
ZSB0aGV5IHdpbGwgYmUgcmVqZWN0ZWQgbGF0ZXIgYW55d2F5Ci0gICAgICAgIHN0eWxlUmVzb2x2
ZXIuYXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlJbnZhbGlkLCBudWxscHRyLCBzdHls
ZVJlc29sdmVyLmRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKSk7CisgICAgICAgIGF1dG8gc3R5bGUg
PSBzdHlsZVJlc29sdmVyLmRlZmF1bHRTdHlsZUZvckVsZW1lbnQobnVsbHB0cik7CiAKICAgICAg
ICAgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBkZXBlbmRlbmNpZXM7CiAgICAgICAgIENTU1Byb3Bl
cnR5UGFyc2VyOjpjb2xsZWN0UGFyc2VkQ3VzdG9tUHJvcGVydHlWYWx1ZURlcGVuZGVuY2llcyhk
ZXNjcmlwdG9yLnN5bnRheCwgZmFsc2UsIGRlcGVuZGVuY2llcywgdG9rZW5pemVyLnRva2VuUmFu
Z2UoKSwgc3RyaWN0Q1NTUGFyc2VyQ29udGV4dCgpKTsKQEAgLTYwLDggKzYwLDEyIEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IERPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHk6OnJlZ2lzdGVyUHJvcGVy
dHkoRG9jdW1lbnQmIGRvY3VtCiAgICAgICAgIGlmICghZGVwZW5kZW5jaWVzLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciwgIlRoZSBnaXZlbiBp
bml0aWFsIHZhbHVlIG11c3QgYmUgY29tcHV0YXRpb25hbGx5IGluZGVwZW5kZW50LiIgfTsKIAor
CiAgICAgICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0OwotICAgICAgICBTdHlsZTo6QnVpbGRl
ciBkdW1teUJ1aWxkZXIoc3R5bGVSZXNvbHZlciwgbWF0Y2hSZXN1bHQsIHsgfSk7CisKKyAgICAg
ICAgYXV0byBwYXJlbnRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZSgqc3R5bGUpOworICAgICAg
ICBTdHlsZTo6QnVpbGRlciBkdW1teUJ1aWxkZXIoKnN0eWxlLCB7IGRvY3VtZW50LCBwYXJlbnRT
dHlsZSB9LCBtYXRjaFJlc3VsdCwgeyB9KTsKKwogICAgICAgICBpbml0aWFsVmFsdWUgPSBDU1NQ
cm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoZGVzY3JpcHRvci5u
YW1lLCBkZXNjcmlwdG9yLnN5bnRheCwgdG9rZW5pemVyLnRva2VuUmFuZ2UoKSwgZHVtbXlCdWls
ZGVyLnN0YXRlKCksIHN0cmljdENTU1BhcnNlckNvbnRleHQoKSk7CiAKICAgICAgICAgaWYgKCFp
bml0aWFsVmFsdWUgfHwgIWluaXRpYWxWYWx1ZS0+aXNSZXNvbHZlZCgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IGY0MTNmNzJhMzEwLi4zMTRiZTQ2MzNjMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtODQsMTQgKzg0LDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1pbmxpbmUgdm9pZCBT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2xlYXIoKQotewotICAgIG1fZWxlbWVudCA9IG51bGxwdHI7
Ci0gICAgbV9wYXJlbnRTdHlsZSA9IG51bGxwdHI7Ci0gICAgbV9vd25lZFBhcmVudFN0eWxlID0g
bnVsbHB0cjsKLSAgICBtX3VzZXJBZ2VudEFwcGVhcmFuY2VTdHlsZSA9IG51bGxwdHI7Ci19Ci0K
IFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDog
bV9ydWxlU2V0cygqdGhpcykKICAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCkBAIC0xNzMsMTAg
KzE2NSw5IEBAIFN0eWxlUmVzb2x2ZXI6On5TdHlsZVJlc29sdmVyKCkKICNlbmRpZgogfQogCi1T
dHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3Qg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogZG9jdW1lbnRFbGVt
ZW50U3R5bGUsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3RvckZpbHRlcikKK1N0eWxlUmVz
b2x2ZXI6OlN0YXRlOjpTdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBkb2N1bWVudEVsZW1lbnRTdHls
ZSkKICAgICA6IG1fZWxlbWVudCgmZWxlbWVudCkKICAgICAsIG1fcGFyZW50U3R5bGUocGFyZW50
U3R5bGUpCi0gICAgLCBtX3NlbGVjdG9yRmlsdGVyKHNlbGVjdG9yRmlsdGVyKQogewogICAgIGJv
b2wgcmVzZXRTdHlsZUluaGVyaXRhbmNlID0gaGFzU2hhZG93Um9vdFBhcmVudChlbGVtZW50KSAm
JiBkb3duY2FzdDxTaGFkb3dSb290PihlbGVtZW50LnBhcmVudE5vZGUoKSktPnJlc2V0U3R5bGVJ
bmhlcml0YW5jZSgpOwogICAgIGlmIChyZXNldFN0eWxlSW5oZXJpdGFuY2UpCkBAIC0yMDcsMjQg
KzE5OCwyNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNBdFNoYWRvd0JvdW5kYXJ5KGNvbnN0IEVs
ZW1lbnQmIGVsZW1lbnQpCiAgICAgcmV0dXJuIHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS0+aXNT
aGFkb3dSb290KCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0TmV3U3RhdGVXaXRoRWxl
bWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50KQorU3R5bGU6OkJ1aWxkZXJDb250ZXh0IFN0eWxl
UmVzb2x2ZXI6OmJ1aWxkZXJDb250ZXh0KGNvbnN0IFN0YXRlJiBzdGF0ZSkKIHsKLSAgICAvLyBB
cHBseSB0aGUgZGVjbGFyYXRpb24gdG8gdGhlIHN0eWxlLiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2
ZXJzaW9uIG9mIHRoZSBsb2dpYyBpbiBzdHlsZUZvckVsZW1lbnQuCi0gICAgbV9zdGF0ZSA9IFN0
YXRlKGVsZW1lbnQsIG51bGxwdHIpOworICAgIHJldHVybiB7CisgICAgICAgIG1fZG9jdW1lbnQs
CisgICAgICAgICpzdGF0ZS5wYXJlbnRTdHlsZSgpLAorICAgICAgICBzdGF0ZS5yb290RWxlbWVu
dFN0eWxlKCksCisgICAgICAgIHN0YXRlLmVsZW1lbnQoKQorICAgIH07CiB9CiAKIEVsZW1lbnRT
dHlsZSBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcGFy
ZW50Qm94U3R5bGUsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yIG1hdGNoaW5nQmVoYXZpb3IsIGNvbnN0
IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3RvckZpbHRlcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
bV9pc0RlbGV0ZWQpOwogCi0gICAgbV9zdGF0ZSA9IFN0YXRlKGVsZW1lbnQsIHBhcmVudFN0eWxl
LCBtX292ZXJyaWRlRG9jdW1lbnRFbGVtZW50U3R5bGUsIHNlbGVjdG9yRmlsdGVyKTsKLSAgICBT
dGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworICAgIGF1dG8gc3RhdGUgPSBTdGF0ZShlbGVtZW50LCBw
YXJlbnRTdHlsZSwgbV9vdmVycmlkZURvY3VtZW50RWxlbWVudFN0eWxlKTsKIAogICAgIGlmIChz
dGF0ZS5wYXJlbnRTdHlsZSgpKSB7CiAgICAgICAgIHN0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxl
OjpjcmVhdGVQdHIoKSk7CiAgICAgICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKCpzdGF0
ZS5wYXJlbnRTdHlsZSgpKTsKICAgICB9IGVsc2UgewotICAgICAgICBzdGF0ZS5zZXRTdHlsZShk
ZWZhdWx0U3R5bGVGb3JFbGVtZW50KCkpOworICAgICAgICBzdGF0ZS5zZXRTdHlsZShkZWZhdWx0
U3R5bGVGb3JFbGVtZW50KCZlbGVtZW50KSk7CiAgICAgICAgIHN0YXRlLnNldFBhcmVudFN0eWxl
KFJlbmRlclN0eWxlOjpjbG9uZVB0cigqc3RhdGUuc3R5bGUoKSkpOwogICAgIH0KIApAQCAtMjQz
LDcgKzIzNyw3IEBAIEVsZW1lbnRTdHlsZSBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQo
Y29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyCiAKICAgICBDU1NEZWZhdWx0U3R5
bGVTaGVldHM6OmVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0ZvckVsZW1lbnQoZWxlbWVudCk7CiAK
LSAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IoZWxlbWVudCwgbV9ydWxlU2V0cywg
bV9zdGF0ZS5zZWxlY3RvckZpbHRlcigpKTsKKyAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xs
ZWN0b3IoZWxlbWVudCwgbV9ydWxlU2V0cywgc2VsZWN0b3JGaWx0ZXIpOwogICAgIGNvbGxlY3Rv
ci5zZXRNZWRpdW0oJm1fbWVkaWFRdWVyeUV2YWx1YXRvcik7CiAKICAgICBpZiAobWF0Y2hpbmdC
ZWhhdmlvciA9PSBSdWxlTWF0Y2hpbmdCZWhhdmlvcjo6TWF0Y2hPbmx5VXNlckFnZW50UnVsZXMp
CkBAIC0yNjAsNyArMjU0LDcgQEAgRWxlbWVudFN0eWxlIFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9y
RWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXIKIAogICAgIGF1dG8g
ZWxlbWVudFN0eWxlUmVsYXRpb25zID0gU3R5bGU6OmNvbW1pdFJlbGF0aW9uc1RvUmVuZGVyU3R5
bGUoc3R5bGUsIGVsZW1lbnQsIGNvbGxlY3Rvci5zdHlsZVJlbGF0aW9ucygpKTsKIAotICAgIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMoY29sbGVjdG9yLm1hdGNoUmVzdWx0KCksIGVsZW1lbnQpOwor
ICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoc3RhdGUsIGNvbGxlY3Rvci5tYXRjaFJlc3VsdCgp
LCBlbGVtZW50KTsKIAogICAgIFN0eWxlOjpBZGp1c3RlciBhZGp1c3Rlcihkb2N1bWVudCgpLCAq
c3RhdGUucGFyZW50U3R5bGUoKSwgcGFyZW50Qm94U3R5bGUsICZlbGVtZW50KTsKICAgICBhZGp1
c3Rlci5hZGp1c3QoKnN0YXRlLnN0eWxlKCksIHN0YXRlLnVzZXJBZ2VudEFwcGVhcmFuY2VTdHls
ZSgpKTsKQEAgLTI2OCwyNyArMjYyLDIyIEBAIEVsZW1lbnRTdHlsZSBTdHlsZVJlc29sdmVyOjpz
dHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyCiAgICAg
aWYgKHN0YXRlLnN0eWxlKCktPmhhc1ZpZXdwb3J0VW5pdHMoKSkKICAgICAgICAgZG9jdW1lbnQo
KS5zZXRIYXNTdHlsZVdpdGhWaWV3cG9ydFVuaXRzKCk7CiAKLSAgICBzdGF0ZS5jbGVhcigpOyAv
LyBDbGVhciBvdXQgZm9yIHRoZSBuZXh0IHJlc29sdmUuCi0KICAgICByZXR1cm4geyBzdGF0ZS50
YWtlU3R5bGUoKSwgV1RGTW92ZShlbGVtZW50U3R5bGVSZWxhdGlvbnMpIH07CiB9CiAKLXN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShj
b25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZSog
a2V5ZnJhbWUsIEtleWZyYW1lVmFsdWUmIGtleWZyYW1lVmFsdWUpCitzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgRWxlbWVu
dCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgY29uc3QgU3R5bGVS
dWxlS2V5ZnJhbWUqIGtleWZyYW1lLCBLZXlmcmFtZVZhbHVlJiBrZXlmcmFtZVZhbHVlKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lzRGVsZXRlZCk7CiAKICAgICBNYXRjaFJlc3VsdCByZXN1
bHQ7CiAgICAgcmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5hcHBlbmQoeyAma2V5ZnJhbWUtPnBy
b3BlcnRpZXMoKSB9KTsKIAotICAgIEFTU0VSVCghbV9zdGF0ZS5zdHlsZSgpKTsKLQotICAgIFN0
YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgYXV0byBzdGF0ZSA9IFN0YXRlKGVsZW1lbnQsIG51
bGxwdHIpOwogCi0gICAgLy8gQ3JlYXRlIHRoZSBzdHlsZQogICAgIHN0YXRlLnNldFN0eWxlKFJl
bmRlclN0eWxlOjpjbG9uZVB0cigqZWxlbWVudFN0eWxlKSk7CiAgICAgc3RhdGUuc2V0UGFyZW50
U3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRyKCplbGVtZW50U3R5bGUpKTsKIAotICAgIFN0eWxl
OjpCdWlsZGVyIGJ1aWxkZXIoKnRoaXMsIHJlc3VsdCwgeyBTdHlsZTo6Q2FzY2FkZUxldmVsOjpB
dXRob3IgfSk7CisgICAgU3R5bGU6OkJ1aWxkZXIgYnVpbGRlcigqc3RhdGUuc3R5bGUoKSwgYnVp
bGRlckNvbnRleHQoc3RhdGUpLCByZXN1bHQsIHsgU3R5bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9y
IH0pOwogICAgIGJ1aWxkZXIuYXBwbHlBbGxQcm9wZXJ0aWVzKCk7CiAKICAgICBTdHlsZTo6QWRq
dXN0ZXIgYWRqdXN0ZXIoZG9jdW1lbnQoKSwgKnN0YXRlLnBhcmVudFN0eWxlKCksIG51bGxwdHIs
IG51bGxwdHIpOwpAQCAtMzcxLDEyICszNjAsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjprZXlm
cmFtZVN0eWxlc0ZvckFuaW1hdGlvbihjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW4K
IAogICAgIC8vIENvbnN0cnVjdCBhbmQgcG9wdWxhdGUgdGhlIHN0eWxlIGZvciBlYWNoIGtleWZy
YW1lLgogICAgIGZvciAoYXV0byYga2V5ZnJhbWUgOiAqa2V5ZnJhbWVzKSB7Ci0gICAgICAgIHNl
dE5ld1N0YXRlV2l0aEVsZW1lbnQoZWxlbWVudCk7Ci0KICAgICAgICAgLy8gQWRkIHRoaXMga2V5
ZnJhbWUgc3R5bGUgdG8gYWxsIHRoZSBpbmRpY2F0ZWQga2V5IHRpbWVzCiAgICAgICAgIGZvciAo
YXV0byBrZXkgOiBrZXlmcmFtZS0+a2V5cygpKSB7CiAgICAgICAgICAgICBLZXlmcmFtZVZhbHVl
IGtleWZyYW1lVmFsdWUoMCwgbnVsbHB0cik7Ci0gICAgICAgICAgICBrZXlmcmFtZVZhbHVlLnNl
dFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCBrZXlmcmFtZS5wdHIoKSwga2V5
ZnJhbWVWYWx1ZSkpOworICAgICAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZv
cktleWZyYW1lKGVsZW1lbnQsIGVsZW1lbnRTdHlsZSwga2V5ZnJhbWUucHRyKCksIGtleWZyYW1l
VmFsdWUpKTsKICAgICAgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0S2V5KGtleSk7CiAgICAgICAg
ICAgICBpZiAoYXV0byB0aW1pbmdGdW5jdGlvbkNTU1ZhbHVlID0ga2V5ZnJhbWUtPnByb3BlcnRp
ZXMoKS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5QW5pbWF0aW9uVGltaW5nRnVuY3Rp
b24pKQogICAgICAgICAgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0VGltaW5nRnVuY3Rpb24oVGlt
aW5nRnVuY3Rpb246OmNyZWF0ZUZyb21DU1NWYWx1ZSgqdGltaW5nRnVuY3Rpb25DU1NWYWx1ZS5n
ZXQoKSkpOwpAQCAtMzkzLDcgKzM4MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVT
dHlsZXNGb3JBbmltYXRpb24oY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuCiAgICAg
ICAgICAgICB6ZXJvUGVyY2VudEtleWZyYW1lLT5zZXRLZXkoMCk7CiAgICAgICAgIH0KICAgICAg
ICAgS2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDAsIG51bGxwdHIpOwotICAgICAgICBrZXlm
cmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCB6ZXJvUGVy
Y2VudEtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7CisgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0
U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShlbGVtZW50LCBlbGVtZW50U3R5bGUsIHplcm9QZXJjZW50
S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKICAgICAgICAgbGlzdC5pbnNlcnQoV1RGTW92ZShr
ZXlmcmFtZVZhbHVlKSk7CiAgICAgfQogCkBAIC00MDUsMzAgKzM5MiwyNCBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQsIGNvbnN0IFJlbgogICAgICAgICAgICAgaHVuZHJlZFBlcmNlbnRLZXlmcmFtZS0+c2V0S2V5
KDEpOwogICAgICAgICB9CiAgICAgICAgIEtleWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1ZSgxLCBu
dWxscHRyKTsKLSAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1l
KGVsZW1lbnRTdHlsZSwgaHVuZHJlZFBlcmNlbnRLZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOwor
ICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudCwg
ZWxlbWVudFN0eWxlLCBodW5kcmVkUGVyY2VudEtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7CiAg
ICAgICAgIGxpc3QuaW5zZXJ0KFdURk1vdmUoa2V5ZnJhbWVWYWx1ZSkpOwogICAgIH0KIH0KIAog
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZv
ckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUHNldWRvU3R5bGVSZXF1ZXN0
JiBwc2V1ZG9TdHlsZVJlcXVlc3QsIGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29u
c3QgUmVuZGVyU3R5bGUqIHBhcmVudEJveFN0eWxlLCBjb25zdCBTZWxlY3RvckZpbHRlciogc2Vs
ZWN0b3JGaWx0ZXIpCiB7Ci0gICAgbV9zdGF0ZSA9IFN0YXRlKGVsZW1lbnQsICZwYXJlbnRTdHls
ZSwgbV9vdmVycmlkZURvY3VtZW50RWxlbWVudFN0eWxlLCBzZWxlY3RvckZpbHRlcik7CisgICAg
YXV0byBzdGF0ZSA9IFN0YXRlKGVsZW1lbnQsICZwYXJlbnRTdHlsZSwgbV9vdmVycmlkZURvY3Vt
ZW50RWxlbWVudFN0eWxlKTsKIAotICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0KLSAgICBp
ZiAobV9zdGF0ZS5wYXJlbnRTdHlsZSgpKSB7CisgICAgaWYgKHN0YXRlLnBhcmVudFN0eWxlKCkp
IHsKICAgICAgICAgc3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZVB0cigpKTsKLSAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEZyb20oKm1fc3RhdGUucGFyZW50U3R5bGUoKSk7
CisgICAgICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKCpzdGF0ZS5wYXJlbnRTdHlsZSgp
KTsKICAgICB9IGVsc2UgewotICAgICAgICBzdGF0ZS5zZXRTdHlsZShkZWZhdWx0U3R5bGVGb3JF
bGVtZW50KCkpOworICAgICAgICBzdGF0ZS5zZXRTdHlsZShkZWZhdWx0U3R5bGVGb3JFbGVtZW50
KCZlbGVtZW50KSk7CiAgICAgICAgIHN0YXRlLnNldFBhcmVudFN0eWxlKFJlbmRlclN0eWxlOjpj
bG9uZVB0cigqc3RhdGUuc3R5bGUoKSkpOwogICAgIH0KIAotICAgIC8vIFNpbmNlIHdlIGRvbid0
IHVzZSBwc2V1ZG8tZWxlbWVudHMgaW4gYW55IG9mIG91ciBxdWlyay9wcmludCB1c2VyIGFnZW50
IHJ1bGVzLCBkb24ndCB3YXN0ZSB0aW1lIHdhbGtpbmcKLSAgICAvLyB0aG9zZSBydWxlcy4KLQot
ICAgIC8vIENoZWNrIFVBLCB1c2VyIGFuZCBhdXRob3IgcnVsZXMuCi0gICAgRWxlbWVudFJ1bGVD
b2xsZWN0b3IgY29sbGVjdG9yKGVsZW1lbnQsIG1fcnVsZVNldHMsIG1fc3RhdGUuc2VsZWN0b3JG
aWx0ZXIoKSk7CisgICAgRWxlbWVudFJ1bGVDb2xsZWN0b3IgY29sbGVjdG9yKGVsZW1lbnQsIG1f
cnVsZVNldHMsIHNlbGVjdG9yRmlsdGVyKTsKICAgICBjb2xsZWN0b3Iuc2V0UHNldWRvU3R5bGVS
ZXF1ZXN0KHBzZXVkb1N0eWxlUmVxdWVzdCk7CiAgICAgY29sbGVjdG9yLnNldE1lZGl1bSgmbV9t
ZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKICAgICBjb2xsZWN0b3IubWF0Y2hVQVJ1bGVzKCk7CkBAIC00
NDUsNyArNDI2LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVy
Ojpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYKIAogICAgIHN0YXRlLnN0eWxl
KCktPnNldFN0eWxlVHlwZShwc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQpOwogCi0gICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllcyhjb2xsZWN0b3IubWF0Y2hSZXN1bHQoKSwgZWxlbWVudCk7Cisg
ICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhzdGF0ZSwgY29sbGVjdG9yLm1hdGNoUmVzdWx0KCks
IGVsZW1lbnQpOwogCiAgICAgU3R5bGU6OkFkanVzdGVyIGFkanVzdGVyKGRvY3VtZW50KCksICpz
dGF0ZS5wYXJlbnRTdHlsZSgpLCBwYXJlbnRCb3hTdHlsZSwgbnVsbHB0cik7CiAgICAgYWRqdXN0
ZXIuYWRqdXN0KCpzdGF0ZS5zdHlsZSgpLCBzdGF0ZS51c2VyQWdlbnRBcHBlYXJhbmNlU3R5bGUo
KSk7CkBAIC00NTMsNyArNDM0LDYgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHls
ZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYKICAgICBpZiAo
c3RhdGUuc3R5bGUoKS0+aGFzVmlld3BvcnRVbml0cygpKQogICAgICAgICBkb2N1bWVudCgpLnNl
dEhhc1N0eWxlV2l0aFZpZXdwb3J0VW5pdHMoKTsKIAotICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0
eWxlLgogICAgIHJldHVybiBzdGF0ZS50YWtlU3R5bGUoKTsKIH0KIApAQCAtNDY1LDMwICs0NDUs
NDIgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZv
clBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkKICAgICAgICAg
cmV0dXJuIFJlbmRlclN0eWxlOjpjcmVhdGVQdHIoKTsKIAotICAgIG1fc3RhdGUgPSBTdGF0ZSgq
ZG9jdW1lbnRFbGVtZW50LCBtX2RvY3VtZW50LnJlbmRlclN0eWxlKCkpOworICAgIGF1dG8gc3Rh
dGUgPSBTdGF0ZSgqZG9jdW1lbnRFbGVtZW50LCBtX2RvY3VtZW50LnJlbmRlclN0eWxlKCkpOwog
Ci0gICAgbV9zdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlUHRyKCkpOwotICAgIG1f
c3RhdGUuc3R5bGUoKS0+aW5oZXJpdEZyb20oKm1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsK
KyAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlUHRyKCkpOworICAgIHN0YXRl
LnN0eWxlKCktPmluaGVyaXRGcm9tKCpzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOwogCi0gICAg
UGFnZVJ1bGVDb2xsZWN0b3IgY29sbGVjdG9yKG1fc3RhdGUsIG1fcnVsZVNldHMpOworICAgIFBh
Z2VSdWxlQ29sbGVjdG9yIGNvbGxlY3RvcihzdGF0ZSwgbV9ydWxlU2V0cyk7CiAgICAgY29sbGVj
dG9yLm1hdGNoQWxsUGFnZVJ1bGVzKHBhZ2VJbmRleCk7CiAKICAgICBhdXRvJiByZXN1bHQgPSBj
b2xsZWN0b3IubWF0Y2hSZXN1bHQoKTsKIAotICAgIFN0eWxlOjpCdWlsZGVyIGJ1aWxkZXIoKnRo
aXMsIHJlc3VsdCwgeyBTdHlsZTo6Q2FzY2FkZUxldmVsOjpBdXRob3IgfSk7CisgICAgU3R5bGU6
OkJ1aWxkZXIgYnVpbGRlcigqc3RhdGUuc3R5bGUoKSwgYnVpbGRlckNvbnRleHQoc3RhdGUpLCBy
ZXN1bHQsIHsgU3R5bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9yIH0pOwogICAgIGJ1aWxkZXIuYXBw
bHlBbGxQcm9wZXJ0aWVzKCk7CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICBy
ZXR1cm4gbV9zdGF0ZS50YWtlU3R5bGUoKTsKKyAgICByZXR1cm4gc3RhdGUudGFrZVN0eWxlKCk7
CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6ZGVmYXVs
dFN0eWxlRm9yRWxlbWVudCgpCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVz
b2x2ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsK
LSAgICBtX3N0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGVQdHIoKSk7Ci0gICAgLy8g
TWFrZSBzdXJlIG91ciBmb250cyBhcmUgaW5pdGlhbGl6ZWQgaWYgd2UgZG9uJ3QgaW5oZXJpdCB0
aGVtIGZyb20gb3VyIHBhcmVudCBzdHlsZS4KLSAgICBpbml0aWFsaXplRm9udFN0eWxlKCk7Ci0g
ICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250Q2FzY2FkZSgpLnVwZGF0ZSgmZG9jdW1lbnQoKS5mb250
U2VsZWN0b3IoKSk7Ci0gICAgcmV0dXJuIG1fc3RhdGUudGFrZVN0eWxlKCk7CisgICAgYXV0byBz
dHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVQdHIoKTsKKworICAgIEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdN
b2RlKHNldHRpbmdzKCkuZm9udFJlbmRlcmluZ01vZGUoKSk7CisgICAgZm9udERlc2NyaXB0aW9u
LnNldE9uZUZhbWlseShzdGFuZGFyZEZhbWlseSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEtl
eXdvcmRTaXplRnJvbUlkZW50aWZpZXIoQ1NTVmFsdWVNZWRpdW0pOworCisgICAgYXV0byBzaXpl
ID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1ZU1lZGl1bSwgZmFsc2UsIGRvY3Vt
ZW50KCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOworICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNpemVG
cm9tU3BlY2lmaWVkU2l6ZShzaXplLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwg
aXM8U1ZHRWxlbWVudD4oZWxlbWVudCksIHN0eWxlLmdldCgpLCBkb2N1bWVudCgpKSk7CisKKyAg
ICBmb250RGVzY3JpcHRpb24uc2V0U2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoc2V0dGlu
Z3MoKS5zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cygpID8gQWxsb3dVc2VySW5zdGFsbGVk
Rm9udHM6OlllcyA6IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObyk7CisgICAgc3R5bGUtPnNl
dEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworCisgICAgc3R5bGUt
PmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKKworICAg
IHJldHVybiBzdHlsZTsKIH0KIAogVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiBTdHlsZVJlc29s
dmVyOjpzdHlsZVJ1bGVzRm9yRWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50LCB1bnNpZ25l
ZCBydWxlc1RvSW5jbHVkZSkKQEAgLTUwMSw5ICs0OTMsOSBAQCBWZWN0b3I8UmVmUHRyPFN0eWxl
UnVsZT4+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGNvbnN0IEVs
ZW1lbgogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIG1fc3Rh
dGUgPSBTdGF0ZSgqZWxlbWVudCwgbnVsbHB0cik7CisgICAgYXV0byBzdGF0ZSA9IFN0YXRlKCpl
bGVtZW50LCBudWxscHRyKTsKIAotICAgIEVsZW1lbnRSdWxlQ29sbGVjdG9yIGNvbGxlY3Rvcigq
ZWxlbWVudCwgbV9ydWxlU2V0cywgbV9zdGF0ZS5zZWxlY3RvckZpbHRlcigpKTsKKyAgICBFbGVt
ZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IoKmVsZW1lbnQsIG1fcnVsZVNldHMsIG51bGxwdHIp
OwogICAgIGNvbGxlY3Rvci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6Q29sbGVjdGlu
Z1J1bGVzKTsKICAgICBjb2xsZWN0b3Iuc2V0UHNldWRvU3R5bGVSZXF1ZXN0KFBzZXVkb1N0eWxl
UmVxdWVzdChwc2V1ZG9JZCkpOwogICAgIGNvbGxlY3Rvci5zZXRNZWRpdW0oJm1fbWVkaWFRdWVy
eUV2YWx1YXRvcik7CkBAIC01NDYsOSArNTM4LDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjbGVh
ckNhY2hlZERlY2xhcmF0aW9uc0FmZmVjdGVkQnlWaWV3cG9ydFVuaXRzKCkKICAgICBtX21hdGNo
ZWREZWNsYXJhdGlvbnNDYWNoZS5jbGVhckVudHJpZXNBZmZlY3RlZEJ5Vmlld3BvcnRVbml0cygp
OwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3Qg
TWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50LCBVc2VNYXRj
aGVkRGVjbGFyYXRpb25zQ2FjaGUgdXNlTWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlKQordm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKFN0YXRlJiBzdGF0ZSwgY29uc3Qg
TWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50LCBVc2VNYXRj
aGVkRGVjbGFyYXRpb25zQ2FjaGUgdXNlTWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlKQogewotICAg
IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgdW5zaWduZWQgY2FjaGVIYXNoID0gdXNlTWF0
Y2hlZERlY2xhcmF0aW9uc0NhY2hlID09IFVzZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZTo6WWVz
ID8gU3R5bGU6Ok1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZTo6Y29tcHV0ZUhhc2gobWF0Y2hSZXN1
bHQpIDogMDsKICAgICBhdXRvIGluY2x1ZGVkUHJvcGVydGllcyA9IFN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGU6OkluY2x1ZGVkUHJvcGVydGllczo6QWxsOwogCkBAIC01NzksMjQgKzU3MCwyNCBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1
bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgICAgICAvLyBJZiBzbywgd2UgY2FjaGUgdGhlIGJv
cmRlciBhbmQgYmFja2dyb3VuZCBzdHlsZXMgc28gdGhhdCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5
bGUoKQogICAgICAgICAvLyBjYW4gbG9vayBhdCB0aGVtIGxhdGVyIHRvIGZpZ3VyZSBvdXQgaWYg
dGhpcyBpcyBhIHN0eWxlZCBmb3JtIGNvbnRyb2wgb3Igbm90LgogICAgICAgICBhdXRvIHVzZXJB
Z2VudFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKHN0eWxlKTsKLSAgICAgICAgU3R5bGU6
OkJ1aWxkZXIgYnVpbGRlcigqdXNlckFnZW50U3R5bGUsICp0aGlzLCBtYXRjaFJlc3VsdCwgeyBT
dHlsZTo6Q2FzY2FkZUxldmVsOjpVc2VyQWdlbnQgfSk7CisgICAgICAgIFN0eWxlOjpCdWlsZGVy
IGJ1aWxkZXIoKnVzZXJBZ2VudFN0eWxlLCBidWlsZGVyQ29udGV4dChzdGF0ZSksIG1hdGNoUmVz
dWx0LCB7IFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCB9KTsKICAgICAgICAgYnVpbGRl
ci5hcHBseUFsbFByb3BlcnRpZXMoKTsKIAogICAgICAgICBzdGF0ZS5zZXRVc2VyQWdlbnRBcHBl
YXJhbmNlU3R5bGUoV1RGTW92ZSh1c2VyQWdlbnRTdHlsZSkpOwogICAgIH0KIAotICAgIFN0eWxl
OjpCdWlsZGVyIGJ1aWxkZXIoKnRoaXMsIG1hdGNoUmVzdWx0LCBTdHlsZTo6YWxsQ2FzY2FkZUxl
dmVscygpLCBpbmNsdWRlZFByb3BlcnRpZXMpOworICAgIFN0eWxlOjpCdWlsZGVyIGJ1aWxkZXIo
KnN0YXRlLnN0eWxlKCksIGJ1aWxkZXJDb250ZXh0KHN0YXRlKSwgbWF0Y2hSZXN1bHQsIFN0eWxl
OjphbGxDYXNjYWRlTGV2ZWxzKCksIGluY2x1ZGVkUHJvcGVydGllcyk7CiAKICAgICAvLyBIaWdo
IHByaW9yaXR5IHByb3BlcnRpZXMgbWF5IGFmZmVjdCByZXNvbHV0aW9uIG9mIG90aGVyIHByb3Bl
cnRpZXMgKHRoZXkgYXJlIG1vc3RseSBmb250IHJlbGF0ZWQpLgogICAgIGJ1aWxkZXIuYXBwbHlI
aWdoUHJpb3JpdHlQcm9wZXJ0aWVzKCk7CiAKICAgICAvLyBJZiB0aGUgZWZmZWN0aXZlIHpvb20g
dmFsdWUgY2hhbmdlcywgd2UgY2FuJ3QgdXNlIHRoZSBtYXRjaGVkIHByb3BlcnRpZXMgY2FjaGUu
IFN0YXJ0IG92ZXIuCiAgICAgaWYgKGNhY2hlRW50cnkgJiYgY2FjaGVFbnRyeS0+cmVuZGVyU3R5
bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBzdHlsZS5lZmZlY3RpdmVab29tKCkpCi0gICAgICAgIHJl
dHVybiBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlbGVtZW50LCBVc2VNYXRj
aGVkRGVjbGFyYXRpb25zQ2FjaGU6Ok5vKTsKKyAgICAgICAgcmV0dXJuIGFwcGx5TWF0Y2hlZFBy
b3BlcnRpZXMoc3RhdGUsIG1hdGNoUmVzdWx0LCBlbGVtZW50LCBVc2VNYXRjaGVkRGVjbGFyYXRp
b25zQ2FjaGU6Ok5vKTsKIAogICAgIC8vIElmIHRoZSBmb250IGNoYW5nZWQsIHdlIGNhbid0IHVz
ZSB0aGUgbWF0Y2hlZCBwcm9wZXJ0aWVzIGNhY2hlLiBTdGFydCBvdmVyLgogICAgIGlmIChjYWNo
ZUVudHJ5ICYmIGNhY2hlRW50cnktPnJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRpb24oKSAhPSBz
dHlsZS5mb250RGVzY3JpcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXMobWF0Y2hSZXN1bHQsIGVsZW1lbnQsIFVzZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZTo6
Tm8pOworICAgICAgICByZXR1cm4gYXBwbHlNYXRjaGVkUHJvcGVydGllcyhzdGF0ZSwgbWF0Y2hS
ZXN1bHQsIGVsZW1lbnQsIFVzZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZTo6Tm8pOwogCiAgICAg
YnVpbGRlci5hcHBseUxvd1ByaW9yaXR5UHJvcGVydGllcygpOwogCkBAIC02MTAsMzkgKzYwMSw2
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRj
aFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIG1fbWF0Y2hlZERlY2xhcmF0aW9u
c0NhY2hlLmFkZChzdHlsZSwgcGFyZW50U3R5bGUsIGNhY2hlSGFzaCwgbWF0Y2hSZXN1bHQpOwog
fQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHls
ZSkKLXsKLSAgICBtX3N0YXRlID0gU3RhdGUoKTsKLSAgICBtX3N0YXRlLnNldFBhcmVudFN0eWxl
KFJlbmRlclN0eWxlOjpjbG9uZVB0cigqc3R5bGUpKTsKLSAgICBtX3N0YXRlLnNldFN0eWxlKFdU
Rk1vdmUoc3R5bGUpKTsKLSAgICBhcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoaWQsIHZhbHVl
KTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUo
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICghdmFsdWUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0OwotICAgIFN0eWxl
OjpCdWlsZGVyIGJ1aWxkZXIoKnRoaXMsIG1hdGNoUmVzdWx0LCB7IH0pOwotICAgIGJ1aWxkZXIu
YXBwbHlQcm9wZXJ0eVZhbHVlKGlkLCAqdmFsdWUpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6
OmluaXRpYWxpemVGb250U3R5bGUoKQotewotICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRp
bmdzKCkuZm9udFJlbmRlcmluZ01vZGUoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZh
bWlseShzdGFuZGFyZEZhbWlseSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXpl
RnJvbUlkZW50aWZpZXIoQ1NTVmFsdWVNZWRpdW0pOwotCi0gICAgYXV0byBzaXplID0gU3R5bGU6
OmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1ZU1lZGl1bSwgZmFsc2UsIGRvY3VtZW50KCkpOwot
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNpemVGcm9tU3BlY2lm
aWVkU2l6ZShzaXplLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgaXM8U1ZHRWxl
bWVudD4obV9zdGF0ZS5lbGVtZW50KCkpLCBtX3N0YXRlLnN0eWxlKCksIGRvY3VtZW50KCkpKTsK
LQotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyhz
ZXR0aW5ncygpLnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKCkgPyBBbGxvd1VzZXJJbnN0
YWxsZWRGb250czo6WWVzIDogQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKTsKLSAgICBzdHls
ZSgpLT5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKLX0KLQog
dm9pZCBTdHlsZVJlc29sdmVyOjphZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQo
Y29uc3QgTWVkaWFRdWVyeUV4cHJlc3Npb24mIGV4cHJlc3Npb24sIGJvb2wgcmVzdWx0KQogewog
ICAgIG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cy5hcHBlbmQoTWVkaWFRdWVy
eVJlc3VsdCB7IGV4cHJlc3Npb24sIHJlc3VsdCB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5oCmluZGV4IDkzZTVjNDM1OGZmLi45MzE3MjViZTEwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRv
ci5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUnVsZVNldC5oIgorI2lu
Y2x1ZGUgIlN0eWxlQnVpbGRlclN0YXRlLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMTEyLDEyICsxMTMs
OCBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHls
ZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYsIGNvbnN0IFBzZXVkb1N0eWxlUmVxdWVzdCYsIGNv
bnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudEJv
eFN0eWxlID0gbnVsbHB0ciwgY29uc3QgU2VsZWN0b3JGaWx0ZXIqID0gbnVsbHB0cik7CiAKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4
KTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGRlZmF1bHRTdHlsZUZvckVsZW1l
bnQoKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGRlZmF1bHRTdHlsZUZvckVs
ZW1lbnQoY29uc3QgRWxlbWVudCopOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5zdHlsZSgpOyB9Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnRTdHlsZSgpOyB9Ci0gICAgY29u
c3QgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnJvb3RFbGVtZW50U3R5bGUoKTsgfQotICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLmVsZW1lbnQoKTsgfQogICAgIERvY3VtZW50JiBkb2N1bWVudCgp
IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAgICAgY29uc3QgU2V0dGluZ3MmIHNldHRpbmdz
KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudC5zZXR0aW5ncygpOyB9CkBAIC0xMzQsOCArMTMx
LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRDdXJyZW50U1ZHRm9udEZhY2VSdWxlcygpOwog
Ci0gICAgdm9pZCBzZXROZXdTdGF0ZVdpdGhFbGVtZW50KGNvbnN0IEVsZW1lbnQmKTsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVy
U3R5bGUqLCBjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZSosIEtleWZyYW1lVmFsdWUmKTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgRWxlbWVu
dCYsIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVSdWxlS2V5ZnJhbWUqLCBLZXlmcmFt
ZVZhbHVlJik7CiAgICAgYm9vbCBpc0FuaW1hdGlvbk5hbWVWYWxpZChjb25zdCBTdHJpbmcmKTsK
IAogICAgIC8vIFRoZXNlIG1ldGhvZHMgd2lsbCBnaXZlIGJhY2sgdGhlIHNldCBvZiBydWxlcyB0
aGF0IG1hdGNoZWQgZm9yIGEgZ2l2ZW4gZWxlbWVudCAob3IgYSBwc2V1ZG8tZWxlbWVudCkuCkBA
IC0xNDksMTEgKzE0NSw2IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+
IHN0eWxlUnVsZXNGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQqLCB1bnNpZ25lZCBydWxlc1RvSW5j
bHVkZSA9IEFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxl
Pj4gcHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoY29uc3QgRWxlbWVudCosIFBzZXVkb0lkLCB1
bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9IEFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwogCi0gICAgdm9p
ZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4pOwotICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0
eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7Ci0KLSAgICB2b2lkIGluaXRpYWxpemVGb250
U3R5bGUoKTsKLQogICAgIGJvb2wgaGFzU2VsZWN0b3JGb3JJZChjb25zdCBBdG9tU3RyaW5nJikg
Y29uc3Q7CiAgICAgYm9vbCBoYXNTZWxlY3RvckZvckF0dHJpYnV0ZShjb25zdCBFbGVtZW50Jiwg
Y29uc3QgQXRvbVN0cmluZyYpIGNvbnN0OwogCkBAIC0xODEsMjQgKzE3MiwxNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBpbnZhbGlkYXRlTWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlKCk7CiAgICAgdm9p
ZCBjbGVhckNhY2hlZERlY2xhcmF0aW9uc0FmZmVjdGVkQnlWaWV3cG9ydFVuaXRzKCk7CiAKLXBy
aXZhdGU6Ci0gICAgZW51bSBjbGFzcyBVc2VNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUgeyBZZXMs
IE5vIH07Ci0gICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0
JiwgY29uc3QgRWxlbWVudCYsIFVzZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZSA9IFVzZU1hdGNo
ZWREZWNsYXJhdGlvbnNDYWNoZTo6WWVzKTsKLQotICAgIERvY3VtZW50UnVsZVNldHMgbV9ydWxl
U2V0czsKKyAgICBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJz
KCkgeyByZXR1cm4gbV9pbnNwZWN0b3JDU1NPTVdyYXBwZXJzOyB9CiAKLSAgICB0eXBlZGVmIEhh
c2hNYXA8QXRvbVN0cmluZ0ltcGwqLCBSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPj4gS2V5ZnJh
bWVzUnVsZU1hcDsKLSAgICBLZXlmcmFtZXNSdWxlTWFwIG1fa2V5ZnJhbWVzUnVsZU1hcDsKK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBhZ2VSdWxlQ29sbGVjdG9yOwogCi1wdWJsaWM6CiAg
ICAgY2xhc3MgU3RhdGUgewogICAgIHB1YmxpYzoKICAgICAgICAgU3RhdGUoKSB7IH0KLSAgICAg
ICAgU3RhdGUoY29uc3QgRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGRvY3VtZW50RWxlbWVudFN0eWxlID0gbnVsbHB0ciwgY29uc3Qg
U2VsZWN0b3JGaWx0ZXIqID0gbnVsbHB0cik7CisgICAgICAgIFN0YXRlKGNvbnN0IEVsZW1lbnQm
LCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBkb2N1
bWVudEVsZW1lbnRTdHlsZSA9IG51bGxwdHIpOwogCiAgICAgcHVibGljOgotICAgICAgICB2b2lk
IGNsZWFyKCk7Ci0KICAgICAgICAgY29uc3QgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZWxlbWVudDsgfQogCiAgICAgICAgIHZvaWQgc2V0U3R5bGUoc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPik7CkBAIC0yMTIsOCArMTk2LDYgQEAgcHVibGljOgogICAgICAgICBjb25z
dCBSZW5kZXJTdHlsZSogdXNlckFnZW50QXBwZWFyYW5jZVN0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV91c2VyQWdlbnRBcHBlYXJhbmNlU3R5bGUuZ2V0KCk7IH0KICAgICAgICAgdm9pZCBzZXRVc2Vy
QWdlbnRBcHBlYXJhbmNlU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZSkg
eyBtX3VzZXJBZ2VudEFwcGVhcmFuY2VTdHlsZSA9IFdURk1vdmUoc3R5bGUpOyB9CiAKLSAgICAg
ICAgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVjdG9yRmlsdGVyKCkgY29uc3QgeyByZXR1cm4g
bV9zZWxlY3RvckZpbHRlcjsgfQotICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBjb25z
dCBFbGVtZW50KiBtX2VsZW1lbnQgeyBudWxscHRyIH07CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKQEAgLTIyMSwxOCArMjAzLDE4IEBAIHB1YmxpYzoKICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX293bmVkUGFyZW50U3R5bGU7CiAg
ICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGUgeyBudWxscHRyIH07
CiAKLSAgICAgICAgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIG1fc2VsZWN0b3JGaWx0ZXIgeyBudWxs
cHRyIH07Ci0KICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX3VzZXJBZ2Vu
dEFwcGVhcmFuY2VTdHlsZTsKICAgICB9OwogCi0gICAgU3RhdGUmIHN0YXRlKCkgeyByZXR1cm4g
bV9zdGF0ZTsgfQotICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGU7IH0KKyAgICBTdHlsZTo6QnVpbGRlckNvbnRleHQgYnVpbGRlckNvbnRleHQoY29uc3QgU3Rh
dGUmKTsKIAotICAgIEluc3BlY3RvckNTU09NV3JhcHBlcnMmIGluc3BlY3RvckNTU09NV3JhcHBl
cnMoKSB7IHJldHVybiBtX2luc3BlY3RvckNTU09NV3JhcHBlcnM7IH0KKyAgICBlbnVtIGNsYXNz
IFVzZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZSB7IFllcywgTm8gfTsKKyAgICB2b2lkIGFwcGx5
TWF0Y2hlZFByb3BlcnRpZXMoU3RhdGUmLCBjb25zdCBNYXRjaFJlc3VsdCYsIGNvbnN0IEVsZW1l
bnQmLCBVc2VNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUgPSBVc2VNYXRjaGVkRGVjbGFyYXRpb25z
Q2FjaGU6Olllcyk7CiAKLXByaXZhdGU6Ci0gICAgdm9pZCBjYWNoZUJvcmRlckFuZEJhY2tncm91
bmQoKTsKKyAgICBEb2N1bWVudFJ1bGVTZXRzIG1fcnVsZVNldHM7CisKKyAgICB0eXBlZGVmIEhh
c2hNYXA8QXRvbVN0cmluZ0ltcGwqLCBSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPj4gS2V5ZnJh
bWVzUnVsZU1hcDsKKyAgICBLZXlmcmFtZXNSdWxlTWFwIG1fa2V5ZnJhbWVzUnVsZU1hcDsKIAog
ICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgbV9tZWRpYVF1ZXJ5RXZhbHVhdG9yOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gbV9yb290RGVmYXVsdFN0eWxlOwpAQCAtMjUxLDggKzIz
Myw2IEBAIHByaXZhdGU6CiAKICAgICBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzIG1faW5zcGVjdG9y
Q1NTT01XcmFwcGVyczsKIAotICAgIFN0YXRlIG1fc3RhdGU7Ci0KICAgICBTdHlsZTo6TWF0Y2hl
ZERlY2xhcmF0aW9uc0NhY2hlIG1fbWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlOwogCiAgICAgYm9v
bCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyB7IHRydWUgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4
IGFkYzAzNjE5ZmNiLi42MjQ0NzQxNmZiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC00Myw4ICs0Myw4
IEBACiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNl
cnZlci5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRlICJT
dHlsZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKLSNpbmNsdWRlICJT
dHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGV4dE1ldHJpY3MuaCIKICNpbmNsdWRlICJUZXh0
UnVuLmgiCiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CkBAIC0xNzEsMTUgKzE3
MSwxOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjb25zdCBTdHJp
bmcmIG5ld0ZvbnQpCiAgICAgbmV3U3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVu
dC5mb250U2VsZWN0b3IoKSk7CiAKICAgICAvLyBOb3cgbWFwIHRoZSBmb250IHByb3BlcnR5IGxv
bmdoYW5kcyBpbnRvIHRoZSBzdHlsZS4KLSAgICBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
ID0gY2FudmFzKCkuc3R5bGVSZXNvbHZlcigpOwotICAgIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9w
ZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpLmdldCgpLCBXVEZNb3ZlKG5ld1N0eWxl
KSk7Ci0gICAgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJv
cGVydHlGb250U3R5bGUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3Bl
cnR5Rm9udFN0eWxlKS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9D
dXJyZW50U3R5bGUoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMsIHBhcnNlZFN0eWxlLT5nZXRQ
cm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzKS5nZXQoKSk7Ci0gICAg
c3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlGb250
V2VpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRX
ZWlnaHQpLmdldCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb0N1cnJlbnRT
dHlsZShDU1NQcm9wZXJ0eUZvbnRTaXplLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0eUZvbnRTaXplKS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5hcHBseVBy
b3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBwYXJzZWRTdHlsZS0+
Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpLmdldCgpKTsKLQotICAg
IG1vZGlmaWFibGVTdGF0ZSgpLmZvbnQuaW5pdGlhbGl6ZShkb2N1bWVudC5mb250U2VsZWN0b3Io
KSwgKnN0eWxlUmVzb2x2ZXIuc3R5bGUoKSk7CisKKyAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3Vs
dDsKKyAgICBhdXRvIHBhcmVudFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKCpuZXdTdHlsZSk7
CisgICAgV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXIgc3R5bGVCdWlsZGVyKCpuZXdTdHlsZSwgeyBk
b2N1bWVudCwgcGFyZW50U3R5bGUgfSwgbWF0Y2hSZXN1bHQsIHsgfSk7CisKKyAgICBzdHlsZUJ1
aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSwgcGFyc2VkU3R5
bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KS5nZXQoKSk7Cisg
ICAgc3R5bGVCdWlsZGVyLmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSwg
cGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUpLmdl
dCgpKTsKKyAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Rm9u
dFZhcmlhbnRDYXBzLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eUZvbnRWYXJpYW50Q2FwcykuZ2V0KCkpOworICAgIHN0eWxlQnVpbGRlci5hcHBseVByb3BlcnR5
VmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NW
YWx1ZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpLmdldCgpKTsKKyAgICBzdHlsZUJ1aWxkZXIuYXBw
bHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUsIHBhcnNlZFN0eWxlLT5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpLmdldCgpKTsKKyAgICBzdHlsZUJ1aWxk
ZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VkU3R5bGUt
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQoKSk7CisKKyAg
ICBtb2RpZmlhYmxlU3RhdGUoKS5mb250LmluaXRpYWxpemUoZG9jdW1lbnQuZm9udFNlbGVjdG9y
KCksICpuZXdTdHlsZSk7CiB9CiAKIHN0YXRpYyBDYW52YXNUZXh0QWxpZ24gdG9DYW52YXNUZXh0
QWxpZ24oVGV4dEFsaWduIHRleHRBbGlnbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1Byb3BlcnR5Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNj
YWRlLmgKaW5kZXggMDA3NWY3ZmViZDkuLjU0OGM5ZGUzNzUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9Qcm9wZXJ0eUNhc2NhZGUuaApAQCAtMzYsMzMgKzM2LDYgQEAgY2xhc3MgU3R5bGVSZXNvbHZl
cjsKIAogbmFtZXNwYWNlIFN0eWxlIHsKIAotaW5saW5lIGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5r
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKLXsKLSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
TGVmdENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
Qm90dG9tQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNhcmV0Q29sb3I6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUNvbHVtblJ1bGVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4
dERlY29yYXRpb25Db2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lz
Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3I6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
RmlsbDoKLSAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlT
dHJva2VDb2xvcjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBjbGFzcyBQcm9wZXJ0eUNh
c2NhZGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlQnVpbGRlci5jcHAKaW5kZXggMTMyODk2Y2NiZDMuLmQ0YzYwMGU4NGRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlci5jcHAKQEAgLTM3LDI5ICszNyw0OCBAQAog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyR2VuZXJhdGVkLmgi
CiAjaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIlN0eWxlUmVz
b2x2ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFN0eWxlIHsKIAogc3Rh
dGljIGNvbnN0IENTU1Byb3BlcnR5SUQgZmlyc3RMb3dQcmlvcml0eVByb3BlcnR5ID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJvcGVydHlJRD4obGFzdEhpZ2hQcmlvcml0eVByb3BlcnR5ICsgMSk7CiAKLXN0
YXRpYyBQcm9wZXJ0eUNhc2NhZGU6OkRpcmVjdGlvbiBkaXJlY3Rpb25Gcm9tU3R5bGUoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlKQoraW5saW5lIFByb3BlcnR5Q2FzY2FkZTo6RGlyZWN0aW9uIGRp
cmVjdGlvbkZyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgcmV0dXJu
IHsgc3R5bGUuZGlyZWN0aW9uKCksIHN0eWxlLndyaXRpbmdNb2RlKCkgfTsKIH0KIAotQnVpbGRl
cjo6QnVpbGRlcihSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFN0eWxlUmVzb2x2ZXImIHJlc29s
dmVyLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIE9wdGlvblNldDxDYXNjYWRlTGV2
ZWw+IGNhc2NhZGVMZXZlbHMsIFByb3BlcnR5Q2FzY2FkZTo6SW5jbHVkZWRQcm9wZXJ0aWVzIGlu
Y2x1ZGVkUHJvcGVydGllcykKLSAgICA6IG1fY2FzY2FkZShtYXRjaFJlc3VsdCwgY2FzY2FkZUxl
dmVscywgaW5jbHVkZWRQcm9wZXJ0aWVzLCBkaXJlY3Rpb25Gcm9tU3R5bGUoc3R5bGUpKQotICAg
ICwgbV9zdGF0ZSgqdGhpcywgc3R5bGUsICpyZXNvbHZlci5wYXJlbnRTdHlsZSgpLCByZXNvbHZl
ci5yb290RWxlbWVudFN0eWxlKCksIHJlc29sdmVyLmRvY3VtZW50KCksIHJlc29sdmVyLmVsZW1l
bnQoKSkKK2lubGluZSBib29sIGlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQpCiB7Ci0gICAgQVNTRVJUKHJlc29sdmVyLnBhcmVudFN0eWxlKCkpOworICAgIHN3aXRj
aCAoaWQpIHsKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJp
Z2h0Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Q2FyZXRD
b2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU91
dGxpbmVDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uUnVsZUNvbG9yOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbkNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRUZXh0RW1waGFzaXNDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEZp
bGxDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlGaWxsOgorICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2U6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVN0cm9rZUNvbG9yOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LUJ1aWxkZXI6OkJ1aWxkZXIoU3R5bGVSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IE1hdGNoUmVz
dWx0JiBtYXRjaFJlc3VsdCwgT3B0aW9uU2V0PENhc2NhZGVMZXZlbD4gY2FzY2FkZUxldmVscywg
UHJvcGVydHlDYXNjYWRlOjpJbmNsdWRlZFByb3BlcnRpZXMgaW5jbHVkZWRQcm9wZXJ0aWVzKQot
ICAgIDogQnVpbGRlcigqcmVzb2x2ZXIuc3R5bGUoKSwgcmVzb2x2ZXIsIG1hdGNoUmVzdWx0LCBj
YXNjYWRlTGV2ZWxzLCBpbmNsdWRlZFByb3BlcnRpZXMpCitCdWlsZGVyOjpCdWlsZGVyKFJlbmRl
clN0eWxlJiBzdHlsZSwgQnVpbGRlckNvbnRleHQmJiBjb250ZXh0LCBjb25zdCBNYXRjaFJlc3Vs
dCYgbWF0Y2hSZXN1bHQsIE9wdGlvblNldDxDYXNjYWRlTGV2ZWw+IGNhc2NhZGVMZXZlbHMsIFBy
b3BlcnR5Q2FzY2FkZTo6SW5jbHVkZWRQcm9wZXJ0aWVzIGluY2x1ZGVkUHJvcGVydGllcykKKyAg
ICA6IG1fY2FzY2FkZShtYXRjaFJlc3VsdCwgY2FzY2FkZUxldmVscywgaW5jbHVkZWRQcm9wZXJ0
aWVzLCBkaXJlY3Rpb25Gcm9tU3R5bGUoc3R5bGUpKQorICAgICwgbV9zdGF0ZSgqdGhpcywgc3R5
bGUsIFdURk1vdmUoY29udGV4dCkpCiB7Ci0gICAgQVNTRVJUKHJlc29sdmVyLnN0eWxlKCkpOwog
fQogCiBCdWlsZGVyOjp+QnVpbGRlcigpID0gZGVmYXVsdDsKQEAgLTk3LDkgKzExNiwxMiBAQCB2
b2lkIEJ1aWxkZXI6OmFwcGx5TG93UHJpb3JpdHlQcm9wZXJ0aWVzKCkKICAgICBBU1NFUlQoIW1f
c3RhdGUuZm9udERpcnR5KCkpOwogfQogCi12b2lkIEJ1aWxkZXI6OmFwcGx5UHJvcGVydHlWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIENTU1ZhbHVlJiB2YWx1ZSkKK3ZvaWQgQnVpbGRl
cjo6YXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgQ1NTVmFsdWUq
IHZhbHVlKQogewotICAgIGFwcGx5UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIFNlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2hEZWZhdWx0KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm47
CisKKyAgICBhcHBseVByb3BlcnR5KHByb3BlcnR5SUQsICp2YWx1ZSwgU2VsZWN0b3JDaGVja2Vy
OjpNYXRjaERlZmF1bHQpOwogCiAgICAgbV9zdGF0ZS51cGRhdGVGb250KCk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlQnVpbGRlci5oCmluZGV4IDQ2M2Q4NTc0NzljLi4xMGFlNjc2MjI1OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyLmgKQEAgLTM1LDggKzM1LDcgQEAgbmFtZXNwYWNl
IFN0eWxlIHsKIGNsYXNzIEJ1aWxkZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIEJ1aWxkZXIoUmVuZGVyU3R5bGUmLCBjb25zdCBTdHlsZVJlc29sdmVyJiwg
Y29uc3QgTWF0Y2hSZXN1bHQmLCBPcHRpb25TZXQ8Q2FzY2FkZUxldmVsPiwgUHJvcGVydHlDYXNj
YWRlOjpJbmNsdWRlZFByb3BlcnRpZXMgPSBQcm9wZXJ0eUNhc2NhZGU6OkluY2x1ZGVkUHJvcGVy
dGllczo6QWxsKTsKLSAgICBCdWlsZGVyKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBNYXRjaFJlc3Vs
dCYsIE9wdGlvblNldDxDYXNjYWRlTGV2ZWw+LCBQcm9wZXJ0eUNhc2NhZGU6OkluY2x1ZGVkUHJv
cGVydGllcyA9IFByb3BlcnR5Q2FzY2FkZTo6SW5jbHVkZWRQcm9wZXJ0aWVzOjpBbGwpOworICAg
IEJ1aWxkZXIoUmVuZGVyU3R5bGUmLCBCdWlsZGVyQ29udGV4dCYmLCBjb25zdCBNYXRjaFJlc3Vs
dCYsIE9wdGlvblNldDxDYXNjYWRlTGV2ZWw+LCBQcm9wZXJ0eUNhc2NhZGU6OkluY2x1ZGVkUHJv
cGVydGllcyA9IFByb3BlcnR5Q2FzY2FkZTo6SW5jbHVkZWRQcm9wZXJ0aWVzOjpBbGwpOwogICAg
IH5CdWlsZGVyKCk7CiAKICAgICB2b2lkIGFwcGx5QWxsUHJvcGVydGllcygpOwpAQCAtNDYsNyAr
NDUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCkgeyBhcHBseVByb3BlcnRpZXMocHJvcGVydHlJRCwgcHJvcGVydHlJRCk7IH0KICAg
ICB2b2lkIGFwcGx5Q3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAotICAgIHZv
aWQgYXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlJik7CisgICAgdm9p
ZCBhcHBseVByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKIAogICAgIEJ1
aWxkZXJTdGF0ZSYgc3RhdGUoKSB7IHJldHVybiBtX3N0YXRlOyB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcAppbmRleCAwMTUxMTZiNTk2Ny4uY2UwOGNhZWNh
MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKQEAgLTUx
LDE1ICs1MSwxMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFN0eWxlIHsKIAot
QnVpbGRlclN0YXRlOjpCdWlsZGVyU3RhdGUoQnVpbGRlciYgYnVpbGRlciwgUmVuZGVyU3R5bGUm
IHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxl
KiByb290RWxlbWVudFN0eWxlLCBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQpCitCdWlsZGVyU3RhdGU6OkJ1aWxkZXJTdGF0ZShCdWlsZGVyJiBidWlsZGVy
LCBSZW5kZXJTdHlsZSYgc3R5bGUsIEJ1aWxkZXJDb250ZXh0JiYgY29udGV4dCkKICAgICA6IG1f
YnVpbGRlcihidWlsZGVyKQogICAgICwgbV9zdHlsZU1hcCgqdGhpcykKICAgICAsIG1fc3R5bGUo
c3R5bGUpCi0gICAgLCBtX3BhcmVudFN0eWxlKHBhcmVudFN0eWxlKQotICAgICwgbV9yb290RWxl
bWVudFN0eWxlKHJvb3RFbGVtZW50U3R5bGUpCi0gICAgLCBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEoJnN0eWxlLCByb290RWxlbWVudFN0eWxlLCBkb2N1bWVudC5yZW5kZXJWaWV3KCkpCi0g
ICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQotICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAg
LCBtX2NvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKKyAgICAsIG1fY3NzVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSgmc3R5bGUsIHJvb3RFbGVtZW50U3R5bGUoKSwgZG9jdW1lbnQoKS5yZW5kZXJWaWV3
KCkpCiB7CiB9CiAKQEAgLTM1OSw3ICszNTYsNyBAQCB2b2lkIEJ1aWxkZXJTdGF0ZTo6dXBkYXRl
Rm9udEZvclRleHRTaXplQWRqdXN0KCkKIAogdm9pZCBCdWlsZGVyU3RhdGU6OnVwZGF0ZUZvbnRG
b3Jab29tQ2hhbmdlKCkKIHsKLSAgICBpZiAobV9zdHlsZS5lZmZlY3RpdmVab29tKCkgPT0gbV9w
YXJlbnRTdHlsZS5lZmZlY3RpdmVab29tKCkgJiYgbV9zdHlsZS50ZXh0Wm9vbSgpID09IG1fcGFy
ZW50U3R5bGUudGV4dFpvb20oKSkKKyAgICBpZiAobV9zdHlsZS5lZmZlY3RpdmVab29tKCkgPT0g
cGFyZW50U3R5bGUoKS5lZmZlY3RpdmVab29tKCkgJiYgbV9zdHlsZS50ZXh0Wm9vbSgpID09IHBh
cmVudFN0eWxlKCkudGV4dFpvb20oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29uc3QgYXV0
byYgY2hpbGRGb250ID0gbV9zdHlsZS5mb250RGVzY3JpcHRpb24oKTsKQEAgLTM3Niw3ICszNzMs
NyBAQCB2b2lkIEJ1aWxkZXJTdGF0ZTo6dXBkYXRlRm9udEZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uo
KQogICAgIGlmIChjaGlsZEZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgY29uc3QgYXV0byYgcGFyZW50Rm9udCA9IG1fcGFyZW50U3R5bGUuZm9udERlc2NyaXB0
aW9uKCk7CisgICAgY29uc3QgYXV0byYgcGFyZW50Rm9udCA9IHBhcmVudFN0eWxlKCkuZm9udERl
c2NyaXB0aW9uKCk7CiAgICAgaWYgKGNoaWxkRm9udC51c2VGaXhlZERlZmF1bHRTaXplKCkgPT0g
cGFyZW50Rm9udC51c2VGaXhlZERlZmF1bHRTaXplKCkpCiAgICAgICAgIHJldHVybjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmgKaW5kZXggZTU4NjRlZjNkZjAuLjcy
NTgzOGNhNjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJT
dGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmgKQEAg
LTQxLDE4ICs0MSwyNSBAQCBuYW1lc3BhY2UgU3R5bGUgewogCiBjbGFzcyBCdWlsZGVyOwogCitz
dHJ1Y3QgQnVpbGRlckNvbnRleHQgeworICAgIFJlZjxjb25zdCBEb2N1bWVudD4gZG9jdW1lbnQ7
CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlOworICAgIGNvbnN0IFJlbmRlclN0
eWxlKiByb290RWxlbWVudFN0eWxlID0gbnVsbHB0cjsKKyAgICBSZWZQdHI8Y29uc3QgRWxlbWVu
dD4gZWxlbWVudCA9IG51bGxwdHI7Cit9OworCiBjbGFzcyBCdWlsZGVyU3RhdGUgewogcHVibGlj
OgotICAgIEJ1aWxkZXJTdGF0ZShCdWlsZGVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJT
dHlsZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlLCBj
b25zdCBEb2N1bWVudCYsIGNvbnN0IEVsZW1lbnQqKTsKKyAgICBCdWlsZGVyU3RhdGUoQnVpbGRl
ciYsIFJlbmRlclN0eWxlJiwgQnVpbGRlckNvbnRleHQmJik7CiAKICAgICBCdWlsZGVyJiBidWls
ZGVyKCkgeyByZXR1cm4gbV9idWlsZGVyOyB9CiAKICAgICBSZW5kZXJTdHlsZSYgc3R5bGUoKSB7
IHJldHVybiBtX3N0eWxlOyB9Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQotICAgIGNvbnN0IFJlbmRlclN0eWxlKiBy
b290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9yb290RWxlbWVudFN0eWxlOyB9Cisg
ICAgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZXh0LnBhcmVudFN0eWxlOyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQucm9vdEVsZW1lbnRTdHlsZTsgfQogCi0gICAg
Y29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudC5nZXQo
KTsgfQotICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1l
bnQuZ2V0KCk7IH0KKyAgICBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVy
biBtX2NvbnRleHQuZG9jdW1lbnQuZ2V0KCk7IH0KKyAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmVsZW1lbnQuZ2V0KCk7IH0KIAogICAgIHZvaWQg
c2V0Rm9udERlc2NyaXB0aW9uKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mJiBmb250RGVzY3JpcHRp
b24pIHsgbV9mb250RGlydHkgfD0gbV9zdHlsZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShm
b250RGVzY3JpcHRpb24pKTsgfQogICAgIHZvaWQgc2V0Rm9udFNpemUoRm9udENhc2NhZGVEZXNj
cmlwdGlvbiYsIGZsb2F0IHNpemUpOwpAQCAtNjUsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRGb250RGlydHkoKSB7IG1fZm9udERpcnR5ID0gdHJ1ZTsgfQogCiAgICAgY29uc3QgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdHlsZS5m
b250RGVzY3JpcHRpb24oKTsgfQotICAgIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIHBh
cmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fcGFyZW50U3R5bGUuZm9udERlc2NyaXB0
aW9uKCk7IH0KKyAgICBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVz
Y3JpcHRpb24oKSB7IHJldHVybiBwYXJlbnRTdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpOyB9CiAK
ICAgICAvLyBGSVhNRTogVGhlc2UgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgY2xlYW4gdXAgdGhl
IGNvZGUgdG8gdGFrZSB0aGF0IGludG8gYWNjb3VudC4KICAgICBib29sIGFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlua01hdGNoICE9IFNlbGVjdG9yQ2hl
Y2tlcjo6TWF0Y2hWaXNpdGVkOyB9CkBAIC0xMDUsMTQgKzExMiwxMCBAQCBwcml2YXRlOgogICAg
IENTU1RvU3R5bGVNYXAgbV9zdHlsZU1hcDsKIAogICAgIFJlbmRlclN0eWxlJiBtX3N0eWxlOwot
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBtX3BhcmVudFN0eWxlOwotICAgIGNvbnN0IFJlbmRlclN0
eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGU7CisgICAgY29uc3QgQnVpbGRlckNvbnRleHQgbV9jb250
ZXh0OwogCiAgICAgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBtX2Nzc1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGE7CiAKLSAgICBSZWY8Y29uc3QgRG9jdW1lbnQ+IG1fZG9jdW1lbnQ7Ci0g
ICAgUmVmUHRyPGNvbnN0IEVsZW1lbnQ+IG1fZWxlbWVudDsKLQogICAgIEJpdG1hcDxudW1DU1NQ
cm9wZXJ0aWVzPiBtX2FwcGxpZWRQcm9wZXJ0aWVzOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2Fw
cGxpZWRDdXN0b21Qcm9wZXJ0aWVzOwogICAgIEJpdG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBtX2lu
UHJvZ3Jlc3NQcm9wZXJ0aWVzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383232</attachid>
            <date>2019-11-09 16:26:23 -0800</date>
            <delta_ts>2019-11-10 00:01:58 -0800</delta_ts>
            <desc>patch</desc>
            <filename>styleresolver-state-stack-3.patch</filename>
            <type>text/plain</type>
            <size>41039</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjZmI1MWEwMDA0OS4uY2U4YTc1ZWIyMjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MiBAQAorMjAxOS0xMS0wOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgU3RhY2sgYWxsb2NhdGUgU3R5bGVSZXNvbHZlciBzdGF0ZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0MDUzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3RhdGUgaXMgY3VycmVudGx5
IGF3a3dhcmRseSBhIG1lbWJlciB0aGF0IGdldHMgY2xlYXJlZC4gSXQgc2hvdWxkIGJlIHN0YWNr
IGFsbG9jYXRlZCBhbmQKKyAgICAgICAgcGFzc2VkIGFyb3VuZCB3aGVyZSBuZWVkZWQuCisKKyAg
ICAgICAgKiBhbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
S2V5ZnJhbWVFZmZlY3Q6OnVwZGF0ZUJsZW5kaW5nS2V5ZnJhbWVzKToKKyAgICAgICAgKiBjc3Mv
RE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01D
U1NSZWdpc3RlckN1c3RvbVByb3BlcnR5OjpyZWdpc3RlclByb3BlcnR5KToKKyAgICAgICAgKiBj
c3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpi
dWlsZGVyQ29udGV4dCk6CisKKyAgICAgICAgSGVscGVyIGZvciBpbml0aWFsaXppbmcgU3R5bGU6
OkJ1aWxkZXIgZnJvbSByZXNvbHZlciBzdGF0ZS4KKworICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnN0eWxlRm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OnN0eWxlRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpk
ZWZhdWx0U3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6U3RhdGU6OmNsZWFyKTogRGVsZXRlZC4KKworICAgICAgICBOb3RoaW5nIHRvIGNs
ZWFyLCBzdGF0ZSBpcyB0cmFuc2llbnQuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnNldE5ld1N0YXRlV2l0aEVsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKTogRGVs
ZXRlZC4KKworICAgICAgICBTdHlsZTo6QnVpbGRlciBjYW4gYmUgdXNlZCBkaXJlY3RseSB0byBh
cHBseSBwcm9wZXJ0aWVzIGluc3RlYWQgb2YgdmlhIHRoZXNlIGZ1bmN0aW9ucyB0aGF0IHJlcXVp
cmUgc3RhdGUgc2V0dXAuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRp
YWxpemVGb250U3R5bGUpOiBEZWxldGVkLgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjppbnNwZWN0b3JDU1NPTVdyYXBwZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcmVudFN0eWxlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnJvb3RFbGVtZW50U3R5
bGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6ZWxl
bWVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpz
dGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdGF0ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2V0Rm9udCk6CisKKyAgICAgICAgVXNlIFN0eWxlOjpCdWlsZGVyIGRpcmVjdGx5IHRvIGFwcGx5
IHByb3BlcnRpZXMuCisKKyAgICAgICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXI6OkJ1aWxkZXIpOgorCisgICAgICAgIEVuY2Fwc3Vs
dGUgaW1tdXRhYmxlIGFyZ3VtZW50cyBpbnRvIEJ1aWxkZXJDb250ZXh0IHR5cGUuCisKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyOjphcHBseVByb3BlcnR5VmFsdWUpOgorICAgICAg
ICAqIHN0eWxlL1N0eWxlQnVpbGRlci5oOgorICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlclN0
YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OkJ1aWxkZXJT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjp1cGRhdGVGb250
Rm9yWm9vbUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjp1
cGRhdGVGb250Rm9yR2VuZXJpY0ZhbWlseUNoYW5nZSk6CisgICAgICAgICogc3R5bGUvU3R5bGVC
dWlsZGVyU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnBh
cmVudFN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6
OnJvb3RFbGVtZW50U3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxk
ZXJTdGF0ZTo6ZG9jdW1lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxk
ZXJTdGF0ZTo6ZWxlbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRl
clN0YXRlOjpwYXJlbnRGb250RGVzY3JpcHRpb24pOgorCiAyMDE5LTExLTA5ICBBbnR0aSBLb2l2
aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIHN0eWxlIGFkanVzdG1lbnQg
Y29kZSBvdXQgb2YgU3R5bGVSZXNvbHZlciBhbmQgaW50byBhIGNsYXNzIG9mIGl0cyBvd24KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCmluZGV4IDc1Nzc2YzVj
ZGU1Li5mZDg5YWVkZTZlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tl
eWZyYW1lRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVF
ZmZlY3QuY3BwCkBAIC03NDQsNyArNzQ0LDYgQEAgdm9pZCBLZXlmcmFtZUVmZmVjdDo6dXBkYXRl
QmxlbmRpbmdLZXlmcmFtZXMoUmVuZGVyU3R5bGUmIGVsZW1lbnRTdHlsZSkKICAgICBTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyID0gbV90YXJnZXQtPnN0eWxlUmVzb2x2ZXIoKTsKIAogICAg
IGZvciAoYXV0byYga2V5ZnJhbWUgOiBtX3BhcnNlZEtleWZyYW1lcykgewotICAgICAgICBzdHls
ZVJlc29sdmVyLnNldE5ld1N0YXRlV2l0aEVsZW1lbnQoKm1fdGFyZ2V0KTsKICAgICAgICAgS2V5
ZnJhbWVWYWx1ZSBrZXlmcmFtZVZhbHVlKGtleWZyYW1lLmNvbXB1dGVkT2Zmc2V0LCBudWxscHRy
KTsKIAogICAgICAgICBhdXRvIHN0eWxlUHJvcGVydGllcyA9IGtleWZyYW1lLnN0eWxlLT5pbW11
dGFibGVDb3B5SWZOZWVkZWQoKTsKQEAgLTc1Miw3ICs3NTEsNyBAQCB2b2lkIEtleWZyYW1lRWZm
ZWN0Ojp1cGRhdGVCbGVuZGluZ0tleWZyYW1lcyhSZW5kZXJTdHlsZSYgZWxlbWVudFN0eWxlKQog
ICAgICAgICAgICAga2V5ZnJhbWVMaXN0LmFkZFByb3BlcnR5KHN0eWxlUHJvcGVydGllcy0+cHJv
cGVydHlBdChpKS5pZCgpKTsKIAogICAgICAgICBhdXRvIGtleWZyYW1lUnVsZSA9IFN0eWxlUnVs
ZUtleWZyYW1lOjpjcmVhdGUoV1RGTW92ZShzdHlsZVByb3BlcnRpZXMpKTsKLSAgICAgICAga2V5
ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZVJlc29sdmVyLnN0eWxlRm9yS2V5ZnJhbWUoJmVsZW1l
bnRTdHlsZSwga2V5ZnJhbWVSdWxlLnB0cigpLCBrZXlmcmFtZVZhbHVlKSk7CisgICAgICAgIGtl
eWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVSZXNvbHZlci5zdHlsZUZvcktleWZyYW1lKCptX3Rh
cmdldCwgJmVsZW1lbnRTdHlsZSwga2V5ZnJhbWVSdWxlLnB0cigpLCBrZXlmcmFtZVZhbHVlKSk7
CiAgICAgICAgIGtleWZyYW1lTGlzdC5pbnNlcnQoV1RGTW92ZShrZXlmcmFtZVZhbHVlKSk7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRE9NQ1NTUmVnaXN0ZXJDdXN0
b21Qcm9wZXJ0eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRE9NQ1NTUmVnaXN0ZXJDdXN0b21Q
cm9wZXJ0eS5jcHAKaW5kZXggMjI0OGM1YmUzMDYuLjQyZjgwYWI1ZDhhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvRE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0RPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHkuY3BwCkBAIC01
Miw3ICs1Miw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVy
dHk6OnJlZ2lzdGVyUHJvcGVydHkoRG9jdW1lbnQmIGRvY3VtCiAKICAgICAgICAgLy8gV2UgbmVl
ZCB0byBpbml0aWFsaXplIHRoaXMgc28gdGhhdCB3ZSBjYW4gc3VjY2Vzc2Z1bGx5IHBhcnNlIGNv
bXB1dGF0aW9uYWxseSBkZXBlbmRlbnQgdmFsdWVzIChsaWtlIGVtIHVuaXRzKS4KICAgICAgICAg
Ly8gV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGUgdmFsdWVzIHRvIGJlIGFjY3VyYXRlLCBzaW5j
ZSB0aGV5IHdpbGwgYmUgcmVqZWN0ZWQgbGF0ZXIgYW55d2F5Ci0gICAgICAgIHN0eWxlUmVzb2x2
ZXIuYXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlJbnZhbGlkLCBudWxscHRyLCBzdHls
ZVJlc29sdmVyLmRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKSk7CisgICAgICAgIGF1dG8gc3R5bGUg
PSBzdHlsZVJlc29sdmVyLmRlZmF1bHRTdHlsZUZvckVsZW1lbnQobnVsbHB0cik7CiAKICAgICAg
ICAgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBkZXBlbmRlbmNpZXM7CiAgICAgICAgIENTU1Byb3Bl
cnR5UGFyc2VyOjpjb2xsZWN0UGFyc2VkQ3VzdG9tUHJvcGVydHlWYWx1ZURlcGVuZGVuY2llcyhk
ZXNjcmlwdG9yLnN5bnRheCwgZmFsc2UsIGRlcGVuZGVuY2llcywgdG9rZW5pemVyLnRva2VuUmFu
Z2UoKSwgc3RyaWN0Q1NTUGFyc2VyQ29udGV4dCgpKTsKQEAgLTYwLDggKzYwLDEyIEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IERPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHk6OnJlZ2lzdGVyUHJvcGVy
dHkoRG9jdW1lbnQmIGRvY3VtCiAgICAgICAgIGlmICghZGVwZW5kZW5jaWVzLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciwgIlRoZSBnaXZlbiBp
bml0aWFsIHZhbHVlIG11c3QgYmUgY29tcHV0YXRpb25hbGx5IGluZGVwZW5kZW50LiIgfTsKIAor
CiAgICAgICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0OwotICAgICAgICBTdHlsZTo6QnVpbGRl
ciBkdW1teUJ1aWxkZXIoc3R5bGVSZXNvbHZlciwgbWF0Y2hSZXN1bHQsIHsgfSk7CisKKyAgICAg
ICAgYXV0byBwYXJlbnRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZSgqc3R5bGUpOworICAgICAg
ICBTdHlsZTo6QnVpbGRlciBkdW1teUJ1aWxkZXIoKnN0eWxlLCB7IGRvY3VtZW50LCBwYXJlbnRT
dHlsZSB9LCBtYXRjaFJlc3VsdCwgeyB9KTsKKwogICAgICAgICBpbml0aWFsVmFsdWUgPSBDU1NQ
cm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoZGVzY3JpcHRvci5u
YW1lLCBkZXNjcmlwdG9yLnN5bnRheCwgdG9rZW5pemVyLnRva2VuUmFuZ2UoKSwgZHVtbXlCdWls
ZGVyLnN0YXRlKCksIHN0cmljdENTU1BhcnNlckNvbnRleHQoKSk7CiAKICAgICAgICAgaWYgKCFp
bml0aWFsVmFsdWUgfHwgIWluaXRpYWxWYWx1ZS0+aXNSZXNvbHZlZCgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IGY0MTNmNzJhMzEwLi41ZWRiZmVjOWNlNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtODQsMTQgKzg0LDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1pbmxpbmUgdm9pZCBT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2xlYXIoKQotewotICAgIG1fZWxlbWVudCA9IG51bGxwdHI7
Ci0gICAgbV9wYXJlbnRTdHlsZSA9IG51bGxwdHI7Ci0gICAgbV9vd25lZFBhcmVudFN0eWxlID0g
bnVsbHB0cjsKLSAgICBtX3VzZXJBZ2VudEFwcGVhcmFuY2VTdHlsZSA9IG51bGxwdHI7Ci19Ci0K
IFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDog
bV9ydWxlU2V0cygqdGhpcykKICAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCkBAIC0xNzMsMTAg
KzE2NSw5IEBAIFN0eWxlUmVzb2x2ZXI6On5TdHlsZVJlc29sdmVyKCkKICNlbmRpZgogfQogCi1T
dHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3Qg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogZG9jdW1lbnRFbGVt
ZW50U3R5bGUsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3RvckZpbHRlcikKK1N0eWxlUmVz
b2x2ZXI6OlN0YXRlOjpTdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBkb2N1bWVudEVsZW1lbnRTdHls
ZSkKICAgICA6IG1fZWxlbWVudCgmZWxlbWVudCkKICAgICAsIG1fcGFyZW50U3R5bGUocGFyZW50
U3R5bGUpCi0gICAgLCBtX3NlbGVjdG9yRmlsdGVyKHNlbGVjdG9yRmlsdGVyKQogewogICAgIGJv
b2wgcmVzZXRTdHlsZUluaGVyaXRhbmNlID0gaGFzU2hhZG93Um9vdFBhcmVudChlbGVtZW50KSAm
JiBkb3duY2FzdDxTaGFkb3dSb290PihlbGVtZW50LnBhcmVudE5vZGUoKSktPnJlc2V0U3R5bGVJ
bmhlcml0YW5jZSgpOwogICAgIGlmIChyZXNldFN0eWxlSW5oZXJpdGFuY2UpCkBAIC0yMDcsMjQg
KzE5OCwyNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNBdFNoYWRvd0JvdW5kYXJ5KGNvbnN0IEVs
ZW1lbnQmIGVsZW1lbnQpCiAgICAgcmV0dXJuIHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS0+aXNT
aGFkb3dSb290KCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0TmV3U3RhdGVXaXRoRWxl
bWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50KQorU3R5bGU6OkJ1aWxkZXJDb250ZXh0IFN0eWxl
UmVzb2x2ZXI6OmJ1aWxkZXJDb250ZXh0KGNvbnN0IFN0YXRlJiBzdGF0ZSkKIHsKLSAgICAvLyBB
cHBseSB0aGUgZGVjbGFyYXRpb24gdG8gdGhlIHN0eWxlLiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2
ZXJzaW9uIG9mIHRoZSBsb2dpYyBpbiBzdHlsZUZvckVsZW1lbnQuCi0gICAgbV9zdGF0ZSA9IFN0
YXRlKGVsZW1lbnQsIG51bGxwdHIpOworICAgIHJldHVybiB7CisgICAgICAgIG1fZG9jdW1lbnQs
CisgICAgICAgICpzdGF0ZS5wYXJlbnRTdHlsZSgpLAorICAgICAgICBzdGF0ZS5yb290RWxlbWVu
dFN0eWxlKCksCisgICAgICAgIHN0YXRlLmVsZW1lbnQoKQorICAgIH07CiB9CiAKIEVsZW1lbnRT
dHlsZSBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcGFy
ZW50Qm94U3R5bGUsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yIG1hdGNoaW5nQmVoYXZpb3IsIGNvbnN0
IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3RvckZpbHRlcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
bV9pc0RlbGV0ZWQpOwogCi0gICAgbV9zdGF0ZSA9IFN0YXRlKGVsZW1lbnQsIHBhcmVudFN0eWxl
LCBtX292ZXJyaWRlRG9jdW1lbnRFbGVtZW50U3R5bGUsIHNlbGVjdG9yRmlsdGVyKTsKLSAgICBT
dGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworICAgIGF1dG8gc3RhdGUgPSBTdGF0ZShlbGVtZW50LCBw
YXJlbnRTdHlsZSwgbV9vdmVycmlkZURvY3VtZW50RWxlbWVudFN0eWxlKTsKIAogICAgIGlmIChz
dGF0ZS5wYXJlbnRTdHlsZSgpKSB7CiAgICAgICAgIHN0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxl
OjpjcmVhdGVQdHIoKSk7CiAgICAgICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKCpzdGF0
ZS5wYXJlbnRTdHlsZSgpKTsKICAgICB9IGVsc2UgewotICAgICAgICBzdGF0ZS5zZXRTdHlsZShk
ZWZhdWx0U3R5bGVGb3JFbGVtZW50KCkpOworICAgICAgICBzdGF0ZS5zZXRTdHlsZShkZWZhdWx0
U3R5bGVGb3JFbGVtZW50KCZlbGVtZW50KSk7CiAgICAgICAgIHN0YXRlLnNldFBhcmVudFN0eWxl
KFJlbmRlclN0eWxlOjpjbG9uZVB0cigqc3RhdGUuc3R5bGUoKSkpOwogICAgIH0KIApAQCAtMjQz
LDcgKzIzNyw3IEBAIEVsZW1lbnRTdHlsZSBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQo
Y29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyCiAKICAgICBDU1NEZWZhdWx0U3R5
bGVTaGVldHM6OmVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0ZvckVsZW1lbnQoZWxlbWVudCk7CiAK
LSAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IoZWxlbWVudCwgbV9ydWxlU2V0cywg
bV9zdGF0ZS5zZWxlY3RvckZpbHRlcigpKTsKKyAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xs
ZWN0b3IoZWxlbWVudCwgbV9ydWxlU2V0cywgc2VsZWN0b3JGaWx0ZXIpOwogICAgIGNvbGxlY3Rv
ci5zZXRNZWRpdW0oJm1fbWVkaWFRdWVyeUV2YWx1YXRvcik7CiAKICAgICBpZiAobWF0Y2hpbmdC
ZWhhdmlvciA9PSBSdWxlTWF0Y2hpbmdCZWhhdmlvcjo6TWF0Y2hPbmx5VXNlckFnZW50UnVsZXMp
CkBAIC0yNjAsNyArMjU0LDcgQEAgRWxlbWVudFN0eWxlIFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9y
RWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXIKIAogICAgIGF1dG8g
ZWxlbWVudFN0eWxlUmVsYXRpb25zID0gU3R5bGU6OmNvbW1pdFJlbGF0aW9uc1RvUmVuZGVyU3R5
bGUoc3R5bGUsIGVsZW1lbnQsIGNvbGxlY3Rvci5zdHlsZVJlbGF0aW9ucygpKTsKIAotICAgIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMoY29sbGVjdG9yLm1hdGNoUmVzdWx0KCksIGVsZW1lbnQpOwor
ICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoc3RhdGUsIGNvbGxlY3Rvci5tYXRjaFJlc3VsdCgp
KTsKIAogICAgIFN0eWxlOjpBZGp1c3RlciBhZGp1c3Rlcihkb2N1bWVudCgpLCAqc3RhdGUucGFy
ZW50U3R5bGUoKSwgcGFyZW50Qm94U3R5bGUsICZlbGVtZW50KTsKICAgICBhZGp1c3Rlci5hZGp1
c3QoKnN0YXRlLnN0eWxlKCksIHN0YXRlLnVzZXJBZ2VudEFwcGVhcmFuY2VTdHlsZSgpKTsKQEAg
LTI2OCwyNyArMjYyLDIyIEBAIEVsZW1lbnRTdHlsZSBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVs
ZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyCiAgICAgaWYgKHN0YXRl
LnN0eWxlKCktPmhhc1ZpZXdwb3J0VW5pdHMoKSkKICAgICAgICAgZG9jdW1lbnQoKS5zZXRIYXNT
dHlsZVdpdGhWaWV3cG9ydFVuaXRzKCk7CiAKLSAgICBzdGF0ZS5jbGVhcigpOyAvLyBDbGVhciBv
dXQgZm9yIHRoZSBuZXh0IHJlc29sdmUuCi0KICAgICByZXR1cm4geyBzdGF0ZS50YWtlU3R5bGUo
KSwgV1RGTW92ZShlbGVtZW50U3R5bGVSZWxhdGlvbnMpIH07CiB9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5k
ZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZSoga2V5ZnJhbWUs
IEtleWZyYW1lVmFsdWUmIGtleWZyYW1lVmFsdWUpCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5
bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgY29uc3QgU3R5bGVSdWxlS2V5ZnJh
bWUqIGtleWZyYW1lLCBLZXlmcmFtZVZhbHVlJiBrZXlmcmFtZVZhbHVlKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKCFtX2lzRGVsZXRlZCk7CiAKICAgICBNYXRjaFJlc3VsdCByZXN1bHQ7CiAgICAg
cmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5hcHBlbmQoeyAma2V5ZnJhbWUtPnByb3BlcnRpZXMo
KSB9KTsKIAotICAgIEFTU0VSVCghbV9zdGF0ZS5zdHlsZSgpKTsKLQotICAgIFN0YXRlJiBzdGF0
ZSA9IG1fc3RhdGU7CisgICAgYXV0byBzdGF0ZSA9IFN0YXRlKGVsZW1lbnQsIG51bGxwdHIpOwog
Ci0gICAgLy8gQ3JlYXRlIHRoZSBzdHlsZQogICAgIHN0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxl
OjpjbG9uZVB0cigqZWxlbWVudFN0eWxlKSk7CiAgICAgc3RhdGUuc2V0UGFyZW50U3R5bGUoUmVu
ZGVyU3R5bGU6OmNsb25lUHRyKCplbGVtZW50U3R5bGUpKTsKIAotICAgIFN0eWxlOjpCdWlsZGVy
IGJ1aWxkZXIoKnRoaXMsIHJlc3VsdCwgeyBTdHlsZTo6Q2FzY2FkZUxldmVsOjpBdXRob3IgfSk7
CisgICAgU3R5bGU6OkJ1aWxkZXIgYnVpbGRlcigqc3RhdGUuc3R5bGUoKSwgYnVpbGRlckNvbnRl
eHQoc3RhdGUpLCByZXN1bHQsIHsgU3R5bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9yIH0pOwogICAg
IGJ1aWxkZXIuYXBwbHlBbGxQcm9wZXJ0aWVzKCk7CiAKICAgICBTdHlsZTo6QWRqdXN0ZXIgYWRq
dXN0ZXIoZG9jdW1lbnQoKSwgKnN0YXRlLnBhcmVudFN0eWxlKCksIG51bGxwdHIsIG51bGxwdHIp
OwpAQCAtMzcxLDEyICszNjAsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxl
c0ZvckFuaW1hdGlvbihjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW4KIAogICAgIC8v
IENvbnN0cnVjdCBhbmQgcG9wdWxhdGUgdGhlIHN0eWxlIGZvciBlYWNoIGtleWZyYW1lLgogICAg
IGZvciAoYXV0byYga2V5ZnJhbWUgOiAqa2V5ZnJhbWVzKSB7Ci0gICAgICAgIHNldE5ld1N0YXRl
V2l0aEVsZW1lbnQoZWxlbWVudCk7Ci0KICAgICAgICAgLy8gQWRkIHRoaXMga2V5ZnJhbWUgc3R5
bGUgdG8gYWxsIHRoZSBpbmRpY2F0ZWQga2V5IHRpbWVzCiAgICAgICAgIGZvciAoYXV0byBrZXkg
OiBrZXlmcmFtZS0+a2V5cygpKSB7CiAgICAgICAgICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1l
VmFsdWUoMCwgbnVsbHB0cik7Ci0gICAgICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0
eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCBrZXlmcmFtZS5wdHIoKSwga2V5ZnJhbWVWYWx1
ZSkpOworICAgICAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1l
KGVsZW1lbnQsIGVsZW1lbnRTdHlsZSwga2V5ZnJhbWUucHRyKCksIGtleWZyYW1lVmFsdWUpKTsK
ICAgICAgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0S2V5KGtleSk7CiAgICAgICAgICAgICBpZiAo
YXV0byB0aW1pbmdGdW5jdGlvbkNTU1ZhbHVlID0ga2V5ZnJhbWUtPnByb3BlcnRpZXMoKS5nZXRQ
cm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5QW5pbWF0aW9uVGltaW5nRnVuY3Rpb24pKQogICAg
ICAgICAgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0VGltaW5nRnVuY3Rpb24oVGltaW5nRnVuY3Rp
b246OmNyZWF0ZUZyb21DU1NWYWx1ZSgqdGltaW5nRnVuY3Rpb25DU1NWYWx1ZS5nZXQoKSkpOwpA
QCAtMzkzLDcgKzM4MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JB
bmltYXRpb24oY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuCiAgICAgICAgICAgICB6
ZXJvUGVyY2VudEtleWZyYW1lLT5zZXRLZXkoMCk7CiAgICAgICAgIH0KICAgICAgICAgS2V5ZnJh
bWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDAsIG51bGxwdHIpOwotICAgICAgICBrZXlmcmFtZVZhbHVl
LnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCB6ZXJvUGVyY2VudEtleWZy
YW1lLCBrZXlmcmFtZVZhbHVlKSk7CisgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5
bGVGb3JLZXlmcmFtZShlbGVtZW50LCBlbGVtZW50U3R5bGUsIHplcm9QZXJjZW50S2V5ZnJhbWUs
IGtleWZyYW1lVmFsdWUpKTsKICAgICAgICAgbGlzdC5pbnNlcnQoV1RGTW92ZShrZXlmcmFtZVZh
bHVlKSk7CiAgICAgfQogCkBAIC00MDUsMzAgKzM5MiwyNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0
IFJlbgogICAgICAgICAgICAgaHVuZHJlZFBlcmNlbnRLZXlmcmFtZS0+c2V0S2V5KDEpOwogICAg
ICAgICB9CiAgICAgICAgIEtleWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1ZSgxLCBudWxscHRyKTsK
LSAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKGVsZW1lbnRT
dHlsZSwgaHVuZHJlZFBlcmNlbnRLZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOworICAgICAgICBr
ZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudCwgZWxlbWVudFN0
eWxlLCBodW5kcmVkUGVyY2VudEtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7CiAgICAgICAgIGxp
c3QuaW5zZXJ0KFdURk1vdmUoa2V5ZnJhbWVWYWx1ZSkpOwogICAgIH0KIH0KIAogc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQo
Y29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUHNldWRvU3R5bGVSZXF1ZXN0JiBwc2V1ZG9T
dHlsZVJlcXVlc3QsIGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVy
U3R5bGUqIHBhcmVudEJveFN0eWxlLCBjb25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0b3JGaWx0
ZXIpCiB7Ci0gICAgbV9zdGF0ZSA9IFN0YXRlKGVsZW1lbnQsICZwYXJlbnRTdHlsZSwgbV9vdmVy
cmlkZURvY3VtZW50RWxlbWVudFN0eWxlLCBzZWxlY3RvckZpbHRlcik7CisgICAgYXV0byBzdGF0
ZSA9IFN0YXRlKGVsZW1lbnQsICZwYXJlbnRTdHlsZSwgbV9vdmVycmlkZURvY3VtZW50RWxlbWVu
dFN0eWxlKTsKIAotICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0KLSAgICBpZiAobV9zdGF0
ZS5wYXJlbnRTdHlsZSgpKSB7CisgICAgaWYgKHN0YXRlLnBhcmVudFN0eWxlKCkpIHsKICAgICAg
ICAgc3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZVB0cigpKTsKLSAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+aW5oZXJpdEZyb20oKm1fc3RhdGUucGFyZW50U3R5bGUoKSk7CisgICAgICAg
IHN0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKCpzdGF0ZS5wYXJlbnRTdHlsZSgpKTsKICAgICB9
IGVsc2UgewotICAgICAgICBzdGF0ZS5zZXRTdHlsZShkZWZhdWx0U3R5bGVGb3JFbGVtZW50KCkp
OworICAgICAgICBzdGF0ZS5zZXRTdHlsZShkZWZhdWx0U3R5bGVGb3JFbGVtZW50KCZlbGVtZW50
KSk7CiAgICAgICAgIHN0YXRlLnNldFBhcmVudFN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZVB0cigq
c3RhdGUuc3R5bGUoKSkpOwogICAgIH0KIAotICAgIC8vIFNpbmNlIHdlIGRvbid0IHVzZSBwc2V1
ZG8tZWxlbWVudHMgaW4gYW55IG9mIG91ciBxdWlyay9wcmludCB1c2VyIGFnZW50IHJ1bGVzLCBk
b24ndCB3YXN0ZSB0aW1lIHdhbGtpbmcKLSAgICAvLyB0aG9zZSBydWxlcy4KLQotICAgIC8vIENo
ZWNrIFVBLCB1c2VyIGFuZCBhdXRob3IgcnVsZXMuCi0gICAgRWxlbWVudFJ1bGVDb2xsZWN0b3Ig
Y29sbGVjdG9yKGVsZW1lbnQsIG1fcnVsZVNldHMsIG1fc3RhdGUuc2VsZWN0b3JGaWx0ZXIoKSk7
CisgICAgRWxlbWVudFJ1bGVDb2xsZWN0b3IgY29sbGVjdG9yKGVsZW1lbnQsIG1fcnVsZVNldHMs
IHNlbGVjdG9yRmlsdGVyKTsKICAgICBjb2xsZWN0b3Iuc2V0UHNldWRvU3R5bGVSZXF1ZXN0KHBz
ZXVkb1N0eWxlUmVxdWVzdCk7CiAgICAgY29sbGVjdG9yLnNldE1lZGl1bSgmbV9tZWRpYVF1ZXJ5
RXZhbHVhdG9yKTsKICAgICBjb2xsZWN0b3IubWF0Y2hVQVJ1bGVzKCk7CkBAIC00NDUsNyArNDI2
LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9T
dHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYKIAogICAgIHN0YXRlLnN0eWxlKCktPnNldFN0
eWxlVHlwZShwc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQpOwogCi0gICAgYXBwbHlNYXRjaGVk
UHJvcGVydGllcyhjb2xsZWN0b3IubWF0Y2hSZXN1bHQoKSwgZWxlbWVudCk7CisgICAgYXBwbHlN
YXRjaGVkUHJvcGVydGllcyhzdGF0ZSwgY29sbGVjdG9yLm1hdGNoUmVzdWx0KCkpOwogCiAgICAg
U3R5bGU6OkFkanVzdGVyIGFkanVzdGVyKGRvY3VtZW50KCksICpzdGF0ZS5wYXJlbnRTdHlsZSgp
LCBwYXJlbnRCb3hTdHlsZSwgbnVsbHB0cik7CiAgICAgYWRqdXN0ZXIuYWRqdXN0KCpzdGF0ZS5z
dHlsZSgpLCBzdGF0ZS51c2VyQWdlbnRBcHBlYXJhbmNlU3R5bGUoKSk7CkBAIC00NTMsNyArNDM0
LDYgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9T
dHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYKICAgICBpZiAoc3RhdGUuc3R5bGUoKS0+aGFz
Vmlld3BvcnRVbml0cygpKQogICAgICAgICBkb2N1bWVudCgpLnNldEhhc1N0eWxlV2l0aFZpZXdw
b3J0VW5pdHMoKTsKIAotICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgogICAgIHJldHVybiBz
dGF0ZS50YWtlU3R5bGUoKTsKIH0KIApAQCAtNDY1LDMwICs0NDUsNDIgQEAgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRl
eCkKICAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkKICAgICAgICAgcmV0dXJuIFJlbmRlclN0eWxl
OjpjcmVhdGVQdHIoKTsKIAotICAgIG1fc3RhdGUgPSBTdGF0ZSgqZG9jdW1lbnRFbGVtZW50LCBt
X2RvY3VtZW50LnJlbmRlclN0eWxlKCkpOworICAgIGF1dG8gc3RhdGUgPSBTdGF0ZSgqZG9jdW1l
bnRFbGVtZW50LCBtX2RvY3VtZW50LnJlbmRlclN0eWxlKCkpOwogCi0gICAgbV9zdGF0ZS5zZXRT
dHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlUHRyKCkpOwotICAgIG1fc3RhdGUuc3R5bGUoKS0+aW5o
ZXJpdEZyb20oKm1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICBzdGF0ZS5zZXRTdHls
ZShSZW5kZXJTdHlsZTo6Y3JlYXRlUHRyKCkpOworICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRG
cm9tKCpzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOwogCi0gICAgUGFnZVJ1bGVDb2xsZWN0b3Ig
Y29sbGVjdG9yKG1fc3RhdGUsIG1fcnVsZVNldHMpOworICAgIFBhZ2VSdWxlQ29sbGVjdG9yIGNv
bGxlY3RvcihzdGF0ZSwgbV9ydWxlU2V0cyk7CiAgICAgY29sbGVjdG9yLm1hdGNoQWxsUGFnZVJ1
bGVzKHBhZ2VJbmRleCk7CiAKICAgICBhdXRvJiByZXN1bHQgPSBjb2xsZWN0b3IubWF0Y2hSZXN1
bHQoKTsKIAotICAgIFN0eWxlOjpCdWlsZGVyIGJ1aWxkZXIoKnRoaXMsIHJlc3VsdCwgeyBTdHls
ZTo6Q2FzY2FkZUxldmVsOjpBdXRob3IgfSk7CisgICAgU3R5bGU6OkJ1aWxkZXIgYnVpbGRlcigq
c3RhdGUuc3R5bGUoKSwgYnVpbGRlckNvbnRleHQoc3RhdGUpLCByZXN1bHQsIHsgU3R5bGU6OkNh
c2NhZGVMZXZlbDo6QXV0aG9yIH0pOwogICAgIGJ1aWxkZXIuYXBwbHlBbGxQcm9wZXJ0aWVzKCk7
CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4gbV9zdGF0ZS50YWtl
U3R5bGUoKTsKKyAgICByZXR1cm4gc3RhdGUudGFrZVN0eWxlKCk7CiB9CiAKLXN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgp
CitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTdHls
ZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBtX3N0YXRlLnNldFN0
eWxlKFJlbmRlclN0eWxlOjpjcmVhdGVQdHIoKSk7Ci0gICAgLy8gTWFrZSBzdXJlIG91ciBmb250
cyBhcmUgaW5pdGlhbGl6ZWQgaWYgd2UgZG9uJ3QgaW5oZXJpdCB0aGVtIGZyb20gb3VyIHBhcmVu
dCBzdHlsZS4KLSAgICBpbml0aWFsaXplRm9udFN0eWxlKCk7Ci0gICAgbV9zdGF0ZS5zdHlsZSgp
LT5mb250Q2FzY2FkZSgpLnVwZGF0ZSgmZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKSk7Ci0gICAg
cmV0dXJuIG1fc3RhdGUudGFrZVN0eWxlKCk7CisgICAgYXV0byBzdHlsZSA9IFJlbmRlclN0eWxl
OjpjcmVhdGVQdHIoKTsKKworICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzKCkuZm9u
dFJlbmRlcmluZ01vZGUoKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShzdGFu
ZGFyZEZhbWlseSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50
aWZpZXIoQ1NTVmFsdWVNZWRpdW0pOworCisgICAgYXV0byBzaXplID0gU3R5bGU6OmZvbnRTaXpl
Rm9yS2V5d29yZChDU1NWYWx1ZU1lZGl1bSwgZmFsc2UsIGRvY3VtZW50KCkpOworICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOworICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRDb21wdXRlZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZShz
aXplLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgaXM8U1ZHRWxlbWVudD4oZWxl
bWVudCksIHN0eWxlLmdldCgpLCBkb2N1bWVudCgpKSk7CisKKyAgICBmb250RGVzY3JpcHRpb24u
c2V0U2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoc2V0dGluZ3MoKS5zaG91bGRBbGxvd1Vz
ZXJJbnN0YWxsZWRGb250cygpID8gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6OlllcyA6IEFsbG93
VXNlckluc3RhbGxlZEZvbnRzOjpObyk7CisgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihX
VEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworCisgICAgc3R5bGUtPmZvbnRDYXNjYWRlKCkudXBk
YXRlKCZkb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKKworICAgIHJldHVybiBzdHlsZTsKIH0K
IAogVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiBTdHlsZVJlc29sdmVyOjpzdHlsZVJ1bGVzRm9y
RWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50LCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkK
QEAgLTUwMSw5ICs0OTMsOSBAQCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+IFN0eWxlUmVzb2x2
ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGNvbnN0IEVsZW1lbgogICAgIGlmICghZWxl
bWVudCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIG1fc3RhdGUgPSBTdGF0ZSgqZWxlbWVu
dCwgbnVsbHB0cik7CisgICAgYXV0byBzdGF0ZSA9IFN0YXRlKCplbGVtZW50LCBudWxscHRyKTsK
IAotICAgIEVsZW1lbnRSdWxlQ29sbGVjdG9yIGNvbGxlY3RvcigqZWxlbWVudCwgbV9ydWxlU2V0
cywgbV9zdGF0ZS5zZWxlY3RvckZpbHRlcigpKTsKKyAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBj
b2xsZWN0b3IoKmVsZW1lbnQsIG1fcnVsZVNldHMsIG51bGxwdHIpOwogICAgIGNvbGxlY3Rvci5z
ZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6Q29sbGVjdGluZ1J1bGVzKTsKICAgICBjb2xs
ZWN0b3Iuc2V0UHNldWRvU3R5bGVSZXF1ZXN0KFBzZXVkb1N0eWxlUmVxdWVzdChwc2V1ZG9JZCkp
OwogICAgIGNvbGxlY3Rvci5zZXRNZWRpdW0oJm1fbWVkaWFRdWVyeUV2YWx1YXRvcik7CkBAIC01
NDYsMTQgKzUzOCwxNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNsZWFyQ2FjaGVkRGVjbGFyYXRp
b25zQWZmZWN0ZWRCeVZpZXdwb3J0VW5pdHMoKQogICAgIG1fbWF0Y2hlZERlY2xhcmF0aW9uc0Nh
Y2hlLmNsZWFyRW50cmllc0FmZmVjdGVkQnlWaWV3cG9ydFVuaXRzKCk7CiB9CiAKLXZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0
Y2hSZXN1bHQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIFVzZU1hdGNoZWREZWNsYXJhdGlvbnND
YWNoZSB1c2VNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMoU3RhdGUmIHN0YXRlLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0
Y2hSZXN1bHQsIFVzZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZSB1c2VNYXRjaGVkRGVjbGFyYXRp
b25zQ2FjaGUpCiB7Ci0gICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICB1bnNpZ25lZCBj
YWNoZUhhc2ggPSB1c2VNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUgPT0gVXNlTWF0Y2hlZERlY2xh
cmF0aW9uc0NhY2hlOjpZZXMgPyBTdHlsZTo6TWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlOjpjb21w
dXRlSGFzaChtYXRjaFJlc3VsdCkgOiAwOwogICAgIGF1dG8gaW5jbHVkZWRQcm9wZXJ0aWVzID0g
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6SW5jbHVkZWRQcm9wZXJ0aWVzOjpBbGw7CiAKICAgICBh
dXRvJiBzdHlsZSA9ICpzdGF0ZS5zdHlsZSgpOwogICAgIGF1dG8mIHBhcmVudFN0eWxlID0gKnN0
YXRlLnBhcmVudFN0eWxlKCk7CisgICAgYXV0byYgZWxlbWVudCA9ICpzdGF0ZS5lbGVtZW50KCk7
CiAKICAgICBhdXRvKiBjYWNoZUVudHJ5ID0gbV9tYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUuZmlu
ZChjYWNoZUhhc2gsIG1hdGNoUmVzdWx0KTsKICAgICBpZiAoY2FjaGVFbnRyeSAmJiBTdHlsZTo6
TWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlOjppc0NhY2hlYWJsZShlbGVtZW50LCBzdHlsZSwgcGFy
ZW50U3R5bGUpKSB7CkBAIC01NzksMjQgKzU3MSwyNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25z
dAogICAgICAgICAvLyBJZiBzbywgd2UgY2FjaGUgdGhlIGJvcmRlciBhbmQgYmFja2dyb3VuZCBz
dHlsZXMgc28gdGhhdCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoKQogICAgICAgICAvLyBjYW4g
bG9vayBhdCB0aGVtIGxhdGVyIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBhIHN0eWxlZCBmb3Jt
IGNvbnRyb2wgb3Igbm90LgogICAgICAgICBhdXRvIHVzZXJBZ2VudFN0eWxlID0gUmVuZGVyU3R5
bGU6OmNsb25lUHRyKHN0eWxlKTsKLSAgICAgICAgU3R5bGU6OkJ1aWxkZXIgYnVpbGRlcigqdXNl
ckFnZW50U3R5bGUsICp0aGlzLCBtYXRjaFJlc3VsdCwgeyBTdHlsZTo6Q2FzY2FkZUxldmVsOjpV
c2VyQWdlbnQgfSk7CisgICAgICAgIFN0eWxlOjpCdWlsZGVyIGJ1aWxkZXIoKnVzZXJBZ2VudFN0
eWxlLCBidWlsZGVyQ29udGV4dChzdGF0ZSksIG1hdGNoUmVzdWx0LCB7IFN0eWxlOjpDYXNjYWRl
TGV2ZWw6OlVzZXJBZ2VudCB9KTsKICAgICAgICAgYnVpbGRlci5hcHBseUFsbFByb3BlcnRpZXMo
KTsKIAogICAgICAgICBzdGF0ZS5zZXRVc2VyQWdlbnRBcHBlYXJhbmNlU3R5bGUoV1RGTW92ZSh1
c2VyQWdlbnRTdHlsZSkpOwogICAgIH0KIAotICAgIFN0eWxlOjpCdWlsZGVyIGJ1aWxkZXIoKnRo
aXMsIG1hdGNoUmVzdWx0LCBTdHlsZTo6YWxsQ2FzY2FkZUxldmVscygpLCBpbmNsdWRlZFByb3Bl
cnRpZXMpOworICAgIFN0eWxlOjpCdWlsZGVyIGJ1aWxkZXIoKnN0YXRlLnN0eWxlKCksIGJ1aWxk
ZXJDb250ZXh0KHN0YXRlKSwgbWF0Y2hSZXN1bHQsIFN0eWxlOjphbGxDYXNjYWRlTGV2ZWxzKCks
IGluY2x1ZGVkUHJvcGVydGllcyk7CiAKICAgICAvLyBIaWdoIHByaW9yaXR5IHByb3BlcnRpZXMg
bWF5IGFmZmVjdCByZXNvbHV0aW9uIG9mIG90aGVyIHByb3BlcnRpZXMgKHRoZXkgYXJlIG1vc3Rs
eSBmb250IHJlbGF0ZWQpLgogICAgIGJ1aWxkZXIuYXBwbHlIaWdoUHJpb3JpdHlQcm9wZXJ0aWVz
KCk7CiAKICAgICAvLyBJZiB0aGUgZWZmZWN0aXZlIHpvb20gdmFsdWUgY2hhbmdlcywgd2UgY2Fu
J3QgdXNlIHRoZSBtYXRjaGVkIHByb3BlcnRpZXMgY2FjaGUuIFN0YXJ0IG92ZXIuCiAgICAgaWYg
KGNhY2hlRW50cnkgJiYgY2FjaGVFbnRyeS0+cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAh
PSBzdHlsZS5lZmZlY3RpdmVab29tKCkpCi0gICAgICAgIHJldHVybiBhcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzKG1hdGNoUmVzdWx0LCBlbGVtZW50LCBVc2VNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGU6
Ok5vKTsKKyAgICAgICAgcmV0dXJuIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoc3RhdGUsIG1hdGNo
UmVzdWx0LCBVc2VNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGU6Ok5vKTsKIAogICAgIC8vIElmIHRo
ZSBmb250IGNoYW5nZWQsIHdlIGNhbid0IHVzZSB0aGUgbWF0Y2hlZCBwcm9wZXJ0aWVzIGNhY2hl
LiBTdGFydCBvdmVyLgogICAgIGlmIChjYWNoZUVudHJ5ICYmIGNhY2hlRW50cnktPnJlbmRlclN0
eWxlLT5mb250RGVzY3JpcHRpb24oKSAhPSBzdHlsZS5mb250RGVzY3JpcHRpb24oKSkKLSAgICAg
ICAgcmV0dXJuIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQsIGVsZW1lbnQsIFVz
ZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZTo6Tm8pOworICAgICAgICByZXR1cm4gYXBwbHlNYXRj
aGVkUHJvcGVydGllcyhzdGF0ZSwgbWF0Y2hSZXN1bHQsIFVzZU1hdGNoZWREZWNsYXJhdGlvbnND
YWNoZTo6Tm8pOwogCiAgICAgYnVpbGRlci5hcHBseUxvd1ByaW9yaXR5UHJvcGVydGllcygpOwog
CkBAIC02MTAsMzkgKzYwMiw2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJv
cGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIG1f
bWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlLmFkZChzdHlsZSwgcGFyZW50U3R5bGUsIGNhY2hlSGFz
aCwgbWF0Y2hSZXN1bHQpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlU
b1N0eWxlKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiBzdHlsZSkKLXsKLSAgICBtX3N0YXRlID0gU3RhdGUoKTsKLSAgICBtX3N0
YXRlLnNldFBhcmVudFN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZVB0cigqc3R5bGUpKTsKLSAgICBt
X3N0YXRlLnNldFN0eWxlKFdURk1vdmUoc3R5bGUpKTsKLSAgICBhcHBseVByb3BlcnR5VG9DdXJy
ZW50U3R5bGUoaWQsIHZhbHVlKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQotewot
ICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIE1hdGNoUmVzdWx0IG1hdGNo
UmVzdWx0OwotICAgIFN0eWxlOjpCdWlsZGVyIGJ1aWxkZXIoKnRoaXMsIG1hdGNoUmVzdWx0LCB7
IH0pOwotICAgIGJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKGlkLCAqdmFsdWUpOwotfQotCi12
b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUoKQotewotICAgIEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRS
ZW5kZXJpbmdNb2RlKHNldHRpbmdzKCkuZm9udFJlbmRlcmluZ01vZGUoKSk7Ci0gICAgZm9udERl
c2NyaXB0aW9uLnNldE9uZUZhbWlseShzdGFuZGFyZEZhbWlseSk7Ci0gICAgZm9udERlc2NyaXB0
aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoQ1NTVmFsdWVNZWRpdW0pOwotCi0gICAg
YXV0byBzaXplID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1ZU1lZGl1bSwgZmFs
c2UsIGRvY3VtZW50KCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNp
emUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGU6OmNvbXB1dGVk
Rm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZShzaXplLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0
ZVNpemUoKSwgaXM8U1ZHRWxlbWVudD4obV9zdGF0ZS5lbGVtZW50KCkpLCBtX3N0YXRlLnN0eWxl
KCksIGRvY3VtZW50KCkpKTsKLQotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTaG91bGRBbGxvd1Vz
ZXJJbnN0YWxsZWRGb250cyhzZXR0aW5ncygpLnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRz
KCkgPyBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzIDogQWxsb3dVc2VySW5zdGFsbGVkRm9u
dHM6Ok5vKTsKLSAgICBzdHlsZSgpLT5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVz
Y3JpcHRpb24pKTsKLX0KLQogdm9pZCBTdHlsZVJlc29sdmVyOjphZGRWaWV3cG9ydERlcGVuZGVu
dE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cHJlc3Npb24mIGV4cHJlc3Npb24s
IGJvb2wgcmVzdWx0KQogewogICAgIG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0
cy5hcHBlbmQoTWVkaWFRdWVyeVJlc3VsdCB7IGV4cHJlc3Npb24sIHJlc3VsdCB9KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5oCmluZGV4IDkzZTVjNDM1OGZmLi4wZTI4MjQwY2VlMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAi
TWVkaWFRdWVyeUV2YWx1YXRvci5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVk
ZSAiUnVsZVNldC5oIgorI2luY2x1ZGUgIlN0eWxlQnVpbGRlclN0YXRlLmgiCiAjaW5jbHVkZSA8
bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgpAQCAtMTEyLDEyICsxMTMsOCBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiBwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYsIGNvbnN0IFBzZXVk
b1N0eWxlUmVxdWVzdCYsIGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHBhcmVudEJveFN0eWxlID0gbnVsbHB0ciwgY29uc3QgU2VsZWN0b3JGaWx0ZXIq
ID0gbnVsbHB0cik7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9y
UGFnZShpbnQgcGFnZUluZGV4KTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGRl
ZmF1bHRTdHlsZUZvckVsZW1lbnQoKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
IGRlZmF1bHRTdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCopOwogCi0gICAgUmVuZGVyU3R5
bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHlsZSgpOyB9Ci0gICAgY29uc3Qg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnRT
dHlsZSgpOyB9Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKTsgfQotICAgIGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmVsZW1lbnQoKTsgfQogICAgIERv
Y3VtZW50JiBkb2N1bWVudCgpIHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBjb25zdCBEb2N1
bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAgICAgY29uc3Qg
U2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudC5zZXR0aW5ncygp
OyB9CkBAIC0xMzQsOCArMTMxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRDdXJyZW50U1ZH
Rm9udEZhY2VSdWxlcygpOwogCi0gICAgdm9pZCBzZXROZXdTdGF0ZVdpdGhFbGVtZW50KGNvbnN0
IEVsZW1lbnQmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5
ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZSosIEtleWZy
YW1lVmFsdWUmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5
ZnJhbWUoY29uc3QgRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVSdWxl
S2V5ZnJhbWUqLCBLZXlmcmFtZVZhbHVlJik7CiAgICAgYm9vbCBpc0FuaW1hdGlvbk5hbWVWYWxp
ZChjb25zdCBTdHJpbmcmKTsKIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgd2lsbCBnaXZlIGJhY2sg
dGhlIHNldCBvZiBydWxlcyB0aGF0IG1hdGNoZWQgZm9yIGEgZ2l2ZW4gZWxlbWVudCAob3IgYSBw
c2V1ZG8tZWxlbWVudCkuCkBAIC0xNDksMTEgKzE0NSw2IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8
UmVmUHRyPFN0eWxlUnVsZT4+IHN0eWxlUnVsZXNGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQqLCB1
bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9IEFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwogICAgIFZlY3Rv
cjxSZWZQdHI8U3R5bGVSdWxlPj4gcHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoY29uc3QgRWxl
bWVudCosIFBzZXVkb0lkLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9IEFsbEJ1dEVtcHR5Q1NT
UnVsZXMpOwogCi0gICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlELCBD
U1NWYWx1ZSosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4pOwotICAgIHZvaWQgYXBwbHlQ
cm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7Ci0KLSAgICB2
b2lkIGluaXRpYWxpemVGb250U3R5bGUoKTsKLQogICAgIGJvb2wgaGFzU2VsZWN0b3JGb3JJZChj
b25zdCBBdG9tU3RyaW5nJikgY29uc3Q7CiAgICAgYm9vbCBoYXNTZWxlY3RvckZvckF0dHJpYnV0
ZShjb25zdCBFbGVtZW50JiwgY29uc3QgQXRvbVN0cmluZyYpIGNvbnN0OwogCkBAIC0xODEsMjQg
KzE3MiwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnZhbGlkYXRlTWF0Y2hlZERlY2xhcmF0aW9u
c0NhY2hlKCk7CiAgICAgdm9pZCBjbGVhckNhY2hlZERlY2xhcmF0aW9uc0FmZmVjdGVkQnlWaWV3
cG9ydFVuaXRzKCk7CiAKLXByaXZhdGU6Ci0gICAgZW51bSBjbGFzcyBVc2VNYXRjaGVkRGVjbGFy
YXRpb25zQ2FjaGUgeyBZZXMsIE5vIH07Ci0gICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
KGNvbnN0IE1hdGNoUmVzdWx0JiwgY29uc3QgRWxlbWVudCYsIFVzZU1hdGNoZWREZWNsYXJhdGlv
bnNDYWNoZSA9IFVzZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZTo6WWVzKTsKLQotICAgIERvY3Vt
ZW50UnVsZVNldHMgbV9ydWxlU2V0czsKKyAgICBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNw
ZWN0b3JDU1NPTVdyYXBwZXJzKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JDU1NPTVdyYXBwZXJzOyB9
CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbVN0cmluZ0ltcGwqLCBSZWZQdHI8U3R5bGVSdWxl
S2V5ZnJhbWVzPj4gS2V5ZnJhbWVzUnVsZU1hcDsKLSAgICBLZXlmcmFtZXNSdWxlTWFwIG1fa2V5
ZnJhbWVzUnVsZU1hcDsKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBhZ2VSdWxlQ29sbGVj
dG9yOwogCi1wdWJsaWM6CiAgICAgY2xhc3MgU3RhdGUgewogICAgIHB1YmxpYzoKICAgICAgICAg
U3RhdGUoKSB7IH0KLSAgICAgICAgU3RhdGUoY29uc3QgRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIGRvY3VtZW50RWxlbWVudFN0eWxl
ID0gbnVsbHB0ciwgY29uc3QgU2VsZWN0b3JGaWx0ZXIqID0gbnVsbHB0cik7CisgICAgICAgIFN0
YXRlKGNvbnN0IEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGNvbnN0
IFJlbmRlclN0eWxlKiBkb2N1bWVudEVsZW1lbnRTdHlsZSA9IG51bGxwdHIpOwogCiAgICAgcHVi
bGljOgotICAgICAgICB2b2lkIGNsZWFyKCk7Ci0KICAgICAgICAgY29uc3QgRWxlbWVudCogZWxl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQogCiAgICAgICAgIHZvaWQgc2V0U3R5
bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPik7CkBAIC0yMTIsMjcgKzE5NiwyNSBAQCBw
dWJsaWM6CiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB1c2VyQWdlbnRBcHBlYXJhbmNlU3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX3VzZXJBZ2VudEFwcGVhcmFuY2VTdHlsZS5nZXQoKTsgfQog
ICAgICAgICB2b2lkIHNldFVzZXJBZ2VudEFwcGVhcmFuY2VTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyU3R5bGU+IHN0eWxlKSB7IG1fdXNlckFnZW50QXBwZWFyYW5jZVN0eWxlID0gV1RGTW92
ZShzdHlsZSk7IH0KIAotICAgICAgICBjb25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0b3JGaWx0
ZXIoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9yRmlsdGVyOyB9Ci0gICAgICAgIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIGNvbnN0IEVsZW1lbnQqIG1fZWxlbWVudCB7IG51bGxwdHIgfTsKICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwogICAgICAgICBjb25z
dCBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZSB7IG51bGxwdHIgfTsKLSAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX293bmVkUGFyZW50U3R5bGU7CisgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxjb25zdCBSZW5kZXJTdHlsZT4gbV9vd25lZFBhcmVudFN0eWxlOwogICAgICAg
ICBjb25zdCBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlIHsgbnVsbHB0ciB9OwogCi0g
ICAgICAgIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBtX3NlbGVjdG9yRmlsdGVyIHsgbnVsbHB0ciB9
OwotCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gbV91c2VyQWdlbnRBcHBl
YXJhbmNlU3R5bGU7CiAgICAgfTsKIAotICAgIFN0YXRlJiBzdGF0ZSgpIHsgcmV0dXJuIG1fc3Rh
dGU7IH0KLSAgICBjb25zdCBTdGF0ZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9
CisgICAgU3R5bGU6OkJ1aWxkZXJDb250ZXh0IGJ1aWxkZXJDb250ZXh0KGNvbnN0IFN0YXRlJik7
CiAKLSAgICBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzKCkg
eyByZXR1cm4gbV9pbnNwZWN0b3JDU1NPTVdyYXBwZXJzOyB9CisgICAgZW51bSBjbGFzcyBVc2VN
YXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUgeyBZZXMsIE5vIH07CisgICAgdm9pZCBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzKFN0YXRlJiwgY29uc3QgTWF0Y2hSZXN1bHQmLCBVc2VNYXRjaGVkRGVjbGFy
YXRpb25zQ2FjaGUgPSBVc2VNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGU6Olllcyk7CiAKLXByaXZh
dGU6Ci0gICAgdm9pZCBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKKyAgICBEb2N1bWVudFJ1
bGVTZXRzIG1fcnVsZVNldHM7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbVN0cmluZ0ltcGwq
LCBSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPj4gS2V5ZnJhbWVzUnVsZU1hcDsKKyAgICBLZXlm
cmFtZXNSdWxlTWFwIG1fa2V5ZnJhbWVzUnVsZU1hcDsKIAogICAgIE1lZGlhUXVlcnlFdmFsdWF0
b3IgbV9tZWRpYVF1ZXJ5RXZhbHVhdG9yOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4gbV9yb290RGVmYXVsdFN0eWxlOwpAQCAtMjUxLDggKzIzMyw2IEBAIHByaXZhdGU6CiAKICAg
ICBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzIG1faW5zcGVjdG9yQ1NTT01XcmFwcGVyczsKIAotICAg
IFN0YXRlIG1fc3RhdGU7Ci0KICAgICBTdHlsZTo6TWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlIG1f
bWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlOwogCiAgICAgYm9vbCBtX21hdGNoQXV0aG9yQW5kVXNl
clN0eWxlcyB7IHRydWUgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4IGFkYzAzNjE5ZmNiLi42MjQ0NzQx
NmZiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC00Myw4ICs0Myw4IEBACiAjaW5jbHVkZSAiUmVuZGVy
VGhlbWUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgogI2luY2x1ZGUgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKICNpbmNs
dWRlICJTdHlsZVByb3BlcnRpZXMuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5j
bHVkZSAiVGV4dE1ldHJpY3MuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3Rm
L0NoZWNrZWRBcml0aG1ldGljLmg+CkBAIC0xNzEsMTUgKzE3MSwxOSBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjb25zdCBTdHJpbmcmIG5ld0ZvbnQpCiAgICAgbmV3
U3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudC5mb250U2VsZWN0b3IoKSk7CiAK
ICAgICAvLyBOb3cgbWFwIHRoZSBmb250IHByb3BlcnR5IGxvbmdoYW5kcyBpbnRvIHRoZSBzdHls
ZS4KLSAgICBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyID0gY2FudmFzKCkuc3R5bGVSZXNv
bHZlcigpOwotICAgIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVy
dHlGb250RmFtaWx5LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eUZvbnRGYW1pbHkpLmdldCgpLCBXVEZNb3ZlKG5ld1N0eWxlKSk7Ci0gICAgc3R5bGVSZXNvbHZl
ci5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlGb250U3R5bGUsIHBhcnNl
ZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFN0eWxlKS5nZXQoKSk7
Ci0gICAgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVy
dHlGb250VmFyaWFudENhcHMsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1By
b3BlcnR5Rm9udFZhcmlhbnRDYXBzKS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5hcHBseVBy
b3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBwYXJzZWRTdHlsZS0+
Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpLmdldCgpKTsKLSAgICBz
dHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRT
aXplLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXpl
KS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUo
Q1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShD
U1NQcm9wZXJ0eUxpbmVIZWlnaHQpLmdldCgpKTsKLQotICAgIG1vZGlmaWFibGVTdGF0ZSgpLmZv
bnQuaW5pdGlhbGl6ZShkb2N1bWVudC5mb250U2VsZWN0b3IoKSwgKnN0eWxlUmVzb2x2ZXIuc3R5
bGUoKSk7CisKKyAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKKyAgICBhdXRvIHBhcmVudFN0
eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKCpuZXdTdHlsZSk7CisgICAgV2ViQ29yZTo6U3R5bGU6
OkJ1aWxkZXIgc3R5bGVCdWlsZGVyKCpuZXdTdHlsZSwgeyBkb2N1bWVudCwgcGFyZW50U3R5bGUg
fSwgbWF0Y2hSZXN1bHQsIHsgfSk7CisKKyAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZh
bHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFs
dWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KS5nZXQoKSk7CisgICAgc3R5bGVCdWlsZGVyLmFwcGx5
UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgcGFyc2VkU3R5bGUtPmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUpLmdldCgpKTsKKyAgICBzdHlsZUJ1aWxk
ZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzLCBwYXJzZWRT
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2FwcykuZ2V0
KCkpOworICAgIHN0eWxlQnVpbGRlci5hcHBseVByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlGb250
V2VpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRX
ZWlnaHQpLmdldCgpKTsKKyAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKENTU1By
b3BlcnR5Rm9udFNpemUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3Bl
cnR5Rm9udFNpemUpLmdldCgpKTsKKyAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVl
KENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQoKSk7CisKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5m
b250LmluaXRpYWxpemUoZG9jdW1lbnQuZm9udFNlbGVjdG9yKCksICpuZXdTdHlsZSk7CiB9CiAK
IHN0YXRpYyBDYW52YXNUZXh0QWxpZ24gdG9DYW52YXNUZXh0QWxpZ24oVGV4dEFsaWduIHRleHRB
bGlnbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5o
IGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNjYWRlLmgKaW5kZXggMDA3NWY3ZmVi
ZDkuLjU0OGM5ZGUzNzUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0
eUNhc2NhZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaApA
QCAtMzYsMzMgKzM2LDYgQEAgY2xhc3MgU3R5bGVSZXNvbHZlcjsKIAogbmFtZXNwYWNlIFN0eWxl
IHsKIAotaW5saW5lIGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCkKLXsKLSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJU
b3BDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3I6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUNhcmV0Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVt
blJ1bGVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb25Db2xvcjoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzQ29sb3I6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRTdHJva2VDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5RmlsbDoKLSAgICBjYXNlIENTU1By
b3BlcnR5U3Ryb2tlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VDb2xvcjoKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCiBjbGFzcyBQcm9wZXJ0eUNhc2NhZGUgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlci5j
cHAKaW5kZXggMTMyODk2Y2NiZDMuLmQ0YzYwMGU4NGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlQnVpbGRlci5jcHAKQEAgLTM3LDI5ICszNyw0OCBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgi
CiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyR2VuZXJhdGVkLmgiCiAjaW5jbHVkZSAiU3R5bGVGb250
U2l6ZUZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogbmFtZXNwYWNlIFN0eWxlIHsKIAogc3RhdGljIGNvbnN0IENTU1Byb3BlcnR5
SUQgZmlyc3RMb3dQcmlvcml0eVByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4o
bGFzdEhpZ2hQcmlvcml0eVByb3BlcnR5ICsgMSk7CiAKLXN0YXRpYyBQcm9wZXJ0eUNhc2NhZGU6
OkRpcmVjdGlvbiBkaXJlY3Rpb25Gcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQor
aW5saW5lIFByb3BlcnR5Q2FzY2FkZTo6RGlyZWN0aW9uIGRpcmVjdGlvbkZyb21TdHlsZShjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIHsgc3R5bGUuZGlyZWN0aW9uKCks
IHN0eWxlLndyaXRpbmdNb2RlKCkgfTsKIH0KIAotQnVpbGRlcjo6QnVpbGRlcihSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IFN0eWxlUmVzb2x2ZXImIHJlc29sdmVyLCBjb25zdCBNYXRjaFJlc3Vs
dCYgbWF0Y2hSZXN1bHQsIE9wdGlvblNldDxDYXNjYWRlTGV2ZWw+IGNhc2NhZGVMZXZlbHMsIFBy
b3BlcnR5Q2FzY2FkZTo6SW5jbHVkZWRQcm9wZXJ0aWVzIGluY2x1ZGVkUHJvcGVydGllcykKLSAg
ICA6IG1fY2FzY2FkZShtYXRjaFJlc3VsdCwgY2FzY2FkZUxldmVscywgaW5jbHVkZWRQcm9wZXJ0
aWVzLCBkaXJlY3Rpb25Gcm9tU3R5bGUoc3R5bGUpKQotICAgICwgbV9zdGF0ZSgqdGhpcywgc3R5
bGUsICpyZXNvbHZlci5wYXJlbnRTdHlsZSgpLCByZXNvbHZlci5yb290RWxlbWVudFN0eWxlKCks
IHJlc29sdmVyLmRvY3VtZW50KCksIHJlc29sdmVyLmVsZW1lbnQoKSkKK2lubGluZSBib29sIGlz
VmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCiB7Ci0gICAgQVNTRVJU
KHJlc29sdmVyLnBhcmVudFN0eWxlKCkpOworICAgIHN3aXRjaCAoaWQpIHsKKyAgICBjYXNlIENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0
Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3I6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0
b21Db2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Q2FyZXRDb2xvcjoKKyAgICBjYXNlIENTU1By
b3BlcnR5Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcjoKKyAgICBjYXNl
IENTU1Byb3BlcnR5Q29sdW1uUnVsZUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0RGVj
b3JhdGlvbkNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNDb2xv
cjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcjoKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxs
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9r
ZUNvbG9yOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUJ1aWxkZXI6OkJ1aWxkZXIoU3R5
bGVSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgT3B0
aW9uU2V0PENhc2NhZGVMZXZlbD4gY2FzY2FkZUxldmVscywgUHJvcGVydHlDYXNjYWRlOjpJbmNs
dWRlZFByb3BlcnRpZXMgaW5jbHVkZWRQcm9wZXJ0aWVzKQotICAgIDogQnVpbGRlcigqcmVzb2x2
ZXIuc3R5bGUoKSwgcmVzb2x2ZXIsIG1hdGNoUmVzdWx0LCBjYXNjYWRlTGV2ZWxzLCBpbmNsdWRl
ZFByb3BlcnRpZXMpCitCdWlsZGVyOjpCdWlsZGVyKFJlbmRlclN0eWxlJiBzdHlsZSwgQnVpbGRl
ckNvbnRleHQmJiBjb250ZXh0LCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIE9wdGlv
blNldDxDYXNjYWRlTGV2ZWw+IGNhc2NhZGVMZXZlbHMsIFByb3BlcnR5Q2FzY2FkZTo6SW5jbHVk
ZWRQcm9wZXJ0aWVzIGluY2x1ZGVkUHJvcGVydGllcykKKyAgICA6IG1fY2FzY2FkZShtYXRjaFJl
c3VsdCwgY2FzY2FkZUxldmVscywgaW5jbHVkZWRQcm9wZXJ0aWVzLCBkaXJlY3Rpb25Gcm9tU3R5
bGUoc3R5bGUpKQorICAgICwgbV9zdGF0ZSgqdGhpcywgc3R5bGUsIFdURk1vdmUoY29udGV4dCkp
CiB7Ci0gICAgQVNTRVJUKHJlc29sdmVyLnN0eWxlKCkpOwogfQogCiBCdWlsZGVyOjp+QnVpbGRl
cigpID0gZGVmYXVsdDsKQEAgLTk3LDkgKzExNiwxMiBAQCB2b2lkIEJ1aWxkZXI6OmFwcGx5TG93
UHJpb3JpdHlQcm9wZXJ0aWVzKCkKICAgICBBU1NFUlQoIW1fc3RhdGUuZm9udERpcnR5KCkpOwog
fQogCi12b2lkIEJ1aWxkZXI6OmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQsIENTU1ZhbHVlJiB2YWx1ZSkKK3ZvaWQgQnVpbGRlcjo6YXBwbHlQcm9wZXJ0eVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgQ1NTVmFsdWUqIHZhbHVlKQogewotICAgIGFwcGx5
UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0
KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm47CisKKyAgICBhcHBseVByb3BlcnR5
KHByb3BlcnR5SUQsICp2YWx1ZSwgU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQpOwogCiAg
ICAgbV9zdGF0ZS51cGRhdGVGb250KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlci5o
CmluZGV4IDQ2M2Q4NTc0NzljLi4xMGFlNjc2MjI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVC
dWlsZGVyLmgKQEAgLTM1LDggKzM1LDcgQEAgbmFtZXNwYWNlIFN0eWxlIHsKIGNsYXNzIEJ1aWxk
ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEJ1aWxkZXIo
UmVuZGVyU3R5bGUmLCBjb25zdCBTdHlsZVJlc29sdmVyJiwgY29uc3QgTWF0Y2hSZXN1bHQmLCBP
cHRpb25TZXQ8Q2FzY2FkZUxldmVsPiwgUHJvcGVydHlDYXNjYWRlOjpJbmNsdWRlZFByb3BlcnRp
ZXMgPSBQcm9wZXJ0eUNhc2NhZGU6OkluY2x1ZGVkUHJvcGVydGllczo6QWxsKTsKLSAgICBCdWls
ZGVyKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBNYXRjaFJlc3VsdCYsIE9wdGlvblNldDxDYXNjYWRl
TGV2ZWw+LCBQcm9wZXJ0eUNhc2NhZGU6OkluY2x1ZGVkUHJvcGVydGllcyA9IFByb3BlcnR5Q2Fz
Y2FkZTo6SW5jbHVkZWRQcm9wZXJ0aWVzOjpBbGwpOworICAgIEJ1aWxkZXIoUmVuZGVyU3R5bGUm
LCBCdWlsZGVyQ29udGV4dCYmLCBjb25zdCBNYXRjaFJlc3VsdCYsIE9wdGlvblNldDxDYXNjYWRl
TGV2ZWw+LCBQcm9wZXJ0eUNhc2NhZGU6OkluY2x1ZGVkUHJvcGVydGllcyA9IFByb3BlcnR5Q2Fz
Y2FkZTo6SW5jbHVkZWRQcm9wZXJ0aWVzOjpBbGwpOwogICAgIH5CdWlsZGVyKCk7CiAKICAgICB2
b2lkIGFwcGx5QWxsUHJvcGVydGllcygpOwpAQCAtNDYsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkgeyBhcHBseVByb3Bl
cnRpZXMocHJvcGVydHlJRCwgcHJvcGVydHlJRCk7IH0KICAgICB2b2lkIGFwcGx5Q3VzdG9tUHJv
cGVydHkoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAotICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVZhbHVl
KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlJik7CisgICAgdm9pZCBhcHBseVByb3BlcnR5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKIAogICAgIEJ1aWxkZXJTdGF0ZSYgc3RhdGUoKSB7
IHJldHVybiBtX3N0YXRlOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlQnVpbGRlclN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0
YXRlLmNwcAppbmRleCAwMTUxMTZiNTk2Ny4uY2UwOGNhZWNhMjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKQEAgLTUxLDE1ICs1MSwxMiBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFN0eWxlIHsKIAotQnVpbGRlclN0YXRlOjpCdWlsZGVy
U3RhdGUoQnVpbGRlciYgYnVpbGRlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJT
dHlsZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlLCBj
b25zdCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCitCdWlsZGVy
U3RhdGU6OkJ1aWxkZXJTdGF0ZShCdWlsZGVyJiBidWlsZGVyLCBSZW5kZXJTdHlsZSYgc3R5bGUs
IEJ1aWxkZXJDb250ZXh0JiYgY29udGV4dCkKICAgICA6IG1fYnVpbGRlcihidWlsZGVyKQogICAg
ICwgbV9zdHlsZU1hcCgqdGhpcykKICAgICAsIG1fc3R5bGUoc3R5bGUpCi0gICAgLCBtX3BhcmVu
dFN0eWxlKHBhcmVudFN0eWxlKQotICAgICwgbV9yb290RWxlbWVudFN0eWxlKHJvb3RFbGVtZW50
U3R5bGUpCi0gICAgLCBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoJnN0eWxlLCByb290RWxl
bWVudFN0eWxlLCBkb2N1bWVudC5yZW5kZXJWaWV3KCkpCi0gICAgLCBtX2RvY3VtZW50KGRvY3Vt
ZW50KQotICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBtX2NvbnRleHQoV1RGTW92ZShj
b250ZXh0KSkKKyAgICAsIG1fY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgmc3R5bGUsIHJvb3RF
bGVtZW50U3R5bGUoKSwgZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCkpCiB7CiB9CiAKQEAgLTM1OSw3
ICszNTYsNyBAQCB2b2lkIEJ1aWxkZXJTdGF0ZTo6dXBkYXRlRm9udEZvclRleHRTaXplQWRqdXN0
KCkKIAogdm9pZCBCdWlsZGVyU3RhdGU6OnVwZGF0ZUZvbnRGb3Jab29tQ2hhbmdlKCkKIHsKLSAg
ICBpZiAobV9zdHlsZS5lZmZlY3RpdmVab29tKCkgPT0gbV9wYXJlbnRTdHlsZS5lZmZlY3RpdmVa
b29tKCkgJiYgbV9zdHlsZS50ZXh0Wm9vbSgpID09IG1fcGFyZW50U3R5bGUudGV4dFpvb20oKSkK
KyAgICBpZiAobV9zdHlsZS5lZmZlY3RpdmVab29tKCkgPT0gcGFyZW50U3R5bGUoKS5lZmZlY3Rp
dmVab29tKCkgJiYgbV9zdHlsZS50ZXh0Wm9vbSgpID09IHBhcmVudFN0eWxlKCkudGV4dFpvb20o
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29uc3QgYXV0byYgY2hpbGRGb250ID0gbV9zdHls
ZS5mb250RGVzY3JpcHRpb24oKTsKQEAgLTM3Niw3ICszNzMsNyBAQCB2b2lkIEJ1aWxkZXJTdGF0
ZTo6dXBkYXRlRm9udEZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoKQogICAgIGlmIChjaGlsZEZvbnQu
aXNBYnNvbHV0ZVNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgYXV0byYgcGFy
ZW50Rm9udCA9IG1fcGFyZW50U3R5bGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAgY29uc3QgYXV0
byYgcGFyZW50Rm9udCA9IHBhcmVudFN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgaWYg
KGNoaWxkRm9udC51c2VGaXhlZERlZmF1bHRTaXplKCkgPT0gcGFyZW50Rm9udC51c2VGaXhlZERl
ZmF1bHRTaXplKCkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
QnVpbGRlclN0YXRlLmgKaW5kZXggZTU4NjRlZjNkZjAuLjcyNTgzOGNhNjUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmgKQEAgLTQxLDE4ICs0MSwyNSBAQCBuYW1l
c3BhY2UgU3R5bGUgewogCiBjbGFzcyBCdWlsZGVyOwogCitzdHJ1Y3QgQnVpbGRlckNvbnRleHQg
eworICAgIFJlZjxjb25zdCBEb2N1bWVudD4gZG9jdW1lbnQ7CisgICAgY29uc3QgUmVuZGVyU3R5
bGUmIHBhcmVudFN0eWxlOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxl
ID0gbnVsbHB0cjsKKyAgICBSZWZQdHI8Y29uc3QgRWxlbWVudD4gZWxlbWVudCA9IG51bGxwdHI7
Cit9OworCiBjbGFzcyBCdWlsZGVyU3RhdGUgewogcHVibGljOgotICAgIEJ1aWxkZXJTdGF0ZShC
dWlsZGVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIGNv
bnN0IFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlLCBjb25zdCBEb2N1bWVudCYsIGNvbnN0
IEVsZW1lbnQqKTsKKyAgICBCdWlsZGVyU3RhdGUoQnVpbGRlciYsIFJlbmRlclN0eWxlJiwgQnVp
bGRlckNvbnRleHQmJik7CiAKICAgICBCdWlsZGVyJiBidWlsZGVyKCkgeyByZXR1cm4gbV9idWls
ZGVyOyB9CiAKICAgICBSZW5kZXJTdHlsZSYgc3R5bGUoKSB7IHJldHVybiBtX3N0eWxlOyB9Ci0g
ICAgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJl
bnRTdHlsZTsgfQotICAgIGNvbnN0IFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9yb290RWxlbWVudFN0eWxlOyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUm
IHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LnBhcmVudFN0eWxlOyB9Cisg
ICAgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRleHQucm9vdEVsZW1lbnRTdHlsZTsgfQogCi0gICAgY29uc3QgRG9jdW1lbnQmIGRvY3Vt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudC5nZXQoKTsgfQotICAgIGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7IH0KKyAgICBjb25z
dCBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZG9jdW1lbnQu
Z2V0KCk7IH0KKyAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZXh0LmVsZW1lbnQuZ2V0KCk7IH0KIAogICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mJiBmb250RGVzY3JpcHRpb24pIHsgbV9mb250RGlydHkgfD0g
bV9zdHlsZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsgfQog
ICAgIHZvaWQgc2V0Rm9udFNpemUoRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIGZsb2F0IHNpemUp
OwpAQCAtNjUsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRGb250RGlydHkoKSB7IG1f
Zm9udERpcnR5ID0gdHJ1ZTsgfQogCiAgICAgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdHlsZS5mb250RGVzY3JpcHRpb24oKTsgfQot
ICAgIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigp
IHsgcmV0dXJuIG1fcGFyZW50U3R5bGUuZm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICBjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBw
YXJlbnRTdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpOyB9CiAKICAgICAvLyBGSVhNRTogVGhlc2Ug
YXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgY2xlYW4gdXAgdGhlIGNvZGUgdG8gdGFrZSB0aGF0IGlu
dG8gYWNjb3VudC4KICAgICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGlua01hdGNoICE9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOyB9
CkBAIC0xMDUsMTQgKzExMiwxMCBAQCBwcml2YXRlOgogICAgIENTU1RvU3R5bGVNYXAgbV9zdHls
ZU1hcDsKIAogICAgIFJlbmRlclN0eWxlJiBtX3N0eWxlOwotICAgIGNvbnN0IFJlbmRlclN0eWxl
JiBtX3BhcmVudFN0eWxlOwotICAgIGNvbnN0IFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5
bGU7CisgICAgY29uc3QgQnVpbGRlckNvbnRleHQgbV9jb250ZXh0OwogCiAgICAgY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7CiAKLSAg
ICBSZWY8Y29uc3QgRG9jdW1lbnQ+IG1fZG9jdW1lbnQ7Ci0gICAgUmVmUHRyPGNvbnN0IEVsZW1l
bnQ+IG1fZWxlbWVudDsKLQogICAgIEJpdG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBtX2FwcGxpZWRQ
cm9wZXJ0aWVzOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2FwcGxpZWRDdXN0b21Qcm9wZXJ0aWVz
OwogICAgIEJpdG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBtX2luUHJvZ3Jlc3NQcm9wZXJ0aWVzOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>