<?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>138938</bug_id>
          
          <creation_ts>2014-11-20 15:10:39 -0800</creation_ts>
          <short_desc>Move &apos;text-shadow&apos; / &apos;box-shadow&apos; / &apos;-webkit-box-shadow&apos; to the new StyleBuilder</short_desc>
          <delta_ts>2014-12-01 18:16:37 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>138766</dependson>
    
    <dependson>138999</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1050272</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-20 15:10:39 -0800</bug_when>
    <thetext>Move &apos;text-shadow&apos; / &apos;box-shadow&apos; / &apos;-webkit-box-shadow&apos; to the new StyleBuilder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050277</commentid>
    <comment_count>1</comment_count>
      <attachid>241990</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-20 15:18:00 -0800</bug_when>
    <thetext>Created attachment 241990
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050301</commentid>
    <comment_count>2</comment_count>
      <attachid>241990</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-20 16:13:34 -0800</bug_when>
    <thetext>Comment on attachment 241990
Patch

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

&gt; Source/WebCore/css/StyleBuilderCustom.h:-41
&gt; -namespace StyleBuilderFunctions {

Most of this is just changing the code indentation because I transformed the namespace into a class, and moving the code around to distinguish public and private functions. I will point out which methods are actually new.

&gt; Source/WebCore/css/StyleBuilderCustom.h:445
&gt; +    static void applyInitialTextShadow(StyleResolver&amp; styleResolver)

This is new.

&gt; Source/WebCore/css/StyleBuilderCustom.h:450
&gt; +    static void applyInheritTextShadow(StyleResolver&amp; styleResolver)

This is new.

&gt; Source/WebCore/css/StyleBuilderCustom.h:455
&gt; +    static void applyValueTextShadow(StyleResolver&amp; styleResolver, CSSValue&amp; value)

This is new.

&gt; Source/WebCore/css/StyleBuilderCustom.h:460
&gt; +    static void applyInitialBoxShadow(StyleResolver&amp; styleResolver)

This is new.

&gt; Source/WebCore/css/StyleBuilderCustom.h:465
&gt; +    static void applyInheritBoxShadow(StyleResolver&amp; styleResolver)

This is new.

&gt; Source/WebCore/css/StyleBuilderCustom.h:470
&gt; +    static void applyValueBoxShadow(StyleResolver&amp; styleResolver, CSSValue&amp; value)

This is new.

&gt; Source/WebCore/css/StyleBuilderCustom.h:475
&gt; +    static void applyInitialWebkitBoxShadow(StyleResolver&amp; styleResolver)

This is new.

&gt; Source/WebCore/css/StyleBuilderCustom.h:480
&gt; +    static void applyInheritWebkitBoxShadow(StyleResolver&amp; styleResolver)

This is new.

&gt; Source/WebCore/css/StyleBuilderCustom.h:485
&gt; +    static void applyValueWebkitBoxShadow(StyleResolver&amp; styleResolver, CSSValue&amp; value)

This is new.

&gt; Source/WebCore/css/StyleBuilderCustom.h:500
&gt; +    static void applyTextOrBoxShadowValue(StyleResolver&amp; styleResolver, CSSValue&amp; value)

This is new.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050363</commentid>
    <comment_count>3</comment_count>
      <attachid>241990</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-11-20 20:39:01 -0800</bug_when>
    <thetext>Comment on attachment 241990
Patch

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

&gt; Source/WebCore/css/StyleBuilderCustom.h:504
&gt; +            styleResolver.style()-&gt;setTextShadow(nullptr);

What about box shadow here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051602</commentid>
    <comment_count>4</comment_count>
      <attachid>242345</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-01 14:39:05 -0800</bug_when>
    <thetext>Created attachment 242345
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051704</commentid>
    <comment_count>5</comment_count>
      <attachid>242345</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-01 18:16:30 -0800</bug_when>
    <thetext>Comment on attachment 242345
Patch

Clearing flags on attachment: 242345

Committed r176621: &lt;http://trac.webkit.org/changeset/176621&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051705</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-01 18:16:37 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241990</attachid>
            <date>2014-11-20 15:18:00 -0800</date>
            <delta_ts>2014-12-01 14:39:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138938-20141120151815.patch</filename>
            <type>text/plain</type>
            <size>65761</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2NDA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjYyYzU0YTdlMjRmYWE0
ZTg5ZTUxYWM1ZWY3Y2RjMmQ3ZGYzNGZkMi4uYjJkZmZmYzAyMDRkYjdjNmM3ZTM1ODhkN2VhZjkx
NWQxMzM4YzJmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE0LTExLTIwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSAndGV4dC1zaGFkb3cn
IC8gJ2JveC1zaGFkb3cnIC8gJy13ZWJraXQtYm94LXNoYWRvdycgdG8gdGhlIG5ldyBTdHlsZUJ1
aWxkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
ODkzOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1v
dmUgJ3RleHQtc2hhZG93JyAvICdib3gtc2hhZG93JyAvICctd2Via2l0LWJveC1zaGFkb3cnIENT
UyBwcm9wZXJ0aWVzCisgICAgICAgIGZyb20gU3R5bGVSZXNvbHZlciB0byB0aGUgbmV3IFN0eWxl
QnVpbGRlciBieSB1c2luZyBjdXN0b20gY29kZS4KKworICAgICAgICBUaGUgaW1wbGVtZW50YXRp
b24gbmVlZGVkIGFjY2VzcyB0byBwcml2YXRlIEFQSSBvbiBSZW5kZXJTdHlsZQorICAgICAgICAo
U3R5bGVSZXNvbHZlciBhbmQgRGVwcmVjYXRlZFN0eWxlQnVpbGRlciBhcmUgZnJpZW5kcyBjbGFz
c2VzIG9mCisgICAgICAgIFJlbmRlclN0eWxlKS4gQXMgYSBjb25zZXF1ZW5jZSwgdGhpcyBwYXRj
aCBtb3ZlcyB0aGUgU3R5bGVCdWlsZGVyQ3VzdG9tCisgICAgICAgIGZ1bmN0aW9ucyB0byBhIFN0
eWxlQnVpbGRlckN1c3RvbSBjbGFzcyBhbmQgbWFya3MgU3R5bGVCdWlsZGVyQ3VzdG9tIGFzCisg
ICAgICAgIGEgZnJpZW5kIGNsYXNzIG9mIFJlbmRlclN0eWxlIGFzIHdlbGwuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKIDIwMTQtMTEtMTkgIEFkYSBDaGFu
ICA8YWRhY2hhbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgd2F5IHRvIG11dGUgYW4gQXVk
aW9Db250ZXh0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFt
ZXMuaW4gYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgppbmRleCA0ZWU4
MjU0NjQ1YWFkMTA2ZjAwZDYxNTUyMDU2N2Q2ZWQzOTlhZmE4Li42NTdjZTFhOGZkZmM2YzQ0MjA3
NTIyNjdjZmFmM2Y5YTdlOGI4ZjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UHJvcGVydHlOYW1lcy5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1l
cy5pbgpAQCAtMTUxLDcgKzE1MSw3IEBAIGJvcmRlci10b3Atc3R5bGUgW05ld1N0eWxlQnVpbGRl
ciwgVHlwZU5hbWU9RUJvcmRlclN0eWxlLCBJbml0aWFsPWluaXRpYWxCb3JkZXJTCiBib3JkZXIt
dG9wLXdpZHRoIFtOZXdTdHlsZUJ1aWxkZXIsIEluaXRpYWw9aW5pdGlhbEJvcmRlcldpZHRoLCBD
b252ZXJ0ZXI9TGluZVdpZHRoPGZsb2F0Pl0KIGJvcmRlci13aWR0aAogYm90dG9tIFtOZXdTdHls
ZUJ1aWxkZXIsIEluaXRpYWw9aW5pdGlhbE9mZnNldCwgQ29udmVydGVyPUxlbmd0aE9yQXV0b10K
LWJveC1zaGFkb3cKK2JveC1zaGFkb3cgW05ld1N0eWxlQnVpbGRlciwgQ3VzdG9tPUFsbF0KIGJv
eC1zaXppbmcgW05ld1N0eWxlQnVpbGRlcl0KIC8vIC13ZWJraXQtYm94LXNpemluZyB3b3JrZWQg
aW4gU2FmYXJpIDQgYW5kIGVhcmxpZXIuCiAtd2Via2l0LWJveC1zaXppbmcgPSBib3gtc2l6aW5n
CkBAIC0yNDIsNyArMjQyLDcgQEAgdGV4dC1vdmVybGluZS1jb2xvcgogdGV4dC1vdmVybGluZS1t
b2RlCiB0ZXh0LW92ZXJsaW5lLXN0eWxlCiB0ZXh0LW92ZXJsaW5lLXdpZHRoCi10ZXh0LXNoYWRv
dyBbSW5oZXJpdGVkXQordGV4dC1zaGFkb3cgW0luaGVyaXRlZCwgTmV3U3R5bGVCdWlsZGVyLCBD
dXN0b209QWxsXQogdGV4dC10cmFuc2Zvcm0gW0luaGVyaXRlZCwgTmV3U3R5bGVCdWlsZGVyXQog
LWVwdWItdGV4dC10cmFuc2Zvcm0gPSB0ZXh0LXRyYW5zZm9ybQogdGV4dC11bmRlcmxpbmUKQEAg
LTMyNiw3ICszMjYsNyBAQCBhbHQKIC8vIC13ZWJraXQtYm94LXNoYWRvdyBkaWZmZXJzIGZyb20g
Ym94LXNoYWRvdyBpbiBpdHMgdHJlYXRlbWVudCBvZiBibHVyIHJhZGlpID4gOHB4LgogLy8gTGV0
IC13ZWJraXQtYm94LXNoYWRvdyBibHVyIHJhZGl1cyBiZSB3X3IgYW5kIGJveC1zaGFkb3cgYmx1
ciByYWRpdXMgYmUgYl9yLiBGb3IKIC8vIHdfciA+IDhweCwgYl9yID0gOCArIDQgKiBzcXJ0KCh3
X3IgLSA4KSAvIDIpLgotLXdlYmtpdC1ib3gtc2hhZG93Cistd2Via2l0LWJveC1zaGFkb3cgW05l
d1N0eWxlQnVpbGRlciwgQ3VzdG9tPUFsbF0KIC13ZWJraXQtY29sb3ItY29ycmVjdGlvbiBbSW5o
ZXJpdGVkLCBOZXdTdHlsZUJ1aWxkZXIsIFR5cGVOYW1lPUNvbG9yU3BhY2UsIE5hbWVGb3JNZXRo
b2RzPUNvbG9yU3BhY2VdCiAtd2Via2l0LWNvbHVtbi1heGlzIFtOZXdTdHlsZUJ1aWxkZXIsIFR5
cGVOYW1lPUNvbHVtbkF4aXNdCiAtd2Via2l0LWNvbHVtbi1icmVhay1hZnRlciBbTmV3U3R5bGVC
dWlsZGVyLCBUeXBlTmFtZT1FUGFnZUJyZWFrLCBJbml0aWFsPWluaXRpYWxQYWdlQnJlYWtdCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKaW5kZXggNmQ5MzBiNmNmNWNiYjll
ZjM1NmFjNDUxNmZkZTMwMGIwMGRiMWQwZi4uYjc3ZTU3YzNhYTEyODIwOTY4YjllYTliM2ExNTk1
MGEyNmVlOWJkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1
c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaApAQCAt
MzEsNjIwICszMSw3MDEgQEAKICNpbmNsdWRlICJDU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgiCiAj
aW5jbHVkZSAiQ1NTSW1hZ2VTZXRWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIK
KyNpbmNsdWRlICJDU1NTaGFkb3dWYWx1ZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiUmVjdC5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCisjZGVmaW5lIERFRklORV9CT1JERVJfSU1BR0VfTU9ESUZJRVJfSEFORExFUih0eXBl
LCBtb2RpZmllcikgXAorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdCMjdHlwZSMjbW9kaWZp
ZXIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikgXAorICAgIHsgXAorICAgIEFwcGx5UHJv
cGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyPHR5cGUsIG1vZGlmaWVyPjo6YXBwbHlJbmhlcml0VmFs
dWUoc3R5bGVSZXNvbHZlcik7IFwKKyAgICB9IFwKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRp
YWwjI3R5cGUjI21vZGlmaWVyKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpIFwKKyAgICB7
IFwKKyAgICBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjx0eXBlLCBtb2RpZmllcj46
OmFwcGx5SW5pdGlhbFZhbHVlKHN0eWxlUmVzb2x2ZXIpOyBcCisgICAgfSBcCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZSMjdHlwZSMjbW9kaWZpZXIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUmIHZhbHVlKSBcCisgICAgeyBcCisgICAgQXBwbHlQcm9wZXJ0eUJvcmRl
ckltYWdlTW9kaWZpZXI8dHlwZSwgbW9kaWZpZXI+OjphcHBseVZhbHVlKHN0eWxlUmVzb2x2ZXIs
IHZhbHVlKTsgXAorICAgIH0KKwogLy8gTm90ZSB0aGF0IHdlIGFzc3VtZSB0aGUgQ1NTIHBhcnNl
ciBvbmx5IGFsbG93cyB2YWxpZCBDU1NWYWx1ZSB0eXBlcy4KLW5hbWVzcGFjZSBTdHlsZUJ1aWxk
ZXJGdW5jdGlvbnMgewotCi1pbmxpbmUgdm9pZCBhcHBseVZhbHVlV2Via2l0TWFycXVlZUluY3Jl
bWVudChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCi17Ci0g
ICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpOwotICAgIExlbmd0aCBtYXJxdWVlTGVuZ3RoKFVuZGVmaW5lZCk7Ci0gICAgc3dpdGNoIChw
cmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKLSAgICBjYXNlIENTU1ZhbHVlU21hbGw6Ci0g
ICAgICAgIG1hcnF1ZWVMZW5ndGggPSBMZW5ndGgoMSwgRml4ZWQpOyAvLyAxcHguCi0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgIG1hcnF1ZWVMZW5ndGgg
PSBMZW5ndGgoNiwgRml4ZWQpOyAvLyA2cHguIFRoZSBXaW5JRSBkZWZhdWx0LgotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENTU1ZhbHVlTGFyZ2U6Ci0gICAgICAgIG1hcnF1ZWVMZW5ndGggPSBM
ZW5ndGgoMzYsIEZpeGVkKTsgLy8gMzZweC4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NW
YWx1ZUludmFsaWQ6Ci0gICAgICAgIG1hcnF1ZWVMZW5ndGggPSBwcmltaXRpdmVWYWx1ZS5jb252
ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwg
Q2FsY3VsYXRlZENvbnZlcnNpb24+KHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENv
bnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpOwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKCFtYXJxdWVl
TGVuZ3RoLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
TWFycXVlZUluY3JlbWVudChtYXJxdWVlTGVuZ3RoKTsKLX0KLQotaW5saW5lIHZvaWQgYXBwbHlW
YWx1ZURpcmVjdGlvbihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFs
dWUpCi17Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXREaXJlY3Rpb24oZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7Ci0KLSAgICBFbGVtZW50KiBlbGVtZW50ID0gc3R5
bGVSZXNvbHZlci5lbGVtZW50KCk7Ci0gICAgaWYgKGVsZW1lbnQgJiYgc3R5bGVSZXNvbHZlci5l
bGVtZW50KCkgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKSkKLSAgICAg
ICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5zZXREaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudCh0
cnVlKTsKLX0KLQotaW5saW5lIHZvaWQgcmVzZXRFZmZlY3RpdmVab29tKFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIpCi17Ci0gICAgLy8gUmVzZXQgdGhlIHpvb20gaW4gZWZmZWN0LiBUaGlz
IGFsbG93cyB0aGUgc2V0Wm9vbSBtZXRob2QgdG8gYWNjdXJhdGVseSBjb21wdXRlIGEgbmV3IHpv
b20gaW4gZWZmZWN0LgotICAgIHN0eWxlUmVzb2x2ZXIuc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJl
c29sdmVyLnBhcmVudFN0eWxlKCkgPyBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmVmZmVj
dGl2ZVpvb20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKLX0KLQotaW5saW5lIHZv
aWQgYXBwbHlJbml0aWFsWm9vbShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQotewotICAg
IHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKLSAgICBzdHlsZVJlc29sdmVyLnNl
dFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwotfQotCi1pbmxpbmUgdm9pZCBhcHBs
eUluaGVyaXRab29tKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCi17Ci0gICAgcmVzZXRF
ZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Wm9vbShz
dHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPnpvb20oKSk7Ci19Ci0KLWlubGluZSB2b2lkIGFw
cGx5VmFsdWVab29tKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1
ZSkKLXsKLSAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSk7Ci0KLSAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENT
U1ZhbHVlTm9ybWFsKSB7CitjbGFzcyBTdHlsZUJ1aWxkZXJDdXN0b20geworcHVibGljOgorICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVXZWJraXRNYXJxdWVlSW5jcmVtZW50KFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGF1dG8m
IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKKyAg
ICAgICAgTGVuZ3RoIG1hcnF1ZWVMZW5ndGgoVW5kZWZpbmVkKTsKKyAgICAgICAgc3dpdGNoIChw
cmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxs
OgorICAgICAgICAgICAgbWFycXVlZUxlbmd0aCA9IExlbmd0aCgxLCBGaXhlZCk7IC8vIDFweC4K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgorICAgICAg
ICAgICAgbWFycXVlZUxlbmd0aCA9IExlbmd0aCg2LCBGaXhlZCk7IC8vIDZweC4gVGhlIFdpbklF
IGRlZmF1bHQuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdl
OgorICAgICAgICAgICAgbWFycXVlZUxlbmd0aCA9IExlbmd0aCgzNiwgRml4ZWQpOyAvLyAzNnB4
LgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVJbnZhbGlkOgorICAg
ICAgICAgICAgbWFycXVlZUxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLmNvbnZlcnRUb0xlbmd0aDxG
aXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29u
dmVyc2lvbj4oc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEo
KS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICgh
bWFycXVlZUxlbmd0aC5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KG1hcnF1ZWVMZW5ndGgpOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVEaXJlY3Rpb24oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXREaXJlY3Rpb24oZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CisK
KyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0eWxlUmVzb2x2ZXIuZWxlbWVudCgpOworICAg
ICAgICBpZiAoZWxlbWVudCAmJiBzdHlsZVJlc29sdmVyLmVsZW1lbnQoKSA9PSBlbGVtZW50LT5k
b2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpKQorICAgICAgICAgICAgZWxlbWVudC0+ZG9jdW1l
bnQoKS5zZXREaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudCh0cnVlKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxab29tKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIpCisgICAgewogICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7CiAg
ICAgICAgIHN0eWxlUmVzb2x2ZXIuc2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7
Ci0gICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVS
ZXNldCkgewotICAgICAgICBzdHlsZVJlc29sdmVyLnNldEVmZmVjdGl2ZVpvb20oUmVuZGVyU3R5
bGU6OmluaXRpYWxab29tKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLnNldFpvb20oUmVuZGVy
U3R5bGU6OmluaXRpYWxab29tKCkpOwotICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0
VmFsdWVJRCgpID09IENTU1ZhbHVlRG9jdW1lbnQpIHsKLSAgICAgICAgZmxvYXQgZG9jWm9vbSA9
IHN0eWxlUmVzb2x2ZXIucm9vdEVsZW1lbnRTdHlsZSgpID8gc3R5bGVSZXNvbHZlci5yb290RWxl
bWVudFN0eWxlKCktPnpvb20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpOwotICAgICAg
ICBzdHlsZVJlc29sdmVyLnNldEVmZmVjdGl2ZVpvb20oZG9jWm9vbSk7Ci0gICAgICAgIHN0eWxl
UmVzb2x2ZXIuc2V0Wm9vbShkb2Nab29tKTsKLSAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LmlzUGVyY2VudGFnZSgpKSB7Ci0gICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29s
dmVyKTsKLSAgICAgICAgaWYgKGZsb2F0IHBlcmNlbnQgPSBwcmltaXRpdmVWYWx1ZS5nZXRGbG9h
dFZhbHVlKCkpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnNldFpvb20ocGVyY2VudCAvIDEw
MC4wZik7Ci0gICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKSB7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0Wm9vbShTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyKQorICAgIHsKICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2
ZXIpOwotICAgICAgICBpZiAoZmxvYXQgbnVtYmVyID0gcHJpbWl0aXZlVmFsdWUuZ2V0RmxvYXRW
YWx1ZSgpKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zZXRab29tKG51bWJlcik7CisgICAg
ICAgIHN0eWxlUmVzb2x2ZXIuc2V0Wm9vbShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPnpv
b20oKSk7CiAgICAgfQotfQogCi0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi1pbmxpbmUgdm9pZCBh
cHBseVZhbHVlV2Via2l0U2hhcGVPdXRzaWRlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlJiB2YWx1ZSkKLXsKLSAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KSkgewotICAgICAgICAvLyBGSVhNRTogU2hvdWxkbid0IHRoaXMgYmUgQ1NTVmFsdWVOb25lPwot
ICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3Mtc2hhcGVzLyNzaGFwZS1vdXRzaWRl
LXByb3BlcnR5Ci0gICAgICAgIGlmIChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
LmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldFNoYXBlT3V0c2lkZShudWxscHRyKTsKLSAgICB9IGlmIChpczxDU1NJbWFn
ZVZhbHVlPih2YWx1ZSkgfHwgaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpIHx8IGlz
PENTU0ltYWdlU2V0VmFsdWU+KHZhbHVlKSkgewotICAgICAgICBSZWZQdHI8U2hhcGVWYWx1ZT4g
c2hhcGUgPSBTaGFwZVZhbHVlOjpjcmVhdGVJbWFnZVZhbHVlKHN0eWxlUmVzb2x2ZXIuc3R5bGVJ
bWFnZShDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlT3V0c2lkZSwgdmFsdWUpKTsKLSAgICAgICAgc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRTaGFwZU91dHNpZGUoc2hhcGUucmVsZWFzZSgpKTsKLSAg
ICB9IGVsc2UgaWYgKGlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7Ci0gICAgICAgIFJlZlB0cjxC
YXNpY1NoYXBlPiBzaGFwZTsKLSAgICAgICAgQ1NTQm94VHlwZSByZWZlcmVuY2VCb3ggPSBCb3hN
aXNzaW5nOwotICAgICAgICBmb3IgKGF1dG8mIGN1cnJlbnRWYWx1ZSA6IGRvd25jYXN0PENTU1Zh
bHVlTGlzdD4odmFsdWUpKSB7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0
aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgp
KTsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1NoYXBlKCkpCi0gICAgICAgICAg
ICAgICAgc2hhcGUgPSBiYXNpY1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNz
c1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSwgcHJpbWl0aXZlVmFsdWUuZ2V0U2hhcGVWYWx1ZSgp
KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZUNvbnRlbnRCb3gKLSAgICAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS5nZXRW
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVCb3JkZXJCb3gKLSAgICAgICAgICAgICAgICB8fCBwcmltaXRp
dmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVQYWRkaW5nQm94Ci0gICAgICAgICAgICAg
ICAgfHwgcHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTWFyZ2luQm94KQot
ICAgICAgICAgICAgICAgIHJlZmVyZW5jZUJveCA9IENTU0JveFR5cGUocHJpbWl0aXZlVmFsdWUp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlWm9vbShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1
ZSYgdmFsdWUpCisgICAgeworICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CisKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkgeworICAgICAgICAgICAgcmVzZXRFZmZl
Y3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zZXRa
b29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVSZXNldCkgeworICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci5zZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgp
KTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlh
bFpvb20oKSk7CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgp
ID09IENTU1ZhbHVlRG9jdW1lbnQpIHsKKyAgICAgICAgICAgIGZsb2F0IGRvY1pvb20gPSBzdHls
ZVJlc29sdmVyLnJvb3RFbGVtZW50U3R5bGUoKSA/IHN0eWxlUmVzb2x2ZXIucm9vdEVsZW1lbnRT
dHlsZSgpLT56b29tKCkgOiBSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKTsKKyAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXIuc2V0RWZmZWN0aXZlWm9vbShkb2Nab29tKTsKKyAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXIuc2V0Wm9vbShkb2Nab29tKTsKKyAgICAgICAgfSBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSkgeworICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29t
KHN0eWxlUmVzb2x2ZXIpOworICAgICAgICAgICAgaWYgKGZsb2F0IHBlcmNlbnQgPSBwcmltaXRp
dmVWYWx1ZS5nZXRGbG9hdFZhbHVlKCkpCisgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5z
ZXRab29tKHBlcmNlbnQgLyAxMDAuMGYpOworICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJl
c29sdmVyKTsKKyAgICAgICAgICAgIGlmIChmbG9hdCBudW1iZXIgPSBwcmltaXRpdmVWYWx1ZS5n
ZXRGbG9hdFZhbHVlKCkpCisgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zZXRab29tKG51
bWJlcik7CiAgICAgICAgIH0KKyAgICB9CisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlV2Via2l0U2hhcGVPdXRzaWRlKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChpczxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkbid0
IHRoaXMgYmUgQ1NTVmFsdWVOb25lPworICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvY3NzLXNoYXBlcy8jc2hhcGUtb3V0c2lkZS1wcm9wZXJ0eQorICAgICAgICAgICAgaWYgKGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVl
QXV0bykKKyAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFNoYXBlT3V0
c2lkZShudWxscHRyKTsKKyAgICAgICAgfSBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpIHx8
IGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZhbHVlKSB8fCBpczxDU1NJbWFnZVNldFZhbHVl
Pih2YWx1ZSkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFwZVZhbHVlPiBzaGFwZSA9IFNoYXBl
VmFsdWU6OmNyZWF0ZUltYWdlVmFsdWUoc3R5bGVSZXNvbHZlci5zdHlsZUltYWdlKENTU1Byb3Bl
cnR5V2Via2l0U2hhcGVPdXRzaWRlLCB2YWx1ZSkpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zZXRTaGFwZU91dHNpZGUoc2hhcGUucmVsZWFzZSgpKTsKKyAgICAgICAgfSBl
bHNlIGlmIChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgeworICAgICAgICAgICAgUmVmUHRyPEJh
c2ljU2hhcGU+IHNoYXBlOworICAgICAgICAgICAgQ1NTQm94VHlwZSByZWZlcmVuY2VCb3ggPSBC
b3hNaXNzaW5nOworICAgICAgICAgICAgZm9yIChhdXRvJiBjdXJyZW50VmFsdWUgOiBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgeworICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjdXJyZW50
VmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1NoYXBl
KCkpCisgICAgICAgICAgICAgICAgICAgIHNoYXBlID0gYmFzaWNTaGFwZUZvclZhbHVlKHN0eWxl
UmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCksIHByaW1pdGl2ZVZh
bHVlLmdldFNoYXBlVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZl
VmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ29udGVudEJveAorICAgICAgICAgICAgICAg
ICAgICB8fCBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVCb3JkZXJCb3gK
KyAgICAgICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENT
U1ZhbHVlUGFkZGluZ0JveAorICAgICAgICAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS5n
ZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVNYXJnaW5Cb3gpCisgICAgICAgICAgICAgICAgICAgIHJl
ZmVyZW5jZUJveCA9IENTU0JveFR5cGUocHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogCi0gICAg
ICAgIGlmIChzaGFwZSkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0U2hh
cGVPdXRzaWRlKFNoYXBlVmFsdWU6OmNyZWF0ZVNoYXBlVmFsdWUoc2hhcGUucmVsZWFzZSgpLCBy
ZWZlcmVuY2VCb3gpKTsKLSAgICAgICAgZWxzZSBpZiAocmVmZXJlbmNlQm94ICE9IEJveE1pc3Np
bmcpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFNoYXBlT3V0c2lkZShT
aGFwZVZhbHVlOjpjcmVhdGVCb3hTaGFwZVZhbHVlKHJlZmVyZW5jZUJveCkpOworICAgICAgICAg
ICAgaWYgKHNoYXBlKQorICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
U2hhcGVPdXRzaWRlKFNoYXBlVmFsdWU6OmNyZWF0ZVNoYXBlVmFsdWUoc2hhcGUucmVsZWFzZSgp
LCByZWZlcmVuY2VCb3gpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHJlZmVyZW5jZUJveCAhPSBC
b3hNaXNzaW5nKQorICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0U2hh
cGVPdXRzaWRlKFNoYXBlVmFsdWU6OmNyZWF0ZUJveFNoYXBlVmFsdWUocmVmZXJlbmNlQm94KSk7
CisgICAgICAgIH0KICAgICB9Ci19CiAjZW5kaWYgLy8gRU5BQkxFKENTU19TSEFQRVMpCiAKLWlu
bGluZSBMZW5ndGggbW1MZW5ndGgoZG91YmxlIG1tKQotewotICAgIFJlZjxDU1NQcmltaXRpdmVW
YWx1ZT4gdmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtbSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19NTSkpOwotICAgIHJldHVybiB2YWx1ZS5nZXQoKS5jb21wdXRlTGVuZ3RoPExlbmd0
aD4oQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKLX0KLWlubGluZSBMZW5ndGggaW5jaExl
bmd0aChkb3VibGUgaW5jaCkKLXsKLSAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlKENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoaW5jaCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JTikp
OwotICAgIHJldHVybiB2YWx1ZS5nZXQoKS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSgpKTsKLX0KLXN0YXRpYyBib29sIGdldFBhZ2VTaXplRnJvbU5hbWUo
Q1NTUHJpbWl0aXZlVmFsdWUqIHBhZ2VTaXplTmFtZSwgQ1NTUHJpbWl0aXZlVmFsdWUqIHBhZ2VP
cmllbnRhdGlvbiwgTGVuZ3RoJiB3aWR0aCwgTGVuZ3RoJiBoZWlnaHQpCi17Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPExlbmd0aD4gYTVXaWR0aChtbUxlbmd0aCgxNDgpKTsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8TGVuZ3RoPiBhNUhlaWdodChtbUxlbmd0aCgyMTApKTsKLSAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TGVuZ3RoPiBhNFdpZHRoKG1tTGVuZ3RoKDIxMCkpOwotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxMZW5ndGg+IGE0SGVpZ2h0KG1tTGVuZ3RoKDI5NykpOwot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxMZW5ndGg+IGEzV2lkdGgobW1MZW5ndGgoMjk3KSk7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPExlbmd0aD4gYTNIZWlnaHQobW1MZW5ndGgoNDIw
KSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPExlbmd0aD4gYjVXaWR0aChtbUxlbmd0aCgx
NzYpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TGVuZ3RoPiBiNUhlaWdodChtbUxlbmd0
aCgyNTApKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TGVuZ3RoPiBiNFdpZHRoKG1tTGVu
Z3RoKDI1MCkpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxMZW5ndGg+IGI0SGVpZ2h0KG1t
TGVuZ3RoKDM1MykpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxMZW5ndGg+IGxldHRlcldp
ZHRoKGluY2hMZW5ndGgoOC41KSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPExlbmd0aD4g
bGV0dGVySGVpZ2h0KGluY2hMZW5ndGgoMTEpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
TGVuZ3RoPiBsZWdhbFdpZHRoKGluY2hMZW5ndGgoOC41KSk7Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPExlbmd0aD4gbGVnYWxIZWlnaHQoaW5jaExlbmd0aCgxNCkpOwotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxMZW5ndGg+IGxlZGdlcldpZHRoKGluY2hMZW5ndGgoMTEpKTsKLSAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TGVuZ3RoPiBsZWRnZXJIZWlnaHQoaW5jaExlbmd0aCgxNykp
OwotCi0gICAgaWYgKCFwYWdlU2l6ZU5hbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHN3aXRjaCAocGFnZVNpemVOYW1lLT5nZXRWYWx1ZUlEKCkpIHsKLSAgICBjYXNlIENTU1ZhbHVl
QTU6Ci0gICAgICAgIHdpZHRoID0gYTVXaWR0aDsKLSAgICAgICAgaGVpZ2h0ID0gYTVIZWlnaHQ7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVBNDoKLSAgICAgICAgd2lkdGggPSBh
NFdpZHRoOwotICAgICAgICBoZWlnaHQgPSBhNEhlaWdodDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDU1NWYWx1ZUEzOgotICAgICAgICB3aWR0aCA9IGEzV2lkdGg7Ci0gICAgICAgIGhlaWdo
dCA9IGEzSGVpZ2h0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlQjU6Ci0gICAg
ICAgIHdpZHRoID0gYjVXaWR0aDsKLSAgICAgICAgaGVpZ2h0ID0gYjVIZWlnaHQ7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVCNDoKLSAgICAgICAgd2lkdGggPSBiNFdpZHRoOwot
ICAgICAgICBoZWlnaHQgPSBiNEhlaWdodDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NW
YWx1ZUxldHRlcjoKLSAgICAgICAgd2lkdGggPSBsZXR0ZXJXaWR0aDsKLSAgICAgICAgaGVpZ2h0
ID0gbGV0dGVySGVpZ2h0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlTGVnYWw6
Ci0gICAgICAgIHdpZHRoID0gbGVnYWxXaWR0aDsKLSAgICAgICAgaGVpZ2h0ID0gbGVnYWxIZWln
aHQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVMZWRnZXI6Ci0gICAgICAgIHdp
ZHRoID0gbGVkZ2VyV2lkdGg7Ci0gICAgICAgIGhlaWdodCA9IGxlZGdlckhlaWdodDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWVWZXJ0aWNhbEFsaWduKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKKyAgICAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlLmdldFZhbHVlSUQoKSkKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KS0+c2V0VmVydGljYWxBbGlnbihwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbkxlbmd0aChwcmlt
aXRpdmVWYWx1ZS5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNl
bnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0eWxlUmVzb2x2ZXIuc3RhdGUo
KS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpKTsKICAgICB9CiAKLSAgICBpZiAocGFnZU9y
aWVudGF0aW9uKSB7Ci0gICAgICAgIHN3aXRjaCAocGFnZU9yaWVudGF0aW9uLT5nZXRWYWx1ZUlE
KCkpIHsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUxhbmRzY2FwZToKLSAgICAgICAgICAgIHN0ZDo6
c3dhcCh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENT
U1ZhbHVlUG9ydHJhaXQ6Ci0gICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KKyNpZiBFTkFCTEUoQ1NTX0lNQUdFX1JFU09MVVRJT04pCisgICAgc3RhdGljIHZv
aWQgYXBwbHlJbmhlcml0SW1hZ2VSZXNvbHV0aW9uKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIpCisgICAgeworICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEltYWdlUmVzb2x1
dGlvblNvdXJjZShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmltYWdlUmVzb2x1dGlvblNv
dXJjZSgpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRp
b25TbmFwKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+aW1hZ2VSZXNvbHV0aW9uU25hcCgp
KTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb24oc3R5
bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5pbWFnZVJlc29sdXRpb24oKSk7CiAgICAgfQotICAg
IHJldHVybiB0cnVlOwotfQogCi1pbmxpbmUgdm9pZCBhcHBseVZhbHVlVmVydGljYWxBbGlnbihT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCi17Ci0gICAgYXV0
byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwot
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpCi0gICAgICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbihwcmltaXRpdmVWYWx1ZSk7Ci0gICAgZWxzZQot
ICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ25MZW5ndGgocHJp
bWl0aXZlVmFsdWUuY29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJj
ZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLnN0YXRl
KCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSk7Ci19CisgICAgc3RhdGljIHZvaWQgYXBw
bHlJbml0aWFsSW1hZ2VSZXNvbHV0aW9uKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCisg
ICAgeworICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNv
dXJjZShSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNvdXJjZSgpKTsKKyAgICAg
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25TbmFwKFJlbmRlclN0
eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU25hcCgpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJl
c29sdXRpb24oKSk7CisgICAgfQogCi0jaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKQot
aW5saW5lIHZvaWQgYXBwbHlJbmhlcml0SW1hZ2VSZXNvbHV0aW9uKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIpCi17Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29s
dXRpb25Tb3VyY2Uoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5pbWFnZVJlc29sdXRpb25T
b3VyY2UoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25T
bmFwKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+aW1hZ2VSZXNvbHV0aW9uU25hcCgpKTsK
LSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvbihzdHlsZVJlc29s
dmVyLnBhcmVudFN0eWxlKCktPmltYWdlUmVzb2x1dGlvbigpKTsKLX0KLQotaW5saW5lIHZvaWQg
YXBwbHlJbml0aWFsSW1hZ2VSZXNvbHV0aW9uKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIp
Ci17Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25Tb3VyY2Uo
UmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25Tb3VyY2UoKSk7Ci0gICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25TbmFwKFJlbmRlclN0eWxlOjppbml0
aWFsSW1hZ2VSZXNvbHV0aW9uU25hcCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNl
dEltYWdlUmVzb2x1dGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvbigpKTsK
LX0KLQotaW5saW5lIHZvaWQgYXBwbHlWYWx1ZUltYWdlUmVzb2x1dGlvbihTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCi17Ci0gICAgSW1hZ2VSZXNvbHV0aW9u
U291cmNlIHNvdXJjZSA9IFJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNl
KCk7Ci0gICAgSW1hZ2VSZXNvbHV0aW9uU25hcCBzbmFwID0gUmVuZGVyU3R5bGU6OmluaXRpYWxJ
bWFnZVJlc29sdXRpb25TbmFwKCk7Ci0gICAgZG91YmxlIHJlc29sdXRpb24gPSBSZW5kZXJTdHls
ZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvbigpOwotICAgIGZvciAoYXV0byYgaXRlbSA6IGRvd25j
YXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBw
cmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKTsK
LSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZyb21J
bWFnZSkKLSAgICAgICAgICAgIHNvdXJjZSA9IEltYWdlUmVzb2x1dGlvbkZyb21JbWFnZTsKLSAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlU25h
cCkKLSAgICAgICAgICAgIHNuYXAgPSBJbWFnZVJlc29sdXRpb25TbmFwUGl4ZWxzOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByZXNvbHV0aW9uID0gcHJpbWl0aXZlVmFsdWUuZ2V0RG91Ymxl
VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlSW1hZ2VSZXNvbHV0aW9uKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEltYWdlUmVzb2x1dGlvblNvdXJjZSBzb3VyY2Ug
PSBSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNvdXJjZSgpOworICAgICAgICBJ
bWFnZVJlc29sdXRpb25TbmFwIHNuYXAgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1
dGlvblNuYXAoKTsKKyAgICAgICAgZG91YmxlIHJlc29sdXRpb24gPSBSZW5kZXJTdHlsZTo6aW5p
dGlhbEltYWdlUmVzb2x1dGlvbigpOworICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgeworICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUm
IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0KCkp
OworICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1
ZUZyb21JbWFnZSkKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBJbWFnZVJlc29sdXRpb25Gcm9t
SW1hZ2U7CisgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkg
PT0gQ1NTVmFsdWVTbmFwKQorICAgICAgICAgICAgICAgIHNuYXAgPSBJbWFnZVJlc29sdXRpb25T
bmFwUGl4ZWxzOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc29sdXRpb24g
PSBwcmltaXRpdmVWYWx1ZS5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQ
UFgpOworICAgICAgICB9CisgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SW1hZ2VS
ZXNvbHV0aW9uU291cmNlKHNvdXJjZSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c2V0SW1hZ2VSZXNvbHV0aW9uU25hcChzbmFwKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRJbWFnZVJlc29sdXRpb24ocmVzb2x1dGlvbik7CiAgICAgfQotICAgIHN0eWxlUmVz
b2x2ZXIuc3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlKHNvdXJjZSk7Ci0gICAgc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25TbmFwKHNuYXApOwotICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uKHJlc29sdXRpb24pOwotfQog
I2VuZGlmIC8vIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikKIAotaW5saW5lIHZvaWQgYXBw
bHlJbmhlcml0U2l6ZShTdHlsZVJlc29sdmVyJikgeyB9Ci1pbmxpbmUgdm9pZCBhcHBseUluaXRp
YWxTaXplKFN0eWxlUmVzb2x2ZXImKSB7IH0KLWlubGluZSB2b2lkIGFwcGx5VmFsdWVTaXplKFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKLXsKLSAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnJlc2V0UGFnZVNpemVUeXBlKCk7Ci0gICAgTGVuZ3RoIHdpZHRo
OwotICAgIExlbmd0aCBoZWlnaHQ7Ci0gICAgUGFnZVNpemVUeXBlIHBhZ2VTaXplVHlwZSA9IFBB
R0VfU0laRV9BVVRPOwotICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8mIHZhbHVlTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4o
dmFsdWUpOwotICAgIHN3aXRjaCAodmFsdWVMaXN0Lmxlbmd0aCgpKSB7Ci0gICAgY2FzZSAyOiB7
Ci0gICAgICAgIENTU1ZhbHVlKiBmaXJzdFZhbHVlID0gdmFsdWVMaXN0Lml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMCk7Ci0gICAgICAgIENTU1ZhbHVlKiBzZWNvbmRWYWx1ZSA9IHZhbHVlTGlzdC5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpOwotICAgICAgICAvLyA8bGVuZ3RoPnsyfSB8IDxwYWdl
LXNpemU+IDxvcmllbnRhdGlvbj4KLSAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4o
KmZpcnN0VmFsdWUpIHx8ICFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnNlY29uZFZhbHVlKSkKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRTaXplKFN0eWxlUmVzb2x2ZXImKSB7IH0KKyAgICBz
dGF0aWMgdm9pZCBhcHBseUluaXRpYWxTaXplKFN0eWxlUmVzb2x2ZXImKSB7IH0KKyAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlU2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnJlc2V0
UGFnZVNpemVUeXBlKCk7CisgICAgICAgIExlbmd0aCB3aWR0aDsKKyAgICAgICAgTGVuZ3RoIGhl
aWdodDsKKyAgICAgICAgUGFnZVNpemVUeXBlIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9BVVRP
OworICAgICAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBhdXRvJiBmaXJzdFByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCpmaXJzdFZhbHVlKTsKLSAgICAgICAgYXV0byYgc2Vjb25kUHJpbWl0aXZl
VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnNlY29uZFZhbHVlKTsKLSAgICAg
ICAgaWYgKGZpcnN0UHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkgewotICAgICAgICAgICAgLy8g
PGxlbmd0aD57Mn0KLSAgICAgICAgICAgIGlmICghc2Vjb25kUHJpbWl0aXZlVmFsdWUuaXNMZW5n
dGgoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhID0gc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKTsKLSAgICAg
ICAgICAgIHdpZHRoID0gZmlyc3RQcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4o
Y29udmVyc2lvbkRhdGEpOwotICAgICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kUHJpbWl0aXZlVmFs
dWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIC8vIDxwYWdlLXNpemU+IDxvcmllbnRhdGlvbj4KLSAgICAgICAgICAg
IC8vIFRoZSB2YWx1ZSBvcmRlciBpcyBndWFyYW50ZWVkLiBTZWUgQ1NTUGFyc2VyOjpwYXJzZVNp
emVQYXJhbWV0ZXIuCi0gICAgICAgICAgICBpZiAoIWdldFBhZ2VTaXplRnJvbU5hbWUoJmZpcnN0
UHJpbWl0aXZlVmFsdWUsICZzZWNvbmRQcmltaXRpdmVWYWx1ZSwgd2lkdGgsIGhlaWdodCkpCisK
KyAgICAgICAgYXV0byYgdmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSk7
CisgICAgICAgIHN3aXRjaCAodmFsdWVMaXN0Lmxlbmd0aCgpKSB7CisgICAgICAgIGNhc2UgMjog
eworICAgICAgICAgICAgQ1NTVmFsdWUqIGZpcnN0VmFsdWUgPSB2YWx1ZUxpc3QuaXRlbVdpdGhv
dXRCb3VuZHNDaGVjaygwKTsKKyAgICAgICAgICAgIENTU1ZhbHVlKiBzZWNvbmRWYWx1ZSA9IHZh
bHVlTGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpOworICAgICAgICAgICAgLy8gPGxlbmd0
aD57Mn0gfCA8cGFnZS1zaXplPiA8b3JpZW50YXRpb24+CisgICAgICAgICAgICBpZiAoIWlzPENT
U1ByaW1pdGl2ZVZhbHVlPigqZmlyc3RWYWx1ZSkgfHwgIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigq
c2Vjb25kVmFsdWUpKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfUkVTT0xWRUQ7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBjYXNlIDE6IHsKLSAgICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0Lml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCk7Ci0gICAgICAgIC8vIDxsZW5ndGg+IHwgYXV0byB8IDxw
YWdlLXNpemU+IHwgWyBwb3J0cmFpdCB8IGxhbmRzY2FwZV0KLSAgICAgICAgaWYgKCFpczxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYXV0
byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsK
LSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIC8v
IDxsZW5ndGg+CisgICAgICAgICAgICBhdXRvJiBmaXJzdFByaW1pdGl2ZVZhbHVlID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpmaXJzdFZhbHVlKTsKKyAgICAgICAgICAgIGF1dG8mIHNl
Y29uZFByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpzZWNvbmRW
YWx1ZSk7CisgICAgICAgICAgICBpZiAoZmlyc3RQcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7
CisgICAgICAgICAgICAgICAgLy8gPGxlbmd0aD57Mn0KKyAgICAgICAgICAgICAgICBpZiAoIXNl
Y29uZFByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25E
YXRhID0gc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5j
b3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKTsKKyAgICAgICAgICAgICAgICB3aWR0aCA9IGZpcnN0
UHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKKyAg
ICAgICAgICAgICAgICBoZWlnaHQgPSBzZWNvbmRQcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3Ro
PExlbmd0aD4oY29udmVyc2lvbkRhdGEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAvLyA8cGFnZS1zaXplPiA8b3JpZW50YXRpb24+CisgICAgICAgICAgICAgICAgLy8g
VGhlIHZhbHVlIG9yZGVyIGlzIGd1YXJhbnRlZWQuIFNlZSBDU1NQYXJzZXI6OnBhcnNlU2l6ZVBh
cmFtZXRlci4KKyAgICAgICAgICAgICAgICBpZiAoIWdldFBhZ2VTaXplRnJvbU5hbWUoJmZpcnN0
UHJpbWl0aXZlVmFsdWUsICZzZWNvbmRQcmltaXRpdmVWYWx1ZSwgd2lkdGgsIGhlaWdodCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHBh
Z2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKLSAgICAgICAgICAgIHdpZHRoID0gaGVp
Z2h0ID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXIu
c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20o
MS4wZikpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVW
YWx1ZS5nZXRWYWx1ZUlEKCkpIHsKLSAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgMTogeworICAgICAgICAgICAgQ1NTVmFsdWUq
IHZhbHVlID0gdmFsdWVMaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCk7CisgICAgICAgICAg
ICAvLyA8bGVuZ3RoPiB8IGF1dG8gfCA8cGFnZS1zaXplPiB8IFsgcG9ydHJhaXQgfCBsYW5kc2Nh
cGVdCisgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVBdXRvOgotICAg
ICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9BVVRPOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVBvcnRyYWl0OgotICAgICAgICAg
ICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9BVVRPX1BPUlRSQUlUOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhbmRzY2FwZToKLSAgICAg
ICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfQVVUT19MQU5EU0NBUEU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IC8vIDxwYWdlLXNpemU+CisgICAgICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgICAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAvLyA8bGVuZ3RoPgogICAgICAg
ICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKLSAgICAgICAgICAg
ICAgICBpZiAoIWdldFBhZ2VTaXplRnJvbU5hbWUoJnByaW1pdGl2ZVZhbHVlLCBudWxscHRyLCB3
aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IHByaW1pdGl2
ZVZhbHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS5n
ZXRWYWx1ZUlEKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQXV0bzoKKyAgICAgICAg
ICAgICAgICAgICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX0FVVE87CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVQb3J0cmFpdDoKKyAg
ICAgICAgICAgICAgICAgICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX0FVVE9fUE9SVFJBSVQ7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVMYW5kc2NhcGU6CisgICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0la
RV9BVVRPX0xBTkRTQ0FQRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgLy8gPHBhZ2Utc2l6ZT4KKyAgICAg
ICAgICAgICAgICAgICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX1JFU09MVkVEOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWdldFBhZ2VTaXplRnJvbU5hbWUoJnByaW1pdGl2ZVZhbHVlLCBu
dWxscHRyLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0
dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0UGFnZVNpemVUeXBlKHBhZ2VTaXplVHlw
ZSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0UGFnZVNpemUoTGVuZ3RoU2l6
ZSh3aWR0aCwgaGVpZ2h0KSk7CiAgICAgfQotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
UGFnZVNpemVUeXBlKHBhZ2VTaXplVHlwZSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
ZXRQYWdlU2l6ZShMZW5ndGhTaXplKHdpZHRoLCBoZWlnaHQpKTsKLX0KIAotaW5saW5lIHZvaWQg
YXBwbHlJbmhlcml0VGV4dEluZGVudChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQotewot
ICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEluZGVudChzdHlsZVJlc29sdmVyLnBh
cmVudFN0eWxlKCktPnRleHRJbmRlbnQoKSk7CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0
VGV4dEluZGVudChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAg
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0SW5kZW50KHN0eWxlUmVzb2x2ZXIucGFyZW50
U3R5bGUoKS0+dGV4dEluZGVudCgpKTsKICNpZiBFTkFCTEUoQ1NTM19URVhUKQotICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEluZGVudExpbmUoc3R5bGVSZXNvbHZlci5wYXJlbnRT
dHlsZSgpLT50ZXh0SW5kZW50TGluZSgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNl
dFRleHRJbmRlbnRUeXBlKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+dGV4dEluZGVudFR5
cGUoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEluZGVudExpbmUo
c3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT50ZXh0SW5kZW50TGluZSgpKTsKKyAgICAgICAg
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0SW5kZW50VHlwZShzdHlsZVJlc29sdmVyLnBh
cmVudFN0eWxlKCktPnRleHRJbmRlbnRUeXBlKCkpOwogI2VuZGlmCi19CisgICAgfQogCi1pbmxp
bmUgdm9pZCBhcHBseUluaXRpYWxUZXh0SW5kZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIpCi17Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0SW5kZW50KFJlbmRlclN0
eWxlOjppbml0aWFsVGV4dEluZGVudCgpKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxU
ZXh0SW5kZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCisgICAgeworICAgICAgICBz
dHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRJbmRlbnQoUmVuZGVyU3R5bGU6OmluaXRpYWxU
ZXh0SW5kZW50KCkpOwogI2lmIEVOQUJMRShDU1MzX1RFWFQpCi0gICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRUZXh0SW5kZW50TGluZShSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRJbmRlbnRM
aW5lKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEluZGVudFR5cGUoUmVu
ZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50VHlwZSgpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zZXRUZXh0SW5kZW50TGluZShSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRJbmRl
bnRMaW5lKCkpOworICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRJbmRlbnRU
eXBlKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEluZGVudFR5cGUoKSk7CiAjZW5kaWYKLX0KKyAg
ICB9CiAKLWlubGluZSB2b2lkIGFwcGx5VmFsdWVUZXh0SW5kZW50KFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKLXsKLSAgICBMZW5ndGggbGVuZ3RoT3JQZXJj
ZW50YWdlVmFsdWU7CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVRleHRJbmRlbnQoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
TGVuZ3RoIGxlbmd0aE9yUGVyY2VudGFnZVZhbHVlOwogI2lmIEVOQUJMRShDU1MzX1RFWFQpCi0g
ICAgVGV4dEluZGVudExpbmUgdGV4dEluZGVudExpbmVWYWx1ZSA9IFJlbmRlclN0eWxlOjppbml0
aWFsVGV4dEluZGVudExpbmUoKTsKLSAgICBUZXh0SW5kZW50VHlwZSB0ZXh0SW5kZW50VHlwZVZh
bHVlID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50VHlwZSgpOworICAgICAgICBUZXh0
SW5kZW50TGluZSB0ZXh0SW5kZW50TGluZVZhbHVlID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0
SW5kZW50TGluZSgpOworICAgICAgICBUZXh0SW5kZW50VHlwZSB0ZXh0SW5kZW50VHlwZVZhbHVl
ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50VHlwZSgpOwogI2VuZGlmCi0gICAgZm9y
IChhdXRvJiBpdGVtIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKLSAgICAgICAg
YXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXRlbS5n
ZXQoKSk7Ci0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpKQotICAgICAg
ICAgICAgbGVuZ3RoT3JQZXJjZW50YWdlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS5jb252ZXJ0VG9M
ZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3Vs
YXRlZENvbnZlcnNpb24+KHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhKCkpOworICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBkb3duY2FzdDxDU1NWYWx1ZUxp
c3Q+KHZhbHVlKSkgeworICAgICAgICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oaXRlbS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoIXByaW1p
dGl2ZVZhbHVlLmdldFZhbHVlSUQoKSkKKyAgICAgICAgICAgICAgICBsZW5ndGhPclBlcmNlbnRh
Z2VWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252
ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3R5bGVS
ZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiAjaWYgRU5BQkxF
KENTUzNfVEVYVCkKLSAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgp
ID09IENTU1ZhbHVlV2Via2l0RWFjaExpbmUpCi0gICAgICAgICAgICB0ZXh0SW5kZW50TGluZVZh
bHVlID0gVGV4dEluZGVudEVhY2hMaW5lOwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRIYW5naW5nKQotICAgICAgICAgICAgdGV4
dEluZGVudFR5cGVWYWx1ZSA9IFRleHRJbmRlbnRIYW5naW5nOworICAgICAgICAgICAgZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0RWFjaExpbmUp
CisgICAgICAgICAgICAgICAgdGV4dEluZGVudExpbmVWYWx1ZSA9IFRleHRJbmRlbnRFYWNoTGlu
ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZVdlYmtpdEhhbmdpbmcpCisgICAgICAgICAgICAgICAgdGV4dEluZGVudFR5cGVWYWx1
ZSA9IFRleHRJbmRlbnRIYW5naW5nOwogI2VuZGlmCi0gICAgfQorICAgICAgICB9CiAKLSAgICBB
U1NFUlQoIWxlbmd0aE9yUGVyY2VudGFnZVZhbHVlLmlzVW5kZWZpbmVkKCkpOwotICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEluZGVudChsZW5ndGhPclBlcmNlbnRhZ2VWYWx1ZSk7
CisgICAgICAgIEFTU0VSVCghbGVuZ3RoT3JQZXJjZW50YWdlVmFsdWUuaXNVbmRlZmluZWQoKSk7
CisgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEluZGVudChsZW5ndGhPclBl
cmNlbnRhZ2VWYWx1ZSk7CiAjaWYgRU5BQkxFKENTUzNfVEVYVCkKLSAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldFRleHRJbmRlbnRMaW5lKHRleHRJbmRlbnRMaW5lVmFsdWUpOwotICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEluZGVudFR5cGUodGV4dEluZGVudFR5cGVWYWx1
ZSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEluZGVudExpbmUodGV4
dEluZGVudExpbmVWYWx1ZSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4
dEluZGVudFR5cGUodGV4dEluZGVudFR5cGVWYWx1ZSk7CiAjZW5kaWYKLX0KKyAgICB9CiAKLWVu
dW0gQm9yZGVySW1hZ2VUeXBlIHsgQm9yZGVySW1hZ2UsIFdlYmtpdE1hc2tCb3hJbWFnZSB9Owot
ZW51bSBCb3JkZXJJbWFnZU1vZGlmaWVyVHlwZSB7IE91dHNldCwgUmVwZWF0LCBTbGljZSwgV2lk
dGggfTsKLXRlbXBsYXRlIDxCb3JkZXJJbWFnZVR5cGUgdHlwZSwgQm9yZGVySW1hZ2VNb2RpZmll
clR5cGUgbW9kaWZpZXI+Ci1jbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllciB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlcikKKyAgICBERUZJTkVfQk9SREVSX0lNQUdFX01PRElGSUVSX0hBTkRM
RVIoQm9yZGVySW1hZ2UsIE91dHNldCkKKyAgICBERUZJTkVfQk9SREVSX0lNQUdFX01PRElGSUVS
X0hBTkRMRVIoQm9yZGVySW1hZ2UsIFJlcGVhdCkKKyAgICBERUZJTkVfQk9SREVSX0lNQUdFX01P
RElGSUVSX0hBTkRMRVIoQm9yZGVySW1hZ2UsIFNsaWNlKQorICAgIERFRklORV9CT1JERVJfSU1B
R0VfTU9ESUZJRVJfSEFORExFUihCb3JkZXJJbWFnZSwgV2lkdGgpCisgICAgREVGSU5FX0JPUkRF
Ul9JTUFHRV9NT0RJRklFUl9IQU5ETEVSKFdlYmtpdE1hc2tCb3hJbWFnZSwgT3V0c2V0KQorICAg
IERFRklORV9CT1JERVJfSU1BR0VfTU9ESUZJRVJfSEFORExFUihXZWJraXRNYXNrQm94SW1hZ2Us
IFJlcGVhdCkKKyAgICBERUZJTkVfQk9SREVSX0lNQUdFX01PRElGSUVSX0hBTkRMRVIoV2Via2l0
TWFza0JveEltYWdlLCBTbGljZSkKKyAgICBERUZJTkVfQk9SREVSX0lNQUdFX01PRElGSUVSX0hB
TkRMRVIoV2Via2l0TWFza0JveEltYWdlLCBXaWR0aCkKKworICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWVXb3JkU3BhY2luZyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYg
dmFsdWUpCiAgICAgewotICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdHls
ZVJlc29sdmVyLnN0eWxlKCkpKTsKLSAgICAgICAgc3dpdGNoIChtb2RpZmllcikgewotICAgICAg
ICBjYXNlIE91dHNldDoKLSAgICAgICAgICAgIGltYWdlLmNvcHlPdXRzZXRGcm9tKGdldFZhbHVl
KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgUmVwZWF0OgotICAgICAgICAgICAgaW1hZ2UuY29weVJlcGVhdEZyb20oZ2V0VmFs
dWUoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBTbGljZToKLSAgICAgICAgICAgIGltYWdlLmNvcHlJbWFnZVNsaWNlc0Zyb20o
Z2V0VmFsdWUoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBXaWR0aDoKLSAgICAgICAgICAgIGltYWdlLmNvcHlCb3JkZXJTbGlj
ZXNGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci5zdHls
ZSgpLCBpbWFnZSk7CisgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKKworICAgICAgICBMZW5ndGggd29yZFNwYWNpbmc7Cisg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwp
CisgICAgICAgICAgICB3b3JkU3BhY2luZyA9IFJlbmRlclN0eWxlOjppbml0aWFsV29yZFNwYWNp
bmcoKTsKKyAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkKKyAgICAg
ICAgICAgIHdvcmRTcGFjaW5nID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+
KGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3Ioc3R5bGVSZXNvbHZl
cikpOworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSkKKyAg
ICAgICAgICAgIHdvcmRTcGFjaW5nID0gTGVuZ3RoKGNsYW1wVG88ZmxvYXQ+KHByaW1pdGl2ZVZh
bHVlLmdldERvdWJsZVZhbHVlKCksIG1pblZhbHVlRm9yQ3NzTGVuZ3RoLCBtYXhWYWx1ZUZvckNz
c0xlbmd0aCksIFBlcmNlbnQpOworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc051
bWJlcigpKQorICAgICAgICAgICAgd29yZFNwYWNpbmcgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUu
Z2V0RG91YmxlVmFsdWUoKSwgRml4ZWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0V29yZFNwYWNpbmcod29yZFNw
YWNpbmcpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCisjaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcp
CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRMaW5lSGVpZ2h0KFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIpCiAgICAgewotICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRW
YWx1ZShzdHlsZVJlc29sdmVyLnN0eWxlKCkpKTsKLSAgICAgICAgc3dpdGNoIChtb2RpZmllcikg
ewotICAgICAgICBjYXNlIE91dHNldDoKLSAgICAgICAgICAgIGltYWdlLnNldE91dHNldChMZW5n
dGhCb3goMCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVwZWF0OgotICAg
ICAgICAgICAgaW1hZ2Uuc2V0SG9yaXpvbnRhbFJ1bGUoU3RyZXRjaEltYWdlUnVsZSk7Ci0gICAg
ICAgICAgICBpbWFnZS5zZXRWZXJ0aWNhbFJ1bGUoU3RyZXRjaEltYWdlUnVsZSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTbGljZToKLSAgICAgICAgICAgIC8vIE1hc2tzIGhh
dmUgYSBkaWZmZXJlbnQgaW5pdGlhbCB2YWx1ZSBmb3Igc2xpY2VzLiBQcmVzZXJ2ZSB0aGUgdmFs
dWUgb2YgMCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCi0gICAgICAgICAgICBpbWFnZS5z
ZXRJbWFnZVNsaWNlcyh0eXBlID09IEJvcmRlckltYWdlID8gTGVuZ3RoQm94KExlbmd0aCgxMDAs
IFBlcmNlbnQpLCBMZW5ndGgoMTAwLCBQZXJjZW50KSwgTGVuZ3RoKDEwMCwgUGVyY2VudCksIExl
bmd0aCgxMDAsIFBlcmNlbnQpKSA6IExlbmd0aEJveCgpKTsKLSAgICAgICAgICAgIGltYWdlLnNl
dEZpbGwoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2lkdGg6Ci0g
ICAgICAgICAgICAvLyBNYXNrcyBoYXZlIGEgZGlmZmVyZW50IGluaXRpYWwgdmFsdWUgZm9yIHdp
ZHRocy4gVGhleSB1c2UgYW4gJ2F1dG8nIHZhbHVlIHJhdGhlciB0aGFuIHRyeWluZyB0byBmaXQg
dG8gdGhlIGJvcmRlci4KLSAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyh0eXBlID09
IEJvcmRlckltYWdlID8gTGVuZ3RoQm94KExlbmd0aCgxLCBSZWxhdGl2ZSksIExlbmd0aCgxLCBS
ZWxhdGl2ZSksIExlbmd0aCgxLCBSZWxhdGl2ZSksIExlbmd0aCgxLCBSZWxhdGl2ZSkpIDogTGVu
Z3RoQm94KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci5zdHlsZSgpLCBpbWFnZSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0TGluZUhlaWdodChzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmxpbmVI
ZWlnaHQoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0U3BlY2lmaWVkTGlu
ZUhlaWdodChzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPnNwZWNpZmllZExpbmVIZWlnaHQo
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0
aWFsTGluZUhlaWdodChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQogICAgIHsKLSAgICAg
ICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci5zdHlsZSgpKSk7
Ci0gICAgICAgIHN3aXRjaCAobW9kaWZpZXIpIHsKLSAgICAgICAgY2FzZSBPdXRzZXQ6Ci0gICAg
ICAgICAgICBpbWFnZS5zZXRPdXRzZXQoc3R5bGVSZXNvbHZlci5zdHlsZU1hcCgpLT5tYXBOaW5l
UGllY2VJbWFnZVF1YWQodmFsdWUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFJlcGVhdDoKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGVNYXAoKS0+bWFwTmluZVBp
ZWNlSW1hZ2VSZXBlYXQodmFsdWUsIGltYWdlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFNsaWNlOgotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZU1hcCgpLT5tYXBO
aW5lUGllY2VJbWFnZVNsaWNlKHZhbHVlLCBpbWFnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBXaWR0aDoKLSAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhzdHls
ZVJlc29sdmVyLnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOwotICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TGluZUhl
aWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgICAgIHN0eWxlUmVz
b2x2ZXIuc3R5bGUoKS0+c2V0U3BlY2lmaWVkTGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlh
bFNwZWNpZmllZExpbmVIZWlnaHQoKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZUxpbmVIZWlnaHQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgTGVuZ3RoIGxpbmVIZWlnaHQ7CisgICAgICAgIGlmICghY29u
dmVydExpbmVIZWlnaHQoc3R5bGVSZXNvbHZlciwgdmFsdWUsIGxpbmVIZWlnaHQsIHN0eWxlUmVz
b2x2ZXIuc3R5bGUoKS0+dGV4dFNpemVBZGp1c3QoKS5tdWx0aXBsaWVyKCkpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TGluZUhlaWdo
dChsaW5lSGVpZ2h0KTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRTcGVjaWZp
ZWRMaW5lSGVpZ2h0KGxpbmVIZWlnaHQpOworICAgIH0KKworI2Vsc2UKKworICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWVMaW5lSGVpZ2h0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIExlbmd0aCBsaW5lSGVpZ2h0OworICAgICAg
ICBpZiAoIWNvbnZlcnRMaW5lSGVpZ2h0KHN0eWxlUmVzb2x2ZXIsIHZhbHVlLCBsaW5lSGVpZ2h0
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PnNldExpbmVIZWlnaHQobGluZUhlaWdodCk7CisgICAgfQorCisjZW5kaWYKKworICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5oZXJpdE91dGxpbmVTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyKQorICAgIHsKKyAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRPdXRsaW5lU3R5
bGVJc0F1dG8oc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5vdXRsaW5lU3R5bGVJc0F1dG8o
KSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0T3V0bGluZVN0eWxlKHN0eWxl
UmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+b3V0bGluZVN0eWxlKCkpOworICAgIH0KKworICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5pdGlhbE91dGxpbmVTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyKQorICAgIHsKKyAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRPdXRsaW5l
U3R5bGVJc0F1dG8oUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8oKSk7Cisg
ICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0T3V0bGluZVN0eWxlKFJlbmRlclN0eWxl
Ojppbml0aWFsQm9yZGVyU3R5bGUoKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZU91dGxpbmVTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYg
dmFsdWUpCisgICAgeworICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CisKKyAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXRPdXRsaW5lU3R5bGVJc0F1dG8ocHJpbWl0aXZlVmFsdWUpOworICAgICAgICBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPnNldE91dGxpbmVTdHlsZShwcmltaXRpdmVWYWx1ZSk7CisgICAgfQor
CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsQ2xpcChTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyKQorICAgIHsKKyAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDbGlwKExl
bmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpKTsKKyAgICAgICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXRIYXNDbGlwKGZhbHNlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaGVyaXRDbGlwKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCisgICAgewor
ICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0
eWxlKCk7CisgICAgICAgIGlmICghcGFyZW50U3R5bGUtPmhhc0NsaXAoKSkKKyAgICAgICAgICAg
IHJldHVybiBhcHBseUluaXRpYWxDbGlwKHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPnNldENsaXAocGFyZW50U3R5bGUtPmNsaXBUb3AoKSwgcGFyZW50U3R5
bGUtPmNsaXBSaWdodCgpLCBwYXJlbnRTdHlsZS0+Y2xpcEJvdHRvbSgpLCBwYXJlbnRTdHlsZS0+
Y2xpcExlZnQoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SGFzQ2xpcCh0
cnVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlQ2xpcChTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICBhdXRv
JiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CisK
KyAgICAgICAgaWYgKFJlY3QqIHJlY3QgPSBwcmltaXRpdmVWYWx1ZS5nZXRSZWN0VmFsdWUoKSkg
eworICAgICAgICAgICAgYXV0byBjb252ZXJzaW9uRGF0YSA9IHN0eWxlUmVzb2x2ZXIuc3RhdGUo
KS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CisgICAgICAgICAgICBMZW5ndGggdG9wID0g
cmVjdC0+dG9wKCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVy
Y2VudENvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oY29udmVyc2lvbkRhdGEpOworICAgICAg
ICAgICAgTGVuZ3RoIHJpZ2h0ID0gcmVjdC0+cmlnaHQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVk
SW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihj
b252ZXJzaW9uRGF0YSk7CisgICAgICAgICAgICBMZW5ndGggYm90dG9tID0gcmVjdC0+Ym90dG9t
KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZl
cnNpb24gfCBBdXRvQ29udmVyc2lvbj4oY29udmVyc2lvbkRhdGEpOworICAgICAgICAgICAgTGVu
Z3RoIGxlZnQgPSByZWN0LT5sZWZ0KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252
ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oY29udmVyc2lvbkRh
dGEpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDbGlwKHRvcCwgcmln
aHQsIGJvdHRvbSwgbGVmdCk7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNl
dEhhc0NsaXAodHJ1ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQocHJp
bWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQXV0byk7CisgICAgICAgICAgICBh
cHBseUluaXRpYWxDbGlwKHN0eWxlUmVzb2x2ZXIpOwogICAgICAgICB9Ci0gICAgICAgIHNldFZh
bHVlKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKSwgaW1hZ2UpOwogICAgIH0KIAotcHJpdmF0ZToKLSAg
ICBzdGF0aWMgaW5saW5lIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBnZXRWYWx1ZShSZW5kZXJTdHls
ZSogc3R5bGUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVGV4dFNoYWRvdyhTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHR5cGUgPT0gQm9y
ZGVySW1hZ2UgPyBzdHlsZS0+Ym9yZGVySW1hZ2UoKSA6IHN0eWxlLT5tYXNrQm94SW1hZ2UoKTsK
KyAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0U2hhZG93KG51bGxwdHIpOwog
ICAgIH0KIAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5
bGUsIGNvbnN0IE5pbmVQaWVjZUltYWdlJiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aGVyaXRUZXh0U2hhZG93KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCiAgICAgewotICAg
ICAgICByZXR1cm4gdHlwZSA9PSBCb3JkZXJJbWFnZSA/IHN0eWxlLT5zZXRCb3JkZXJJbWFnZSh2
YWx1ZSkgOiBzdHlsZS0+c2V0TWFza0JveEltYWdlKHZhbHVlKTsKKyAgICAgICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXRUZXh0U2hhZG93KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+
dGV4dFNoYWRvdygpID8gc3RkOjptYWtlX3VuaXF1ZTxTaGFkb3dEYXRhPigqc3R5bGVSZXNvbHZl
ci5wYXJlbnRTdHlsZSgpLT50ZXh0U2hhZG93KCkpIDogbnVsbHB0cik7CiAgICAgfQotfTsKIAot
I2RlZmluZSBERUZJTkVfQk9SREVSX0lNQUdFX01PRElGSUVSX0hBTkRMRVIodHlwZSwgbW9kaWZp
ZXIpIFwKLWlubGluZSB2b2lkIGFwcGx5SW5oZXJpdCMjdHlwZSMjbW9kaWZpZXIoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlcikgXAoteyBcCi0gICAgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdl
TW9kaWZpZXI8dHlwZSwgbW9kaWZpZXI+OjphcHBseUluaGVyaXRWYWx1ZShzdHlsZVJlc29sdmVy
KTsgXAotfSBcCi1pbmxpbmUgdm9pZCBhcHBseUluaXRpYWwjI3R5cGUjI21vZGlmaWVyKFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpIFwKLXsgXAotICAgIEFwcGx5UHJvcGVydHlCb3JkZXJJ
bWFnZU1vZGlmaWVyPHR5cGUsIG1vZGlmaWVyPjo6YXBwbHlJbml0aWFsVmFsdWUoc3R5bGVSZXNv
bHZlcik7IFwKLX0gXAotaW5saW5lIHZvaWQgYXBwbHlWYWx1ZSMjdHlwZSMjbW9kaWZpZXIoU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKSBcCi17IFwKLSAgICBB
cHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjx0eXBlLCBtb2RpZmllcj46OmFwcGx5VmFs
dWUoc3R5bGVSZXNvbHZlciwgdmFsdWUpOyBcCi19Ci0KLURFRklORV9CT1JERVJfSU1BR0VfTU9E
SUZJRVJfSEFORExFUihCb3JkZXJJbWFnZSwgT3V0c2V0KQotREVGSU5FX0JPUkRFUl9JTUFHRV9N
T0RJRklFUl9IQU5ETEVSKEJvcmRlckltYWdlLCBSZXBlYXQpCi1ERUZJTkVfQk9SREVSX0lNQUdF
X01PRElGSUVSX0hBTkRMRVIoQm9yZGVySW1hZ2UsIFNsaWNlKQotREVGSU5FX0JPUkRFUl9JTUFH
RV9NT0RJRklFUl9IQU5ETEVSKEJvcmRlckltYWdlLCBXaWR0aCkKLURFRklORV9CT1JERVJfSU1B
R0VfTU9ESUZJRVJfSEFORExFUihXZWJraXRNYXNrQm94SW1hZ2UsIE91dHNldCkKLURFRklORV9C
T1JERVJfSU1BR0VfTU9ESUZJRVJfSEFORExFUihXZWJraXRNYXNrQm94SW1hZ2UsIFJlcGVhdCkK
LURFRklORV9CT1JERVJfSU1BR0VfTU9ESUZJRVJfSEFORExFUihXZWJraXRNYXNrQm94SW1hZ2Us
IFNsaWNlKQotREVGSU5FX0JPUkRFUl9JTUFHRV9NT0RJRklFUl9IQU5ETEVSKFdlYmtpdE1hc2tC
b3hJbWFnZSwgV2lkdGgpCi0KLWlubGluZSBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNzc3Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlcikKLXsKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gc3R5bGVSZXNvbHZlci5kb2N1
bWVudCgpLmZyYW1lKCkpCi0gICAgICAgIHJldHVybiBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3Nz
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpICogZnJhbWUtPnRleHRab29tRmFjdG9yKCkpOwot
Ci0gICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25E
YXRhKCk7Ci19Ci0KLWlubGluZSBib29sIGNvbnZlcnRMaW5lSGVpZ2h0KFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSwgTGVuZ3RoJiBsZW5ndGgsIGZs
b2F0IG11bHRpcGxpZXIgPSAxLmYpCi17Ci0gICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwotICAgIGlmIChwcmltaXRpdmVWYWx1ZS5n
ZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKLSAgICAgICAgbGVuZ3RoID0gUmVuZGVy
U3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWVUZXh0U2hhZG93KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGFwcGx5VGV4dE9yQm94U2hhZG93
VmFsdWU8Q1NTUHJvcGVydHlUZXh0U2hhZG93PihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CiAgICAg
fQotICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7Ci0gICAgICAgIGxlbmd0aCA9
IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjc3N0b0xlbmd0aENvbnZlcnNp
b25EYXRhV2l0aFRleHRab29tRmFjdG9yKHN0eWxlUmVzb2x2ZXIpKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxCb3hTaGFkb3coU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwogICAgIH0KLSAgICBpZiAocHJpbWl0aXZlVmFsdWUu
aXNQZXJjZW50YWdlKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IHBlcmNlbnRhZ2Ugc2hvdWxkIG5v
dCBiZSByZXN0cmljdGVkIHRvIGFuIGludGVnZXIgaGVyZS4KLSAgICAgICAgbGVuZ3RoID0gTGVu
Z3RoKChzdHlsZVJlc29sdmVyLnN0eWxlKCktPmNvbXB1dGVkRm9udFNpemUoKSAqIHByaW1pdGl2
ZVZhbHVlLmdldEludFZhbHVlKCkpICogbXVsdGlwbGllciAvIDEwMCwgRml4ZWQpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdEJveFNoYWRvdyhT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zZXRCb3hTaGFkb3coc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5ib3hT
aGFkb3coKSA/IHN0ZDo6bWFrZV91bmlxdWU8U2hhZG93RGF0YT4oKnN0eWxlUmVzb2x2ZXIucGFy
ZW50U3R5bGUoKS0+Ym94U2hhZG93KCkpIDogbnVsbHB0cik7CiAgICAgfQotICAgIGlmIChwcmlt
aXRpdmVWYWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBudW1iZXIgYW5kIHBl
cmNlbnRhZ2UgdmFsdWVzIHNob3VsZCBwcm9kdWNlIHRoZSBzYW1lIHR5cGUgb2YgTGVuZ3RoIChp
ZS4gRml4ZWQgb3IgUGVyY2VudCkuCi0gICAgICAgIGxlbmd0aCA9IExlbmd0aChwcmltaXRpdmVW
YWx1ZS5nZXREb3VibGVWYWx1ZSgpICogbXVsdGlwbGllciAqIDEwMC4wLCBQZXJjZW50KTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlQm94U2hhZG93
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGFwcGx5VGV4dE9yQm94U2hhZG93VmFsdWU8Q1NTUHJvcGVydHlCb3hTaGFkb3c+KHN0
eWxlUmVzb2x2ZXIsIHZhbHVlKTsKICAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1pbmxp
bmUgdm9pZCBhcHBseVZhbHVlV29yZFNwYWNpbmcoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUmIHZhbHVlKQotewotICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKLQotICAgIExlbmd0aCB3b3JkU3BhY2luZzsK
LSAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKQot
ICAgICAgICB3b3JkU3BhY2luZyA9IFJlbmRlclN0eWxlOjppbml0aWFsV29yZFNwYWNpbmcoKTsK
LSAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKQotICAgICAgICB3b3JkU3Bh
Y2luZyA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjc3N0b0xlbmd0aENv
bnZlcnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9yKHN0eWxlUmVzb2x2ZXIpKTsKLSAgICBlbHNl
IGlmIChwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgd29yZFNwYWNpbmcg
PSBMZW5ndGgoY2xhbXBUbzxmbG9hdD4ocHJpbWl0aXZlVmFsdWUuZ2V0RG91YmxlVmFsdWUoKSwg
bWluVmFsdWVGb3JDc3NMZW5ndGgsIG1heFZhbHVlRm9yQ3NzTGVuZ3RoKSwgUGVyY2VudCk7Ci0g
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgd29yZFNwYWNp
bmcgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUuZ2V0RG91YmxlVmFsdWUoKSwgRml4ZWQpOwotICAg
IGVsc2UKLSAgICAgICAgcmV0dXJuOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0V29y
ZFNwYWNpbmcod29yZFNwYWNpbmcpOwotfQogCi0jaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJ
TkcpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsV2Via2l0Qm94U2hhZG93KFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIpCisgICAgeworICAgICAgICBhcHBseUluaXRpYWxCb3hTaGFk
b3coc3R5bGVSZXNvbHZlcik7CisgICAgfQogCi1pbmxpbmUgdm9pZCBhcHBseUluaGVyaXRMaW5l
SGVpZ2h0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCi17Ci0gICAgc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+bGlu
ZUhlaWdodCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFNwZWNpZmllZExpbmVI
ZWlnaHQoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5zcGVjaWZpZWRMaW5lSGVpZ2h0KCkp
OwotfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFdlYmtpdEJveFNoYWRvdyhTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgYXBwbHlJbmhlcml0Qm94U2hh
ZG93KHN0eWxlUmVzb2x2ZXIpOworICAgIH0KIAotaW5saW5lIHZvaWQgYXBwbHlJbml0aWFsTGlu
ZUhlaWdodChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQotewotICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQo
KSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRTcGVjaWZpZWRMaW5lSGVpZ2h0KFJl
bmRlclN0eWxlOjppbml0aWFsU3BlY2lmaWVkTGluZUhlaWdodCgpKTsKLX0KKyAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlV2Via2l0Qm94U2hhZG93KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGFwcGx5VGV4dE9yQm94U2hhZG93
VmFsdWU8Q1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c+KHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsK
KyAgICB9CiAKLWlubGluZSB2b2lkIGFwcGx5VmFsdWVMaW5lSGVpZ2h0KFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKLXsKLSAgICBMZW5ndGggbGluZUhlaWdo
dDsKLSAgICBpZiAoIWNvbnZlcnRMaW5lSGVpZ2h0KHN0eWxlUmVzb2x2ZXIsIHZhbHVlLCBsaW5l
SGVpZ2h0LCBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnRleHRTaXplQWRqdXN0KCkubXVsdGlwbGll
cigpKSkKLSAgICAgICAgcmV0dXJuOworcHJpdmF0ZToKKyAgICBzdGF0aWMgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSBjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9y
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCisgICAgeworICAgICAgICBpZiAoRnJhbWUq
IGZyYW1lID0gc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLmZyYW1lKCkpCisgICAgICAgICAgICBy
ZXR1cm4gc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5j
b3B5V2l0aEFkanVzdGVkWm9vbShzdHlsZVJlc29sdmVyLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSAqIGZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpKTsKIAotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KS0+c2V0TGluZUhlaWdodChsaW5lSGVpZ2h0KTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PnNldFNwZWNpZmllZExpbmVIZWlnaHQobGluZUhlaWdodCk7Ci19CisgICAgICAgIHJldHVybiBz
dHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOworICAgIH0K
IAotI2Vsc2UKKyAgICB0ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBpZD4KKyAgICBzdGF0aWMgdm9p
ZCBhcHBseVRleHRPckJveFNoYWRvd1ZhbHVlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpKSB7CisgICAgICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhudWxscHRyKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBib29sIGlzRmlyc3RFbnRyeSA9IHRydWU7Cisg
ICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7
CisgICAgICAgICAgICBhdXRvJiBzaGFkb3dWYWx1ZSA9IGRvd25jYXN0PENTU1NoYWRvd1ZhbHVl
PihpdGVtLmdldCgpKTsKKyAgICAgICAgICAgIGF1dG8gY29udmVyc2lvbkRhdGEgPSBzdHlsZVJl
c29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOworICAgICAgICAgICAg
aW50IHggPSBzaGFkb3dWYWx1ZS54LT5jb21wdXRlTGVuZ3RoPGludD4oY29udmVyc2lvbkRhdGEp
OworICAgICAgICAgICAgaW50IHkgPSBzaGFkb3dWYWx1ZS55LT5jb21wdXRlTGVuZ3RoPGludD4o
Y29udmVyc2lvbkRhdGEpOworICAgICAgICAgICAgaW50IGJsdXIgPSBzaGFkb3dWYWx1ZS5ibHVy
ID8gc2hhZG93VmFsdWUuYmx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KGNvbnZlcnNpb25EYXRhKSA6
IDA7CisgICAgICAgICAgICBpbnQgc3ByZWFkID0gc2hhZG93VmFsdWUuc3ByZWFkID8gc2hhZG93
VmFsdWUuc3ByZWFkLT5jb21wdXRlTGVuZ3RoPGludD4oY29udmVyc2lvbkRhdGEpIDogMDsKKyAg
ICAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlID0gc2hhZG93VmFsdWUuc3R5bGUgJiYg
c2hhZG93VmFsdWUuc3R5bGUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluc2V0ID8gSW5zZXQg
OiBOb3JtYWw7CisgICAgICAgICAgICBDb2xvciBjb2xvcjsKKyAgICAgICAgICAgIGlmIChzaGFk
b3dWYWx1ZS5jb2xvcikKKyAgICAgICAgICAgICAgICBjb2xvciA9IHN0eWxlUmVzb2x2ZXIuY29s
b3JGcm9tUHJpbWl0aXZlVmFsdWUoc2hhZG93VmFsdWUuY29sb3IuZ2V0KCkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbG9yID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5j
b2xvcigpOwogCi1pbmxpbmUgdm9pZCBhcHBseVZhbHVlTGluZUhlaWdodChTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCi17Ci0gICAgTGVuZ3RoIGxpbmVIZWln
aHQ7Ci0gICAgaWYgKCFjb252ZXJ0TGluZUhlaWdodChzdHlsZVJlc29sdmVyLCB2YWx1ZSwgbGlu
ZUhlaWdodCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGF1dG8gc2hhZG93RGF0YSA9
IHN0ZDo6bWFrZV91bmlxdWU8U2hhZG93RGF0YT4oSW50UG9pbnQoeCwgeSksIGJsdXIsIHNwcmVh
ZCwgc2hhZG93U3R5bGUsIGlkID09IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCBjb2xvci5p
c1ZhbGlkKCkgPyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCk7CisgICAgICAgICAgICBpZiAo
aWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93KQorICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhXVEY6Om1vdmUoc2hhZG93RGF0YSksICFpc0ZpcnN0
RW50cnkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXRCb3hTaGFkb3coV1RGOjptb3ZlKHNoYWRvd0RhdGEpLCAhaXNGaXJzdEVudHJ5KTsgLy8g
YWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQogCi0gICAgc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KGxpbmVIZWlnaHQpOwotfQorICAgICAg
ICAgICAgaXNGaXJzdEVudHJ5ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CiAKLSNlbmRpZgor
ICAgIHN0YXRpYyBib29sIGNvbnZlcnRMaW5lSGVpZ2h0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSwgTGVuZ3RoJiBsZW5ndGgsIGZsb2F0IG11bHRp
cGxpZXIgPSAxLmYpCisgICAgeworICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKKyAgICAgICAgICAgIGxlbmd0aCA9
IFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsK
KyAgICAgICAgICAgIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3Ro
Pihjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9yKHN0eWxlUmVzb2x2
ZXIpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IHBl
cmNlbnRhZ2Ugc2hvdWxkIG5vdCBiZSByZXN0cmljdGVkIHRvIGFuIGludGVnZXIgaGVyZS4KKyAg
ICAgICAgICAgIGxlbmd0aCA9IExlbmd0aCgoc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5jb21wdXRl
ZEZvbnRTaXplKCkgKiBwcmltaXRpdmVWYWx1ZS5nZXRJbnRWYWx1ZSgpKSAqIG11bHRpcGxpZXIg
LyAxMDAsIEZpeGVkKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKSB7CisgICAgICAgICAgICAvLyBGSVhN
RTogbnVtYmVyIGFuZCBwZXJjZW50YWdlIHZhbHVlcyBzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSB0
eXBlIG9mIExlbmd0aCAoaWUuIEZpeGVkIG9yIFBlcmNlbnQpLgorICAgICAgICAgICAgbGVuZ3Ro
ID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLmdldERvdWJsZVZhbHVlKCkgKiBtdWx0aXBsaWVyICog
MTAwLjAsIFBlcmNlbnQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotaW5saW5lIHZvaWQgYXBwbHlJbmhlcml0T3V0
bGluZVN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCi17Ci0gICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXRPdXRsaW5lU3R5bGVJc0F1dG8oc3R5bGVSZXNvbHZlci5wYXJlbnRT
dHlsZSgpLT5vdXRsaW5lU3R5bGVJc0F1dG8oKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXRPdXRsaW5lU3R5bGUoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5vdXRsaW5lU3R5
bGUoKSk7Ci19Ci0KLWlubGluZSB2b2lkIGFwcGx5SW5pdGlhbE91dGxpbmVTdHlsZShTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyKQotewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
T3V0bGluZVN0eWxlSXNBdXRvKFJlbmRlclN0eWxlOjppbml0aWFsT3V0bGluZVN0eWxlSXNBdXRv
KCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0T3V0bGluZVN0eWxlKFJlbmRlclN0
eWxlOjppbml0aWFsQm9yZGVyU3R5bGUoKSk7Ci19Ci0KLWlubGluZSB2b2lkIGFwcGx5VmFsdWVP
dXRsaW5lU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVl
KQotewotICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKTsKLQotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0T3V0bGluZVN0eWxl
SXNBdXRvKHByaW1pdGl2ZVZhbHVlKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE91
dGxpbmVTdHlsZShwcmltaXRpdmVWYWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lkIGFwcGx5SW5pdGlh
bENsaXAoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKLXsKLSAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldENsaXAoTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCkp
OwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SGFzQ2xpcChmYWxzZSk7Ci19Ci0KLWlu
bGluZSB2b2lkIGFwcGx5SW5oZXJpdENsaXAoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikK
LXsKLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0
eWxlKCk7Ci0gICAgaWYgKCFwYXJlbnRTdHlsZS0+aGFzQ2xpcCgpKQotICAgICAgICByZXR1cm4g
YXBwbHlJbml0aWFsQ2xpcChzdHlsZVJlc29sdmVyKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPnNldENsaXAocGFyZW50U3R5bGUtPmNsaXBUb3AoKSwgcGFyZW50U3R5bGUtPmNsaXBSaWdo
dCgpLCBwYXJlbnRTdHlsZS0+Y2xpcEJvdHRvbSgpLCBwYXJlbnRTdHlsZS0+Y2xpcExlZnQoKSk7
Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRIYXNDbGlwKHRydWUpOwotfQotCi1pbmxp
bmUgdm9pZCBhcHBseVZhbHVlQ2xpcChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSYgdmFsdWUpCi17Ci0gICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpOwotCi0gICAgaWYgKFJlY3QqIHJlY3QgPSBwcmltaXRpdmVW
YWx1ZS5nZXRSZWN0VmFsdWUoKSkgewotICAgICAgICBhdXRvIGNvbnZlcnNpb25EYXRhID0gc3R5
bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKLSAgICAgICAg
TGVuZ3RoIHRvcCA9IHJlY3QtPnRvcCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29u
dmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KGNvbnZlcnNpb25E
YXRhKTsKLSAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gcmVjdC0+cmlnaHQoKS0+Y29udmVydFRvTGVu
Z3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IEF1dG9Db252
ZXJzaW9uPihjb252ZXJzaW9uRGF0YSk7Ci0gICAgICAgIExlbmd0aCBib3R0b20gPSByZWN0LT5i
b3R0b20oKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50
Q29udmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihjb252ZXJzaW9uRGF0YSk7Ci0gICAgICAgIExl
bmd0aCBsZWZ0ID0gcmVjdC0+bGVmdCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29u
dmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KGNvbnZlcnNpb25E
YXRhKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDbGlwKHRvcCwgcmlnaHQs
IGJvdHRvbSwgbGVmdCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SGFzQ2xp
cCh0cnVlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUuZ2V0
VmFsdWVJRCgpID09IENTU1ZhbHVlQXV0byk7Ci0gICAgICAgIGFwcGx5SW5pdGlhbENsaXAoc3R5
bGVSZXNvbHZlcik7CisgICAgZW51bSBCb3JkZXJJbWFnZVR5cGUgeyBCb3JkZXJJbWFnZSwgV2Vi
a2l0TWFza0JveEltYWdlIH07CisgICAgZW51bSBCb3JkZXJJbWFnZU1vZGlmaWVyVHlwZSB7IE91
dHNldCwgUmVwZWF0LCBTbGljZSwgV2lkdGggfTsKKyAgICB0ZW1wbGF0ZSA8Qm9yZGVySW1hZ2VU
eXBlIHR5cGUsIEJvcmRlckltYWdlTW9kaWZpZXJUeXBlIG1vZGlmaWVyPgorICAgIGNsYXNzIEFw
cGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKSkpOworICAgICAgICAgICAgc3dpdGNoIChtb2RpZmllcikgewor
ICAgICAgICAgICAgY2FzZSBPdXRzZXQ6CisgICAgICAgICAgICAgICAgaW1hZ2UuY29weU91dHNl
dEZyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFJlcGVhdDoKKyAgICAgICAgICAgICAgICBp
bWFnZS5jb3B5UmVwZWF0RnJvbShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU2xpY2U6CisgICAg
ICAgICAgICAgICAgaW1hZ2UuY29weUltYWdlU2xpY2VzRnJvbShnZXRWYWx1ZShzdHlsZVJlc29s
dmVyLnBhcmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgV2lkdGg6CisgICAgICAgICAgICAgICAgaW1hZ2UuY29weUJvcmRlclNsaWNlc0Zyb20o
Z2V0VmFsdWUoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVy
LnN0eWxlKCksIGltYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5pdGlhbFZhbHVlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKSkpOworICAgICAgICAgICAgc3dpdGNoIChtb2RpZmllcikgeworICAgICAgICAgICAgY2Fz
ZSBPdXRzZXQ6CisgICAgICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KExlbmd0aEJveCgwKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFJlcGVhdDoKKyAgICAg
ICAgICAgICAgICBpbWFnZS5zZXRIb3Jpem9udGFsUnVsZShTdHJldGNoSW1hZ2VSdWxlKTsKKyAg
ICAgICAgICAgICAgICBpbWFnZS5zZXRWZXJ0aWNhbFJ1bGUoU3RyZXRjaEltYWdlUnVsZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNsaWNlOgorICAgICAgICAg
ICAgICAgIC8vIE1hc2tzIGhhdmUgYSBkaWZmZXJlbnQgaW5pdGlhbCB2YWx1ZSBmb3Igc2xpY2Vz
LiBQcmVzZXJ2ZSB0aGUgdmFsdWUgb2YgMCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisg
ICAgICAgICAgICAgICAgaW1hZ2Uuc2V0SW1hZ2VTbGljZXModHlwZSA9PSBCb3JkZXJJbWFnZSA/
IExlbmd0aEJveChMZW5ndGgoMTAwLCBQZXJjZW50KSwgTGVuZ3RoKDEwMCwgUGVyY2VudCksIExl
bmd0aCgxMDAsIFBlcmNlbnQpLCBMZW5ndGgoMTAwLCBQZXJjZW50KSkgOiBMZW5ndGhCb3goKSk7
CisgICAgICAgICAgICAgICAgaW1hZ2Uuc2V0RmlsbChmYWxzZSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFdpZHRoOgorICAgICAgICAgICAgICAgIC8vIE1hc2tz
IGhhdmUgYSBkaWZmZXJlbnQgaW5pdGlhbCB2YWx1ZSBmb3Igd2lkdGhzLiBUaGV5IHVzZSBhbiAn
YXV0bycgdmFsdWUgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGZpdCB0byB0aGUgYm9yZGVyLgorICAg
ICAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyh0eXBlID09IEJvcmRlckltYWdlID8g
TGVuZ3RoQm94KExlbmd0aCgxLCBSZWxhdGl2ZSksIExlbmd0aCgxLCBSZWxhdGl2ZSksIExlbmd0
aCgxLCBSZWxhdGl2ZSksIExlbmd0aCgxLCBSZWxhdGl2ZSkpIDogTGVuZ3RoQm94KCkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0VmFsdWUo
c3R5bGVSZXNvbHZlci5zdHlsZSgpLCBpbWFnZSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVl
JiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0
VmFsdWUoc3R5bGVSZXNvbHZlci5zdHlsZSgpKSk7CisgICAgICAgICAgICBzd2l0Y2ggKG1vZGlm
aWVyKSB7CisgICAgICAgICAgICBjYXNlIE91dHNldDoKKyAgICAgICAgICAgICAgICBpbWFnZS5z
ZXRPdXRzZXQoc3R5bGVSZXNvbHZlci5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVF1YWQo
dmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUmVwZWF0
OgorICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGVNYXAoKS0+bWFwTmluZVBpZWNl
SW1hZ2VSZXBlYXQodmFsdWUsIGltYWdlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgU2xpY2U6CisgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZU1h
cCgpLT5tYXBOaW5lUGllY2VJbWFnZVNsaWNlKHZhbHVlLCBpbWFnZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdpZHRoOgorICAgICAgICAgICAgICAgIGltYWdl
LnNldEJvcmRlclNsaWNlcyhzdHlsZVJlc29sdmVyLnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUlt
YWdlUXVhZCh2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci5zdHlsZSgpLCBpbWFnZSk7CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHN0YXRpYyBjb25zdCBOaW5lUGllY2VJbWFn
ZSYgZ2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gdHlwZSA9PSBCb3JkZXJJbWFnZSA/IHN0eWxlLT5ib3JkZXJJbWFnZSgpIDogc3R5bGUt
Pm1hc2tCb3hJbWFnZSgpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgc2V0VmFs
dWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBOaW5lUGllY2VJbWFnZSYgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0eXBlID09IEJvcmRlckltYWdlID8gc3R5bGUtPnNl
dEJvcmRlckltYWdlKHZhbHVlKSA6IHN0eWxlLT5zZXRNYXNrQm94SW1hZ2UodmFsdWUpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIHN0YXRpYyBMZW5ndGggbW1MZW5ndGgoZG91YmxlIG1tKQor
ICAgIHsKKyAgICAgICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZShDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKG1tLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX01NKSk7CisgICAgICAgIHJl
dHVybiB2YWx1ZS5nZXQoKS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSgpKTsKICAgICB9Ci19CiAKLX0gLy8gbmFtZXNwYWNlIFN0eWxlQnVpbGRlckZ1bmN0
aW9ucworICAgIHN0YXRpYyBMZW5ndGggaW5jaExlbmd0aChkb3VibGUgaW5jaCkKKyAgICB7Cisg
ICAgICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShpbmNoLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lOKSk7CisgICAgICAgIHJldHVybiB2
YWx1ZS5nZXQoKS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXNldEVmZmVjdGl2ZVpvb20oU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAgIC8vIFJlc2V0IHRoZSB6b29t
IGluIGVmZmVjdC4gVGhpcyBhbGxvd3MgdGhlIHNldFpvb20gbWV0aG9kIHRvIGFjY3VyYXRlbHkg
Y29tcHV0ZSBhIG5ldyB6b29tIGluIGVmZmVjdC4KKyAgICAgICAgc3R5bGVSZXNvbHZlci5zZXRF
ZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSA/IHN0eWxlUmVzb2x2ZXIu
cGFyZW50U3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRpYWxab29t
KCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGdldFBhZ2VTaXplRnJvbU5hbWUoQ1NTUHJp
bWl0aXZlVmFsdWUqIHBhZ2VTaXplTmFtZSwgQ1NTUHJpbWl0aXZlVmFsdWUqIHBhZ2VPcmllbnRh
dGlvbiwgTGVuZ3RoJiB3aWR0aCwgTGVuZ3RoJiBoZWlnaHQpCisgICAgeworICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8TGVuZ3RoPiBhNVdpZHRoKG1tTGVuZ3RoKDE0OCkpOworICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TGVuZ3RoPiBhNUhlaWdodChtbUxlbmd0aCgyMTApKTsK
KyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPExlbmd0aD4gYTRXaWR0aChtbUxlbmd0aCgy
MTApKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPExlbmd0aD4gYTRIZWlnaHQobW1M
ZW5ndGgoMjk3KSk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxMZW5ndGg+IGEzV2lk
dGgobW1MZW5ndGgoMjk3KSk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxMZW5ndGg+
IGEzSGVpZ2h0KG1tTGVuZ3RoKDQyMCkpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
TGVuZ3RoPiBiNVdpZHRoKG1tTGVuZ3RoKDE3NikpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8TGVuZ3RoPiBiNUhlaWdodChtbUxlbmd0aCgyNTApKTsKKyAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPExlbmd0aD4gYjRXaWR0aChtbUxlbmd0aCgyNTApKTsKKyAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPExlbmd0aD4gYjRIZWlnaHQobW1MZW5ndGgoMzUzKSk7CisgICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxMZW5ndGg+IGxldHRlcldpZHRoKGluY2hMZW5ndGgo
OC41KSk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxMZW5ndGg+IGxldHRlckhlaWdo
dChpbmNoTGVuZ3RoKDExKSk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxMZW5ndGg+
IGxlZ2FsV2lkdGgoaW5jaExlbmd0aCg4LjUpKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPExlbmd0aD4gbGVnYWxIZWlnaHQoaW5jaExlbmd0aCgxNCkpOworICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8TGVuZ3RoPiBsZWRnZXJXaWR0aChpbmNoTGVuZ3RoKDExKSk7CisgICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxMZW5ndGg+IGxlZGdlckhlaWdodChpbmNoTGVuZ3Ro
KDE3KSk7CisKKyAgICAgICAgaWYgKCFwYWdlU2l6ZU5hbWUpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgc3dpdGNoIChwYWdlU2l6ZU5hbWUtPmdldFZhbHVlSUQoKSkgewor
ICAgICAgICBjYXNlIENTU1ZhbHVlQTU6CisgICAgICAgICAgICB3aWR0aCA9IGE1V2lkdGg7Cisg
ICAgICAgICAgICBoZWlnaHQgPSBhNUhlaWdodDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENTU1ZhbHVlQTQ6CisgICAgICAgICAgICB3aWR0aCA9IGE0V2lkdGg7CisgICAgICAg
ICAgICBoZWlnaHQgPSBhNEhlaWdodDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENTU1ZhbHVlQTM6CisgICAgICAgICAgICB3aWR0aCA9IGEzV2lkdGg7CisgICAgICAgICAgICBo
ZWlnaHQgPSBhM0hlaWdodDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Zh
bHVlQjU6CisgICAgICAgICAgICB3aWR0aCA9IGI1V2lkdGg7CisgICAgICAgICAgICBoZWlnaHQg
PSBiNUhlaWdodDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlQjQ6
CisgICAgICAgICAgICB3aWR0aCA9IGI0V2lkdGg7CisgICAgICAgICAgICBoZWlnaHQgPSBiNEhl
aWdodDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlTGV0dGVyOgor
ICAgICAgICAgICAgd2lkdGggPSBsZXR0ZXJXaWR0aDsKKyAgICAgICAgICAgIGhlaWdodCA9IGxl
dHRlckhlaWdodDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlTGVn
YWw6CisgICAgICAgICAgICB3aWR0aCA9IGxlZ2FsV2lkdGg7CisgICAgICAgICAgICBoZWlnaHQg
PSBsZWdhbEhlaWdodDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVl
TGVkZ2VyOgorICAgICAgICAgICAgd2lkdGggPSBsZWRnZXJXaWR0aDsKKyAgICAgICAgICAgIGhl
aWdodCA9IGxlZGdlckhlaWdodDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBh
Z2VPcmllbnRhdGlvbikgeworICAgICAgICAgICAgc3dpdGNoIChwYWdlT3JpZW50YXRpb24tPmdl
dFZhbHVlSUQoKSkgeworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhbmRzY2FwZToKKyAgICAg
ICAgICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlUG9ydHJhaXQ6CisgICAgICAgICAgICAgICAg
Ly8gTm90aGluZyB0byBkby4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDhjYzdhMzEw
MjNlNmE1ZjA2Y2JjZWNkZDZiMTZmMGY4YThhMzBjYmMuLjAyYjFmOWEzMzg3MjMzNWU5OTFkNzA5
NmRlNmYwZmJiZGE2ZDlhYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAg
LTIzNzEsNDYgKzIzNzEsNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBicmVhazsKIAogICAgIC8v
IENTUzMgUHJvcGVydGllcwotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0U2hhZG93OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlCb3hTaGFkb3c6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNo
YWRvdzogewotICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBpZiAoaWQgPT0g
Q1NTUHJvcGVydHlUZXh0U2hhZG93KQotICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZS5zdHls
ZSgpLT5zZXRUZXh0U2hhZG93KHN0YXRlLnBhcmVudFN0eWxlKCktPnRleHRTaGFkb3coKSA/IHN0
ZDo6bWFrZV91bmlxdWU8U2hhZG93RGF0YT4oKnN0YXRlLnBhcmVudFN0eWxlKCktPnRleHRTaGFk
b3coKSkgOiBudWxscHRyKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0ZS5zdHlsZSgpLT5zZXRC
b3hTaGFkb3coc3RhdGUucGFyZW50U3R5bGUoKS0+Ym94U2hhZG93KCkgPyBzdGQ6Om1ha2VfdW5p
cXVlPFNoYWRvd0RhdGE+KCpzdGF0ZS5wYXJlbnRTdHlsZSgpLT5ib3hTaGFkb3coKSkgOiBudWxs
cHRyKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXNJbml0aWFsIHx8IHByaW1pdGl2ZVZhbHVl
KSAvLyBpbml0aWFsIHwgbm9uZQotICAgICAgICAgICAgcmV0dXJuIGlkID09IENTU1Byb3BlcnR5
VGV4dFNoYWRvdyA/IHN0YXRlLnN0eWxlKCktPnNldFRleHRTaGFkb3cobnVsbHB0cikgOiBzdGF0
ZS5zdHlsZSgpLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Ci0KLSAgICAgICAgaWYgKCFpczxDU1NW
YWx1ZUxpc3Q+KCp2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYm9vbCBp
c0ZpcnN0RW50cnkgPSB0cnVlOwotICAgICAgICBmb3IgKGF1dG8mIGN1cnJlbnRWYWx1ZSA6IGRv
d25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkgewotICAgICAgICAgICAgaWYgKCFpczxDU1NT
aGFkb3dWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGF1dG8mIGl0ZW0gPSBkb3duY2FzdDxDU1NTaGFkb3dWYWx1ZT4oY3Vy
cmVudFZhbHVlLmdldCgpKTsKLSAgICAgICAgICAgIGludCB4ID0gaXRlbS54LT5jb21wdXRlTGVu
Z3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKLSAgICAgICAgICAg
IGludCB5ID0gaXRlbS55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSgpKTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS5ibHVyID8gaXRlbS5i
bHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgp
KSA6IDA7Ci0gICAgICAgICAgICBpbnQgc3ByZWFkID0gaXRlbS5zcHJlYWQgPyBpdGVtLnNwcmVh
ZC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSkg
OiAwOwotICAgICAgICAgICAgU2hhZG93U3R5bGUgc2hhZG93U3R5bGUgPSBpdGVtLnN0eWxlICYm
IGl0ZW0uc3R5bGUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluc2V0ID8gSW5zZXQgOiBOb3Jt
YWw7Ci0gICAgICAgICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAgICAgIGlmIChpdGVtLmNvbG9y
KQotICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS5j
b2xvci5nZXQoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS5zdHlsZSgpKQotICAgICAg
ICAgICAgICAgIGNvbG9yID0gc3RhdGUuc3R5bGUoKS0+Y29sb3IoKTsKLQotICAgICAgICAgICAg
YXV0byBzaGFkb3dEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxTaGFkb3dEYXRhPihJbnRQb2ludCh4
LCB5KSwgYmx1ciwgc3ByZWFkLCBzaGFkb3dTdHlsZSwgaWQgPT0gQ1NTUHJvcGVydHlXZWJraXRC
b3hTaGFkb3csIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50KTsK
LSAgICAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cpCi0gICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhXVEY6Om1vdmUoc2hhZG93RGF0YSks
ICFpc0ZpcnN0RW50cnkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZp
cnN0IGVudHJ5Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0Qm94U2hhZG93KFdURjo6bW92ZShzaGFkb3dEYXRhKSwgIWlzRmlyc3RFbnRyeSk7IC8v
IGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKLQotICAgICAg
ICAgICAgaXNGaXJzdEVudHJ5ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewogICAgICAgICBI
QU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChib3hSZWZsZWN0LCBCb3hSZWZsZWN0KQogICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUpIHsKQEAgLTI5NzcsNiArMjkzNyw3IEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFN0eWxlOgogICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXJUb3BXaWR0aDoKICAgICBjYXNlIENTU1Byb3BlcnR5Qm90dG9tOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3hTaGFkb3c6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJveFNpemluZzoKICAg
ICBjYXNlIENTU1Byb3BlcnR5Q2FwdGlvblNpZGU6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUNsZWFy
OgpAQCAtMzA0Niw2ICszMDA3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5
VGV4dEluZGVudDoKICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJmbG93OgogICAgIGNhc2Ug
Q1NTUHJvcGVydHlUZXh0UmVuZGVyaW5nOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0U2hhZG93
OgogICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VHJhbnNmb3JtOgogICAgIGNhc2UgQ1NTUHJvcGVy
dHlUb3A6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpOgpAQCAtMzA4MSw2ICszMDQz
LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94T3JkaW5hbEdy
b3VwOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hPcmllbnQ6CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEJveFBhY2s6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRv
dzoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sb3JDb3JyZWN0aW9uOgogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRDb2x1bW5BeGlzOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRD
b2x1bW5CcmVha0FmdGVyOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9w
LnBsIGIvU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsCmluZGV4IGIzN2I5NDkxMDE2YjNl
OGU1NmE2NjI1MWIxOGVkOTg0OGI4ZjU2NGYuLmQyNzRhOWNiZDg4MDkyMTk4YjdmYTA2OGNiOWQx
NTk4ZTEwNzYyNzggMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwKQEAgLTQxNiwxMyArNDE2LDE2IEBA
IGZvcmVhY2ggbXkgJG5hbWUgKEBuYW1lcykgewogICAjIFNraXAgcHJvcGVydGllcyBub3QgdXNp
bmcgdGhlIG5ldyBzdHlsZSBidWlsZGVyIHlldC4KICAgbmV4dCB1bmxlc3MgZXhpc3RzKCRwcm9w
ZXJ0aWVzVXNpbmdOZXdTdHlsZUJ1aWxkZXJ7JG5hbWV9KTsKIAorICBteSAkc2NvcGUgPSAkcHJv
cGVydGllc1VzaW5nTmV3U3R5bGVCdWlsZGVyeyRuYW1lfXsiQ3VzdG9tIn0gZXEgIkFsbCIgPyAi
U3R5bGVCdWlsZGVyQ3VzdG9tIiA6ICJTdHlsZUJ1aWxkZXJGdW5jdGlvbnMiOworICBteSAkdmFs
dWVTY29wZSA9ICRwcm9wZXJ0aWVzVXNpbmdOZXdTdHlsZUJ1aWxkZXJ7JG5hbWV9eyJDdXN0b20i
fSBlcSAiVmFsdWUiID8gIlN0eWxlQnVpbGRlckN1c3RvbSIgOiAkc2NvcGU7CisKICAgcHJpbnQg
U1RZTEVCVUlMREVSICIgICAgY2FzZSBDU1NQcm9wZXJ0eSIgLiAkbmFtZVRvSWR7JG5hbWV9IC4g
IjpcbiI7CiAgIHByaW50IFNUWUxFQlVJTERFUiAiICAgICAgICBpZiAoaXNJbml0aWFsKVxuIjsK
LSAgcHJpbnQgU1RZTEVCVUlMREVSICIgICAgICAgICAgICBTdHlsZUJ1aWxkZXJGdW5jdGlvbnM6
OmFwcGx5SW5pdGlhbCIgLiAkbmFtZVRvSWR7JG5hbWV9IC4gIihzdHlsZVJlc29sdmVyKTtcbiI7
CisgIHByaW50IFNUWUxFQlVJTERFUiAiICAgICAgICAgICAgIiAuICRzY29wZSAuICI6OmFwcGx5
SW5pdGlhbCIgLiAkbmFtZVRvSWR7JG5hbWV9IC4gIihzdHlsZVJlc29sdmVyKTtcbiI7CiAgIHBy
aW50IFNUWUxFQlVJTERFUiAiICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpXG4iOwotICBwcmlu
dCBTVFlMRUJVSUxERVIgIiAgICAgICAgICAgIFN0eWxlQnVpbGRlckZ1bmN0aW9uczo6YXBwbHlJ
bmhlcml0IiAuICRuYW1lVG9JZHskbmFtZX0gLiAiKHN0eWxlUmVzb2x2ZXIpO1xuIjsKKyAgcHJp
bnQgU1RZTEVCVUlMREVSICIgICAgICAgICAgICAiIC4gJHNjb3BlIC4gIjo6YXBwbHlJbmhlcml0
IiAuICRuYW1lVG9JZHskbmFtZX0gLiAiKHN0eWxlUmVzb2x2ZXIpO1xuIjsKICAgcHJpbnQgU1RZ
TEVCVUlMREVSICIgICAgICAgIGVsc2VcbiI7Ci0gIHByaW50IFNUWUxFQlVJTERFUiAiICAgICAg
ICAgICAgU3R5bGVCdWlsZGVyRnVuY3Rpb25zOjphcHBseVZhbHVlIiAuICRuYW1lVG9JZHskbmFt
ZX0gLiAiKHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTtcbiI7CisgIHByaW50IFNUWUxFQlVJTERFUiAi
ICAgICAgICAgICAgIiAuICR2YWx1ZVNjb3BlIC4gIjo6YXBwbHlWYWx1ZSIgLiAkbmFtZVRvSWR7
JG5hbWV9IC4gIihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7XG4iOwogICBwcmludCBTVFlMRUJVSUxE
RVIgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCmluZGV4IDk3OGI3ZTQ0NGQyNDYyNjg3YTlkZGJmMGFk
M2Q5Zjk0NDczZDEzZTIuLmE4YzhjYjEwYmJiNjE0YzRkODVkMDA5YjQ3YzZmN2JhZDU3Mzg5ZmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCkBAIC0x
MjksNiArMTI5LDcgQEAgY2xhc3MgUmVuZGVyU3R5bGU6IHB1YmxpYyBSZWZDb3VudGVkPFJlbmRl
clN0eWxlPiB7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlclNWR1Jlc291cmNlOyAvLyBGSVhNRTog
TmVlZHMgdG8gYWx0ZXIgdGhlIHZpc2l0ZWQgc3RhdGUgYnkgaGFuZC4gU2hvdWxkIGNsZWFuIHRo
ZSBTVkcgY29kZSB1cCBhbmQgbW92ZSBpdCBpbnRvIFJlbmRlclN0eWxlIHBlcmhhcHMuCiAgICAg
ZnJpZW5kIGNsYXNzIFJlbmRlclRyZWVBc1RleHQ7IC8vIEZJWE1FOiBPbmx5IG5lZWRlZCBzbyB0
aGUgcmVuZGVyIHRyZWUgY2FuIGtlZXAgbHlpbmcgYW5kIGR1bXAgdGhlIHdyb25nIGNvbG9ycy4g
IFJlYmFzZWxpbmluZyB3b3VsZCBhbGxvdyB0aGlzIHRvIGJlIHlhbmtlZC4KICAgICBmcmllbmQg
Y2xhc3MgU3R5bGVSZXNvbHZlcjsgLy8gU2V0cyBtZW1iZXJzIGRpcmVjdGx5LgorICAgIGZyaWVu
ZCBjbGFzcyBTdHlsZUJ1aWxkZXJDdXN0b207IC8vIFNldHMgbWVtYmVycyBkaXJlY3RseS4KIAog
cHVibGljOgogICAgIHN0cnVjdCBOb25Jbmhlcml0ZWRGbGFncyB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242345</attachid>
            <date>2014-12-01 14:39:05 -0800</date>
            <delta_ts>2014-12-01 18:16:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138938-20141201143935.patch</filename>
            <type>text/plain</type>
            <size>12849</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2NTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjBhNzgwN2M5ZGVjYWM5
NjQyMGU5NzIyZWRiZmY2ZTIzNzExNmJhNC4uZmQzNWEwMDgxYWViY2ZmMmEyMzA5YTk3OGNhZGVj
YmIxMGNkZGZlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE0LTEyLTAxICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSAndGV4dC1zaGFkb3cn
IC8gJ2JveC1zaGFkb3cnIC8gJy13ZWJraXQtYm94LXNoYWRvdycgdG8gdGhlIG5ldyBTdHlsZUJ1
aWxkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
ODkzOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1v
dmUgJ3RleHQtc2hhZG93JyAvICdib3gtc2hhZG93JyAvICctd2Via2l0LWJveC1zaGFkb3cnIENT
UyBwcm9wZXJ0aWVzCisgICAgICAgIGZyb20gU3R5bGVSZXNvbHZlciB0byB0aGUgbmV3IFN0eWxl
QnVpbGRlciBieSB1c2luZyBjdXN0b20gY29kZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5v
IGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGNzcy9DU1NQcm9wZXJ0eU5hbWVzLmluOgor
ICAgICAgICAqIGNzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlUZXh0T3JCb3hTaGFkb3dWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFRleHRTaGFkb3cpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRUZXh0U2hhZG93
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVRleHRT
aGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRp
YWxCb3hTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaGVyaXRCb3hTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseVZhbHVlQm94U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlJbml0aWFsV2Via2l0Qm94U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0V2Via2l0Qm94U2hhZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdEJveFNoYWRvdyk6
CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eSk6CisKIDIwMTQtMTItMDEgIEpvc2VwaCBQZWNvcmFy
byAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBET01FeGNl
cHRpb25zIGRvIG5vdCBzaG93IHRoZSBlcnJvciBtZXNzYWdlIHN0cmluZyBpbiBQYXVzZSBSZWFz
b24gc2VjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFt
ZXMuaW4gYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgppbmRleCA4MmUw
ODZhMTdkNTg5ZTMzNjE4MTcyYzlmOTA2MDllNjY4NjA4NDcwLi5iNTcwZDQ3MTk1Y2NmN2ZlMWVl
ZGU1M2JjNjRiN2YxZTExNjVjODc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UHJvcGVydHlOYW1lcy5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1l
cy5pbgpAQCAtMTUxLDcgKzE1MSw3IEBAIGJvcmRlci10b3Atc3R5bGUgW1R5cGVOYW1lPUVCb3Jk
ZXJTdHlsZSwgSW5pdGlhbD1pbml0aWFsQm9yZGVyU3R5bGVdCiBib3JkZXItdG9wLXdpZHRoIFtJ
bml0aWFsPWluaXRpYWxCb3JkZXJXaWR0aCwgQ29udmVydGVyPUxpbmVXaWR0aDxmbG9hdD5dCiBi
b3JkZXItd2lkdGggW0xlZ2FjeVN0eWxlQnVpbGRlcl0KIGJvdHRvbSBbSW5pdGlhbD1pbml0aWFs
T2Zmc2V0LCBDb252ZXJ0ZXI9TGVuZ3RoT3JBdXRvXQotYm94LXNoYWRvdyBbTGVnYWN5U3R5bGVC
dWlsZGVyXQorYm94LXNoYWRvdyBbQ3VzdG9tPUFsbF0KIGJveC1zaXppbmcKIC8vIC13ZWJraXQt
Ym94LXNpemluZyB3b3JrZWQgaW4gU2FmYXJpIDQgYW5kIGVhcmxpZXIuCiAtd2Via2l0LWJveC1z
aXppbmcgPSBib3gtc2l6aW5nCkBAIC0yNDIsNyArMjQyLDcgQEAgdGV4dC1vdmVybGluZS1jb2xv
ciBbTGVnYWN5U3R5bGVCdWlsZGVyXQogdGV4dC1vdmVybGluZS1tb2RlIFtMZWdhY3lTdHlsZUJ1
aWxkZXJdCiB0ZXh0LW92ZXJsaW5lLXN0eWxlIFtMZWdhY3lTdHlsZUJ1aWxkZXJdCiB0ZXh0LW92
ZXJsaW5lLXdpZHRoIFtMZWdhY3lTdHlsZUJ1aWxkZXJdCi10ZXh0LXNoYWRvdyBbSW5oZXJpdGVk
LCBMZWdhY3lTdHlsZUJ1aWxkZXJdCit0ZXh0LXNoYWRvdyBbSW5oZXJpdGVkLCBDdXN0b209QWxs
XQogdGV4dC10cmFuc2Zvcm0gW0luaGVyaXRlZF0KIC1lcHViLXRleHQtdHJhbnNmb3JtID0gdGV4
dC10cmFuc2Zvcm0KIHRleHQtdW5kZXJsaW5lIFtMZWdhY3lTdHlsZUJ1aWxkZXJdCkBAIC0zMjYs
NyArMzI2LDcgQEAgYWx0IFtMZWdhY3lTdHlsZUJ1aWxkZXJdCiAvLyAtd2Via2l0LWJveC1zaGFk
b3cgZGlmZmVycyBmcm9tIGJveC1zaGFkb3cgaW4gaXRzIHRyZWF0ZW1lbnQgb2YgYmx1ciByYWRp
aSA+IDhweC4KIC8vIExldCAtd2Via2l0LWJveC1zaGFkb3cgYmx1ciByYWRpdXMgYmUgd19yIGFu
ZCBib3gtc2hhZG93IGJsdXIgcmFkaXVzIGJlIGJfci4gRm9yCiAvLyB3X3IgPiA4cHgsIGJfciA9
IDggKyA0ICogc3FydCgod19yIC0gOCkgLyAyKS4KLS13ZWJraXQtYm94LXNoYWRvdyBbTGVnYWN5
U3R5bGVCdWlsZGVyXQorLXdlYmtpdC1ib3gtc2hhZG93IFtDdXN0b209QWxsXQogLXdlYmtpdC1j
b2xvci1jb3JyZWN0aW9uIFtJbmhlcml0ZWQsIFR5cGVOYW1lPUNvbG9yU3BhY2UsIE5hbWVGb3JN
ZXRob2RzPUNvbG9yU3BhY2VdCiAtd2Via2l0LWNvbHVtbi1heGlzIFtUeXBlTmFtZT1Db2x1bW5B
eGlzXQogLXdlYmtpdC1jb2x1bW4tYnJlYWstYWZ0ZXIgW1R5cGVOYW1lPUVQYWdlQnJlYWssIElu
aXRpYWw9aW5pdGlhbFBhZ2VCcmVha10KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZUJ1aWxkZXJDdXN0b20uaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDdXN0
b20uaAppbmRleCA1ZDZmOGEyZGVlMDE1NDNjY2ExZDFmODZlNWUyMTViZWRhNjRlOTZhLi4zZmI4
YWM5NzI5ZDQ4NmY4ZjUxZmVjOTEwMTI1YzRiN2YwMWQ3NDRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlQnVpbGRlckN1c3RvbS5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKICNpbmNs
dWRlICJDU1NJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTU2hhZG93VmFsdWUuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkxvY2FsZVRvU2NyaXB0TWFwcGluZy5oIgogI2luY2x1
ZGUgIlJlY3QuaCIKQEAgLTEwNSw2ICsxMDYsMTYgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWVXZWJraXRKdXN0aWZ5U2VsZihTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsK
ICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlV2Via2l0UGVyc3BlY3RpdmUoU3R5bGVSZXNvbHZl
ciYsIENTU1ZhbHVlJik7CiAKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxUZXh0U2hhZG93
KFN0eWxlUmVzb2x2ZXImKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRUZXh0U2hhZG93
KFN0eWxlUmVzb2x2ZXImKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlVGV4dFNoYWRvdyhT
dHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxC
b3hTaGFkb3coU3R5bGVSZXNvbHZlciYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdEJv
eFNoYWRvdyhTdHlsZVJlc29sdmVyJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZUJveFNo
YWRvdyhTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aXRpYWxXZWJraXRCb3hTaGFkb3coU3R5bGVSZXNvbHZlciYpOworICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5oZXJpdFdlYmtpdEJveFNoYWRvdyhTdHlsZVJlc29sdmVyJik7CisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZVdlYmtpdEJveFNoYWRvdyhTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsK
KwogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCByZXNldEVmZmVjdGl2ZVpvb20oU3R5bGVSZXNv
bHZlciYpOwogICAgIHN0YXRpYyBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNzc3RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoU3R5bGVSZXNvbHZlciYpOwpAQCAtMTEz
LDYgKzEyNCw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIExlbmd0aCBtbUxlbmd0aChkb3VibGUg
bW0pOwogICAgIHN0YXRpYyBMZW5ndGggaW5jaExlbmd0aChkb3VibGUgaW5jaCk7CiAgICAgc3Rh
dGljIGJvb2wgZ2V0UGFnZVNpemVGcm9tTmFtZShDU1NQcmltaXRpdmVWYWx1ZSogcGFnZVNpemVO
YW1lLCBDU1NQcmltaXRpdmVWYWx1ZSogcGFnZU9yaWVudGF0aW9uLCBMZW5ndGgmIHdpZHRoLCBM
ZW5ndGgmIGhlaWdodCk7CisKKyAgICB0ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBpZD4KKyAgICBz
dGF0aWMgdm9pZCBhcHBseVRleHRPckJveFNoYWRvd1ZhbHVlKFN0eWxlUmVzb2x2ZXImLCBDU1NW
YWx1ZSYpOwogfTsKIAogaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
V2Via2l0TWFycXVlZUluY3JlbWVudChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSYgdmFsdWUpCkBAIC03ODcsNiArODAxLDg2IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdFBlcnNwZWN0aXZlKFN0eWxlUmVzb2x2ZXImIHN0eWxl
CiAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0UGVyc3BlY3RpdmUocGVyc3BlY3Rp
dmVWYWx1ZSk7CiB9CiAKK3RlbXBsYXRlIDxDU1NQcm9wZXJ0eUlEIGlkPgoraW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVRleHRPckJveFNoYWRvd1ZhbHVlKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK3sKKyAgICBpZiAoaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKSkgeworICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KHZhbHVlKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKTsKKyAgICAgICAg
aWYgKGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdykKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhudWxscHRyKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIGlzRmlyc3RFbnRyeSA9IHRydWU7CisgICAg
Zm9yIChhdXRvJiBpdGVtIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKKyAgICAg
ICAgYXV0byYgc2hhZG93VmFsdWUgPSBkb3duY2FzdDxDU1NTaGFkb3dWYWx1ZT4oaXRlbS5nZXQo
KSk7CisgICAgICAgIGF1dG8gY29udmVyc2lvbkRhdGEgPSBzdHlsZVJlc29sdmVyLnN0YXRlKCku
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOworICAgICAgICBpbnQgeCA9IHNoYWRvd1ZhbHVl
LngtPmNvbXB1dGVMZW5ndGg8aW50Pihjb252ZXJzaW9uRGF0YSk7CisgICAgICAgIGludCB5ID0g
c2hhZG93VmFsdWUueS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KGNvbnZlcnNpb25EYXRhKTsKKyAgICAg
ICAgaW50IGJsdXIgPSBzaGFkb3dWYWx1ZS5ibHVyID8gc2hhZG93VmFsdWUuYmx1ci0+Y29tcHV0
ZUxlbmd0aDxpbnQ+KGNvbnZlcnNpb25EYXRhKSA6IDA7CisgICAgICAgIGludCBzcHJlYWQgPSBz
aGFkb3dWYWx1ZS5zcHJlYWQgPyBzaGFkb3dWYWx1ZS5zcHJlYWQtPmNvbXB1dGVMZW5ndGg8aW50
Pihjb252ZXJzaW9uRGF0YSkgOiAwOworICAgICAgICBTaGFkb3dTdHlsZSBzaGFkb3dTdHlsZSA9
IHNoYWRvd1ZhbHVlLnN0eWxlICYmIHNoYWRvd1ZhbHVlLnN0eWxlLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOworICAgICAgICBDb2xvciBjb2xvcjsKKyAg
ICAgICAgaWYgKHNoYWRvd1ZhbHVlLmNvbG9yKQorICAgICAgICAgICAgY29sb3IgPSBzdHlsZVJl
c29sdmVyLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHNoYWRvd1ZhbHVlLmNvbG9yLmdldCgpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29sb3IgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PmNvbG9yKCk7CisgICAgICAgIGF1dG8gc2hhZG93RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8U2hh
ZG93RGF0YT4oSW50UG9pbnQoeCwgeSksIGJsdXIsIHNwcmVhZCwgc2hhZG93U3R5bGUsIGlkID09
IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENv
bG9yOjp0cmFuc3BhcmVudCk7CisgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFk
b3cpCisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRTaGFkb3coV1RG
Ojptb3ZlKHNoYWRvd0RhdGEpLCAhaXNGaXJzdEVudHJ5KTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlm
IHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQorICAgICAgICBlbHNlCisgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEJveFNoYWRvdyhXVEY6Om1vdmUoc2hhZG93RGF0YSks
ICFpc0ZpcnN0RW50cnkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZp
cnN0IGVudHJ5CisgICAgICAgIGlzRmlyc3RFbnRyeSA9IGZhbHNlOworICAgIH0KK30KKworaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxUZXh0U2hhZG93KFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCit7CisgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
ZXRUZXh0U2hhZG93KG51bGxwdHIpOworfQorCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5oZXJpdFRleHRTaGFkb3coU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikK
K3sKKyAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRTaGFkb3coc3R5bGVSZXNvbHZl
ci5wYXJlbnRTdHlsZSgpLT50ZXh0U2hhZG93KCkgPyBzdGQ6Om1ha2VfdW5pcXVlPFNoYWRvd0Rh
dGE+KCpzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPnRleHRTaGFkb3coKSkgOiBudWxscHRy
KTsKK30KKworaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlVGV4dFNo
YWRvdyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCit7Cisg
ICAgYXBwbHlUZXh0T3JCb3hTaGFkb3dWYWx1ZTxDU1NQcm9wZXJ0eVRleHRTaGFkb3c+KHN0eWxl
UmVzb2x2ZXIsIHZhbHVlKTsKK30KKworaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaXRpYWxCb3hTaGFkb3coU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK3sKKyAg
ICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEJveFNoYWRvdyhudWxscHRyKTsKK30KKworaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRCb3hTaGFkb3coU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK3sKKyAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNl
dEJveFNoYWRvdyhzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmJveFNoYWRvdygpID8gc3Rk
OjptYWtlX3VuaXF1ZTxTaGFkb3dEYXRhPigqc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5i
b3hTaGFkb3coKSkgOiBudWxscHRyKTsKK30KKworaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseVZhbHVlQm94U2hhZG93KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlJiB2YWx1ZSkKK3sKKyAgICBhcHBseVRleHRPckJveFNoYWRvd1ZhbHVlPENTU1Byb3Bl
cnR5Qm94U2hhZG93PihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7Cit9CisKK2lubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsV2Via2l0Qm94U2hhZG93KFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIpCit7CisgICAgYXBwbHlJbml0aWFsQm94U2hhZG93KHN0eWxlUmVz
b2x2ZXIpOworfQorCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJp
dFdlYmtpdEJveFNoYWRvdyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoreworICAgIGFw
cGx5SW5oZXJpdEJveFNoYWRvdyhzdHlsZVJlc29sdmVyKTsKK30KKworaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0Qm94U2hhZG93KFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK3sKKyAgICBhcHBseVRleHRPckJveFNo
YWRvd1ZhbHVlPENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93PihzdHlsZVJlc29sdmVyLCB2YWx1
ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFN0eWxlQnVpbGRl
ckN1c3RvbV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggNjRkNzRjZWY5
YjIyMzQxZTc0MTA0MGQwZTQ5MzRlZWJjYzlmMDMwYi4uOTY0NzQzYmY1NGZjMDAwN2Y0NWEwMGY4
NjU2NTc2ZmYzNDU3ZGMwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAt
MjM3MSw0NiArMjM3MSw2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgLy8g
Q1NTMyBQcm9wZXJ0aWVzCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRTaGFkb3c6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJveFNoYWRvdzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94U2hh
ZG93OiB7Ci0gICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIGlmIChpZCA9PSBD
U1NQcm9wZXJ0eVRleHRTaGFkb3cpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxl
KCktPnNldFRleHRTaGFkb3coc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dFNoYWRvdygpID8gc3Rk
OjptYWtlX3VuaXF1ZTxTaGFkb3dEYXRhPigqc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dFNoYWRv
dygpKSA6IG51bGxwdHIpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlKCktPnNldEJv
eFNoYWRvdyhzdGF0ZS5wYXJlbnRTdHlsZSgpLT5ib3hTaGFkb3coKSA/IHN0ZDo6bWFrZV91bmlx
dWU8U2hhZG93RGF0YT4oKnN0YXRlLnBhcmVudFN0eWxlKCktPmJveFNoYWRvdygpKSA6IG51bGxw
dHIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpc0luaXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUp
IC8vIGluaXRpYWwgfCBub25lCi0gICAgICAgICAgICByZXR1cm4gaWQgPT0gQ1NTUHJvcGVydHlU
ZXh0U2hhZG93ID8gc3RhdGUuc3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhudWxscHRyKSA6IHN0YXRl
LnN0eWxlKCktPnNldEJveFNoYWRvdyhudWxscHRyKTsKLQotICAgICAgICBpZiAoIWlzPENTU1Zh
bHVlTGlzdD4oKnZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBib29sIGlz
Rmlyc3RFbnRyeSA9IHRydWU7Ci0gICAgICAgIGZvciAoYXV0byYgY3VycmVudFZhbHVlIDogZG93
bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzPENTU1No
YWRvd1ZhbHVlPihjdXJyZW50VmFsdWUuZ2V0KCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgYXV0byYgaXRlbSA9IGRvd25jYXN0PENTU1NoYWRvd1ZhbHVlPihjdXJy
ZW50VmFsdWUuZ2V0KCkpOwotICAgICAgICAgICAgaW50IHggPSBpdGVtLngtPmNvbXB1dGVMZW5n
dGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwotICAgICAgICAgICAg
aW50IHkgPSBpdGVtLnktPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCkpOwotICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLmJsdXIgPyBpdGVtLmJs
dXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkp
IDogMDsKLSAgICAgICAgICAgIGludCBzcHJlYWQgPSBpdGVtLnNwcmVhZCA/IGl0ZW0uc3ByZWFk
LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSA6
IDA7Ci0gICAgICAgICAgICBTaGFkb3dTdHlsZSBzaGFkb3dTdHlsZSA9IGl0ZW0uc3R5bGUgJiYg
aXRlbS5zdHlsZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlSW5zZXQgPyBJbnNldCA6IE5vcm1h
bDsKLSAgICAgICAgICAgIENvbG9yIGNvbG9yOwotICAgICAgICAgICAgaWYgKGl0ZW0uY29sb3Ip
Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLmNv
bG9yLmdldCgpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlLnN0eWxlKCkpCi0gICAgICAg
ICAgICAgICAgY29sb3IgPSBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpOwotCi0gICAgICAgICAgICBh
dXRvIHNoYWRvd0RhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFNoYWRvd0RhdGE+KEludFBvaW50KHgs
IHkpLCBibHVyLCBzcHJlYWQsIHNoYWRvd1N0eWxlLCBpZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJv
eFNoYWRvdywgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJhbnNwYXJlbnQpOwot
ICAgICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0U2hhZG93KFdURjo6bW92ZShzaGFkb3dEYXRhKSwg
IWlzRmlyc3RFbnRyeSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmly
c3QgZW50cnkKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRCb3hTaGFkb3coV1RGOjptb3ZlKHNoYWRvd0RhdGEpLCAhaXNGaXJzdEVudHJ5KTsgLy8g
YWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQotCi0gICAgICAg
ICAgICBpc0ZpcnN0RW50cnkgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0g
ICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlTcmM6IC8vIE9ubHkgdXNlZCBpbiBAZm9udC1mYWNl
IHJ1bGVzLgogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVVuaWNvZGVSYW5n
ZTogLy8gT25seSB1c2VkIGluIEBmb250LWZhY2UgcnVsZXMuCkBAIC0yODI5LDYgKzI3ODksNyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BTdHlsZToKICAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGg6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvdHRv
bToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm94U2hhZG93OgogICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3hTaXppbmc6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUNhcHRpb25TaWRlOgogICAgIGNhc2UgQ1NT
UHJvcGVydHlDbGVhcjoKQEAgLTI4OTgsNiArMjg1OSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVRleHRJbmRlbnQ6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVyZmxv
dzoKICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFJlbmRlcmluZzoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5VGV4dFNoYWRvdzoKICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFRyYW5zZm9ybToKICAgICBj
YXNlIENTU1Byb3BlcnR5VG9wOgogICAgIGNhc2UgQ1NTUHJvcGVydHlVbmljb2RlQmlkaToKQEAg
LTI5MzMsNiArMjg5NSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEJveE9yZGluYWxHcm91cDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94T3JpZW50Ogog
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hQYWNrOgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCb3hTaGFkb3c6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbG9yQ29ycmVjdGlvbjoKICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Q29sdW1uQXhpczoK
</data>

          </attachment>
      

    </bug>

</bugzilla>