<?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>147866</bug_id>
          
          <creation_ts>2015-08-10 21:23:25 -0700</creation_ts>
          <short_desc>Implement IntegerHasher</short_desc>
          <delta_ts>2018-11-06 03:43:02 -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>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>fred.wang</cc>
    
    <cc>jonlee</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1116476</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-08-10 21:23:25 -0700</bug_when>
    <thetext>[font-features] Addressing post-commit review of r188088</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116477</commentid>
    <comment_count>1</comment_count>
      <attachid>258698</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-08-10 21:26:19 -0700</bug_when>
    <thetext>Created attachment 258698
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116493</commentid>
    <comment_count>2</comment_count>
      <attachid>258698</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-08-10 22:49:54 -0700</bug_when>
    <thetext>Comment on attachment 258698
Patch

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

Side questions:

1: Why isn’t m_tag in FontFeature marked const?

2: Generally speaking, FontFeature seems to be a custom-written pair; is there a way to use more of std::pair in its implementation?

3: Why so many includes in this header? I don’t think we need to include anything other than Vector.h and AtomicString.h.

&gt; Source/WebCore/platform/graphics/FontFeatureSettings.cpp:79
&gt; +    static_assert(sizeof(unsigned) == sizeof(UChar) * 2, &quot;Must be able to use StringHasher::addCharacters()&quot;);
&gt; +    for (size_t i = 0; i &lt; size(); ++i) {
&gt; +        unsigned featureHash = at(i).hash();
&gt; +        UChar lower = featureHash;
&gt; +        UChar upper = featureHash &gt;&gt; (sizeof(UChar) * 8);
&gt; +        hasher.addCharacters(upper, lower);
&gt; +    }

I’d write this:

    for (auto&amp; feature : m_list) {
        unsigned hash = feature.hash();
        hasher.addCharactersAssumingAligned(hash, hash &gt;&gt; 16);
    }

I don’t think we should try to be abstract about how many bits there are in a UChar. And there&apos;s no reason to compile in the code to handle unaligned hashing. If you want to make it even cleaner, we could write something called IntegerHasher, like this:

    class IntegerHasher {
    public:
        void add(unsigned integer) { m_underlyingHasher.addCharactersAssumingAligned(integer, integer &gt;&gt; 16); }
        unsigned hash() const { return m_underlyingHasher.hash(); }
    private:
        StringHasher m_underlyingHasher;
    }

Then:

    for (auto&amp; feature : m_list)
        hasher.add(feature.hash());

