<?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>14455</bug_id>
          
          <creation_ts>2007-06-28 22:14:16 -0700</creation_ts>
          <short_desc>Autogenerate the JS bindings for the StyleSheetList</short_desc>
          <delta_ts>2007-10-07 01:15:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>13779</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>5933</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-06-28 22:14:16 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>5934</commentid>
    <comment_count>1</comment_count>
      <attachid>15307</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-06-28 22:33:37 -0700</bug_when>
    <thetext>Created attachment 15307
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>5841</commentid>
    <comment_count>2</comment_count>
      <attachid>15307</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-06-30 11:37:41 -0700</bug_when>
    <thetext>Comment on attachment 15307
patch

+    HTMLStyleElement* element = thisObj-&gt;impl()-&gt;getNamedItem(propertyName);
+    return toJS(exec, element-&gt;sheet());

Looks like this won&apos;t do the right thing if element is 0. Maybe a pre-existing problem?

-    // IE also supports retrieving a stylesheet by name, using the name/id of the &lt;style&gt; tag
-    // (this is consistent with all the other collections)
-    // ### Bad implementation because returns a single element (are IDs always unique?)
-    // and doesn&apos;t look for name attribute (see implementation above).
-    // But unicity of stylesheet ids is good practice anyway ;)

Where did all these comments go?

+HTMLStyleElement* StyleSheetList::getNamedItem(const String&amp; name) const
+{
+    Element* element = m_doc-&gt;getElementById(name);

What guarantees the document in m_doc has not yet been destroyed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>5834</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-06-30 14:54:59 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 15307 [edit])
&gt; +    HTMLStyleElement* element = thisObj-&gt;impl()-&gt;getNamedItem(propertyName);
&gt; +    return toJS(exec, element-&gt;sheet());
&gt; 
&gt; Looks like this won&apos;t do the right thing if element is 0. Maybe a pre-existing
&gt; problem?

This will never be called if element is 0 as it is only called after the canGetItemsForName() function which checks.

&gt; -    // IE also supports retrieving a stylesheet by name, using the name/id of
&gt; the &lt;style&gt; tag
&gt; -    // (this is consistent with all the other collections)
&gt; -    // ### Bad implementation because returns a single element (are IDs always
&gt; unique?)
&gt; -    // and doesn&apos;t look for name attribute (see implementation above).
&gt; -    // But unicity of stylesheet ids is good practice anyway ;)
&gt; 
&gt; Where did all these comments go?

Oops, forgot to move that, fixing it.

