<?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>154798</bug_id>
          
          <creation_ts>2016-02-28 13:08:09 -0800</creation_ts>
          <short_desc>Bind _WKUserStyleSheets to WKUserContentWorlds to allow for grouping of user content by associating to a world</short_desc>
          <delta_ts>2016-02-28 13:56:35 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1169024</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-02-28 13:08:09 -0800</bug_when>
    <thetext>Bind _WKUserStyleSheets to WKUserContentWorlds to allow for grouping of user content by associating to a world</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169029</commentid>
    <comment_count>1</comment_count>
      <attachid>272463</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-02-28 13:17:39 -0800</bug_when>
    <thetext>Created attachment 272463
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169030</commentid>
    <comment_count>2</comment_count>
      <attachid>272464</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-02-28 13:30:32 -0800</bug_when>
    <thetext>Created attachment 272464
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169031</commentid>
    <comment_count>3</comment_count>
      <attachid>272464</attachid>
    <who name="">mitz</who>
    <bug_when>2016-02-28 13:43:22 -0800</bug_when>
    <thetext>Comment on attachment 272464
Patch

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

&gt; Source/WebKit2/Shared/API/APIArray.h:95
&gt; +        return m_elements.removeAllMatching(
&gt; +            [&amp;] (const RefPtr&lt;Object&gt;&amp; object) -&gt; bool {

I think these should be one line.

&gt; Source/WebKit2/Shared/API/APIArray.h:99
&gt; +                if (object-&gt;type() != T::APIType)
&gt; +                    return false;
&gt; +                return matchFunction(static_pointer_cast&lt;T&gt;(object));
&gt; +            });

And then this should be less indented.

&gt; Source/WebKit2/UIProcess/API/Cocoa/_WKUserStyleSheet.h:45
&gt; +- (instancetype)initWithSource:(NSString *)source forMainFrameOnly:(BOOL)forMainFrameOnly legacyWhitelist:(WK_ARRAY(NSString *) *)legacyWhitelist legacyBlacklist:(WK_ARRAY(NSString *) *)legacyBlacklist userContentWorld:(_WKUserContentWorld *)userContentWorld;

Missing availability.

&gt; Source/WebKit2/UIProcess/UserContent/WebUserContentControllerProxy.cpp:194
&gt; +    unsigned userScriptsRemoved = m_userScripts-&gt;removeAllOfTypeMatching&lt;API::UserScript&gt;(
&gt; +        [&amp;] (const RefPtr&lt;API::UserScript&gt;&amp; userScript) -&gt; bool {
&gt; +            return &amp;userScript-&gt;userContentWorld() == &amp;world;
&gt; +        });

Weird indentation, as evident from that last line! I’d write it like this:

unsigned userScriptsRemoved = m_userScripts-&gt;removeAllOfTypeMatching&lt;API::UserScript&gt;([&amp;] (const RefPtr&lt;API::UserScript&gt;&amp; userScript) -&gt; bool {
    return &amp;userScript-&gt;userContentWorld() == &amp;world;
 });</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169032</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-02-28 13:56:35 -0800</bug_when>
    <thetext>Committed r197302: &lt;http://trac.webkit.org/changeset/197302&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272463</attachid>
            <date>2016-02-28 13:17:39 -0800</date>
            <delta_ts>2016-02-28 13:30:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154798-20160228131723.patch</filename>
            <type>text/plain</type>
            <size>47089</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzMwMSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBACisyMDE2LTAyLTI4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQmluZCBfV0tVc2VyU3R5bGVTaGVldHMg