Finally, I’m not really sure it’s good to be hashing hashes so excessively. Maybe use the hashes of the tag strings, but for the rest it seems excessive to hash just so we can hash again. Maybe like this:

    for (auto&amp; feature : m_list) {
        hasher.add(feature.tag().hash());
        hasher.add(feature.value());
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118275</commentid>
    <comment_count>3</comment_count>
      <attachid>259196</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-08-17 15:55:21 -0700</bug_when>
    <thetext>Created attachment 259196
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118278</commentid>
    <comment_count>4</comment_count>
      <attachid>259196</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-08-17 15:57:26 -0700</bug_when>
    <thetext>Comment on attachment 259196
Patch

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

&gt; Source/WTF/wtf/Hasher.h:295
&gt; +

No need for a newline here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118321</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-08-17 16:59:13 -0700</bug_when>
    <thetext>Committed r188557: &lt;http://trac.webkit.org/changeset/188557&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475495</commentid>
    <comment_count>6</comment_count>
      <attachid>259196</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2018-11-06 03:43:02 -0800</bug_when>
    <thetext>Comment on attachment 259196
Patch

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

&gt; Source/WebCore/platform/graphics/FontFeatureSettings.cpp:67
&gt; +    IntegerHasher hasher;

This bug is very old but probably we needed to include &lt;wtf/Hasher.h&gt; in order to use IntegerHash here. I just landed a commit adding this header.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258698</attachid>
            <date>2015-08-10 21:26:19 -0700</date>
            <delta_ts>2015-08-10 22:49:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147866-20150810212604.patch</filename>
            <type>text/plain</type>
            <size>1900</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4MjQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzBmZmQ2OGQxZTIzOTkx
YjRlODhhMzhiNjM5MWVmNWY2NmEyNGNjNy4uYWU1MTYwMmNhNzlkMzQyOGExZmU5MTAxOWY0ZjRi
MzY2YzIyNGMzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE1LTA4LTEwICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW2ZvbnQtZmVh
dHVyZXNdIEFkZHJlc3NpbmcgcG9zdC1jb21taXQgcmV2aWV3IG9mIHIxODgwODgKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Nzg2NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluc3RlYWQgb2YgaGFzaGlu
ZyBoYXNoZXMgb3ZlciBhbmQgb3ZlciBhZ2Fpbiwgd2UgY2FuCisgICAgICAgIHVzZSBTdHJpbmdI
YXNoZXI6OmFkZENoYXJhY3RlcnMoKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0
aGVyZSBpcyBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250RmVhdHVyZVNldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGZWF0dXJl
U2V0dGluZ3M6Omhhc2gpOgorCiAyMDE1LTA4LTEwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVpbGQgVGVzdFdlYktpdEFQSSB3aXRoIENN
YWtlIG9uIFdpbmRvd3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRGZWF0dXJlU2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udEZlYXR1cmVTZXR0aW5ncy5jcHAKaW5kZXggOWUxOTQ5ZmM0NGFjNDc0OTY5ODRk
YjdjMDhhN2YyNGY0OTA4YzE4Ni4uNGU1YTkzMTk4OGQyZmFiYjIxNDkwODIyNTU5MjFiMjFhNTRk
NDk2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZl
YXR1cmVTZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udEZlYXR1cmVTZXR0aW5ncy5jcHAKQEAgLTY5LDEwICs2OSwxNSBAQCB2b2lkIEZvbnRGZWF0
dXJlU2V0dGluZ3M6Omluc2VydChGb250RmVhdHVyZSYmIGZlYXR1cmUpCiAKIHVuc2lnbmVkIEZv
bnRGZWF0dXJlU2V0dGluZ3M6Omhhc2goKSBjb25zdAogewotICAgIHVuc2lnbmVkIHJlc3VsdCA9
IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKLSAgICAgICAgcmVz
dWx0ID0gV1RGOjpwYWlySW50SGFzaChyZXN1bHQsIGF0KGkpLmhhc2goKSk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICBTdHJpbmdIYXNoZXIgaGFzaGVyOworICAgIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKHVuc2lnbmVkKSA9PSBzaXplb2YoVUNoYXIpICogMiwgIk11c3QgYmUgYWJsZSB0byB1c2Ug
U3RyaW5nSGFzaGVyOjphZGRDaGFyYWN0ZXJzKCkiKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemUoKTsgKytpKSB7CisgICAgICAgIHVuc2lnbmVkIGZlYXR1cmVIYXNoID0gYXQoaSku
aGFzaCgpOworICAgICAgICBVQ2hhciBsb3dlciA9IGZlYXR1cmVIYXNoOworICAgICAgICBVQ2hh
ciB1cHBlciA9IGZlYXR1cmVIYXNoID4+IChzaXplb2YoVUNoYXIpICogOCk7CisgICAgICAgIGhh
c2hlci5hZGRDaGFyYWN0ZXJzKHVwcGVyLCBsb3dlcik7CisgICAgfQorICAgIHJldHVybiBoYXNo
ZXIuaGFzaCgpOwogfQogCiB9Cg==
</data>
<flag name="review"
          id="283880"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259196</attachid>
            <date>2015-08-17 15:55:21 -0700</date>
            <delta_ts>2015-08-17 15:57:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147866-20150817155520.patch</filename>
            <type>text/plain</type>
            <size>40744</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4NTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQ1ODAwMWJhNDM5NzJmYzg2Yzk2ZDU2
N2IzMjM2ZGJlYTRiZjMzOTYuLjc3Njc5OWZlZjc3YWFjYWY3NjZiZjdmYzdlMmZlMzZkYzMyMDEy
MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTUtMDgtMTcgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgSW50ZWdlckhhc2hlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3ODY2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIFN0
cmluZ0hhc2hlci5oIHRvIEhhc2hlci5oLCBhbmQgaW5jbHVkZSBhbiBJbnRlZ2VySGFzaGVyIGNs
YXNzLgorCisgICAgICAgICogV1RGLnZjeHByb2ovV1RGLnZjeHByb2o6IFVwZGF0ZSB0byB0YXJn
ZXQgbmV3IGZpbGUuCisgICAgICAgICogV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVyczog
RGl0dG8uCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgor
ICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDogRGl0dG8uCisgICAgICAgICogd3RmL0hhc2hl
ci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dURi93dGYvU3RyaW5nSGFzaGVyLmguCisgICAgICAg
ICogd3RmL3RleHQvQ1N0cmluZy5jcHA6IFVzZSBuZXcgI2luY2x1ZGUKKyAgICAgICAgKiB3dGYv
dGV4dC9TdHJpbmdIYXNoLmg6IERpdHRvLgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwu
aDogRGl0dG8uCisgICAgICAgICogd3RmL3VuaWNvZGUvVVRGOC5jcHA6IERpdHRvLgorCiAyMDE1
LTA4LTE3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgTW92ZSBzb21lIGNvbW1hbmRzIGZyb20gLi9DTWFrZUxpc3RzLnR4dCB0byBTb3VyY2Uv
Y21ha2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCA2YTg4MWU5OWFiYTRlMzVlNmVkMDUzMWM4ZTRlNzlkOWI5NGYz
MjVhLi45YTljMTQyNDI2YzJiYTFmN2E2Y2YxMWY3MDk4MTgwMTlkNmQ1ZjRhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjMgQEAKKzIwMTUtMDgtMTcgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZp
ZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgSW50ZWdlckhhc2hlcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3ODY2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIFN0cmluZ0hh
c2hlci5oIHRvIEhhc2hlci4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBp
cyBubyBiZWhhdmlvciBkaWZmZXJlbmNlLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMv
REZBTWluaW1pemVyLmNwcDogVXNlIG5ldyAjaW5jbHVkZS4KKyAgICAgICAgKiBjb250ZW50ZXh0
ZW5zaW9ucy9IYXNoYWJsZUFjdGlvbkxpc3QuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udEZlYXR1cmVTZXR0aW5ncy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250
RmVhdHVyZVNldHRpbmdzOjpoYXNoKTogVXNlIG5ldyBJbnRlZ2VySGFzaGVyIGNsYXNzLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udEZlYXR1cmU6Omhhc2gpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRGZWF0dXJlU2V0dGluZ3MuaDogUmVtb3ZlIHVubmVjZXNzYXJ5
IGZ1bmN0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcDogVXNl
IG5ldyAjaW5jbHVkZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aENhY2hlLmg6
IERpdHRvLgorCiAyMDE1LTA4LTE3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgTW92ZSBzb21lIGNvbW1hbmRzIGZyb20gLi9DTWFrZUxpc3Rz
LnR4dCB0byBTb3VyY2UvY21ha2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGE0MDQ2YWNj
ZTk1NTkyM2VlM2MxMzUzMzEwNmVlOGZmMjhmOGU0MDguLjA5NzE1OTQxZDQ5YTFmNzVmMTkzNzQy
MjdkMGI3NGM0OTVkZDI3NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDE1LTA4LTE3ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+
CisKKyAgICAgICAgSW1wbGVtZW50IEludGVnZXJIYXNoZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Nzg2NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBjb21tZW50LgorCisgICAgICAgICog
VXNlckludGVyZmFjZS9CYXNlL1V0aWxpdGllcy5qczoKKwogMjAxNS0wOC0xNyAgQnJpYW4gQnVy
ZyAgPGJidXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBzcGxpdCBUZXN0
U3R1Yi5qcyBpbnRvIG11bHRpcGxlIGZpbGVzIGFuZCBtb2Rlcm5pemUgaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRl
eCBlMWZmNjFjNmRkZGNmMzc5NTNiM2Y0Mzg2NmQzODI0MmEwZjJlZGFlLi41YzQ1NjhhNDQ2YTQ2
YjU3YzY2YTI0MWUyZjE0Y2E0MmRhZDg1YTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTUtMDgtMTcgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKwor
ICAgICAgICBJbXBsZW1lbnQgSW50ZWdlckhhc2hlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3ODY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIG5ldyAjaW5jbHVkZS4KKworICAgICAgICAqIERh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvSURCSWRlbnRpZmllci5oOgorICAgICAgICAqIFBsYXRm
b3JtL0lQQy9TdHJpbmdSZWZlcmVuY2UuY3BwOgorCiAyMDE1LTA4LTE3ICBTYW0gV2VpbmlnICA8
c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQVBJOjpQYWdlQ29uZmlndXJhdGlvbidzIHNlc3Np
b25JRCBuZWVkcyB0byBiZSBzZXQgd2hlbmV2ZXIgdGhlIEFQSTo6V2Vic2l0ZURhdGFTdG9yZSBp
cyBzZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ogYi9T
b3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCmluZGV4IDBjNjU5MDI2N2E2ZTFkMzFh
MzRlOTJkZjdkNmM2YWM3ZTY5Y2UyMGIuLmUxY2U0NGRhNTg5OGQzYTYzNmNmZWFlODUwYWNjZjhj
M2ViMGE2MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oK
KysrIGIvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagpAQCAtMjE2LDYgKzIxNiw3
IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcZ2xpYlxHVW5pcXVlUHRyLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcR3JlZ29yaWFuRGF0ZVRpbWUuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxIYXNoQ291bnRlZFNldC5oIiAvPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEhhc2hlci5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cd3RmXEhhc2hGdW5jdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHd0ZlxIYXNoSXRlcmF0b3JzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
Llx3dGZcSGFzaE1hcC5oIiAvPgpAQCAtMjc2LDcgKzI3Nyw2IEBACiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlx3dGZcU3RkTGliRXh0cmFzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlx3dGZcU3RvcHdhdGNoLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZc
U3RyaW5nRXh0cmFzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcU3RyaW5n
SGFzaGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcU3RyaW5nUHJpbnRT
dHJlYW0uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxUZW1wb3JhcnlDaGFu
Z2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0Zlx0ZXh0XEFTQ0lJRmFzdFBh
dGguaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ou
ZmlsdGVycyBiL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVycwppbmRl
eCBiZjE5MzQxZjcxOWQ3NTY5MjBmMzcyNjlkODU0NjZjZjBkNjczZjYzLi5mNmQ2ZjlkZTY3MGI4
NmUwNzBkZmY4ZWE3NjA4ZDhlODA3YzlhZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi52
Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dURi9XVEYudmN4cHJvai9X
VEYudmN4cHJvai5maWx0ZXJzCkBAIC00NjMsNiArNDYzLDkgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxIYXNoQ291bnRlZFNldC5oIj4KICAgICAgIDxGaWx0ZXI+d3RmPC9GaWx0
ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSGFz
aGVyLmgiPgorICAgICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxIYXNoRnVuY3Rpb25zLmgiPgogICAgICAgPEZp
bHRlcj53dGY8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTYyMiw5ICs2MjUsNiBAQAog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFN0cmluZ0V4dHJhcy5oIj4KICAgICAgIDxG
aWx0ZXI+d3RmPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlx3dGZcU3RyaW5nSGFzaGVyLmgiPgotICAgICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4K
LSAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxTdHJpbmdQ
cmludFN0cmVhbS5oIj4KICAgICAgIDxGaWx0ZXI+d3RmPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1
ZGU+CkBAIC03MjEsNCArNzIxLDQgQEAKICAgICA8Tm9uZSBJbmNsdWRlPSJXVEZQb3N0QnVpbGQu
Y21kIiAvPgogICAgIDxOb25lIEluY2x1ZGU9IldURlByZUJ1aWxkLmNtZCIgLz4KICAgPC9JdGVt
R3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzA2NWYxNjhk
NjVkOTNiODc0ZDZlOTcyZjY0N2M1M2NmYTMyN2I5Zi4uZmU5YzU2NDUyNDBiMDBlNDAyOGVlMDVj
YzlhMTdjMDFjNTUxYzE5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xNjcsNiArMTY3LDcgQEAKIAkJQThBNDczQzkxNTFBODI1QjAwNDEyM0ZGIC8qIEZ1
bmN0aW9uYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4QTQ3MkE3MTUxQTgyNUEwMDQxMjNGRiAvKiBGdW5jdGlvbmFsLmggKi87IH07CiAJCUE4QTQ3
M0NBMTUxQTgyNUIwMDQxMjNGRiAvKiBHZXRQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MkE4MTUxQTgyNUEwMDQxMjNGRiAvKiBHZXRQdHIu
aCAqLzsgfTsKIAkJQThBNDczRDMxNTFBODI1QjAwNDEyM0ZGIC8qIEhhc2hDb3VudGVkU2V0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzJCMzE1
MUE4MjVBMDA0MTIzRkYgLyogSGFzaENvdW50ZWRTZXQuaCAqLzsgfTsKKwkJQThBNDc0MkQxNTFB
ODI1QjAwNDEyM0ZGIC8qIEhhc2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQThBNDczMTQxNTFBODI1QjAwNDEyM0ZGIC8qIEhhc2hlci5oICovOyB9
OwogCQlBOEE0NzNENDE1MUE4MjVCMDA0MTIzRkYgLyogSGFzaEZ1bmN0aW9ucy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcyQjQxNTFBODI1QTAw
NDEyM0ZGIC8qIEhhc2hGdW5jdGlvbnMuaCAqLzsgfTsKIAkJQThBNDczRDUxNTFBODI1QjAwNDEy
M0ZGIC8qIEhhc2hJdGVyYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4QTQ3MkI1MTUxQTgyNUEwMDQxMjNGRiAvKiBIYXNoSXRlcmF0b3JzLmgg
Ki87IH07CiAJCUE4QTQ3M0Q2MTUxQTgyNUIwMDQxMjNGRiAvKiBIYXNoTWFwLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzJCNjE1MUE4MjVBMDA0
MTIzRkYgLyogSGFzaE1hcC5oICovOyB9OwpAQCAtMjI2LDcgKzIyNyw2IEBACiAJCUE4QTQ3NDI5
MTUxQTgyNUIwMDQxMjNGRiAvKiBTdGF0aWNDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzEwMTUxQTgyNUIwMDQxMjNGRiAv
KiBTdGF0aWNDb25zdHJ1Y3RvcnMuaCAqLzsgfTsKIAkJQThBNDc0MkExNTFBODI1QjAwNDEyM0ZG
IC8qIFN0ZExpYkV4dHJhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThBNDczMTExNTFBODI1QjAwNDEyM0ZGIC8qIFN0ZExpYkV4dHJhcy5oICovOyB9
OwogCQlBOEE0NzQyQzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nRXh0cmFzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMxMzE1MUE4MjVCMDA0
MTIzRkYgLyogU3RyaW5nRXh0cmFzLmggKi87IH07Ci0JCUE4QTQ3NDJEMTUxQTgyNUIwMDQxMjNG
RiAvKiBTdHJpbmdIYXNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4QTQ3MzE0MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdIYXNoZXIuaCAqLzsg
fTsKIAkJQThBNDc0MzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRlbXBvcmFyeUNoYW5nZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMUExNTFBODI1
QjAwNDEyM0ZGIC8qIFRlbXBvcmFyeUNoYW5nZS5oICovOyB9OwogCQlBOEE0NzQzNDE1MUE4MjVC
MDA0MTIzRkYgLyogQVNDSUlGYXN0UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQThBNDczMUMxNTFBODI1QjAwNDEyM0ZGIC8qIEFTQ0lJRmFzdFBh
dGguaCAqLzsgfTsKIAkJQThBNDc0MzUxNTFBODI1QjAwNDEyM0ZGIC8qIEF0b21pY1N0cmluZy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMx
RDE1MUE4MjVCMDA0MTIzRkYgLyogQXRvbWljU3RyaW5nLmNwcCAqLzsgfTsKQEAgLTQ2NSw2ICs0
NjUsNyBAQAogCQlBOEE0NzJBNzE1MUE4MjVBMDA0MTIzRkYgLyogRnVuY3Rpb25hbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlvbmFsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE4QTQ3MkE4MTUxQTgyNUEwMDQxMjNGRiAvKiBHZXRQdHIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0UHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE4QTQ3MkIzMTUxQTgyNUEwMDQxMjNGRiAvKiBIYXNoQ291bnRlZFNldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoQ291bnRlZFNldC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEE0NzMxNDE1MUE4MjVCMDA0MTIzRkYgLyogSGFz
aGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzJCNDE1MUE4MjVBMDA0MTIzRkYgLyogSGFzaEZ1
bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoRnVuY3Rpb25z
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MkI1MTUxQTgyNUEwMDQxMjNG
RiAvKiBIYXNoSXRlcmF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhh
c2hJdGVyYXRvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDcyQjYxNTFB
ODI1QTAwNDEyM0ZGIC8qIEhhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTI0LDcgKzUyNSw2
IEBACiAJCUE4QTQ3MzEwMTUxQTgyNUIwMDQxMjNGRiAvKiBTdGF0aWNDb25zdHJ1Y3RvcnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGljQ29uc3RydWN0b3JzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzExMTUxQTgyNUIwMDQxMjNGRiAvKiBT
dGRMaWJFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RkTGliRXh0
cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzEzMTUxQTgyNUIwMDQx
MjNGRiAvKiBTdHJpbmdFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3RyaW5nRXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MzE0MTUx
QTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdIYXNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3RyaW5nSGFzaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4
QTQ3MzFBMTUxQTgyNUIwMDQxMjNGRiAvKiBUZW1wb3JhcnlDaGFuZ2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcG9yYXJ5Q2hhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE4QTQ3MzFDMTUxQTgyNUIwMDQxMjNGRiAvKiBBU0NJSUZhc3RQYXRoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFTQ0lJRmFzdFBhdGguaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMUQxNTFBODI1QjAwNDEyM0ZGIC8qIEF0b21p
Y1N0cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdG9taWNT
dHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzY4LDYgKzc2OCw3IEBA
CiAJCQkJMkNDRDg5MjkxNUMwMzkwMjAwMjg1MDgzIC8qIEdyZWdvcmlhbkRhdGVUaW1lLmNwcCAq
LywKIAkJCQkyQzA1Mzg1MzE1QkM4MTkwMDBGMjFCOTYgLyogR3JlZ29yaWFuRGF0ZVRpbWUuaCAq
LywKIAkJCQlBOEE0NzJCMzE1MUE4MjVBMDA0MTIzRkYgLyogSGFzaENvdW50ZWRTZXQuaCAqLywK
KwkJCQlBOEE0NzMxNDE1MUE4MjVCMDA0MTIzRkYgLyogSGFzaGVyLmggKi8sCiAJCQkJQThBNDcy
QjQxNTFBODI1QTAwNDEyM0ZGIC8qIEhhc2hGdW5jdGlvbnMuaCAqLywKIAkJCQlBOEE0NzJCNTE1
MUE4MjVBMDA0MTIzRkYgLyogSGFzaEl0ZXJhdG9ycy5oICovLAogCQkJCUE4QTQ3MkI2MTUxQTgy
NUEwMDQxMjNGRiAvKiBIYXNoTWFwLmggKi8sCkBAIC04NzEsNyArODcyLDYgQEAKIAkJCQkxQTZC
Qjc2ODE2MkYzMDA1MDBERDE2REIgLyogU3RyZWFtQnVmZmVyLmggKi8sCiAJCQkJQThBNDczMTMx
NTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0V4dHJhcy5oICovLAogCQkJCUE3NDg3NDUxMTdBMEJE
QUUwMEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVtcENvbnRleHQuaCAqLywKLQkJCQlBOEE0NzMxNDE1
MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSGFzaGVyLmggKi8sCiAJCQkJMEZEREJGQTUxNjY2REZB
MzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCAqLywKIAkJCQkwRkREQkZBNjE2NjZE
RkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCAqLywKIAkJCQlBOEE0NzMxQTE1MUE4
MjVCMDA0MTIzRkYgLyogVGVtcG9yYXJ5Q2hhbmdlLmggKi8sCkBAIC0xMTIyLDYgKzExMjIsNyBA
QAogCQkJCUE4QTQ3M0NBMTUxQTgyNUIwMDQxMjNGRiAvKiBHZXRQdHIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJDMDUzODU0MTVCQzgxOTAwMEYyMUI5NiAvKiBHcmVnb3JpYW5EYXRlVGltZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRDMxNTFBODI1QjAwNDEyM0ZGIC8qIEhhc2hDb3VudGVk
U2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBOEE0NzQyRDE1MUE4MjVCMDA0MTIzRkYgLyogSGFz
aGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNENDE1MUE4MjVCMDA0MTIzRkYgLyogSGFz
aEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRDUxNTFBODI1QjAwNDEyM0ZG
IC8qIEhhc2hJdGVyYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0Q2MTUxQTgyNUIw
MDQxMjNGRiAvKiBIYXNoTWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTEyMDQsNyArMTIwNSw2IEBA
CiAJCQkJQThBNDc0M0YxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0hhc2guaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZFODIyNTMxMUIyQTFFNUIwMEJBNjhGRCAvKiBOYWtlZFB0ci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTc0ODc0NTQxN0EwQkRBRTAwRkEwNENCIC8qIFN0cmluZ0hhc2hEdW1wQ29u
dGV4dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQThBNDc0MkQxNTFBODI1QjAwNDEyM0ZGIC8qIFN0
cmluZ0hhc2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDExNTFBODI1QjAwNDEyM0ZG
IC8qIFN0cmluZ0ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDQyMTUxQTgyNUIwMDQx
MjNGRiAvKiBTdHJpbmdPcGVyYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRERCRkE4MTY2
NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NN
YWtlTGlzdHMudHh0CmluZGV4IDk3MjkyMGVmMjIxOWM1ZmRmNzBjYTJiM2ExZGIyMjkwZjZmNzlh
OGUuLmQzZDRlOWFjMzY4ZjdmN2E5MzNlMGM5MGQ3MTQ2OGI1ZTJhZTQwMDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtl
TGlzdHMudHh0CkBAIC0zMSw2ICszMSw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIEdldFB0ci5o
CiAgICAgR3JlZ29yaWFuRGF0ZVRpbWUuaAogICAgIEhhc2hDb3VudGVkU2V0LmgKKyAgICBIYXNo
ZXIuaAogICAgIEhhc2hGdW5jdGlvbnMuaAogICAgIEhhc2hJdGVyYXRvcnMuaAogICAgIEhhc2hN
YXAuaApAQCAtOTAsNyArOTEsNiBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBTdGRMaWJFeHRyYXMu
aAogICAgIFN0b3B3YXRjaC5oCiAgICAgU3RyaW5nRXh0cmFzLmgKLSAgICBTdHJpbmdIYXNoZXIu
aAogICAgIFN0cmluZ1ByaW50U3RyZWFtLmgKICAgICBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJl
YWRzLmgKICAgICBUaHJlYWRTYWZlUmVmQ291bnRlZC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9IYXNoZXIuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4Yjdk
N2RiYWQ4YjljYzdkZjI3OWQ5MzNhYTcyNWVmZmQyZGNlZTkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9IYXNoZXIuaApAQCAtMCwwICsxLDMxNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9n
YUBwYXJvZ2EuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXVEZfSGFzaGVyX2gKKyNkZWZpbmUgV1RGX0hhc2hl
cl9oCisKKyNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0xD
aGFyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBQYXVsIEhzaWVoJ3MgU3VwZXJGYXN0SGFz
aAorLy8gaHR0cDovL3d3dy5hemlsbGlvbm1vbmtleXMuY29tL3FlZC9oYXNoLmh0bWwKKworLy8g
TENoYXIgZGF0YSBpcyBpbnRlcnByZXRlZCBhcyBMYXRpbi0xLWVuY29kZWQgKHplcm8gZXh0ZW5k
ZWQgdG8gMTYgYml0cykuCisKKy8vIE5PVEU6IFRoZSBoYXNoIGNvbXB1dGF0aW9uIGhlcmUgbXVz
dCBzdGF5IGluIHN5bmMgd2l0aCB0aGUgY3JlYXRlX2hhc2hfdGFibGUgc2NyaXB0IGluCisvLyBK
YXZhU2NyaXB0Q29yZSBhbmQgdGhlIENvZGVHZW5lcmF0b3JKUy5wbSBzY3JpcHQgaW4gV2ViQ29y
ZS4KKworLy8gR29sZGVuIHJhdGlvLiBBcmJpdHJhcnkgc3RhcnQgdmFsdWUgdG8gYXZvaWQgbWFw
cGluZyBhbGwgemVyb3MgdG8gYSBoYXNoIHZhbHVlIG9mIHplcm8uCitzdGF0aWMgY29uc3QgdW5z
aWduZWQgc3RyaW5nSGFzaGluZ1N0YXJ0VmFsdWUgPSAweDlFMzc3OUI5VTsKKworY2xhc3MgU3Ry
aW5nSGFzaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmxhZ0NvdW50
ID0gODsgLy8gU2F2ZSA4IGJpdHMgZm9yIFN0cmluZ0ltcGwgdG8gdXNlIGFzIGZsYWdzLgorCisg
ICAgU3RyaW5nSGFzaGVyKCkKKyAgICAgICAgOiBtX2hhc2goc3RyaW5nSGFzaGluZ1N0YXJ0VmFs
dWUpCisgICAgICAgICwgbV9oYXNQZW5kaW5nQ2hhcmFjdGVyKGZhbHNlKQorICAgICAgICAsIG1f
cGVuZGluZ0NoYXJhY3RlcigwKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBUaGUgaGFzaGVyIGhh
c2hlcyB0d28gY2hhcmFjdGVycyBhdCBhIHRpbWUsIGFuZCB0aHVzIGFuICJhbGlnbmVkIiBoYXNo
ZXIgaXMgb25lCisgICAgLy8gd2hlcmUgYW4gZXZlbiBudW1iZXIgb2YgY2hhcmFjdGVycyBoYXZl
IGJlZW4gYWRkZWQuIENhbGxlcnMgdGhhdCBhbHdheXMgYWRkCisgICAgLy8gY2hhcmFjdGVycyB0
d28gYXQgYSB0aW1lIGNhbiB1c2UgdGhlICJhc3N1bWluZyBhbGlnbmVkIiBmdW5jdGlvbnMuCisg
ICAgdm9pZCBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKFVDaGFyIGEsIFVDaGFyIGIpCisg
ICAgeworICAgICAgICBBU1NFUlQoIW1faGFzUGVuZGluZ0NoYXJhY3Rlcik7CisgICAgICAgIG1f
aGFzaCArPSBhOworICAgICAgICBtX2hhc2ggPSAobV9oYXNoIDw8IDE2KSBeICgoYiA8PCAxMSkg
XiBtX2hhc2gpOworICAgICAgICBtX2hhc2ggKz0gbV9oYXNoID4+IDExOworICAgIH0KKworICAg
IHZvaWQgYWRkQ2hhcmFjdGVyKFVDaGFyIGNoYXJhY3RlcikKKyAgICB7CisgICAgICAgIGlmICht
X2hhc1BlbmRpbmdDaGFyYWN0ZXIpIHsKKyAgICAgICAgICAgIG1faGFzUGVuZGluZ0NoYXJhY3Rl
ciA9IGZhbHNlOworICAgICAgICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChtX3Bl
bmRpbmdDaGFyYWN0ZXIsIGNoYXJhY3Rlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBtX3BlbmRpbmdDaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7CisgICAgICAgIG1f
aGFzUGVuZGluZ0NoYXJhY3RlciA9IHRydWU7CisgICAgfQorCisgICAgdm9pZCBhZGRDaGFyYWN0
ZXJzKFVDaGFyIGEsIFVDaGFyIGIpCisgICAgeworICAgICAgICBpZiAobV9oYXNQZW5kaW5nQ2hh
cmFjdGVyKSB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAgICAgbV9oYXNQZW5kaW5n
Q2hhcmFjdGVyID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgICAgIGFkZENoYXJhY3RlcnNBc3N1
bWluZ0FsaWduZWQobV9wZW5kaW5nQ2hhcmFjdGVyLCBhKTsKKyAgICAgICAgICAgIG1fcGVuZGlu
Z0NoYXJhY3RlciA9IGI7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAgICAgbV9oYXNQ
ZW5kaW5nQ2hhcmFjdGVyID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChhLCBiKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hhciBDb252ZXJ0ZXIoVCk+IHZvaWQg
YWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5n
dGgpCisgICAgeworICAgICAgICBBU1NFUlQoIW1faGFzUGVuZGluZ0NoYXJhY3Rlcik7CisKKyAg
ICAgICAgYm9vbCByZW1haW5kZXIgPSBsZW5ndGggJiAxOworICAgICAgICBsZW5ndGggPj49IDE7
CisKKyAgICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7CisgICAgICAgICAgICBhZGRDaGFyYWN0ZXJz
QXNzdW1pbmdBbGlnbmVkKENvbnZlcnRlcihkYXRhWzBdKSwgQ29udmVydGVyKGRhdGFbMV0pKTsK
KyAgICAgICAgICAgIGRhdGEgKz0gMjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZW1haW5k
ZXIpCisgICAgICAgICAgICBhZGRDaGFyYWN0ZXIoQ29udmVydGVyKCpkYXRhKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGln
bmVkKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIGFkZENo
YXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSwgbGVuZ3Ro
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hhciBDb252ZXJ0ZXIoVCk+
IHZvaWQgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChjb25zdCBUKiBkYXRhKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKCFtX2hhc1BlbmRpbmdDaGFyYWN0ZXIpOworCisgICAgICAgIHdoaWxl
IChUIGEgPSAqZGF0YSsrKSB7CisgICAgICAgICAgICBUIGIgPSAqZGF0YSsrOworICAgICAgICAg
ICAgaWYgKCFiKSB7CisgICAgICAgICAgICAgICAgYWRkQ2hhcmFjdGVyKENvbnZlcnRlcihhKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhZGRD
aGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKENvbnZlcnRlcihhKSwgQ29udmVydGVyKGIpKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYWRkQ2hhcmFj
dGVyc0Fzc3VtaW5nQWxpZ25lZChjb25zdCBUKiBkYXRhKQorICAgIHsKKyAgICAgICAgYWRkQ2hh
cmFjdGVyc0Fzc3VtaW5nQWxpZ25lZDxULCBkZWZhdWx0Q29udmVydGVyPihkYXRhKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hhciBDb252ZXJ0ZXIoVCk+IHZvaWQgYWRk
Q2hhcmFjdGVycyhjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAg
ICBpZiAobV9oYXNQZW5kaW5nQ2hhcmFjdGVyICYmIGxlbmd0aCkgeworICAgICAgICAgICAgbV9o
YXNQZW5kaW5nQ2hhcmFjdGVyID0gZmFsc2U7CisgICAgICAgICAgICBhZGRDaGFyYWN0ZXJzQXNz
dW1pbmdBbGlnbmVkKG1fcGVuZGluZ0NoYXJhY3RlciwgQ29udmVydGVyKCpkYXRhKyspKTsKKyAg
ICAgICAgICAgIC0tbGVuZ3RoOworICAgICAgICB9CisgICAgICAgIGFkZENoYXJhY3RlcnNBc3N1
bWluZ0FsaWduZWQ8VCwgQ29udmVydGVyPihkYXRhLCBsZW5ndGgpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYWRkQ2hhcmFjdGVycyhjb25zdCBUKiBkYXRhLCB1bnNp
Z25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBhZGRDaGFyYWN0ZXJzPFQsIGRlZmF1bHRDb252
ZXJ0ZXI+KGRhdGEsIGxlbmd0aCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
VUNoYXIgQ29udmVydGVyKFQpPiB2b2lkIGFkZENoYXJhY3RlcnMoY29uc3QgVCogZGF0YSkKKyAg
ICB7CisgICAgICAgIGlmIChtX2hhc1BlbmRpbmdDaGFyYWN0ZXIgJiYgKmRhdGEpIHsKKyAgICAg
ICAgICAgIG1faGFzUGVuZGluZ0NoYXJhY3RlciA9IGZhbHNlOworICAgICAgICAgICAgYWRkQ2hh
cmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChtX3BlbmRpbmdDaGFyYWN0ZXIsIENvbnZlcnRlcigqZGF0
YSsrKSk7CisgICAgICAgIH0KKyAgICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZDxU
LCBDb252ZXJ0ZXI+KGRhdGEpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZv
aWQgYWRkQ2hhcmFjdGVycyhjb25zdCBUKiBkYXRhKQorICAgIHsKKyAgICAgICAgYWRkQ2hhcmFj
dGVyczxULCBkZWZhdWx0Q29udmVydGVyPihkYXRhKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBo
YXNoV2l0aFRvcDhCaXRzTWFza2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJl
c3VsdCA9IGF2YWxhbmNoZUJpdHMoKTsKKworICAgICAgICAvLyBSZXNlcnZpbmcgc3BhY2UgZnJv
bSB0aGUgaGlnaCBiaXRzIGZvciBmbGFncyBwcmVzZXJ2ZXMgbW9zdCBvZiB0aGUgaGFzaCdzCisg
ICAgICAgIC8vIHZhbHVlLCBzaW5jZSBoYXNoIGxvb2t1cCB0eXBpY2FsbHkgbWFza3Mgb3V0IHRo
ZSBoaWdoIGJpdHMgYW55d2F5LgorICAgICAgICByZXN1bHQgJj0gKDFVIDw8IChzaXplb2YocmVz
dWx0KSAqIDggLSBmbGFnQ291bnQpKSAtIDE7CisKKyAgICAgICAgLy8gVGhpcyBhdm9pZHMgZXZl
ciByZXR1cm5pbmcgYSBoYXNoIGNvZGUgb2YgMCwgc2luY2UgdGhhdCBpcyB1c2VkIHRvCisgICAg
ICAgIC8vIHNpZ25hbCAiaGFzaCBub3QgY29tcHV0ZWQgeWV0Ii4gU2V0dGluZyB0aGUgaGlnaCBi
aXQgbWFpbnRhaW5zCisgICAgICAgIC8vIHJlYXNvbmFibGUgZmlkZWxpdHkgdG8gYSBoYXNoIGNv
ZGUgb2YgMCBiZWNhdXNlIGl0IGlzIGxpa2VseSB0byB5aWVsZAorICAgICAgICAvLyBleGFjdGx5
IDAgd2hlbiBoYXNoIGxvb2t1cCBtYXNrcyBvdXQgdGhlIGhpZ2ggYml0cy4KKyAgICAgICAgaWYg
KCFyZXN1bHQpCisgICAgICAgICAgICByZXN1bHQgPSAweDgwMDAwMDAwID4+IGZsYWdDb3VudDsK
KworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gYXZhbGFuY2hlQml0cygpOwor
CisgICAgICAgIC8vIFRoaXMgYXZvaWRzIGV2ZXIgcmV0dXJuaW5nIGEgaGFzaCBjb2RlIG9mIDAs
IHNpbmNlIHRoYXQgaXMgdXNlZCB0bworICAgICAgICAvLyBzaWduYWwgImhhc2ggbm90IGNvbXB1
dGVkIHlldCIuIFNldHRpbmcgdGhlIGhpZ2ggYml0IG1haW50YWlucworICAgICAgICAvLyByZWFz
b25hYmxlIGZpZGVsaXR5IHRvIGEgaGFzaCBjb2RlIG9mIDAgYmVjYXVzZSBpdCBpcyBsaWtlbHkg
dG8geWllbGQKKyAgICAgICAgLy8gZXhhY3RseSAwIHdoZW4gaGFzaCBsb29rdXAgbWFza3Mgb3V0
IHRoZSBoaWdoIGJpdHMuCisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcmVzdWx0
ID0gMHg4MDAwMDAwMDsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIFVDaGFyIENvbnZlcnRlcihUKT4gc3RhdGljIHVuc2lnbmVkIGNv
bXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkK
KyAgICB7CisgICAgICAgIFN0cmluZ0hhc2hlciBoYXNoZXI7CisgICAgICAgIGhhc2hlci5hZGRD
aGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIENvbnZlcnRlcj4oZGF0YSwgbGVuZ3RoKTsKKyAg
ICAgICAgcmV0dXJuIGhhc2hlci5oYXNoV2l0aFRvcDhCaXRzTWFza2VkKCk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiBzdGF0aWMgdW5zaWdu
ZWQgY29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoY29uc3QgVCogZGF0YSkKKyAgICB7CisgICAg
ICAgIFN0cmluZ0hhc2hlciBoYXNoZXI7CisgICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXJzQXNz
dW1pbmdBbGlnbmVkPFQsIENvbnZlcnRlcj4oZGF0YSk7CisgICAgICAgIHJldHVybiBoYXNoZXIu
aGFzaFdpdGhUb3A4Qml0c01hc2tlZCgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhjb25zdCBUKiBk
YXRhLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2hB
bmRNYXNrVG9wOEJpdHM8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSwgbGVuZ3RoKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2hB
bmRNYXNrVG9wOEJpdHMoY29uc3QgVCogZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb21w
dXRlSGFzaEFuZE1hc2tUb3A4Qml0czxULCBkZWZhdWx0Q29udmVydGVyPihkYXRhKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hhciBDb252ZXJ0ZXIoVCk+IHN0YXRpYyB1
bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCisgICAg
eworICAgICAgICBTdHJpbmdIYXNoZXIgaGFzaGVyOworICAgICAgICBoYXNoZXIuYWRkQ2hhcmFj
dGVyc0Fzc3VtaW5nQWxpZ25lZDxULCBDb252ZXJ0ZXI+KGRhdGEsIGxlbmd0aCk7CisgICAgICAg
IHJldHVybiBoYXNoZXIuaGFzaCgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IFVDaGFyIENvbnZlcnRlcihUKT4gc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNvbnN0IFQq
IGRhdGEpCisgICAgeworICAgICAgICBTdHJpbmdIYXNoZXIgaGFzaGVyOworICAgICAgICBoYXNo
ZXIuYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZDxULCBDb252ZXJ0ZXI+KGRhdGEpOworICAg
ICAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3QgVCogZGF0YSwgdW5zaWduZWQg
bGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoPFQsIGRlZmF1bHRDb252
ZXJ0ZXI+KGRhdGEsIGxlbmd0aCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNvbnN0IFQqIGRhdGEpCisgICAgeworICAgICAg
ICByZXR1cm4gY29tcHV0ZUhhc2g8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSk7CisgICAgfQor
CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2hNZW1vcnkoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWdu
ZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFdoeSBkb2VzIHRoaXMgZnVuY3Rp
b24gdXNlIHRoZSB2ZXJzaW9uIG9mIHRoZSBoYXNoIHRoYXQgZHJvcHMgdGhlIHRvcCA4IGJpdHM/
CisgICAgICAgIC8vIFdlIHdhbnQgdGhhdCBmb3IgYWxsIHN0cmluZyBoYXNoaW5nIHNvIHdlIGNh
biB1c2UgdGhvc2UgYml0cyBpbiBTdHJpbmdJbXBsIGFuZCBoYXNoCisgICAgICAgIC8vIHN0cmlu
Z3MgY29uc2lzdGVudGx5LCBidXQgSSBkb24ndCBzZWUgd2h5IHdlJ2Qgd2FudCB0aGF0IGZvciBn
ZW5lcmFsIG1lbW9yeSBoYXNoaW5nLgorICAgICAgICBBU1NFUlQoIShsZW5ndGggJSAyKSk7Cisg
ICAgICAgIHJldHVybiBjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0czxVQ2hhcj4oc3RhdGljX2Nh
c3Q8Y29uc3QgVUNoYXIqPihkYXRhKSwgbGVuZ3RoIC8gc2l6ZW9mKFVDaGFyKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8c2l6ZV90IGxlbmd0aD4gc3RhdGljIHVuc2lnbmVkIGhhc2hNZW1vcnko
Y29uc3Qgdm9pZCogZGF0YSkKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShsZW5ndGgg
JSAyKSwgImxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdHdvISIpOworICAgICAgICByZXR1
cm4gaGFzaE1lbW9yeShkYXRhLCBsZW5ndGgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0
aWMgVUNoYXIgZGVmYXVsdENvbnZlcnRlcihVQ2hhciBjaGFyYWN0ZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gY2hhcmFjdGVyOworICAgIH0KKworICAgIHN0YXRpYyBVQ2hhciBkZWZhdWx0Q29u
dmVydGVyKExDaGFyIGNoYXJhY3RlcikKKyAgICB7CisgICAgICAgIHJldHVybiBjaGFyYWN0ZXI7
CisgICAgfQorCisgICAgdW5zaWduZWQgYXZhbGFuY2hlQml0cygpIGNvbnN0CisgICAgeworICAg
ICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2hhc2g7CisKKyAgICAgICAgLy8gSGFuZGxlIGVuZCBj
YXNlLgorICAgICAgICBpZiAobV9oYXNQZW5kaW5nQ2hhcmFjdGVyKSB7CisgICAgICAgICAgICBy
ZXN1bHQgKz0gbV9wZW5kaW5nQ2hhcmFjdGVyOworICAgICAgICAgICAgcmVzdWx0IF49IHJlc3Vs
dCA8PCAxMTsKKyAgICAgICAgICAgIHJlc3VsdCArPSByZXN1bHQgPj4gMTc7CisgICAgICAgIH0K
KworICAgICAgICAvLyBGb3JjZSAiYXZhbGFuY2hpbmciIG9mIGZpbmFsIDMxIGJpdHMuCisgICAg
ICAgIHJlc3VsdCBePSByZXN1bHQgPDwgMzsKKyAgICAgICAgcmVzdWx0ICs9IHJlc3VsdCA+PiA1
OworICAgICAgICByZXN1bHQgXj0gcmVzdWx0IDw8IDI7CisgICAgICAgIHJlc3VsdCArPSByZXN1
bHQgPj4gMTU7CisgICAgICAgIHJlc3VsdCBePSByZXN1bHQgPDwgMTA7CisKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBtX2hhc2g7CisgICAgYm9vbCBtX2hh
c1BlbmRpbmdDaGFyYWN0ZXI7CisgICAgVUNoYXIgbV9wZW5kaW5nQ2hhcmFjdGVyOworfTsKKwor
Y2xhc3MgSW50ZWdlckhhc2hlciB7CitwdWJsaWM6CisKKyAgICB2b2lkIGFkZCh1bnNpZ25lZCBp
bnRlZ2VyKQorICAgIHsKKyAgICAgICAgbV91bmRlcmx5aW5nSGFzaGVyLmFkZENoYXJhY3RlcnNB
c3N1bWluZ0FsaWduZWQoaW50ZWdlciwgaW50ZWdlciA+PiAxNik7CisgICAgfQorCisgICAgdW5z
aWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV91bmRlcmx5aW5nSGFz
aGVyLmhhc2goKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nSGFzaGVyIG1fdW5kZXJs
eWluZ0hhc2hlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkludGVn
ZXJIYXNoZXI7Cit1c2luZyBXVEY6OlN0cmluZ0hhc2hlcjsKKworI2VuZGlmIC8vIFdURl9IYXNo
ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3RyaW5nSGFzaGVyLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9TdHJpbmdIYXNoZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZk
ZGJiZGJhZmE0NDE4ZDJlMmRjMTUwMWM4OTVlOThkOWZiMzM4OC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TdHJpbmdIYXNoZXIu
aAorKysgL2Rldi9udWxsCkBAIC0xLDI5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA1LCAyMDA2LCAyMDA4LCAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9n
YS5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICoKLSAqLwotCi0jaWZuZGVmIFdURl9TdHJpbmdIYXNoZXJfaAotI2RlZmluZSBXVEZfU3RyaW5n
SGFzaGVyX2gKLQotI2luY2x1ZGUgPHVuaWNvZGUvdXR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvTENoYXIuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIFBhdWwgSHNpZWgncyBTdXBlckZh
c3RIYXNoCi0vLyBodHRwOi8vd3d3LmF6aWxsaW9ubW9ua2V5cy5jb20vcWVkL2hhc2guaHRtbAot
Ci0vLyBMQ2hhciBkYXRhIGlzIGludGVycHJldGVkIGFzIExhdGluLTEtZW5jb2RlZCAoemVybyBl
eHRlbmRlZCB0byAxNiBiaXRzKS4KLQotLy8gTk9URTogVGhlIGhhc2ggY29tcHV0YXRpb24gaGVy
ZSBtdXN0IHN0YXkgaW4gc3luYyB3aXRoIHRoZSBjcmVhdGVfaGFzaF90YWJsZSBzY3JpcHQgaW4K
LS8vIEphdmFTY3JpcHRDb3JlIGFuZCB0aGUgQ29kZUdlbmVyYXRvckpTLnBtIHNjcmlwdCBpbiBX
ZWJDb3JlLgotCi0vLyBHb2xkZW4gcmF0aW8uIEFyYml0cmFyeSBzdGFydCB2YWx1ZSB0byBhdm9p
ZCBtYXBwaW5nIGFsbCB6ZXJvcyB0byBhIGhhc2ggdmFsdWUgb2YgemVyby4KLXN0YXRpYyBjb25z
dCB1bnNpZ25lZCBzdHJpbmdIYXNoaW5nU3RhcnRWYWx1ZSA9IDB4OUUzNzc5QjlVOwotCi1jbGFz
cyBTdHJpbmdIYXNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmbGFn
Q291bnQgPSA4OyAvLyBTYXZlIDggYml0cyBmb3IgU3RyaW5nSW1wbCB0byB1c2UgYXMgZmxhZ3Mu
Ci0KLSAgICBTdHJpbmdIYXNoZXIoKQotICAgICAgICA6IG1faGFzaChzdHJpbmdIYXNoaW5nU3Rh
cnRWYWx1ZSkKLSAgICAgICAgLCBtX2hhc1BlbmRpbmdDaGFyYWN0ZXIoZmFsc2UpCi0gICAgICAg
ICwgbV9wZW5kaW5nQ2hhcmFjdGVyKDApCi0gICAgewotICAgIH0KLQotICAgIC8vIFRoZSBoYXNo
ZXIgaGFzaGVzIHR3byBjaGFyYWN0ZXJzIGF0IGEgdGltZSwgYW5kIHRodXMgYW4gImFsaWduZWQi
IGhhc2hlciBpcyBvbmUKLSAgICAvLyB3aGVyZSBhbiBldmVuIG51bWJlciBvZiBjaGFyYWN0ZXJz
IGhhdmUgYmVlbiBhZGRlZC4gQ2FsbGVycyB0aGF0IGFsd2F5cyBhZGQKLSAgICAvLyBjaGFyYWN0
ZXJzIHR3byBhdCBhIHRpbWUgY2FuIHVzZSB0aGUgImFzc3VtaW5nIGFsaWduZWQiIGZ1bmN0aW9u
cy4KLSAgICB2b2lkIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoVUNoYXIgYSwgVUNoYXIg
YikKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9oYXNQZW5kaW5nQ2hhcmFjdGVyKTsKLSAgICAg
ICAgbV9oYXNoICs9IGE7Ci0gICAgICAgIG1faGFzaCA9IChtX2hhc2ggPDwgMTYpIF4gKChiIDw8
IDExKSBeIG1faGFzaCk7Ci0gICAgICAgIG1faGFzaCArPSBtX2hhc2ggPj4gMTE7Ci0gICAgfQot
Ci0gICAgdm9pZCBhZGRDaGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyKQotICAgIHsKLSAgICAgICAg
aWYgKG1faGFzUGVuZGluZ0NoYXJhY3RlcikgewotICAgICAgICAgICAgbV9oYXNQZW5kaW5nQ2hh
cmFjdGVyID0gZmFsc2U7Ci0gICAgICAgICAgICBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVk
KG1fcGVuZGluZ0NoYXJhY3RlciwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIG1fcGVuZGluZ0NoYXJhY3RlciA9IGNoYXJhY3RlcjsKLSAgICAg
ICAgbV9oYXNQZW5kaW5nQ2hhcmFjdGVyID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZENo
YXJhY3RlcnMoVUNoYXIgYSwgVUNoYXIgYikKLSAgICB7Ci0gICAgICAgIGlmIChtX2hhc1BlbmRp
bmdDaGFyYWN0ZXIpIHsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgICAgICBtX2hhc1Bl
bmRpbmdDaGFyYWN0ZXIgPSBmYWxzZTsKLSNlbmRpZgotICAgICAgICAgICAgYWRkQ2hhcmFjdGVy
c0Fzc3VtaW5nQWxpZ25lZChtX3BlbmRpbmdDaGFyYWN0ZXIsIGEpOwotICAgICAgICAgICAgbV9w
ZW5kaW5nQ2hhcmFjdGVyID0gYjsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgICAgICBt
X2hhc1BlbmRpbmdDaGFyYWN0ZXIgPSB0cnVlOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKGEsIGIp
OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFVDaGFyIENvbnZlcnRlcihUKT4g
dm9pZCBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVk
IGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9oYXNQZW5kaW5nQ2hhcmFjdGVyKTsK
LQotICAgICAgICBib29sIHJlbWFpbmRlciA9IGxlbmd0aCAmIDE7Ci0gICAgICAgIGxlbmd0aCA+
Pj0gMTsKLQotICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHsKLSAgICAgICAgICAgIGFkZENoYXJh
Y3RlcnNBc3N1bWluZ0FsaWduZWQoQ29udmVydGVyKGRhdGFbMF0pLCBDb252ZXJ0ZXIoZGF0YVsx
XSkpOwotICAgICAgICAgICAgZGF0YSArPSAyOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJl
bWFpbmRlcikKLSAgICAgICAgICAgIGFkZENoYXJhY3RlcihDb252ZXJ0ZXIoKmRhdGEpKTsKLSAg
ICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZENoYXJhY3RlcnNBc3N1bWlu
Z0FsaWduZWQoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAg
YWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZDxULCBkZWZhdWx0Q29udmVydGVyPihkYXRhLCBs
ZW5ndGgpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFVDaGFyIENvbnZlcnRl
cihUKT4gdm9pZCBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKGNvbnN0IFQqIGRhdGEpCi0g
ICAgewotICAgICAgICBBU1NFUlQoIW1faGFzUGVuZGluZ0NoYXJhY3Rlcik7Ci0KLSAgICAgICAg
d2hpbGUgKFQgYSA9ICpkYXRhKyspIHsKLSAgICAgICAgICAgIFQgYiA9ICpkYXRhKys7Ci0gICAg
ICAgICAgICBpZiAoIWIpIHsKLSAgICAgICAgICAgICAgICBhZGRDaGFyYWN0ZXIoQ29udmVydGVy
KGEpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoQ29udmVydGVyKGEpLCBDb252ZXJ0ZXIoYikp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhZGRD
aGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKGNvbnN0IFQqIGRhdGEpCi0gICAgewotICAgICAgICBh
ZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIGRlZmF1bHRDb252ZXJ0ZXI+KGRhdGEpOwot
ICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFVDaGFyIENvbnZlcnRlcihUKT4gdm9p
ZCBhZGRDaGFyYWN0ZXJzKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0g
ICAgICAgIGlmIChtX2hhc1BlbmRpbmdDaGFyYWN0ZXIgJiYgbGVuZ3RoKSB7Ci0gICAgICAgICAg
ICBtX2hhc1BlbmRpbmdDaGFyYWN0ZXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGFkZENoYXJhY3Rl
cnNBc3N1bWluZ0FsaWduZWQobV9wZW5kaW5nQ2hhcmFjdGVyLCBDb252ZXJ0ZXIoKmRhdGErKykp
OwotICAgICAgICAgICAgLS1sZW5ndGg7Ci0gICAgICAgIH0KLSAgICAgICAgYWRkQ2hhcmFjdGVy
c0Fzc3VtaW5nQWxpZ25lZDxULCBDb252ZXJ0ZXI+KGRhdGEsIGxlbmd0aCk7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhZGRDaGFyYWN0ZXJzKGNvbnN0IFQqIGRhdGEs
IHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIGFkZENoYXJhY3RlcnM8VCwgZGVmYXVs
dENvbnZlcnRlcj4oZGF0YSwgbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBVQ2hhciBDb252ZXJ0ZXIoVCk+IHZvaWQgYWRkQ2hhcmFjdGVycyhjb25zdCBUKiBkYXRh
KQotICAgIHsKLSAgICAgICAgaWYgKG1faGFzUGVuZGluZ0NoYXJhY3RlciAmJiAqZGF0YSkgewot
ICAgICAgICAgICAgbV9oYXNQZW5kaW5nQ2hhcmFjdGVyID0gZmFsc2U7Ci0gICAgICAgICAgICBh
ZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKG1fcGVuZGluZ0NoYXJhY3RlciwgQ29udmVydGVy
KCpkYXRhKyspKTsKLSAgICAgICAgfQotICAgICAgICBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGln
bmVkPFQsIENvbnZlcnRlcj4oZGF0YSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gdm9pZCBhZGRDaGFyYWN0ZXJzKGNvbnN0IFQqIGRhdGEpCi0gICAgewotICAgICAgICBhZGRD
aGFyYWN0ZXJzPFQsIGRlZmF1bHRDb252ZXJ0ZXI+KGRhdGEpOwotICAgIH0KLQotICAgIHVuc2ln
bmVkIGhhc2hXaXRoVG9wOEJpdHNNYXNrZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgdW5zaWdu
ZWQgcmVzdWx0ID0gYXZhbGFuY2hlQml0cygpOwotCi0gICAgICAgIC8vIFJlc2VydmluZyBzcGFj
ZSBmcm9tIHRoZSBoaWdoIGJpdHMgZm9yIGZsYWdzIHByZXNlcnZlcyBtb3N0IG9mIHRoZSBoYXNo
J3MKLSAgICAgICAgLy8gdmFsdWUsIHNpbmNlIGhhc2ggbG9va3VwIHR5cGljYWxseSBtYXNrcyBv
dXQgdGhlIGhpZ2ggYml0cyBhbnl3YXkuCi0gICAgICAgIHJlc3VsdCAmPSAoMVUgPDwgKHNpemVv
ZihyZXN1bHQpICogOCAtIGZsYWdDb3VudCkpIC0gMTsKLQotICAgICAgICAvLyBUaGlzIGF2b2lk
cyBldmVyIHJldHVybmluZyBhIGhhc2ggY29kZSBvZiAwLCBzaW5jZSB0aGF0IGlzIHVzZWQgdG8K
LSAgICAgICAgLy8gc2lnbmFsICJoYXNoIG5vdCBjb21wdXRlZCB5ZXQiLiBTZXR0aW5nIHRoZSBo
aWdoIGJpdCBtYWludGFpbnMKLSAgICAgICAgLy8gcmVhc29uYWJsZSBmaWRlbGl0eSB0byBhIGhh
c2ggY29kZSBvZiAwIGJlY2F1c2UgaXQgaXMgbGlrZWx5IHRvIHlpZWxkCi0gICAgICAgIC8vIGV4
YWN0bHkgMCB3aGVuIGhhc2ggbG9va3VwIG1hc2tzIG91dCB0aGUgaGlnaCBiaXRzLgotICAgICAg
ICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgIHJlc3VsdCA9IDB4ODAwMDAwMDAgPj4gZmxhZ0Nv
dW50OwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0Ci0gICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBhdmFsYW5jaGVCaXRz
KCk7Ci0KLSAgICAgICAgLy8gVGhpcyBhdm9pZHMgZXZlciByZXR1cm5pbmcgYSBoYXNoIGNvZGUg
b2YgMCwgc2luY2UgdGhhdCBpcyB1c2VkIHRvCi0gICAgICAgIC8vIHNpZ25hbCAiaGFzaCBub3Qg
Y29tcHV0ZWQgeWV0Ii4gU2V0dGluZyB0aGUgaGlnaCBiaXQgbWFpbnRhaW5zCi0gICAgICAgIC8v
IHJlYXNvbmFibGUgZmlkZWxpdHkgdG8gYSBoYXNoIGNvZGUgb2YgMCBiZWNhdXNlIGl0IGlzIGxp
a2VseSB0byB5aWVsZAotICAgICAgICAvLyBleGFjdGx5IDAgd2hlbiBoYXNoIGxvb2t1cCBtYXNr
cyBvdXQgdGhlIGhpZ2ggYml0cy4KLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICBy
ZXN1bHQgPSAweDgwMDAwMDAwOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiBzdGF0aWMgdW5zaWdu
ZWQgY29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVu
Z3RoKQotICAgIHsKLSAgICAgICAgU3RyaW5nSGFzaGVyIGhhc2hlcjsKLSAgICAgICAgaGFzaGVy
LmFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgQ29udmVydGVyPihkYXRhLCBsZW5ndGgp
OwotICAgICAgICByZXR1cm4gaGFzaGVyLmhhc2hXaXRoVG9wOEJpdHNNYXNrZWQoKTsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hhciBDb252ZXJ0ZXIoVCk+IHN0YXRpYyB1
bnNpZ25lZCBjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhjb25zdCBUKiBkYXRhKQotICAgIHsK
LSAgICAgICAgU3RyaW5nSGFzaGVyIGhhc2hlcjsKLSAgICAgICAgaGFzaGVyLmFkZENoYXJhY3Rl
cnNBc3N1bWluZ0FsaWduZWQ8VCwgQ29udmVydGVyPihkYXRhKTsKLSAgICAgICAgcmV0dXJuIGhh
c2hlci5oYXNoV2l0aFRvcDhCaXRzTWFza2VkKCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKGNvbnN0
IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb21wdXRl
SGFzaEFuZE1hc2tUb3A4Qml0czxULCBkZWZhdWx0Q29udmVydGVyPihkYXRhLCBsZW5ndGgpOwot
ICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRl
SGFzaEFuZE1hc2tUb3A4Qml0cyhjb25zdCBUKiBkYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzPFQsIGRlZmF1bHRDb252ZXJ0ZXI+KGRhdGEpOwot
ICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFVDaGFyIENvbnZlcnRlcihUKT4gc3Rh
dGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkK
LSAgICB7Ci0gICAgICAgIFN0cmluZ0hhc2hlciBoYXNoZXI7Ci0gICAgICAgIGhhc2hlci5hZGRD
aGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIENvbnZlcnRlcj4oZGF0YSwgbGVuZ3RoKTsKLSAg
ICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goY29u
c3QgVCogZGF0YSkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0hhc2hlciBoYXNoZXI7Ci0gICAgICAg
IGhhc2hlci5hZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIENvbnZlcnRlcj4oZGF0YSk7
Ci0gICAgICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBUKiBkYXRhLCB1bnNp
Z25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2g8VCwgZGVmYXVs
dENvbnZlcnRlcj4oZGF0YSwgbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3QgVCogZGF0YSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBjb21wdXRlSGFzaDxULCBkZWZhdWx0Q29udmVydGVyPihkYXRhKTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaE1lbW9yeShjb25zdCB2b2lkKiBkYXRhLCB1
bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogV2h5IGRvZXMgdGhpcyBm
dW5jdGlvbiB1c2UgdGhlIHZlcnNpb24gb2YgdGhlIGhhc2ggdGhhdCBkcm9wcyB0aGUgdG9wIDgg
Yml0cz8KLSAgICAgICAgLy8gV2Ugd2FudCB0aGF0IGZvciBhbGwgc3RyaW5nIGhhc2hpbmcgc28g
d2UgY2FuIHVzZSB0aG9zZSBiaXRzIGluIFN0cmluZ0ltcGwgYW5kIGhhc2gKLSAgICAgICAgLy8g
c3RyaW5ncyBjb25zaXN0ZW50bHksIGJ1dCBJIGRvbid0IHNlZSB3aHkgd2UnZCB3YW50IHRoYXQg
Zm9yIGdlbmVyYWwgbWVtb3J5IGhhc2hpbmcuCi0gICAgICAgIEFTU0VSVCghKGxlbmd0aCAlIDIp
KTsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzPFVDaGFyPihzdGF0
aWNfY2FzdDxjb25zdCBVQ2hhcio+KGRhdGEpLCBsZW5ndGggLyBzaXplb2YoVUNoYXIpKTsKLSAg
ICB9Ci0KLSAgICB0ZW1wbGF0ZTxzaXplX3QgbGVuZ3RoPiBzdGF0aWMgdW5zaWduZWQgaGFzaE1l
bW9yeShjb25zdCB2b2lkKiBkYXRhKQotICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydCghKGxl
bmd0aCAlIDIpLCAibGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0d28hIik7Ci0gICAgICAg
IHJldHVybiBoYXNoTWVtb3J5KGRhdGEsIGxlbmd0aCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IHN0YXRpYyBVQ2hhciBkZWZhdWx0Q29udmVydGVyKFVDaGFyIGNoYXJhY3RlcikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBjaGFyYWN0ZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIFVDaGFyIGRlZmF1
bHRDb252ZXJ0ZXIoTENoYXIgY2hhcmFjdGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNoYXJh
Y3RlcjsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBhdmFsYW5jaGVCaXRzKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1faGFzaDsKLQotICAgICAgICAvLyBIYW5kbGUg
ZW5kIGNhc2UuCi0gICAgICAgIGlmIChtX2hhc1BlbmRpbmdDaGFyYWN0ZXIpIHsKLSAgICAgICAg
ICAgIHJlc3VsdCArPSBtX3BlbmRpbmdDaGFyYWN0ZXI7Ci0gICAgICAgICAgICByZXN1bHQgXj0g
cmVzdWx0IDw8IDExOwotICAgICAgICAgICAgcmVzdWx0ICs9IHJlc3VsdCA+PiAxNzsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIEZvcmNlICJhdmFsYW5jaGluZyIgb2YgZmluYWwgMzEgYml0cy4K
LSAgICAgICAgcmVzdWx0IF49IHJlc3VsdCA8PCAzOwotICAgICAgICByZXN1bHQgKz0gcmVzdWx0
ID4+IDU7Ci0gICAgICAgIHJlc3VsdCBePSByZXN1bHQgPDwgMjsKLSAgICAgICAgcmVzdWx0ICs9
IHJlc3VsdCA+PiAxNTsKLSAgICAgICAgcmVzdWx0IF49IHJlc3VsdCA8PCAxMDsKLQotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHVuc2lnbmVkIG1faGFzaDsKLSAgICBib29s
IG1faGFzUGVuZGluZ0NoYXJhY3RlcjsKLSAgICBVQ2hhciBtX3BlbmRpbmdDaGFyYWN0ZXI7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpTdHJpbmdIYXNoZXI7Ci0KLSNl
bmRpZiAvLyBXVEZfU3RyaW5nSGFzaGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvQ1N0cmluZy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuY3BwCmluZGV4IGQ2
MGU1YTljZDk3YTA0NGMwYmVhOTBiYmQ4MmQ4ZTAwMzc4ZDhmOWUuLjAwMzMzMTgxNjJhMjUzZjg0
MDQ3MmE5NGU4YWFhYmJjY2NhMmExMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
Q1N0cmluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmNwcApAQCAtMjgs
NyArMjgsNyBAQAogI2luY2x1ZGUgIkNTdHJpbmcuaCIKIAogI2luY2x1ZGUgPHN0cmluZy5oPgot
I2luY2x1ZGUgPHd0Zi9TdHJpbmdIYXNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAK
IG5hbWVzcGFjZSBXVEYgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0hhc2guaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oCmluZGV4IGUxNjkyYzcz
ZmU0Y2M2YTg3MDgyYzg2MGE5Y2RkOTRiNzVkMzlhZWEuLjU5MGZmNWJkNDhmNjc5MjgyYzZmM2Fm
NTRlMGY0OWU0OGYyZDQ0YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
SGFzaC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oCkBAIC0yNCw3ICsy
NCw3IEBACiAKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaFRyYWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdIYXNoZXIuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1w
bC5oCmluZGV4IDAyMjNjOTZhYzA5MTdhNjE5N2E0YWI5OTY1MDU5OWQ4ZTlmYmRjYTUuLjY5NDQy
YzZkNmRkYjAwZDMyMzI3ODNjNzQ0YTFlMTkyM2RhOWVjYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
SW1wbC5oCkBAIC0yOCw5ICsyOCw5IEBACiAjaW5jbHVkZSA8dW5pY29kZS91c3RyaW5nLmg+CiAj
aW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nSGFzaGVyLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NvbnZlcnNpb25Nb2Rl
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29tbW9uLmg+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi91bmljb2RlL1VURjguY3BwIGIvU291cmNlL1dURi93dGYvdW5pY29kZS9VVEY4
LmNwcAppbmRleCBkNjdmMTdmZmRjMmVjOTc1MzU3MmZmZDVhM2NhZmFmOTllOTdmYjg0Li41NDA3
NDAxZTY3MThiOTU4OWU2YTExOWU2YmEwYWIzZWI1ZTg2Y2YzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi91bmljb2RlL1VURjguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvVVRG
OC5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJVVEY4LmgiCiAKICNpbmNsdWRlICJB
U0NJSUNUeXBlLmgiCi0jaW5jbHVkZSA8d3RmL1N0cmluZ0hhc2hlci5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCiBu
YW1lc3BhY2UgV1RGIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0RGQU1pbmltaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9E
RkFNaW5pbWl6ZXIuY3BwCmluZGV4IGNjMWVhYTA1OGU3OTgwMWZmYzc5YTExNTVjZWE0YWRlNWEw
NWRmNzYuLmU5ZWYxMzdkNDA1MWE5NjgwNjdkNGU1NjA0NTBmY2QxMGFjODljZWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQU1pbmltaXplci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBTWluaW1pemVyLmNwcApAQCAt
MzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIk11dGFibGVSYW5nZUxpc3QuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1N0
cmluZ0hhc2hlci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0hhc2hhYmxlQWN0aW9uTGlzdC5oIGIvU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvSGFzaGFibGVBY3Rpb25MaXN0LmgKaW5kZXggMWRiOWQ5MzYzN2Ux
NmRlMDgxZmMwOWI4NWIyOWE0ZjI4OGVmZTQwMC4uNzAyYjI5NTE3Njg0ODk2NjVhZGI1MDliZmZm
ZTgxNTBjZDQwZWJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvSGFzaGFibGVBY3Rpb25MaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvSGFzaGFibGVBY3Rpb25MaXN0LmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgSGFz
aGFibGVBY3Rpb25MaXN0X2gKICNkZWZpbmUgSGFzaGFibGVBY3Rpb25MaXN0X2gKIAotI2luY2x1
ZGUgPHd0Zi9TdHJpbmdIYXNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmVhdHVyZVNldHRpbmdzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGZWF0dXJlU2V0dGluZ3MuY3BwCmlu
ZGV4IDllMTk0OWZjNDRhYzQ3NDk2OTg0ZGI3YzA4YTdmMjRmNDkwOGMxODYuLmQwYTA2ODkxNjE2
NmQ4MGVhMTIxNGZkYzJmYjIwMDZkNGE2OGRiNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGZWF0dXJlU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGZWF0dXJlU2V0dGluZ3MuY3BwCkBAIC00Niwx
MSArNDYsNiBAQCBib29sIEZvbnRGZWF0dXJlOjpvcGVyYXRvcjwoY29uc3QgRm9udEZlYXR1cmUm
IG90aGVyKSBjb25zdAogICAgIHJldHVybiAobV90YWcuaW1wbCgpIDwgb3RoZXIubV90YWcuaW1w
bCgpKSB8fCAobV90YWcuaW1wbCgpID09IG90aGVyLm1fdGFnLmltcGwoKSAmJiBtX3ZhbHVlIDwg
b3RoZXIubV92YWx1ZSk7CiB9CiAKLXVuc2lnbmVkIEZvbnRGZWF0dXJlOjpoYXNoKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gV1RGOjpQYWlySGFzaDxBdG9taWNTdHJpbmcsIHVuc2lnbmVkPjo6aGFz
aChzdGQ6Om1ha2VfcGFpcihtX3RhZywgbV92YWx1ZSkpOwotfQotCiBSZWY8Rm9udEZlYXR1cmVT
ZXR0aW5ncz4gRm9udEZlYXR1cmVTZXR0aW5nczo6Y3JlYXRlKCkKIHsKICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBGb250RmVhdHVyZVNldHRpbmdzKTsKQEAgLTY5LDEwICs2NCwxMiBAQCB2b2lk
IEZvbnRGZWF0dXJlU2V0dGluZ3M6Omluc2VydChGb250RmVhdHVyZSYmIGZlYXR1cmUpCiAKIHVu
c2lnbmVkIEZvbnRGZWF0dXJlU2V0dGluZ3M6Omhhc2goKSBjb25zdAogewotICAgIHVuc2lnbmVk
IHJlc3VsdCA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKLSAg
ICAgICAgcmVzdWx0ID0gV1RGOjpwYWlySW50SGFzaChyZXN1bHQsIGF0KGkpLmhhc2goKSk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICBJbnRlZ2VySGFzaGVyIGhhc2hlcjsKKyAgICBmb3IgKGF1
dG8mIGZlYXR1cmUgOiBtX2xpc3QpIHsKKyAgICAgICAgaGFzaGVyLmFkZChmZWF0dXJlLnRhZygp
Lmhhc2goKSk7CisgICAgICAgIGhhc2hlci5hZGQoZmVhdHVyZS52YWx1ZSgpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGZWF0dXJlU2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGZWF0dXJlU2V0dGluZ3MuaAppbmRleCBjOGEzZDgw
MWFlNTM0NWJmNjUxN2RjMjM3MmU5YzBmNzc1NzQ2NDc2Li43MjIwNDI4ODdlNDZhZDM3ZGQ0OWQ1
OWU2YzUwMmU4NDk2ZmNiNjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250RmVhdHVyZVNldHRpbmdzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udEZlYXR1cmVTZXR0aW5ncy5oCkBAIC00NSw4ICs0NSw2IEBAIHB1Ymxp
YzoKICAgICBpbnQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAgICAgYm9vbCBl
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gdmFsdWUoKTsgfQogCi0gICAgdW5zaWduZWQgaGFzaCgp
IGNvbnN0OwotCiBwcml2YXRlOgogICAgIEF0b21pY1N0cmluZyBtX3RhZzsKICAgICBjb25zdCBp
bnQgbV92YWx1ZSB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YWRpZW50LmNwcAppbmRleCAyM2Q5YjMyMzI0NDQyOTcyNDVhMDZjYTdmZGZkYmJjYjJiZjVjZWMy
Li43Y2M1MjE1MjdiZTZiMWU3ZGFlY2JiYjY1N2I4M2M2ODVjODc2YTU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCkBAIC0zMCw3ICszMCw3IEBA
CiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaEZ1bmN0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdIYXNoZXIuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaGVyLmg+CiAKIHVzaW5nIFdURjo6cGFpckludEhhc2g7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoQ2FjaGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoQ2FjaGUuaAppbmRleCA4ODRkMmEyZTA4
ODQ1ZDI3MTYzYjlhMmQxNjg0NTc2Zjk2MDBiYTQ1Li44Y2Y2OGU3ZGEyZjBmNjc1NTMwMmNhODU5
NDI5MTE4NTYzOGI3NDIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9XaWR0aENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
V2lkdGhDYWNoZS5oCkBAIC0zMCw4ICszMCw4IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvU3RyaW5nSGFzaGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9VdGlsaXRpZXMu
anMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL1V0aWxpdGllcy5q
cwppbmRleCA2ZmFjOGNhNmY2NzU3OTI5NzFiZTJlNDE0M2U0NmNjODdhMDc1ODkyLi44OWIwZGEw
OTlhODc5YTExMThkMjEyZTgwNTEwN2UzMGQyODNiYmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL1V0aWxpdGllcy5qcworKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL1V0aWxpdGllcy5qcwpAQCAtNTg4LDcg
KzU4OCw3IEBAIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdHJpbmcucHJvdG90eXBlLCAiaGFzaCIs
CiB7CiAgICAgZ2V0OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICAvLyBNYXRjaGVzIHRoZSB3
dGYvU3RyaW5nSGFzaGVyLmggKFN1cGVyRmFzdEhhc2gpIGFsZ29yaXRobS4KKyAgICAgICAgLy8g
TWF0Y2hlcyB0aGUgd3RmL0hhc2hlci5oIChTdXBlckZhc3RIYXNoKSBhbGdvcml0aG0uCiAKICAg
ICAgICAgLy8gQXJiaXRyYXJ5IHN0YXJ0IHZhbHVlIHRvIGF2b2lkIG1hcHBpbmcgYWxsIDAncyB0
byBhbGwgMCdzLgogICAgICAgICBjb25zdCBzdHJpbmdIYXNoaW5nU3RhcnRWYWx1ZSA9IDB4OWUz
Nzc5Yjk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhl
ZERCL0lEQklkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRl
eGVkREIvSURCSWRlbnRpZmllci5oCmluZGV4IDIwNWVmN2U0ZDQ4NDBkODIxNGE0YzJlZDY3MjU2
NDQ1OWQzNTUzYWQuLjM5N2I4YmVlY2FhNTI3YmIyOWY5YTA5YzA0YWViYWQ5YTdhNDZiMGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvSURCSWRl
bnRpZmllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIv
SURCSWRlbnRpZmllci5oCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQogCiAjaW5jbHVkZSA8d3RmL0hhc2hU
cmFpdHMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nSGFzaGVyLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hlci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vSVBDL1N0cmluZ1JlZmVyZW5jZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9JUEMvU3RyaW5nUmVmZXJlbmNlLmNwcAppbmRleCAyNThiN2NkZDI3ODVlY2M2NmFhM2Zh
YjlmOWRjMjI2Y2U1ZjA4NWFlLi43MzYzY2VkOTQ2NWI5ZDMxMzU2M2VmZTIzM2JmODExMmQ4ODZj
YTVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvU3RyaW5nUmVmZXJl
bmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvU3RyaW5nUmVmZXJlbmNl
LmNwcApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgogI2lu
Y2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKLSNp
bmNsdWRlIDx3dGYvU3RyaW5nSGFzaGVyLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIElQQyB7Cg==
</data>
<flag name="review"
          id="284365"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>