&gt; +HTMLStyleElement* StyleSheetList::getNamedItem(const String&amp; name) const
&gt; +{
&gt; +    Element* element = m_doc-&gt;getElementById(name);
&gt; 
&gt; What guarantees the document in m_doc has not yet been destroyed?

Now, I am not 100% sure, but since Document is the only one that creates and the StyleSheetList and stores it and it should be deleted when it is destroyed this should not be an issue. 
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>5828</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-06-30 17:47:09 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; This will never be called if element is 0 as it is only called after the
&gt; canGetItemsForName() function which checks.

I&apos;d like to see a comment and perhaps an assertion to make that clear.

&gt; &gt; +HTMLStyleElement* StyleSheetList::getNamedItem(const String&amp; name) const
&gt; &gt; +{
&gt; &gt; +    Element* element = m_doc-&gt;getElementById(name);
&gt; &gt; 
&gt; &gt; What guarantees the document in m_doc has not yet been destroyed?
&gt; 
&gt; Now, I am not 100% sure, but since Document is the only one that creates and
&gt; the StyleSheetList and stores it and it should be deleted when it is destroyed
&gt; this should not be an issue. 

Unfortunately, that&apos;s not true. If some JavaScript code gets a reference to a StyleSheetList and then the document goes away, the JavaScript wrapper will keep the StyleSheetList alive. We need to add code to either ref the document (and make sure we don&apos;t create any circular references) or to zero out the reference to the document when the document is deleted.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2056</commentid>
    <comment_count>5</comment_count>
      <attachid>16012</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-08-18 00:04:04 -0700</bug_when>
    <thetext>Created attachment 16012
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1957</commentid>
    <comment_count>6</comment_count>
      <attachid>16012</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2007-08-19 13:06:26 -0700</bug_when>
    <thetext>Comment on attachment 16012
updated patch

Looks fine, r=me.
Don&apos;t forget to readd the comments though (regarding IE supports..) before comitting :-)

Greetings,
Niko</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57993</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-10-07 01:15:48 -0700</bug_when>
    <thetext>I added the comment back to the implementation and fixed the project file.  Then I landed this as r26094 on the feature-branch.  I expect that Wenig won&apos;t mind.  Just cleaning out the commit queue.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15307</attachid>
            <date>2007-06-28 22:33:37 -0700</date>
            <delta_ts>2007-08-18 00:04:04 -0700</delta_ts>
            <desc>patch</desc>
            <filename>autoStyleSheetList.diff</filename>
            <type>text/plain</type>
            <size>24860</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzg2NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMDctMDYtMjggIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBm
b3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NTUKKyAgICAgICAg
QXV0b2dlbmVyYXRlIHRoZSBKUyBiaW5kaW5ncyBmb3IgdGhlIFN0eWxlU2hlZXRMaXN0CisKKyAg
ICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAg
ICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1N0eWxl
U2hlZXRMaXN0Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1N0eWxlU2hl
ZXRMaXN0OjpjYW5HZXRJdGVtc0Zvck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTdHlsZVNo
ZWV0TGlzdDo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMva2pzX2Nzcy5jcHA6
CisgICAgICAgICogYmluZGluZ3MvanMva2pzX2Nzcy5oOgorICAgICAgICAqIGJpbmRpbmdzL29i
amMvRE9NVXRpbGl0eS5tbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbToKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldExpc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVTaGVldExpc3Q6OlN0eWxlU2hlZXRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlU2hlZXRMaXN0OjpnZXROYW1lZEl0ZW0pOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0
TGlzdC5oOiBBZGQgRG9jdW1lbnQgbWVtYmVyIHZhcmlhYmxlIGFuZAorICAgICAgICBnZXROYW1l
ZEl0ZW0gZnVuY3Rpb24gdG8gYWNjb21tb2RhdGUgdGhlIG9kZCBqYXZhc2NyaXB0IAorICAgICAg
ICBuYW1lIGdldHRlciBmdW5jdGlvbmFsaXR5LgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0TGlz
dC5pZGw6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpEb2N1bWVudCk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOiBBZGQgU3R5
bGVTaGVldExpc3RDb25zdHJ1Y3Rvci4KKwogMjAwNy0wNi0yOCAgR2VvZmZyZXkgR2FyZW4gIDxn
Z2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFr
LgpJbmRleDogV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24gMjM4NjUpCisrKyBXZWJDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTUzNSw2ICs1MzUsNyBAQCBhbGwgOiBc
CiAgICAgSlNTVkdab29tRXZlbnQuaCBcCiAgICAgSlNTY3JlZW4uaCBcCiAgICAgSlNTdHlsZVNo
ZWV0LmggXAorICAgIEpTU3R5bGVTaGVldExpc3QuaCBcCiAgICAgSlNUZXh0LmggXAogICAgIEpT
VGV4dEV2ZW50LmggXAogICAgIEpTVHJlZVdhbGtlci5oIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gMjM4NjUp
CisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNiArMTY1LDcg
QEAgSURMX0JJTkRJTkdTICs9IFwKICAgICBjc3MvTWVkaWFMaXN0LmlkbCBcCiAgICAgY3NzL1Jl
Y3QuaWRsIFwKICAgICBjc3MvU3R5bGVTaGVldC5pZGwgXAorICAgIGNzcy9TdHlsZVNoZWV0TGlz
dC5pZGwgXAogICAgIGRvbS9BdHRyLmlkbCBcCiAgICAgZG9tL0NoYXJhY3RlckRhdGEuaWRsIFwK
ICAgICBkb20vQ0RBVEFTZWN0aW9uLmlkbCBcCkBAIC0zMDEsNiArMzAyLDcgQEAgU09VUkNFUyAr
PSBcCiAgICAgYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwIFwKICAgICBiaW5k
aW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNTdHlsZVNo
ZWV0Q3VzdG9tLmNwcCBcCisgICAgYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5j
cHAgXAogICAgIGJpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAgXAogICAgIGJpbmRp
bmdzL2pzL0pTWE1MSHR0cFJlcXVlc3QuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU1hTTFRQcm9j
ZXNzb3IuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2
aXNpb24gMjM4NjUpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjM0LDYgKzEyMzQsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2pl
Y3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU1N0eWxlU2hlZXRMaXN0LmNwcCIKKwkJCQk+CisJCQk8
L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9i
alwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU1N0eWxlU2hlZXRMaXN0LmgiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0
RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNTVkdBRWxlbWVudC5jcHAi
CiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtNzIwNiw2ICs3MjE0LDEwIEBACiAJCQkJCT4KIAkJCQk8
L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU1N0
eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQog
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTU1ZHRWxlbWVudFdyYXBwZXJGYWN0
b3J5LmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMzg2NSkKKysrIFdlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yODE1LDYgKzI4
MTUsOSBAQAogCQlCQzZFMkIxQTBDMDRCOTM2MDA0NDRFRjggLyogRE9NSFRNTERvY3VtZW50UHJp
dmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM2
RTJCMTkwQzA0QjkzNjAwNDQ0RUY4IC8qIERPTUhUTUxEb2N1bWVudFByaXZhdGUuaCAqLzsgfTsK
IAkJQkM2RTJCMjkwQzA0Qjk1NDAwNDQ0RUY4IC8qIERPTUhUTUxEb2N1bWVudFByaXZhdGUuaCBp
biBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDNkUyQjE5MEMwNEI5MzYwMDQ0NEVGOCAvKiBET01IVE1MRG9jdW1lbnRQcml2YXRlLmgg
Ki87IH07CiAJCUJDN0Y0NEE4MEI5RTMyNEUwMEE5RDA4MSAvKiBJbWFnZU9ic2VydmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdGNDRBNzBCOUUz
MjRFMDBBOUQwODEgLyogSW1hZ2VPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDN0ZGRTVBMEMzNEM0RUUwMEE0MkY0OSAvKiBKU1N0
eWxlU2hlZXRMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDN0ZGRTU4MEMzNEM0RUUwMEE0MkY0OSAvKiBKU1N0eWxlU2hlZXRMaXN0LmNwcCAq
LzsgfTsKKwkJQkM3RkZFNUIwQzM0QzRFRTAwQTQyRjQ5IC8qIEpTU3R5bGVTaGVldExpc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDN0ZGRTU5MEMz
NEM0RUUwMEE0MkY0OSAvKiBKU1N0eWxlU2hlZXRMaXN0LmggKi87IH07CisJCUJDN0ZGRTVEMEMz
NEM1MUEwMEE0MkY0OSAvKiBKU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDN0ZGRTVDMEMzNEM1MUEwMEE0MkY0
OSAvKiBKU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJQkM5MjZGODAwQzA1NTI0
NzAwODI3NzZCIC8qIEpTSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzkyNkY3RTBDMDU1MjQ3MDA4Mjc3NkIgLyog
SlNIVE1MRnJhbWVTZXRFbGVtZW50LmNwcCAqLzsgfTsKIAkJQkM5MjZGODEwQzA1NTI0NzAwODI3
NzZCIC8qIEpTSFRNTEZyYW1lU2V0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5MjZGN0YwQzA1NTI0NzAwODI3NzZCIC8qIEpTSFRNTEZy
YW1lU2V0RWxlbWVudC5oICovOyB9OwogCQlCQzk0RDEwODBDMjc0Rjg4MDA2QkM2MTcgLyogUGxh
dGZvcm1TY3JlZW5NYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzk0RDEwNzBDMjc0Rjg4MDA2QkM2MTcgLyogUGxhdGZvcm1TY3JlZW5NYWMubW0g
Ki87IH07CkBAIC02MTM0LDYgKzYxMzcsOSBAQAogCQlCQzdCMkFGODA0NTA4MjQxMDBBODAwMEYg
LyogU2Nyb2xsQmFyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNjcm9sbEJhci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQkM3QjJBRjkwNDUwODI0MTAwQTgwMDBGIC8qIFBsYXRm
b3JtU2Nyb2xsQmFyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gUGxhdGZvcm1TY3JvbGxCYXJNYWMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlCQzdGNDRBNzBC
OUUzMjRFMDBBOUQwODEgLyogSW1hZ2VPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW1hZ2VPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlCQzdGRkU1ODBDMzRDNEVFMDBBNDJGNDkgLyogSlNTdHlsZVNoZWV0TGlzdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTdHlsZVNoZWV0TGlzdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDN0ZGRTU5MEMzNEM0RUUwMEE0MkY0OSAvKiBK
U1N0eWxlU2hlZXRMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0
eWxlU2hlZXRMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDN0ZGRTVDMEMz
NEM1MUEwMEE0MkY0OSAvKiBKU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3R5bGVTaGVldExpc3RDdXN0b20uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzkyNkY3RTBDMDU1MjQ3MDA4Mjc3NkIgLyogSlNI
VE1MRnJhbWVTZXRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQzkyNkY3RjBDMDU1MjQ3MDA4Mjc3NkIgLyogSlNIVE1MRnJhbWVTZXRFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0hUTUxGcmFtZVNldEVsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM5NEQxMDcwQzI3NEY4ODAwNkJDNjE3
IC8qIFBsYXRmb3JtU2NyZWVuTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFBsYXRmb3JtU2NyZWVuTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNjUxNSw2ICs2NTIxLDggQEAKIAkJMTRERkIzM0YwQTdERjc2MzAwMThGNzY5IC8qIERl
cml2ZWQgU291cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJQkM3RkZFNTgwQzM0QzRFRTAwQTQyRjQ5IC8qIEpTU3R5bGVTaGVldExpc3QuY3BwICov
LAorCQkJCUJDN0ZGRTU5MEMzNEM0RUUwMEE0MkY0OSAvKiBKU1N0eWxlU2hlZXRMaXN0LmggKi8s
CiAJCQkJNjVERjMxRDgwOUQxQzEyMjAwMEJFMzI1IC8qIEpTQXR0ci5jcHAgKi8sCiAJCQkJNjVE
RjMxRDkwOUQxQzEyMzAwMEJFMzI1IC8qIEpTQXR0ci5oICovLAogCQkJCUJDMTI0RUZEMEMyNjQ0
N0EwMDlFMjM0OSAvKiBKU0JhckluZm8uY3BwICovLApAQCAtOTM4Niw2ICs5Mzk0LDcgQEAKIAkJ
CQkxQTc1MEREMzBBOTBFNzI5MDAwRkYyMTUgLyogSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwICov
LAogCQkJCUJDRDlDMjYxMEMxN0FBNjcwMDVDOTBBMiAvKiBKU05vZGVMaXN0Q3VzdG9tLmNwcCAq
LywKIAkJCQlCQzk4QTI3QzBDMEM5OTUwMDA0QkVCRjcgLyogSlNTdHlsZVNoZWV0Q3VzdG9tLmNw
cCAqLywKKwkJCQlCQzdGRkU1QzBDMzRDNTFBMDBBNDJGNDkgLyogSlNTdHlsZVNoZWV0TGlzdEN1
c3RvbS5jcHAgKi8sCiAJCQkJQjI1REZBQUUwQjJFMjkyOTAwMEU2NTEwIC8qIEpTU1ZHTWF0cml4
Q3VzdG9tLmNwcCAqLywKIAkJCQlCMkM5NkQ4QzBCM0FGMkI3MDA1RTgwRUMgLyogSlNTVkdQYXRo
U2VnQ3VzdG9tLmNwcCAqLywKIAkJCQlCMjk3QkM2RjBCM0MxNENGMDA0NUE1OTAgLyogSlNTVkdQ
YXRoU2VnTGlzdEN1c3RvbS5jcHAgKi8sCkBAIC0xMTY0MCw2ICsxMTY0OSw3IEBACiAJCQkJQkM5
NEQxNTcwQzI3NUNBQjAwNkJDNjE3IC8qIEdsb2JhbEhpc3RvcnkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDNUE4Njg1MEMzMzY3NjAwMEVFQTY0OSAvKiBET01TZWxlY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDNUE4NkI2MEMzMzY3RTgwMEVFQTY0OSAvKiBKU0RPTVNlbGVjdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQkM3RkZFNUIwQzM0QzRFRTAwQTQyRjQ5IC8qIEpTU3R5bGVTaGVl
dExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTMwNzAsNiArMTMwODAsOCBAQAogCQkJCUJDRUZB
RjRFMEMzMTdFNjkwMEZBODFGNiAvKiBKU0V2ZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDNUE4Njg0MEMzMzY3NjAwMEVFQTY0OSAvKiBET01TZWxlY3Rpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkM1QTg2QjUwQzMzNjdFODAwRUVBNjQ5IC8qIEpTRE9NU2VsZWN0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUJDN0ZGRTVBMEMzNEM0RUUwMEE0MkY0OSAvKiBKU1N0eWxl
U2hlZXRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJDN0ZGRTVEMEMzNEM1MUEwMEE0MkY0
OSAvKiBKU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldExpc3RDdXN0b20uY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkpTU3R5bGVTaGVldExpc3QuaCIKKworI2luY2x1ZGUgIkhUTUxTdHls
ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJKU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJTdHlsZVNo
ZWV0LmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitib29sIEpTU3R5bGVTaGVldExpc3Q6OmNhbkdldEl0ZW1zRm9yTmFtZShLSlM6OkV4ZWNT
dGF0ZSosIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWV0TGlzdCwgY29uc3QgS0pTOjpJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIHN0eWxlU2hlZXRMaXN0LT5nZXROYW1l
ZEl0ZW0ocHJvcGVydHlOYW1lKTsKK30KKworS0pTOjpKU1ZhbHVlKiBKU1N0eWxlU2hlZXRMaXN0
OjpuYW1lR2V0dGVyKEtKUzo6RXhlY1N0YXRlKiBleGVjLCBLSlM6OkpTT2JqZWN0KiwgY29uc3Qg
S0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIEpTU3R5bGVTaGVldExpc3QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1N0
eWxlU2hlZXRMaXN0Kj4oc2xvdC5zbG90QmFzZSgpKTsKKyAgICBIVE1MU3R5bGVFbGVtZW50KiBl
bGVtZW50ID0gdGhpc09iai0+aW1wbCgpLT5nZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lKTsKKyAg
ICByZXR1cm4gdG9KUyhleGVjLCBlbGVtZW50LT5zaGVldCgpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfY3NzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19jc3MuY3BwCShyZXZpc2lvbiAyMzg2NSkK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2Nzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDE2ICsyNSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAia2pzX2Nzcy5oIgog
Ci0jaW5jbHVkZSAiQ1NTUnVsZS5oIgotI2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCi0jaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MU3R5
bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJK
U0NTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5jbHVkZSAiSlNDU1NSdWxlLmgiCi0jaW5jbHVkZSAi
SlNDU1NSdWxlTGlzdC5oIgotI2luY2x1ZGUgIkpTU3R5bGVTaGVldC5oIgotI2luY2x1ZGUgIlN0
eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAia2pzX2RvbS5oIgogCiAjaW5jbHVkZSAia2pzX2Nz
cy5sdXQuaCIKQEAgLTQyLDEyMiArMzQsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgS0pTOwotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotY29uc3QgQ2xh
c3NJbmZvIEpTU3R5bGVTaGVldExpc3Q6OmluZm8gPSB7ICJTdHlsZVNoZWV0TGlzdCIsIDAsICZK
U1N0eWxlU2hlZXRMaXN0VGFibGUsIDAgfTsKLQotLyoKLUBiZWdpbiBKU1N0eWxlU2hlZXRMaXN0
VGFibGUgMgotICBsZW5ndGggICAgICAgIFdlYkNvcmU6OkpTU3R5bGVTaGVldExpc3Q6Okxlbmd0
aCAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGl0ZW0gICAgICAgICAgV2ViQ29yZTo6SlNT
dHlsZVNoZWV0TGlzdDo6SXRlbSAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQotQGVuZAot
Ki8KLQotS0pTX0lNUExFTUVOVF9QUk9UT1RZUEVfRlVOQ1RJT04oSlNTdHlsZVNoZWV0TGlzdEZ1
bmMpIC8vIG5vdCByZWFsbHkgYSBwcm90b3R5cGUsIGJ1dCBkb2Vzbid0IG1hdHRlcgotCi1KU1N0
eWxlU2hlZXRMaXN0OjpKU1N0eWxlU2hlZXRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgU3R5bGVTaGVl
dExpc3QqIHN0eWxlU2hlZXRMaXN0LCBEb2N1bWVudCogZG9jKQotICAgIDogbV9pbXBsKHN0eWxl
U2hlZXRMaXN0KQotICAgICwgbV9kb2MoZG9jKSAKLXsKLSAgICBzZXRQcm90b3R5cGUoZXhlYy0+
bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKSk7Ci19Ci0KLUpT
U3R5bGVTaGVldExpc3Q6On5KU1N0eWxlU2hlZXRMaXN0KCkKLXsKLSAgICBTY3JpcHRJbnRlcnBy
ZXRlcjo6Zm9yZ2V0RE9NT2JqZWN0KG1faW1wbC5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUqIEpTU3R5
bGVTaGVldExpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Ci17Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgICAgICBjYXNlIExlbmd0aDoKLSAg
ICAgICAgICAgIHJldHVybiBqc051bWJlcihtX2ltcGwtPmxlbmd0aCgpKTsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotfQotCi1KU1ZhbHVlKiBKU1N0eWxlU2hlZXRMaXN0
OjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Ci17Ci0gICAgSlNTdHlsZVNoZWV0TGlzdCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTU3R5bGVT
aGVldExpc3QqPihzbG90LnNsb3RCYXNlKCkpOwotICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNP
YmotPm1faW1wbC0+aXRlbShzbG90LmluZGV4KCkpKTsKLX0KLQotSlNWYWx1ZSogSlNTdHlsZVNo
ZWV0TGlzdDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9i
amVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCi17Ci0gICAgSlNTdHlsZVNoZWV0TGlzdCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpT
U3R5bGVTaGVldExpc3QqPihzbG90LnNsb3RCYXNlKCkpOwotICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSB0aGlzT2JqLT5tX2RvYy0+Z2V0RWxlbWVudEJ5SWQocHJvcGVydHlOYW1lKTsKLSAgICByZXR1
cm4gdG9KUyhleGVjLCBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4oZWxlbWVudCktPnNo
ZWV0KCkpOwotfQotCi1ib29sIEpTU3R5bGVTaGVldExpc3Q6OmdldE93blByb3BlcnR5U2xvdChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQotewotICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRF
bnRyeSgmSlNTdHlsZVNoZWV0TGlzdFRhYmxlLCBwcm9wZXJ0eU5hbWUpOwotICAKLSAgICBpZiAo
ZW50cnkpIHsKLSAgICAgICAgc3dpdGNoKGVudHJ5LT52YWx1ZSkgewotICAgICAgICAgICAgY2Fz
ZSBMZW5ndGg6Ci0gICAgICAgICAgICAgICAgc2xvdC5zZXRTdGF0aWNFbnRyeSh0aGlzLCBlbnRy
eSwgc3RhdGljVmFsdWVHZXR0ZXI8SlNTdHlsZVNoZWV0TGlzdD4pOwotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgY2FzZSBJdGVtOgotICAgICAgICAgICAgICAgIHNs
b3Quc2V0U3RhdGljRW50cnkodGhpcywgZW50cnksIHN0YXRpY0Z1bmN0aW9uR2V0dGVyPEpTU3R5
bGVTaGVldExpc3RGdW5jPik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVldExpc3QgPSBtX2ltcGwu
Z2V0KCk7Ci0KLSAgICAvLyBSZXRyaWV2ZSBzdHlsZXNoZWV0IGJ5IGluZGV4Ci0gICAgYm9vbCBv
azsKLSAgICB1bnNpZ25lZCB1ID0gcHJvcGVydHlOYW1lLnRvVUludDMyKCZvayk7Ci0gICAgaWYg
KG9rICYmIHUgPCBzdHlsZVNoZWV0TGlzdC0+bGVuZ3RoKCkpIHsKLSAgICAgICAgc2xvdC5zZXRD
dXN0b21JbmRleCh0aGlzLCB1LCBpbmRleEdldHRlcik7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIC8vIElFIGFsc28gc3VwcG9ydHMgcmV0cmlldmluZyBhIHN0eWxlc2hlZXQg
YnkgbmFtZSwgdXNpbmcgdGhlIG5hbWUvaWQgb2YgdGhlIDxzdHlsZT4gdGFnCi0gICAgLy8gKHRo
aXMgaXMgY29uc2lzdGVudCB3aXRoIGFsbCB0aGUgb3RoZXIgY29sbGVjdGlvbnMpCi0gICAgLy8g
IyMjIEJhZCBpbXBsZW1lbnRhdGlvbiBiZWNhdXNlIHJldHVybnMgYSBzaW5nbGUgZWxlbWVudCAo
YXJlIElEcyBhbHdheXMgdW5pcXVlPykKLSAgICAvLyBhbmQgZG9lc24ndCBsb29rIGZvciBuYW1l
IGF0dHJpYnV0ZSAoc2VlIGltcGxlbWVudGF0aW9uIGFib3ZlKS4KLSAgICAvLyBCdXQgdW5pY2l0
eSBvZiBzdHlsZXNoZWV0IGlkcyBpcyBnb29kIHByYWN0aWNlIGFueXdheSA7KQotICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSBtX2RvYy0+Z2V0RWxlbWVudEJ5SWQocHJvcGVydHlOYW1lKTsKLSAgICBp
ZiAoZWxlbWVudCAmJiBlbGVtZW50LT5oYXNUYWdOYW1lKHN0eWxlVGFnKSkgewotICAgICAgICBz
bG90LnNldEN1c3RvbSh0aGlzLCBuYW1lR2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIERPTU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KLUpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBT
dHlsZVNoZWV0TGlzdCogc3R5bGVTaGVldExpc3QsIERvY3VtZW50KiBkb2MpCi17Ci0gICAgLy8g
Q2FuJ3QgdXNlIHRoZSBjYWNoZURPTU9iamVjdCBtYWNybyBiZWNhdXNlIG9mIHRoZSBkb2MgYXJn
dW1lbnQKLSAgICBpZiAoIXN0eWxlU2hlZXRMaXN0KQotICAgICAgICByZXR1cm4ganNOdWxsKCk7
Ci0KLSAgICBTY3JpcHRJbnRlcnByZXRlciogaW50ZXJwID0gc3RhdGljX2Nhc3Q8U2NyaXB0SW50
ZXJwcmV0ZXIqPihleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKSk7Ci0gICAgRE9NT2JqZWN0KiBy
ZXQgPSBpbnRlcnAtPmdldERPTU9iamVjdChzdHlsZVNoZWV0TGlzdCk7Ci0gICAgaWYgKHJldCkK
LSAgICAgICAgcmV0dXJuIHJldDsKLQotICAgIHJldCA9IG5ldyBKU1N0eWxlU2hlZXRMaXN0KGV4
ZWMsIHN0eWxlU2hlZXRMaXN0LCBkb2MpOwotICAgIGludGVycC0+cHV0RE9NT2JqZWN0KHN0eWxl
U2hlZXRMaXN0LCByZXQpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLUpTVmFsdWUqIEpTU3R5bGVT
aGVldExpc3RGdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0
aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQotewotICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMo
JkpTU3R5bGVTaGVldExpc3Q6OmluZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBUeXBlRXJyb3IpOwotCi0gICAgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZXRMaXN0ID0gc3Rh
dGljX2Nhc3Q8SlNTdHlsZVNoZWV0TGlzdCo+KHRoaXNPYmopLT5pbXBsKCk7Ci0gICAgaWYgKGlk
ID09IEpTU3R5bGVTaGVldExpc3Q6Okl0ZW0pCi0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIHN0
eWxlU2hlZXRMaXN0LT5pdGVtKGFyZ3NbMF0tPnRvSW50MzIoZXhlYykpKTsKLSAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBjb25zdCBDbGFzc0lu
Zm8gSlNSR0JDb2xvcjo6aW5mbyA9IHsgIlJHQkNvbG9yIiwgMCwgJkpTUkdCQ29sb3JUYWJsZSwg
MCB9OwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19jc3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19jc3MuaAkocmV2aXNpb24gMjM4NjUpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL2tqc19jc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNDIgKzI0LDEw
IEBACiAjZGVmaW5lIGtqc19jc3NfaAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJK
U1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJranNfYmluZGluZy5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLSAgICBjbGFzcyBDb3VudGVyOwotICAgIGNsYXNzIENTU1N0eWxlU2hlZXQ7Ci0g
ICAgY2xhc3MgU3R5bGVTaGVldDsKLSAgICBjbGFzcyBTdHlsZVNoZWV0TGlzdDsKLQotICAgIGNs
YXNzIEpTU3R5bGVTaGVldExpc3QgOiBwdWJsaWMgS0pTOjpET01PYmplY3QgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgSlNTdHlsZVNoZWV0TGlzdChLSlM6OkV4ZWNTdGF0ZSosIFN0eWxlU2hlZXRM
aXN0KiwgRG9jdW1lbnQqKTsKLSAgICAgICAgdmlydHVhbCB+SlNTdHlsZVNoZWV0TGlzdCgpOwot
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoS0pTOjpFeGVjU3RhdGUq
LCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBLSlM6OlByb3BlcnR5U2xvdCYpOwotICAgICAgICBL
SlM6OkpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUqLCBpbnQgdG9rZW4p
IGNvbnN0OwotICAgICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5Ci0gICAgICAgIHZpcnR1
YWwgY29uc3QgS0pTOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZv
OyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBLSlM6OkNsYXNzSW5mbyBpbmZvOwotCi0gICAgICAg
IGVudW0geyBJdGVtLCBMZW5ndGggfTsKLQotICAgICAgICBTdHlsZVNoZWV0TGlzdCogaW1wbCgp
IGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
c3RhdGljIEtKUzo6SlNWYWx1ZSogaW5kZXhHZXR0ZXIoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpT
T2JqZWN0KiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiwgY29uc3QgS0pTOjpQcm9wZXJ0eVNsb3Qm
KTsKLSAgICAgICAgc3RhdGljIEtKUzo6SlNWYWx1ZSogbmFtZUdldHRlcihLSlM6OkV4ZWNTdGF0
ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBjb25zdCBLSlM6OlBy
b3BlcnR5U2xvdCYpOwotCi0gICAgICAgIFJlZlB0cjxTdHlsZVNoZWV0TGlzdD4gbV9pbXBsOwot
ICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jOwotICAgIH07Ci0KLSAgICAvLyBUaGUgZG9j
dW1lbnQgaXMgb25seSB1c2VkIGZvciBnZXQtc3R5bGVzaGVldC1ieS1uYW1lIChtYWtlIG9wdGlv
bmFsIGlmIG5lY2Vzc2FyeSkKLSAgICBLSlM6OkpTVmFsdWUqIHRvSlMoS0pTOjpFeGVjU3RhdGUq
LCBTdHlsZVNoZWV0TGlzdCosIERvY3VtZW50Kik7Ci0KICAgICBjbGFzcyBKU1JHQkNvbG9yIDog
cHVibGljIEtKUzo6RE9NT2JqZWN0IHsKICAgICBwdWJsaWM6CiAgICAgICAgIEpTUkdCQ29sb3Io
S0pTOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb2xvcik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L29iamMvRE9NVXRpbGl0eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29iamMv
RE9NVXRpbGl0eS5tbQkocmV2aXNpb24gMjM4NjUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL29iamMv
RE9NVXRpbGl0eS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2ltcG9ydCAi
SlNSYW5nZS5oIgogI2ltcG9ydCAiSlNSZWN0LmgiCiAjaW1wb3J0ICJKU1N0eWxlU2hlZXQuaCIK
KyNpbXBvcnQgIkpTU3R5bGVTaGVldExpc3QuaCIKICNpbXBvcnQgIkpTVHJlZVdhbGtlci5oIgog
I2ltcG9ydCAiSlNYUGF0aEV4cHJlc3Npb24uaCIKICNpbXBvcnQgIkpTWFBhdGhSZXN1bHQuaCIK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2
aXNpb24gMjM4NjUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ0LDEyICsxNDQ0LDYgQEAgc3ViIE5hdGl2ZVRvSlNW
YWx1ZQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCR0eXBlIGVxICJTdHlsZVNoZWV0TGlz
dCIpIHsKLSAgICAgICAgJGltcGxJbmNsdWRlc3siU3R5bGVTaGVldExpc3QuaCJ9ID0gMTsKLSAg
ICAgICAgJGltcGxJbmNsdWRlc3sia2pzX2Nzcy5oIn0gPSAxOwotICAgICAgICByZXR1cm4gInRv
SlMoZXhlYywgV1RGOjpnZXRQdHIoJHZhbHVlKSwgaW1wKSI7Ci0gICAgfQotCiAgICAgaWYgKCR0
eXBlIGVxICJXaW5kb3ciKSB7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7Imtqc193aW5kb3cuaCJ9
ID0gMTsKICAgICAgICAgcmV0dXJuICJXaW5kb3c6OnJldHJpZXZlKFdURjo6Z2V0UHRyKCR2YWx1
ZSkpIjsKSW5kZXg6IFdlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAJKHJldmlzaW9uIDIzODY1KQorKysgV2Vi
Q29yZS9jc3MvU3R5bGVTaGVldExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBA
QAogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RF
LgogICoKICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMTksMTMgKzE5LDI1IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCiAgKiBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiU3R5bGVTaGVldExpc3QuaCIKIAogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhU
TUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK1N0eWxlU2hlZXRM
aXN0OjpTdHlsZVNoZWV0TGlzdChEb2N1bWVudCogZG9jKQorICAgIDogbV9kb2MoZG9jKQorewor
fQorCiBTdHlsZVNoZWV0TGlzdDo6flN0eWxlU2hlZXRMaXN0KCkKIHsKICAgICBmb3IgKERlcHJl
Y2F0ZWRQdHJMaXN0SXRlcmF0b3I8U3R5bGVTaGVldD4gaXQgKHN0eWxlU2hlZXRzKTsgaXQuY3Vy
cmVudCgpOyArK2l0KQpAQCAtNTYsNCArNjgsMTIgQEAgU3R5bGVTaGVldCogU3R5bGVTaGVldExp
c3Q6Oml0ZW0odW5zaWduZQogICAgIHJldHVybiBpbmRleCA8IGxlbmd0aCgpID8gc3R5bGVTaGVl
dHMuYXQoaW5kZXgpIDogMDsKIH0KIAorSFRNTFN0eWxlRWxlbWVudCogU3R5bGVTaGVldExpc3Q6
OmdldE5hbWVkSXRlbShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgRWxlbWVudCog
ZWxlbWVudCA9IG1fZG9jLT5nZXRFbGVtZW50QnlJZChuYW1lKTsKKyAgICBpZiAoZWxlbWVudCAm
JiBlbGVtZW50LT5oYXNUYWdOYW1lKHN0eWxlVGFnKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxTdHlsZUVsZW1lbnQqPihlbGVtZW50KTsKKyAgICByZXR1cm4gMDsKIH0KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5oCShyZXZpc2lvbiAyMzg2
NSkKKysrIFdlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
OCArMSw2IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRh
dGlvbiBmb3IgS0RFLgotICoKICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2Rl
Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsMTEgKzI2LDE0IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBIVE1MU3R5bGVFbGVtZW50
OwogY2xhc3MgU3R5bGVTaGVldDsKK2NsYXNzIFN0cmluZzsKIAotY2xhc3MgU3R5bGVTaGVldExp
c3QgOiBwdWJsaWMgU2hhcmVkPFN0eWxlU2hlZXRMaXN0PgoteworY2xhc3MgU3R5bGVTaGVldExp
c3QgOiBwdWJsaWMgU2hhcmVkPFN0eWxlU2hlZXRMaXN0PiB7CiBwdWJsaWM6CisgICAgU3R5bGVT
aGVldExpc3QoRG9jdW1lbnQqKTsKICAgICB+U3R5bGVTaGVldExpc3QoKTsKIAogICAgIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0OwpAQCAtNDEsOSArNDIsMTQgQEAgcHVibGljOgogICAgIHZvaWQg
YWRkKFN0eWxlU2hlZXQqKTsKICAgICB2b2lkIHJlbW92ZShTdHlsZVNoZWV0Kik7CiAKKyAgICBI
VE1MU3R5bGVFbGVtZW50KiBnZXROYW1lZEl0ZW0oY29uc3QgU3RyaW5nJikgY29uc3Q7CisKICAg
ICBEZXByZWNhdGVkUHRyTGlzdDxTdHlsZVNoZWV0PiBzdHlsZVNoZWV0czsKKworcHJpdmF0ZToK
KyAgICBEb2N1bWVudCogbV9kb2M7CiB9OwogCi19IC8vIG5hbWVzcGFjZQorfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBTdHlsZVNoZWV0TGlzdF9oCkluZGV4OiBX
ZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mv
U3R5bGVTaGVldExpc3QuaWRsCShyZXZpc2lvbiAyMzg2NSkKKysrIFdlYkNvcmUvY3NzL1N0eWxl
U2hlZXRMaXN0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpA
QCAtMjEsNyArMjEsNyBAQAogbW9kdWxlIHN0eWxlc2hlZXRzIHsKIAogICAgIC8vIEludHJvZHVj
ZWQgaW4gRE9NIExldmVsIDI6Ci0gICAgaW50ZXJmYWNlIFN0eWxlU2hlZXRMaXN0IHsKKyAgICBp
bnRlcmZhY2UgW0dlbmVyYXRlQ29uc3RydWN0b3IsIEhhc0luZGV4R2V0dGVyLCBIYXNOYW1lR2V0
dGVyXSBTdHlsZVNoZWV0TGlzdCB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25l
ZCBsb25nICAgIGxlbmd0aDsKICAgICAgICAgU3R5bGVTaGVldCAgICAgICAgIGl0ZW0oaW4gdW5z
aWduZWQgbG9uZyBpbmRleCk7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDIzODY1
KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksNyAr
MjQ5LDcgQEAgRG9jdW1lbnQ6OkRvY3VtZW50KERPTUltcGxlbWVudGF0aW9uKiBpbQogICAgIDog
Q29udGFpbmVyTm9kZSgwKQogICAgICwgbV9pbXBsZW1lbnRhdGlvbihpbXBsKQogICAgICwgbV9k
b210cmVlX3ZlcnNpb24oMCkKLSAgICAsIG1fc3R5bGVTaGVldHMobmV3IFN0eWxlU2hlZXRMaXN0
KQorICAgICwgbV9zdHlsZVNoZWV0cyhuZXcgU3R5bGVTaGVldExpc3QodGhpcykpCiAgICAgLCBt
X3RpdGxlKCIiKQogICAgICwgbV90aXRsZVNldEV4cGxpY2l0bHkoZmFsc2UpCiAgICAgLCBtX2lt
YWdlTG9hZEV2ZW50VGltZXIodGhpcywgJkRvY3VtZW50OjppbWFnZUxvYWRFdmVudFRpbWVyRmly
ZWQpCkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmlkbAkocmV2aXNpb24gMjM4NjUpCisrKyBXZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQCBtb2R1bGUgd2lu
ZG93IHsKICAgICAgICAgYXR0cmlidXRlIENvdW50ZXJDb25zdHJ1Y3RvciBDb3VudGVyOwogICAg
ICAgICBhdHRyaWJ1dGUgQ1NTUnVsZUxpc3RDb25zdHJ1Y3RvciBDU1NSdWxlTGlzdDsKICAgICAg
ICAgYXR0cmlidXRlIFJlY3RDb25zdHJ1Y3RvciBSZWN0OworICAgICAgICBhdHRyaWJ1dGUgU3R5
bGVTaGVldExpc3RDb25zdHJ1Y3RvciBTdHlsZVNoZWV0TGlzdDsKIAogICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoZSBjb21tZW50ZWQtb3V0IGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIGlu
dGVyZmFjZXMgbGlzdGVkIGluIERPTSBMZXZlbCAzIENvcmUgc3BlY2lmaWNhdGlvbi4KIC8vICAg
ICAgICBhdHRyaWJ1dGUgRE9NRXhjZXB0aW9uQ29uc3RydWN0b3IgRE9NRXhjZXB0aW9uOwpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjM4NjcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAwNy0wNi0yOCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFVwZGF0ZSB0ZXN0IGZvciBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDQ1NQorICAgICAgICBBdXRvZ2VuZXJhdGUgdGhlIEpTIGJpbmRpbmdzIGZvciB0aGUgU3R5bGVT
aGVldExpc3QKKworICAgICAgICAqIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1l
eHBlY3RlZC50eHQ6IENoYW5nZWQgZm9yIG5ldyBjb25zdHJ1Y3Rvci4KKwogMjAwNy0wNi0yOCAg
TWl0eiBQZXR0ZWwgIDxtaXR6QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmV0
aC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dp
bmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjM4NjUpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC04MjIsNiArODIyLDkgQEAgd2luZG93LlJlY3QgW29iamVjdCBSZWN0Q29u
c3RydWN0b3JdCiB3aW5kb3cuUmVjdC5wcm90b3R5cGUgW29iamVjdCBSZWN0UHJvdG90eXBlXQog
d2luZG93LlJlZmVyZW5jZUVycm9yIFtmdW5jdGlvbl0KIHdpbmRvdy5TdHlsZVNoZWV0IFtwcmlu
dGVkIGFib3ZlIGFzIHdpbmRvdy5DU1NTdHlsZVNoZWV0XQord2luZG93LlN0eWxlU2hlZXRMaXN0
IFtvYmplY3QgU3R5bGVTaGVldExpc3RDb25zdHJ1Y3Rvcl0KK3dpbmRvdy5TdHlsZVNoZWV0TGlz
dC5wcm90b3R5cGUgW29iamVjdCBTdHlsZVNoZWV0TGlzdFByb3RvdHlwZV0KK3dpbmRvdy5TdHls
ZVNoZWV0TGlzdC5wcm90b3R5cGUuaXRlbSBbZnVuY3Rpb25dCiB3aW5kb3cuU3ludGF4RXJyb3Ig
W2Z1bmN0aW9uXQogd2luZG93LlRleHQgW29iamVjdCBUZXh0Q29uc3RydWN0b3JdCiB3aW5kb3cu
VGV4dC5wcm90b3R5cGUgW3ByaW50ZWQgYWJvdmUgYXMgd2luZG93LkNoYXJhY3RlckRhdGEucHJv
dG90eXBlXQo=
</data>
<flag name="review"
          id="6338"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16012</attachid>
            <date>2007-08-18 00:04:04 -0700</date>
            <delta_ts>2007-08-19 13:06:26 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>autoStyleSheetList3.diff</filename>
            <type>text/plain</type>
            <size>25843</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTE0MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMDctMDgtMTcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBm
b3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NTUKKyAgICAgICAg
QXV0b2dlbmVyYXRlIHRoZSBKUyBiaW5kaW5ncyBmb3IgdGhlIFN0eWxlU2hlZXRMaXN0CisKKyAg
ICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAg
ICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1N0eWxl
U2hlZXRMaXN0Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1N0eWxlU2hl
ZXRMaXN0OjpjYW5HZXRJdGVtc0Zvck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTdHlsZVNo
ZWV0TGlzdDo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMva2pzX2Nzcy5jcHA6
CisgICAgICAgICogYmluZGluZ3MvanMva2pzX2Nzcy5oOgorICAgICAgICAqIGJpbmRpbmdzL29i
amMvRE9NVXRpbGl0eS5tbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbToKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldExpc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVTaGVldExpc3Q6OlN0eWxlU2hlZXRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlU2hlZXRMaXN0Ojpkb2N1bWVudERlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0TGlzdDo6Z2V0TmFtZWRJdGVtKToKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldExp
c3QuaDogQWRkIERvY3VtZW50IG1lbWJlciB2YXJpYWJsZSBhbmQKKyAgICAgICAgZ2V0TmFtZWRJ
dGVtIGZ1bmN0aW9uIHRvIGFjY29tbW9kYXRlIHRoZSBvZGQgamF2YXNjcmlwdCAKKyAgICAgICAg
bmFtZSBnZXR0ZXIgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldExpc3Qu
aWRsOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6On5Eb2N1bWVudCk6
CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOiBBZGQgU3R5bGVTaGVldExpc3RDb25zdHJ1
Y3RvcgorCiAyMDA3LTA4LTE3ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4uCkluZGV4OiBXZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lv
biAyNTE0MikKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpA
QCAtNTM1LDYgKzUzNSw3IEBAIGFsbCA6IFwKICAgICBKU1NWR1pvb21FdmVudC5oIFwKICAgICBK
U1NjcmVlbi5oIFwKICAgICBKU1N0eWxlU2hlZXQuaCBcCisgICAgSlNTdHlsZVNoZWV0TGlzdC5o
IFwKICAgICBKU1RleHQuaCBcCiAgICAgSlNUZXh0RXZlbnQuaCBcCiAgICAgSlNUcmVlV2Fsa2Vy
LmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUucHJvCShyZXZpc2lvbiAyNTE0MikKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtp
bmcgY29weSkKQEAgLTE5MSw2ICsxOTEsNyBAQCBJRExfQklORElOR1MgKz0gXAogICAgIGNzcy9N
ZWRpYUxpc3QuaWRsIFwKICAgICBjc3MvUmVjdC5pZGwgXAogICAgIGNzcy9TdHlsZVNoZWV0Lmlk
bCBcCisgICAgY3NzL1N0eWxlU2hlZXRMaXN0LmlkbCBcCiAgICAgZG9tL0F0dHIuaWRsIFwKICAg
ICBkb20vQ2hhcmFjdGVyRGF0YS5pZGwgXAogICAgIGRvbS9DREFUQVNlY3Rpb24uaWRsIFwKQEAg
LTMzMiw2ICszMzMsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBiaW5kaW5ncy9qcy9KU05vZGVJdGVy
YXRvckN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwIFwK
ICAgICBiaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwIFwKKyAgICBiaW5kaW5ncy9q
cy9KU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNUcmVlV2Fs
a2VyQ3VzdG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdC5jcHAgXAog
ICAgIGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3Nvci5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAyNTE0MikKKysrIFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyNDAsNiArMTI0MCwx
NCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkKFdl
YktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTU3R5bGVT
aGVldExpc3QuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQ
YXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2Vz
XEpTU3R5bGVTaGVldExpc3QuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJl
bGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVk
U291cmNlc1xKU1NWR0FFbGVtZW50LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC03Mjk5LDYg
KzczMDcsMTAgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTU3R5bGVTaGVldExpc3RDdXN0b20uY3BwIgorCQkJCQk+
CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3Nc
anNcSlNTVkdFbGVtZW50V3JhcHBlckZhY3RvcnkuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDI1MTQyKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTI3MzAsNiArMjczMCw5IEBACiAJCUIyRkEzRTE4MEFCNzVBNkYwMDBF
NUFDNCAvKiBKU1NWR1pvb21FdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMkZBM0QzMDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdab29tRXZl
bnQuY3BwICovOyB9OwogCQlCMkZBM0UxOTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdab29tRXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRkEz
RDMxMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1pvb21FdmVudC5oICovOyB9OwogCQlCNDAyRkQw
QjBDNEM5QzM5MDAyMTBBQTYgLyogQmlkaVJlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNDAyRkQwOTBDNEM5QzM5MDAyMTBBQTYgLyogQmlk
aVJlc29sdmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJQkMwMjI2NzIwQzc2OTA4QzAwMDM0ODJDIC8qIEpTU3R5bGVTaGVldExpc3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMjI2NzAwQzc2
OTA4QzAwMDM0ODJDIC8qIEpTU3R5bGVTaGVldExpc3QuY3BwICovOyB9OworCQlCQzAyMjY3MzBD
NzY5MDhDMDAwMzQ4MkMgLyogSlNTdHlsZVNoZWV0TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMjI2NzEwQzc2OTA4QzAwMDM0ODJDIC8qIEpT
U3R5bGVTaGVldExpc3QuaCAqLzsgfTsKKwkJQkMwMjI2QTkwQzc2OTlCRjAwMDM0ODJDIC8qIEpT
U3R5bGVTaGVldExpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkMwMjI2QTgwQzc2OTlCRjAwMDM0ODJDIC8qIEpTU3R5bGVTaGVldExp
c3RDdXN0b20uY3BwICovOyB9OwogCQlCQzA2NkY2RjA5RkVCMkZBMDBDNTg5QTcgLyogV2ViQ29y
ZVRleHRSZW5kZXJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkMwNjZGNkMwOUZFQjJGQTAwQzU4OUE3IC8qIFdlYkNvcmVUZXh0UmVuZGVyZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzA2RUQw
NjBCRkQ1QkFFMDA4NTZFOUQgLyogSlNIVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA2RUQwNDBCRkQ1QkFF
MDA4NTZFOUQgLyogSlNIVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAgKi87IH07CiAJCUJDMDZF
RDA3MEJGRDVCQUUwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA2RUQwNTBCRkQ1QkFF
MDA4NTZFOUQgLyogSlNIVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oICovOyB9OwpAQCAtNjA2MSw2
ICs2MDY0LDkgQEAKIAkJQjJGQTNEMzAwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHWm9vbUV2ZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR1pvb21FdmVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRkEzRDMxMEFCNzVBNkYwMDBF
NUFDNCAvKiBKU1NWR1pvb21FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNTVkdab29tRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjQwMkZE
MDkwQzRDOUMzOTAwMjEwQUE2IC8qIEJpZGlSZXNvbHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCaWRpUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQkMwMjI2NzAwQzc2OTA4QzAwMDM0ODJDIC8qIEpTU3R5bGVTaGVldExpc3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3R5bGVTaGVldExpc3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzAyMjY3MTBDNzY5MDhDMDAwMzQ4MkMgLyog
SlNTdHlsZVNoZWV0TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNT
dHlsZVNoZWV0TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzAyMjZBODBD
NzY5OUJGMDAwMzQ4MkMgLyogSlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDU2NDk5MEM2QUJDMTAwMEFDRTQxMiAvKiBj
aGFyYWN0ZXItc2V0cy50eHQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9ICJjaGFyYWN0ZXItc2V0
cy50eHQiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzA1NjQ5QTBDNkFCQzEwMDBB
Q0U0MTIgLyogbWFrZS1jaGFyc2V0LXRhYmxlLnBsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnBl
cmw7IHBhdGggPSAibWFrZS1jaGFyc2V0LXRhYmxlLnBsIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkMwNjZGNkMwOUZFQjJGQTAwQzU4OUE3IC8qIFdlYkNvcmVUZXh0UmVuZGVyZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVUZXh0UmVuZGVyZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY3NzksNiArNjc4NSw4IEBACiAJCQkJ
QkNFQzAxQzEwQzI3NERERDAwOUY0RUM5IC8qIEpTU2NyZWVuLmggKi8sCiAJCQkJQkNFMDEzOTgw
QzBCRUYxODAwNDM4NjBBIC8qIEpTU3R5bGVTaGVldC5jcHAgKi8sCiAJCQkJQkNFMDEzOTkwQzBC
RUYxODAwNDM4NjBBIC8qIEpTU3R5bGVTaGVldC5oICovLAorCQkJCUJDMDIyNjcwMEM3NjkwOEMw
MDAzNDgyQyAvKiBKU1N0eWxlU2hlZXRMaXN0LmNwcCAqLywKKwkJCQlCQzAyMjY3MTBDNzY5MDhD
MDAwMzQ4MkMgLyogSlNTdHlsZVNoZWV0TGlzdC5oICovLAogCQkJCUIyMDExMTA1MEFCNzc0MDUw
MERCMEU2OCAvKiBKU1NWR0FFbGVtZW50LmNwcCAqLywKIAkJCQlCMjAxMTEwNjBBQjc3NDA1MDBE
QjBFNjggLyogSlNTVkdBRWxlbWVudC5oICovLAogCQkJCUIyMjJGNjk2MEFCNzcxOTUwMDIyRUZB
RCAvKiBKU1NWR0FuZ2xlLmNwcCAqLywKQEAgLTk0MzksNiArOTQ0Nyw3IEBACiAJCQkJMUE3NTBE
RDMwQTkwRTcyOTAwMEZGMjE1IC8qIEpTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcCAqLywKIAkJCQlC
Q0Q5QzI2MTBDMTdBQTY3MDA1QzkwQTIgLyogSlNOb2RlTGlzdEN1c3RvbS5jcHAgKi8sCiAJCQkJ
QkM5OEEyN0MwQzBDOTk1MDAwNEJFQkY3IC8qIEpTU3R5bGVTaGVldEN1c3RvbS5jcHAgKi8sCisJ
CQkJQkMwMjI2QTgwQzc2OTlCRjAwMDM0ODJDIC8qIEpTU3R5bGVTaGVldExpc3RDdXN0b20uY3Bw
ICovLAogCQkJCUIyNURGQUFFMEIyRTI5MjkwMDBFNjUxMCAvKiBKU1NWR01hdHJpeEN1c3RvbS5j
cHAgKi8sCiAJCQkJQjJDOTZEOEMwQjNBRjJCNzAwNUU4MEVDIC8qIEpTU1ZHUGF0aFNlZ0N1c3Rv
bS5jcHAgKi8sCiAJCQkJQjI5N0JDNkYwQjNDMTRDRjAwNDVBNTkwIC8qIEpTU1ZHUGF0aFNlZ0xp
c3RDdXN0b20uY3BwICovLApAQCAtMTE3MTIsNiArMTE3MjEsNyBAQAogCQkJCTBGMzFDQkY5MkI2
NTQ3MzBCQTA1MzVFOCAvKiBCaWRpQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQzMkU4
NDcwQzUxNDkzODAwQjE1MDBGIC8qIEdDQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTE0QjNGNzMwQzcyMjA0NzAwMDUzMERGIC8qIEZpbGVTeXN0ZW0uaCBpbiBIZWFkZXJzICovLAor
CQkJCUJDMDIyNjczMEM3NjkwOEMwMDAzNDgyQyAvKiBKU1N0eWxlU2hlZXRMaXN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTExNzUwLDcgKzExNzYwLDYgQEAKIAkJMDg2N0Q2OTBGRTg0MDI4RkMwMkFB
QzA3IC8qIFByb2plY3Qgb2JqZWN0ICovID0gewogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1
aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4QTlFRkMgLyogQnVpbGQg
Y29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsKLQkJCWNvbXBh
dGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7CiAJCQloYXNTY2FubmVkRm9yRW5jb2Rpbmdz
ID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApAQCAtMTMxNzMsNiArMTMx
ODIsOCBAQAogCQkJCUJDMkVENkJDMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0dHJDdXN0b20uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyRUQ3QTUwQzZDMEYzNjAwOTIwQkZGIC8qIEpTSFRNTEZy
YW1lRWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTRCM0Y3NjBDNzIyMDU1
MDAwNTMwREYgLyogRmlsZVN5c3RlbU1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUJDMDIyNjcy
MEM3NjkwOEMwMDAzNDgyQyAvKiBKU1N0eWxlU2hlZXRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUJDMDIyNkE5MEM3Njk5QkYwMDAzNDgyQyAvKiBKU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRM
aXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVT
aGVldExpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAor
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTU3R5bGVTaGVldExp
c3QuaCIKKworI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJKU1N0eWxl
U2hlZXQuaCIKKyNpbmNsdWRlICJTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldExp
c3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEpTU3R5bGVTaGVldExpc3Q6OmNh
bkdldEl0ZW1zRm9yTmFtZShLSlM6OkV4ZWNTdGF0ZSosIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNo
ZWV0TGlzdCwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0
dXJuIHN0eWxlU2hlZXRMaXN0LT5nZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lKTsKK30KKworS0pT
OjpKU1ZhbHVlKiBKU1N0eWxlU2hlZXRMaXN0OjpuYW1lR2V0dGVyKEtKUzo6RXhlY1N0YXRlKiBl
eGVjLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IEtKUzo6UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTU3R5bGVTaGVldExpc3Qq
IHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1N0eWxlU2hlZXRMaXN0Kj4oc2xvdC5zbG90QmFzZSgp
KTsKKyAgICBIVE1MU3R5bGVFbGVtZW50KiBlbGVtZW50ID0gdGhpc09iai0+aW1wbCgpLT5nZXRO
YW1lZEl0ZW0ocHJvcGVydHlOYW1lKTsKKyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgcmV0dXJu
IHRvSlMoZXhlYywgZWxlbWVudC0+c2hlZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2Nzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfY3NzLmNwcAkocmV2aXNpb24gMjUxNDIpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL2tqc19jc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNiArMjUs
OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgImtqc19jc3MuaCIKIAotI2luY2x1
ZGUgIkNTU1J1bGUuaCIKLSNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDU1NQcmlt
aXRpdmVWYWx1ZS5oIgotI2luY2x1ZGUgIkpTQ1NTUnVsZS5oIgotI2luY2x1ZGUgIkpTQ1NTUnVs
ZUxpc3QuaCIKLSNpbmNsdWRlICJKU1N0eWxlU2hlZXQuaCIKLSNpbmNsdWRlICJTdHlsZVNoZWV0
TGlzdC5oIgogI2luY2x1ZGUgImtqc19kb20uaCIKIAogI2luY2x1ZGUgImtqc19jc3MubHV0Lmgi
CkBAIC00MiwxMjIgKzM0LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIEtKUzsKLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLWNvbnN0IENsYXNzSW5mbyBK
U1N0eWxlU2hlZXRMaXN0OjppbmZvID0geyAiU3R5bGVTaGVldExpc3QiLCAwLCAmSlNTdHlsZVNo
ZWV0TGlzdFRhYmxlLCAwIH07Ci0KLS8qCi1AYmVnaW4gSlNTdHlsZVNoZWV0TGlzdFRhYmxlIDIK
LSAgbGVuZ3RoICAgICAgICBXZWJDb3JlOjpKU1N0eWxlU2hlZXRMaXN0OjpMZW5ndGggICAgICAg
RG9udERlbGV0ZXxSZWFkT25seQotICBpdGVtICAgICAgICAgIFdlYkNvcmU6OkpTU3R5bGVTaGVl
dExpc3Q6Okl0ZW0gICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEKLUBlbmQKLSovCi0KLUtK
U19JTVBMRU1FTlRfUFJPVE9UWVBFX0ZVTkNUSU9OKEpTU3R5bGVTaGVldExpc3RGdW5jKSAvLyBu
b3QgcmVhbGx5IGEgcHJvdG90eXBlLCBidXQgZG9lc24ndCBtYXR0ZXIKLQotSlNTdHlsZVNoZWV0
TGlzdDo6SlNTdHlsZVNoZWV0TGlzdChFeGVjU3RhdGUqIGV4ZWMsIFN0eWxlU2hlZXRMaXN0KiBz
dHlsZVNoZWV0TGlzdCwgRG9jdW1lbnQqIGRvYykKLSAgICA6IG1faW1wbChzdHlsZVNoZWV0TGlz
dCkKLSAgICAsIG1fZG9jKGRvYykgCi17Ci0gICAgc2V0UHJvdG90eXBlKGV4ZWMtPmxleGljYWxJ
bnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCkpOwotfQotCi1KU1N0eWxlU2hl
ZXRMaXN0Ojp+SlNTdHlsZVNoZWV0TGlzdCgpCi17Ci0gICAgU2NyaXB0SW50ZXJwcmV0ZXI6OmZv
cmdldERPTU9iamVjdChtX2ltcGwuZ2V0KCkpOwotfQotCi1KU1ZhbHVlKiBKU1N0eWxlU2hlZXRM
aXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAot
ewotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgICAgY2FzZSBMZW5ndGg6Ci0gICAgICAgICAg
ICByZXR1cm4ganNOdW1iZXIobV9pbXBsLT5sZW5ndGgoKSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIH0KLX0KLQotSlNWYWx1ZSogSlNTdHlsZVNoZWV0TGlzdDo6aW5kZXhH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAg
IEpTU3R5bGVTaGVldExpc3QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1N0eWxlU2hlZXRMaXN0
Kj4oc2xvdC5zbG90QmFzZSgpKTsKLSAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5tX2lt
cGwtPml0ZW0oc2xvdC5pbmRleCgpKSk7Ci19Ci0KLUpTVmFsdWUqIEpTU3R5bGVTaGVldExpc3Q6
Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQot
ewotICAgIEpTU3R5bGVTaGVldExpc3QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1N0eWxlU2hl
ZXRMaXN0Kj4oc2xvdC5zbG90QmFzZSgpKTsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gdGhpc09i
ai0+bV9kb2MtPmdldEVsZW1lbnRCeUlkKHByb3BlcnR5TmFtZSk7Ci0gICAgcmV0dXJuIHRvSlMo
ZXhlYywgc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+KGVsZW1lbnQpLT5zaGVldCgpKTsK
LX0KLQotYm9vbCBKU1N0eWxlU2hlZXRMaXN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKLXsKLSAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkoJkpT
U3R5bGVTaGVldExpc3RUYWJsZSwgcHJvcGVydHlOYW1lKTsKLSAgCi0gICAgaWYgKGVudHJ5KSB7
Ci0gICAgICAgIHN3aXRjaChlbnRyeS0+dmFsdWUpIHsKLSAgICAgICAgICAgIGNhc2UgTGVuZ3Ro
OgotICAgICAgICAgICAgICAgIHNsb3Quc2V0U3RhdGljRW50cnkodGhpcywgZW50cnksIHN0YXRp
Y1ZhbHVlR2V0dGVyPEpTU3R5bGVTaGVldExpc3Q+KTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIGNhc2UgSXRlbToKLSAgICAgICAgICAgICAgICBzbG90LnNldFN0
YXRpY0VudHJ5KHRoaXMsIGVudHJ5LCBzdGF0aWNGdW5jdGlvbkdldHRlcjxKU1N0eWxlU2hlZXRM
aXN0RnVuYz4pOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZXRMaXN0ID0gbV9pbXBsLmdldCgpOwot
Ci0gICAgLy8gUmV0cmlldmUgc3R5bGVzaGVldCBieSBpbmRleAotICAgIGJvb2wgb2s7Ci0gICAg
dW5zaWduZWQgdSA9IHByb3BlcnR5TmFtZS50b1VJbnQzMigmb2spOwotICAgIGlmIChvayAmJiB1
IDwgc3R5bGVTaGVldExpc3QtPmxlbmd0aCgpKSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5k
ZXgodGhpcywgdSwgaW5kZXhHZXR0ZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICAvLyBJRSBhbHNvIHN1cHBvcnRzIHJldHJpZXZpbmcgYSBzdHlsZXNoZWV0IGJ5IG5hbWUs
IHVzaW5nIHRoZSBuYW1lL2lkIG9mIHRoZSA8c3R5bGU+IHRhZwotICAgIC8vICh0aGlzIGlzIGNv
bnNpc3RlbnQgd2l0aCBhbGwgdGhlIG90aGVyIGNvbGxlY3Rpb25zKQotICAgIC8vICMjIyBCYWQg
aW1wbGVtZW50YXRpb24gYmVjYXVzZSByZXR1cm5zIGEgc2luZ2xlIGVsZW1lbnQgKGFyZSBJRHMg
YWx3YXlzIHVuaXF1ZT8pCi0gICAgLy8gYW5kIGRvZXNuJ3QgbG9vayBmb3IgbmFtZSBhdHRyaWJ1
dGUgKHNlZSBpbXBsZW1lbnRhdGlvbiBhYm92ZSkuCi0gICAgLy8gQnV0IHVuaWNpdHkgb2Ygc3R5
bGVzaGVldCBpZHMgaXMgZ29vZCBwcmFjdGljZSBhbnl3YXkgOykKLSAgICBFbGVtZW50KiBlbGVt
ZW50ID0gbV9kb2MtPmdldEVsZW1lbnRCeUlkKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKGVsZW1l
bnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShzdHlsZVRhZykpIHsKLSAgICAgICAgc2xvdC5zZXRD
dXN0b20odGhpcywgbmFtZUdldHRlcik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBET01PYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOwotfQotCi1KU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgU3R5bGVTaGVl
dExpc3QqIHN0eWxlU2hlZXRMaXN0LCBEb2N1bWVudCogZG9jKQotewotICAgIC8vIENhbid0IHVz
ZSB0aGUgY2FjaGVET01PYmplY3QgbWFjcm8gYmVjYXVzZSBvZiB0aGUgZG9jIGFyZ3VtZW50Ci0g
ICAgaWYgKCFzdHlsZVNoZWV0TGlzdCkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotCi0gICAg
U2NyaXB0SW50ZXJwcmV0ZXIqIGludGVycCA9IHN0YXRpY19jYXN0PFNjcmlwdEludGVycHJldGVy
Kj4oZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCkpOwotICAgIERPTU9iamVjdCogcmV0ID0gaW50
ZXJwLT5nZXRET01PYmplY3Qoc3R5bGVTaGVldExpc3QpOwotICAgIGlmIChyZXQpCi0gICAgICAg
IHJldHVybiByZXQ7Ci0KLSAgICByZXQgPSBuZXcgSlNTdHlsZVNoZWV0TGlzdChleGVjLCBzdHls
ZVNoZWV0TGlzdCwgZG9jKTsKLSAgICBpbnRlcnAtPnB1dERPTU9iamVjdChzdHlsZVNoZWV0TGlz
dCwgcmV0KTsKLSAgICByZXR1cm4gcmV0OwotfQotCi1KU1ZhbHVlKiBKU1N0eWxlU2hlZXRMaXN0
RnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwg
Y29uc3QgTGlzdCYgYXJncykKLXsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZKU1N0eWxl
U2hlZXRMaXN0OjppbmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVy
cm9yKTsKLQotICAgIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWV0TGlzdCA9IHN0YXRpY19jYXN0
PEpTU3R5bGVTaGVldExpc3QqPih0aGlzT2JqKS0+aW1wbCgpOwotICAgIGlmIChpZCA9PSBKU1N0
eWxlU2hlZXRMaXN0OjpJdGVtKQotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBzdHlsZVNoZWV0
TGlzdC0+aXRlbShhcmdzWzBdLT50b0ludDMyKGV4ZWMpKSk7Ci0gICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogY29uc3QgQ2xhc3NJbmZvIEpTUkdC
Q29sb3I6OmluZm8gPSB7ICJSR0JDb2xvciIsIDAsICZKU1JHQkNvbG9yVGFibGUsIDAgfTsKIApJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfY3NzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ranNfY3NzLmgJKHJldmlzaW9uIDI1MTQyKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9ranNfY3NzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDQyICsyNCwxMCBAQAogI2Rl
ZmluZSBranNfY3NzX2gKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiSlNTdHlsZVNo
ZWV0LmgiCiAjaW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0gICAgY2xhc3MgQ291bnRlcjsKLSAgICBjbGFzcyBDU1NTdHlsZVNoZWV0OwotICAgIGNsYXNz
IFN0eWxlU2hlZXQ7Ci0gICAgY2xhc3MgU3R5bGVTaGVldExpc3Q7Ci0KLSAgICBjbGFzcyBKU1N0
eWxlU2hlZXRMaXN0IDogcHVibGljIEtKUzo6RE9NT2JqZWN0IHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIEpTU3R5bGVTaGVldExpc3QoS0pTOjpFeGVjU3RhdGUqLCBTdHlsZVNoZWV0TGlzdCosIERv
Y3VtZW50Kik7Ci0gICAgICAgIHZpcnR1YWwgfkpTU3R5bGVTaGVldExpc3QoKTsKLQotICAgICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEtKUzo6RXhlY1N0YXRlKiwgY29uc3Qg
S0pTOjpJZGVudGlmaWVyJiwgS0pTOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgS0pTOjpKU1Zh
bHVlKiBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsK
LSAgICAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQotICAgICAgICB2aXJ0dWFsIGNvbnN0
IEtKUzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAg
ICAgICBzdGF0aWMgY29uc3QgS0pTOjpDbGFzc0luZm8gaW5mbzsKLQotICAgICAgICBlbnVtIHsg
SXRlbSwgTGVuZ3RoIH07Ci0KLSAgICAgICAgU3R5bGVTaGVldExpc3QqIGltcGwoKSBjb25zdCB7
IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBL
SlM6OkpTVmFsdWUqIGluZGV4R2V0dGVyKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCos
IGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90Jik7Ci0gICAg
ICAgIHN0YXRpYyBLSlM6OkpTVmFsdWUqIG5hbWVHZXR0ZXIoS0pTOjpFeGVjU3RhdGUqLCBLSlM6
OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiwgY29uc3QgS0pTOjpQcm9wZXJ0eVNs
b3QmKTsKLQotICAgICAgICBSZWZQdHI8U3R5bGVTaGVldExpc3Q+IG1faW1wbDsKLSAgICAgICAg
UmVmUHRyPERvY3VtZW50PiBtX2RvYzsKLSAgICB9OwotCi0gICAgLy8gVGhlIGRvY3VtZW50IGlz
IG9ubHkgdXNlZCBmb3IgZ2V0LXN0eWxlc2hlZXQtYnktbmFtZSAobWFrZSBvcHRpb25hbCBpZiBu
ZWNlc3NhcnkpCi0gICAgS0pTOjpKU1ZhbHVlKiB0b0pTKEtKUzo6RXhlY1N0YXRlKiwgU3R5bGVT
aGVldExpc3QqLCBEb2N1bWVudCopOwotCiAgICAgY2xhc3MgSlNSR0JDb2xvciA6IHB1YmxpYyBL
SlM6OkRPTU9iamVjdCB7CiAgICAgcHVibGljOgogICAgICAgICBKU1JHQkNvbG9yKEtKUzo6RXhl
Y1N0YXRlKiwgdW5zaWduZWQgY29sb3IpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RP
TVV0aWxpdHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVV0aWxp
dHkubW0JKHJldmlzaW9uIDI1MTQyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVV0aWxp
dHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbXBvcnQgIkpTUmFuZ2Uu
aCIKICNpbXBvcnQgIkpTUmVjdC5oIgogI2ltcG9ydCAiSlNTdHlsZVNoZWV0LmgiCisjaW1wb3J0
ICJKU1N0eWxlU2hlZXRMaXN0LmgiCiAjaW1wb3J0ICJKU1RyZWVXYWxrZXIuaCIKICNpbXBvcnQg
IkpTWFBhdGhFeHByZXNzaW9uLmgiCiAjaW1wb3J0ICJKU1hQYXRoUmVzdWx0LmgiCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDI1
MTQyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29y
a2luZyBjb3B5KQpAQCAtMTQzOCwxMiArMTQzOCw2IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAg
ICAgICAgfQogICAgIH0KIAotICAgIGlmICgkdHlwZSBlcSAiU3R5bGVTaGVldExpc3QiKSB7Ci0g
ICAgICAgICRpbXBsSW5jbHVkZXN7IlN0eWxlU2hlZXRMaXN0LmgifSA9IDE7Ci0gICAgICAgICRp
bXBsSW5jbHVkZXN7Imtqc19jc3MuaCJ9ID0gMTsKLSAgICAgICAgcmV0dXJuICJ0b0pTKGV4ZWMs
IFdURjo6Z2V0UHRyKCR2YWx1ZSksIGltcCkiOwotICAgIH0KLQogICAgIGlmICgkY29kZUdlbmVy
YXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJHR5cGUpKSB7CiAgICAgICAgICR2YWx1ZSA9fiBzL1wo
XCkvLzsKICAgICAgICAgJHZhbHVlIC49ICJBbmltYXRlZCgpIjsKSW5kZXg6IFdlYkNvcmUvY3Nz
L1N0eWxlU2hlZXRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9TdHlsZVNoZWV0
TGlzdC5jcHAJKHJldmlzaW9uIDI1MTQyKQorKysgV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgogICoKICAqIChDKSAxOTk5LTIwMDMg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTks
MTkgKzE5LDM2IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4K
ICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIK
IAogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3VzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CisKK1N0eWxlU2hlZXRMaXN0OjpTdHlsZVNoZWV0TGlzdChEb2N1
bWVudCogZG9jKQorICAgIDogbV9kb2MoZG9jKQoreworfQorCiBTdHlsZVNoZWV0TGlzdDo6flN0
eWxlU2hlZXRMaXN0KCkKIHsKICAgICBmb3IgKERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8U3R5
bGVTaGVldD4gaXQgKHN0eWxlU2hlZXRzKTsgaXQuY3VycmVudCgpOyArK2l0KQogICAgICAgICBp
dC5jdXJyZW50KCktPmRlcmVmKCk7CiB9CiAKK3ZvaWQgU3R5bGVTaGVldExpc3Q6OmRvY3VtZW50
RGVzdHJveWVkKCkKK3sKKyAgICBtX2RvYyA9IDA7Cit9CisKIHZvaWQgU3R5bGVTaGVldExpc3Q6
OmFkZChTdHlsZVNoZWV0KiBzKQogewogICAgIGlmICghc3R5bGVTaGVldHMuY29udGFpbnNSZWYo
cykpIHsKQEAgLTU2LDQgKzczLDE1IEBAIFN0eWxlU2hlZXQqIFN0eWxlU2hlZXRMaXN0OjppdGVt
KHVuc2lnbmUKICAgICByZXR1cm4gaW5kZXggPCBsZW5ndGgoKSA/IHN0eWxlU2hlZXRzLmF0KGlu
ZGV4KSA6IDA7CiB9CiAKK0hUTUxTdHlsZUVsZW1lbnQqIFN0eWxlU2hlZXRMaXN0OjpnZXROYW1l
ZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIGlmICghbV9kb2MpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgRWxlbWVudCogZWxlbWVudCA9IG1fZG9jLT5nZXRFbGVtZW50
QnlJZChuYW1lKTsKKyAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5oYXNUYWdOYW1lKHN0eWxl
VGFnKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnQqPihlbGVt
ZW50KTsKKyAgICByZXR1cm4gMDsKIH0KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9T
dHlsZVNoZWV0TGlzdC5oCShyZXZpc2lvbiAyNTE0MikKKysrIFdlYkNvcmUvY3NzL1N0eWxlU2hl
ZXRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw2IEBACiAvKgotICogVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIChDKSAx
OTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjgsMjIgKzI2LDMyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRG9j
dW1lbnQ7CitjbGFzcyBIVE1MU3R5bGVFbGVtZW50OwogY2xhc3MgU3R5bGVTaGVldDsKK2NsYXNz
IFN0cmluZzsKIAotY2xhc3MgU3R5bGVTaGVldExpc3QgOiBwdWJsaWMgU2hhcmVkPFN0eWxlU2hl
ZXRMaXN0PgoteworY2xhc3MgU3R5bGVTaGVldExpc3QgOiBwdWJsaWMgU2hhcmVkPFN0eWxlU2hl
ZXRMaXN0PiB7CiBwdWJsaWM6CisgICAgU3R5bGVTaGVldExpc3QoRG9jdW1lbnQqKTsKICAgICB+
U3R5bGVTaGVldExpc3QoKTsKIAorICAgIHZvaWQgZG9jdW1lbnREZXN0cm95ZWQoKTsKKwogICAg
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIFN0eWxlU2hlZXQqIGl0ZW0odW5zaWduZWQg
aW5kZXgpOwogCiAgICAgdm9pZCBhZGQoU3R5bGVTaGVldCopOwogICAgIHZvaWQgcmVtb3ZlKFN0
eWxlU2hlZXQqKTsKIAorICAgIEhUTUxTdHlsZUVsZW1lbnQqIGdldE5hbWVkSXRlbShjb25zdCBT
dHJpbmcmKSBjb25zdDsKKwogICAgIERlcHJlY2F0ZWRQdHJMaXN0PFN0eWxlU2hlZXQ+IHN0eWxl
U2hlZXRzOworCitwcml2YXRlOgorICAgIERvY3VtZW50KiBtX2RvYzsKIH07CiAKLX0gLy8gbmFt
ZXNwYWNlCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIFN0eWxl
U2hlZXRMaXN0X2gKSW5kZXg6IFdlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5pZGwJKHJldmlzaW9uIDI1MTQyKQor
KysgV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWls
LmNvbT4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMSw3ICsyMSw3IEBACiBtb2R1bGUgc3R5bGVzaGVldHMg
ewogCiAgICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMjoKLSAgICBpbnRlcmZhY2UgU3R5
bGVTaGVldExpc3QgeworICAgIGludGVyZmFjZSBbR2VuZXJhdGVDb25zdHJ1Y3RvciwgSGFzSW5k
ZXhHZXR0ZXIsIEhhc05hbWVHZXR0ZXJdIFN0eWxlU2hlZXRMaXN0IHsKICAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgICAgbGVuZ3RoOwogICAgICAgICBTdHlsZVNoZWV0
ICAgICAgICAgaXRlbShpbiB1bnNpZ25lZCBsb25nIGluZGV4KTsKICAgICB9OwpJbmRleDogV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAkocmV2aXNpb24gMjUxNDIpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0OSw3ICsyNDksNyBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRE9NSW1wbGVt
ZW50YXRpb24qIGltCiAgICAgOiBDb250YWluZXJOb2RlKDApCiAgICAgLCBtX2ltcGxlbWVudGF0
aW9uKGltcGwpCiAgICAgLCBtX2RvbXRyZWVfdmVyc2lvbigwKQotICAgICwgbV9zdHlsZVNoZWV0
cyhuZXcgU3R5bGVTaGVldExpc3QpCisgICAgLCBtX3N0eWxlU2hlZXRzKG5ldyBTdHlsZVNoZWV0
TGlzdCh0aGlzKSkKICAgICAsIG1fdGl0bGUoIiIpCiAgICAgLCBtX3RpdGxlU2V0RXhwbGljaXRs
eShmYWxzZSkKICAgICAsIG1faW1hZ2VMb2FkRXZlbnRUaW1lcih0aGlzLCAmRG9jdW1lbnQ6Omlt
YWdlTG9hZEV2ZW50VGltZXJGaXJlZCkKQEAgLTQyMiw2ICs0MjIsOSBAQCBEb2N1bWVudDo6fkRv
Y3VtZW50KCkKICAgICB1bnNpZ25lZCBjb3VudCA9IHNpemVvZihtX25hbWVDb2xsZWN0aW9uSW5m
bykgLyBzaXplb2YobV9uYW1lQ29sbGVjdGlvbkluZm9bMF0pOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9uYW1lQ29s
bGVjdGlvbkluZm9baV0pOworCisgICAgaWYgKG1fc3R5bGVTaGVldHMpCisgICAgICAgIG1fc3R5
bGVTaGVldHMtPmRvY3VtZW50RGVzdHJveWVkKCk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnJlc2V0
TGlua0NvbG9yKCkKSW5kZXg6IFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCShyZXZpc2lvbiAyNTE0MikKKysrIFdlYkNv
cmUvcGFnZS9ET01XaW5kb3cuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNiArMTMyLDcgQEAg
bW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIGF0dHJpYnV0ZSBDb3VudGVyQ29uc3RydWN0b3IgQ291
bnRlcjsKICAgICAgICAgYXR0cmlidXRlIENTU1J1bGVMaXN0Q29uc3RydWN0b3IgQ1NTUnVsZUxp
c3Q7CiAgICAgICAgIGF0dHJpYnV0ZSBSZWN0Q29uc3RydWN0b3IgUmVjdDsKKyAgICAgICAgYXR0
cmlidXRlIFN0eWxlU2hlZXRMaXN0Q29uc3RydWN0b3IgU3R5bGVTaGVldExpc3Q7CiAKICAgICAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGUgY29tbWVudGVkLW91dCBnbG9iYWwgY29uc3RydWN0
b3JzIGZvciBpbnRlcmZhY2VzIGxpc3RlZCBpbiBET00gTGV2ZWwgMyBDb3JlIHNwZWNpZmljYXRp
b24uCiAvLyAgICAgICAgYXR0cmlidXRlIERPTUV4Y2VwdGlvbkNvbnN0cnVjdG9yIERPTUV4Y2Vw
dGlvbjsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MTQyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDctMDgtMTcgIFNhbSBXZWluaWcg
IDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBVcGRhdGUgdGVzdCBmb3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ0NTUKKyAgICAgICAgQXV0b2dlbmVyYXRlIHRoZSBKUyBiaW5kaW5ncyBmb3Ig
dGhlIFN0eWxlU2hlZXRMaXN0CisKKyAgICAgICAgKiBmYXN0L2RvbS9XaW5kb3cvd2luZG93LXBy
b3BlcnRpZXMtZXhwZWN0ZWQudHh0OiBDaGFuZ2VkIGZvciBuZXcgY29uc3RydWN0b3IuCisKIDIw
MDctMDgtMTcgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEh5YXR0LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRv
dy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNTE0
MikKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTgyMiw2ICs4MjIsOSBAQCB3aW5kb3cuUmVjdCBb
b2JqZWN0IFJlY3RDb25zdHJ1Y3Rvcl0KIHdpbmRvdy5SZWN0LnByb3RvdHlwZSBbb2JqZWN0IFJl
Y3RQcm90b3R5cGVdCiB3aW5kb3cuUmVmZXJlbmNlRXJyb3IgW2Z1bmN0aW9uXQogd2luZG93LlN0
eWxlU2hlZXQgW3ByaW50ZWQgYWJvdmUgYXMgd2luZG93LkNTU1N0eWxlU2hlZXRdCit3aW5kb3cu
U3R5bGVTaGVldExpc3QgW29iamVjdCBTdHlsZVNoZWV0TGlzdENvbnN0cnVjdG9yXQord2luZG93
LlN0eWxlU2hlZXRMaXN0LnByb3RvdHlwZSBbb2JqZWN0IFN0eWxlU2hlZXRMaXN0UHJvdG90eXBl
XQord2luZG93LlN0eWxlU2hlZXRMaXN0LnByb3RvdHlwZS5pdGVtIFtmdW5jdGlvbl0KIHdpbmRv
dy5TeW50YXhFcnJvciBbZnVuY3Rpb25dCiB3aW5kb3cuVGV4dCBbb2JqZWN0IFRleHRDb25zdHJ1
Y3Rvcl0KIHdpbmRvdy5UZXh0LnByb3RvdHlwZSBbcHJpbnRlZCBhYm92ZSBhcyB3aW5kb3cuQ2hh
cmFjdGVyRGF0YS5wcm90b3R5cGVdCg==
</data>
<flag name="review"
          id="6718"
          type_id="1"
          status="+"
          setter="zimmermann"
    />
          </attachment>
      

    </bug>

</bugzilla>