dG8gX1dLVXNlckNvbnRlbnRXb3JsZHMgdG8gYWxsb3cgZm9yIGdyb3VwaW5nIG9mIHVzZXIgY29u
dGVudCBieSBhc3NvY2lhdGluZyB0byBhIHdvcmxkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ3OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUcmVhdCBfV0tVc2VyU3R5bGVTaGVldHMgbGlrZSBXS1Vz
ZXJTY3JpcHRzIGFuZCBhbGxvdyB0aGVtIHRvIGJlIGJvdW5kIHRvIGEgX1dLVXNlckNvbnRlbnRX
b3JsZC4KKyAgICAgICAgVGhlIGltbWVkaWF0ZSBiZW5lZml0IG9mIHRoaXMgaXMgYWxsb3dpbmcg
YSBjbGllbnQgdG8gYmluZCBhIHNldCBvZiB1c2VyIGNvbnRlbnQgKHNjcmlwdHMgYW5kIHN0eWxl
c2hlZXRzCisgICAgICAgIGZvciBub3cpIHRvIGEgd29ybGQgYW5kIGhhdmUgdGhlbSBlYXNpbHkg
cmVtb3ZlIGFsbCB1c2VyIGNvbnRlbnQgYXNzb2NpYXRlZCB3aXRoIHRoYXQgd29ybGQgZWFzaWx5
LgorCisgICAgICAgICogU2hhcmVkL0FQSS9BUElBcnJheS5oOgorICAgICAgICBBZGQgaGVscGVy
cyByZW1vdmVBbGxNYXRjaGluZyBhbmQgcmVtb3ZlQWxsT2ZUeXBlTWF0Y2hpbmcuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0Lmg6CisgICAgICAgIEFkZCBBUEk6
OlVzZXJDb250ZW50V29ybGQgbWVtYmVyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1VzZXJDb250ZW50Q29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV0tVc2VyQ29udGVudENv
bnRyb2xsZXIgX3JlbW92ZUFsbFVzZXJTY3JpcHRzQXNzb2NpYXRlZFdpdGhVc2VyQ29udGVudFdv
cmxkOl0pOgorICAgICAgICAoLVtXS1VzZXJDb250ZW50Q29udHJvbGxlciBfcmVtb3ZlQWxsVXNl
clN0eWxlU2hlZXRzQXNzb2NpYXRlZFdpdGhVc2VyQ29udGVudFdvcmxkOl0pOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg6Cisg
ICAgICAgIEFkZCBfcmVtb3ZlQWxsVXNlclNjcmlwdHNBc3NvY2lhdGVkV2l0aFVzZXJDb250ZW50
V29ybGQgYW5kIF9yZW1vdmVBbGxVc2VyU3R5bGVTaGVldHNBc3NvY2lhdGVkV2l0aFVzZXJDb250
ZW50V29ybGQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlclNjcmlwdC5t
bToKKyAgICAgICAgKC1bV0tVc2VyU2NyaXB0IF9pbml0V2l0aFNvdXJjZTppbmplY3Rpb25UaW1l
OmZvck1haW5GcmFtZU9ubHk6bGVnYWN5V2hpdGVsaXN0OmxlZ2FjeUJsYWNrbGlzdDp1c2VyQ29u
dGVudFdvcmxkOl0pOgorICAgICAgICAodG9TdHJpbmdWZWN0b3IpOiBEZWxldGVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRXb3JsZEludGVybmFsLmg6Cisg
ICAgICAgIChBUEk6OnRvU3RyaW5nVmVjdG9yKToKKyAgICAgICAgTW92ZSB0b1N0cmluZ1ZlY3Rv
ciB0byBhIGxvY2F0aW9uIHdoZXJlIGl0IGNhbiBiZSBzaGFyZWQuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1VzZXJTdHlsZVNoZWV0Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tVc2VyU3R5bGVTaGVldC5tbToKKyAgICAgICAgKC1bX1dLVXNlclN0eWxl
U2hlZXQgaW5pdFdpdGhTb3VyY2U6Zm9yTWFpbkZyYW1lT25seTpsZWdhY3lXaGl0ZWxpc3Q6bGVn
YWN5QmxhY2tsaXN0OnVzZXJDb250ZW50V29ybGQ6XSk6CisgICAgICAgIEFkZCBuZXcgaW5pdGlh
bGl6ZXIgd2hpY2ggaGFzIGEgd29ybGQgdG8gYmUgYm91bmQgdG8uIFdoaWxlIGhlcmUsIG1hdGNo
IFdLVXNlclNjcmlwdCBhbmQgYWRkIHN1cHBvcnQgZm9yIHRoZSAKKyAgICAgICAgbGVnYWN5IHdo
aXRlbGlzdCBhbmQgYmxhY2tsaXN0cy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyQ29udGVu
dC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6YWRkVXNlckNvbnRlbnRX
b3JsZFVzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
OjpzaG91bGRTZW5kUmVtb3ZlVXNlckNvbnRlbnRXb3JsZHNNZXNzYWdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVVzZXJDb250ZW50V29y
bGRVc2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6
OmFkZFVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eTo6cmVtb3ZlVXNlclNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVBbGxVc2VyU2NyaXB0cyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRVc2VyU3R5bGVTaGVldCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVVc2Vy
U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5OjpyZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2Vy
Q29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oOgorICAgICAgICBSZWZhY3Rv
ciB0byBzaGFyZSB0aGUgY29kZSB3aGljaCBkZWNpZGVzIHdoZXRoZXIgdG8gc2VuZCBBZGRVc2Vy
Q29udGVudFdvcmxkcy9SZW1vdmVVc2VyQ29udGVudFdvcmxkcworICAgICAgICBtZXNzYWdlcy4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRV
c2VyQ29udGVudFdvcmxkcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJv
bGxlcjo6cmVtb3ZlVXNlckNvbnRlbnRXb3JsZHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHRzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyU2NyaXB0cyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXRz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2Vy
U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
cmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1VzZXJDb250
ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvVXNl
ckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLm1lc3NhZ2VzLmluOgorICAgICAgICBB
ZGQgc3VwcG9ydCBmb3IgYmluZGluZyBzdHlsZXNoZWV0cyB0byB3b3JsZHMgYW5kIGFsbG93IHJl
bW92aW5nIGFsbCB0aGUgc2NyaXB0cy9zdHlsZXNoZWV0cyBmcm9tIGEgCisgICAgICAgIHNldCBv
ZiB3b3JsZHMgYXQgb25jZSBieSBwYXNzaW5nIFZlY3RvcnMgb2Ygd29ybGQgaWRlbnRpZmllcnMg
aW4gdGhlIHJlbW92ZSBtZXNzYWdlcy4KKwogMjAxNi0wMi0yNyAgQ29tbWl0IFF1ZXVlICA8Y29t
bWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjE5NzIwNCwgcjE5NzIwNywgcjE5NzIxMSwgcjE5NzIxNywKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9BUEkvQVBJQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQVBJL0FQSUFycmF5LmgJKHJldmlzaW9uIDE5NzIyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9BUEkvQVBJQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsMjIgQEAgcHVi
bGljOgogICAgICAgICApOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hdGNoRnVu
Y3Rpb24+CisgICAgdW5zaWduZWQgcmVtb3ZlQWxsTWF0Y2hpbmcoY29uc3QgTWF0Y2hGdW5jdGlv
biYgbWF0Y2hGdW5jdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VsZW1lbnRzLnJlbW92
ZUFsbE1hdGNoaW5nKG1hdGNoRnVuY3Rpb24pOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIE1hdGNoRnVuY3Rpb24+CisgICAgdW5zaWduZWQgcmVtb3ZlQWxsT2ZU
eXBlTWF0Y2hpbmcoY29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hGdW5jdGlvbikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2VsZW1lbnRzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAg
WyZdIChjb25zdCBSZWZQdHI8T2JqZWN0PiYgb2JqZWN0KSAtPiBib29sIHsKKyAgICAgICAgICAg
ICAgICBpZiAob2JqZWN0LT50eXBlKCkgIT0gVDo6QVBJVHlwZSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaEZ1bmN0aW9uKHN0
YXRpY19wb2ludGVyX2Nhc3Q8VD4ob2JqZWN0KSk7CisgICAgICAgICAgICB9KTsKKyAgICB9CiAK
IHByaXZhdGU6CiAgICAgZXhwbGljaXQgQXJyYXkoVmVjdG9yPFJlZlB0cjxPYmplY3Q+PiYmIGVs
ZW1lbnRzKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyU3R5bGVT
aGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNl
clN0eWxlU2hlZXQuaAkocmV2aXNpb24gMTk3MjI4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9BUElVc2VyU3R5bGVTaGVldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAjZGVmaW5lIEFQSVVzZXJTdHlsZVNoZWV0X2gKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5o
IgorI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50V29ybGQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Vz
ZXJTdHlsZVNoZWV0Lmg+CiAKIG5hbWVzcGFjZSBBUEkgewpAQCAtMzUsMTUgKzM2LDI1IEBAIGNs
YXNzIFVzZXJTdHlsZVNoZWV0IGZpbmFsIDogcHVibGljIE9iamUKIHB1YmxpYzoKICAgICBzdGF0
aWMgV2ViQ29yZTo6VVJMIGdlbmVyYXRlVW5pcXVlVVJMKCk7CiAKLSAgICBVc2VyU3R5bGVTaGVl
dChXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCB1c2VyU3R5bGVTaGVldCkKKyAgICBzdGF0aWMgUmVm
PFVzZXJTdHlsZVNoZWV0PiBjcmVhdGUoV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQgdXNlclN0eWxl
U2hlZXQsIEFQSTo6VXNlckNvbnRlbnRXb3JsZCYgd29ybGQpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBVc2VyU3R5bGVTaGVldChXVEZNb3ZlKHVzZXJTdHlsZVNoZWV0KSwg
d29ybGQpKTsKKyAgICB9CisKKyAgICBVc2VyU3R5bGVTaGVldChXZWJDb3JlOjpVc2VyU3R5bGVT
aGVldCB1c2VyU3R5bGVTaGVldCwgQVBJOjpVc2VyQ29udGVudFdvcmxkJiB3b3JsZCkKICAgICAg
ICAgOiBtX3VzZXJTdHlsZVNoZWV0KHVzZXJTdHlsZVNoZWV0KQorICAgICAgICAsIG1fd29ybGQo
d29ybGQpCiAgICAgewogICAgIH0KIAogICAgIGNvbnN0IFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0
JiB1c2VyU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXQ7IH0KIAor
ICAgIFVzZXJDb250ZW50V29ybGQmIHVzZXJDb250ZW50V29ybGQoKSB7IHJldHVybiBtX3dvcmxk
OyB9CisgICAgY29uc3QgVXNlckNvbnRlbnRXb3JsZCYgdXNlckNvbnRlbnRXb3JsZCgpIGNvbnN0
IHsgcmV0dXJuIG1fd29ybGQ7IH0KKwogcHJpdmF0ZToKICAgICBXZWJDb3JlOjpVc2VyU3R5bGVT
aGVldCBtX3VzZXJTdHlsZVNoZWV0OworICAgIFJlZjxVc2VyQ29udGVudFdvcmxkPiBtX3dvcmxk
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVBJCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXIu
bW0JKHJldmlzaW9uIDE5NzIyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4
LDcgQEAKICNpbXBvcnQgIldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyLmgiCiAjaW1wb3J0ICJXZWJV
c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oIgogI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0
ZXJJbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRXb3JsZEludGVybmFsLmgiCiAj
aW1wb3J0ICJfV0tVc2VyU3R5bGVTaGVldEludGVybmFsLmgiCiAjaW1wb3J0IDxXZWJDb3JlL1Nl
Y3VyaXR5T3JpZ2luLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5oPgpA
QCAtMTQzLDYgKzE0NCwxMSBAQCAtICh2b2lkKV9yZW1vdmVVc2VyU2NyaXB0OihXS1VzZXJTY3Jp
cHQgCiAgICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5yZW1vdmVVc2VyU2NyaXB0KCp1
c2VyU2NyaXB0LT5fdXNlclNjcmlwdCk7CiB9CiAKKy0gKHZvaWQpX3JlbW92ZUFsbFVzZXJTY3Jp
cHRzQXNzb2NpYXRlZFdpdGhVc2VyQ29udGVudFdvcmxkOihfV0tVc2VyQ29udGVudFdvcmxkICop
dXNlckNvbnRlbnRXb3JsZAoreworICAgIF91c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+cmVt
b3ZlQWxsVXNlclNjcmlwdHMoKnVzZXJDb250ZW50V29ybGQtPl91c2VyQ29udGVudFdvcmxkKTsK
K30KKwogLSAodm9pZClfYWRkVXNlckNvbnRlbnRGaWx0ZXI6KF9XS1VzZXJDb250ZW50RmlsdGVy
ICopdXNlckNvbnRlbnRGaWx0ZXIKIHsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpA
QCAtMTg0LDYgKzE5MCwxMSBAQCAtICh2b2lkKV9yZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMKICAg
ICBfdXNlckNvbnRlbnRDb250cm9sbGVyUHJveHktPnJlbW92ZUFsbFVzZXJTdHlsZVNoZWV0cygp
OwogfQogCistICh2b2lkKV9yZW1vdmVBbGxVc2VyU3R5bGVTaGVldHNBc3NvY2lhdGVkV2l0aFVz
ZXJDb250ZW50V29ybGQ6KF9XS1VzZXJDb250ZW50V29ybGQgKil1c2VyQ29udGVudFdvcmxkCit7
CisgICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5yZW1vdmVBbGxVc2VyU3R5bGVTaGVl
dHMoKnVzZXJDb250ZW50V29ybGQtPl91c2VyQ29udGVudFdvcmxkKTsKK30KKwogQGVuZAogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29u
dGVudENvbnRyb2xsZXJQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaAkocmV2aXNp
b24gMTk3MjI4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJD
b250ZW50Q29udHJvbGxlclByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDEz
IEBACiAKIEBjbGFzcyBXS1VzZXJTY3JpcHQ7CiBAY2xhc3MgX1dLVXNlckNvbnRlbnRGaWx0ZXI7
CitAY2xhc3MgX1dLVXNlckNvbnRlbnRXb3JsZDsKIEBjbGFzcyBfV0tVc2VyU3R5bGVTaGVldDsK
IAogQGludGVyZmFjZSBXS1VzZXJDb250ZW50Q29udHJvbGxlciAoV0tQcml2YXRlKQogCiAtICh2
b2lkKV9yZW1vdmVVc2VyU2NyaXB0OihXS1VzZXJTY3JpcHQgKil1c2VyU2NyaXB0IFdLX0FWQUlM
QUJMRShXS19NQUNfVEJBLCBXS19JT1NfVEJBKTsKKy0gKHZvaWQpX3JlbW92ZUFsbFVzZXJTY3Jp
cHRzQXNzb2NpYXRlZFdpdGhVc2VyQ29udGVudFdvcmxkOihfV0tVc2VyQ29udGVudFdvcmxkICop
dXNlckNvbnRlbnRXb3JsZCBXS19BVkFJTEFCTEUoV0tfTUFDX1RCQSwgV0tfSU9TX1RCQSk7CiAK
IC0gKHZvaWQpX2FkZFVzZXJDb250ZW50RmlsdGVyOihfV0tVc2VyQ29udGVudEZpbHRlciAqKXVz
ZXJDb250ZW50RmlsdGVyIFdLX0FWQUlMQUJMRSgxMF8xMSwgOV8wKTsKIC0gKHZvaWQpX3JlbW92
ZVVzZXJDb250ZW50RmlsdGVyOihOU1N0cmluZyAqKXVzZXJDb250ZW50RmlsdGVyTmFtZSBXS19B
VkFJTEFCTEUoMTBfMTEsIDlfMCk7CkBAIC00Myw2ICs0NSw3IEBACiAtICh2b2lkKV9hZGRVc2Vy
U3R5bGVTaGVldDooX1dLVXNlclN0eWxlU2hlZXQgKil1c2VyU3R5bGVTaGVldCBXS19BVkFJTEFC
TEUoV0tfTUFDX1RCQSwgV0tfSU9TX1RCQSk7CiAtICh2b2lkKV9yZW1vdmVVc2VyU3R5bGVTaGVl
dDooX1dLVXNlclN0eWxlU2hlZXQgKil1c2VyU3R5bGVTaGVldCBXS19BVkFJTEFCTEUoV0tfTUFD
X1RCQSwgV0tfSU9TX1RCQSk7CiAtICh2b2lkKV9yZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMgV0tf
QVZBSUxBQkxFKFdLX01BQ19UQkEsIFdLX0lPU19UQkEpOworLSAodm9pZClfcmVtb3ZlQWxsVXNl
clN0eWxlU2hlZXRzQXNzb2NpYXRlZFdpdGhVc2VyQ29udGVudFdvcmxkOihfV0tVc2VyQ29udGVu
dFdvcmxkICopdXNlckNvbnRlbnRXb3JsZCBXS19BVkFJTEFCTEUoV0tfTUFDX1RCQSwgV0tfSU9T
X1RCQSk7CiAKIEBlbmQKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1VzZXJTY3JpcHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1VzZXJTY3JpcHQubW0JKHJldmlzaW9uIDE5NzIyOCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyU2NyaXB0Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC03MywyOCArNzMsMTIgQEAgLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKIAogQGltcGxl
bWVudGF0aW9uIFdLVXNlclNjcmlwdCAoV0tQcml2YXRlKQogCi1zdGF0aWMgVmVjdG9yPFdURjo6
U3RyaW5nPiB0b1N0cmluZ1ZlY3RvcihOU0FycmF5ICppbnB1dCkKLXsKLSAgICBWZWN0b3I8V1RG
OjpTdHJpbmc+IHZlY3RvcjsKLQotICAgIE5TVUludGVnZXIgc2l6ZSA9IGlucHV0LmNvdW50Owot
ICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuIHZlY3RvcjsKLQotICAgIHZlY3Rvci5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwotICAgIGZvciAoaWQgc3RyaW5nIDogaW5wdXQpIHsK
LSAgICAgICAgaWYgKFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKLSAg
ICAgICAgICAgIHZlY3Rvci51bmNoZWNrZWRBcHBlbmQoc3RyaW5nKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHZlY3RvcjsKLX0KLQogLSAoaW5zdGFuY2V0eXBlKV9pbml0V2l0aFNvdXJjZTooTlNTdHJp
bmcgKilzb3VyY2UgaW5qZWN0aW9uVGltZTooV0tVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSlpbmpl
Y3Rpb25UaW1lIGZvck1haW5GcmFtZU9ubHk6KEJPT0wpZm9yTWFpbkZyYW1lT25seSBsZWdhY3lX
aGl0ZWxpc3Q6KE5TQXJyYXkgKilsZWdhY3lXaGl0ZWxpc3QgbGVnYWN5QmxhY2tsaXN0OihOU0Fy
cmF5ICopbGVnYWN5QmxhY2tsaXN0IHVzZXJDb250ZW50V29ybGQ6KF9XS1VzZXJDb250ZW50V29y
bGQgKil1c2VyQ29udGVudFdvcmxkCiB7CiAgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBBUEk6Ok9iamVjdDo6Y29uc3RydWN0SW5XcmFw
cGVyPEFQSTo6VXNlclNjcmlwdD4oc2VsZiwgV2ViQ29yZTo6VXNlclNjcmlwdCB7IFdURjo6U3Ry
aW5nKHNvdXJjZSksIEFQSTo6VXNlclNjcmlwdDo6Z2VuZXJhdGVVbmlxdWVVUkwoKSwgdG9TdHJp
bmdWZWN0b3IobGVnYWN5V2hpdGVsaXN0KSwgdG9TdHJpbmdWZWN0b3IobGVnYWN5QmxhY2tsaXN0
KSwgQVBJOjp0b1dlYkNvcmVVc2VyU2NyaXB0SW5qZWN0aW9uVGltZShpbmplY3Rpb25UaW1lKSwg
Zm9yTWFpbkZyYW1lT25seSA/IFdlYkNvcmU6OkluamVjdEluVG9wRnJhbWVPbmx5IDogV2ViQ29y
ZTo6SW5qZWN0SW5BbGxGcmFtZXMgfSwgKnVzZXJDb250ZW50V29ybGQtPl91c2VyQ29udGVudFdv
cmxkKTsKKyAgICBBUEk6Ok9iamVjdDo6Y29uc3RydWN0SW5XcmFwcGVyPEFQSTo6VXNlclNjcmlw
dD4oc2VsZiwgV2ViQ29yZTo6VXNlclNjcmlwdCB7IFdURjo6U3RyaW5nKHNvdXJjZSksIEFQSTo6
VXNlclNjcmlwdDo6Z2VuZXJhdGVVbmlxdWVVUkwoKSwgQVBJOjp0b1N0cmluZ1ZlY3RvcihsZWdh
Y3lXaGl0ZWxpc3QpLCBBUEk6OnRvU3RyaW5nVmVjdG9yKGxlZ2FjeUJsYWNrbGlzdCksIEFQSTo6
dG9XZWJDb3JlVXNlclNjcmlwdEluamVjdGlvblRpbWUoaW5qZWN0aW9uVGltZSksIGZvck1haW5G
cmFtZU9ubHkgPyBXZWJDb3JlOjpJbmplY3RJblRvcEZyYW1lT25seSA6IFdlYkNvcmU6OkluamVj
dEluQWxsRnJhbWVzIH0sICp1c2VyQ29udGVudFdvcmxkLT5fdXNlckNvbnRlbnRXb3JsZCk7CiAK
ICAgICByZXR1cm4gc2VsZjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLVXNlckNvbnRlbnRXb3JsZEludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudFdvcmxkSW50ZXJuYWwu
aAkocmV2aXNpb24gMTk3MjI4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tVc2VyQ29udGVudFdvcmxkSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksOCBAQAogCiAjaW1wb3J0ICJBUElVc2VyQ29udGVudFdvcmxkLmgiCiAjaW1wb3J0ICJXS09i
amVjdC5oIgorI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgorI2ltcG9ydCA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBBUEkgewogCkBAIC0zOCw2ICs0MCwyMiBAQCBpbmxpbmUgX1dL
VXNlckNvbnRlbnRXb3JsZCAqd3JhcHBlcihVc2VyCiAgICAgcmV0dXJuIChfV0tVc2VyQ29udGVu
dFdvcmxkICopdXNlckNvbnRlbnRXb3JsZC53cmFwcGVyKCk7CiB9CiAKK2lubGluZSBWZWN0b3I8
V1RGOjpTdHJpbmc+IHRvU3RyaW5nVmVjdG9yKE5TQXJyYXkgKmlucHV0KQoreworICAgIFZlY3Rv
cjxXVEY6OlN0cmluZz4gdmVjdG9yOworCisgICAgTlNVSW50ZWdlciBzaXplID0gaW5wdXQuY291
bnQ7CisgICAgaWYgKCFzaXplKQorICAgICAgICByZXR1cm4gdmVjdG9yOworCisgICAgdmVjdG9y
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7CisgICAgZm9yIChpZCBzdHJpbmcgOiBpbnB1
dCkgeworICAgICAgICBpZiAoW3N0cmluZyBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11d
KQorICAgICAgICAgICAgdmVjdG9yLnVuY2hlY2tlZEFwcGVuZChzdHJpbmcpOworICAgIH0KKyAg
ICByZXR1cm4gdmVjdG9yOworfQorCiB9CiAKIEBpbnRlcmZhY2UgX1dLVXNlckNvbnRlbnRXb3Js
ZCAoKSA8V0tPYmplY3Q+IHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVXNlclN0eWxlU2hlZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1VzZXJTdHlsZVNoZWV0LmgJKHJldmlzaW9uIDE5NzIyOCkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQAogCiBOU19BU1NVTUVfTk9OTlVMTF9CRUdJ
TgogCitAY2xhc3MgX1dLVXNlckNvbnRlbnRXb3JsZDsKKwogV0tfQ0xBU1NfQVZBSUxBQkxFKFdL
X01BQ19UQkEsIFdLX0lPU19UQkEpCiBAaW50ZXJmYWNlIF9XS1VzZXJTdHlsZVNoZWV0IDogTlNP
YmplY3QgPE5TQ29weWluZz4KIApAQCAtNDAsNiArNDIsOCBAQCBXS19DTEFTU19BVkFJTEFCTEUo
V0tfTUFDX1RCQSwgV0tfSU9TX1RCCiAKIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNvdXJjZToo
TlNTdHJpbmcgKilzb3VyY2UgZm9yTWFpbkZyYW1lT25seTooQk9PTClmb3JNYWluRnJhbWVPbmx5
OwogCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGZv
ck1haW5GcmFtZU9ubHk6KEJPT0wpZm9yTWFpbkZyYW1lT25seSBsZWdhY3lXaGl0ZWxpc3Q6KFdL
X0FSUkFZKE5TU3RyaW5nICopICopbGVnYWN5V2hpdGVsaXN0IGxlZ2FjeUJsYWNrbGlzdDooV0tf
QVJSQVkoTlNTdHJpbmcgKikgKilsZWdhY3lCbGFja2xpc3QgdXNlckNvbnRlbnRXb3JsZDooX1dL
VXNlckNvbnRlbnRXb3JsZCAqKXVzZXJDb250ZW50V29ybGQ7CisKIEBlbmQKIAogTlNfQVNTVU1F
X05PTk5VTExfRU5ECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1VzZXJTdHlsZVNoZWV0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQubW0JKHJldmlzaW9uIDE5NzIyOCkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQubW0JKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbXBvcnQgIkFQSUFycmF5LmgiCiAjaW1w
b3J0ICJXS05TQXJyYXkuaCIKICNpbXBvcnQgIldlYktpdDJJbml0aWFsaXplLmgiCisjaW1wb3J0
ICJfV0tVc2VyQ29udGVudFdvcmxkSW50ZXJuYWwuaCIKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAK
QEAgLTQyLDcgKzQzLDIwIEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNvdXJjZTooTlNTdHJp
bmcKICAgICAvLyBGSVhNRTogSW4gdGhlIEFQSSB0ZXN0LCB3ZSBjYW4gdXNlIGdlbmVyYXRlVW5p
cXVlVVJMIGJlbG93IGJlZm9yZSB0aGUgQVBJOjpPYmplY3QgY29uc3RydWN0b3IgaGFzIGRvbmUg
dGhpcy4uLiB3aGVyZSBzaG91bGQgdGhpcyByZWFsbHkgYmU/CiAgICAgV2ViS2l0OjpJbml0aWFs
aXplV2ViS2l0MigpOwogCi0gICAgQVBJOjpPYmplY3Q6OmNvbnN0cnVjdEluV3JhcHBlcjxBUEk6
OlVzZXJTdHlsZVNoZWV0PihzZWxmLCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCB7IFdURjo6U3Ry
aW5nKHNvdXJjZSksIEFQSTo6VXNlclN0eWxlU2hlZXQ6OmdlbmVyYXRlVW5pcXVlVVJMKCksIHsg
fSwgeyB9LCBmb3JNYWluRnJhbWVPbmx5ID8gV2ViQ29yZTo6SW5qZWN0SW5Ub3BGcmFtZU9ubHkg
OiBXZWJDb3JlOjpJbmplY3RJbkFsbEZyYW1lcywgV2ViQ29yZTo6VXNlclN0eWxlVXNlckxldmVs
IH0pOworICAgIEFQSTo6T2JqZWN0Ojpjb25zdHJ1Y3RJbldyYXBwZXI8QVBJOjpVc2VyU3R5bGVT
aGVldD4oc2VsZiwgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQgeyBXVEY6OlN0cmluZyhzb3VyY2Up
LCBBUEk6OlVzZXJTdHlsZVNoZWV0OjpnZW5lcmF0ZVVuaXF1ZVVSTCgpLCB7IH0sIHsgfSwgZm9y
TWFpbkZyYW1lT25seSA/IFdlYkNvcmU6OkluamVjdEluVG9wRnJhbWVPbmx5IDogV2ViQ29yZTo6
SW5qZWN0SW5BbGxGcmFtZXMsIFdlYkNvcmU6OlVzZXJTdHlsZVVzZXJMZXZlbCB9LCBBUEk6OlVz
ZXJDb250ZW50V29ybGQ6Om5vcm1hbFdvcmxkKCkpOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgZm9yTWFp
bkZyYW1lT25seTooQk9PTClmb3JNYWluRnJhbWVPbmx5IGxlZ2FjeVdoaXRlbGlzdDooV0tfQVJS
QVkoTlNTdHJpbmcgKikgKilsZWdhY3lXaGl0ZWxpc3QgbGVnYWN5QmxhY2tsaXN0OihXS19BUlJB
WShOU1N0cmluZyAqKSAqKWxlZ2FjeUJsYWNrbGlzdCB1c2VyQ29udGVudFdvcmxkOihfV0tVc2Vy
Q29udGVudFdvcmxkICopdXNlckNvbnRlbnRXb3JsZAoreworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgLy8gRklYTUU6IEluIHRoZSBB
UEkgdGVzdCwgd2UgY2FuIHVzZSBnZW5lcmF0ZVVuaXF1ZVVSTCBiZWxvdyBiZWZvcmUgdGhlIEFQ
STo6T2JqZWN0IGNvbnN0cnVjdG9yIGhhcyBkb25lIHRoaXMuLi4gd2hlcmUgc2hvdWxkIHRoaXMg
cmVhbGx5IGJlPworICAgIFdlYktpdDo6SW5pdGlhbGl6ZVdlYktpdDIoKTsKKworICAgIEFQSTo6
T2JqZWN0Ojpjb25zdHJ1Y3RJbldyYXBwZXI8QVBJOjpVc2VyU3R5bGVTaGVldD4oc2VsZiwgV2Vi
Q29yZTo6VXNlclN0eWxlU2hlZXQgeyBXVEY6OlN0cmluZyhzb3VyY2UpLCBBUEk6OlVzZXJTdHls
ZVNoZWV0OjpnZW5lcmF0ZVVuaXF1ZVVSTCgpLCBBUEk6OnRvU3RyaW5nVmVjdG9yKGxlZ2FjeVdo
aXRlbGlzdCksIEFQSTo6dG9TdHJpbmdWZWN0b3IobGVnYWN5QmxhY2tsaXN0KSwgZm9yTWFpbkZy
YW1lT25seSA/IFdlYkNvcmU6OkluamVjdEluVG9wRnJhbWVPbmx5IDogV2ViQ29yZTo6SW5qZWN0
SW5BbGxGcmFtZXMsIFdlYkNvcmU6OlVzZXJTdHlsZVVzZXJMZXZlbCB9LCAqdXNlckNvbnRlbnRX
b3JsZC0+X3VzZXJDb250ZW50V29ybGQpOwogCiAgICAgcmV0dXJuIHNlbGY7CiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2Vy
Q29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAJKHJldmlzaW9uIDE5NzIy
OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDkgKzg1LDkgQEAgdm9p
ZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6YWRkUAogICAgICAgICB1c2VyU2NyaXB0
cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIodXNlclNjcmlwdC0+dXNlckNvbnRlbnRXb3JsZCgpLmlk
ZW50aWZpZXIoKSwgdXNlclNjcmlwdC0+dXNlclNjcmlwdCgpKSk7CiAgICAgd2ViUHJvY2Vzc1By
b3h5LmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVy
OjpBZGRVc2VyU2NyaXB0cyh1c2VyU2NyaXB0cyksIG1faWRlbnRpZmllcik7CiAKLSAgICBWZWN0
b3I8V2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+IHVzZXJTdHlsZVNoZWV0czsKKyAgICBWZWN0b3I8
c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4+IHVzZXJTdHlsZVNo
ZWV0czsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHVzZXJTdHlsZVNoZWV0IDogbV91c2VyU3R5bGVT
aGVldHMtPmVsZW1lbnRzT2ZUeXBlPEFQSTo6VXNlclN0eWxlU2hlZXQ+KCkpCi0gICAgICAgIHVz
ZXJTdHlsZVNoZWV0cy5hcHBlbmQodXNlclN0eWxlU2hlZXQtPnVzZXJTdHlsZVNoZWV0KCkpOwor
ICAgICAgICB1c2VyU3R5bGVTaGVldHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHVzZXJTdHlsZVNo
ZWV0LT51c2VyQ29udGVudFdvcmxkKCkuaWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC0+dXNl
clN0eWxlU2hlZXQoKSkpOwogICAgIHdlYlByb2Nlc3NQcm94eS5jb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlclN0eWxlU2hlZXRzKHVz
ZXJTdHlsZVNoZWV0cyksIG1faWRlbnRpZmllcik7CiAKICAgICBWZWN0b3I8V2ViU2NyaXB0TWVz
c2FnZUhhbmRsZXJIYW5kbGU+IG1lc3NhZ2VIYW5kbGVySGFuZGxlczsKQEAgLTExMSwxNyArMTEx
LDU5IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW8KICAgICB3ZWJQ
cm9jZXNzUHJveHkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lkZW50aWZpZXIpOwog
fQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRVc2VyU2NyaXB0KEFQ
STo6VXNlclNjcmlwdCYgdXNlclNjcmlwdCkKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHk6OmFkZFVzZXJDb250ZW50V29ybGRVc2UoQVBJOjpVc2VyQ29udGVudFdvcmxkJiB3b3Js
ZCkKIHsKLSAgICBSZWY8QVBJOjpVc2VyQ29udGVudFdvcmxkPiB3b3JsZCA9IHVzZXJTY3JpcHQu
dXNlckNvbnRlbnRXb3JsZCgpOworICAgIGlmICgmd29ybGQgPT0gJkFQSTo6VXNlckNvbnRlbnRX
b3JsZDo6bm9ybWFsV29ybGQoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHdvcmxkLnB0
cigpICE9ICZBUEk6OlVzZXJDb250ZW50V29ybGQ6Om5vcm1hbFdvcmxkKCkpIHsKLSAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtX3VzZXJDb250ZW50V29ybGRzLmFkZCh3b3JsZC5wdHIoKSk7Ci0g
ICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgZm9yIChXZWJQ
cm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykKLSAgICAgICAgICAgICAgICBwcm9j
ZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6QWRkVXNlckNvbnRlbnRXb3JsZHMoeyBzdGQ6Om1ha2VfcGFpcih3b3JsZC0+aWRlbnRpZmll
cigpLCB3b3JsZC0+bmFtZSgpKSB9KSwgbV9pZGVudGlmaWVyKTsKKyAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fdXNlckNvbnRlbnRXb3JsZHMuYWRkKCZ3b3JsZCk7CisgICAgaWYgKGFkZFJlc3VsdC5p
c05ld0VudHJ5KSB7CisgICAgICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9w
cm9jZXNzZXMpCisgICAgICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlckNvbnRlbnRXb3JsZHMoeyBzdGQ6
Om1ha2VfcGFpcih3b3JsZC5pZGVudGlmaWVyKCksIHdvcmxkLm5hbWUoKSkgfSksIG1faWRlbnRp
Zmllcik7CisgICAgfQorfQorCitib29sIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Ojpz
aG91bGRTZW5kUmVtb3ZlVXNlckNvbnRlbnRXb3JsZHNNZXNzYWdlKEFQSTo6VXNlckNvbnRlbnRX
b3JsZCYgd29ybGQsIHVuc2lnbmVkIG51bWJlck9mVXNlc1RvUmVtb3ZlKQoreworICAgIGlmICgm
d29ybGQgPT0gJkFQSTo6VXNlckNvbnRlbnRXb3JsZDo6bm9ybWFsV29ybGQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYXV0byBpdCA9IG1fdXNlckNvbnRlbnRXb3JsZHMuZmluZCgm
d29ybGQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlVzZXNUb1JlbW92
ZTsgKytpKSB7CisgICAgICAgIGlmIChtX3VzZXJDb250ZW50V29ybGRzLnJlbW92ZShpdCkpIHsK
KyAgICAgICAgICAgIEFTU0VSVChpID09IChudW1iZXJPZlVzZXNUb1JlbW92ZSAtIDEpKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cmVtb3Zl
VXNlckNvbnRlbnRXb3JsZFVzZXMoQVBJOjpVc2VyQ29udGVudFdvcmxkJiB3b3JsZCwgdW5zaWdu
ZWQgbnVtYmVyT2ZVc2VzVG9SZW1vdmUpCit7CisgICAgaWYgKHNob3VsZFNlbmRSZW1vdmVVc2Vy
Q29udGVudFdvcmxkc01lc3NhZ2Uod29ybGQsIG51bWJlck9mVXNlc1RvUmVtb3ZlKSkgeworICAg
ICAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQorICAgICAg
ICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXI6OlJlbW92ZVVzZXJDb250ZW50V29ybGRzKHsgd29ybGQuaWRlbnRpZmllcigp
IH0pLCBtX2lkZW50aWZpZXIpOworICAgIH0KK30KKwordm9pZCBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eTo6cmVtb3ZlVXNlckNvbnRlbnRXb3JsZFVzZXMoSGFzaENvdW50ZWRTZXQ8UmVm
UHRyPEFQSTo6VXNlckNvbnRlbnRXb3JsZD4+JiB3b3JsZHMpCit7CisgICAgVmVjdG9yPHVpbnQ2
NF90PiB3b3JsZHNUb1JlbW92ZTsKKyAgICBmb3IgKGF1dG8mIHdvcmxkVXNlUGFpciA6IHdvcmxk
cykgeworICAgICAgICBpZiAoc2hvdWxkU2VuZFJlbW92ZVVzZXJDb250ZW50V29ybGRzTWVzc2Fn
ZSgqd29ybGRVc2VQYWlyLmtleS5nZXQoKSwgd29ybGRVc2VQYWlyLnZhbHVlKSkKKyAgICAgICAg
ICAgIHdvcmxkc1RvUmVtb3ZlLmFwcGVuZCh3b3JsZFVzZVBhaXIua2V5LT5pZGVudGlmaWVyKCkp
OworICAgIH0KKworICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9wcm9jZXNz
ZXMpCisgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpSZW1vdmVVc2VyQ29udGVudFdvcmxkcyh3b3JsZHNUb1JlbW92
ZSksIG1faWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHk6OmFkZFVzZXJTY3JpcHQoQVBJOjpVc2VyU2NyaXB0JiB1c2VyU2NyaXB0KQoreworICAgIFJl
ZjxBUEk6OlVzZXJDb250ZW50V29ybGQ+IHdvcmxkID0gdXNlclNjcmlwdC51c2VyQ29udGVudFdv
cmxkKCk7CisKKyAgICBhZGRVc2VyQ29udGVudFdvcmxkVXNlKHdvcmxkLmdldCgpKTsKIAogICAg
IG1fdXNlclNjcmlwdHMtPmVsZW1lbnRzKCkuYXBwZW5kKCZ1c2VyU2NyaXB0KTsKIApAQCAtMTM4
LDQ0ICsxODAsOTUgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cmVtbwog
CiAgICAgbV91c2VyU2NyaXB0cy0+ZWxlbWVudHMoKS5yZW1vdmVBbGwoJnVzZXJTY3JpcHQpOwog
Ci0gICAgaWYgKHdvcmxkLnB0cigpICE9ICZBUEk6OlVzZXJDb250ZW50V29ybGQ6Om5vcm1hbFdv
cmxkKCkpIHsKLSAgICAgICAgaWYgKG1fdXNlckNvbnRlbnRXb3JsZHMucmVtb3ZlKCZ1c2VyU2Ny
aXB0LnVzZXJDb250ZW50V29ybGQoKSkpIHsKLSAgICAgICAgICAgIGZvciAoV2ViUHJvY2Vzc1By
b3h5KiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAgICAgICAgICAgcHJvY2Vzcy0+Y29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OlJlbW92
ZVVzZXJDb250ZW50V29ybGQod29ybGQtPmlkZW50aWZpZXIoKSksIG1faWRlbnRpZmllcik7Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgcmVtb3ZlVXNlckNvbnRlbnRXb3JsZFVzZXMod29ybGQuZ2V0
KCksIDEpOworfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVB
bGxVc2VyU2NyaXB0cyhBUEk6OlVzZXJDb250ZW50V29ybGQmIHdvcmxkKQoreworICAgIGZvciAo
V2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCisgICAgICAgIHByb2Nlc3Mt
PmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpS
ZW1vdmVBbGxVc2VyU2NyaXB0cyh7IHdvcmxkLmlkZW50aWZpZXIoKSB9KSwgbV9pZGVudGlmaWVy
KTsKKworICAgIHVuc2lnbmVkIHVzZXJTY3JpcHRzUmVtb3ZlZCA9IG1fdXNlclNjcmlwdHMtPnJl
bW92ZUFsbE9mVHlwZU1hdGNoaW5nPEFQSTo6VXNlclNjcmlwdD4oCisgICAgICAgIFsmXSAoY29u
c3QgUmVmUHRyPEFQSTo6VXNlclNjcmlwdD4mIHVzZXJTY3JpcHQpIC0+IGJvb2wgeworICAgICAg
ICAgICAgcmV0dXJuICZ1c2VyU2NyaXB0LT51c2VyQ29udGVudFdvcmxkKCkgPT0gJndvcmxkOwor
ICAgICAgICB9KTsKKworICAgIHJlbW92ZVVzZXJDb250ZW50V29ybGRVc2VzKHdvcmxkLCB1c2Vy
U2NyaXB0c1JlbW92ZWQpOwogfQogCiB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
OjpyZW1vdmVBbGxVc2VyU2NyaXB0cygpCiB7CisgICAgSGFzaENvdW50ZWRTZXQ8UmVmUHRyPEFQ
STo6VXNlckNvbnRlbnRXb3JsZD4+IHdvcmxkczsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHVzZXJT
Y3JpcHQgOiBtX3VzZXJTY3JpcHRzLT5lbGVtZW50c09mVHlwZTxBUEk6OlVzZXJTY3JpcHQ+KCkp
CisgICAgICAgIHdvcmxkcy5hZGQoY29uc3RfY2FzdDxBUEk6OlVzZXJDb250ZW50V29ybGQqPigm
dXNlclNjcmlwdC0+dXNlckNvbnRlbnRXb3JsZCgpKSk7CisKKyAgICBWZWN0b3I8dWludDY0X3Q+
IHdvcmxkSWRlbnRpZmllcnM7CisgICAgd29ybGRJZGVudGlmaWVycy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHdvcmxkcy5zaXplKCkpOworICAgIGZvciAoY29uc3QgYXV0byYgd29ybGRDb3VudFBh
aXIgOiB3b3JsZHMpCisgICAgICAgIHdvcmxkSWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5kKHdv
cmxkQ291bnRQYWlyLmtleS0+aWRlbnRpZmllcigpKTsKKwogICAgIGZvciAoV2ViUHJvY2Vzc1By
b3h5KiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpSZW1vdmVBbGxVc2Vy
U2NyaXB0cyhBUEk6OlVzZXJDb250ZW50V29ybGQ6Om5vcm1hbFdvcmxkKCkuaWRlbnRpZmllcigp
KSwgbV9pZGVudGlmaWVyKTsKKyAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OlJlbW92ZUFsbFVzZXJTY3JpcHRzKHdv
cmxkSWRlbnRpZmllcnMpLCBtX2lkZW50aWZpZXIpOwogCiAgICAgbV91c2VyU2NyaXB0cy0+ZWxl
bWVudHMoKS5jbGVhcigpOworCisgICAgcmVtb3ZlVXNlckNvbnRlbnRXb3JsZFVzZXMod29ybGRz
KTsKIH0KIAogdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6YWRkVXNlclN0eWxl
U2hlZXQoQVBJOjpVc2VyU3R5bGVTaGVldCYgdXNlclN0eWxlU2hlZXQpCiB7CisgICAgUmVmPEFQ
STo6VXNlckNvbnRlbnRXb3JsZD4gd29ybGQgPSB1c2VyU3R5bGVTaGVldC51c2VyQ29udGVudFdv
cmxkKCk7CisKKyAgICBhZGRVc2VyQ29udGVudFdvcmxkVXNlKHdvcmxkLmdldCgpKTsKKwogICAg
IG1fdXNlclN0eWxlU2hlZXRzLT5lbGVtZW50cygpLmFwcGVuZCgmdXNlclN0eWxlU2hlZXQpOwog
CiAgICAgZm9yIChXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykKLSAgICAg
ICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENv
bnRyb2xsZXI6OkFkZFVzZXJTdHlsZVNoZWV0cyh7IHVzZXJTdHlsZVNoZWV0LnVzZXJTdHlsZVNo
ZWV0KCkgfSksIG1faWRlbnRpZmllcik7CisgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2VyU3R5bGVTaGVl
dHMoeyBzdGQ6Om1ha2VfcGFpcih3b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC51
c2VyU3R5bGVTaGVldCgpKSB9KSwgbV9pZGVudGlmaWVyKTsKIH0KIAotdm9pZCBXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eTo6cmVtb3ZlVXNlclN0eWxlU2hlZXQoY29uc3QgQVBJOjpVc2Vy
U3R5bGVTaGVldCYgdXNlclN0eWxlU2hlZXQpCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5OjpyZW1vdmVVc2VyU3R5bGVTaGVldChBUEk6OlVzZXJTdHlsZVNoZWV0JiB1c2VyU3R5
bGVTaGVldCkKIHsKKyAgICBSZWY8QVBJOjpVc2VyQ29udGVudFdvcmxkPiB3b3JsZCA9IHVzZXJT
dHlsZVNoZWV0LnVzZXJDb250ZW50V29ybGQoKTsKKwogICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5
KiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpSZW1vdmVVc2VyU3R5bGVT
aGVldCh7IHVzZXJTdHlsZVNoZWV0LnVzZXJTdHlsZVNoZWV0KCkudXJsKCkuc3RyaW5nKCkgfSks
IG1faWRlbnRpZmllcik7CisgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpSZW1vdmVVc2VyU3R5bGVTaGVldCh3b3Js
ZC0+aWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC51c2VyU3R5bGVTaGVldCgpLnVybCgpLnN0
cmluZygpKSwgbV9pZGVudGlmaWVyKTsKIAogICAgIG1fdXNlclN0eWxlU2hlZXRzLT5lbGVtZW50
cygpLnJlbW92ZUFsbCgmdXNlclN0eWxlU2hlZXQpOworCisgICAgcmVtb3ZlVXNlckNvbnRlbnRX
b3JsZFVzZXMod29ybGQuZ2V0KCksIDEpOworfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5OjpyZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMoQVBJOjpVc2VyQ29udGVudFdvcmxk
JiB3b3JsZCkKK3sKKyAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vz
c2VzKQorICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6UmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKHsgd29ybGQuaWRl
bnRpZmllcigpIH0pLCBtX2lkZW50aWZpZXIpOworCisgICAgdW5zaWduZWQgdXNlclN0eWxlU2hl
ZXRzUmVtb3ZlZCA9IG1fdXNlclN0eWxlU2hlZXRzLT5yZW1vdmVBbGxPZlR5cGVNYXRjaGluZzxB
UEk6OlVzZXJTdHlsZVNoZWV0PigKKyAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8QVBJOjpVc2Vy
U3R5bGVTaGVldD4mIHVzZXJTdHlsZVNoZWV0KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVy
biAmdXNlclN0eWxlU2hlZXQtPnVzZXJDb250ZW50V29ybGQoKSA9PSAmd29ybGQ7CisgICAgICAg
IH0pOworCisgICAgcmVtb3ZlVXNlckNvbnRlbnRXb3JsZFVzZXMod29ybGQsIHVzZXJTdHlsZVNo
ZWV0c1JlbW92ZWQpOwogfQogCiB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Ojpy
ZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMoKQogewotICAgIG1fdXNlclN0eWxlU2hlZXRzLT5lbGVt
ZW50cygpLmNsZWFyKCk7CisgICAgSGFzaENvdW50ZWRTZXQ8UmVmUHRyPEFQSTo6VXNlckNvbnRl
bnRXb3JsZD4+IHdvcmxkczsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHVzZXJTdHlsZVNoZWV0IDog
bV91c2VyU3R5bGVTaGVldHMtPmVsZW1lbnRzT2ZUeXBlPEFQSTo6VXNlclN0eWxlU2hlZXQ+KCkp
CisgICAgICAgIHdvcmxkcy5hZGQoY29uc3RfY2FzdDxBUEk6OlVzZXJDb250ZW50V29ybGQqPigm
dXNlclN0eWxlU2hlZXQtPnVzZXJDb250ZW50V29ybGQoKSkpOworCisgICAgVmVjdG9yPHVpbnQ2
NF90PiB3b3JsZElkZW50aWZpZXJzOworICAgIHdvcmxkSWRlbnRpZmllcnMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eSh3b3JsZHMuc2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHdvcmxkQ291
bnRQYWlyIDogd29ybGRzKQorICAgICAgICB3b3JsZElkZW50aWZpZXJzLnVuY2hlY2tlZEFwcGVu
ZCh3b3JsZENvdW50UGFpci5rZXktPmlkZW50aWZpZXIoKSk7CiAKICAgICBmb3IgKFdlYlByb2Nl
c3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQotICAgICAgICBwcm9jZXNzLT5jb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6UmVtb3ZlQWxs
VXNlclN0eWxlU2hlZXRzKCksIG1faWRlbnRpZmllcik7CisgICAgICAgIHByb2Nlc3MtPmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpSZW1vdmVB
bGxVc2VyU3R5bGVTaGVldHMod29ybGRJZGVudGlmaWVycyksIG1faWRlbnRpZmllcik7CisKKyAg
ICBtX3VzZXJTdHlsZVNoZWV0cy0+ZWxlbWVudHMoKS5jbGVhcigpOworCisgICAgcmVtb3ZlVXNl
ckNvbnRlbnRXb3JsZFVzZXMod29ybGRzKTsKIH0KIAogYm9vbCBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eTo6YWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVyKFdlYlNjcmlwdE1lc3NhZ2VI
YW5kbGVyKiBoYW5kbGVyKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1VzZXJDb250
ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5LmgJKHJldmlzaW9uIDE5NzIyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2Vy
Q29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03NiwxMyArNzYsMTcgQEAgcHVibGljOgogICAgIEFQSTo6QXJyYXkmIHVzZXJTY3JpcHRzKCkg
eyByZXR1cm4gbV91c2VyU2NyaXB0cy5nZXQoKTsgfQogICAgIHZvaWQgYWRkVXNlclNjcmlwdChB
UEk6OlVzZXJTY3JpcHQmKTsKICAgICB2b2lkIHJlbW92ZVVzZXJTY3JpcHQoQVBJOjpVc2VyU2Ny
aXB0Jik7CisgICAgdm9pZCByZW1vdmVBbGxVc2VyU2NyaXB0cyhBUEk6OlVzZXJDb250ZW50V29y
bGQmKTsKICAgICB2b2lkIHJlbW92ZUFsbFVzZXJTY3JpcHRzKCk7CiAKICAgICBBUEk6OkFycmF5
JiB1c2VyU3R5bGVTaGVldHMoKSB7IHJldHVybiBtX3VzZXJTdHlsZVNoZWV0cy5nZXQoKTsgfQog
ICAgIHZvaWQgYWRkVXNlclN0eWxlU2hlZXQoQVBJOjpVc2VyU3R5bGVTaGVldCYpOwotICAgIHZv
aWQgcmVtb3ZlVXNlclN0eWxlU2hlZXQoY29uc3QgQVBJOjpVc2VyU3R5bGVTaGVldCYpOworICAg
IHZvaWQgcmVtb3ZlVXNlclN0eWxlU2hlZXQoQVBJOjpVc2VyU3R5bGVTaGVldCYpOworICAgIHZv
aWQgcmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKEFQSTo6VXNlckNvbnRlbnRXb3JsZCYpOwogICAg
IHZvaWQgcmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKCk7CiAKKyAgICB2b2lkIHJlbW92ZUFsbFVz
ZXJDb250ZW50KEFQSTo6VXNlckNvbnRlbnRXb3JsZCYpOworCiAgICAgLy8gUmV0dXJucyBmYWxz
ZSBpZiB0aGVyZSB3YXMgYSBuYW1lIGNvbmZsaWN0LgogICAgIGJvb2wgYWRkVXNlclNjcmlwdE1l
c3NhZ2VIYW5kbGVyKFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyKik7CiAgICAgdm9pZCByZW1vdmVV
c2VyTWVzc2FnZUhhbmRsZXJGb3JOYW1lKGNvbnN0IFN0cmluZyYpOwpAQCAtOTksNiArMTAzLDEx
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZFBvc3RNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IHVpbnQ2NF90IHBhZ2VJRCwgdWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhJiwgdWludDY0X3QgbWVzc2FnZUhhbmRsZXJJRCwgY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJik7CiAKKyAgICB2b2lkIGFkZFVzZXJDb250ZW50V29ybGRVc2UoQVBJOjpVc2Vy
Q29udGVudFdvcmxkJik7CisgICAgdm9pZCByZW1vdmVVc2VyQ29udGVudFdvcmxkVXNlcyhBUEk6
OlVzZXJDb250ZW50V29ybGQmLCB1bnNpZ25lZCBudW1iZXJPZlVzZXNUb1JlbW92ZSk7CisgICAg
dm9pZCByZW1vdmVVc2VyQ29udGVudFdvcmxkVXNlcyhIYXNoQ291bnRlZFNldDxSZWZQdHI8QVBJ
OjpVc2VyQ29udGVudFdvcmxkPj4mKTsKKyAgICBib29sIHNob3VsZFNlbmRSZW1vdmVVc2VyQ29u
dGVudFdvcmxkc01lc3NhZ2UoQVBJOjpVc2VyQ29udGVudFdvcmxkJiwgdW5zaWduZWQgbnVtYmVy
T2ZVc2VzVG9SZW1vdmUpOworCiAgICAgdWludDY0X3QgbV9pZGVudGlmaWVyOwogICAgIEhhc2hT
ZXQ8V2ViUHJvY2Vzc1Byb3h5Kj4gbV9wcm9jZXNzZXM7ICAgIAogICAgIFJlZjxBUEk6OkFycmF5
PiBtX3VzZXJTY3JpcHRzOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29u
dGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmNw
cAkocmV2aXNpb24gMTk3MjI4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29u
dGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUs
MjEgKzEwNSwyMyBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvCiAg
ICAgfQogfQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlckNvbnRl
bnRXb3JsZCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIpCit2b2lkIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlVXNlckNvbnRlbnRXb3JsZHMoY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYg
d29ybGRJZGVudGlmaWVycykKIHsKLSAgICBBU1NFUlQod29ybGRJZGVudGlmaWVyKTsKLSAgICBB
U1NFUlQod29ybGRJZGVudGlmaWVyICE9IDEpOworICAgIGZvciAoYXV0byYgd29ybGRJZGVudGlm
aWVyIDogd29ybGRJZGVudGlmaWVycykgeworICAgICAgICBBU1NFUlQod29ybGRJZGVudGlmaWVy
KTsKKyAgICAgICAgQVNTRVJUKHdvcmxkSWRlbnRpZmllciAhPSAxKTsKIAotICAgIGF1dG8gaXQg
PSB3b3JsZE1hcCgpLmZpbmQod29ybGRJZGVudGlmaWVyKTsKLSAgICBpZiAoaXQgPT0gd29ybGRN
YXAoKS5lbmQoKSkgewotICAgICAgICBXVEZMb2dBbHdheXMoIlRyeWluZyB0byByZW1vdmUgYSBV
c2VyQ29udGVudFdvcmxkIChpZD0lbGx1KSB0aGF0IGlzIGRvZXMgbm90IGV4aXN0LiIsIHdvcmxk
SWRlbnRpZmllcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIGF1dG8gaXQgPSB3
b3JsZE1hcCgpLmZpbmQod29ybGRJZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKGl0ID09IHdvcmxk
TWFwKCkuZW5kKCkpIHsKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiVHJ5aW5nIHRvIHJlbW92
ZSBhIFVzZXJDb250ZW50V29ybGQgKGlkPSVsbHUpIHRoYXQgaXMgZG9lcyBub3QgZXhpc3QuIiwg
d29ybGRJZGVudGlmaWVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAg
aXQtPnZhbHVlLnNlY29uZC0tOwotICAgIAotICAgIGlmICghaXQtPnZhbHVlLnNlY29uZCkKLSAg
ICAgICAgd29ybGRNYXAoKS5yZW1vdmUoaXQpOworICAgICAgICBpdC0+dmFsdWUuc2Vjb25kLS07
CisgICAgICAgIAorICAgICAgICBpZiAoIWl0LT52YWx1ZS5zZWNvbmQpCisgICAgICAgICAgICB3
b3JsZE1hcCgpLnJlbW92ZShpdCk7CisgICAgfQogfQogCiB2b2lkIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6YWRkVXNlclNjcmlwdHMoY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwg
V2ViQ29yZTo6VXNlclNjcmlwdD4+JiB1c2VyU2NyaXB0cykKQEAgLTE0NiwzMyArMTQ4LDU0IEBA
IHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2UKICAgICBtX3VzZXJDb250
ZW50Q29udHJvbGxlci0+cmVtb3ZlVXNlclNjcmlwdChpdC0+dmFsdWUuZmlyc3QtPmNvcmVXb3Js
ZCgpLCBVUkwoVVJMKCksIHVybFN0cmluZykpOwogfQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlQWxsVXNlclNjcmlwdHModWludDY0X3Qgd29ybGRJZGVudGlmaWVyKQor
dm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJTY3JpcHRzKGNvbnN0
IFZlY3Rvcjx1aW50NjRfdD4mIHdvcmxkSWRlbnRpZmllcnMpCiB7Ci0gICAgYXV0byBpdCA9IHdv
cmxkTWFwKCkuZmluZCh3b3JsZElkZW50aWZpZXIpOwotICAgIGlmIChpdCA9PSB3b3JsZE1hcCgp
LmVuZCgpKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiVHJ5aW5nIHRvIHJlbW92ZSBhbGwgVXNl
clNjcmlwdHMgZnJvbSBhIFVzZXJDb250ZW50V29ybGQgKGlkPSVsbHUpIHRoYXQgZG9lcyBub3Qg
ZXhpc3QuIiwgd29ybGRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBm
b3IgKGF1dG8mIHdvcmxkSWRlbnRpZmllciA6IHdvcmxkSWRlbnRpZmllcnMpIHsKKyAgICAgICAg
YXV0byBpdCA9IHdvcmxkTWFwKCkuZmluZCh3b3JsZElkZW50aWZpZXIpOworICAgICAgICBpZiAo
aXQgPT0gd29ybGRNYXAoKS5lbmQoKSkgeworICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJUcnlp
bmcgdG8gcmVtb3ZlIGFsbCBVc2VyU2NyaXB0cyBmcm9tIGEgVXNlckNvbnRlbnRXb3JsZCAoaWQ9
JWxsdSkgdGhhdCBkb2VzIG5vdCBleGlzdC4iLCB3b3JsZElkZW50aWZpZXIpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+cmVt
b3ZlVXNlclNjcmlwdHMoaXQtPnZhbHVlLmZpcnN0LT5jb3JlV29ybGQoKSk7CisgICAgICAgIG1f
dXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVVc2VyU2NyaXB0cyhpdC0+dmFsdWUuZmlyc3Qt
PmNvcmVXb3JsZCgpKTsKKyAgICB9CiB9CiAKLXZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
OjphZGRVc2VyU3R5bGVTaGVldHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0
PiYgdXNlclN0eWxlU2hlZXRzKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVz
ZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpV
c2VyU3R5bGVTaGVldD4+JiB1c2VyU3R5bGVTaGVldHMpCiB7Ci0gICAgZm9yIChjb25zdCBhdXRv
JiB1c2VyU3R5bGVTaGVldCA6IHVzZXJTdHlsZVNoZWV0cykgewotICAgICAgICBtX3VzZXJDb250
ZW50Q29udHJvbGxlci0+YWRkVXNlclN0eWxlU2hlZXQobWFpblRocmVhZE5vcm1hbFdvcmxkKCks
Ci0gICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Pih1
c2VyU3R5bGVTaGVldCksIEluamVjdEluRXhpc3RpbmdEb2N1bWVudHMpOworICAgIGZvciAoY29u
c3QgYXV0byYgdXNlclN0eWxlU2hlZXRXb3JsZFBhaXIgOiB1c2VyU3R5bGVTaGVldHMpIHsKKyAg
ICAgICAgYXV0byBpdCA9IHdvcmxkTWFwKCkuZmluZCh1c2VyU3R5bGVTaGVldFdvcmxkUGFpci5m
aXJzdCk7CisgICAgICAgIGlmIChpdCA9PSB3b3JsZE1hcCgpLmVuZCgpKSB7CisgICAgICAgICAg
ICBXVEZMb2dBbHdheXMoIlRyeWluZyB0byBhZGQgYSBVc2VyU3R5bGVTaGVldCB0byBhIFVzZXJD
b250ZW50V29ybGQgKGlkPSVsbHUpIHRoYXQgZG9lcyBub3QgZXhpc3QuIiwgdXNlclN0eWxlU2hl
ZXRXb3JsZFBhaXIuZmlyc3QpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwor
ICAgICAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+YWRkVXNlclN0eWxlU2hlZXQoaXQtPnZh
bHVlLmZpcnN0LT5jb3JlV29ybGQoKSwgc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpVc2VyU3R5
bGVTaGVldD4odXNlclN0eWxlU2hlZXRXb3JsZFBhaXIuc2Vjb25kKSwgSW5qZWN0SW5FeGlzdGlu
Z0RvY3VtZW50cyk7CiAgICAgfQogfQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
cmVtb3ZlVXNlclN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit2b2lkIFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXQodWludDY0X3Qgd29ybGRJ
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsKLSAgICBtX3VzZXJDb250ZW50
Q29udHJvbGxlci0+cmVtb3ZlVXNlclN0eWxlU2hlZXQobWFpblRocmVhZE5vcm1hbFdvcmxkKCks
IFVSTChVUkwoKSwgdXJsU3RyaW5nKSk7CisgICAgYXV0byBpdCA9IHdvcmxkTWFwKCkuZmluZCh3
b3JsZElkZW50aWZpZXIpOworICAgIGlmIChpdCA9PSB3b3JsZE1hcCgpLmVuZCgpKSB7CisgICAg
ICAgIFdURkxvZ0Fsd2F5cygiVHJ5aW5nIHRvIHJlbW92ZSBhIFVzZXJTdHlsZVNoZWV0IGZyb20g
YSBVc2VyQ29udGVudFdvcmxkIChpZD0lbGx1KSB0aGF0IGRvZXMgbm90IGV4aXN0LiIsIHdvcmxk
SWRlbnRpZmllcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3VzZXJDb250ZW50
Q29udHJvbGxlci0+cmVtb3ZlVXNlclN0eWxlU2hlZXQoaXQtPnZhbHVlLmZpcnN0LT5jb3JlV29y
bGQoKSwgVVJMKFVSTCgpLCB1cmxTdHJpbmcpKTsKIH0KIAotdm9pZCBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJTdHlsZVNoZWV0cygpCit2b2lkIFdlYlVzZXJDb250ZW50
Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3Rvcjx1aW50NjRf
dD4mIHdvcmxkSWRlbnRpZmllcnMpCiB7Ci0gICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnJl
bW92ZVVzZXJTdHlsZVNoZWV0cyhtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAgZm9yIChh
dXRvJiB3b3JsZElkZW50aWZpZXIgOiB3b3JsZElkZW50aWZpZXJzKSB7CisgICAgICAgIGF1dG8g
aXQgPSB3b3JsZE1hcCgpLmZpbmQod29ybGRJZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKGl0ID09
IHdvcmxkTWFwKCkuZW5kKCkpIHsKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiVHJ5aW5nIHRv
IHJlbW92ZSBhbGwgVXNlclN0eWxlU2hlZXRzIGZyb20gYSBVc2VyQ29udGVudFdvcmxkIChpZD0l
bGx1KSB0aGF0IGRvZXMgbm90IGV4aXN0LiIsIHdvcmxkSWRlbnRpZmllcik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+
cmVtb3ZlVXNlclN0eWxlU2hlZXRzKGl0LT52YWx1ZS5maXJzdC0+Y29yZVdvcmxkKCkpOworICAg
IH0KIH0KIAogI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyLmgJKHJldmlzaW9uIDE5NzIyOCkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDE1ICs1NCwxNSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VEZWNvZGVy
Jikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGFkZFVzZXJDb250ZW50V29ybGRzKGNvbnN0IFZlY3Rv
cjxzdGQ6OnBhaXI8dWludDY0X3QsIFN0cmluZz4+Jik7Ci0gICAgdm9pZCByZW1vdmVVc2VyQ29u
dGVudFdvcmxkKHVpbnQ2NF90KTsKKyAgICB2b2lkIHJlbW92ZVVzZXJDb250ZW50V29ybGRzKGNv
bnN0IFZlY3Rvcjx1aW50NjRfdD4mKTsKIAogICAgIHZvaWQgYWRkVXNlclNjcmlwdHMoY29uc3Qg
VmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6VXNlclNjcmlwdD4+Jik7CiAgICAg
dm9pZCByZW1vdmVVc2VyU2NyaXB0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcpOwotICAgIHZvaWQgcmVtb3ZlQWxsVXNlclNjcmlwdHModWludDY0X3Qg
d29ybGRJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbW92ZUFsbFVzZXJTY3JpcHRzKGNvbnN0IFZl
Y3Rvcjx1aW50NjRfdD4mKTsKIAotICAgIHZvaWQgYWRkVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4mKTsKLSAgICB2b2lkIHJlbW92ZVVzZXJTdHls
ZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKLSAgICB2b2lkIHJlbW92ZUFsbFVzZXJT
dHlsZVNoZWV0cygpOworICAgIHZvaWQgYWRkVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3Rvcjxz
dGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Pj4mKTsKKyAgICB2b2lk
IHJlbW92ZVVzZXJTdHlsZVNoZWV0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcpOworICAgIHZvaWQgcmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKGNvbnN0
IFZlY3Rvcjx1aW50NjRfdD4mKTsKIAogICAgIHZvaWQgYWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5k
bGVycyhjb25zdCBWZWN0b3I8V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJIYW5kbGU+Jik7CiAgICAg
dm9pZCByZW1vdmVVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXIodWludDY0X3QpOwpJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xs
ZXIubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9V
c2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIubWVzc2FnZXMuaW4JKHJldmlzaW9u
IDE5NzIyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNSAr
MjUsMTUgQEAKIAogbWVzc2FnZXMgLT4gV2ViVXNlckNvbnRlbnRDb250cm9sbGVyIHsKICAgICBB
ZGRVc2VyQ29udGVudFdvcmxkcyhWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBTdHJpbmc+PiB3
b3JsZHMpOwotICAgIFJlbW92ZVVzZXJDb250ZW50V29ybGQodWludDY0X3Qgd29ybGRJZGVudGlm
aWVyKTsKKyAgICBSZW1vdmVVc2VyQ29udGVudFdvcmxkcyhWZWN0b3I8dWludDY0X3Q+IHdvcmxk
SWRlbnRpZmllcnMpOwogCiAgICAgQWRkVXNlclNjcmlwdHMoVmVjdG9yPHN0ZDo6cGFpcjx1aW50
NjRfdCwgV2ViQ29yZTo6VXNlclNjcmlwdD4+IHVzZXJTY3JpcHRzKTsKICAgICBSZW1vdmVVc2Vy
U2NyaXB0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgU3RyaW5nIHVybCk7Ci0gICAgUmVtb3Zl
QWxsVXNlclNjcmlwdHModWludDY0X3Qgd29ybGRJZGVudGlmaWVyKTsKKyAgICBSZW1vdmVBbGxV
c2VyU2NyaXB0cyhWZWN0b3I8dWludDY0X3Q+IHdvcmxkSWRlbnRpZmllcnMpOwogCi0gICAgQWRk
VXNlclN0eWxlU2hlZXRzKFZlY3RvcjxXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4gdXNlclN0eWxl
U2hlZXRzKTsKLSAgICBSZW1vdmVVc2VyU3R5bGVTaGVldChTdHJpbmcgdXJsKTsKLSAgICBSZW1v
dmVBbGxVc2VyU3R5bGVTaGVldHMoKTsKKyAgICBBZGRVc2VyU3R5bGVTaGVldHMoVmVjdG9yPHN0
ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+PiB1c2VyU3R5bGVTaGVl
dHMpOworICAgIFJlbW92ZVVzZXJTdHlsZVNoZWV0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwg
U3RyaW5nIHVybCk7CisgICAgUmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKFZlY3Rvcjx1aW50NjRf
dD4gd29ybGRJZGVudGlmaWVycyk7CiAKICAgICBBZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJz
KFZlY3RvcjxXZWJLaXQ6OldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVySGFuZGxlPiBzY3JpcHRNZXNz
YWdlSGFuZGxlcnMpOwogICAgIFJlbW92ZVVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcih1aW50NjRf
dCBpZGVudGlmaWVyKTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzMwMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE2LTAyLTI4ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgQmluZCBfV0tVc2VyU3R5bGVTaGVldHMgdG8gV0tVc2VyQ29u
dGVudFdvcmxkcyB0byBhbGxvdyBmb3IgZ3JvdXBpbmcgb2YgdXNlciBjb250ZW50IGJ5IGFzc29j
aWF0aW5nIHRvIGEgd29ybGQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1NDc5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvVXNlckNvbnRlbnRD
b250cm9sbGVyLm1tOgorICAgICAgICBBZGQgdGVzdHMgZm9yIHJlbW92aW5nIF9XS1VzZXJTdHls
ZVNoZWV0cyBhbmQgV0tVc2VyU2NyaXB0cworCiAyMDE2LTAyLTI3ICBBbGV4ZXkgUHJvc2t1cnlh
a292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFNpbGVuY2UgbGVha3MgdW5kZXIgVGV4dENv
ZGVjSUNVOjpyZWdpc3RlckNvZGVjcwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyQ29jb2EvVXNlckNvbnRlbnRDb250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1VzZXJDb250ZW50Q29udHJvbGxlci5t
bQkocmV2aXNpb24gMTk3MjI4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
Q29jb2EvVXNlckNvbnRlbnRDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMCAr
MjcsMTQgQEAKIAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3Qu
aCIKLSNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQ
b29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJp
dmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLVXNlclNjcmlwdC5oPgorI2ltcG9ydCA8V2ViS2l0
L1dLVXNlclNjcmlwdFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBv
cnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KKyNpbXBvcnQgPFdlYktp
dC9fV0tVc2VyQ29udGVudFdvcmxkLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hl
ZXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgogI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgogCkBAIC0zNjUsNCArMzY5LDE3NiBAQCBURVNUKFdLVXNlckNvbnRlbnRD
b250cm9sbGVyLCBVc2VyU3R5bGVTCiAgICAgZXhwZWN0U2NyaXB0RXZhbHVhdGVzVG9Db2xvcih3
ZWJWaWV3LmdldCgpLCBmcmFtZUJhY2tncm91bmRDb2xvclNjcmlwdCwgZ3JlZW5JblJHQik7CiB9
CiAKK1RFU1QoV0tVc2VyQ29udGVudENvbnRyb2xsZXIsIFVzZXJTdHlsZVNoZWV0UmVtb3ZlKQor
eworICAgIFJldGFpblB0cjxXS1VzZXJDb250ZW50Q29udHJvbGxlcj4gdXNlckNvbnRlbnRDb250
cm9sbGVyID0gYWRvcHROUyhbW1dLVXNlckNvbnRlbnRDb250cm9sbGVyIGFsbG9jXSBpbml0XSk7
CisgICAgUmV0YWluUHRyPF9XS1VzZXJTdHlsZVNoZWV0PiBzdHlsZVNoZWV0ID0gYWRvcHROUyhb
W19XS1VzZXJTdHlsZVNoZWV0IGFsbG9jXSBpbml0V2l0aFNvdXJjZTpzdHlsZVNoZWV0U291cmNl
IGZvck1haW5GcmFtZU9ubHk6Tk9dKTsKKyAgICBbdXNlckNvbnRlbnRDb250cm9sbGVyIF9hZGRV
c2VyU3R5bGVTaGVldDpzdHlsZVNoZWV0LmdldCgpXTsKKyAgICAKKyAgICBFWFBFQ1RfRVEoMXUs
IFt1c2VyQ29udGVudENvbnRyb2xsZXIgX3VzZXJTdHlsZVNoZWV0c10uY291bnQpOworICAgIEVY
UEVDVF9FUShzdHlsZVNoZWV0LmdldCgpLCBbdXNlckNvbnRlbnRDb250cm9sbGVyIF91c2VyU3R5
bGVTaGVldHNdWzBdKTsKKworICAgIFt1c2VyQ29udGVudENvbnRyb2xsZXIgX3JlbW92ZVVzZXJT
dHlsZVNoZWV0OnN0eWxlU2hlZXQuZ2V0KCldOworCisgICAgRVhQRUNUX0VRKDB1LCBbdXNlckNv
bnRlbnRDb250cm9sbGVyIF91c2VyU3R5bGVTaGVldHNdLmNvdW50KTsKK30KKworVEVTVChXS1Vz
ZXJDb250ZW50Q29udHJvbGxlciwgVXNlclN0eWxlU2hlZXRSZW1vdmVBbGwpCit7CisgICAgUmV0
YWluUHRyPFdLVXNlckNvbnRlbnRDb250cm9sbGVyPiB1c2VyQ29udGVudENvbnRyb2xsZXIgPSBh
ZG9wdE5TKFtbV0tVc2VyQ29udGVudENvbnRyb2xsZXIgYWxsb2NdIGluaXRdKTsKKworICAgIFJl
dGFpblB0cjxfV0tVc2VyQ29udGVudFdvcmxkPiB3b3JsZCA9IGFkb3B0TlMoW19XS1VzZXJDb250
ZW50V29ybGQgd29ybGRXaXRoTmFtZTpAIlRlc3RXb3JsZCJdKTsKKworICAgIFJldGFpblB0cjxf
V0tVc2VyU3R5bGVTaGVldD4gc3R5bGVTaGVldCA9IGFkb3B0TlMoW1tfV0tVc2VyU3R5bGVTaGVl
dCBhbGxvY10gaW5pdFdpdGhTb3VyY2U6c3R5bGVTaGVldFNvdXJjZSBmb3JNYWluRnJhbWVPbmx5
Ok5PXSk7CisgICAgUmV0YWluUHRyPF9XS1VzZXJTdHlsZVNoZWV0PiBzdHlsZVNoZWV0QXNzb2Np
YXRlZFdpdGhXb3JsZCA9IGFkb3B0TlMoW1tfV0tVc2VyU3R5bGVTaGVldCBhbGxvY10gaW5pdFdp
dGhTb3VyY2U6c3R5bGVTaGVldFNvdXJjZSBmb3JNYWluRnJhbWVPbmx5Ok5PIGxlZ2FjeVdoaXRl
bGlzdDpAW10gbGVnYWN5QmxhY2tsaXN0OkBbXSB1c2VyQ29udGVudFdvcmxkOndvcmxkLmdldCgp
XSk7CisgICAgCisgICAgW3VzZXJDb250ZW50Q29udHJvbGxlciBfYWRkVXNlclN0eWxlU2hlZXQ6
c3R5bGVTaGVldC5nZXQoKV07CisgICAgW3VzZXJDb250ZW50Q29udHJvbGxlciBfYWRkVXNlclN0
eWxlU2hlZXQ6c3R5bGVTaGVldEFzc29jaWF0ZWRXaXRoV29ybGQuZ2V0KCldOworICAgIAorICAg
IEVYUEVDVF9FUSgydSwgW3VzZXJDb250ZW50Q29udHJvbGxlciBfdXNlclN0eWxlU2hlZXRzXS5j
b3VudCk7CisgICAgRVhQRUNUX0VRKHN0eWxlU2hlZXQuZ2V0KCksIFt1c2VyQ29udGVudENvbnRy
b2xsZXIgX3VzZXJTdHlsZVNoZWV0c11bMF0pOworICAgIEVYUEVDVF9FUShzdHlsZVNoZWV0QXNz
b2NpYXRlZFdpdGhXb3JsZC5nZXQoKSwgW3VzZXJDb250ZW50Q29udHJvbGxlciBfdXNlclN0eWxl
U2hlZXRzXVsxXSk7CisKKyAgICBbdXNlckNvbnRlbnRDb250cm9sbGVyIF9yZW1vdmVBbGxVc2Vy
U3R5bGVTaGVldHNdOworCisgICAgRVhQRUNUX0VRKDB1LCBbdXNlckNvbnRlbnRDb250cm9sbGVy
IF91c2VyU3R5bGVTaGVldHNdLmNvdW50KTsKK30KKworVEVTVChXS1VzZXJDb250ZW50Q29udHJv
bGxlciwgVXNlclN0eWxlU2hlZXRSZW1vdmVBbGxCeVdvcmxkKQoreworICAgIFJldGFpblB0cjxX
S1VzZXJDb250ZW50Q29udHJvbGxlcj4gdXNlckNvbnRlbnRDb250cm9sbGVyID0gYWRvcHROUyhb
W1dLVXNlckNvbnRlbnRDb250cm9sbGVyIGFsbG9jXSBpbml0XSk7CisKKyAgICBSZXRhaW5QdHI8
X1dLVXNlckNvbnRlbnRXb3JsZD4gd29ybGQgPSBhZG9wdE5TKFtfV0tVc2VyQ29udGVudFdvcmxk
IHdvcmxkV2l0aE5hbWU6QCJUZXN0V29ybGQiXSk7CisKKyAgICBSZXRhaW5QdHI8X1dLVXNlclN0
eWxlU2hlZXQ+IHN0eWxlU2hlZXQgPSBhZG9wdE5TKFtbX1dLVXNlclN0eWxlU2hlZXQgYWxsb2Nd
IGluaXRXaXRoU291cmNlOnN0eWxlU2hlZXRTb3VyY2UgZm9yTWFpbkZyYW1lT25seTpOT10pOwor
ICAgIFJldGFpblB0cjxfV0tVc2VyU3R5bGVTaGVldD4gc3R5bGVTaGVldEFzc29jaWF0ZWRXaXRo
V29ybGQgPSBhZG9wdE5TKFtbX1dLVXNlclN0eWxlU2hlZXQgYWxsb2NdIGluaXRXaXRoU291cmNl
OnN0eWxlU2hlZXRTb3VyY2UgZm9yTWFpbkZyYW1lT25seTpOTyBsZWdhY3lXaGl0ZWxpc3Q6QFtd
IGxlZ2FjeUJsYWNrbGlzdDpAW10gdXNlckNvbnRlbnRXb3JsZDp3b3JsZC5nZXQoKV0pOworICAg
IFJldGFpblB0cjxfV0tVc2VyU3R5bGVTaGVldD4gc3R5bGVTaGVldEFzc29jaWF0ZWRXaXRoV29y
bGQyID0gYWRvcHROUyhbW19XS1VzZXJTdHlsZVNoZWV0IGFsbG9jXSBpbml0V2l0aFNvdXJjZTpz
dHlsZVNoZWV0U291cmNlIGZvck1haW5GcmFtZU9ubHk6Tk8gbGVnYWN5V2hpdGVsaXN0OkBbXSBs
ZWdhY3lCbGFja2xpc3Q6QFtdIHVzZXJDb250ZW50V29ybGQ6d29ybGQuZ2V0KCldKTsKKyAgICAK
KyAgICBbdXNlckNvbnRlbnRDb250cm9sbGVyIF9hZGRVc2VyU3R5bGVTaGVldDpzdHlsZVNoZWV0
LmdldCgpXTsKKyAgICBbdXNlckNvbnRlbnRDb250cm9sbGVyIF9hZGRVc2VyU3R5bGVTaGVldDpz
dHlsZVNoZWV0QXNzb2NpYXRlZFdpdGhXb3JsZC5nZXQoKV07CisgICAgW3VzZXJDb250ZW50Q29u
dHJvbGxlciBfYWRkVXNlclN0eWxlU2hlZXQ6c3R5bGVTaGVldEFzc29jaWF0ZWRXaXRoV29ybGQy
LmdldCgpXTsKKyAgICAKKyAgICBFWFBFQ1RfRVEoM3UsIFt1c2VyQ29udGVudENvbnRyb2xsZXIg
X3VzZXJTdHlsZVNoZWV0c10uY291bnQpOworICAgIEVYUEVDVF9FUShzdHlsZVNoZWV0LmdldCgp
LCBbdXNlckNvbnRlbnRDb250cm9sbGVyIF91c2VyU3R5bGVTaGVldHNdWzBdKTsKKyAgICBFWFBF
Q1RfRVEoc3R5bGVTaGVldEFzc29jaWF0ZWRXaXRoV29ybGQuZ2V0KCksIFt1c2VyQ29udGVudENv
bnRyb2xsZXIgX3VzZXJTdHlsZVNoZWV0c11bMV0pOworICAgIEVYUEVDVF9FUShzdHlsZVNoZWV0
QXNzb2NpYXRlZFdpdGhXb3JsZDIuZ2V0KCksIFt1c2VyQ29udGVudENvbnRyb2xsZXIgX3VzZXJT
dHlsZVNoZWV0c11bMl0pOworCisgICAgW3VzZXJDb250ZW50Q29udHJvbGxlciBfcmVtb3ZlQWxs
VXNlclN0eWxlU2hlZXRzQXNzb2NpYXRlZFdpdGhVc2VyQ29udGVudFdvcmxkOndvcmxkLmdldCgp
XTsKKworICAgIEVYUEVDVF9FUSgxdSwgW3VzZXJDb250ZW50Q29udHJvbGxlciBfdXNlclN0eWxl
U2hlZXRzXS5jb3VudCk7CisgICAgRVhQRUNUX0VRKHN0eWxlU2hlZXQuZ2V0KCksIFt1c2VyQ29u
dGVudENvbnRyb2xsZXIgX3VzZXJTdHlsZVNoZWV0c11bMF0pOworfQorCitURVNUKFdLVXNlckNv
bnRlbnRDb250cm9sbGVyLCBVc2VyU3R5bGVTaGVldFJlbW92ZUFsbEJ5Tm9ybWFsV29ybGQpCit7
CisgICAgUmV0YWluUHRyPFdLVXNlckNvbnRlbnRDb250cm9sbGVyPiB1c2VyQ29udGVudENvbnRy
b2xsZXIgPSBhZG9wdE5TKFtbV0tVc2VyQ29udGVudENvbnRyb2xsZXIgYWxsb2NdIGluaXRdKTsK
KworICAgIFJldGFpblB0cjxfV0tVc2VyQ29udGVudFdvcmxkPiB3b3JsZCA9IGFkb3B0TlMoW19X
S1VzZXJDb250ZW50V29ybGQgd29ybGRXaXRoTmFtZTpAIlRlc3RXb3JsZCJdKTsKKworICAgIFJl
dGFpblB0cjxfV0tVc2VyU3R5bGVTaGVldD4gc3R5bGVTaGVldCA9IGFkb3B0TlMoW1tfV0tVc2Vy
U3R5bGVTaGVldCBhbGxvY10gaW5pdFdpdGhTb3VyY2U6c3R5bGVTaGVldFNvdXJjZSBmb3JNYWlu
RnJhbWVPbmx5Ok5PXSk7CisgICAgUmV0YWluUHRyPF9XS1VzZXJTdHlsZVNoZWV0PiBzdHlsZVNo
ZWV0QXNzb2NpYXRlZFdpdGhXb3JsZCA9IGFkb3B0TlMoW1tfV0tVc2VyU3R5bGVTaGVldCBhbGxv
Y10gaW5pdFdpdGhTb3VyY2U6c3R5bGVTaGVldFNvdXJjZSBmb3JNYWluRnJhbWVPbmx5Ok5PIGxl
Z2FjeVdoaXRlbGlzdDpAW10gbGVnYWN5QmxhY2tsaXN0OkBbXSB1c2VyQ29udGVudFdvcmxkOndv
cmxkLmdldCgpXSk7CisgICAgUmV0YWluUHRyPF9XS1VzZXJTdHlsZVNoZWV0PiBzdHlsZVNoZWV0
QXNzb2NpYXRlZFdpdGhXb3JsZDIgPSBhZG9wdE5TKFtbX1dLVXNlclN0eWxlU2hlZXQgYWxsb2Nd
IGluaXRXaXRoU291cmNlOnN0eWxlU2hlZXRTb3VyY2UgZm9yTWFpbkZyYW1lT25seTpOTyBsZWdh
Y3lXaGl0ZWxpc3Q6QFtdIGxlZ2FjeUJsYWNrbGlzdDpAW10gdXNlckNvbnRlbnRXb3JsZDp3b3Js
ZC5nZXQoKV0pOworICAgIAorICAgIFt1c2VyQ29udGVudENvbnRyb2xsZXIgX2FkZFVzZXJTdHls
ZVNoZWV0OnN0eWxlU2hlZXQuZ2V0KCldOworICAgIFt1c2VyQ29udGVudENvbnRyb2xsZXIgX2Fk
ZFVzZXJTdHlsZVNoZWV0OnN0eWxlU2hlZXRBc3NvY2lhdGVkV2l0aFdvcmxkLmdldCgpXTsKKyAg
ICBbdXNlckNvbnRlbnRDb250cm9sbGVyIF9hZGRVc2VyU3R5bGVTaGVldDpzdHlsZVNoZWV0QXNz
b2NpYXRlZFdpdGhXb3JsZDIuZ2V0KCldOworICAgIAorICAgIEVYUEVDVF9FUSgzdSwgW3VzZXJD
b250ZW50Q29udHJvbGxlciBfdXNlclN0eWxlU2hlZXRzXS5jb3VudCk7CisgICAgRVhQRUNUX0VR
KHN0eWxlU2hlZXQuZ2V0KCksIFt1c2VyQ29udGVudENvbnRyb2xsZXIgX3VzZXJTdHlsZVNoZWV0
c11bMF0pOworICAgIEVYUEVDVF9FUShzdHlsZVNoZWV0QXNzb2NpYXRlZFdpdGhXb3JsZC5nZXQo
KSwgW3VzZXJDb250ZW50Q29udHJvbGxlciBfdXNlclN0eWxlU2hlZXRzXVsxXSk7CisgICAgRVhQ
RUNUX0VRKHN0eWxlU2hlZXRBc3NvY2lhdGVkV2l0aFdvcmxkMi5nZXQoKSwgW3VzZXJDb250ZW50
Q29udHJvbGxlciBfdXNlclN0eWxlU2hlZXRzXVsyXSk7CisKKyAgICBbdXNlckNvbnRlbnRDb250
cm9sbGVyIF9yZW1vdmVBbGxVc2VyU3R5bGVTaGVldHNBc3NvY2lhdGVkV2l0aFVzZXJDb250ZW50
V29ybGQ6W19XS1VzZXJDb250ZW50V29ybGQgbm9ybWFsV29ybGRdXTsKKworICAgIEVYUEVDVF9F
USgydSwgW3VzZXJDb250ZW50Q29udHJvbGxlciBfdXNlclN0eWxlU2hlZXRzXS5jb3VudCk7Cisg
ICAgRVhQRUNUX0VRKHN0eWxlU2hlZXRBc3NvY2lhdGVkV2l0aFdvcmxkLmdldCgpLCBbdXNlckNv
bnRlbnRDb250cm9sbGVyIF91c2VyU3R5bGVTaGVldHNdWzBdKTsKKyAgICBFWFBFQ1RfRVEoc3R5
bGVTaGVldEFzc29jaWF0ZWRXaXRoV29ybGQyLmdldCgpLCBbdXNlckNvbnRlbnRDb250cm9sbGVy
IF91c2VyU3R5bGVTaGVldHNdWzFdKTsKK30KKworVEVTVChXS1VzZXJDb250ZW50Q29udHJvbGxl
ciwgVXNlclNjcmlwdFJlbW92ZSkKK3sKKyAgICBSZXRhaW5QdHI8V0tVc2VyQ29udGVudENvbnRy
b2xsZXI+IHVzZXJDb250ZW50Q29udHJvbGxlciA9IGFkb3B0TlMoW1tXS1VzZXJDb250ZW50Q29u
dHJvbGxlciBhbGxvY10gaW5pdF0pOworICAgIFJldGFpblB0cjxXS1VzZXJTY3JpcHQ+IHVzZXJT
Y3JpcHQgPSBhZG9wdE5TKFtbV0tVc2VyU2NyaXB0IGFsbG9jXSBpbml0V2l0aFNvdXJjZTpAIiIg
aW5qZWN0aW9uVGltZTpXS1VzZXJTY3JpcHRJbmplY3Rpb25UaW1lQXREb2N1bWVudFN0YXJ0IGZv
ck1haW5GcmFtZU9ubHk6Tk9dKTsKKyAgICBbdXNlckNvbnRlbnRDb250cm9sbGVyIGFkZFVzZXJT
Y3JpcHQ6dXNlclNjcmlwdC5nZXQoKV07CisgICAgCisgICAgRVhQRUNUX0VRKDF1LCBbdXNlckNv
bnRlbnRDb250cm9sbGVyIHVzZXJTY3JpcHRzXS5jb3VudCk7CisgICAgRVhQRUNUX0VRKHVzZXJT
Y3JpcHQuZ2V0KCksIFt1c2VyQ29udGVudENvbnRyb2xsZXIgdXNlclNjcmlwdHNdWzBdKTsKKwor
ICAgIFt1c2VyQ29udGVudENvbnRyb2xsZXIgX3JlbW92ZVVzZXJTY3JpcHQ6dXNlclNjcmlwdC5n
ZXQoKV07CisKKyAgICBFWFBFQ1RfRVEoMHUsIFt1c2VyQ29udGVudENvbnRyb2xsZXIgdXNlclNj
cmlwdHNdLmNvdW50KTsKK30KKworVEVTVChXS1VzZXJDb250ZW50Q29udHJvbGxlciwgVXNlclNj
cmlwdFJlbW92ZUFsbCkKK3sKKyAgICBSZXRhaW5QdHI8V0tVc2VyQ29udGVudENvbnRyb2xsZXI+
IHVzZXJDb250ZW50Q29udHJvbGxlciA9IGFkb3B0TlMoW1tXS1VzZXJDb250ZW50Q29udHJvbGxl
ciBhbGxvY10gaW5pdF0pOworCisgICAgUmV0YWluUHRyPF9XS1VzZXJDb250ZW50V29ybGQ+IHdv
cmxkID0gYWRvcHROUyhbX1dLVXNlckNvbnRlbnRXb3JsZCB3b3JsZFdpdGhOYW1lOkAiVGVzdFdv
cmxkIl0pOworCisgICAgUmV0YWluUHRyPFdLVXNlclNjcmlwdD4gdXNlclNjcmlwdCA9IGFkb3B0
TlMoW1tXS1VzZXJTY3JpcHQgYWxsb2NdIGluaXRXaXRoU291cmNlOkAiIiBpbmplY3Rpb25UaW1l
OldLVXNlclNjcmlwdEluamVjdGlvblRpbWVBdERvY3VtZW50U3RhcnQgZm9yTWFpbkZyYW1lT25s
eTpOT10pOworICAgIFJldGFpblB0cjxXS1VzZXJTY3JpcHQ+IHVzZXJTY3JpcHRBc3NvY2lhdGVk
V2l0aFdvcmxkID0gYWRvcHROUyhbW1dLVXNlclNjcmlwdCBhbGxvY10gX2luaXRXaXRoU291cmNl
OkAiIiBpbmplY3Rpb25UaW1lOldLVXNlclNjcmlwdEluamVjdGlvblRpbWVBdERvY3VtZW50U3Rh
cnQgZm9yTWFpbkZyYW1lT25seTpOTyBsZWdhY3lXaGl0ZWxpc3Q6QFtdIGxlZ2FjeUJsYWNrbGlz
dDpAW10gdXNlckNvbnRlbnRXb3JsZDp3b3JsZC5nZXQoKV0pOworICAgIAorICAgIFt1c2VyQ29u
dGVudENvbnRyb2xsZXIgYWRkVXNlclNjcmlwdDp1c2VyU2NyaXB0LmdldCgpXTsKKyAgICBbdXNl
ckNvbnRlbnRDb250cm9sbGVyIGFkZFVzZXJTY3JpcHQ6dXNlclNjcmlwdEFzc29jaWF0ZWRXaXRo
V29ybGQuZ2V0KCldOworICAgIAorICAgIEVYUEVDVF9FUSgydSwgW3VzZXJDb250ZW50Q29udHJv
bGxlciB1c2VyU2NyaXB0c10uY291bnQpOworICAgIEVYUEVDVF9FUSh1c2VyU2NyaXB0LmdldCgp
LCBbdXNlckNvbnRlbnRDb250cm9sbGVyIHVzZXJTY3JpcHRzXVswXSk7CisgICAgRVhQRUNUX0VR
KHVzZXJTY3JpcHRBc3NvY2lhdGVkV2l0aFdvcmxkLmdldCgpLCBbdXNlckNvbnRlbnRDb250cm9s
bGVyIHVzZXJTY3JpcHRzXVsxXSk7CisKKyAgICBbdXNlckNvbnRlbnRDb250cm9sbGVyIHJlbW92
ZUFsbFVzZXJTY3JpcHRzXTsKKworICAgIEVYUEVDVF9FUSgwdSwgW3VzZXJDb250ZW50Q29udHJv
bGxlciB1c2VyU2NyaXB0c10uY291bnQpOworfQorCitURVNUKFdLVXNlckNvbnRlbnRDb250cm9s
bGVyLCBVc2VyU2NyaXB0UmVtb3ZlQWxsQnlXb3JsZCkKK3sKKyAgICBSZXRhaW5QdHI8V0tVc2Vy
Q29udGVudENvbnRyb2xsZXI+IHVzZXJDb250ZW50Q29udHJvbGxlciA9IGFkb3B0TlMoW1tXS1Vz
ZXJDb250ZW50Q29udHJvbGxlciBhbGxvY10gaW5pdF0pOworCisgICAgUmV0YWluUHRyPF9XS1Vz
ZXJDb250ZW50V29ybGQ+IHdvcmxkID0gYWRvcHROUyhbX1dLVXNlckNvbnRlbnRXb3JsZCB3b3Js
ZFdpdGhOYW1lOkAiVGVzdFdvcmxkIl0pOworCisgICAgUmV0YWluUHRyPFdLVXNlclNjcmlwdD4g
dXNlclNjcmlwdCA9IGFkb3B0TlMoW1tXS1VzZXJTY3JpcHQgYWxsb2NdIGluaXRXaXRoU291cmNl
OkAiIiBpbmplY3Rpb25UaW1lOldLVXNlclNjcmlwdEluamVjdGlvblRpbWVBdERvY3VtZW50U3Rh
cnQgZm9yTWFpbkZyYW1lT25seTpOT10pOworICAgIFJldGFpblB0cjxXS1VzZXJTY3JpcHQ+IHVz
ZXJTY3JpcHRBc3NvY2lhdGVkV2l0aFdvcmxkID0gYWRvcHROUyhbW1dLVXNlclNjcmlwdCBhbGxv
Y10gX2luaXRXaXRoU291cmNlOkAiIiBpbmplY3Rpb25UaW1lOldLVXNlclNjcmlwdEluamVjdGlv
blRpbWVBdERvY3VtZW50U3RhcnQgZm9yTWFpbkZyYW1lT25seTpOTyBsZWdhY3lXaGl0ZWxpc3Q6
QFtdIGxlZ2FjeUJsYWNrbGlzdDpAW10gdXNlckNvbnRlbnRXb3JsZDp3b3JsZC5nZXQoKV0pOwor
ICAgIFJldGFpblB0cjxXS1VzZXJTY3JpcHQ+IHVzZXJTY3JpcHRBc3NvY2lhdGVkV2l0aFdvcmxk
MiA9IGFkb3B0TlMoW1tXS1VzZXJTY3JpcHQgYWxsb2NdIF9pbml0V2l0aFNvdXJjZTpAIiIgaW5q
ZWN0aW9uVGltZTpXS1VzZXJTY3JpcHRJbmplY3Rpb25UaW1lQXREb2N1bWVudFN0YXJ0IGZvck1h
aW5GcmFtZU9ubHk6Tk8gbGVnYWN5V2hpdGVsaXN0OkBbXSBsZWdhY3lCbGFja2xpc3Q6QFtdIHVz
ZXJDb250ZW50V29ybGQ6d29ybGQuZ2V0KCldKTsKKyAgICAKKyAgICBbdXNlckNvbnRlbnRDb250
cm9sbGVyIGFkZFVzZXJTY3JpcHQ6dXNlclNjcmlwdC5nZXQoKV07CisgICAgW3VzZXJDb250ZW50
Q29udHJvbGxlciBhZGRVc2VyU2NyaXB0OnVzZXJTY3JpcHRBc3NvY2lhdGVkV2l0aFdvcmxkLmdl
dCgpXTsKKyAgICBbdXNlckNvbnRlbnRDb250cm9sbGVyIGFkZFVzZXJTY3JpcHQ6dXNlclNjcmlw
dEFzc29jaWF0ZWRXaXRoV29ybGQyLmdldCgpXTsKKyAgICAKKyAgICBFWFBFQ1RfRVEoM3UsIFt1
c2VyQ29udGVudENvbnRyb2xsZXIgdXNlclNjcmlwdHNdLmNvdW50KTsKKyAgICBFWFBFQ1RfRVEo
dXNlclNjcmlwdC5nZXQoKSwgW3VzZXJDb250ZW50Q29udHJvbGxlciB1c2VyU2NyaXB0c11bMF0p
OworICAgIEVYUEVDVF9FUSh1c2VyU2NyaXB0QXNzb2NpYXRlZFdpdGhXb3JsZC5nZXQoKSwgW3Vz
ZXJDb250ZW50Q29udHJvbGxlciB1c2VyU2NyaXB0c11bMV0pOworICAgIEVYUEVDVF9FUSh1c2Vy
U2NyaXB0QXNzb2NpYXRlZFdpdGhXb3JsZDIuZ2V0KCksIFt1c2VyQ29udGVudENvbnRyb2xsZXIg
dXNlclNjcmlwdHNdWzJdKTsKKworICAgIFt1c2VyQ29udGVudENvbnRyb2xsZXIgX3JlbW92ZUFs
bFVzZXJTY3JpcHRzQXNzb2NpYXRlZFdpdGhVc2VyQ29udGVudFdvcmxkOndvcmxkLmdldCgpXTsK
KworICAgIEVYUEVDVF9FUSgxdSwgW3VzZXJDb250ZW50Q29udHJvbGxlciB1c2VyU2NyaXB0c10u
Y291bnQpOworICAgIEVYUEVDVF9FUSh1c2VyU2NyaXB0LmdldCgpLCBbdXNlckNvbnRlbnRDb250
cm9sbGVyIHVzZXJTY3JpcHRzXVswXSk7Cit9CisKK1RFU1QoV0tVc2VyQ29udGVudENvbnRyb2xs
ZXIsIFVzZXJTY3JpcHRSZW1vdmVBbGxCeU5vcm1hbFdvcmxkKQoreworICAgIFJldGFpblB0cjxX
S1VzZXJDb250ZW50Q29udHJvbGxlcj4gdXNlckNvbnRlbnRDb250cm9sbGVyID0gYWRvcHROUyhb
W1dLVXNlckNvbnRlbnRDb250cm9sbGVyIGFsbG9jXSBpbml0XSk7CisKKyAgICBSZXRhaW5QdHI8
X1dLVXNlckNvbnRlbnRXb3JsZD4gd29ybGQgPSBhZG9wdE5TKFtfV0tVc2VyQ29udGVudFdvcmxk
IHdvcmxkV2l0aE5hbWU6QCJUZXN0V29ybGQiXSk7CisKKyAgICBSZXRhaW5QdHI8V0tVc2VyU2Ny
aXB0PiB1c2VyU2NyaXB0ID0gYWRvcHROUyhbW1dLVXNlclNjcmlwdCBhbGxvY10gaW5pdFdpdGhT
b3VyY2U6QCIiIGluamVjdGlvblRpbWU6V0tVc2VyU2NyaXB0SW5qZWN0aW9uVGltZUF0RG9jdW1l
bnRTdGFydCBmb3JNYWluRnJhbWVPbmx5Ok5PXSk7CisgICAgUmV0YWluUHRyPFdLVXNlclNjcmlw
dD4gdXNlclNjcmlwdEFzc29jaWF0ZWRXaXRoV29ybGQgPSBhZG9wdE5TKFtbV0tVc2VyU2NyaXB0
IGFsbG9jXSBfaW5pdFdpdGhTb3VyY2U6QCIiIGluamVjdGlvblRpbWU6V0tVc2VyU2NyaXB0SW5q
ZWN0aW9uVGltZUF0RG9jdW1lbnRTdGFydCBmb3JNYWluRnJhbWVPbmx5Ok5PIGxlZ2FjeVdoaXRl
bGlzdDpAW10gbGVnYWN5QmxhY2tsaXN0OkBbXSB1c2VyQ29udGVudFdvcmxkOndvcmxkLmdldCgp
XSk7CisgICAgUmV0YWluUHRyPFdLVXNlclNjcmlwdD4gdXNlclNjcmlwdEFzc29jaWF0ZWRXaXRo
V29ybGQyID0gYWRvcHROUyhbW1dLVXNlclNjcmlwdCBhbGxvY10gX2luaXRXaXRoU291cmNlOkAi
IiBpbmplY3Rpb25UaW1lOldLVXNlclNjcmlwdEluamVjdGlvblRpbWVBdERvY3VtZW50U3RhcnQg
Zm9yTWFpbkZyYW1lT25seTpOTyBsZWdhY3lXaGl0ZWxpc3Q6QFtdIGxlZ2FjeUJsYWNrbGlzdDpA
W10gdXNlckNvbnRlbnRXb3JsZDp3b3JsZC5nZXQoKV0pOworICAgIAorICAgIFt1c2VyQ29udGVu
dENvbnRyb2xsZXIgYWRkVXNlclNjcmlwdDp1c2VyU2NyaXB0LmdldCgpXTsKKyAgICBbdXNlckNv
bnRlbnRDb250cm9sbGVyIGFkZFVzZXJTY3JpcHQ6dXNlclNjcmlwdEFzc29jaWF0ZWRXaXRoV29y
bGQuZ2V0KCldOworICAgIFt1c2VyQ29udGVudENvbnRyb2xsZXIgYWRkVXNlclNjcmlwdDp1c2Vy
U2NyaXB0QXNzb2NpYXRlZFdpdGhXb3JsZDIuZ2V0KCldOworICAgIAorICAgIEVYUEVDVF9FUSgz
dSwgW3VzZXJDb250ZW50Q29udHJvbGxlciB1c2VyU2NyaXB0c10uY291bnQpOworICAgIEVYUEVD
VF9FUSh1c2VyU2NyaXB0LmdldCgpLCBbdXNlckNvbnRlbnRDb250cm9sbGVyIHVzZXJTY3JpcHRz
XVswXSk7CisgICAgRVhQRUNUX0VRKHVzZXJTY3JpcHRBc3NvY2lhdGVkV2l0aFdvcmxkLmdldCgp
LCBbdXNlckNvbnRlbnRDb250cm9sbGVyIHVzZXJTY3JpcHRzXVsxXSk7CisgICAgRVhQRUNUX0VR
KHVzZXJTY3JpcHRBc3NvY2lhdGVkV2l0aFdvcmxkMi5nZXQoKSwgW3VzZXJDb250ZW50Q29udHJv
bGxlciB1c2VyU2NyaXB0c11bMl0pOworCisgICAgW3VzZXJDb250ZW50Q29udHJvbGxlciBfcmVt
b3ZlQWxsVXNlclNjcmlwdHNBc3NvY2lhdGVkV2l0aFVzZXJDb250ZW50V29ybGQ6W19XS1VzZXJD
b250ZW50V29ybGQgbm9ybWFsV29ybGRdXTsKKworICAgIEVYUEVDVF9FUSgydSwgW3VzZXJDb250
ZW50Q29udHJvbGxlciB1c2VyU2NyaXB0c10uY291bnQpOworICAgIEVYUEVDVF9FUSh1c2VyU2Ny
aXB0QXNzb2NpYXRlZFdpdGhXb3JsZC5nZXQoKSwgW3VzZXJDb250ZW50Q29udHJvbGxlciB1c2Vy
U2NyaXB0c11bMF0pOworICAgIEVYUEVDVF9FUSh1c2VyU2NyaXB0QXNzb2NpYXRlZFdpdGhXb3Js
ZDIuZ2V0KCksIFt1c2VyQ29udGVudENvbnRyb2xsZXIgdXNlclNjcmlwdHNdWzFdKTsKK30KKwog
I2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272464</attachid>
            <date>2016-02-28 13:30:32 -0800</date>
            <delta_ts>2016-02-28 13:55:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154798-20160228133016.patch</filename>
            <type>text/plain</type>
            <size>34489</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzMwMSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBACisyMDE2LTAyLTI4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQmluZCBfV0tVc2VyU3R5bGVTaGVldHMg
dG8gX1dLVXNlckNvbnRlbnRXb3JsZHMgdG8gYWxsb3cgZm9yIGdyb3VwaW5nIG9mIHVzZXIgY29u
dGVudCBieSBhc3NvY2lhdGluZyB0byBhIHdvcmxkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ3OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUcmVhdCBfV0tVc2VyU3R5bGVTaGVldHMgbGlrZSBXS1Vz
ZXJTY3JpcHRzIGFuZCBhbGxvdyB0aGVtIHRvIGJlIGJvdW5kIHRvIGEgX1dLVXNlckNvbnRlbnRX
b3JsZC4KKyAgICAgICAgVGhlIGltbWVkaWF0ZSBiZW5lZml0IG9mIHRoaXMgaXMgYWxsb3dpbmcg
YSBjbGllbnQgdG8gYmluZCBhIHNldCBvZiB1c2VyIGNvbnRlbnQgKHNjcmlwdHMgYW5kIHN0eWxl
c2hlZXRzCisgICAgICAgIGZvciBub3cpIHRvIGEgd29ybGQgYW5kIGhhdmUgdGhlbSBlYXNpbHkg
cmVtb3ZlIGFsbCB1c2VyIGNvbnRlbnQgYXNzb2NpYXRlZCB3aXRoIHRoYXQgd29ybGQgZWFzaWx5
LgorCisgICAgICAgICogU2hhcmVkL0FQSS9BUElBcnJheS5oOgorICAgICAgICBBZGQgaGVscGVy
cyByZW1vdmVBbGxNYXRjaGluZyBhbmQgcmVtb3ZlQWxsT2ZUeXBlTWF0Y2hpbmcuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0Lmg6CisgICAgICAgIEFkZCBBUEk6
OlVzZXJDb250ZW50V29ybGQgbWVtYmVyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1VzZXJDb250ZW50Q29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV0tVc2VyQ29udGVudENv
bnRyb2xsZXIgX3JlbW92ZUFsbFVzZXJTY3JpcHRzQXNzb2NpYXRlZFdpdGhVc2VyQ29udGVudFdv
cmxkOl0pOgorICAgICAgICAoLVtXS1VzZXJDb250ZW50Q29udHJvbGxlciBfcmVtb3ZlQWxsVXNl
clN0eWxlU2hlZXRzQXNzb2NpYXRlZFdpdGhVc2VyQ29udGVudFdvcmxkOl0pOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg6Cisg
ICAgICAgIEFkZCBfcmVtb3ZlQWxsVXNlclNjcmlwdHNBc3NvY2lhdGVkV2l0aFVzZXJDb250ZW50
V29ybGQgYW5kIF9yZW1vdmVBbGxVc2VyU3R5bGVTaGVldHNBc3NvY2lhdGVkV2l0aFVzZXJDb250
ZW50V29ybGQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlclNjcmlwdC5t
bToKKyAgICAgICAgKC1bV0tVc2VyU2NyaXB0IF9pbml0V2l0aFNvdXJjZTppbmplY3Rpb25UaW1l
OmZvck1haW5GcmFtZU9ubHk6bGVnYWN5V2hpdGVsaXN0OmxlZ2FjeUJsYWNrbGlzdDp1c2VyQ29u
dGVudFdvcmxkOl0pOgorICAgICAgICAodG9TdHJpbmdWZWN0b3IpOiBEZWxldGVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRXb3JsZEludGVybmFsLmg6Cisg
ICAgICAgIChBUEk6OnRvU3RyaW5nVmVjdG9yKToKKyAgICAgICAgTW92ZSB0b1N0cmluZ1ZlY3Rv
ciB0byBhIGxvY2F0aW9uIHdoZXJlIGl0IGNhbiBiZSBzaGFyZWQuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1VzZXJTdHlsZVNoZWV0Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tVc2VyU3R5bGVTaGVldC5tbToKKyAgICAgICAgKC1bX1dLVXNlclN0eWxl
U2hlZXQgaW5pdFdpdGhTb3VyY2U6Zm9yTWFpbkZyYW1lT25seTpsZWdhY3lXaGl0ZWxpc3Q6bGVn
YWN5QmxhY2tsaXN0OnVzZXJDb250ZW50V29ybGQ6XSk6CisgICAgICAgIEFkZCBuZXcgaW5pdGlh
bGl6ZXIgd2hpY2ggaGFzIGEgd29ybGQgdG8gYmUgYm91bmQgdG8uIFdoaWxlIGhlcmUsIG1hdGNo
IFdLVXNlclNjcmlwdCBhbmQgYWRkIHN1cHBvcnQgZm9yIHRoZSAKKyAgICAgICAgbGVnYWN5IHdo
aXRlbGlzdCBhbmQgYmxhY2tsaXN0cy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyQ29udGVu
dC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6YWRkVXNlckNvbnRlbnRX
b3JsZFVzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
OjpzaG91bGRTZW5kUmVtb3ZlVXNlckNvbnRlbnRXb3JsZHNNZXNzYWdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVVzZXJDb250ZW50V29y
bGRVc2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6
OmFkZFVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eTo6cmVtb3ZlVXNlclNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVBbGxVc2VyU2NyaXB0cyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRVc2VyU3R5bGVTaGVldCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVVc2Vy
U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5OjpyZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2Vy
Q29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oOgorICAgICAgICBSZWZhY3Rv
ciB0byBzaGFyZSB0aGUgY29kZSB3aGljaCBkZWNpZGVzIHdoZXRoZXIgdG8gc2VuZCBBZGRVc2Vy
Q29udGVudFdvcmxkcy9SZW1vdmVVc2VyQ29udGVudFdvcmxkcworICAgICAgICBtZXNzYWdlcy4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRV
c2VyQ29udGVudFdvcmxkcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJv
bGxlcjo6cmVtb3ZlVXNlckNvbnRlbnRXb3JsZHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHRzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyU2NyaXB0cyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXRz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2Vy
U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
cmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1VzZXJDb250
ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvVXNl
ckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLm1lc3NhZ2VzLmluOgorICAgICAgICBB
ZGQgc3VwcG9ydCBmb3IgYmluZGluZyBzdHlsZXNoZWV0cyB0byB3b3JsZHMgYW5kIGFsbG93IHJl
bW92aW5nIGFsbCB0aGUgc2NyaXB0cy9zdHlsZXNoZWV0cyBmcm9tIGEgCisgICAgICAgIHNldCBv
ZiB3b3JsZHMgYXQgb25jZSBieSBwYXNzaW5nIFZlY3RvcnMgb2Ygd29ybGQgaWRlbnRpZmllcnMg
aW4gdGhlIHJlbW92ZSBtZXNzYWdlcy4KKwogMjAxNi0wMi0yNyAgQ29tbWl0IFF1ZXVlICA8Y29t
bWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjE5NzIwNCwgcjE5NzIwNywgcjE5NzIxMSwgcjE5NzIxNywKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9BUEkvQVBJQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQVBJL0FQSUFycmF5LmgJKHJldmlzaW9uIDE5NzMwMSkKKysrIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9BUEkvQVBJQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsMjIgQEAgcHVi
bGljOgogICAgICAgICApOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hdGNoRnVu
Y3Rpb24+CisgICAgdW5zaWduZWQgcmVtb3ZlQWxsTWF0Y2hpbmcoY29uc3QgTWF0Y2hGdW5jdGlv
biYgbWF0Y2hGdW5jdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VsZW1lbnRzLnJlbW92
ZUFsbE1hdGNoaW5nKG1hdGNoRnVuY3Rpb24pOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIE1hdGNoRnVuY3Rpb24+CisgICAgdW5zaWduZWQgcmVtb3ZlQWxsT2ZU
eXBlTWF0Y2hpbmcoY29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hGdW5jdGlvbikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2VsZW1lbnRzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAg
WyZdIChjb25zdCBSZWZQdHI8T2JqZWN0PiYgb2JqZWN0KSAtPiBib29sIHsKKyAgICAgICAgICAg
ICAgICBpZiAob2JqZWN0LT50eXBlKCkgIT0gVDo6QVBJVHlwZSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaEZ1bmN0aW9uKHN0
YXRpY19wb2ludGVyX2Nhc3Q8VD4ob2JqZWN0KSk7CisgICAgICAgICAgICB9KTsKKyAgICB9CiAK
IHByaXZhdGU6CiAgICAgZXhwbGljaXQgQXJyYXkoVmVjdG9yPFJlZlB0cjxPYmplY3Q+PiYmIGVs
ZW1lbnRzKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyU3R5bGVT
aGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNl
clN0eWxlU2hlZXQuaAkocmV2aXNpb24gMTk3MzAxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9BUElVc2VyU3R5bGVTaGVldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAjZGVmaW5lIEFQSVVzZXJTdHlsZVNoZWV0X2gKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5o
IgorI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50V29ybGQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Vz
ZXJTdHlsZVNoZWV0Lmg+CiAKIG5hbWVzcGFjZSBBUEkgewpAQCAtMzUsMTUgKzM2LDI1IEBAIGNs
YXNzIFVzZXJTdHlsZVNoZWV0IGZpbmFsIDogcHVibGljIE9iamUKIHB1YmxpYzoKICAgICBzdGF0
aWMgV2ViQ29yZTo6VVJMIGdlbmVyYXRlVW5pcXVlVVJMKCk7CiAKLSAgICBVc2VyU3R5bGVTaGVl
dChXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCB1c2VyU3R5bGVTaGVldCkKKyAgICBzdGF0aWMgUmVm
PFVzZXJTdHlsZVNoZWV0PiBjcmVhdGUoV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQgdXNlclN0eWxl
U2hlZXQsIEFQSTo6VXNlckNvbnRlbnRXb3JsZCYgd29ybGQpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBVc2VyU3R5bGVTaGVldChXVEZNb3ZlKHVzZXJTdHlsZVNoZWV0KSwg
d29ybGQpKTsKKyAgICB9CisKKyAgICBVc2VyU3R5bGVTaGVldChXZWJDb3JlOjpVc2VyU3R5bGVT
aGVldCB1c2VyU3R5bGVTaGVldCwgQVBJOjpVc2VyQ29udGVudFdvcmxkJiB3b3JsZCkKICAgICAg
ICAgOiBtX3VzZXJTdHlsZVNoZWV0KHVzZXJTdHlsZVNoZWV0KQorICAgICAgICAsIG1fd29ybGQo
d29ybGQpCiAgICAgewogICAgIH0KIAogICAgIGNvbnN0IFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0
JiB1c2VyU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXQ7IH0KIAor
ICAgIFVzZXJDb250ZW50V29ybGQmIHVzZXJDb250ZW50V29ybGQoKSB7IHJldHVybiBtX3dvcmxk
OyB9CisgICAgY29uc3QgVXNlckNvbnRlbnRXb3JsZCYgdXNlckNvbnRlbnRXb3JsZCgpIGNvbnN0
IHsgcmV0dXJuIG1fd29ybGQ7IH0KKwogcHJpdmF0ZToKICAgICBXZWJDb3JlOjpVc2VyU3R5bGVT
aGVldCBtX3VzZXJTdHlsZVNoZWV0OworICAgIFJlZjxVc2VyQ29udGVudFdvcmxkPiBtX3dvcmxk
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVBJCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXIu
bW0JKHJldmlzaW9uIDE5NzMwMSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4
LDcgQEAKICNpbXBvcnQgIldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyLmgiCiAjaW1wb3J0ICJXZWJV
c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oIgogI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0
ZXJJbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRXb3JsZEludGVybmFsLmgiCiAj
aW1wb3J0ICJfV0tVc2VyU3R5bGVTaGVldEludGVybmFsLmgiCiAjaW1wb3J0IDxXZWJDb3JlL1Nl
Y3VyaXR5T3JpZ2luLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5oPgpA
QCAtMTQzLDYgKzE0NCwxMSBAQCAtICh2b2lkKV9yZW1vdmVVc2VyU2NyaXB0OihXS1VzZXJTY3Jp
cHQgCiAgICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5yZW1vdmVVc2VyU2NyaXB0KCp1
c2VyU2NyaXB0LT5fdXNlclNjcmlwdCk7CiB9CiAKKy0gKHZvaWQpX3JlbW92ZUFsbFVzZXJTY3Jp
cHRzQXNzb2NpYXRlZFdpdGhVc2VyQ29udGVudFdvcmxkOihfV0tVc2VyQ29udGVudFdvcmxkICop
dXNlckNvbnRlbnRXb3JsZAoreworICAgIF91c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+cmVt
b3ZlQWxsVXNlclNjcmlwdHMoKnVzZXJDb250ZW50V29ybGQtPl91c2VyQ29udGVudFdvcmxkKTsK
K30KKwogLSAodm9pZClfYWRkVXNlckNvbnRlbnRGaWx0ZXI6KF9XS1VzZXJDb250ZW50RmlsdGVy
ICopdXNlckNvbnRlbnRGaWx0ZXIKIHsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpA
QCAtMTg0LDYgKzE5MCwxMSBAQCAtICh2b2lkKV9yZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMKICAg
ICBfdXNlckNvbnRlbnRDb250cm9sbGVyUHJveHktPnJlbW92ZUFsbFVzZXJTdHlsZVNoZWV0cygp
OwogfQogCistICh2b2lkKV9yZW1vdmVBbGxVc2VyU3R5bGVTaGVldHNBc3NvY2lhdGVkV2l0aFVz
ZXJDb250ZW50V29ybGQ6KF9XS1VzZXJDb250ZW50V29ybGQgKil1c2VyQ29udGVudFdvcmxkCit7
CisgICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5yZW1vdmVBbGxVc2VyU3R5bGVTaGVl
dHMoKnVzZXJDb250ZW50V29ybGQtPl91c2VyQ29udGVudFdvcmxkKTsKK30KKwogQGVuZAogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29u
dGVudENvbnRyb2xsZXJQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaAkocmV2aXNp
b24gMTk3MzAxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJD
b250ZW50Q29udHJvbGxlclByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDEz
IEBACiAKIEBjbGFzcyBXS1VzZXJTY3JpcHQ7CiBAY2xhc3MgX1dLVXNlckNvbnRlbnRGaWx0ZXI7
CitAY2xhc3MgX1dLVXNlckNvbnRlbnRXb3JsZDsKIEBjbGFzcyBfV0tVc2VyU3R5bGVTaGVldDsK
IAogQGludGVyZmFjZSBXS1VzZXJDb250ZW50Q29udHJvbGxlciAoV0tQcml2YXRlKQogCiAtICh2
b2lkKV9yZW1vdmVVc2VyU2NyaXB0OihXS1VzZXJTY3JpcHQgKil1c2VyU2NyaXB0IFdLX0FWQUlM
QUJMRShXS19NQUNfVEJBLCBXS19JT1NfVEJBKTsKKy0gKHZvaWQpX3JlbW92ZUFsbFVzZXJTY3Jp
cHRzQXNzb2NpYXRlZFdpdGhVc2VyQ29udGVudFdvcmxkOihfV0tVc2VyQ29udGVudFdvcmxkICop
dXNlckNvbnRlbnRXb3JsZCBXS19BVkFJTEFCTEUoV0tfTUFDX1RCQSwgV0tfSU9TX1RCQSk7CiAK
IC0gKHZvaWQpX2FkZFVzZXJDb250ZW50RmlsdGVyOihfV0tVc2VyQ29udGVudEZpbHRlciAqKXVz
ZXJDb250ZW50RmlsdGVyIFdLX0FWQUlMQUJMRSgxMF8xMSwgOV8wKTsKIC0gKHZvaWQpX3JlbW92
ZVVzZXJDb250ZW50RmlsdGVyOihOU1N0cmluZyAqKXVzZXJDb250ZW50RmlsdGVyTmFtZSBXS19B
VkFJTEFCTEUoMTBfMTEsIDlfMCk7CkBAIC00Myw2ICs0NSw3IEBACiAtICh2b2lkKV9hZGRVc2Vy
U3R5bGVTaGVldDooX1dLVXNlclN0eWxlU2hlZXQgKil1c2VyU3R5bGVTaGVldCBXS19BVkFJTEFC
TEUoV0tfTUFDX1RCQSwgV0tfSU9TX1RCQSk7CiAtICh2b2lkKV9yZW1vdmVVc2VyU3R5bGVTaGVl
dDooX1dLVXNlclN0eWxlU2hlZXQgKil1c2VyU3R5bGVTaGVldCBXS19BVkFJTEFCTEUoV0tfTUFD
X1RCQSwgV0tfSU9TX1RCQSk7CiAtICh2b2lkKV9yZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMgV0tf
QVZBSUxBQkxFKFdLX01BQ19UQkEsIFdLX0lPU19UQkEpOworLSAodm9pZClfcmVtb3ZlQWxsVXNl
clN0eWxlU2hlZXRzQXNzb2NpYXRlZFdpdGhVc2VyQ29udGVudFdvcmxkOihfV0tVc2VyQ29udGVu
dFdvcmxkICopdXNlckNvbnRlbnRXb3JsZCBXS19BVkFJTEFCTEUoV0tfTUFDX1RCQSwgV0tfSU9T
X1RCQSk7CiAKIEBlbmQKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1VzZXJTY3JpcHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1VzZXJTY3JpcHQubW0JKHJldmlzaW9uIDE5NzMwMSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyU2NyaXB0Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC03MywyOCArNzMsMTIgQEAgLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKIAogQGltcGxl
bWVudGF0aW9uIFdLVXNlclNjcmlwdCAoV0tQcml2YXRlKQogCi1zdGF0aWMgVmVjdG9yPFdURjo6
U3RyaW5nPiB0b1N0cmluZ1ZlY3RvcihOU0FycmF5ICppbnB1dCkKLXsKLSAgICBWZWN0b3I8V1RG
OjpTdHJpbmc+IHZlY3RvcjsKLQotICAgIE5TVUludGVnZXIgc2l6ZSA9IGlucHV0LmNvdW50Owot
ICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuIHZlY3RvcjsKLQotICAgIHZlY3Rvci5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwotICAgIGZvciAoaWQgc3RyaW5nIDogaW5wdXQpIHsK
LSAgICAgICAgaWYgKFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKLSAg
ICAgICAgICAgIHZlY3Rvci51bmNoZWNrZWRBcHBlbmQoc3RyaW5nKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHZlY3RvcjsKLX0KLQogLSAoaW5zdGFuY2V0eXBlKV9pbml0V2l0aFNvdXJjZTooTlNTdHJp
bmcgKilzb3VyY2UgaW5qZWN0aW9uVGltZTooV0tVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSlpbmpl
Y3Rpb25UaW1lIGZvck1haW5GcmFtZU9ubHk6KEJPT0wpZm9yTWFpbkZyYW1lT25seSBsZWdhY3lX
aGl0ZWxpc3Q6KE5TQXJyYXkgKilsZWdhY3lXaGl0ZWxpc3QgbGVnYWN5QmxhY2tsaXN0OihOU0Fy
cmF5ICopbGVnYWN5QmxhY2tsaXN0IHVzZXJDb250ZW50V29ybGQ6KF9XS1VzZXJDb250ZW50V29y
bGQgKil1c2VyQ29udGVudFdvcmxkCiB7CiAgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBBUEk6Ok9iamVjdDo6Y29uc3RydWN0SW5XcmFw
cGVyPEFQSTo6VXNlclNjcmlwdD4oc2VsZiwgV2ViQ29yZTo6VXNlclNjcmlwdCB7IFdURjo6U3Ry
aW5nKHNvdXJjZSksIEFQSTo6VXNlclNjcmlwdDo6Z2VuZXJhdGVVbmlxdWVVUkwoKSwgdG9TdHJp
bmdWZWN0b3IobGVnYWN5V2hpdGVsaXN0KSwgdG9TdHJpbmdWZWN0b3IobGVnYWN5QmxhY2tsaXN0
KSwgQVBJOjp0b1dlYkNvcmVVc2VyU2NyaXB0SW5qZWN0aW9uVGltZShpbmplY3Rpb25UaW1lKSwg
Zm9yTWFpbkZyYW1lT25seSA/IFdlYkNvcmU6OkluamVjdEluVG9wRnJhbWVPbmx5IDogV2ViQ29y
ZTo6SW5qZWN0SW5BbGxGcmFtZXMgfSwgKnVzZXJDb250ZW50V29ybGQtPl91c2VyQ29udGVudFdv
cmxkKTsKKyAgICBBUEk6Ok9iamVjdDo6Y29uc3RydWN0SW5XcmFwcGVyPEFQSTo6VXNlclNjcmlw
dD4oc2VsZiwgV2ViQ29yZTo6VXNlclNjcmlwdCB7IFdURjo6U3RyaW5nKHNvdXJjZSksIEFQSTo6
VXNlclNjcmlwdDo6Z2VuZXJhdGVVbmlxdWVVUkwoKSwgQVBJOjp0b1N0cmluZ1ZlY3RvcihsZWdh
Y3lXaGl0ZWxpc3QpLCBBUEk6OnRvU3RyaW5nVmVjdG9yKGxlZ2FjeUJsYWNrbGlzdCksIEFQSTo6
dG9XZWJDb3JlVXNlclNjcmlwdEluamVjdGlvblRpbWUoaW5qZWN0aW9uVGltZSksIGZvck1haW5G
cmFtZU9ubHkgPyBXZWJDb3JlOjpJbmplY3RJblRvcEZyYW1lT25seSA6IFdlYkNvcmU6OkluamVj
dEluQWxsRnJhbWVzIH0sICp1c2VyQ29udGVudFdvcmxkLT5fdXNlckNvbnRlbnRXb3JsZCk7CiAK
ICAgICByZXR1cm4gc2VsZjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLVXNlckNvbnRlbnRXb3JsZEludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudFdvcmxkSW50ZXJuYWwu
aAkocmV2aXNpb24gMTk3MzAxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tVc2VyQ29udGVudFdvcmxkSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksOCBAQAogCiAjaW1wb3J0ICJBUElVc2VyQ29udGVudFdvcmxkLmgiCiAjaW1wb3J0ICJXS09i
amVjdC5oIgorI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgorI2ltcG9ydCA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBBUEkgewogCkBAIC0zOCw2ICs0MCwyMiBAQCBpbmxpbmUgX1dL
VXNlckNvbnRlbnRXb3JsZCAqd3JhcHBlcihVc2VyCiAgICAgcmV0dXJuIChfV0tVc2VyQ29udGVu
dFdvcmxkICopdXNlckNvbnRlbnRXb3JsZC53cmFwcGVyKCk7CiB9CiAKK2lubGluZSBWZWN0b3I8
V1RGOjpTdHJpbmc+IHRvU3RyaW5nVmVjdG9yKE5TQXJyYXkgKmlucHV0KQoreworICAgIFZlY3Rv
cjxXVEY6OlN0cmluZz4gdmVjdG9yOworCisgICAgTlNVSW50ZWdlciBzaXplID0gaW5wdXQuY291
bnQ7CisgICAgaWYgKCFzaXplKQorICAgICAgICByZXR1cm4gdmVjdG9yOworCisgICAgdmVjdG9y
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7CisgICAgZm9yIChpZCBzdHJpbmcgOiBpbnB1
dCkgeworICAgICAgICBpZiAoW3N0cmluZyBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11d
KQorICAgICAgICAgICAgdmVjdG9yLnVuY2hlY2tlZEFwcGVuZChzdHJpbmcpOworICAgIH0KKyAg
ICByZXR1cm4gdmVjdG9yOworfQorCiB9CiAKIEBpbnRlcmZhY2UgX1dLVXNlckNvbnRlbnRXb3Js
ZCAoKSA8V0tPYmplY3Q+IHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVXNlclN0eWxlU2hlZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1VzZXJTdHlsZVNoZWV0LmgJKHJldmlzaW9uIDE5NzMwMSkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQAogCiBOU19BU1NVTUVfTk9OTlVMTF9CRUdJ
TgogCitAY2xhc3MgX1dLVXNlckNvbnRlbnRXb3JsZDsKKwogV0tfQ0xBU1NfQVZBSUxBQkxFKFdL
X01BQ19UQkEsIFdLX0lPU19UQkEpCiBAaW50ZXJmYWNlIF9XS1VzZXJTdHlsZVNoZWV0IDogTlNP
YmplY3QgPE5TQ29weWluZz4KIApAQCAtNDAsNiArNDIsOCBAQCBXS19DTEFTU19BVkFJTEFCTEUo
V0tfTUFDX1RCQSwgV0tfSU9TX1RCCiAKIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNvdXJjZToo
TlNTdHJpbmcgKilzb3VyY2UgZm9yTWFpbkZyYW1lT25seTooQk9PTClmb3JNYWluRnJhbWVPbmx5
OwogCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGZv
ck1haW5GcmFtZU9ubHk6KEJPT0wpZm9yTWFpbkZyYW1lT25seSBsZWdhY3lXaGl0ZWxpc3Q6KFdL
X0FSUkFZKE5TU3RyaW5nICopICopbGVnYWN5V2hpdGVsaXN0IGxlZ2FjeUJsYWNrbGlzdDooV0tf
QVJSQVkoTlNTdHJpbmcgKikgKilsZWdhY3lCbGFja2xpc3QgdXNlckNvbnRlbnRXb3JsZDooX1dL
VXNlckNvbnRlbnRXb3JsZCAqKXVzZXJDb250ZW50V29ybGQ7CisKIEBlbmQKIAogTlNfQVNTVU1F
X05PTk5VTExfRU5ECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1VzZXJTdHlsZVNoZWV0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQubW0JKHJldmlzaW9uIDE5NzMwMSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQubW0JKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbXBvcnQgIkFQSUFycmF5LmgiCiAjaW1w
b3J0ICJXS05TQXJyYXkuaCIKICNpbXBvcnQgIldlYktpdDJJbml0aWFsaXplLmgiCisjaW1wb3J0
ICJfV0tVc2VyQ29udGVudFdvcmxkSW50ZXJuYWwuaCIKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAK
QEAgLTQyLDcgKzQzLDIwIEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNvdXJjZTooTlNTdHJp
bmcKICAgICAvLyBGSVhNRTogSW4gdGhlIEFQSSB0ZXN0LCB3ZSBjYW4gdXNlIGdlbmVyYXRlVW5p
cXVlVVJMIGJlbG93IGJlZm9yZSB0aGUgQVBJOjpPYmplY3QgY29uc3RydWN0b3IgaGFzIGRvbmUg
dGhpcy4uLiB3aGVyZSBzaG91bGQgdGhpcyByZWFsbHkgYmU/CiAgICAgV2ViS2l0OjpJbml0aWFs
aXplV2ViS2l0MigpOwogCi0gICAgQVBJOjpPYmplY3Q6OmNvbnN0cnVjdEluV3JhcHBlcjxBUEk6
OlVzZXJTdHlsZVNoZWV0PihzZWxmLCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCB7IFdURjo6U3Ry
aW5nKHNvdXJjZSksIEFQSTo6VXNlclN0eWxlU2hlZXQ6OmdlbmVyYXRlVW5pcXVlVVJMKCksIHsg
fSwgeyB9LCBmb3JNYWluRnJhbWVPbmx5ID8gV2ViQ29yZTo6SW5qZWN0SW5Ub3BGcmFtZU9ubHkg
OiBXZWJDb3JlOjpJbmplY3RJbkFsbEZyYW1lcywgV2ViQ29yZTo6VXNlclN0eWxlVXNlckxldmVs
IH0pOworICAgIEFQSTo6T2JqZWN0Ojpjb25zdHJ1Y3RJbldyYXBwZXI8QVBJOjpVc2VyU3R5bGVT
aGVldD4oc2VsZiwgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQgeyBXVEY6OlN0cmluZyhzb3VyY2Up
LCBBUEk6OlVzZXJTdHlsZVNoZWV0OjpnZW5lcmF0ZVVuaXF1ZVVSTCgpLCB7IH0sIHsgfSwgZm9y
TWFpbkZyYW1lT25seSA/IFdlYkNvcmU6OkluamVjdEluVG9wRnJhbWVPbmx5IDogV2ViQ29yZTo6
SW5qZWN0SW5BbGxGcmFtZXMsIFdlYkNvcmU6OlVzZXJTdHlsZVVzZXJMZXZlbCB9LCBBUEk6OlVz
ZXJDb250ZW50V29ybGQ6Om5vcm1hbFdvcmxkKCkpOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgZm9yTWFp
bkZyYW1lT25seTooQk9PTClmb3JNYWluRnJhbWVPbmx5IGxlZ2FjeVdoaXRlbGlzdDooV0tfQVJS
QVkoTlNTdHJpbmcgKikgKilsZWdhY3lXaGl0ZWxpc3QgbGVnYWN5QmxhY2tsaXN0OihXS19BUlJB
WShOU1N0cmluZyAqKSAqKWxlZ2FjeUJsYWNrbGlzdCB1c2VyQ29udGVudFdvcmxkOihfV0tVc2Vy
Q29udGVudFdvcmxkICopdXNlckNvbnRlbnRXb3JsZAoreworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgLy8gRklYTUU6IEluIHRoZSBB
UEkgdGVzdCwgd2UgY2FuIHVzZSBnZW5lcmF0ZVVuaXF1ZVVSTCBiZWxvdyBiZWZvcmUgdGhlIEFQ
STo6T2JqZWN0IGNvbnN0cnVjdG9yIGhhcyBkb25lIHRoaXMuLi4gd2hlcmUgc2hvdWxkIHRoaXMg
cmVhbGx5IGJlPworICAgIFdlYktpdDo6SW5pdGlhbGl6ZVdlYktpdDIoKTsKKworICAgIEFQSTo6
T2JqZWN0Ojpjb25zdHJ1Y3RJbldyYXBwZXI8QVBJOjpVc2VyU3R5bGVTaGVldD4oc2VsZiwgV2Vi
Q29yZTo6VXNlclN0eWxlU2hlZXQgeyBXVEY6OlN0cmluZyhzb3VyY2UpLCBBUEk6OlVzZXJTdHls
ZVNoZWV0OjpnZW5lcmF0ZVVuaXF1ZVVSTCgpLCBBUEk6OnRvU3RyaW5nVmVjdG9yKGxlZ2FjeVdo
aXRlbGlzdCksIEFQSTo6dG9TdHJpbmdWZWN0b3IobGVnYWN5QmxhY2tsaXN0KSwgZm9yTWFpbkZy
YW1lT25seSA/IFdlYkNvcmU6OkluamVjdEluVG9wRnJhbWVPbmx5IDogV2ViQ29yZTo6SW5qZWN0
SW5BbGxGcmFtZXMsIFdlYkNvcmU6OlVzZXJTdHlsZVVzZXJMZXZlbCB9LCAqdXNlckNvbnRlbnRX
b3JsZC0+X3VzZXJDb250ZW50V29ybGQpOwogCiAgICAgcmV0dXJuIHNlbGY7CiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2Vy
Q29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAJKHJldmlzaW9uIDE5NzMw
MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDkgKzg1LDkgQEAgdm9p
ZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6YWRkUAogICAgICAgICB1c2VyU2NyaXB0
cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIodXNlclNjcmlwdC0+dXNlckNvbnRlbnRXb3JsZCgpLmlk
ZW50aWZpZXIoKSwgdXNlclNjcmlwdC0+dXNlclNjcmlwdCgpKSk7CiAgICAgd2ViUHJvY2Vzc1By
b3h5LmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVy
OjpBZGRVc2VyU2NyaXB0cyh1c2VyU2NyaXB0cyksIG1faWRlbnRpZmllcik7CiAKLSAgICBWZWN0
b3I8V2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+IHVzZXJTdHlsZVNoZWV0czsKKyAgICBWZWN0b3I8
c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4+IHVzZXJTdHlsZVNo
ZWV0czsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHVzZXJTdHlsZVNoZWV0IDogbV91c2VyU3R5bGVT
aGVldHMtPmVsZW1lbnRzT2ZUeXBlPEFQSTo6VXNlclN0eWxlU2hlZXQ+KCkpCi0gICAgICAgIHVz
ZXJTdHlsZVNoZWV0cy5hcHBlbmQodXNlclN0eWxlU2hlZXQtPnVzZXJTdHlsZVNoZWV0KCkpOwor
ICAgICAgICB1c2VyU3R5bGVTaGVldHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHVzZXJTdHlsZVNo
ZWV0LT51c2VyQ29udGVudFdvcmxkKCkuaWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC0+dXNl
clN0eWxlU2hlZXQoKSkpOwogICAgIHdlYlByb2Nlc3NQcm94eS5jb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlclN0eWxlU2hlZXRzKHVz
ZXJTdHlsZVNoZWV0cyksIG1faWRlbnRpZmllcik7CiAKICAgICBWZWN0b3I8V2ViU2NyaXB0TWVz
c2FnZUhhbmRsZXJIYW5kbGU+IG1lc3NhZ2VIYW5kbGVySGFuZGxlczsKQEAgLTExMSwxNyArMTEx
LDU5IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW8KICAgICB3ZWJQ
cm9jZXNzUHJveHkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lkZW50aWZpZXIpOwog
fQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRVc2VyU2NyaXB0KEFQ
STo6VXNlclNjcmlwdCYgdXNlclNjcmlwdCkKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHk6OmFkZFVzZXJDb250ZW50V29ybGRVc2UoQVBJOjpVc2VyQ29udGVudFdvcmxkJiB3b3Js
ZCkKIHsKLSAgICBSZWY8QVBJOjpVc2VyQ29udGVudFdvcmxkPiB3b3JsZCA9IHVzZXJTY3JpcHQu
dXNlckNvbnRlbnRXb3JsZCgpOworICAgIGlmICgmd29ybGQgPT0gJkFQSTo6VXNlckNvbnRlbnRX
b3JsZDo6bm9ybWFsV29ybGQoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHdvcmxkLnB0
cigpICE9ICZBUEk6OlVzZXJDb250ZW50V29ybGQ6Om5vcm1hbFdvcmxkKCkpIHsKLSAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtX3VzZXJDb250ZW50V29ybGRzLmFkZCh3b3JsZC5wdHIoKSk7Ci0g
ICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgZm9yIChXZWJQ
cm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykKLSAgICAgICAgICAgICAgICBwcm9j
ZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6QWRkVXNlckNvbnRlbnRXb3JsZHMoeyBzdGQ6Om1ha2VfcGFpcih3b3JsZC0+aWRlbnRpZmll
cigpLCB3b3JsZC0+bmFtZSgpKSB9KSwgbV9pZGVudGlmaWVyKTsKKyAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fdXNlckNvbnRlbnRXb3JsZHMuYWRkKCZ3b3JsZCk7CisgICAgaWYgKGFkZFJlc3VsdC5p
c05ld0VudHJ5KSB7CisgICAgICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9w
cm9jZXNzZXMpCisgICAgICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlckNvbnRlbnRXb3JsZHMoeyBzdGQ6
Om1ha2VfcGFpcih3b3JsZC5pZGVudGlmaWVyKCksIHdvcmxkLm5hbWUoKSkgfSksIG1faWRlbnRp
Zmllcik7CisgICAgfQorfQorCitib29sIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Ojpz
aG91bGRTZW5kUmVtb3ZlVXNlckNvbnRlbnRXb3JsZHNNZXNzYWdlKEFQSTo6VXNlckNvbnRlbnRX
b3JsZCYgd29ybGQsIHVuc2lnbmVkIG51bWJlck9mVXNlc1RvUmVtb3ZlKQoreworICAgIGlmICgm
d29ybGQgPT0gJkFQSTo6VXNlckNvbnRlbnRXb3JsZDo6bm9ybWFsV29ybGQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYXV0byBpdCA9IG1fdXNlckNvbnRlbnRXb3JsZHMuZmluZCgm
d29ybGQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlVzZXNUb1JlbW92
ZTsgKytpKSB7CisgICAgICAgIGlmIChtX3VzZXJDb250ZW50V29ybGRzLnJlbW92ZShpdCkpIHsK
KyAgICAgICAgICAgIEFTU0VSVChpID09IChudW1iZXJPZlVzZXNUb1JlbW92ZSAtIDEpKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cmVtb3Zl
VXNlckNvbnRlbnRXb3JsZFVzZXMoQVBJOjpVc2VyQ29udGVudFdvcmxkJiB3b3JsZCwgdW5zaWdu
ZWQgbnVtYmVyT2ZVc2VzVG9SZW1vdmUpCit7CisgICAgaWYgKHNob3VsZFNlbmRSZW1vdmVVc2Vy
Q29udGVudFdvcmxkc01lc3NhZ2Uod29ybGQsIG51bWJlck9mVXNlc1RvUmVtb3ZlKSkgeworICAg
ICAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQorICAgICAg
ICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXI6OlJlbW92ZVVzZXJDb250ZW50V29ybGRzKHsgd29ybGQuaWRlbnRpZmllcigp
IH0pLCBtX2lkZW50aWZpZXIpOworICAgIH0KK30KKwordm9pZCBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eTo6cmVtb3ZlVXNlckNvbnRlbnRXb3JsZFVzZXMoSGFzaENvdW50ZWRTZXQ8UmVm
UHRyPEFQSTo6VXNlckNvbnRlbnRXb3JsZD4+JiB3b3JsZHMpCit7CisgICAgVmVjdG9yPHVpbnQ2
NF90PiB3b3JsZHNUb1JlbW92ZTsKKyAgICBmb3IgKGF1dG8mIHdvcmxkVXNlUGFpciA6IHdvcmxk
cykgeworICAgICAgICBpZiAoc2hvdWxkU2VuZFJlbW92ZVVzZXJDb250ZW50V29ybGRzTWVzc2Fn
ZSgqd29ybGRVc2VQYWlyLmtleS5nZXQoKSwgd29ybGRVc2VQYWlyLnZhbHVlKSkKKyAgICAgICAg
ICAgIHdvcmxkc1RvUmVtb3ZlLmFwcGVuZCh3b3JsZFVzZVBhaXIua2V5LT5pZGVudGlmaWVyKCkp
OworICAgIH0KKworICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9wcm9jZXNz
ZXMpCisgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpSZW1vdmVVc2VyQ29udGVudFdvcmxkcyh3b3JsZHNUb1JlbW92
ZSksIG1faWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHk6OmFkZFVzZXJTY3JpcHQoQVBJOjpVc2VyU2NyaXB0JiB1c2VyU2NyaXB0KQoreworICAgIFJl
ZjxBUEk6OlVzZXJDb250ZW50V29ybGQ+IHdvcmxkID0gdXNlclNjcmlwdC51c2VyQ29udGVudFdv
cmxkKCk7CisKKyAgICBhZGRVc2VyQ29udGVudFdvcmxkVXNlKHdvcmxkLmdldCgpKTsKIAogICAg
IG1fdXNlclNjcmlwdHMtPmVsZW1lbnRzKCkuYXBwZW5kKCZ1c2VyU2NyaXB0KTsKIApAQCAtMTM4
LDQ0ICsxODAsOTUgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cmVtbwog
CiAgICAgbV91c2VyU2NyaXB0cy0+ZWxlbWVudHMoKS5yZW1vdmVBbGwoJnVzZXJTY3JpcHQpOwog
Ci0gICAgaWYgKHdvcmxkLnB0cigpICE9ICZBUEk6OlVzZXJDb250ZW50V29ybGQ6Om5vcm1hbFdv
cmxkKCkpIHsKLSAgICAgICAgaWYgKG1fdXNlckNvbnRlbnRXb3JsZHMucmVtb3ZlKCZ1c2VyU2Ny
aXB0LnVzZXJDb250ZW50V29ybGQoKSkpIHsKLSAgICAgICAgICAgIGZvciAoV2ViUHJvY2Vzc1By
b3h5KiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAgICAgICAgICAgcHJvY2Vzcy0+Y29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OlJlbW92
ZVVzZXJDb250ZW50V29ybGQod29ybGQtPmlkZW50aWZpZXIoKSksIG1faWRlbnRpZmllcik7Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgcmVtb3ZlVXNlckNvbnRlbnRXb3JsZFVzZXMod29ybGQuZ2V0
KCksIDEpOworfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVB
bGxVc2VyU2NyaXB0cyhBUEk6OlVzZXJDb250ZW50V29ybGQmIHdvcmxkKQoreworICAgIGZvciAo
V2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCisgICAgICAgIHByb2Nlc3Mt
PmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpS
ZW1vdmVBbGxVc2VyU2NyaXB0cyh7IHdvcmxkLmlkZW50aWZpZXIoKSB9KSwgbV9pZGVudGlmaWVy
KTsKKworICAgIHVuc2lnbmVkIHVzZXJTY3JpcHRzUmVtb3ZlZCA9IG1fdXNlclNjcmlwdHMtPnJl
bW92ZUFsbE9mVHlwZU1hdGNoaW5nPEFQSTo6VXNlclNjcmlwdD4oCisgICAgICAgIFsmXSAoY29u
c3QgUmVmUHRyPEFQSTo6VXNlclNjcmlwdD4mIHVzZXJTY3JpcHQpIC0+IGJvb2wgeworICAgICAg
ICAgICAgcmV0dXJuICZ1c2VyU2NyaXB0LT51c2VyQ29udGVudFdvcmxkKCkgPT0gJndvcmxkOwor
ICAgICAgICB9KTsKKworICAgIHJlbW92ZVVzZXJDb250ZW50V29ybGRVc2VzKHdvcmxkLCB1c2Vy
U2NyaXB0c1JlbW92ZWQpOwogfQogCiB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
OjpyZW1vdmVBbGxVc2VyU2NyaXB0cygpCiB7CisgICAgSGFzaENvdW50ZWRTZXQ8UmVmUHRyPEFQ
STo6VXNlckNvbnRlbnRXb3JsZD4+IHdvcmxkczsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHVzZXJT
Y3JpcHQgOiBtX3VzZXJTY3JpcHRzLT5lbGVtZW50c09mVHlwZTxBUEk6OlVzZXJTY3JpcHQ+KCkp
CisgICAgICAgIHdvcmxkcy5hZGQoY29uc3RfY2FzdDxBUEk6OlVzZXJDb250ZW50V29ybGQqPigm
dXNlclNjcmlwdC0+dXNlckNvbnRlbnRXb3JsZCgpKSk7CisKKyAgICBWZWN0b3I8dWludDY0X3Q+
IHdvcmxkSWRlbnRpZmllcnM7CisgICAgd29ybGRJZGVudGlmaWVycy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHdvcmxkcy5zaXplKCkpOworICAgIGZvciAoY29uc3QgYXV0byYgd29ybGRDb3VudFBh
aXIgOiB3b3JsZHMpCisgICAgICAgIHdvcmxkSWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5kKHdv
cmxkQ291bnRQYWlyLmtleS0+aWRlbnRpZmllcigpKTsKKwogICAgIGZvciAoV2ViUHJvY2Vzc1By
b3h5KiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpSZW1vdmVBbGxVc2Vy
U2NyaXB0cyhBUEk6OlVzZXJDb250ZW50V29ybGQ6Om5vcm1hbFdvcmxkKCkuaWRlbnRpZmllcigp
KSwgbV9pZGVudGlmaWVyKTsKKyAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OlJlbW92ZUFsbFVzZXJTY3JpcHRzKHdv
cmxkSWRlbnRpZmllcnMpLCBtX2lkZW50aWZpZXIpOwogCiAgICAgbV91c2VyU2NyaXB0cy0+ZWxl
bWVudHMoKS5jbGVhcigpOworCisgICAgcmVtb3ZlVXNlckNvbnRlbnRXb3JsZFVzZXMod29ybGRz
KTsKIH0KIAogdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6YWRkVXNlclN0eWxl
U2hlZXQoQVBJOjpVc2VyU3R5bGVTaGVldCYgdXNlclN0eWxlU2hlZXQpCiB7CisgICAgUmVmPEFQ
STo6VXNlckNvbnRlbnRXb3JsZD4gd29ybGQgPSB1c2VyU3R5bGVTaGVldC51c2VyQ29udGVudFdv
cmxkKCk7CisKKyAgICBhZGRVc2VyQ29udGVudFdvcmxkVXNlKHdvcmxkLmdldCgpKTsKKwogICAg
IG1fdXNlclN0eWxlU2hlZXRzLT5lbGVtZW50cygpLmFwcGVuZCgmdXNlclN0eWxlU2hlZXQpOwog
CiAgICAgZm9yIChXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykKLSAgICAg
ICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENv
bnRyb2xsZXI6OkFkZFVzZXJTdHlsZVNoZWV0cyh7IHVzZXJTdHlsZVNoZWV0LnVzZXJTdHlsZVNo
ZWV0KCkgfSksIG1faWRlbnRpZmllcik7CisgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2VyU3R5bGVTaGVl
dHMoeyBzdGQ6Om1ha2VfcGFpcih3b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC51
c2VyU3R5bGVTaGVldCgpKSB9KSwgbV9pZGVudGlmaWVyKTsKIH0KIAotdm9pZCBXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eTo6cmVtb3ZlVXNlclN0eWxlU2hlZXQoY29uc3QgQVBJOjpVc2Vy
U3R5bGVTaGVldCYgdXNlclN0eWxlU2hlZXQpCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5OjpyZW1vdmVVc2VyU3R5bGVTaGVldChBUEk6OlVzZXJTdHlsZVNoZWV0JiB1c2VyU3R5
bGVTaGVldCkKIHsKKyAgICBSZWY8QVBJOjpVc2VyQ29udGVudFdvcmxkPiB3b3JsZCA9IHVzZXJT
dHlsZVNoZWV0LnVzZXJDb250ZW50V29ybGQoKTsKKwogICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5
KiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpSZW1vdmVVc2VyU3R5bGVT
aGVldCh7IHVzZXJTdHlsZVNoZWV0LnVzZXJTdHlsZVNoZWV0KCkudXJsKCkuc3RyaW5nKCkgfSks
IG1faWRlbnRpZmllcik7CisgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpSZW1vdmVVc2VyU3R5bGVTaGVldCh3b3Js
ZC0+aWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC51c2VyU3R5bGVTaGVldCgpLnVybCgpLnN0
cmluZygpKSwgbV9pZGVudGlmaWVyKTsKIAogICAgIG1fdXNlclN0eWxlU2hlZXRzLT5lbGVtZW50
cygpLnJlbW92ZUFsbCgmdXNlclN0eWxlU2hlZXQpOworCisgICAgcmVtb3ZlVXNlckNvbnRlbnRX
b3JsZFVzZXMod29ybGQuZ2V0KCksIDEpOworfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5OjpyZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMoQVBJOjpVc2VyQ29udGVudFdvcmxk
JiB3b3JsZCkKK3sKKyAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vz
c2VzKQorICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6UmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKHsgd29ybGQuaWRl
bnRpZmllcigpIH0pLCBtX2lkZW50aWZpZXIpOworCisgICAgdW5zaWduZWQgdXNlclN0eWxlU2hl
ZXRzUmVtb3ZlZCA9IG1fdXNlclN0eWxlU2hlZXRzLT5yZW1vdmVBbGxPZlR5cGVNYXRjaGluZzxB
UEk6OlVzZXJTdHlsZVNoZWV0PigKKyAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8QVBJOjpVc2Vy
U3R5bGVTaGVldD4mIHVzZXJTdHlsZVNoZWV0KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVy
biAmdXNlclN0eWxlU2hlZXQtPnVzZXJDb250ZW50V29ybGQoKSA9PSAmd29ybGQ7CisgICAgICAg
IH0pOworCisgICAgcmVtb3ZlVXNlckNvbnRlbnRXb3JsZFVzZXMod29ybGQsIHVzZXJTdHlsZVNo
ZWV0c1JlbW92ZWQpOwogfQogCiB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Ojpy
ZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMoKQogewotICAgIG1fdXNlclN0eWxlU2hlZXRzLT5lbGVt
ZW50cygpLmNsZWFyKCk7CisgICAgSGFzaENvdW50ZWRTZXQ8UmVmUHRyPEFQSTo6VXNlckNvbnRl
bnRXb3JsZD4+IHdvcmxkczsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHVzZXJTdHlsZVNoZWV0IDog
bV91c2VyU3R5bGVTaGVldHMtPmVsZW1lbnRzT2ZUeXBlPEFQSTo6VXNlclN0eWxlU2hlZXQ+KCkp
CisgICAgICAgIHdvcmxkcy5hZGQoY29uc3RfY2FzdDxBUEk6OlVzZXJDb250ZW50V29ybGQqPigm
dXNlclN0eWxlU2hlZXQtPnVzZXJDb250ZW50V29ybGQoKSkpOworCisgICAgVmVjdG9yPHVpbnQ2
NF90PiB3b3JsZElkZW50aWZpZXJzOworICAgIHdvcmxkSWRlbnRpZmllcnMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eSh3b3JsZHMuc2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHdvcmxkQ291
bnRQYWlyIDogd29ybGRzKQorICAgICAgICB3b3JsZElkZW50aWZpZXJzLnVuY2hlY2tlZEFwcGVu
ZCh3b3JsZENvdW50UGFpci5rZXktPmlkZW50aWZpZXIoKSk7CiAKICAgICBmb3IgKFdlYlByb2Nl
c3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQotICAgICAgICBwcm9jZXNzLT5jb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6UmVtb3ZlQWxs
VXNlclN0eWxlU2hlZXRzKCksIG1faWRlbnRpZmllcik7CisgICAgICAgIHByb2Nlc3MtPmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpSZW1vdmVB
bGxVc2VyU3R5bGVTaGVldHMod29ybGRJZGVudGlmaWVycyksIG1faWRlbnRpZmllcik7CisKKyAg
ICBtX3VzZXJTdHlsZVNoZWV0cy0+ZWxlbWVudHMoKS5jbGVhcigpOworCisgICAgcmVtb3ZlVXNl
ckNvbnRlbnRXb3JsZFVzZXMod29ybGRzKTsKIH0KIAogYm9vbCBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eTo6YWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVyKFdlYlNjcmlwdE1lc3NhZ2VI
YW5kbGVyKiBoYW5kbGVyKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1VzZXJDb250
ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5LmgJKHJldmlzaW9uIDE5NzMwMSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2Vy
Q29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03NiwxMyArNzYsMTcgQEAgcHVibGljOgogICAgIEFQSTo6QXJyYXkmIHVzZXJTY3JpcHRzKCkg
eyByZXR1cm4gbV91c2VyU2NyaXB0cy5nZXQoKTsgfQogICAgIHZvaWQgYWRkVXNlclNjcmlwdChB
UEk6OlVzZXJTY3JpcHQmKTsKICAgICB2b2lkIHJlbW92ZVVzZXJTY3JpcHQoQVBJOjpVc2VyU2Ny
aXB0Jik7CisgICAgdm9pZCByZW1vdmVBbGxVc2VyU2NyaXB0cyhBUEk6OlVzZXJDb250ZW50V29y
bGQmKTsKICAgICB2b2lkIHJlbW92ZUFsbFVzZXJTY3JpcHRzKCk7CiAKICAgICBBUEk6OkFycmF5
JiB1c2VyU3R5bGVTaGVldHMoKSB7IHJldHVybiBtX3VzZXJTdHlsZVNoZWV0cy5nZXQoKTsgfQog
ICAgIHZvaWQgYWRkVXNlclN0eWxlU2hlZXQoQVBJOjpVc2VyU3R5bGVTaGVldCYpOwotICAgIHZv
aWQgcmVtb3ZlVXNlclN0eWxlU2hlZXQoY29uc3QgQVBJOjpVc2VyU3R5bGVTaGVldCYpOworICAg
IHZvaWQgcmVtb3ZlVXNlclN0eWxlU2hlZXQoQVBJOjpVc2VyU3R5bGVTaGVldCYpOworICAgIHZv
aWQgcmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKEFQSTo6VXNlckNvbnRlbnRXb3JsZCYpOwogICAg
IHZvaWQgcmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKCk7CiAKKyAgICB2b2lkIHJlbW92ZUFsbFVz
ZXJDb250ZW50KEFQSTo6VXNlckNvbnRlbnRXb3JsZCYpOworCiAgICAgLy8gUmV0dXJucyBmYWxz
ZSBpZiB0aGVyZSB3YXMgYSBuYW1lIGNvbmZsaWN0LgogICAgIGJvb2wgYWRkVXNlclNjcmlwdE1l
c3NhZ2VIYW5kbGVyKFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyKik7CiAgICAgdm9pZCByZW1vdmVV
c2VyTWVzc2FnZUhhbmRsZXJGb3JOYW1lKGNvbnN0IFN0cmluZyYpOwpAQCAtOTksNiArMTAzLDEx
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZFBvc3RNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IHVpbnQ2NF90IHBhZ2VJRCwgdWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhJiwgdWludDY0X3QgbWVzc2FnZUhhbmRsZXJJRCwgY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJik7CiAKKyAgICB2b2lkIGFkZFVzZXJDb250ZW50V29ybGRVc2UoQVBJOjpVc2Vy
Q29udGVudFdvcmxkJik7CisgICAgdm9pZCByZW1vdmVVc2VyQ29udGVudFdvcmxkVXNlcyhBUEk6
OlVzZXJDb250ZW50V29ybGQmLCB1bnNpZ25lZCBudW1iZXJPZlVzZXNUb1JlbW92ZSk7CisgICAg
dm9pZCByZW1vdmVVc2VyQ29udGVudFdvcmxkVXNlcyhIYXNoQ291bnRlZFNldDxSZWZQdHI8QVBJ
OjpVc2VyQ29udGVudFdvcmxkPj4mKTsKKyAgICBib29sIHNob3VsZFNlbmRSZW1vdmVVc2VyQ29u
dGVudFdvcmxkc01lc3NhZ2UoQVBJOjpVc2VyQ29udGVudFdvcmxkJiwgdW5zaWduZWQgbnVtYmVy
T2ZVc2VzVG9SZW1vdmUpOworCiAgICAgdWludDY0X3QgbV9pZGVudGlmaWVyOwogICAgIEhhc2hT
ZXQ8V2ViUHJvY2Vzc1Byb3h5Kj4gbV9wcm9jZXNzZXM7ICAgIAogICAgIFJlZjxBUEk6OkFycmF5
PiBtX3VzZXJTY3JpcHRzOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29u
dGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmNw
cAkocmV2aXNpb24gMTk3MzAxKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29u
dGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUs
MjEgKzEwNSwyMyBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvCiAg
ICAgfQogfQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlckNvbnRl
bnRXb3JsZCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIpCit2b2lkIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlVXNlckNvbnRlbnRXb3JsZHMoY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYg
d29ybGRJZGVudGlmaWVycykKIHsKLSAgICBBU1NFUlQod29ybGRJZGVudGlmaWVyKTsKLSAgICBB
U1NFUlQod29ybGRJZGVudGlmaWVyICE9IDEpOworICAgIGZvciAoYXV0byYgd29ybGRJZGVudGlm
aWVyIDogd29ybGRJZGVudGlmaWVycykgeworICAgICAgICBBU1NFUlQod29ybGRJZGVudGlmaWVy
KTsKKyAgICAgICAgQVNTRVJUKHdvcmxkSWRlbnRpZmllciAhPSAxKTsKIAotICAgIGF1dG8gaXQg
PSB3b3JsZE1hcCgpLmZpbmQod29ybGRJZGVudGlmaWVyKTsKLSAgICBpZiAoaXQgPT0gd29ybGRN
YXAoKS5lbmQoKSkgewotICAgICAgICBXVEZMb2dBbHdheXMoIlRyeWluZyB0byByZW1vdmUgYSBV
c2VyQ29udGVudFdvcmxkIChpZD0lIiBQUkl1NjQgIikgdGhhdCBkb2VzIG5vdCBleGlzdC4iLCB3
b3JsZElkZW50aWZpZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICBhdXRvIGl0
ID0gd29ybGRNYXAoKS5maW5kKHdvcmxkSWRlbnRpZmllcik7CisgICAgICAgIGlmIChpdCA9PSB3
b3JsZE1hcCgpLmVuZCgpKSB7CisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIlRyeWluZyB0byBy
ZW1vdmUgYSBVc2VyQ29udGVudFdvcmxkIChpZD0lIiBQUkl1NjQgIikgdGhhdCBpcyBkb2VzIG5v
dCBleGlzdC4iLCB3b3JsZElkZW50aWZpZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CiAKLSAgICBpdC0+dmFsdWUuc2Vjb25kLS07Ci0gICAgCi0gICAgaWYgKCFpdC0+dmFsdWUu
c2Vjb25kKQotICAgICAgICB3b3JsZE1hcCgpLnJlbW92ZShpdCk7CisgICAgICAgIGl0LT52YWx1
ZS5zZWNvbmQtLTsKKyAgICAgICAgCisgICAgICAgIGlmICghaXQtPnZhbHVlLnNlY29uZCkKKyAg
ICAgICAgICAgIHdvcmxkTWFwKCkucmVtb3ZlKGl0KTsKKyAgICB9CiB9CiAKIHZvaWQgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0cyhjb25zdCBWZWN0b3I8c3RkOjpwYWly
PHVpbnQ2NF90LCBXZWJDb3JlOjpVc2VyU2NyaXB0Pj4mIHVzZXJTY3JpcHRzKQpAQCAtMTQ2LDMz
ICsxNDgsNTQgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZQogICAg
IG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVVc2VyU2NyaXB0KGl0LT52YWx1ZS5maXJz
dC0+Y29yZVdvcmxkKCksIFVSTChVUkwoKSwgdXJsU3RyaW5nKSk7CiB9CiAKLXZvaWQgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyU2NyaXB0cyh1aW50NjRfdCB3b3JsZElk
ZW50aWZpZXIpCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlclNj
cmlwdHMoY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgd29ybGRJZGVudGlmaWVycykKIHsKLSAgICBh
dXRvIGl0ID0gd29ybGRNYXAoKS5maW5kKHdvcmxkSWRlbnRpZmllcik7Ci0gICAgaWYgKGl0ID09
IHdvcmxkTWFwKCkuZW5kKCkpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJUcnlpbmcgdG8gcmVt
b3ZlIGFsbCBVc2VyU2NyaXB0cyBmcm9tIGEgVXNlckNvbnRlbnRXb3JsZCAoaWQ9JSIgUFJJdTY0
ICIpIHRoYXQgZG9lcyBub3QgZXhpc3QuIiwgd29ybGRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBmb3IgKGF1dG8mIHdvcmxkSWRlbnRpZmllciA6IHdvcmxkSWRlbnRp
ZmllcnMpIHsKKyAgICAgICAgYXV0byBpdCA9IHdvcmxkTWFwKCkuZmluZCh3b3JsZElkZW50aWZp
ZXIpOworICAgICAgICBpZiAoaXQgPT0gd29ybGRNYXAoKS5lbmQoKSkgeworICAgICAgICAgICAg
V1RGTG9nQWx3YXlzKCJUcnlpbmcgdG8gcmVtb3ZlIGFsbCBVc2VyU2NyaXB0cyBmcm9tIGEgVXNl
ckNvbnRlbnRXb3JsZCAoaWQ9JSIgUFJJdTY0ICIpIHRoYXQgZG9lcyBub3QgZXhpc3QuIiwgd29y
bGRJZGVudGlmaWVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgbV91
c2VyQ29udGVudENvbnRyb2xsZXItPnJlbW92ZVVzZXJTY3JpcHRzKGl0LT52YWx1ZS5maXJzdC0+
Y29yZVdvcmxkKCkpOworICAgICAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+cmVtb3ZlVXNl
clNjcmlwdHMoaXQtPnZhbHVlLmZpcnN0LT5jb3JlV29ybGQoKSk7CisgICAgfQogfQogCi12b2lk
IFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4mIHVzZXJTdHlsZVNoZWV0cykKK3ZvaWQgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldHMoY29uc3QgVmVjdG9yPHN0ZDo6
cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+PiYgdXNlclN0eWxlU2hlZXRz
KQogewotICAgIGZvciAoY29uc3QgYXV0byYgdXNlclN0eWxlU2hlZXQgOiB1c2VyU3R5bGVTaGVl
dHMpIHsKLSAgICAgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPmFkZFVzZXJTdHlsZVNoZWV0
KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLAotICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxX
ZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4odXNlclN0eWxlU2hlZXQpLCBJbmplY3RJbkV4aXN0aW5n
RG9jdW1lbnRzKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHVzZXJTdHlsZVNoZWV0V29ybGRQYWly
IDogdXNlclN0eWxlU2hlZXRzKSB7CisgICAgICAgIGF1dG8gaXQgPSB3b3JsZE1hcCgpLmZpbmQo
dXNlclN0eWxlU2hlZXRXb3JsZFBhaXIuZmlyc3QpOworICAgICAgICBpZiAoaXQgPT0gd29ybGRN
YXAoKS5lbmQoKSkgeworICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJUcnlpbmcgdG8gYWRkIGEg
VXNlclN0eWxlU2hlZXQgdG8gYSBVc2VyQ29udGVudFdvcmxkIChpZD0lIiBQUkl1NjQgIikgdGhh
dCBkb2VzIG5vdCBleGlzdC4iLCB1c2VyU3R5bGVTaGVldFdvcmxkUGFpci5maXJzdCk7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1fdXNlckNvbnRlbnRDb250
cm9sbGVyLT5hZGRVc2VyU3R5bGVTaGVldChpdC0+dmFsdWUuZmlyc3QtPmNvcmVXb3JsZCgpLCBz
dGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Pih1c2VyU3R5bGVTaGVldFdv
cmxkUGFpci5zZWNvbmQpLCBJbmplY3RJbkV4aXN0aW5nRG9jdW1lbnRzKTsKICAgICB9CiB9CiAK
LXZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU3R5bGVTaGVldChjb25z
dCBTdHJpbmcmIHVybFN0cmluZykKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1v
dmVVc2VyU3R5bGVTaGVldCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nKQogewotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVVc2VyU3R5
bGVTaGVldChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgVVJMKFVSTCgpLCB1cmxTdHJpbmcpKTsK
KyAgICBhdXRvIGl0ID0gd29ybGRNYXAoKS5maW5kKHdvcmxkSWRlbnRpZmllcik7CisgICAgaWYg
KGl0ID09IHdvcmxkTWFwKCkuZW5kKCkpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJUcnlpbmcg
dG8gcmVtb3ZlIGEgVXNlclN0eWxlU2hlZXQgZnJvbSBhIFVzZXJDb250ZW50V29ybGQgKGlkPSUi
IFBSSXU2NCAiKSB0aGF0IGRvZXMgbm90IGV4aXN0LiIsIHdvcmxkSWRlbnRpZmllcik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+cmVtb3Zl
VXNlclN0eWxlU2hlZXQoaXQtPnZhbHVlLmZpcnN0LT5jb3JlV29ybGQoKSwgVVJMKFVSTCgpLCB1
cmxTdHJpbmcpKTsKIH0KIAotdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFs
bFVzZXJTdHlsZVNoZWV0cygpCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3Zl
QWxsVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIHdvcmxkSWRlbnRpZmll
cnMpCiB7Ci0gICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnJlbW92ZVVzZXJTdHlsZVNoZWV0
cyhtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAgZm9yIChhdXRvJiB3b3JsZElkZW50aWZp
ZXIgOiB3b3JsZElkZW50aWZpZXJzKSB7CisgICAgICAgIGF1dG8gaXQgPSB3b3JsZE1hcCgpLmZp
bmQod29ybGRJZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKGl0ID09IHdvcmxkTWFwKCkuZW5kKCkp
IHsKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiVHJ5aW5nIHRvIHJlbW92ZSBhbGwgVXNlclN0
eWxlU2hlZXRzIGZyb20gYSBVc2VyQ29udGVudFdvcmxkIChpZD0lIiBQUkl1NjQgIikgdGhhdCBk
b2VzIG5vdCBleGlzdC4iLCB3b3JsZElkZW50aWZpZXIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnJlbW92ZVVzZXJT
dHlsZVNoZWV0cyhpdC0+dmFsdWUuZmlyc3QtPmNvcmVXb3JsZCgpKTsKKyAgICB9CiB9CiAKICNp
ZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50
Q29udHJvbGxlci5oCShyZXZpc2lvbiAxOTczMDEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NCwxNSArNTQsMTUgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpNZXNzYWdlRGVjb2RlciYpIG92ZXJyaWRl
OwogCiAgICAgdm9pZCBhZGRVc2VyQ29udGVudFdvcmxkcyhjb25zdCBWZWN0b3I8c3RkOjpwYWly
PHVpbnQ2NF90LCBTdHJpbmc+PiYpOwotICAgIHZvaWQgcmVtb3ZlVXNlckNvbnRlbnRXb3JsZCh1
aW50NjRfdCk7CisgICAgdm9pZCByZW1vdmVVc2VyQ29udGVudFdvcmxkcyhjb25zdCBWZWN0b3I8
dWludDY0X3Q+Jik7CiAKICAgICB2b2lkIGFkZFVzZXJTY3JpcHRzKGNvbnN0IFZlY3RvcjxzdGQ6
OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTY3JpcHQ+PiYpOwogICAgIHZvaWQgcmVtb3Zl
VXNlclNjcmlwdCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3Ry
aW5nKTsKLSAgICB2b2lkIHJlbW92ZUFsbFVzZXJTY3JpcHRzKHVpbnQ2NF90IHdvcmxkSWRlbnRp
Zmllcik7CisgICAgdm9pZCByZW1vdmVBbGxVc2VyU2NyaXB0cyhjb25zdCBWZWN0b3I8dWludDY0
X3Q+Jik7CiAKLSAgICB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6VXNlclN0eWxlU2hlZXQ+Jik7Ci0gICAgdm9pZCByZW1vdmVVc2VyU3R5bGVTaGVldChjb25z
dCBTdHJpbmcmIHVybFN0cmluZyk7Ci0gICAgdm9pZCByZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMo
KTsKKyAgICB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPHVp
bnQ2NF90LCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4+Jik7CisgICAgdm9pZCByZW1vdmVVc2Vy
U3R5bGVTaGVldCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3Ry
aW5nKTsKKyAgICB2b2lkIHJlbW92ZUFsbFVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8dWlu
dDY0X3Q+Jik7CiAKICAgICB2b2lkIGFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcnMoY29uc3Qg
VmVjdG9yPFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVySGFuZGxlPiYpOwogICAgIHZvaWQgcmVtb3Zl
VXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVyKHVpbnQ2NF90KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLm1lc3NhZ2Vz
LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQv
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxOTczMDEpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29u
dHJvbGxlci5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjUsMTUgKzI1LDE1IEBACiAK
IG1lc3NhZ2VzIC0+IFdlYlVzZXJDb250ZW50Q29udHJvbGxlciB7CiAgICAgQWRkVXNlckNvbnRl
bnRXb3JsZHMoVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgU3RyaW5nPj4gd29ybGRzKTsKLSAg
ICBSZW1vdmVVc2VyQ29udGVudFdvcmxkKHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllcik7CisgICAg
UmVtb3ZlVXNlckNvbnRlbnRXb3JsZHMoVmVjdG9yPHVpbnQ2NF90PiB3b3JsZElkZW50aWZpZXJz
KTsKIAogICAgIEFkZFVzZXJTY3JpcHRzKFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNv
cmU6OlVzZXJTY3JpcHQ+PiB1c2VyU2NyaXB0cyk7CiAgICAgUmVtb3ZlVXNlclNjcmlwdCh1aW50
NjRfdCB3b3JsZElkZW50aWZpZXIsIFN0cmluZyB1cmwpOwotICAgIFJlbW92ZUFsbFVzZXJTY3Jp
cHRzKHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllcik7CisgICAgUmVtb3ZlQWxsVXNlclNjcmlwdHMo
VmVjdG9yPHVpbnQ2NF90PiB3b3JsZElkZW50aWZpZXJzKTsKIAotICAgIEFkZFVzZXJTdHlsZVNo
ZWV0cyhWZWN0b3I8V2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+IHVzZXJTdHlsZVNoZWV0cyk7Ci0g
ICAgUmVtb3ZlVXNlclN0eWxlU2hlZXQoU3RyaW5nIHVybCk7Ci0gICAgUmVtb3ZlQWxsVXNlclN0
eWxlU2hlZXRzKCk7CisgICAgQWRkVXNlclN0eWxlU2hlZXRzKFZlY3RvcjxzdGQ6OnBhaXI8dWlu
dDY0X3QsIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Pj4gdXNlclN0eWxlU2hlZXRzKTsKKyAgICBS
ZW1vdmVVc2VyU3R5bGVTaGVldCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIFN0cmluZyB1cmwp
OworICAgIFJlbW92ZUFsbFVzZXJTdHlsZVNoZWV0cyhWZWN0b3I8dWludDY0X3Q+IHdvcmxkSWRl
bnRpZmllcnMpOwogCiAgICAgQWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVycyhWZWN0b3I8V2Vi
S2l0OjpXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckhhbmRsZT4gc2NyaXB0TWVzc2FnZUhhbmRsZXJz
KTsKICAgICBSZW1vdmVVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXIodWludDY0X3QgaWRlbnRpZmll
cik7Cg==
</data>
<flag name="review"
          id="297239"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>