<?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>121893</bug_id>
          
          <creation_ts>2013-09-24 22:14:55 -0700</creation_ts>
          <short_desc>CTTE: More Document references please</short_desc>
          <delta_ts>2013-09-25 11:08:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>932881</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-24 22:14:55 -0700</bug_when>
    <thetext>CTTE: More Document references please</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932882</commentid>
    <comment_count>1</comment_count>
      <attachid>212537</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-24 22:16:30 -0700</bug_when>
    <thetext>Created attachment 212537
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932886</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-24 22:19:30 -0700</bug_when>
    <thetext>Attachment 212537 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/css/CSSCursorImageValue.cpp&apos;, u&apos;Source/WebCore/css/CSSCursorImageValue.h&apos;, u&apos;Source/WebCore/css/CSSImageSetValue.cpp&apos;, u&apos;Source/WebCore/css/CSSImageSetValue.h&apos;, u&apos;Source/WebCore/css/CSSParser.cpp&apos;, u&apos;Source/WebCore/css/CSSParser.h&apos;, u&apos;Source/WebCore/css/CSSParserMode.h&apos;, u&apos;Source/WebCore/css/CSSStyleSheet.cpp&apos;, u&apos;Source/WebCore/css/CSSStyleSheet.h&apos;, u&apos;Source/WebCore/css/SVGCSSStyleSelector.cpp&apos;, u&apos;Source/WebCore/css/StyleResolver.cpp&apos;, u&apos;Source/WebCore/dom/Document.cpp&apos;, u&apos;Source/WebCore/dom/DocumentStyleSheetCollection.cpp&apos;, u&apos;Source/WebCore/dom/DocumentStyleSheetCollection.h&apos;, u&apos;Source/WebCore/dom/Element.cpp&apos;, u&apos;Source/WebCore/dom/Element.h&apos;, u&apos;Source/WebCore/dom/InlineStyleSheetOwner.cpp&apos;, u&apos;Source/WebCore/dom/InlineStyleSheetOwner.h&apos;, u&apos;Source/WebCore/dom/Node.cpp&apos;, u&apos;Source/WebCore/dom/ProcessingInstruction.cpp&apos;, u&apos;Source/WebCore/dom/SelectorQuery.cpp&apos;, u&apos;Source/WebCore/dom/SelectorQuery.h&apos;, u&apos;Source/WebCore/editing/CompositeEditCommand.cpp&apos;, u&apos;Source/WebCore/editing/CompositeEditCommand.h&apos;, u&apos;Source/WebCore/html/HTMLBodyElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLDocument.h&apos;, u&apos;Source/WebCore/html/HTMLLinkElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLMediaElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLPlugInImageElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLStyleElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLStyleElement.h&apos;, u&apos;Source/WebCore/html/MediaDocument.h&apos;, u&apos;Source/WebCore/inspector/InspectorStyleSheet.cpp&apos;, u&apos;Source/WebCore/loader/FormSubmission.cpp&apos;, u&apos;Source/WebCore/platform/network/FormDataBuilder.cpp&apos;, u&apos;Source/WebCore/platform/network/FormDataBuilder.h&apos;, u&apos;Source/WebCore/rendering/RenderFullScreen.cpp&apos;, u&apos;Source/WebCore/rendering/RenderFullScreen.h&apos;, u&apos;Source/WebCore/rendering/svg/RenderSVGResourceContainer.h&apos;, u&apos;Source/WebCore/rendering/svg/RenderSVGTextPath.cpp&apos;, u&apos;Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp&apos;, u&apos;Source/WebCore/rendering/svg/SVGResources.cpp&apos;, u&apos;Source/WebCore/style/StyleResolveTree.cpp&apos;, u&apos;Source/WebCore/svg/SVGAltGlyphElement.cpp&apos;, u&apos;Source/WebCore/svg/SVGFEImageElement.cpp&apos;, u&apos;Source/WebCore/svg/SVGGlyphRefElement.cpp&apos;, u&apos;Source/WebCore/svg/SVGLinearGradientElement.cpp&apos;, u&apos;Source/WebCore/svg/SVGMPathElement.cpp&apos;, u&apos;Source/WebCore/svg/SVGPatternElement.cpp&apos;, u&apos;Source/WebCore/svg/SVGRadialGradientElement.cpp&apos;, u&apos;Source/WebCore/svg/SVGStyleElement.cpp&apos;, u&apos;Source/WebCore/svg/SVGStyleElement.h&apos;, u&apos;Source/WebCore/svg/SVGTRefElement.cpp&apos;, u&apos;Source/WebCore/svg/SVGTextPathElement.cpp&apos;, u&apos;Source/WebCore/svg/SVGURIReference.cpp&apos;, u&apos;Source/WebCore/svg/SVGURIReference.h&apos;, u&apos;Source/WebCore/svg/SVGUseElement.cpp&apos;, u&apos;Source/WebCore/svg/animation/SVGSMILElement.cpp&apos;, u&apos;Source/WebCore/svg/graphics/filters/SVGFEImage.cpp&apos;, u&apos;Source/WebCore/svg/graphics/filters/SVGFEImage.h&apos;, u&apos;Source/WebCore/testing/Internals.cpp&apos;, u&apos;Source/WebCore/testing/Internals.h&apos;, u&apos;Source/WebCore/testing/Internals.idl&apos;]&quot; exit_code: 1
Source/WebCore/ChangeLog:8:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Source/WebCore/dom/DocumentStyleSheetCollection.h:53:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/WebCore/dom/DocumentStyleSheetCollection.h:55:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/WebCore/dom/DocumentStyleSheetCollection.h:58:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/WebCore/dom/DocumentStyleSheetCollection.h:59:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/WebCore/dom/DocumentStyleSheetCollection.h:60:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/WebCore/dom/DocumentStyleSheetCollection.h:61:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Total errors found: 7 in 65 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932898</commentid>
    <comment_count>3</comment_count>
      <attachid>212537</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-09-24 23:00:20 -0700</bug_when>
    <thetext>Comment on attachment 212537
Patch

Attachment 212537 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/2190108</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932900</commentid>
    <comment_count>4</comment_count>
      <attachid>212537</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-24 23:13:59 -0700</bug_when>
    <thetext>Comment on attachment 212537
Patch

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

Creating library C:\cygwin\home\buildbot\WebKit\WebKitBuild\Release\lib32\WebKit.lib and object C:\cygwin\home\buildbot\WebKit\WebKitBuild\Release\lib32\WebKit.exp
     1&gt;WebKit.exp : error LNK2001: unresolved external symbol &quot;public: __thiscall WebCore::CSSParserContext::CSSParserContext(class WebCore::Document *,class WebCore::KURL const &amp;,class WTF::String const &amp;)&quot; (??0CSSParserContext@WebCore@@QAE@PAVDocument@1@ABVKURL@1@ABVString@WTF@@@Z)

&gt; Source/WebCore/testing/Internals.cpp:1652
&gt; -void Internals::insertAuthorCSS(Document* document, const String&amp; css) const
&gt; +void Internals::insertAuthorCSS(Document* document, const String&amp; css, ExceptionCode&amp; ec) const
&gt;  {
&gt; -    RefPtr&lt;StyleSheetContents&gt; parsedSheet = StyleSheetContents::create(document);
&gt; +    if (!document) {
&gt; +        ec = INVALID_ACCESS_ERR;
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    RefPtr&lt;StyleSheetContents&gt; parsedSheet = StyleSheetContents::create(*document);
&gt;      parsedSheet-&gt;setIsUserStyleSheet(false);
&gt;      parsedSheet-&gt;parseString(css);
&gt;      document-&gt;styleSheetCollection()-&gt;addAuthorSheet(parsedSheet);
&gt;  }
&gt;  
&gt; -void Internals::insertUserCSS(Document* document, const String&amp; css) const
&gt; +void Internals::insertUserCSS(Document* document, const String&amp; css, ExceptionCode&amp; ec) const
&gt;  {
&gt; -    RefPtr&lt;StyleSheetContents&gt; parsedSheet = StyleSheetContents::create(document);
&gt; +    if (!document) {
&gt; +        ec = INVALID_ACCESS_ERR;
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    RefPtr&lt;StyleSheetContents&gt; parsedSheet = StyleSheetContents::create(*document);

When can these be NULL? Do we have a test for this DOM exception? (At a glance, it seems like the old code didn&apos;t throw a DOM exception.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932997</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-25 07:31:34 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 212537 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=212537&amp;action=review
&gt; 
&gt; Creating library C:\cygwin\home\buildbot\WebKit\WebKitBuild\Release\lib32\WebKit.lib and object C:\cygwin\home\buildbot\WebKit\WebKitBuild\Release\lib32\WebKit.exp
&gt;      1&gt;WebKit.exp : error LNK2001: unresolved external symbol &quot;public: __thiscall WebCore::CSSParserContext::CSSParserContext(class WebCore::Document *,class WebCore::KURL const &amp;,class WTF::String const &amp;)&quot; (??0CSSParserContext@WebCore@@QAE@PAVDocument@1@ABVKURL@1@ABVString@WTF@@@Z)
&gt; 
&gt; &gt; Source/WebCore/testing/Internals.cpp:1652
&gt; &gt; -void Internals::insertAuthorCSS(Document* document, const String&amp; css) const
&gt; &gt; +void Internals::insertAuthorCSS(Document* document, const String&amp; css, ExceptionCode&amp; ec) const
&gt; &gt;  {
&gt; &gt; -    RefPtr&lt;StyleSheetContents&gt; parsedSheet = StyleSheetContents::create(document);
&gt; &gt; +    if (!document) {
&gt; &gt; +        ec = INVALID_ACCESS_ERR;
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    RefPtr&lt;StyleSheetContents&gt; parsedSheet = StyleSheetContents::create(*document);
&gt; &gt;      parsedSheet-&gt;setIsUserStyleSheet(false);
&gt; &gt;      parsedSheet-&gt;parseString(css);
&gt; &gt;      document-&gt;styleSheetCollection()-&gt;addAuthorSheet(parsedSheet);
&gt; &gt;  }
&gt; &gt;  
&gt; &gt; -void Internals::insertUserCSS(Document* document, const String&amp; css) const
&gt; &gt; +void Internals::insertUserCSS(Document* document, const String&amp; css, ExceptionCode&amp; ec) const
&gt; &gt;  {
&gt; &gt; -    RefPtr&lt;StyleSheetContents&gt; parsedSheet = StyleSheetContents::create(document);
&gt; &gt; +    if (!document) {
&gt; &gt; +        ec = INVALID_ACCESS_ERR;
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    RefPtr&lt;StyleSheetContents&gt; parsedSheet = StyleSheetContents::create(*document);
&gt; 
&gt; When can these be NULL? Do we have a test for this DOM exception? (At a glance, it seems like the old code didn&apos;t throw a DOM exception.)

This can be null if in a layout test you do window.internals.insertAuthorCSS(null).  All the other Internals functions that take a document also check for null, so this makes it consistent.  I don&apos;t see a good reason to add a test for the function we use only for testing :(.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933105</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-25 11:08:34 -0700</bug_when>
    <thetext>Committed r156408: &lt;http://trac.webkit.org/changeset/156408&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212537</attachid>
            <date>2013-09-24 22:16:30 -0700</date>
            <delta_ts>2013-09-25 10:09:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121893-20130924221629.patch</filename>
            <type>text/plain</type>
            <size>111680</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjM4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEzLTA5LTI0ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogTW9yZSBEb2N1bWVudCByZWZl
cmVuY2VzIHBsZWFzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTIxODkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBUaHJlYWQgZXZlbiBtb3JlIERvY3VtZW50JnMgYXJvdW5kLiAqCisKIDIwMTMtMDkt
MjQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ3Jhc2ggaW4g
RG9jdW1lbnQ6OnNldEZvY3VzZWRFbGVtZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2
aXNpb24gMTU2MzgyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTUwNyw3ICs1MDcsNyBAQCBfX1pON1dlYkNvcmUxNXZpc2l0ZWRMaW5rSGFzaEVQ
S3RqCiBfX1pON1dlYkNvcmUxNXZpc2l0ZWRMaW5rSGFzaEVSS04zV1RGNlN0cmluZ0UKIF9fWk43
V2ViQ29yZTE2QXBwbGljYXRpb25DYWNoZTE4ZGlza1VzYWdlRm9yT3JpZ2luRVBOU18xNFNlY3Vy
aXR5T3JpZ2luRQogX19aTjdXZWJDb3JlMTZBcHBsaWNhdGlvbkNhY2hlMjBkZWxldGVDYWNoZUZv
ck9yaWdpbkVQTlNfMTRTZWN1cml0eU9yaWdpbkUKLV9fWk43V2ViQ29yZTE2Q1NTUGFyc2VyQ29u
dGV4dEMxRVBOU184RG9jdW1lbnRFUktOU180S1VSTEVSS04zV1RGNlN0cmluZ0UKK19fWk43V2Vi
Q29yZTE2Q1NTUGFyc2VyQ29udGV4dEMxRVJOU184RG9jdW1lbnRFUktOU180S1VSTEVSS04zV1RG
NlN0cmluZ0UKIF9fWk43V2ViQ29yZTE2RGF0YWJhc2VTdHJhdGVneTE3Z2V0RGF0YWJhc2VTZXJ2
ZXJFdgogX19aTjdXZWJDb3JlMTZEZXZpY2VNb3Rpb25EYXRhMTJBY2NlbGVyYXRpb242Y3JlYXRl
RWJkYmRiZAogX19aTjdXZWJDb3JlMTZEZXZpY2VNb3Rpb25EYXRhMTJSb3RhdGlvblJhdGU2Y3Jl
YXRlRWJkYmRiZApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVl
LmNwcAkocmV2aXNpb24gMTU2MzgyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvcklt
YWdlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoU1ZHKQotc3RhdGljIGlubGluZSBTVkdDdXJzb3JFbGVt
ZW50KiByZXNvdXJjZVJlZmVyZW5jZWRCeUN1cnNvckVsZW1lbnQoY29uc3QgU3RyaW5nJiB1cmws
IERvY3VtZW50KiBkb2N1bWVudCkKK3N0YXRpYyBpbmxpbmUgU1ZHQ3Vyc29yRWxlbWVudCogcmVz
b3VyY2VSZWZlcmVuY2VkQnlDdXJzb3JFbGVtZW50KGNvbnN0IFN0cmluZyYgdXJsLCBEb2N1bWVu
dCYgZG9jdW1lbnQpCiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IFNWR1VSSVJlZmVyZW5jZTo6
dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcodXJsLCBkb2N1bWVudCk7CiAgICAgaWYgKGVsZW1l
bnQgJiYgaXNTVkdDdXJzb3JFbGVtZW50KGVsZW1lbnQpKQpAQCAtODAsNyArODAsNyBAQCBDU1ND
dXJzb3JJbWFnZVZhbHVlOjp+Q1NTQ3Vyc29ySW1hZ2VWYWx1CiAgICAgZm9yICg7IGl0ICE9IGVu
ZDsgKytpdCkgewogICAgICAgICBTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCA9ICppdDsK
ICAgICAgICAgcmVmZXJlbmNlZEVsZW1lbnQtPmN1cnNvckltYWdlVmFsdWVSZW1vdmVkKCk7Ci0g
ICAgICAgIGlmIChTVkdDdXJzb3JFbGVtZW50KiBjdXJzb3JFbGVtZW50ID0gcmVzb3VyY2VSZWZl
cmVuY2VkQnlDdXJzb3JFbGVtZW50KHVybCwgJnJlZmVyZW5jZWRFbGVtZW50LT5kb2N1bWVudCgp
KSkKKyAgICAgICAgaWYgKFNWR0N1cnNvckVsZW1lbnQqIGN1cnNvckVsZW1lbnQgPSByZXNvdXJj
ZVJlZmVyZW5jZWRCeUN1cnNvckVsZW1lbnQodXJsLCByZWZlcmVuY2VkRWxlbWVudC0+ZG9jdW1l
bnQoKSkpCiAgICAgICAgICAgICBjdXJzb3JFbGVtZW50LT5yZW1vdmVDbGllbnQocmVmZXJlbmNl
ZEVsZW1lbnQpOwogICAgIH0KICNlbmRpZgpAQCAtMTExLDcgKzExMSw3IEBAIGJvb2wgQ1NTQ3Vy
c29ySW1hZ2VWYWx1ZTo6dXBkYXRlSWZTVkdDdXIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgU3RyaW5nIHVybCA9IHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPihtX2ltYWdlVmFsdWUu
Z2V0KCkpLT51cmwoKTsKLSAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVudCogY3Vyc29yRWxlbWVudCA9
IHJlc291cmNlUmVmZXJlbmNlZEJ5Q3Vyc29yRWxlbWVudCh1cmwsICZlbGVtZW50LT5kb2N1bWVu
dCgpKSkgeworICAgIGlmIChTVkdDdXJzb3JFbGVtZW50KiBjdXJzb3JFbGVtZW50ID0gcmVzb3Vy
Y2VSZWZlcmVuY2VkQnlDdXJzb3JFbGVtZW50KHVybCwgZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsK
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBvdmVycmlkZSBob3Qgc3BvdCBzcGVjaWZpZWQg
aW4gQ1NTLCB3aGljaCBpcyBwcm9iYWJseSBpbmNvcnJlY3QuCiAgICAgICAgIFNWR0xlbmd0aENv
bnRleHQgbGVuZ3RoQ29udGV4dCgwKTsKICAgICAgICAgbV9oYXNIb3RTcG90ID0gdHJ1ZTsKQEAg
LTE1Miw3ICsxNTIsNyBAQCBTdHlsZUltYWdlKiBDU1NDdXJzb3JJbWFnZVZhbHVlOjpjYWNoZWRJ
CiAgICAgICAgIGlmIChpc1NWR0N1cnNvcigpICYmIGxvYWRlciAmJiBsb2FkZXItPmRvY3VtZW50
KCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NJbWFnZVZhbHVlPiBpbWFnZVZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KG1faW1hZ2VWYWx1ZS5nZXQoKSk7CiAgICAgICAgICAg
ICAvLyBGSVhNRTogVGhpcyB3aWxsIGZhaWwgaWYgdGhlIDxjdXJzb3I+IGVsZW1lbnQgaXMgaW4g
YSBzaGFkb3cgRE9NIChidWcgNTk4MjcpCi0gICAgICAgICAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVu
dCogY3Vyc29yRWxlbWVudCA9IHJlc291cmNlUmVmZXJlbmNlZEJ5Q3Vyc29yRWxlbWVudChpbWFn
ZVZhbHVlLT51cmwoKSwgbG9hZGVyLT5kb2N1bWVudCgpKSkgeworICAgICAgICAgICAgaWYgKFNW
R0N1cnNvckVsZW1lbnQqIGN1cnNvckVsZW1lbnQgPSByZXNvdXJjZVJlZmVyZW5jZWRCeUN1cnNv
ckVsZW1lbnQoaW1hZ2VWYWx1ZS0+dXJsKCksICpsb2FkZXItPmRvY3VtZW50KCkpKSB7CiAgICAg
ICAgICAgICAgICAgUmVmUHRyPENTU0ltYWdlVmFsdWU+IHN2Z0ltYWdlVmFsdWUgPSBDU1NJbWFn
ZVZhbHVlOjpjcmVhdGUoY3Vyc29yRWxlbWVudC0+aHJlZigpKTsKICAgICAgICAgICAgICAgICBT
dHlsZUNhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHN2Z0ltYWdlVmFsdWUtPmNhY2hlZEltYWdl
KGxvYWRlcik7CiAgICAgICAgICAgICAgICAgbV9pbWFnZSA9IGNhY2hlZEltYWdlOwpAQCAtMTcx
LDcgKzE3MSw3IEBAIFN0eWxlSW1hZ2UqIENTU0N1cnNvckltYWdlVmFsdWU6OmNhY2hlZEkKICAg
ICByZXR1cm4gMDsKIH0KIAotU3R5bGVJbWFnZSogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6Y2FjaGVk
T3JQZW5kaW5nSW1hZ2UoRG9jdW1lbnQqIGRvY3VtZW50KQorU3R5bGVJbWFnZSogQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZTo6Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoRG9jdW1lbnQmIGRvY3VtZW50KQogewog
I2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQogICAgIC8vIE5lZWQgdG8gZGVsZWdhdGUgY29tcGxl
dGVseSBzbyB0aGF0IGNoYW5nZXMgaW4gZGV2aWNlIHNjYWxlIGZhY3RvciBjYW4gYmUgaGFuZGxl
ZCBhcHByb3ByaWF0ZWx5LgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdl
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZS5oCShyZXZpc2lvbiAxNTYzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgdXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQoRWxlbWVudCopOwogICAgIFN0eWxlSW1h
Z2UqIGNhY2hlZEltYWdlKENhY2hlZFJlc291cmNlTG9hZGVyKik7Ci0gICAgU3R5bGVJbWFnZSog
Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoRG9jdW1lbnQqKTsKKyAgICBTdHlsZUltYWdlKiBjYWNoZWRP
clBlbmRpbmdJbWFnZShEb2N1bWVudCYpOwogCiAjaWYgRU5BQkxFKFNWRykKICAgICB2b2lkIHJl
bW92ZVJlZmVyZW5jZWRFbGVtZW50KFNWR0VsZW1lbnQqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NJbWFnZVNldFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAJKHJldmlzaW9uIDE1NjM4MikKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NJbWFnZVNldFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDEzICsx
MjIsMTMgQEAgU3R5bGVDYWNoZWRJbWFnZVNldCogQ1NTSW1hZ2VTZXRWYWx1ZTo6YwogICAgIHJl
dHVybiAobV9pbWFnZVNldCAmJiBtX2ltYWdlU2V0LT5pc0NhY2hlZEltYWdlU2V0KCkpID8gc3Rh
dGljX2Nhc3Q8U3R5bGVDYWNoZWRJbWFnZVNldCo+KG1faW1hZ2VTZXQuZ2V0KCkpIDogMDsKIH0K
IAotU3R5bGVJbWFnZSogQ1NTSW1hZ2VTZXRWYWx1ZTo6Y2FjaGVkT3JQZW5kaW5nSW1hZ2VTZXQo
RG9jdW1lbnQqIGRvY3VtZW50KQorU3R5bGVJbWFnZSogQ1NTSW1hZ2VTZXRWYWx1ZTo6Y2FjaGVk
T3JQZW5kaW5nSW1hZ2VTZXQoRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIGlmICghbV9pbWFn
ZVNldCkKICAgICAgICAgbV9pbWFnZVNldCA9IFN0eWxlUGVuZGluZ0ltYWdlOjpjcmVhdGUodGhp
cyk7Ci0gICAgZWxzZSBpZiAoZG9jdW1lbnQgJiYgIW1faW1hZ2VTZXQtPmlzUGVuZGluZ0ltYWdl
KCkpIHsKKyAgICBlbHNlIGlmICghbV9pbWFnZVNldC0+aXNQZW5kaW5nSW1hZ2UoKSkgewogICAg
ICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IDE7Ci0gICAgICAgIGlmIChQYWdlKiBwYWdl
ID0gZG9jdW1lbnQtPnBhZ2UoKSkKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC5w
YWdlKCkpCiAgICAgICAgICAgICBkZXZpY2VTY2FsZUZhY3RvciA9IHBhZ2UtPmRldmljZVNjYWxl
RmFjdG9yKCk7CiAKICAgICAgICAgLy8gSWYgdGhlIGRldmljZVNjYWxlRmFjdG9yIGhhcyBjaGFu
Z2VkLCB3ZSBtYXkgbm90IGhhdmUgdGhlIGJlc3QgaW1hZ2UgbG9hZGVkLCBzbyB3ZSBoYXZlIHRv
IHJlLWFzc2Vzcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuaAkocmV2
aXNpb24gMTU2MzgyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgU3R5bGVDYWNoZWRJ
bWFnZVNldCogY2FjaGVkSW1hZ2VTZXQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqKTsKIAogICAgIC8v
IFJldHVybnMgYSBTdHlsZUNhY2hlZEltYWdlU2V0IGlmIHRoZSBiZXN0IGZpdCBpbWFnZSBoYXMg
YmVlbiBjYWNoZWQgYWxyZWFkeSwgb3RoZXJ3aXNlIGEgU3R5bGVQZW5kaW5nSW1hZ2UuCi0gICAg
U3R5bGVJbWFnZSogY2FjaGVkT3JQZW5kaW5nSW1hZ2VTZXQoRG9jdW1lbnQqKTsKKyAgICBTdHls
ZUltYWdlKiBjYWNoZWRPclBlbmRpbmdJbWFnZVNldChEb2N1bWVudCYpOwogCiAgICAgU3RyaW5n
IGN1c3RvbUNTU1RleHQoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJ
KHJldmlzaW9uIDE1NjM4MikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzIsMjIgKzI3MiwyMiBAQCBDU1NQYXJzZXJDb250ZXh0OjpDU1NQ
YXJzZXJDb250ZXh0KENTU1BhCiB7CiB9CiAKLUNTU1BhcnNlckNvbnRleHQ6OkNTU1BhcnNlckNv
bnRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBTdHJp
bmcmIGNoYXJzZXQpCi0gICAgOiBiYXNlVVJMKGJhc2VVUkwuaXNOdWxsKCkgPyBkb2N1bWVudC0+
YmFzZVVSTCgpIDogYmFzZVVSTCkKK0NTU1BhcnNlckNvbnRleHQ6OkNTU1BhcnNlckNvbnRleHQo
RG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBTdHJpbmcmIGNo
YXJzZXQpCisgICAgOiBiYXNlVVJMKGJhc2VVUkwuaXNOdWxsKCkgPyBkb2N1bWVudC5iYXNlVVJM
KCkgOiBiYXNlVVJMKQogICAgICwgY2hhcnNldChjaGFyc2V0KQotICAgICwgbW9kZShkb2N1bWVu
dC0+aW5RdWlya3NNb2RlKCkgPyBDU1NRdWlya3NNb2RlIDogQ1NTU3RyaWN0TW9kZSkKLSAgICAs
IGlzSFRNTERvY3VtZW50KGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKQotICAgICwgaXNDU1ND
dXN0b21GaWx0ZXJFbmFibGVkKGRvY3VtZW50LT5zZXR0aW5ncygpID8gZG9jdW1lbnQtPnNldHRp
bmdzKCktPmlzQ1NTQ3VzdG9tRmlsdGVyRW5hYmxlZCgpIDogZmFsc2UpCi0gICAgLCBpc0NTU1N0
aWNreVBvc2l0aW9uRW5hYmxlZChkb2N1bWVudC0+Y3NzU3RpY2t5UG9zaXRpb25FbmFibGVkKCkp
Ci0gICAgLCBpc0NTU1JlZ2lvbnNFbmFibGVkKGRvY3VtZW50LT5jc3NSZWdpb25zRW5hYmxlZCgp
KQotICAgICwgaXNDU1NDb21wb3NpdGluZ0VuYWJsZWQoZG9jdW1lbnQtPmNzc0NvbXBvc2l0aW5n
RW5hYmxlZCgpKQotICAgICwgaXNDU1NHcmlkTGF5b3V0RW5hYmxlZChkb2N1bWVudC0+Y3NzR3Jp
ZExheW91dEVuYWJsZWQoKSkKKyAgICAsIG1vZGUoZG9jdW1lbnQuaW5RdWlya3NNb2RlKCkgPyBD
U1NRdWlya3NNb2RlIDogQ1NTU3RyaWN0TW9kZSkKKyAgICAsIGlzSFRNTERvY3VtZW50KGRvY3Vt
ZW50LmlzSFRNTERvY3VtZW50KCkpCisgICAgLCBpc0NTU0N1c3RvbUZpbHRlckVuYWJsZWQoZG9j
dW1lbnQuc2V0dGluZ3MoKSA/IGRvY3VtZW50LnNldHRpbmdzKCktPmlzQ1NTQ3VzdG9tRmlsdGVy
RW5hYmxlZCgpIDogZmFsc2UpCisgICAgLCBpc0NTU1N0aWNreVBvc2l0aW9uRW5hYmxlZChkb2N1
bWVudC5jc3NTdGlja3lQb3NpdGlvbkVuYWJsZWQoKSkKKyAgICAsIGlzQ1NTUmVnaW9uc0VuYWJs
ZWQoZG9jdW1lbnQuY3NzUmVnaW9uc0VuYWJsZWQoKSkKKyAgICAsIGlzQ1NTQ29tcG9zaXRpbmdF
bmFibGVkKGRvY3VtZW50LmNzc0NvbXBvc2l0aW5nRW5hYmxlZCgpKQorICAgICwgaXNDU1NHcmlk
TGF5b3V0RW5hYmxlZChkb2N1bWVudC5jc3NHcmlkTGF5b3V0RW5hYmxlZCgpKQogI2lmIEVOQUJM
RShDU1NfVkFSSUFCTEVTKQotICAgICwgaXNDU1NWYXJpYWJsZXNFbmFibGVkKGRvY3VtZW50LT5z
ZXR0aW5ncygpID8gZG9jdW1lbnQtPnNldHRpbmdzKCktPmNzc1ZhcmlhYmxlc0VuYWJsZWQoKSA6
IGZhbHNlKQorICAgICwgaXNDU1NWYXJpYWJsZXNFbmFibGVkKGRvY3VtZW50LnNldHRpbmdzKCkg
PyBkb2N1bWVudC5zZXR0aW5ncygpLT5jc3NWYXJpYWJsZXNFbmFibGVkKCkgOiBmYWxzZSkKICNl
bmRpZgotICAgICwgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoZG9jdW1lbnQtPnNldHRpbmdzKCkg
PyBkb2N1bWVudC0+c2V0dGluZ3MoKS0+bmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKSA6IGZhbHNl
KQotICAgICwgZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlKCFkb2N1bWVudC0+c2V0
dGluZ3MoKSB8fCBkb2N1bWVudC0+c2V0dGluZ3MoKS0+ZW5mb3JjZUNTU01JTUVUeXBlSW5Ob1F1
aXJrc01vZGUoKSkKLSAgICAsIHVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZp
b3IoZG9jdW1lbnQtPnNldHRpbmdzKCkgPyBkb2N1bWVudC0+c2V0dGluZ3MoKS0+dXNlTGVnYWN5
QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvcigpIDogZmFsc2UpCisgICAgLCBuZWVkc1Np
dGVTcGVjaWZpY1F1aXJrcyhkb2N1bWVudC5zZXR0aW5ncygpID8gZG9jdW1lbnQuc2V0dGluZ3Mo
KS0+bmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKSA6IGZhbHNlKQorICAgICwgZW5mb3JjZXNDU1NN
SU1FVHlwZUluTm9RdWlya3NNb2RlKCFkb2N1bWVudC5zZXR0aW5ncygpIHx8IGRvY3VtZW50LnNl
dHRpbmdzKCktPmVuZm9yY2VDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlKCkpCisgICAgLCB1c2VM
ZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2aW9yKGRvY3VtZW50LnNldHRpbmdzKCkg
PyBkb2N1bWVudC5zZXR0aW5ncygpLT51c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJl
aGF2aW9yKCkgOiBmYWxzZSkKIHsKIH0KIApAQCAtMTMwNSw3ICsxMzA1LDcgQEAgUGFzc1JlZlB0
cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFycwogfQogCiAjaWYgRU5BQkxFKENTU19WQVJJ
QUJMRVMpCi1ib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0eVNl
dCogZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBz
dHJpbmcsIGJvb2wgaW1wb3J0YW50LCBEb2N1bWVudCogZG9jdW1lbnQpCitib29sIENTU1BhcnNl
cjo6cGFyc2VWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50
LCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJUKCFzdHJpbmcuaXNFbXB0eSgpKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAkocmV2aXNpb24gMTU2MzgyKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDcg
QEAgcHVibGljOgogICAgIGJvb2wgcGFyc2VRdW90ZXMoQ1NTUHJvcGVydHlJRCwgYm9vbCBpbXBv
cnRhbnQpOwogCiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCi0gICAgc3RhdGljIGJvb2wgcGFy
c2VWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCosIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0
cmluZyYsIGJvb2wgaW1wb3J0YW50LCBEb2N1bWVudCopOworICAgIHN0YXRpYyBib29sIHBhcnNl
VmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQqLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJp
bmcmLCBib29sIGltcG9ydGFudCwgRG9jdW1lbnQmKTsKICAgICBib29sIGNzc1ZhcmlhYmxlc0Vu
YWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHN0b3JlVmFyaWFibGVEZWNsYXJhdGlvbihjb25zdCBD
U1NQYXJzZXJTdHJpbmcmLCBQYXNzT3duUHRyPENTU1BhcnNlclZhbHVlTGlzdD4sIGJvb2wgaW1w
b3J0YW50KTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlck1vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyTW9kZS5oCShyZXZp
c2lvbiAxNTYzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyTW9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHN0cnVjdCBDU1NQYXJzZXJDb250ZXh0IHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBDU1NQYXJzZXJDb250ZXh0
KENTU1BhcnNlck1vZGUsIGNvbnN0IEtVUkwmIGJhc2VVUkwgPSBLVVJMKCkpOwotICAgIENTU1Bh
cnNlckNvbnRleHQoRG9jdW1lbnQqLCBjb25zdCBLVVJMJiBiYXNlVVJMID0gS1VSTCgpLCBjb25z
dCBTdHJpbmcmIGNoYXJzZXQgPSBlbXB0eVN0cmluZygpKTsKKyAgICBDU1NQYXJzZXJDb250ZXh0
KERvY3VtZW50JiwgY29uc3QgS1VSTCYgYmFzZVVSTCA9IEtVUkwoKSwgY29uc3QgU3RyaW5nJiBj
aGFyc2V0ID0gZW1wdHlTdHJpbmcoKSk7CiAKICAgICBLVVJMIGJhc2VVUkw7CiAgICAgU3RyaW5n
IGNoYXJzZXQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCShyZXZpc2lv
biAxNTYzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDExICs4NCwxMSBAQCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IENT
U1N0eWxlU2hlZXQ6CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNoZWV0KHNoZWV0
LCBvd25lck5vZGUsIGZhbHNlKSk7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gQ1NT
U3R5bGVTaGVldDo6Y3JlYXRlSW5saW5lKE5vZGUqIG93bmVyTm9kZSwgY29uc3QgS1VSTCYgYmFz
ZVVSTCwgY29uc3QgU3RyaW5nJiBlbmNvZGluZykKK1Bhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4g
Q1NTU3R5bGVTaGVldDo6Y3JlYXRlSW5saW5lKE5vZGUmIG93bmVyTm9kZSwgY29uc3QgS1VSTCYg
YmFzZVVSTCwgY29uc3QgU3RyaW5nJiBlbmNvZGluZykKIHsKLSAgICBDU1NQYXJzZXJDb250ZXh0
IHBhcnNlckNvbnRleHQoJm93bmVyTm9kZS0+ZG9jdW1lbnQoKSwgYmFzZVVSTCwgZW5jb2Rpbmcp
OworICAgIENTU1BhcnNlckNvbnRleHQgcGFyc2VyQ29udGV4dChvd25lck5vZGUuZG9jdW1lbnQo
KSwgYmFzZVVSTCwgZW5jb2RpbmcpOwogICAgIFJlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IHNo
ZWV0ID0gU3R5bGVTaGVldENvbnRlbnRzOjpjcmVhdGUoYmFzZVVSTC5zdHJpbmcoKSwgcGFyc2Vy
Q29udGV4dCk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNoZWV0KHNoZWV0LnJl
bGVhc2UoKSwgb3duZXJOb2RlLCB0cnVlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NT
dHlsZVNoZWV0KHNoZWV0LnJlbGVhc2UoKSwgJm93bmVyTm9kZSwgdHJ1ZSkpOwogfQogCiBDU1NT
dHlsZVNoZWV0OjpDU1NTdHlsZVNoZWV0KFBhc3NSZWZQdHI8U3R5bGVTaGVldENvbnRlbnRzPiBj
b250ZW50cywgQ1NTSW1wb3J0UnVsZSogb3duZXJSdWxlKQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2hlZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTaGVldC5oCShyZXZpc2lvbiAxNTYzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTaGVldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIENTU1N0
eWxlU2hlZXQgRklOQUwgOiBwdWJsaWMgU3R5bGUKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGUoUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+
LCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUgPSAwKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
U1NTdHlsZVNoZWV0PiBjcmVhdGUoUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+LCBOb2Rl
KiBvd25lck5vZGUpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IGNyZWF0
ZUlubGluZShOb2RlKiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcgPSBTdHJp
bmcoKSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gY3JlYXRlSW5saW5l
KE5vZGUmLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBlbmNvZGluZyA9IFN0cmluZygpKTsK
IAogICAgIHZpcnR1YWwgfkNTU1N0eWxlU2hlZXQoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gMTU2MzgyKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjQsNyArMzY0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTUwog
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAg
ICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAg
ICAgICAgICBzdmdzdHlsZS0+c2V0TWFya2VyU3RhcnRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6
OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgJnN0YXRlLmRvY3VtZW50KCkpKTsK
KyAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXJrZXJTdGFydFJlc291cmNlKFNWR1VSSVJlZmVy
ZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5TWFya2VyTWlkOgpAQCAtMzc4LDcgKzM3OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlTVkdQcm9wZXJ0eShDU1MKICAgICAgICAgICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3Ry
aW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hcmtlck1pZFJlc291cmNl
KFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCAmc3Rh
dGUuZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hcmtlck1pZFJlc291
cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBz
dGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5TWFya2VyRW5kOgpAQCAtMzkyLDcgKzM5Miw3IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1MKICAgICAgICAgICAgIGlmICh0eXBlID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmltaXRp
dmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1h
cmtlckVuZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlS
SVN0cmluZyhzLCAmc3RhdGUuZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dE1hcmtlckVuZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJv
bUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlTGluZWNhcDoKQEAgLTQyOSw3
ICs0MjksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTCiAgICAg
ICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAg
ICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAg
ICAgIHN2Z3N0eWxlLT5zZXRGaWx0ZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50
SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgJnN0YXRlLmRvY3VtZW50KCkpKTsKKyAgICAgICAg
ICAgIHN2Z3N0eWxlLT5zZXRGaWx0ZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50
SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZG9jdW1lbnQoKSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hc2s6CkBAIC00
NDMsNyArNDQzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTUwog
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAg
ICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAg
ICAgICAgICBzdmdzdHlsZS0+c2V0TWFza2VyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFn
bWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsICZzdGF0ZS5kb2N1bWVudCgpKSk7CisgICAg
ICAgICAgICBzdmdzdHlsZS0+c2V0TWFza2VyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFn
bWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50KCkpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDbGlwUGF0
aDoKQEAgLTQ1Nyw3ICs0NTcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVy
dHkoQ1NTCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VS
SSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7
CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRDbGlwcGVyUmVzb3VyY2UoU1ZHVVJJUmVmZXJl
bmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsICZzdGF0ZS5kb2N1bWVudCgp
KSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0Q2xpcHBlclJlc291cmNlKFNWR1VSSVJlZmVy
ZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5VGV4dEFuY2hvcjoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJl
dmlzaW9uIDE1NjM4MikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjA2OSw3ICsyMDY5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpy
ZXNvbHZlVmFyaWFibGVzKENTUwogCiAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIGZhc3RlciBu
b3QgdG8gcmUtcGFyc2UgZnJvbSBzdHJpbmdzLCBidXQgZm9yIG5vdyBDU1MgcHJvcGVydHkgdmFs
aWRhdGlvbiBsaXZlcyBpbnNpZGUgdGhlIHBhcnNlciBzbyB3ZSBkbyBpdCB0aGVyZS4KICAgICBS
ZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IHJlc3VsdFNldCA9IE11dGFibGVTdHlsZVBy
b3BlcnR5U2V0OjpjcmVhdGUoKTsKLSAgICBpZiAoIUNTU1BhcnNlcjo6cGFyc2VWYWx1ZShyZXN1
bHRTZXQuZ2V0KCksIGlkLCBleHByZXNzaW9uLnNlY29uZCwgZmFsc2UsICZkb2N1bWVudCgpKSkK
KyAgICBpZiAoIUNTU1BhcnNlcjo6cGFyc2VWYWx1ZShyZXN1bHRTZXQuZ2V0KCksIGlkLCBleHBy
ZXNzaW9uLnNlY29uZCwgZmFsc2UsIGRvY3VtZW50KCkpKQogICAgICAgICByZXR1cm47IC8vIGV4
cHJlc3Npb24gZmFpbGVkIHRvIHBhcnNlLgogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlc3VsdFNldC0+cHJvcGVydHlDb3VudCgpOyBpKyspIHsKQEAgLTMxMzgsNyArMzEzOCw3IEBA
IFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Z2UKICNpZiBFTkFCTEUoQ1NT
X0lNQUdFX1NFVCkKIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c2V0T3JQ
ZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlU2V0VmFsdWUq
IHZhbHVlKQogewotICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRP
clBlbmRpbmdJbWFnZVNldCgmZG9jdW1lbnQoKSk7CisgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGlt
YWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KCkpOwogICAgIGlm
IChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKICAgICAgICAgbV9zdGF0ZS5wZW5k
aW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgcmV0dXJuIGlt
YWdlLnJlbGVhc2UoKTsKQEAgLTMxNDcsNyArMzE0Nyw3IEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFn
ZT4gU3R5bGVSZXNvbHZlcjo6c2UKIAogUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29s
dmVyOjpjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NT
Q3Vyc29ySW1hZ2VWYWx1ZSogdmFsdWUpCiB7Ci0gICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdl
ID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKCZkb2N1bWVudCgpKTsKKyAgICBSZWZQdHI8
U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoZG9jdW1lbnQo
KSk7CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQogICAgICAgICBt
X3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAg
ICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwpAQCAtMzc4Myw3ICszNzgzLDcgQEAgYm9vbCBTdHls
ZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpbwogICAgICAgICAgICAgS1VSTCB1cmwgPSBt
X3N0YXRlLmRvY3VtZW50KCkuY29tcGxldGVVUkwoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCkpOwog
CiAgICAgICAgICAgICBSZWZQdHI8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPiBvcGVyYXRpb24g
PSBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShzdmdEb2N1bWVudFZhbHVlLT51cmwo
KSwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpLCBvcGVyYXRpb25UeXBlKTsKLSAgICAgICAgICAg
IGlmIChTVkdVUklSZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRW
YWx1ZS0+dXJsKCksICZtX3N0YXRlLmRvY3VtZW50KCkpKSB7CisgICAgICAgICAgICBpZiAoU1ZH
VVJJUmVmZXJlbmNlOjppc0V4dGVybmFsVVJJUmVmZXJlbmNlKHN2Z0RvY3VtZW50VmFsdWUtPnVy
bCgpLCBtX3N0YXRlLmRvY3VtZW50KCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFzdmdEb2N1
bWVudFZhbHVlLT5sb2FkUmVxdWVzdGVkKCkpCiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUu
cGVuZGluZ1NWR0RvY3VtZW50cygpLnNldChvcGVyYXRpb24uZ2V0KCksIHN2Z0RvY3VtZW50VmFs
dWUpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN2Z0RvY3VtZW50VmFsdWUtPmNhY2hlZFNW
R0RvY3VtZW50KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE1NjM4
MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyMiw3ICs0MjIsNyBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBL
CiAgICAgLCBtX2RvbVRyZWVWZXJzaW9uKCsrc19nbG9iYWxUcmVlVmVyc2lvbikKICAgICAsIG1f
bGlzdGVuZXJUeXBlcygwKQogICAgICwgbV9tdXRhdGlvbk9ic2VydmVyVHlwZXMoMCkKLSAgICAs
IG1fc3R5bGVTaGVldENvbGxlY3Rpb24oRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6Y3Jl
YXRlKHRoaXMpKQorICAgICwgbV9zdHlsZVNoZWV0Q29sbGVjdGlvbihEb2N1bWVudFN0eWxlU2hl
ZXRDb2xsZWN0aW9uOjpjcmVhdGUoKnRoaXMpKQogICAgICwgbV92aXNpdGVkTGlua1N0YXRlKFZp
c2l0ZWRMaW5rU3RhdGU6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fdmlzdWFsbHlPcmRlcmVkKGZh
bHNlKQogICAgICwgbV9yZWFkeVN0YXRlKENvbXBsZXRlKQpAQCAtMjY2Myw3ICsyNjYzLDcgQEAg
dm9pZCBEb2N1bWVudDo6dXBkYXRlQmFzZVVSTCgpCiAgICAgICAgIC8vIEVsZW1lbnQgc2hlZXQg
aXMgc2lsbHkuIEl0IG5ldmVyIGNvbnRhaW5zIGFueXRoaW5nLgogICAgICAgICBBU1NFUlQoIW1f
ZWxlbWVudFNoZWV0LT5jb250ZW50cygpLT5ydWxlQ291bnQoKSk7CiAgICAgICAgIGJvb2wgdXNl
c1JlbVVuaXRzID0gbV9lbGVtZW50U2hlZXQtPmNvbnRlbnRzKCktPnVzZXNSZW1Vbml0cygpOwot
ICAgICAgICBtX2VsZW1lbnRTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGluZSh0aGlz
LCBtX2Jhc2VVUkwpOworICAgICAgICBtX2VsZW1lbnRTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNy
ZWF0ZUlubGluZSgqdGhpcywgbV9iYXNlVVJMKTsKICAgICAgICAgLy8gRklYTUU6IFNvIHdlIGFy
ZSBub3QgcmVhbGx5IHRoZSBwYXJzZXIuIFRoZSByaWdodCBmaXggaXMgdG8gZWxpbWluYXRlIHRo
ZSBlbGVtZW50IHNoZWV0IGNvbXBsZXRlbHkuCiAgICAgICAgIG1fZWxlbWVudFNoZWV0LT5jb250
ZW50cygpLT5wYXJzZXJTZXRVc2VzUmVtVW5pdHModXNlc1JlbVVuaXRzKTsKICAgICB9CkBAIC0y
ODI5LDcgKzI4MjksNyBAQCB2b2lkIERvY3VtZW50OjpkaWRSZW1vdmVBbGxQZW5kaW5nU3R5bGVz
CiBDU1NTdHlsZVNoZWV0JiBEb2N1bWVudDo6ZWxlbWVudFNoZWV0KCkKIHsKICAgICBpZiAoIW1f
ZWxlbWVudFNoZWV0KQotICAgICAgICBtX2VsZW1lbnRTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNy
ZWF0ZUlubGluZSh0aGlzLCBtX2Jhc2VVUkwpOworICAgICAgICBtX2VsZW1lbnRTaGVldCA9IENT
U1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGluZSgqdGhpcywgbV9iYXNlVVJMKTsKICAgICByZXR1cm4g
Km1fZWxlbWVudFNoZWV0OwogfQogCkBAIC01MjkxLDcgKzUyOTEsNyBAQCB2b2lkIERvY3VtZW50
Ojp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuCiAgICAgfQogCiAgICAgaWYgKG1fZnVsbFNjcmVl
bkVsZW1lbnQgIT0gZG9jdW1lbnRFbGVtZW50KCkpCi0gICAgICAgIFJlbmRlckZ1bGxTY3JlZW46
OndyYXBSZW5kZXJlcihyZW5kZXJlciwgcmVuZGVyZXIgPyByZW5kZXJlci0+cGFyZW50KCkgOiAw
LCB0aGlzKTsKKyAgICAgICAgUmVuZGVyRnVsbFNjcmVlbjo6d3JhcFJlbmRlcmVyKHJlbmRlcmVy
LCByZW5kZXJlciA/IHJlbmRlcmVyLT5wYXJlbnQoKSA6IDAsICp0aGlzKTsKIAogICAgIG1fZnVs
bFNjcmVlbkVsZW1lbnQtPnNldENvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnRPbkFuY2VzdG9yc0Ny
b3NzaW5nRnJhbWVCb3VuZGFyaWVzKHRydWUpOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24g
MTU2MzgyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotRG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbjo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbihEb2N1bWVudCogZG9jdW1lbnQp
CitEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0
aW9uKERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAg
LCBtX3BlbmRpbmdTdHlsZXNoZWV0cygwKQogICAgICwgbV9pbmplY3RlZFN0eWxlU2hlZXRDYWNo
ZVZhbGlkKGZhbHNlKQpAQCAtODUsNyArODUsNyBAQCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0
aW9uOjp+RG9jdW1lbnRTCiB2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmNvbWJp
bmVDU1NGZWF0dXJlRmxhZ3MoKQogewogICAgIC8vIERlbGF5IHJlc2V0dGluZyB0aGUgZmxhZ3Mg
dW50aWwgYWZ0ZXIgbmV4dCBzdHlsZSByZWNhbGMgc2luY2UgdW5hcHBseWluZyB0aGUgc3R5bGUg
bWF5IG5vdCB3b3JrIHdpdGhvdXQgdGhlc2Ugc2V0ICh0aGlzIGlzIHRydWUgYXQgbGVhc3Qgd2l0
aCBiZWZvcmUvYWZ0ZXIpLgotICAgIGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIg
PSBtX2RvY3VtZW50LT5lbnN1cmVTdHlsZVJlc29sdmVyKCk7CisgICAgY29uc3QgU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciA9IG1fZG9jdW1lbnQuZW5zdXJlU3R5bGVSZXNvbHZlcigpOwog
ICAgIG1fdXNlc1NpYmxpbmdSdWxlcyA9IG1fdXNlc1NpYmxpbmdSdWxlcyB8fCBzdHlsZVJlc29s
dmVyLnVzZXNTaWJsaW5nUnVsZXMoKTsKICAgICBtX3VzZXNGaXJzdExpbmVSdWxlcyA9IG1fdXNl
c0ZpcnN0TGluZVJ1bGVzIHx8IHN0eWxlUmVzb2x2ZXIudXNlc0ZpcnN0TGluZVJ1bGVzKCk7CiAg
ICAgbV91c2VzQmVmb3JlQWZ0ZXJSdWxlcyA9IG1fdXNlc0JlZm9yZUFmdGVyUnVsZXMgfHwgc3R5
bGVSZXNvbHZlci51c2VzQmVmb3JlQWZ0ZXJSdWxlcygpOwpAQCAtOTMsNyArOTMsNyBAQCB2b2lk
IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmNvbWJpCiAKIHZvaWQgRG9jdW1lbnRTdHls
ZVNoZWV0Q29sbGVjdGlvbjo6cmVzZXRDU1NGZWF0dXJlRmxhZ3MoKQogewotICAgIGNvbnN0IFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIgPSBtX2RvY3VtZW50LT5lbnN1cmVTdHlsZVJlc29s
dmVyKCk7CisgICAgY29uc3QgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9IG1fZG9jdW1l
bnQuZW5zdXJlU3R5bGVSZXNvbHZlcigpOwogICAgIG1fdXNlc1NpYmxpbmdSdWxlcyA9IHN0eWxl
UmVzb2x2ZXIudXNlc1NpYmxpbmdSdWxlcygpOwogICAgIG1fdXNlc0ZpcnN0TGluZVJ1bGVzID0g
c3R5bGVSZXNvbHZlci51c2VzRmlyc3RMaW5lUnVsZXMoKTsKICAgICBtX3VzZXNCZWZvcmVBZnRl
clJ1bGVzID0gc3R5bGVSZXNvbHZlci51c2VzQmVmb3JlQWZ0ZXJSdWxlcygpOwpAQCAtMTA0LDcg
KzEwNCw3IEBAIENTU1N0eWxlU2hlZXQqIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3QKICAgICBp
ZiAobV9wYWdlVXNlclNoZWV0KQogICAgICAgICByZXR1cm4gbV9wYWdlVXNlclNoZWV0LmdldCgp
OwogICAgIAotICAgIFBhZ2UqIG93bmluZ1BhZ2UgPSBtX2RvY3VtZW50LT5wYWdlKCk7CisgICAg
UGFnZSogb3duaW5nUGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpOwogICAgIGlmICghb3duaW5nUGFn
ZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCkBAIC0xMTMsNyArMTEzLDcgQEAgQ1NTU3R5bGVT
aGVldCogRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdAogICAgICAgICByZXR1cm4gMDsKICAgICAK
ICAgICAvLyBQYXJzZSB0aGUgc2hlZXQgYW5kIGNhY2hlIGl0LgotICAgIG1fcGFnZVVzZXJTaGVl
dCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGluZShtX2RvY3VtZW50LCBtX2RvY3VtZW50LT5z
ZXR0aW5ncygpLT51c2VyU3R5bGVTaGVldExvY2F0aW9uKCkpOworICAgIG1fcGFnZVVzZXJTaGVl
dCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGluZShtX2RvY3VtZW50LCBtX2RvY3VtZW50LnNl
dHRpbmdzKCktPnVzZXJTdHlsZVNoZWV0TG9jYXRpb24oKSk7CiAgICAgbV9wYWdlVXNlclNoZWV0
LT5jb250ZW50cygpLT5zZXRJc1VzZXJTdHlsZVNoZWV0KHRydWUpOwogICAgIG1fcGFnZVVzZXJT
aGVldC0+Y29udGVudHMoKS0+cGFyc2VTdHJpbmcodXNlclNoZWV0VGV4dCk7CiAgICAgcmV0dXJu
IG1fcGFnZVVzZXJTaGVldC5nZXQoKTsKQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIERvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb246OmNsZWFyCiB7CiAgICAgaWYgKG1fcGFnZVVzZXJTaGVldCkg
ewogICAgICAgICBtX3BhZ2VVc2VyU2hlZXQgPSAwOwotICAgICAgICBtX2RvY3VtZW50LT5zdHls
ZVJlc29sdmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKKyAgICAgICAgbV9kb2N1bWVudC5z
dHlsZVJlc29sdmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKICAgICB9CiB9CiAKQEAgLTEz
MSw3ICsxMzEsNyBAQCB2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnVwZGF0CiB7
CiAgICAgY2xlYXJQYWdlVXNlclNoZWV0KCk7CiAgICAgaWYgKHBhZ2VVc2VyU2hlZXQoKSkKLSAg
ICAgICAgbV9kb2N1bWVudC0+c3R5bGVSZXNvbHZlckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlh
dGVseSk7CisgICAgICAgIG1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlckNoYW5nZWQoUmVjYWxjU3R5
bGVJbW1lZGlhdGVseSk7CiB9CiAKIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4g
PiYgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6aW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMo
KSBjb25zdApAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVj
dGlvbjo6dXBkYXQKICAgICBtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzLmNsZWFyKCk7CiAgICAg
bV9pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzLmNsZWFyKCk7CiAKLSAgICBQYWdlKiBvd25pbmdQ
YWdlID0gbV9kb2N1bWVudC0+cGFnZSgpOworICAgIFBhZ2UqIG93bmluZ1BhZ2UgPSBtX2RvY3Vt
ZW50LnBhZ2UoKTsKICAgICBpZiAoIW93bmluZ1BhZ2UpCiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCkBAIC0xNjgsMTEgKzE2OCwxMSBAQCB2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rp
b246OnVwZGF0CiAgICAgICAgIGNvbnN0IFVzZXJTdHlsZVNoZWV0VmVjdG9yKiBzaGVldHMgPSBp
dC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaGVldHMt
PnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBVc2VyU3R5bGVTaGVldCogc2hlZXQg
PSBzaGVldHMtPmF0KGkpLmdldCgpOwotICAgICAgICAgICAgaWYgKHNoZWV0LT5pbmplY3RlZEZy
YW1lcygpID09IEluamVjdEluVG9wRnJhbWVPbmx5ICYmIG1fZG9jdW1lbnQtPm93bmVyRWxlbWVu
dCgpKQorICAgICAgICAgICAgaWYgKHNoZWV0LT5pbmplY3RlZEZyYW1lcygpID09IEluamVjdElu
VG9wRnJhbWVPbmx5ICYmIG1fZG9jdW1lbnQub3duZXJFbGVtZW50KCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIVVzZXJDb250ZW50VVJMUGF0dGVybjo6bWF0
Y2hlc1BhdHRlcm5zKG1fZG9jdW1lbnQtPnVybCgpLCBzaGVldC0+d2hpdGVsaXN0KCksIHNoZWV0
LT5ibGFja2xpc3QoKSkpCisgICAgICAgICAgICBpZiAoIVVzZXJDb250ZW50VVJMUGF0dGVybjo6
bWF0Y2hlc1BhdHRlcm5zKG1fZG9jdW1lbnQudXJsKCksIHNoZWV0LT53aGl0ZWxpc3QoKSwgc2hl
ZXQtPmJsYWNrbGlzdCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBncm91cFNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRl
SW5saW5lKGNvbnN0X2Nhc3Q8RG9jdW1lbnQqPihtX2RvY3VtZW50KSwgc2hlZXQtPnVybCgpKTsK
KyAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBncm91cFNoZWV0ID0gQ1NTU3R5bGVT
aGVldDo6Y3JlYXRlSW5saW5lKGNvbnN0X2Nhc3Q8RG9jdW1lbnQmPihtX2RvY3VtZW50KSwgc2hl
ZXQtPnVybCgpKTsKICAgICAgICAgICAgIGJvb2wgaXNVc2VyU3R5bGVTaGVldCA9IHNoZWV0LT5s
ZXZlbCgpID09IFVzZXJTdHlsZVVzZXJMZXZlbDsKICAgICAgICAgICAgIGlmIChpc1VzZXJTdHls
ZVNoZWV0KQogICAgICAgICAgICAgICAgIG1faW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMuYXBwZW5k
KGdyb3VwU2hlZXQpOwpAQCAtMTkxLDIxICsxOTEsMjEgQEAgdm9pZCBEb2N1bWVudFN0eWxlU2hl
ZXRDb2xsZWN0aW9uOjppbnZhbAogICAgIG1faW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVWYWxpZCA9
IGZhbHNlOwogICAgIGlmIChtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzLmlzRW1wdHkoKSAmJiBt
X2luamVjdGVkQXV0aG9yU3R5bGVTaGVldHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgbV9kb2N1bWVudC0+c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7Cisg
ICAgbV9kb2N1bWVudC5zdHlsZVJlc29sdmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKIH0K
IAogdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjphZGRBdXRob3JTaGVldChQYXNz
UmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gYXV0aG9yU2hlZXQpCiB7CiAgICAgQVNTRVJUKCFh
dXRob3JTaGVldC0+aXNVc2VyU3R5bGVTaGVldCgpKTsKLSAgICBtX2F1dGhvclN0eWxlU2hlZXRz
LmFwcGVuZChDU1NTdHlsZVNoZWV0OjpjcmVhdGUoYXV0aG9yU2hlZXQsIG1fZG9jdW1lbnQpKTsK
LSAgICBtX2RvY3VtZW50LT5zdHlsZVJlc29sdmVyQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0
ZWx5KTsKKyAgICBtX2F1dGhvclN0eWxlU2hlZXRzLmFwcGVuZChDU1NTdHlsZVNoZWV0OjpjcmVh
dGUoYXV0aG9yU2hlZXQsICZtX2RvY3VtZW50KSk7CisgICAgbV9kb2N1bWVudC5zdHlsZVJlc29s
dmVyQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKIH0KIAogdm9pZCBEb2N1bWVudFN0
eWxlU2hlZXRDb2xsZWN0aW9uOjphZGRVc2VyU2hlZXQoUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29u
dGVudHM+IHVzZXJTaGVldCkKIHsKICAgICBBU1NFUlQodXNlclNoZWV0LT5pc1VzZXJTdHlsZVNo
ZWV0KCkpOwotICAgIG1fdXNlclN0eWxlU2hlZXRzLmFwcGVuZChDU1NTdHlsZVNoZWV0OjpjcmVh
dGUodXNlclNoZWV0LCBtX2RvY3VtZW50KSk7Ci0gICAgbV9kb2N1bWVudC0+c3R5bGVSZXNvbHZl
ckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7CisgICAgbV91c2VyU3R5bGVTaGVldHMu
YXBwZW5kKENTU1N0eWxlU2hlZXQ6OmNyZWF0ZSh1c2VyU2hlZXQsICZtX2RvY3VtZW50KSk7Cisg
ICAgbV9kb2N1bWVudC5zdHlsZVJlc29sdmVyQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5
KTsKIH0KIAogLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIGEgdG9wLWxldmVsIHN0
eWxlc2hlZXQgaGFzIGZpbmlzaGVkIGxvYWRpbmcuCkBAIC0yMjUsMjQgKzIyNSwyNCBAQCB2b2lk
IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnJlbW92CiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChub3RpZmljYXRpb24gPT0gUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZ5TGF0ZXIpIHsK
LSAgICAgICAgbV9kb2N1bWVudC0+c2V0TmVlZHNOb3RpZnlSZW1vdmVBbGxQZW5kaW5nU3R5bGVz
aGVldCgpOworICAgICAgICBtX2RvY3VtZW50LnNldE5lZWRzTm90aWZ5UmVtb3ZlQWxsUGVuZGlu
Z1N0eWxlc2hlZXQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBtX2RvY3Vt
ZW50LT5kaWRSZW1vdmVBbGxQZW5kaW5nU3R5bGVzaGVldCgpOworICAgIG1fZG9jdW1lbnQuZGlk
UmVtb3ZlQWxsUGVuZGluZ1N0eWxlc2hlZXQoKTsKIH0KIAotdm9pZCBEb2N1bWVudFN0eWxlU2hl
ZXRDb2xsZWN0aW9uOjphZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShOb2RlKiBub2RlLCBib29s
IGNyZWF0ZWRCeVBhcnNlcikKK3ZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWRk
U3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYgbm9kZSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
CiB7Ci0gICAgaWYgKCFub2RlLT5pbkRvY3VtZW50KCkpCisgICAgaWYgKCFub2RlLmluRG9jdW1l
bnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIFVudGlsIHRoZSA8Ym9keT4gZXhp
c3RzLCB3ZSBoYXZlIG5vIGNob2ljZSBidXQgdG8gY29tcGFyZSBkb2N1bWVudCBwb3NpdGlvbnMs
CiAgICAgLy8gc2luY2Ugc3R5bGVzIG91dHNpZGUgb2YgdGhlIGJvZHkgYW5kIGhlYWQgY29udGlu
dWUgdG8gYmUgc2h1bnRlZCBpbnRvIHRoZSBoZWFkCiAgICAgLy8gKGFuZCB0aHVzIGNhbiBzaGlm
dCB0byBlbmQgdXAgYmVmb3JlIGR5bmFtaWNhbGx5IGFkZGVkIERPTSBjb250ZW50IHRoYXQgaXMg
YWxzbwogICAgIC8vIG91dHNpZGUgdGhlIGJvZHkpLgotICAgIGlmICgoY3JlYXRlZEJ5UGFyc2Vy
ICYmIG1fZG9jdW1lbnQtPmJvZHkoKSkgfHwgbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmFkZChub2RlKTsK
KyAgICBpZiAoKGNyZWF0ZWRCeVBhcnNlciAmJiBtX2RvY3VtZW50LmJvZHkoKSkgfHwgbV9zdHls
ZVNoZWV0Q2FuZGlkYXRlTm9kZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fc3R5bGVTaGVldENh
bmRpZGF0ZU5vZGVzLmFkZCgmbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI1
NCwyNSArMjU0LDI1IEBAIHZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWRkU3QK
ICAgICBkbyB7CiAgICAgICAgIC0taXQ7CiAgICAgICAgIE5vZGUqIG4gPSAqaXQ7Ci0gICAgICAg
IHVuc2lnbmVkIHNob3J0IHBvc2l0aW9uID0gbi0+Y29tcGFyZURvY3VtZW50UG9zaXRpb24obm9k
ZSk7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IHBvc2l0aW9uID0gbi0+Y29tcGFyZURvY3VtZW50
UG9zaXRpb24oJm5vZGUpOwogICAgICAgICBpZiAocG9zaXRpb24gPT0gTm9kZTo6RE9DVU1FTlRf
UE9TSVRJT05fRk9MTE9XSU5HKSB7Ci0gICAgICAgICAgICBtX3N0eWxlU2hlZXRDYW5kaWRhdGVO
b2Rlcy5pbnNlcnRCZWZvcmUoZm9sbG93aW5nTm9kZSwgbm9kZSk7CisgICAgICAgICAgICBtX3N0
eWxlU2hlZXRDYW5kaWRhdGVOb2Rlcy5pbnNlcnRCZWZvcmUoZm9sbG93aW5nTm9kZSwgJm5vZGUp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGZvbGxvd2luZ05vZGUg
PSBuOwogICAgIH0gd2hpbGUgKGl0ICE9IGJlZ2luKTsKICAgICAKLSAgICBtX3N0eWxlU2hlZXRD
YW5kaWRhdGVOb2Rlcy5pbnNlcnRCZWZvcmUoZm9sbG93aW5nTm9kZSwgbm9kZSk7CisgICAgbV9z
dHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuaW5zZXJ0QmVmb3JlKGZvbGxvd2luZ05vZGUsICZub2Rl
KTsKIH0KIAotdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpyZW1vdmVTdHlsZVNo
ZWV0Q2FuZGlkYXRlTm9kZShOb2RlKiBub2RlKQordm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xs
ZWN0aW9uOjpyZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShOb2RlJiBub2RlKQogewotICAg
IG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLnJlbW92ZShub2RlKTsKKyAgICBtX3N0eWxlU2hl
ZXRDYW5kaWRhdGVOb2Rlcy5yZW1vdmUoJm5vZGUpOwogfQogCiB2b2lkIERvY3VtZW50U3R5bGVT
aGVldENvbGxlY3Rpb246OmNvbGxlY3RBY3RpdmVTdHlsZVNoZWV0cyhWZWN0b3I8UmVmUHRyPFN0
eWxlU2hlZXQ+ID4mIHNoZWV0cykKIHsKLSAgICBpZiAobV9kb2N1bWVudC0+c2V0dGluZ3MoKSAm
JiAhbV9kb2N1bWVudC0+c2V0dGluZ3MoKS0+YXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoKSkK
KyAgICBpZiAobV9kb2N1bWVudC5zZXR0aW5ncygpICYmICFtX2RvY3VtZW50LnNldHRpbmdzKCkt
PmF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0
eWxlU2hlZXRDYW5kaWRhdGVMaXN0SGFzaFNldDo6aXRlcmF0b3IgYmVnaW4gPSBtX3N0eWxlU2hl
ZXRDYW5kaWRhdGVOb2Rlcy5iZWdpbigpOwpAQCAtMjg3LDEwICsyODcsMTAgQEAgdm9pZCBEb2N1
bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpjb2xsZQogICAgICAgICAgICAgc2hlZXQgPSBwaS0+
c2hlZXQoKTsKICNpZiBFTkFCTEUoWFNMVCkKICAgICAgICAgICAgIC8vIERvbid0IGFwcGx5IFhT
TCB0cmFuc2Zvcm1zIHRvIGFscmVhZHkgdHJhbnNmb3JtZWQgZG9jdW1lbnRzIC0tIDxyZGFyOi8v
cHJvYmxlbS80MTMyODA2PgotICAgICAgICAgICAgaWYgKHBpLT5pc1hTTCgpICYmICFtX2RvY3Vt
ZW50LT50cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudCgpKSB7CisgICAgICAgICAgICBpZiAocGktPmlz
WFNMKCkgJiYgIW1fZG9jdW1lbnQudHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSkgewogICAgICAg
ICAgICAgICAgIC8vIERvbid0IGFwcGx5IFhTTCB0cmFuc2Zvcm1zIHVudGlsIGxvYWRpbmcgaXMg
ZmluaXNoZWQuCi0gICAgICAgICAgICAgICAgaWYgKCFtX2RvY3VtZW50LT5wYXJzaW5nKCkpCi0g
ICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPmFwcGx5WFNMVHJhbnNmb3JtKHBpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIW1fZG9jdW1lbnQucGFyc2luZygpKQorICAgICAgICAgICAgICAg
ICAgICBtX2RvY3VtZW50LmFwcGx5WFNMVHJhbnNmb3JtKHBpKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAjZW5kaWYKQEAgLTM4Miw3ICszODIsNyBAQCB2b2lkIERv
Y3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFuYWx5CiAKICAgICBpZiAodXBkYXRlRmxhZyAh
PSBPcHRpbWl6ZWRVcGRhdGUpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1fZG9jdW1lbnQt
PnN0eWxlUmVzb2x2ZXJJZkV4aXN0cygpKQorICAgIGlmICghbV9kb2N1bWVudC5zdHlsZVJlc29s
dmVySWZFeGlzdHMoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRmluZCBvdXQgd2hpY2gg
c3R5bGVzaGVldHMgYXJlIG5ldy4KQEAgLTQxMiwxMiArNDEyLDEyIEBAIHZvaWQgRG9jdW1lbnRT
dHlsZVNoZWV0Q29sbGVjdGlvbjo6YW5hbHkKICAgICBzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9
IGhhc0luc2VydGlvbnMgPyBSZXNldCA6IEFkZGl0aXZlOwogCiAgICAgLy8gSWYgd2UgYXJlIGFs
cmVhZHkgcGFyc2luZyB0aGUgYm9keSBhbmQgc28gbWF5IGhhdmUgc2lnbmlmaWNhbnQgYW1vdW50
IG9mIGVsZW1lbnRzLCBwdXQgc29tZSBlZmZvcnQgaW50byB0cnlpbmcgdG8gYXZvaWQgc3R5bGUg
cmVjYWxjcy4KLSAgICBpZiAoIW1fZG9jdW1lbnQtPmJvZHkoKSB8fCBtX2RvY3VtZW50LT5oYXNO
b2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxlKCkpCisgICAgaWYgKCFtX2RvY3VtZW50LmJvZHkoKSB8
fCBtX2RvY3VtZW50Lmhhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMgaW52YWxpZGF0aW9uQW5hbHlzaXMo
YWRkZWRTaGVldHMpOwogICAgIGlmIChpbnZhbGlkYXRpb25BbmFseXNpcy5kaXJ0aWVzQWxsU3R5
bGUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGludmFsaWRhdGlvbkFuYWx5c2lzLmludmFsaWRh
dGVTdHlsZShtX2RvY3VtZW50KTsKKyAgICBpbnZhbGlkYXRpb25BbmFseXNpcy5pbnZhbGlkYXRl
U3R5bGUoJm1fZG9jdW1lbnQpOwogICAgIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjID0gZmFsc2U7
CiB9CiAKQEAgLTQ0NCw5ICs0NDQsOSBAQCBzdGF0aWMgdm9pZCBmaWx0ZXJFbmFibGVkTm9uZW1w
dHlDU1NTdHlsCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBjb2xsZWN0QWN0aXZlQ1NTU3R5bGVT
aGVldHNGcm9tU2VhbWxlc3NQYXJlbnRzKFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYg
c2hlZXRzLCBEb2N1bWVudCogZG9jdW1lbnQpCitzdGF0aWMgdm9pZCBjb2xsZWN0QWN0aXZlQ1NT
U3R5bGVTaGVldHNGcm9tU2VhbWxlc3NQYXJlbnRzKFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4gPiYgc2hlZXRzLCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgSFRNTElGcmFtZUVsZW1l
bnQqIHNlYW1sZXNzUGFyZW50SUZyYW1lID0gZG9jdW1lbnQtPnNlYW1sZXNzUGFyZW50SUZyYW1l
KCk7CisgICAgSFRNTElGcmFtZUVsZW1lbnQqIHNlYW1sZXNzUGFyZW50SUZyYW1lID0gZG9jdW1l
bnQuc2VhbWxlc3NQYXJlbnRJRnJhbWUoKTsKICAgICBpZiAoIXNlYW1sZXNzUGFyZW50SUZyYW1l
KQogICAgICAgICByZXR1cm47CiAgICAgc2hlZXRzLmFwcGVuZFZlY3RvcihzZWFtbGVzc1BhcmVu
dElGcmFtZS0+ZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT5hY3RpdmVBdXRob3JT
dHlsZVNoZWV0cygpKTsKQEAgLTQ1NCwxNiArNDU0LDE2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RB
Y3RpdmVDU1NTdHlsZVNoZWV0c0YKIAogYm9vbCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9u
Ojp1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyhVcGRhdGVGbGFnIHVwZGF0ZUZsYWcpCiB7Ci0gICAg
aWYgKG1fZG9jdW1lbnQtPmluU3R5bGVSZWNhbGMoKSkgeworICAgIGlmIChtX2RvY3VtZW50Lmlu
U3R5bGVSZWNhbGMoKSkgewogICAgICAgICAvLyBTVkcgPHVzZT4gZWxlbWVudCBtYXkgbWFuYWdl
IHRvIGludmFsaWRhdGUgc3R5bGUgc2VsZWN0b3IgaW4gdGhlIG1pZGRsZSBvZiBhIHN0eWxlIHJl
Y2FsYy4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU0MzQ0CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBmaXhlZCBpbiBTVkcgYW5k
IHRoZSBjYWxsIHNpdGUgcmVwbGFjZWQgYnkgQVNTRVJUKCFtX2luU3R5bGVSZWNhbGMpLgogICAg
ICAgICBtX3BlbmRpbmdVcGRhdGVUeXBlID0gRnVsbFVwZGF0ZTsKLSAgICAgICAgbV9kb2N1bWVu
dC0+c2NoZWR1bGVGb3JjZWRTdHlsZVJlY2FsYygpOworICAgICAgICBtX2RvY3VtZW50LnNjaGVk
dWxlRm9yY2VkU3R5bGVSZWNhbGMoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgfQot
ICAgIGlmICghbV9kb2N1bWVudC0+cmVuZGVyVmlldygpIHx8ICFtX2RvY3VtZW50LT5hdHRhY2hl
ZCgpKQorICAgIGlmICghbV9kb2N1bWVudC5yZW5kZXJWaWV3KCkgfHwgIW1fZG9jdW1lbnQuYXR0
YWNoZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgVmVjdG9yPFJlZlB0cjxTdHls
ZVNoZWV0PiA+IGFjdGl2ZVN0eWxlU2hlZXRzOwpAQCAtNDgwLDkgKzQ4MCw5IEBAIGJvb2wgRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6dXBkYXQKICAgICBhbmFseXplU3R5bGVTaGVldENo
YW5nZSh1cGRhdGVGbGFnLCBhY3RpdmVDU1NTdHlsZVNoZWV0cywgc3R5bGVSZXNvbHZlclVwZGF0
ZVR5cGUsIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjKTsKIAogICAgIGlmIChzdHlsZVJlc29sdmVy
VXBkYXRlVHlwZSA9PSBSZWNvbnN0cnVjdCkKLSAgICAgICAgbV9kb2N1bWVudC0+Y2xlYXJTdHls
ZVJlc29sdmVyKCk7CisgICAgICAgIG1fZG9jdW1lbnQuY2xlYXJTdHlsZVJlc29sdmVyKCk7CiAg
ICAgZWxzZSB7Ci0gICAgICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIgPSBtX2RvY3Vt
ZW50LT5lbnN1cmVTdHlsZVJlc29sdmVyKCk7CisgICAgICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIgPSBtX2RvY3VtZW50LmVuc3VyZVN0eWxlUmVzb2x2ZXIoKTsKICAgICAgICAgaWYg
KHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlID09IFJlc2V0KSB7CiAgICAgICAgICAgICBzdHlsZVJl
c29sdmVyLnJ1bGVTZXRzKCkucmVzZXRBdXRob3JTdHlsZSgpOwogICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci5hcHBlbmRBdXRob3JTdHlsZVNoZWV0cygwLCBhY3RpdmVDU1NTdHlsZVNoZWV0cyk7
CkBAIC01MDAsNyArNTAwLDcgQEAgYm9vbCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1
cGRhdAogICAgIG1fdXNlc1JlbVVuaXRzID0gc3R5bGVTaGVldHNVc2VSZW1Vbml0cyhtX2FjdGl2
ZUF1dGhvclN0eWxlU2hlZXRzKTsKICAgICBtX3BlbmRpbmdVcGRhdGVUeXBlID0gTm9VcGRhdGU7
CiAKLSAgICBtX2RvY3VtZW50LT5ub3RpZnlTZWFtbGVzc0NoaWxkRG9jdW1lbnRzT2ZTdHlsZXNo
ZWV0VXBkYXRlKCk7CisgICAgbV9kb2N1bWVudC5ub3RpZnlTZWFtbGVzc0NoaWxkRG9jdW1lbnRz
T2ZTdHlsZXNoZWV0VXBkYXRlKCk7CiAKICAgICByZXR1cm4gcmVxdWlyZXNGdWxsU3R5bGVSZWNh
bGM7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVj
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hl
ZXRDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDE1NjM4MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDIyICs0
NiwyMiBAQCBjbGFzcyBTdHlsZVNoZWV0TGlzdDsKIGNsYXNzIERvY3VtZW50U3R5bGVTaGVldENv
bGxlY3Rpb24gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzT3duUHRyPERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24+IGNyZWF0ZShEb2N1
bWVudCogZG9jdW1lbnQpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBEb2N1bWVudFN0eWxlU2hlZXRD
b2xsZWN0aW9uKGRvY3VtZW50KSk7IH0KKyAgICBzdGF0aWMgUGFzc093blB0cjxEb2N1bWVudFN0
eWxlU2hlZXRDb2xsZWN0aW9uPiBjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KSB7IHJldHVybiBh
ZG9wdFB0cihuZXcgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbihkb2N1bWVudCkpOyB9CiAK
ICAgICB+RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbigpOwogCi0gICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxTdHlsZVNoZWV0PiA+JiBzdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0KCkgY29u
c3QgeyByZXR1cm4gbV9zdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0OyB9CisgICAgY29uc3Qg
VmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0Pj4mIHN0eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3Qo
KSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3Q7IH0KIAotICAg
IGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYgYWN0aXZlQXV0aG9yU3R5bGVT
aGVldHMoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzOyB9CisgICAg
Y29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIGFjdGl2ZUF1dGhvclN0eWxlU2hl
ZXRzKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0czsgfQogCiAgICAg
Q1NTU3R5bGVTaGVldCogcGFnZVVzZXJTaGVldCgpOwotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8
Q1NTU3R5bGVTaGVldD4gPiYgZG9jdW1lbnRVc2VyU3R5bGVTaGVldHMoKSBjb25zdCB7IHJldHVy
biBtX3VzZXJTdHlsZVNoZWV0czsgfQotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVT
aGVldD4gPiYgZG9jdW1lbnRBdXRob3JTdHlsZVNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1fYXV0
aG9yU3R5bGVTaGVldHM7IH0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+
ID4mIGluamVjdGVkVXNlclN0eWxlU2hlZXRzKCkgY29uc3Q7Ci0gICAgY29uc3QgVmVjdG9yPFJl
ZlB0cjxDU1NTdHlsZVNoZWV0PiA+JiBpbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzKCkgY29uc3Q7
CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIGRvY3VtZW50VXNlclN0
eWxlU2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV91c2VyU3R5bGVTaGVldHM7IH0KKyAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgZG9jdW1lbnRBdXRob3JTdHlsZVNoZWV0
cygpIGNvbnN0IHsgcmV0dXJuIG1fYXV0aG9yU3R5bGVTaGVldHM7IH0KKyAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgaW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKSBjb25z
dDsKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgaW5qZWN0ZWRBdXRo
b3JTdHlsZVNoZWV0cygpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRTdHlsZVNoZWV0Q2FuZGlkYXRl
Tm9kZShOb2RlKiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwotICAgIHZvaWQgcmVtb3ZlU3R5bGVT
aGVldENhbmRpZGF0ZU5vZGUoTm9kZSopOworICAgIHZvaWQgYWRkU3R5bGVTaGVldENhbmRpZGF0
ZU5vZGUoTm9kZSYsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKKyAgICB2b2lkIHJlbW92ZVN0eWxl
U2hlZXRDYW5kaWRhdGVOb2RlKE5vZGUmKTsKIAogICAgIHZvaWQgY2xlYXJQYWdlVXNlclNoZWV0
KCk7CiAgICAgdm9pZCB1cGRhdGVQYWdlVXNlclNoZWV0KCk7CkBAIC0xMTgsNyArMTE4LDcgQEAg
cHVibGljOgogICAgIGJvb2wgYWN0aXZlU3R5bGVTaGVldHNDb250YWlucyhjb25zdCBDU1NTdHls
ZVNoZWV0KikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgRG9jdW1lbnRTdHlsZVNo
ZWV0Q29sbGVjdGlvbihEb2N1bWVudCopOworICAgIGV4cGxpY2l0IERvY3VtZW50U3R5bGVTaGVl
dENvbGxlY3Rpb24oRG9jdW1lbnQmKTsKIAogICAgIHZvaWQgY29sbGVjdEFjdGl2ZVN0eWxlU2hl
ZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4gPiYpOwogICAgIGVudW0gU3R5bGVSZXNvbHZl
clVwZGF0ZVR5cGUgewpAQCAtMTI4LDcgKzEyOCw3IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICB2
b2lkIGFuYWx5emVTdHlsZVNoZWV0Q2hhbmdlKFVwZGF0ZUZsYWcsIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Q1NTU3R5bGVTaGVldD4gPiYgbmV3U3R5bGVzaGVldHMsIFN0eWxlUmVzb2x2ZXJVcGRhdGVU
eXBlJiwgYm9vbCYgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMpOwogCi0gICAgRG9jdW1lbnQqIG1f
ZG9jdW1lbnQ7CisgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CiAKICAgICBWZWN0b3I8UmVmUHRy
PFN0eWxlU2hlZXQ+ID4gbV9zdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0OwogICAgIFZlY3Rv
cjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiBtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzOwpAQCAt
MTQ0LDEyICsxNDQsMTIgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBt
X3BhZ2VVc2VyU2hlZXQ7CiAKLSAgICBtdXRhYmxlIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4gPiBtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzOwotICAgIG11dGFibGUgVmVjdG9yPFJlZlB0
cjxDU1NTdHlsZVNoZWV0PiA+IG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0czsKKyAgICBtdXRh
YmxlIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IG1faW5qZWN0ZWRVc2VyU3R5bGVTaGVl
dHM7CisgICAgbXV0YWJsZSBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBtX2luamVjdGVk
QXV0aG9yU3R5bGVTaGVldHM7CiAgICAgbXV0YWJsZSBib29sIG1faW5qZWN0ZWRTdHlsZVNoZWV0
Q2FjaGVWYWxpZDsKIAotICAgIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiBtX3VzZXJT
dHlsZVNoZWV0czsKLSAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4gbV9hdXRob3JT
dHlsZVNoZWV0czsKKyAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBtX3VzZXJTdHls
ZVNoZWV0czsKKyAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBtX2F1dGhvclN0eWxl
U2hlZXRzOwogCiAgICAgYm9vbCBtX2hhZEFjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0OwogICAgIFVw
ZGF0ZUZsYWcgbV9wZW5kaW5nVXBkYXRlVHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE1NjM4MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTMwMiw3ICsxMzAyLDcgQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0
aW9uUmVxdWVzdCBFbGVtZQogICAgICAgICBpZiAobmV3U2NvcGUpCiAgICAgICAgICAgICB1cGRh
dGVJZEZvclRyZWVTY29wZShuZXdTY29wZSwgbnVsbEF0b20sIGlkVmFsdWUpOwogICAgICAgICBp
ZiAobmV3RG9jdW1lbnQpCi0gICAgICAgICAgICB1cGRhdGVJZEZvckRvY3VtZW50KG5ld0RvY3Vt
ZW50LCBudWxsQXRvbSwgaWRWYWx1ZSwgQWx3YXlzVXBkYXRlSFRNTERvY3VtZW50TmFtZWRJdGVt
TWFwcyk7CisgICAgICAgICAgICB1cGRhdGVJZEZvckRvY3VtZW50KCpuZXdEb2N1bWVudCwgbnVs
bEF0b20sIGlkVmFsdWUsIEFsd2F5c1VwZGF0ZUhUTUxEb2N1bWVudE5hbWVkSXRlbU1hcHMpOwog
ICAgIH0KIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZVZhbHVlID0gZ2V0TmFtZUF0dHJp
YnV0ZSgpOwpAQCAtMTMxMCw3ICsxMzEwLDcgQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9u
UmVxdWVzdCBFbGVtZQogICAgICAgICBpZiAobmV3U2NvcGUpCiAgICAgICAgICAgICB1cGRhdGVO
YW1lRm9yVHJlZVNjb3BlKG5ld1Njb3BlLCBudWxsQXRvbSwgbmFtZVZhbHVlKTsKICAgICAgICAg
aWYgKG5ld0RvY3VtZW50KQotICAgICAgICAgICAgdXBkYXRlTmFtZUZvckRvY3VtZW50KG5ld0Rv
Y3VtZW50LCBudWxsQXRvbSwgbmFtZVZhbHVlKTsKKyAgICAgICAgICAgIHVwZGF0ZU5hbWVGb3JE
b2N1bWVudCgqbmV3RG9jdW1lbnQsIG51bGxBdG9tLCBuYW1lVmFsdWUpOwogICAgIH0KIAogICAg
IGlmIChuZXdTY29wZSAmJiBoYXNUYWdOYW1lKGxhYmVsVGFnKSkgewpAQCAtMTM0NSw3ICsxMzQ1
LDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlKgogICAgICAgICAg
ICAgaWYgKG9sZFNjb3BlKQogICAgICAgICAgICAgICAgIHVwZGF0ZUlkRm9yVHJlZVNjb3BlKG9s
ZFNjb3BlLCBpZFZhbHVlLCBudWxsQXRvbSk7CiAgICAgICAgICAgICBpZiAob2xkRG9jdW1lbnQp
Ci0gICAgICAgICAgICAgICAgdXBkYXRlSWRGb3JEb2N1bWVudChvbGREb2N1bWVudCwgaWRWYWx1
ZSwgbnVsbEF0b20sIEFsd2F5c1VwZGF0ZUhUTUxEb2N1bWVudE5hbWVkSXRlbU1hcHMpOworICAg
ICAgICAgICAgICAgIHVwZGF0ZUlkRm9yRG9jdW1lbnQoKm9sZERvY3VtZW50LCBpZFZhbHVlLCBu
dWxsQXRvbSwgQWx3YXlzVXBkYXRlSFRNTERvY3VtZW50TmFtZWRJdGVtTWFwcyk7CiAgICAgICAg
IH0KIAogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVWYWx1ZSA9IGdldE5hbWVBdHRy
aWJ1dGUoKTsKQEAgLTEzNTMsNyArMTM1Myw3IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlZEZyb20o
Q29udGFpbmVyTm9kZSoKICAgICAgICAgICAgIGlmIChvbGRTY29wZSkKICAgICAgICAgICAgICAg
ICB1cGRhdGVOYW1lRm9yVHJlZVNjb3BlKG9sZFNjb3BlLCBuYW1lVmFsdWUsIG51bGxBdG9tKTsK
ICAgICAgICAgICAgIGlmIChvbGREb2N1bWVudCkKLSAgICAgICAgICAgICAgICB1cGRhdGVOYW1l
Rm9yRG9jdW1lbnQob2xkRG9jdW1lbnQsIG5hbWVWYWx1ZSwgbnVsbEF0b20pOworICAgICAgICAg
ICAgICAgIHVwZGF0ZU5hbWVGb3JEb2N1bWVudCgqb2xkRG9jdW1lbnQsIG5hbWVWYWx1ZSwgbnVs
bEF0b20pOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG9sZFNjb3BlICYmIGhhc1RhZ05hbWUo
bGFiZWxUYWcpKSB7CkBAIC0yNDU3LDcgKzI0NTcsNyBAQCBib29sIEVsZW1lbnQ6OndlYmtpdE1h
dGNoZXNTZWxlY3Rvcihjb25zCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBT
ZWxlY3RvclF1ZXJ5KiBzZWxlY3RvclF1ZXJ5ID0gZG9jdW1lbnQoKS5zZWxlY3RvclF1ZXJ5Q2Fj
aGUoKS5hZGQoc2VsZWN0b3IsICZkb2N1bWVudCgpLCBlYyk7CisgICAgU2VsZWN0b3JRdWVyeSog
c2VsZWN0b3JRdWVyeSA9IGRvY3VtZW50KCkuc2VsZWN0b3JRdWVyeUNhY2hlKCkuYWRkKHNlbGVj
dG9yLCBkb2N1bWVudCgpLCBlYyk7CiAgICAgaWYgKCFzZWxlY3RvclF1ZXJ5KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHNlbGVjdG9yUXVlcnktPm1hdGNoZXModGhpcyk7CkBA
IC0yNzM1LDcgKzI3MzUsNyBAQCBpbmxpbmUgdm9pZCBFbGVtZW50Ojp1cGRhdGVOYW1lKGNvbnN0
IEF0CiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIWRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIHVwZGF0ZU5hbWVGb3JEb2N1bWVudCh0b0hUTUxEb2N1
bWVudCgmZG9jdW1lbnQoKSksIG9sZE5hbWUsIG5ld05hbWUpOworICAgIHVwZGF0ZU5hbWVGb3JE
b2N1bWVudCh0b0hUTUxEb2N1bWVudChkb2N1bWVudCgpKSwgb2xkTmFtZSwgbmV3TmFtZSk7CiB9
CiAKIHZvaWQgRWxlbWVudDo6dXBkYXRlTmFtZUZvclRyZWVTY29wZShUcmVlU2NvcGUqIHNjb3Bl
LCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3TmFt
ZSkKQEAgLTI3NDksNyArMjc0OSw3IEBAIHZvaWQgRWxlbWVudDo6dXBkYXRlTmFtZUZvclRyZWVT
Y29wZShUcmUKICAgICAgICAgc2NvcGUtPmFkZEVsZW1lbnRCeU5hbWUobmV3TmFtZSwgdGhpcyk7
CiB9CiAKLXZvaWQgRWxlbWVudDo6dXBkYXRlTmFtZUZvckRvY3VtZW50KEhUTUxEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBuZXdOYW1lKQordm9pZCBFbGVtZW50Ojp1cGRhdGVOYW1lRm9yRG9jdW1lbnQoSFRNTERvY3Vt
ZW50JiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGROYW1lLCBjb25zdCBBdG9taWNT
dHJpbmcmIG5ld05hbWUpCiB7CiAgICAgQVNTRVJUKGluRG9jdW1lbnQoKSk7CiAgICAgQVNTRVJU
KG9sZE5hbWUgIT0gbmV3TmFtZSk7CkBAIC0yNzU3LDE3ICsyNzU3LDE3IEBAIHZvaWQgRWxlbWVu
dDo6dXBkYXRlTmFtZUZvckRvY3VtZW50KEhUTUwKICAgICBpZiAoV2luZG93TmFtZUNvbGxlY3Rp
b246Om5vZGVNYXRjaGVzSWZOYW1lQXR0cmlidXRlTWF0Y2godGhpcykpIHsKICAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBpZCA9IFdpbmRvd05hbWVDb2xsZWN0aW9uOjpub2RlTWF0Y2hlc0lm
SWRBdHRyaWJ1dGVNYXRjaCh0aGlzKSA/IGdldElkQXR0cmlidXRlKCkgOiBudWxsQXRvbTsKICAg
ICAgICAgaWYgKCFvbGROYW1lLmlzRW1wdHkoKSAmJiBvbGROYW1lICE9IGlkKQotICAgICAgICAg
ICAgZG9jdW1lbnQtPnJlbW92ZVdpbmRvd05hbWVkSXRlbShvbGROYW1lLCB0aGlzKTsKKyAgICAg
ICAgICAgIGRvY3VtZW50LnJlbW92ZVdpbmRvd05hbWVkSXRlbShvbGROYW1lLCB0aGlzKTsKICAg
ICAgICAgaWYgKCFuZXdOYW1lLmlzRW1wdHkoKSAmJiBuZXdOYW1lICE9IGlkKQotICAgICAgICAg
ICAgZG9jdW1lbnQtPmFkZFdpbmRvd05hbWVkSXRlbShuZXdOYW1lLCB0aGlzKTsKKyAgICAgICAg
ICAgIGRvY3VtZW50LmFkZFdpbmRvd05hbWVkSXRlbShuZXdOYW1lLCB0aGlzKTsKICAgICB9CiAK
ICAgICBpZiAoRG9jdW1lbnROYW1lQ29sbGVjdGlvbjo6bm9kZU1hdGNoZXNJZk5hbWVBdHRyaWJ1
dGVNYXRjaCh0aGlzKSkgewogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkID0gRG9jdW1l
bnROYW1lQ29sbGVjdGlvbjo6bm9kZU1hdGNoZXNJZklkQXR0cmlidXRlTWF0Y2godGhpcykgPyBn
ZXRJZEF0dHJpYnV0ZSgpIDogbnVsbEF0b207CiAgICAgICAgIGlmICghb2xkTmFtZS5pc0VtcHR5
KCkgJiYgb2xkTmFtZSAhPSBpZCkKLSAgICAgICAgICAgIGRvY3VtZW50LT5yZW1vdmVEb2N1bWVu
dE5hbWVkSXRlbShvbGROYW1lLCB0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZURv
Y3VtZW50TmFtZWRJdGVtKG9sZE5hbWUsIHRoaXMpOwogICAgICAgICBpZiAoIW5ld05hbWUuaXNF
bXB0eSgpICYmIG5ld05hbWUgIT0gaWQpCi0gICAgICAgICAgICBkb2N1bWVudC0+YWRkRG9jdW1l
bnROYW1lZEl0ZW0obmV3TmFtZSwgdGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudC5hZGREb2N1
bWVudE5hbWVkSXRlbShuZXdOYW1lLCB0aGlzKTsKICAgICB9CiB9CiAKQEAgLTI3ODUsNyArMjc4
NSw3IEBAIGlubGluZSB2b2lkIEVsZW1lbnQ6OnVwZGF0ZUlkKGNvbnN0IEF0b20KICAgICAgICAg
cmV0dXJuOwogICAgIGlmICghZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgdXBkYXRlSWRGb3JEb2N1bWVudCh0b0hUTUxEb2N1bWVudCgmZG9jdW1lbnQo
KSksIG9sZElkLCBuZXdJZCwgVXBkYXRlSFRNTERvY3VtZW50TmFtZWRJdGVtTWFwc09ubHlJZkRp
ZmZlcnNGcm9tTmFtZUF0dHJpYnV0ZSk7CisgICAgdXBkYXRlSWRGb3JEb2N1bWVudCh0b0hUTUxE
b2N1bWVudChkb2N1bWVudCgpKSwgb2xkSWQsIG5ld0lkLCBVcGRhdGVIVE1MRG9jdW1lbnROYW1l
ZEl0ZW1NYXBzT25seUlmRGlmZmVyc0Zyb21OYW1lQXR0cmlidXRlKTsKIH0KIAogdm9pZCBFbGVt
ZW50Ojp1cGRhdGVJZEZvclRyZWVTY29wZShUcmVlU2NvcGUqIHNjb3BlLCBjb25zdCBBdG9taWNT
dHJpbmcmIG9sZElkLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lkKQpAQCAtMjc5OSw3ICsyNzk5
LDcgQEAgdm9pZCBFbGVtZW50Ojp1cGRhdGVJZEZvclRyZWVTY29wZShUcmVlUwogICAgICAgICBz
Y29wZS0+YWRkRWxlbWVudEJ5SWQobmV3SWQsIHRoaXMpOwogfQogCi12b2lkIEVsZW1lbnQ6OnVw
ZGF0ZUlkRm9yRG9jdW1lbnQoSFRNTERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3Ry
aW5nJiBvbGRJZCwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdJZCwgSFRNTERvY3VtZW50TmFtZWRJ
dGVtTWFwc1VwZGF0aW5nQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgRWxlbWVudDo6dXBkYXRl
SWRGb3JEb2N1bWVudChIVE1MRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcm
IG9sZElkLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lkLCBIVE1MRG9jdW1lbnROYW1lZEl0ZW1N
YXBzVXBkYXRpbmdDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIEFTU0VSVChpbkRvY3VtZW50
KCkpOwogICAgIEFTU0VSVChvbGRJZCAhPSBuZXdJZCk7CkBAIC0yODA3LDE3ICsyODA3LDE3IEBA
IHZvaWQgRWxlbWVudDo6dXBkYXRlSWRGb3JEb2N1bWVudChIVE1MRG8KICAgICBpZiAoV2luZG93
TmFtZUNvbGxlY3Rpb246Om5vZGVNYXRjaGVzSWZJZEF0dHJpYnV0ZU1hdGNoKHRoaXMpKSB7CiAg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGNvbmRpdGlvbiA9PSBVcGRhdGVIVE1M
RG9jdW1lbnROYW1lZEl0ZW1NYXBzT25seUlmRGlmZmVyc0Zyb21OYW1lQXR0cmlidXRlICYmIFdp
bmRvd05hbWVDb2xsZWN0aW9uOjpub2RlTWF0Y2hlc0lmTmFtZUF0dHJpYnV0ZU1hdGNoKHRoaXMp
ID8gZ2V0TmFtZUF0dHJpYnV0ZSgpIDogbnVsbEF0b207CiAgICAgICAgIGlmICghb2xkSWQuaXNF
bXB0eSgpICYmIG9sZElkICE9IG5hbWUpCi0gICAgICAgICAgICBkb2N1bWVudC0+cmVtb3ZlV2lu
ZG93TmFtZWRJdGVtKG9sZElkLCB0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZVdp
bmRvd05hbWVkSXRlbShvbGRJZCwgdGhpcyk7CiAgICAgICAgIGlmICghbmV3SWQuaXNFbXB0eSgp
ICYmIG5ld0lkICE9IG5hbWUpCi0gICAgICAgICAgICBkb2N1bWVudC0+YWRkV2luZG93TmFtZWRJ
dGVtKG5ld0lkLCB0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmFkZFdpbmRvd05hbWVkSXRl
bShuZXdJZCwgdGhpcyk7CiAgICAgfQogCiAgICAgaWYgKERvY3VtZW50TmFtZUNvbGxlY3Rpb246
Om5vZGVNYXRjaGVzSWZJZEF0dHJpYnV0ZU1hdGNoKHRoaXMpKSB7CiAgICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSA9IGNvbmRpdGlvbiA9PSBVcGRhdGVIVE1MRG9jdW1lbnROYW1lZEl0
ZW1NYXBzT25seUlmRGlmZmVyc0Zyb21OYW1lQXR0cmlidXRlICYmIERvY3VtZW50TmFtZUNvbGxl
Y3Rpb246Om5vZGVNYXRjaGVzSWZOYW1lQXR0cmlidXRlTWF0Y2godGhpcykgPyBnZXROYW1lQXR0
cmlidXRlKCkgOiBudWxsQXRvbTsKICAgICAgICAgaWYgKCFvbGRJZC5pc0VtcHR5KCkgJiYgb2xk
SWQgIT0gbmFtZSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5yZW1vdmVEb2N1bWVudE5hbWVkSXRl
bShvbGRJZCwgdGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVEb2N1bWVudE5hbWVk
SXRlbShvbGRJZCwgdGhpcyk7CiAgICAgICAgIGlmICghbmV3SWQuaXNFbXB0eSgpICYmIG5ld0lk
ICE9IG5hbWUpCi0gICAgICAgICAgICBkb2N1bWVudC0+YWRkRG9jdW1lbnROYW1lZEl0ZW0obmV3
SWQsIHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQuYWRkRG9jdW1lbnROYW1lZEl0ZW0obmV3
SWQsIHRoaXMpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiAx
NTYzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02MTUsMTEgKzYxNSwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVOYW1lKGNvbnN0
IEF0b21pY1N0cmluZyYgb2xkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdOYW1lKTsKICAg
ICB2b2lkIHVwZGF0ZU5hbWVGb3JUcmVlU2NvcGUoVHJlZVNjb3BlKiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBvbGROYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld05hbWUpOwotICAgIHZvaWQgdXBk
YXRlTmFtZUZvckRvY3VtZW50KEhUTUxEb2N1bWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYgb2xk
TmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdOYW1lKTsKKyAgICB2b2lkIHVwZGF0ZU5hbWVG
b3JEb2N1bWVudChIVE1MRG9jdW1lbnQmLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZE5hbWUsIGNv
bnN0IEF0b21pY1N0cmluZyYgbmV3TmFtZSk7CiAgICAgdm9pZCB1cGRhdGVJZChjb25zdCBBdG9t
aWNTdHJpbmcmIG9sZElkLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lkKTsKICAgICB2b2lkIHVw
ZGF0ZUlkRm9yVHJlZVNjb3BlKFRyZWVTY29wZSosIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkSWQs
IGNvbnN0IEF0b21pY1N0cmluZyYgbmV3SWQpOwogICAgIGVudW0gSFRNTERvY3VtZW50TmFtZWRJ
dGVtTWFwc1VwZGF0aW5nQ29uZGl0aW9uIHsgQWx3YXlzVXBkYXRlSFRNTERvY3VtZW50TmFtZWRJ
dGVtTWFwcywgVXBkYXRlSFRNTERvY3VtZW50TmFtZWRJdGVtTWFwc09ubHlJZkRpZmZlcnNGcm9t
TmFtZUF0dHJpYnV0ZSB9OwotICAgIHZvaWQgdXBkYXRlSWRGb3JEb2N1bWVudChIVE1MRG9jdW1l
bnQqLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZElkLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lk
LCBIVE1MRG9jdW1lbnROYW1lZEl0ZW1NYXBzVXBkYXRpbmdDb25kaXRpb24pOworICAgIHZvaWQg
dXBkYXRlSWRGb3JEb2N1bWVudChIVE1MRG9jdW1lbnQmLCBjb25zdCBBdG9taWNTdHJpbmcmIG9s
ZElkLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lkLCBIVE1MRG9jdW1lbnROYW1lZEl0ZW1NYXBz
VXBkYXRpbmdDb25kaXRpb24pOwogICAgIHZvaWQgdXBkYXRlTGFiZWwoVHJlZVNjb3BlKiwgY29u
c3QgQXRvbWljU3RyaW5nJiBvbGRGb3JBdHRyaWJ1dGVWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBuZXdGb3JBdHRyaWJ1dGVWYWx1ZSk7CiAKICAgICB2b2lkIHNjcm9sbEJ5VW5pdHMoaW50IHVu
aXRzLCBTY3JvbGxHcmFudWxhcml0eSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vSW5saW5l
U3R5bGVTaGVldE93bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vSW5s
aW5lU3R5bGVTaGVldE93bmVyLmNwcAkocmV2aXNpb24gMTU2MzgyKQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0lubGluZVN0eWxlU2hlZXRPd25lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYy
ICs0OSw1NiBAQCBJbmxpbmVTdHlsZVNoZWV0T3duZXI6On5JbmxpbmVTdHlsZVNoZWV0CiB7CiB9
CiAKLXZvaWQgSW5saW5lU3R5bGVTaGVldE93bmVyOjppbnNlcnRlZEludG9Eb2N1bWVudChEb2N1
bWVudCogZG9jdW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIElubGluZVN0eWxlU2hlZXRP
d25lcjo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBFbGVtZW50JiBl
bGVtZW50KQogewotICAgIEFTU0VSVChkb2N1bWVudCk7Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwot
ICAgIGRvY3VtZW50LT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT5hZGRTdHlsZVNoZWV0Q2FuZGlk
YXRlTm9kZShlbGVtZW50LCBtX2lzUGFyc2luZ0NoaWxkcmVuKTsKKyAgICBkb2N1bWVudC5zdHls
ZVNoZWV0Q29sbGVjdGlvbigpLT5hZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShlbGVtZW50LCBt
X2lzUGFyc2luZ0NoaWxkcmVuKTsKIAogICAgIGlmIChtX2lzUGFyc2luZ0NoaWxkcmVuKQogICAg
ICAgICByZXR1cm47CiAgICAgY3JlYXRlU2hlZXRGcm9tVGV4dENvbnRlbnRzKGVsZW1lbnQpOwog
fQogCi12b2lkIElubGluZVN0eWxlU2hlZXRPd25lcjo6cmVtb3ZlZEZyb21Eb2N1bWVudChEb2N1
bWVudCogZG9jdW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIElubGluZVN0eWxlU2hlZXRP
d25lcjo6cmVtb3ZlZEZyb21Eb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQsIEVsZW1lbnQmIGVs
ZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGRvY3VtZW50KTsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0g
ICAgZG9jdW1lbnQtPnN0eWxlU2hlZXRDb2xsZWN0aW9uKCktPnJlbW92ZVN0eWxlU2hlZXRDYW5k
aWRhdGVOb2RlKGVsZW1lbnQpOworICAgIGRvY3VtZW50LnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkt
PnJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKGVsZW1lbnQpOwogCiAgICAgaWYgKG1fc2hl
ZXQpCiAgICAgICAgIGNsZWFyU2hlZXQoKTsKIAogICAgIC8vIElmIHdlJ3JlIGluIGRvY3VtZW50
IHRlYXJkb3duLCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55IG5vdGlmaWNhdGlvbiBvZiBv
dXIgc2hlZXQncyByZW1vdmFsLgotICAgIGlmIChkb2N1bWVudC0+aGFzTGl2aW5nUmVuZGVyVHJl
ZSgpKQotICAgICAgICBkb2N1bWVudC0+c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNT
dHlsZSk7CisgICAgaWYgKGRvY3VtZW50Lmhhc0xpdmluZ1JlbmRlclRyZWUoKSkKKyAgICAgICAg
ZG9jdW1lbnQuc3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiB9CiAKLXZv
aWQgSW5saW5lU3R5bGVTaGVldE93bmVyOjpjbGVhckRvY3VtZW50RGF0YShEb2N1bWVudCogZG9j
dW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIElubGluZVN0eWxlU2hlZXRPd25lcjo6Y2xl
YXJEb2N1bWVudERhdGEoRG9jdW1lbnQmIGRvY3VtZW50LCBFbGVtZW50JiBlbGVtZW50KQogewog
ICAgIGlmIChtX3NoZWV0KQogICAgICAgICBtX3NoZWV0LT5jbGVhck93bmVyTm9kZSgpOwogCi0g
ICAgaWYgKCFlbGVtZW50LT5pbkRvY3VtZW50KCkpCisgICAgaWYgKCFlbGVtZW50LmluRG9jdW1l
bnQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGRvY3VtZW50LT5zdHlsZVNoZWV0Q29sbGVjdGlv
bigpLT5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShlbGVtZW50KTsKKyAgICBkb2N1bWVu
dC5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShl
bGVtZW50KTsKIH0KIAotdm9pZCBJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNoaWxkcmVuQ2hhbmdl
ZChFbGVtZW50KiBlbGVtZW50KQordm9pZCBJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNoaWxkcmVu
Q2hhbmdlZChFbGVtZW50JiBlbGVtZW50KQogewotICAgIEFTU0VSVChlbGVtZW50KTsKICAgICBp
ZiAobV9pc1BhcnNpbmdDaGlsZHJlbikKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghZWxlbWVu
dC0+aW5Eb2N1bWVudCgpKQorICAgIGlmICghZWxlbWVudC5pbkRvY3VtZW50KCkpCiAgICAgICAg
IHJldHVybjsKICAgICBjcmVhdGVTaGVldEZyb21UZXh0Q29udGVudHMoZWxlbWVudCk7CiB9CiAK
LXZvaWQgSW5saW5lU3R5bGVTaGVldE93bmVyOjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oRWxlbWVu
dCogZWxlbWVudCkKK3ZvaWQgSW5saW5lU3R5bGVTaGVldE93bmVyOjpmaW5pc2hQYXJzaW5nQ2hp
bGRyZW4oRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0gICAgaWYg
KGVsZW1lbnQtPmluRG9jdW1lbnQoKSkKKyAgICBpZiAoZWxlbWVudC5pbkRvY3VtZW50KCkpCiAg
ICAgICAgIGNyZWF0ZVNoZWV0RnJvbVRleHRDb250ZW50cyhlbGVtZW50KTsKICAgICBtX2lzUGFy
c2luZ0NoaWxkcmVuID0gZmFsc2U7CiB9CiAKLXZvaWQgSW5saW5lU3R5bGVTaGVldE93bmVyOjpj
cmVhdGVTaGVldEZyb21UZXh0Q29udGVudHMoRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgSW5saW5l
U3R5bGVTaGVldE93bmVyOjpjcmVhdGVTaGVldEZyb21UZXh0Q29udGVudHMoRWxlbWVudCYgZWxl
bWVudCkKIHsKLSAgICBjcmVhdGVTaGVldChlbGVtZW50LCBUZXh0Tm9kZVRyYXZlcnNhbDo6Y29u
dGVudHNBc1N0cmluZyhlbGVtZW50KSk7CisgICAgY3JlYXRlU2hlZXQoZWxlbWVudCwgVGV4dE5v
ZGVUcmF2ZXJzYWw6OmNvbnRlbnRzQXNTdHJpbmcoJmVsZW1lbnQpKTsKIH0KIAogdm9pZCBJbmxp
bmVTdHlsZVNoZWV0T3duZXI6OmNsZWFyU2hlZXQoKQpAQCAtMTEzLDE5ICsxMDcsMTggQEAgdm9p
ZCBJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNsZWFyU2hlZXQoKQogICAgIG1fc2hlZXQucmVsZWFz
ZSgpLT5jbGVhck93bmVyTm9kZSgpOwogfQogCi1pbmxpbmUgYm9vbCBpc1ZhbGlkQ1NTQ29udGVu
dFR5cGUoRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQoraW5saW5l
IGJvb2wgaXNWYWxpZENTU0NvbnRlbnRUeXBlKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21p
Y1N0cmluZyYgdHlwZSkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0
cmluZywgY3NzQ29udGVudFR5cGUsICgidGV4dC9jc3MiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSk7CiAgICAgaWYgKHR5cGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICByZXR1cm4gZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpID8gZXF1YWxJZ25vcmlu
Z0Nhc2UodHlwZSwgY3NzQ29udGVudFR5cGUpIDogdHlwZSA9PSBjc3NDb250ZW50VHlwZTsKKyAg
ICByZXR1cm4gZWxlbWVudC5pc0hUTUxFbGVtZW50KCkgPyBlcXVhbElnbm9yaW5nQ2FzZSh0eXBl
LCBjc3NDb250ZW50VHlwZSkgOiB0eXBlID09IGNzc0NvbnRlbnRUeXBlOwogfQogCi12b2lkIElu
bGluZVN0eWxlU2hlZXRPd25lcjo6Y3JlYXRlU2hlZXQoRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
U3RyaW5nJiB0ZXh0KQordm9pZCBJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNyZWF0ZVNoZWV0KEVs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICBBU1NFUlQoZWxlbWVu
dCk7Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmluRG9jdW1lbnQoKSk7Ci0gICAgRG9jdW1lbnQmIGRv
Y3VtZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICBBU1NFUlQoZWxlbWVudC5pbkRvY3Vt
ZW50KCkpOworICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGVsZW1lbnQuZG9jdW1lbnQoKTsKICAg
ICBpZiAobV9zaGVldCkgewogICAgICAgICBpZiAobV9zaGVldC0+aXNMb2FkaW5nKCkpCiAgICAg
ICAgICAgICBkb2N1bWVudC5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT5yZW1vdmVQZW5kaW5nU2hl
ZXQoKTsKQEAgLTEzOCw3ICsxMzEsNyBAQCB2b2lkIElubGluZVN0eWxlU2hlZXRPd25lcjo6Y3Jl
YXRlU2hlZXQoCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBt
ZWRpYVF1ZXJpZXM7Ci0gICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICBpZiAo
ZWxlbWVudC5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIG1lZGlhUXVlcmllcyA9IE1lZGlhUXVl
cnlTZXQ6OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgobV9tZWRpYSk7CiAgICAgZWxz
ZQogICAgICAgICBtZWRpYVF1ZXJpZXMgPSBNZWRpYVF1ZXJ5U2V0OjpjcmVhdGUobV9tZWRpYSk7
CkBAIC0xNTQsNyArMTQ3LDcgQEAgdm9pZCBJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNyZWF0ZVNo
ZWV0KAogCiAgICAgbV9zaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGluZShlbGVtZW50
LCBLVVJMKCksIGRvY3VtZW50LmlucHV0RW5jb2RpbmcoKSk7CiAgICAgbV9zaGVldC0+c2V0TWVk
aWFRdWVyaWVzKG1lZGlhUXVlcmllcy5yZWxlYXNlKCkpOwotICAgIG1fc2hlZXQtPnNldFRpdGxl
KGVsZW1lbnQtPnRpdGxlKCkpOworICAgIG1fc2hlZXQtPnNldFRpdGxlKGVsZW1lbnQudGl0bGUo
KSk7CiAgICAgbV9zaGVldC0+Y29udGVudHMoKS0+cGFyc2VTdHJpbmdBdExpbmUodGV4dCwgbV9z
dGFydExpbmVOdW1iZXIuemVyb0Jhc2VkSW50KCksIG1faXNQYXJzaW5nQ2hpbGRyZW4pOwogCiAg
ICAgbV9sb2FkaW5nID0gZmFsc2U7CkBAIC0xNzAsMjAgKzE2MywxOCBAQCBib29sIElubGluZVN0
eWxlU2hlZXRPd25lcjo6aXNMb2FkaW5nKCkgCiAgICAgcmV0dXJuIG1fc2hlZXQgJiYgbV9zaGVl
dC0+aXNMb2FkaW5nKCk7CiB9CiAKLWJvb2wgSW5saW5lU3R5bGVTaGVldE93bmVyOjpzaGVldExv
YWRlZChEb2N1bWVudCogZG9jdW1lbnQpCitib29sIElubGluZVN0eWxlU2hlZXRPd25lcjo6c2hl
ZXRMb2FkZWQoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIEFTU0VSVChkb2N1bWVudCk7CiAg
ICAgaWYgKGlzTG9hZGluZygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBkb2N1bWVu
dC0+c3R5bGVTaGVldENvbGxlY3Rpb24oKS0+cmVtb3ZlUGVuZGluZ1NoZWV0KCk7CisgICAgZG9j
dW1lbnQuc3R5bGVTaGVldENvbGxlY3Rpb24oKS0+cmVtb3ZlUGVuZGluZ1NoZWV0KCk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5saW5lU3R5bGVTaGVldE93bmVyOjpzdGFydExvYWRp
bmdEeW5hbWljU2hlZXQoRG9jdW1lbnQqIGRvY3VtZW50KQordm9pZCBJbmxpbmVTdHlsZVNoZWV0
T3duZXI6OnN0YXJ0TG9hZGluZ0R5bmFtaWNTaGVldChEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0g
ICAgQVNTRVJUKGRvY3VtZW50KTsKLSAgICBkb2N1bWVudC0+c3R5bGVTaGVldENvbGxlY3Rpb24o
KS0+YWRkUGVuZGluZ1NoZWV0KCk7CisgICAgZG9jdW1lbnQuc3R5bGVTaGVldENvbGxlY3Rpb24o
KS0+YWRkUGVuZGluZ1NoZWV0KCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9J
bmxpbmVTdHlsZVNoZWV0T3duZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
SW5saW5lU3R5bGVTaGVldE93bmVyLmgJKHJldmlzaW9uIDE1NjM4MikKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9JbmxpbmVTdHlsZVNoZWV0T3duZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTgg
KzQxLDE4IEBAIHB1YmxpYzoKICAgICBDU1NTdHlsZVNoZWV0KiBzaGVldCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2hlZXQuZ2V0KCk7IH0KIAogICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7Ci0gICAg
Ym9vbCBzaGVldExvYWRlZChEb2N1bWVudCopOwotICAgIHZvaWQgc3RhcnRMb2FkaW5nRHluYW1p
Y1NoZWV0KERvY3VtZW50Kik7CisgICAgYm9vbCBzaGVldExvYWRlZChEb2N1bWVudCYpOworICAg
IHZvaWQgc3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KERvY3VtZW50Jik7CiAKLSAgICB2b2lkIGlu
c2VydGVkSW50b0RvY3VtZW50KERvY3VtZW50KiwgRWxlbWVudCopOwotICAgIHZvaWQgcmVtb3Zl
ZEZyb21Eb2N1bWVudChEb2N1bWVudCosIEVsZW1lbnQqKTsKLSAgICB2b2lkIGNsZWFyRG9jdW1l
bnREYXRhKERvY3VtZW50KiwgRWxlbWVudCopOwotICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKEVs
ZW1lbnQqKTsKLSAgICB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJlbihFbGVtZW50Kik7CisgICAg
dm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudChEb2N1bWVudCYsIEVsZW1lbnQmKTsKKyAgICB2b2lk
IHJlbW92ZWRGcm9tRG9jdW1lbnQoRG9jdW1lbnQmLCBFbGVtZW50Jik7CisgICAgdm9pZCBjbGVh
ckRvY3VtZW50RGF0YShEb2N1bWVudCYsIEVsZW1lbnQmKTsKKyAgICB2b2lkIGNoaWxkcmVuQ2hh
bmdlZChFbGVtZW50Jik7CisgICAgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oRWxlbWVudCYp
OwogCiBwcml2YXRlOgotICAgIHZvaWQgY3JlYXRlU2hlZXQoRWxlbWVudCosIGNvbnN0IFN0cmlu
ZyYgdGV4dCk7Ci0gICAgdm9pZCBjcmVhdGVTaGVldEZyb21UZXh0Q29udGVudHMoRWxlbWVudCop
OworICAgIHZvaWQgY3JlYXRlU2hlZXQoRWxlbWVudCYsIGNvbnN0IFN0cmluZyYgdGV4dCk7Cisg
ICAgdm9pZCBjcmVhdGVTaGVldEZyb21UZXh0Q29udGVudHMoRWxlbWVudCYpOwogICAgIHZvaWQg
Y2xlYXJTaGVldCgpOwogCiAgICAgYm9vbCBtX2lzUGFyc2luZ0NoaWxkcmVuOwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAkocmV2aXNpb24gMTU2MzgyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEzLDcgKzExMTMsNyBAQCBQYXNzUmVmUHRyPEVsZW1l
bnQ+IE5vZGU6OnF1ZXJ5U2VsZWN0b3IoCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAg
IFNlbGVjdG9yUXVlcnkqIHNlbGVjdG9yUXVlcnkgPSBkb2N1bWVudCgpLnNlbGVjdG9yUXVlcnlD
YWNoZSgpLmFkZChzZWxlY3RvcnMsICZkb2N1bWVudCgpLCBlYyk7CisgICAgU2VsZWN0b3JRdWVy
eSogc2VsZWN0b3JRdWVyeSA9IGRvY3VtZW50KCkuc2VsZWN0b3JRdWVyeUNhY2hlKCkuYWRkKHNl
bGVjdG9ycywgZG9jdW1lbnQoKSwgZWMpOwogICAgIGlmICghc2VsZWN0b3JRdWVyeSkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHNlbGVjdG9yUXVlcnktPnF1ZXJ5Rmlyc3QodGhpcyk7
CkBAIC0xMTI2LDcgKzExMjYsNyBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpxdWVyeVNl
bGVjdG9yCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFNlbGVjdG9yUXVlcnkqIHNl
bGVjdG9yUXVlcnkgPSBkb2N1bWVudCgpLnNlbGVjdG9yUXVlcnlDYWNoZSgpLmFkZChzZWxlY3Rv
cnMsICZkb2N1bWVudCgpLCBlYyk7CisgICAgU2VsZWN0b3JRdWVyeSogc2VsZWN0b3JRdWVyeSA9
IGRvY3VtZW50KCkuc2VsZWN0b3JRdWVyeUNhY2hlKCkuYWRkKHNlbGVjdG9ycywgZG9jdW1lbnQo
KSwgZWMpOwogICAgIGlmICghc2VsZWN0b3JRdWVyeSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
cmV0dXJuIHNlbGVjdG9yUXVlcnktPnF1ZXJ5QWxsKHRoaXMpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAJKHJldmlzaW9uIDE1NjM4MikKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Nyw3ICs2Nyw3IEBAIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6flByb2Nlc3NpbmdJ
bnN0cnUKICAgICAgICAgbV9jYWNoZWRTaGVldC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwogCiAgICAg
aWYgKGluRG9jdW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlv
bigpLT5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSh0aGlzKTsKKyAgICAgICAgZG9jdW1l
bnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9k
ZSgqdGhpcyk7CiB9CiAKIFN0cmluZyBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246Om5vZGVOYW1lKCkg
Y29uc3QKQEAgLTE5Niw3ICsxOTYsNyBAQCB2b2lkIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6c2V0
Q1NTU3R5bGVTCiAgICAgfQogCiAgICAgQVNTRVJUKG1faXNDU1MpOwotICAgIENTU1BhcnNlckNv
bnRleHQgcGFyc2VyQ29udGV4dCgmZG9jdW1lbnQoKSwgYmFzZVVSTCwgY2hhcnNldCk7CisgICAg
Q1NTUGFyc2VyQ29udGV4dCBwYXJzZXJDb250ZXh0KGRvY3VtZW50KCksIGJhc2VVUkwsIGNoYXJz
ZXQpOwogCiAgICAgUmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gbmV3U2hlZXQgPSBTdHlsZVNo
ZWV0Q29udGVudHM6OmNyZWF0ZShocmVmLCBwYXJzZXJDb250ZXh0KTsKIApAQCAtMjY3LDcgKzI2
Nyw3IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgUHJvY2UKICAgICBDaGFy
YWN0ZXJEYXRhOjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOwogICAgIGlmICghaW5zZXJ0
aW9uUG9pbnQtPmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7Ci0g
ICAgZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT5hZGRTdHlsZVNoZWV0Q2FuZGlk
YXRlTm9kZSh0aGlzLCBtX2NyZWF0ZWRCeVBhcnNlcik7CisgICAgZG9jdW1lbnQoKS5zdHlsZVNo
ZWV0Q29sbGVjdGlvbigpLT5hZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSgqdGhpcywgbV9jcmVh
dGVkQnlQYXJzZXIpOwogICAgIGNoZWNrU3R5bGVTaGVldCgpOwogICAgIHJldHVybiBJbnNlcnRp
b25Eb25lOwogfQpAQCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9u
OjpyZW1vdmVkRnJvbSgKICAgICBpZiAoIWluc2VydGlvblBvaW50LT5pbkRvY3VtZW50KCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBkb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9u
KCktPnJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKHRoaXMpOworICAgIGRvY3VtZW50KCku
c3R5bGVTaGVldENvbGxlY3Rpb24oKS0+cmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoKnRo
aXMpOwogCiAgICAgaWYgKG1fc2hlZXQpIHsKICAgICAgICAgQVNTRVJUKG1fc2hlZXQtPm93bmVy
Tm9kZSgpID09IHRoaXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAko
cmV2aXNpb24gMTU2MzgyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTgsNyArMjk4LDcgQEAgU2VsZWN0b3JRdWVyeTo6U2VsZWN0
b3JRdWVyeShjb25zdCBDU1NTZQogICAgIG1fc2VsZWN0b3JzLmluaXRpYWxpemUobV9zZWxlY3Rv
ckxpc3QpOwogfQogCi1TZWxlY3RvclF1ZXJ5KiBTZWxlY3RvclF1ZXJ5Q2FjaGU6OmFkZChjb25z
dCBBdG9taWNTdHJpbmcmIHNlbGVjdG9ycywgRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNlcHRpb25D
b2RlJiBlYykKK1NlbGVjdG9yUXVlcnkqIFNlbGVjdG9yUXVlcnlDYWNoZTo6YWRkKGNvbnN0IEF0
b21pY1N0cmluZyYgc2VsZWN0b3JzLCBEb2N1bWVudCYgZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBPd25QdHI8U2VsZWN0b3JRdWVyeT4g
Pjo6aXRlcmF0b3IgaXQgPSBtX2VudHJpZXMuZmluZChzZWxlY3RvcnMpOwogICAgIGlmIChpdCAh
PSBtX2VudHJpZXMuZW5kKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVy
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmgJKHJl
dmlzaW9uIDE1NjM4MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgcHJpdmF0ZToKIGNsYXNzIFNlbGVjdG9yUXVl
cnlDYWNoZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgU2Vs
ZWN0b3JRdWVyeSogYWRkKGNvbnN0IEF0b21pY1N0cmluZyYsIERvY3VtZW50KiwgRXhjZXB0aW9u
Q29kZSYpOworICAgIFNlbGVjdG9yUXVlcnkqIGFkZChjb25zdCBBdG9taWNTdHJpbmcmLCBEb2N1
bWVudCYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGludmFsaWRhdGUoKTsKIAogcHJpdmF0
ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwCShyZXZpc2lvbiAxNTYzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTQgKzc4LDE0IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotUGFzc1Jl
ZlB0cjxFZGl0Q29tbWFuZENvbXBvc2l0aW9uPiBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpjcmVh
dGUoRG9jdW1lbnQqIGRvY3VtZW50LAorUGFzc1JlZlB0cjxFZGl0Q29tbWFuZENvbXBvc2l0aW9u
PiBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LAogICAg
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHN0YXJ0aW5nU2VsZWN0aW9uLCBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24sIEVkaXRBY3Rpb24gZWRpdEFjdGlvbikKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEVkaXRDb21tYW5kQ29tcG9zaXRpb24oZG9jdW1lbnQsIHN0
YXJ0aW5nU2VsZWN0aW9uLCBlbmRpbmdTZWxlY3Rpb24sIGVkaXRBY3Rpb24pKTsKIH0KIAotRWRp
dENvbW1hbmRDb21wb3NpdGlvbjo6RWRpdENvbW1hbmRDb21wb3NpdGlvbihEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHN0YXJ0aW5nU2VsZWN0aW9uLCBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24sIEVkaXRBY3Rpb24gZWRpdEFjdGlvbikK
LSAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCitFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpFZGl0
Q29tbWFuZENvbXBvc2l0aW9uKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc3RhcnRpbmdTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1Nl
bGVjdGlvbiwgRWRpdEFjdGlvbiBlZGl0QWN0aW9uKQorICAgIDogbV9kb2N1bWVudCgmZG9jdW1l
bnQpCiAgICAgLCBtX3N0YXJ0aW5nU2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKQogICAgICwg
bV9lbmRpbmdTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKQogICAgICwgbV9zdGFydGluZ1Jvb3RF
ZGl0YWJsZUVsZW1lbnQoc3RhcnRpbmdTZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpKQpA
QCAtMjI2LDcgKzIyNiw3IEBAIEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIENvbXBvc2l0ZUVkaXRD
b20KICAgICB3aGlsZSAoY29tbWFuZCAmJiBjb21tYW5kLT5wYXJlbnQoKSkKICAgICAgICAgY29t
bWFuZCA9IGNvbW1hbmQtPnBhcmVudCgpOwogICAgIGlmICghY29tbWFuZC0+bV9jb21wb3NpdGlv
bikKLSAgICAgICAgY29tbWFuZC0+bV9jb21wb3NpdGlvbiA9IEVkaXRDb21tYW5kQ29tcG9zaXRp
b246OmNyZWF0ZSgmZG9jdW1lbnQoKSwgc3RhcnRpbmdTZWxlY3Rpb24oKSwgZW5kaW5nU2VsZWN0
aW9uKCksIGVkaXRpbmdBY3Rpb24oKSk7CisgICAgICAgIGNvbW1hbmQtPm1fY29tcG9zaXRpb24g
PSBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRpbmdTZWxl
Y3Rpb24oKSwgZW5kaW5nU2VsZWN0aW9uKCksIGVkaXRpbmdBY3Rpb24oKSk7CiAgICAgcmV0dXJu
IGNvbW1hbmQtPm1fY29tcG9zaXRpb24uZ2V0KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgJKHJldmlzaW9uIDE1NjM4MikKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBUZXh0OwogCiBjbGFzcyBFZGl0Q29tbWFuZENv
bXBvc2l0aW9uIDogcHVibGljIFVuZG9TdGVwIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxFZGl0Q29tbWFuZENvbXBvc2l0aW9uPiBjcmVhdGUoRG9jdW1lbnQqLCBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIEVkaXRBY3Rpb24pOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEVkaXRDb21tYW5kQ29tcG9zaXRpb24+IGNyZWF0ZShEb2N1bWVu
dCYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgRWRp
dEFjdGlvbik7CiAKICAgICB2aXJ0dWFsIHZvaWQgdW5hcHBseSgpIE9WRVJSSURFOwogICAgIHZp
cnR1YWwgdm9pZCByZWFwcGx5KCkgT1ZFUlJJREU7CkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoK
ICNlbmRpZgogCiBwcml2YXRlOgotICAgIEVkaXRDb21tYW5kQ29tcG9zaXRpb24oRG9jdW1lbnQq
LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzdGFydGluZ1NlbGVjdGlvbiwgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uLCBFZGl0QWN0aW9uKTsKKyAgICBFZGl0Q29tbWFu
ZENvbXBvc2l0aW9uKERvY3VtZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3RhcnRpbmdT
ZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlvbiwgRWRpdEFj
dGlvbik7CiAKICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAgVmlzaWJsZVNl
bGVjdGlvbiBtX3N0YXJ0aW5nU2VsZWN0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQm9keUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEJvZHlFbGVtZW50LmNwcAkocmV2aXNpb24gMTU2MzgyKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQm9keUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsMTAgKzIzOCw5IEBA
IHZvaWQgSFRNTEJvZHlFbGVtZW50OjpzZXRWTGluayhjb25zdCBTdHIKICAgICBzZXRBdHRyaWJ1
dGUodmxpbmtBdHRyLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbnQgYWRqdXN0Rm9yWm9vbShpbnQg
dmFsdWUsIERvY3VtZW50KiBkb2N1bWVudCkKK3N0YXRpYyBpbnQgYWRqdXN0Rm9yWm9vbShpbnQg
dmFsdWUsIEZyYW1lJiBmcmFtZSkKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJh
bWUoKTsKLSAgICBmbG9hdCB6b29tRmFjdG9yID0gZnJhbWUtPnBhZ2Vab29tRmFjdG9yKCkgKiBm
cmFtZS0+ZnJhbWVTY2FsZUZhY3RvcigpOworICAgIGZsb2F0IHpvb21GYWN0b3IgPSBmcmFtZS5w
YWdlWm9vbUZhY3RvcigpICogZnJhbWUuZnJhbWVTY2FsZUZhY3RvcigpOwogICAgIGlmICh6b29t
RmFjdG9yID09IDEpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAvLyBOZWVkZWQgYmVjYXVz
ZSBvZiB0cnVuY2F0aW9uIChyYXRoZXIgdGhhbiByb3VuZGluZykgd2hlbiBzY2FsaW5nIHVwLgpA
QCAtMjU1LDggKzI1NCwxMyBAQCBpbnQgSFRNTEJvZHlFbGVtZW50OjpzY3JvbGxMZWZ0KCkKICAg
ICBpZiAoIWRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkpCiAgICAgICAgIHJldHVybiAwOwogICAg
IGRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAg
RnJhbWVWaWV3KiB2aWV3ID0gZG9jdW1lbnQoKS52aWV3KCk7Ci0gICAgcmV0dXJuIHZpZXcgPyBh
ZGp1c3RGb3Jab29tKHZpZXctPnNjcm9sbFgoKSwgJmRvY3VtZW50KCkpIDogMDsKKyAgICBGcmFt
ZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAo
IXZpZXcpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBhZGp1c3RGb3Jab29tKHZpZXct
PnNjcm9sbFgoKSwgKmZyYW1lKTsKIH0KIAogdm9pZCBIVE1MQm9keUVsZW1lbnQ6OnNldFNjcm9s
bExlZnQoaW50IHNjcm9sbExlZnQpCkBAIC0yNzYsOCArMjgwLDEzIEBAIGludCBIVE1MQm9keUVs
ZW1lbnQ6OnNjcm9sbFRvcCgpCiAgICAgaWYgKCFkb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpKQog
ICAgICAgICByZXR1cm4gMDsKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpOwotICAgIEZyYW1lVmlldyogdmlldyA9IGRvY3VtZW50KCkudmlldygp
OwotICAgIHJldHVybiB2aWV3ID8gYWRqdXN0Rm9yWm9vbSh2aWV3LT5zY3JvbGxZKCksICZkb2N1
bWVudCgpKSA6IDA7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpOworICAg
IGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiAwOworICAgIEZyYW1lVmlldyogdmlldyA9IGZy
YW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gYWRqdXN0Rm9yWm9vbSh2aWV3LT5zY3JvbGxZKCksICpmcmFtZSk7CiB9CiAKIHZvaWQgSFRN
TEJvZHlFbGVtZW50OjpzZXRTY3JvbGxUb3AoaW50IHNjcm9sbFRvcCkKQEAgLTI5NiwxNiArMzA1
LDI2IEBAIGludCBIVE1MQm9keUVsZW1lbnQ6OnNjcm9sbEhlaWdodCgpCiB7CiAgICAgLy8gVXBk
YXRlIHRoZSBkb2N1bWVudCdzIGxheW91dC4KICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIEZyYW1lVmlldyogdmlldyA9IGRvY3VtZW50
KCkudmlldygpOwotICAgIHJldHVybiB2aWV3ID8gYWRqdXN0Rm9yWm9vbSh2aWV3LT5jb250ZW50
c0hlaWdodCgpLCAmZG9jdW1lbnQoKSkgOiAwOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKyAgICBGcmFt
ZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIGFkanVzdEZvclpvb20odmlldy0+Y29udGVudHNIZWlnaHQoKSwg
KmZyYW1lKTsKIH0KIAogaW50IEhUTUxCb2R5RWxlbWVudDo6c2Nyb2xsV2lkdGgoKQogewogICAg
IC8vIFVwZGF0ZSB0aGUgZG9jdW1lbnQncyBsYXlvdXQuCiAgICAgZG9jdW1lbnQoKS51cGRhdGVM
YXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBk
b2N1bWVudCgpLnZpZXcoKTsKLSAgICByZXR1cm4gdmlldyA/IGFkanVzdEZvclpvb20odmlldy0+
Y29udGVudHNXaWR0aCgpLCAmZG9jdW1lbnQoKSkgOiAwOworICAgIEZyYW1lKiBmcmFtZSA9IGRv
Y3VtZW50KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGFkanVzdEZvclpvb20odmlldy0+Y29udGVudHNXaWR0
aCgpLCAqZnJhbWUpOwogfQogCiB2b2lkIEhUTUxCb2R5RWxlbWVudDo6YWRkU3VicmVzb3VyY2VB
dHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxEb2N1bWVudC5oCShyZXZpc2lvbiAxNTYzODIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxEb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsOCArMTA0LDIwIEBA
IGlubGluZSBjb25zdCBIVE1MRG9jdW1lbnQqIHRvSFRNTERvY3VtZW4KICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgSFRNTERvY3VtZW50Kj4oZG9jdW1lbnQpOwogfQogCitpbmxpbmUgSFRN
TERvY3VtZW50JiB0b0hUTUxEb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oZG9jdW1lbnQuaXNIVE1MRG9jdW1lbnQoKSk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCY+KGRvY3VtZW50KTsKK30KKwor
aW5saW5lIGNvbnN0IEhUTUxEb2N1bWVudCYgdG9IVE1MRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQm
IGRvY3VtZW50KQoreworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGRvY3Vt
ZW50LmlzSFRNTERvY3VtZW50KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBIVE1M
RG9jdW1lbnQmPihkb2N1bWVudCk7Cit9CiAvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5n
IGFuIHVubmVjZXNzYXJ5IGNhc3QuCiB2b2lkIHRvSFRNTERvY3VtZW50KGNvbnN0IEhUTUxEb2N1
bWVudCopOwordm9pZCB0b0hUTUxEb2N1bWVudChjb25zdCBIVE1MRG9jdW1lbnQmKTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5r
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0Vs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxNTYzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxM
aW5rRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgSFRNTExpbmtF
bGVtZW50Ojp+SFRNTExpbmtFbGVtZW50KCkKICAgICAgICAgbV9jYWNoZWRTaGVldC0+cmVtb3Zl
Q2xpZW50KHRoaXMpOwogCiAgICAgaWYgKGluRG9jdW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQo
KS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSh0
aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT5yZW1vdmVT
dHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSgqdGhpcyk7CiAKICAgICBsaW5rTG9hZEV2ZW50U2VuZGVy
KCkuY2FuY2VsRXZlbnQodGhpcyk7CiB9CkBAIC0yNTUsNyArMjU1LDcgQEAgTm9kZTo6SW5zZXJ0
aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MTAogICAgIGlmIChtX2lzSW5TaGFkb3dUcmVlKQog
ICAgICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKIAotICAgIGRvY3VtZW50KCkuc3R5bGVTaGVl
dENvbGxlY3Rpb24oKS0+YWRkU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUodGhpcywgbV9jcmVhdGVk
QnlQYXJzZXIpOworICAgIGRvY3VtZW50KCkuc3R5bGVTaGVldENvbGxlY3Rpb24oKS0+YWRkU3R5
bGVTaGVldENhbmRpZGF0ZU5vZGUoKnRoaXMsIG1fY3JlYXRlZEJ5UGFyc2VyKTsKIAogICAgIHBy
b2Nlc3MoKTsKICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKQEAgLTI3Myw3ICsyNzMsNyBAQCB2
b2lkIEhUTUxMaW5rRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpCiAgICAgICAgIEFTU0VSVCgh
bV9zaGVldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgZG9jdW1lbnQoKS5zdHlsZVNo
ZWV0Q29sbGVjdGlvbigpLT5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSh0aGlzKTsKKyAg
ICBkb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCktPnJlbW92ZVN0eWxlU2hlZXRDYW5k
aWRhdGVOb2RlKCp0aGlzKTsKIAogICAgIGlmIChtX3NoZWV0KQogICAgICAgICBjbGVhclNoZWV0
KCk7CkBAIC0zMDAsNyArMzAwLDcgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldENTU1N0eWxl
U2hlZXQoYwogICAgIC8vIENvbXBsZXRpbmcgdGhlIHNoZWV0IGxvYWQgbWF5IGNhdXNlIHNjcmlw
dHMgdG8gZXhlY3V0ZS4KICAgICBSZWY8SFRNTExpbmtFbGVtZW50PiBwcm90ZWN0KCp0aGlzKTsK
IAotICAgIENTU1BhcnNlckNvbnRleHQgcGFyc2VyQ29udGV4dCgmZG9jdW1lbnQoKSwgYmFzZVVS
TCwgY2hhcnNldCk7CisgICAgQ1NTUGFyc2VyQ29udGV4dCBwYXJzZXJDb250ZXh0KGRvY3VtZW50
KCksIGJhc2VVUkwsIGNoYXJzZXQpOwogCiAgICAgaWYgKFJlZlB0cjxTdHlsZVNoZWV0Q29udGVu
dHM+IHJlc3RvcmVkU2hlZXQgPSBjb25zdF9jYXN0PENhY2hlZENTU1N0eWxlU2hlZXQqPihjYWNo
ZWRTdHlsZVNoZWV0KS0+cmVzdG9yZVBhcnNlZFN0eWxlU2hlZXQocGFyc2VyQ29udGV4dCkpIHsK
ICAgICAgICAgQVNTRVJUKHJlc3RvcmVkU2hlZXQtPmlzQ2FjaGVhYmxlKCkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTYzODIpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTYsMjEgKzE5NiwyMSBAQCBzdGF0aWMgRG9jdW1lbnRFbGVtZW50U2V0TWFwJiBkb2N1
bWVudFRvCiAgICAgcmV0dXJuIG1hcDsKIH0KIAotc3RhdGljIHZvaWQgYWRkRWxlbWVudFRvRG9j
dW1lbnRNYXAoSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCwgRG9jdW1lbnQqIGRvY3VtZW50KQor
c3RhdGljIHZvaWQgYWRkRWxlbWVudFRvRG9jdW1lbnRNYXAoSFRNTE1lZGlhRWxlbWVudCYgZWxl
bWVudCwgRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIERvY3VtZW50RWxlbWVudFNldE1hcCYg
bWFwID0gZG9jdW1lbnRUb0VsZW1lbnRTZXRNYXAoKTsKLSAgICBIYXNoU2V0PEhUTUxNZWRpYUVs
ZW1lbnQqPiBzZXQgPSBtYXAudGFrZShkb2N1bWVudCk7Ci0gICAgc2V0LmFkZChlbGVtZW50KTsK
LSAgICBtYXAuYWRkKGRvY3VtZW50LCBzZXQpOworICAgIEhhc2hTZXQ8SFRNTE1lZGlhRWxlbWVu
dCo+IHNldCA9IG1hcC50YWtlKCZkb2N1bWVudCk7CisgICAgc2V0LmFkZCgmZWxlbWVudCk7Cisg
ICAgbWFwLmFkZCgmZG9jdW1lbnQsIHNldCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlbW92ZUVsZW1l
bnRGcm9tRG9jdW1lbnRNYXAoSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCwgRG9jdW1lbnQqIGRv
Y3VtZW50KQorc3RhdGljIHZvaWQgcmVtb3ZlRWxlbWVudEZyb21Eb2N1bWVudE1hcChIVE1MTWVk
aWFFbGVtZW50JiBlbGVtZW50LCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgRG9jdW1lbnRF
bGVtZW50U2V0TWFwJiBtYXAgPSBkb2N1bWVudFRvRWxlbWVudFNldE1hcCgpOwotICAgIEhhc2hT
ZXQ8SFRNTE1lZGlhRWxlbWVudCo+IHNldCA9IG1hcC50YWtlKGRvY3VtZW50KTsKLSAgICBzZXQu
cmVtb3ZlKGVsZW1lbnQpOworICAgIEhhc2hTZXQ8SFRNTE1lZGlhRWxlbWVudCo+IHNldCA9IG1h
cC50YWtlKCZkb2N1bWVudCk7CisgICAgc2V0LnJlbW92ZSgmZWxlbWVudCk7CiAgICAgaWYgKCFz
ZXQuaXNFbXB0eSgpKQotICAgICAgICBtYXAuYWRkKGRvY3VtZW50LCBzZXQpOworICAgICAgICBt
YXAuYWRkKCZkb2N1bWVudCwgc2V0KTsKIH0KIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEp
CkBAIC0zMzcsNyArMzM3LDcgQEAgSFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChj
b25zdAogICAgICAgICBhZGRCZWhhdmlvclJlc3RyaWN0aW9uKFJlcXVpcmVVc2VyR2VzdHVyZUZv
ckxvYWRSZXN0cmljdGlvbik7CiAgICAgfQogCi0gICAgYWRkRWxlbWVudFRvRG9jdW1lbnRNYXAo
dGhpcywgJmRvY3VtZW50KTsKKyAgICBhZGRFbGVtZW50VG9Eb2N1bWVudE1hcCgqdGhpcywgZG9j
dW1lbnQpOwogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGRvY3VtZW50LnJlZ2lzdGVy
Rm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKQEAgLTM4OCw3ICsz
ODgsNyBAQCBIVE1MTWVkaWFFbGVtZW50Ojp+SFRNTE1lZGlhRWxlbWVudCgpCiAgICAgc2V0TWVk
aWFLZXlzKDApOwogI2VuZGlmCiAKLSAgICByZW1vdmVFbGVtZW50RnJvbURvY3VtZW50TWFwKHRo
aXMsICZkb2N1bWVudCgpKTsKKyAgICByZW1vdmVFbGVtZW50RnJvbURvY3VtZW50TWFwKCp0aGlz
LCBkb2N1bWVudCgpKTsKIAogICAgIG1fY29tcGxldGVseUxvYWRlZCA9IHRydWU7CiAgICAgaWYg
KG1fcGxheWVyKQpAQCAtNDExLDExICs0MTEsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpk
aWRNb3ZlVG9OZXdEb2N1bQogCiAgICAgaWYgKG9sZERvY3VtZW50KSB7CiAgICAgICAgIG9sZERv
Y3VtZW50LT51bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3ModGhpcyk7Ci0gICAgICAg
IHJlbW92ZUVsZW1lbnRGcm9tRG9jdW1lbnRNYXAodGhpcywgb2xkRG9jdW1lbnQpOworICAgICAg
ICByZW1vdmVFbGVtZW50RnJvbURvY3VtZW50TWFwKCp0aGlzLCAqb2xkRG9jdW1lbnQpOwogICAg
IH0KIAogICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyh0aGlz
KTsKLSAgICBhZGRFbGVtZW50VG9Eb2N1bWVudE1hcCh0aGlzLCAmZG9jdW1lbnQoKSk7CisgICAg
YWRkRWxlbWVudFRvRG9jdW1lbnRNYXAoKnRoaXMsIGRvY3VtZW50KCkpOwogCiAgICAgSFRNTEVs
ZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KG9sZERvY3VtZW50KTsKIH0KQEAgLTM3NjQsMTAg
KzM3NjQsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyU2F3VW5zCiAgICAg
Ly8gVGhlIE1lZGlhUGxheWVyIGNhbWUgYWNyb3NzIGNvbnRlbnQgaXQgY2Fubm90IGNvbXBsZXRl
bHkgaGFuZGxlLgogICAgIC8vIFRoaXMgaXMgbm9ybWFsbHkgYWNjZXB0YWJsZSBleGNlcHQgd2hl
biB3ZSBhcmUgaW4gYSBzdGFuZGFsb25lCiAgICAgLy8gTWVkaWFEb2N1bWVudC4gSWYgc28sIHRl
bGwgdGhlIGRvY3VtZW50IHdoYXQgaGFzIGhhcHBlbmVkLgotICAgIGlmIChkb2N1bWVudCgpLmlz
TWVkaWFEb2N1bWVudCgpKSB7Ci0gICAgICAgIE1lZGlhRG9jdW1lbnQqIG1lZGlhRG9jdW1lbnQg
PSB0b01lZGlhRG9jdW1lbnQoJmRvY3VtZW50KCkpOwotICAgICAgICBtZWRpYURvY3VtZW50LT5t
ZWRpYUVsZW1lbnRTYXdVbnN1cHBvcnRlZFRyYWNrcygpOwotICAgIH0KKyAgICBpZiAoZG9jdW1l
bnQoKS5pc01lZGlhRG9jdW1lbnQoKSkKKyAgICAgICAgdG9NZWRpYURvY3VtZW50KGRvY3VtZW50
KCkpLm1lZGlhRWxlbWVudFNhd1Vuc3VwcG9ydGVkVHJhY2tzKCk7CiB9CiAKIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJSZXNvdXJjZU5vdFN1cHBvcnRlZChNZWRpYVBsYXllciop
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5j
cHAJKHJldmlzaW9uIDE1NjM4MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbklt
YWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzNywxMiArNTM3LDEyIEBAIHZvaWQg
SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6c2ltdWxhdGVkTW8KICAgICBtX3BlbmRpbmdDbGlja0V2
ZW50RnJvbVNuYXBzaG90ID0gbnVsbHB0cjsKIH0KIAotc3RhdGljIGJvb2wgZG9jdW1lbnRIYWRS
ZWNlbnRVc2VyR2VzdHVyZShEb2N1bWVudCogZG9jdW1lbnQpCitzdGF0aWMgYm9vbCBkb2N1bWVu
dEhhZFJlY2VudFVzZXJHZXN0dXJlKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBkb3VibGUg
bGFzdEtub3duVXNlckdlc3R1cmVUaW1lc3RhbXAgPSBkb2N1bWVudC0+bGFzdEhhbmRsZWRVc2Vy
R2VzdHVyZVRpbWVzdGFtcCgpOworICAgIGRvdWJsZSBsYXN0S25vd25Vc2VyR2VzdHVyZVRpbWVz
dGFtcCA9IGRvY3VtZW50Lmxhc3RIYW5kbGVkVXNlckdlc3R1cmVUaW1lc3RhbXAoKTsKIAotICAg
IGlmIChkb2N1bWVudC0+ZnJhbWUoKSAhPSAmZG9jdW1lbnQtPnBhZ2UoKS0+bWFpbkZyYW1lKCkg
JiYgZG9jdW1lbnQtPnBhZ2UoKS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKSkKLSAgICAgICAgbGFz
dEtub3duVXNlckdlc3R1cmVUaW1lc3RhbXAgPSBzdGQ6Om1heChsYXN0S25vd25Vc2VyR2VzdHVy
ZVRpbWVzdGFtcCwgZG9jdW1lbnQtPnBhZ2UoKS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+bGFz
dEhhbmRsZWRVc2VyR2VzdHVyZVRpbWVzdGFtcCgpKTsKKyAgICBpZiAoZG9jdW1lbnQuZnJhbWUo
KSAhPSAmZG9jdW1lbnQucGFnZSgpLT5tYWluRnJhbWUoKSAmJiBkb2N1bWVudC5wYWdlKCktPm1h
aW5GcmFtZSgpLmRvY3VtZW50KCkpCisgICAgICAgIGxhc3RLbm93blVzZXJHZXN0dXJlVGltZXN0
YW1wID0gc3RkOjptYXgobGFzdEtub3duVXNlckdlc3R1cmVUaW1lc3RhbXAsIGRvY3VtZW50LnBh
Z2UoKS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+bGFzdEhhbmRsZWRVc2VyR2VzdHVyZVRpbWVz
dGFtcCgpKTsKIAogICAgIGlmIChtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAtIGxhc3RL
bm93blVzZXJHZXN0dXJlVGltZXN0YW1wIDwgYXV0b3N0YXJ0U29vbkFmdGVyVXNlckdlc3R1cmVU
aHJlc2hvbGQpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTUyLDcgKzU1Miw3IEBAIHN0YXRp
YyBib29sIGRvY3VtZW50SGFkUmVjZW50VXNlckdlc3R1cmUKIAogdm9pZCBIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50OjpjaGVja1NpemVDaGFuZ2VGb3JTbmFwc2hvdHRpbmcoKQogewotICAgIGlmICgh
bV9uZWVkc0NoZWNrRm9yU2l6ZUNoYW5nZSB8fCBtX3NuYXBzaG90RGVjaXNpb24gIT0gTWF5U25h
cHNob3RXaGVuUmVzaXplZCB8fCBkb2N1bWVudEhhZFJlY2VudFVzZXJHZXN0dXJlKCZkb2N1bWVu
dCgpKSkKKyAgICBpZiAoIW1fbmVlZHNDaGVja0ZvclNpemVDaGFuZ2UgfHwgbV9zbmFwc2hvdERl
Y2lzaW9uICE9IE1heVNuYXBzaG90V2hlblJlc2l6ZWQgfHwgZG9jdW1lbnRIYWRSZWNlbnRVc2Vy
R2VzdHVyZShkb2N1bWVudCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9uZWVkc0NoZWNr
Rm9yU2l6ZUNoYW5nZSA9IGZhbHNlOwpAQCAtNjI0LDcgKzYyNCw3IEBAIHZvaWQgSFRNTFBsdWdJ
bkltYWdlRWxlbWVudDo6c3ViZnJhbWVMb2EKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChkb2N1bWVudEhhZFJlY2VudFVzZXJHZXN0dXJlKCZkb2N1bWVudCgpKSkgeworICAgIGlm
IChkb2N1bWVudEhhZFJlY2VudFVzZXJHZXN0dXJlKGRvY3VtZW50KCkpKSB7CiAgICAgICAgIExP
RyhQbHVnaW5zLCAiJXAgUGx1Zy1pbiB3YXMgY3JlYXRlZCBzaG9ydGx5IGFmdGVyIGEgdXNlciBn
ZXN0dXJlLCBzZXQgdG8gcGxheSIsIHRoaXMpOwogICAgICAgICBtX3NuYXBzaG90RGVjaXNpb24g
PSBOZXZlclNuYXBzaG90OwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NjM4MikKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYx
LDcgQEAgSFRNTFN0eWxlRWxlbWVudDo6fkhUTUxTdHlsZUVsZW1lbnQoKQogewogICAgIC8vIER1
cmluZyB0ZWFyLWRvd24sIHdpbGxSZW1vdmUgaXNuJ3QgY2FsbGVkLCBzbyBtX3Njb3BlZFN0eWxl
UmVnaXN0cmF0aW9uU3RhdGUgbWF5IHN0aWxsIGJlIFJlZ2lzdGVyZWRBc1Njb3BlZCBvciBSZWdp
c3RlcmVkSW5TaGFkb3dSb290IGhlcmUuCiAgICAgLy8gVGhlcmVmb3JlIHdlIGNhbid0IEFTU0VS
VChtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgPT0gTm90UmVnaXN0ZXJlZCkuCi0gICAg
bV9zdHlsZVNoZWV0T3duZXIuY2xlYXJEb2N1bWVudERhdGEoJmRvY3VtZW50KCksIHRoaXMpOwor
ICAgIG1fc3R5bGVTaGVldE93bmVyLmNsZWFyRG9jdW1lbnREYXRhKGRvY3VtZW50KCksICp0aGlz
KTsKIAogICAgIHN0eWxlTG9hZEV2ZW50U2VuZGVyKCkuY2FuY2VsRXZlbnQodGhpcyk7CiB9CkBA
IC05NCw3ICs5NCw3IEBAIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY28K
IAogdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQogewotICAg
IG1fc3R5bGVTaGVldE93bmVyLmZpbmlzaFBhcnNpbmdDaGlsZHJlbih0aGlzKTsKKyAgICBtX3N0
eWxlU2hlZXRPd25lci5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKnRoaXMpOwogICAgIEhUTUxFbGVt
ZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKIH0KIApAQCAtMjA1LDcgKzIwNSw3IEBAIE5v
ZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRNTFMKIHsKICAgICBIVE1MRWxlbWVu
dDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblBvaW50KTsKICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQt
PmluRG9jdW1lbnQoKSkgewotICAgICAgICBtX3N0eWxlU2hlZXRPd25lci5pbnNlcnRlZEludG9E
b2N1bWVudCgmZG9jdW1lbnQoKSwgdGhpcyk7CisgICAgICAgIG1fc3R5bGVTaGVldE93bmVyLmlu
c2VydGVkSW50b0RvY3VtZW50KGRvY3VtZW50KCksICp0aGlzKTsKICNpZiBFTkFCTEUoU1RZTEVf
U0NPUEVEKQogICAgICAgICBpZiAobV9zY29wZWRTdHlsZVJlZ2lzdHJhdGlvblN0YXRlID09IE5v
dFJlZ2lzdGVyZWQgJiYgKHNjb3BlZCgpIHx8IGlzSW5TaGFkb3dUcmVlKCkpKQogICAgICAgICAg
ICAgcmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUoc2NvcGVkKCkpOwpAQCAtMjM3LDEzICsyMzcsMTMg
QEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YQogI2VuZGlmCiAKICAg
ICBpZiAoaW5zZXJ0aW9uUG9pbnQtPmluRG9jdW1lbnQoKSkKLSAgICAgICAgbV9zdHlsZVNoZWV0
T3duZXIucmVtb3ZlZEZyb21Eb2N1bWVudCgmZG9jdW1lbnQoKSwgdGhpcyk7CisgICAgICAgIG1f
c3R5bGVTaGVldE93bmVyLnJlbW92ZWRGcm9tRG9jdW1lbnQoZG9jdW1lbnQoKSwgKnRoaXMpOwog
fQogCiB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENo
YW5nZSYgY2hhbmdlKQogewogICAgIEhUTUxFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoY2hhbmdl
KTsKLSAgICBtX3N0eWxlU2hlZXRPd25lci5jaGlsZHJlbkNoYW5nZWQodGhpcyk7CisgICAgbV9z
dHlsZVNoZWV0T3duZXIuY2hpbGRyZW5DaGFuZ2VkKCp0aGlzKTsKIH0KIAogdm9pZCBIVE1MU3R5
bGVFbGVtZW50OjpkaXNwYXRjaFBlbmRpbmdMb2FkRXZlbnRzKCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCShyZXZpc2lvbiAxNTYzODIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsOSArNzMs
OSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsK
IAogICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2hl
ZXRPd25lci5pc0xvYWRpbmcoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaGVldExvYWRlZCgpIHsg
cmV0dXJuIG1fc3R5bGVTaGVldE93bmVyLnNoZWV0TG9hZGVkKCZkb2N1bWVudCgpKTsgfQorICAg
IHZpcnR1YWwgYm9vbCBzaGVldExvYWRlZCgpIHsgcmV0dXJuIG1fc3R5bGVTaGVldE93bmVyLnNo
ZWV0TG9hZGVkKGRvY3VtZW50KCkpOyB9CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUxvYWRlZFNo
ZWV0QW5kQWxsQ3JpdGljYWxTdWJyZXNvdXJjZXMoYm9vbCBlcnJvck9jY3VycmVkKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KCkgeyBtX3N0eWxlU2hlZXRPd25l
ci5zdGFydExvYWRpbmdEeW5hbWljU2hlZXQoJmRvY3VtZW50KCkpOyB9CisgICAgdmlydHVhbCB2
b2lkIHN0YXJ0TG9hZGluZ0R5bmFtaWNTaGVldCgpIHsgbV9zdHlsZVNoZWV0T3duZXIuc3RhcnRM
b2FkaW5nRHluYW1pY1NoZWV0KGRvY3VtZW50KCkpOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRk
U3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JikgY29uc3Q7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVudC5oCShyZXZpc2lvbiAxNTYzODIpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL01lZGlhRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjYs
OCArNjYsMjEgQEAgaW5saW5lIGNvbnN0IE1lZGlhRG9jdW1lbnQqIHRvTWVkaWFEb2N1bQogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBNZWRpYURvY3VtZW50Kj4oZG9jdW1lbnQpOwogfQog
CitpbmxpbmUgTWVkaWFEb2N1bWVudCYgdG9NZWRpYURvY3VtZW50KERvY3VtZW50JiBkb2N1bWVu
dCkKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihkb2N1bWVudC5pc01l
ZGlhRG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhRG9jdW1lbnQmPihk
b2N1bWVudCk7Cit9CisKK2lubGluZSBjb25zdCBNZWRpYURvY3VtZW50JiB0b01lZGlhRG9jdW1l
bnQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQoreworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGRvY3VtZW50LmlzTWVkaWFEb2N1bWVudCgpKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgTWVkaWFEb2N1bWVudCY+KGRvY3VtZW50KTsKK30KKwogLy8gVGhpcyB3
aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgogdm9pZCB0b01lZGlh
RG9jdW1lbnQoY29uc3QgTWVkaWFEb2N1bWVudCopOwordm9pZCB0b01lZGlhRG9jdW1lbnQoY29u
c3QgTWVkaWFEb2N1bWVudCYpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDE1NjM4MikKKysrIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjk1LDcgKzI5NSw3IEBAIHN0YXRpYyB2b2lkIGZpbGxNZWRpYUxpc3RDaGFpbihD
U1NSdWxlKiAKIAogc3RhdGljIFBhc3NPd25QdHI8Q1NTUGFyc2VyPiBjcmVhdGVDU1NQYXJzZXIo
RG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ1NTUGFyc2Vy
KGRvY3VtZW50ID8gQ1NTUGFyc2VyQ29udGV4dChkb2N1bWVudCkgOiBzdHJpY3RDU1NQYXJzZXJD
b250ZXh0KCkpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENTU1BhcnNlcihkb2N1bWVudCA/
IENTU1BhcnNlckNvbnRleHQoKmRvY3VtZW50KSA6IHN0cmljdENTU1BhcnNlckNvbnRleHQoKSkp
OwogfQogCiBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlPiBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRl
KGNvbnN0IEluc3BlY3RvckNTU0lkJiBzdHlsZUlkLCBQYXNzUmVmUHRyPENTU1N0eWxlRGVjbGFy
YXRpb24+IHN0eWxlLCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwCShyZXZpc2lvbiAxNTYz
ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzksNyArMTc5LDcgQEAgUGFzc1JlZlB0cjxGb3JtU3VibWlzc2lvbj4gRm9y
bVN1Ym1pc3NpbwogICAgICAgICB9CiAgICAgfQogCi0gICAgVGV4dEVuY29kaW5nIGRhdGFFbmNv
ZGluZyA9IGlzTWFpbHRvRm9ybSA/IFVURjhFbmNvZGluZygpIDogRm9ybURhdGFCdWlsZGVyOjpl
bmNvZGluZ0Zyb21BY2NlcHRDaGFyc2V0KGNvcGllZEF0dHJpYnV0ZXMuYWNjZXB0Q2hhcnNldCgp
LCAmZG9jdW1lbnQpOworICAgIFRleHRFbmNvZGluZyBkYXRhRW5jb2RpbmcgPSBpc01haWx0b0Zv
cm0gPyBVVEY4RW5jb2RpbmcoKSA6IEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RpbmdGcm9tQWNjZXB0
Q2hhcnNldChjb3BpZWRBdHRyaWJ1dGVzLmFjY2VwdENoYXJzZXQoKSwgZG9jdW1lbnQpOwogICAg
IFJlZlB0cjxET01Gb3JtRGF0YT4gZG9tRm9ybURhdGEgPSBET01Gb3JtRGF0YTo6Y3JlYXRlKGRh
dGFFbmNvZGluZy5lbmNvZGluZ0ZvckZvcm1TdWJtaXNzaW9uKCkpOwogICAgIFZlY3RvcjxwYWly
PFN0cmluZywgU3RyaW5nPiA+IGZvcm1WYWx1ZXM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHAJKHJldmlzaW9uIDE1
NjM4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRR
dW90ZWRTdHJpbmcoVmVjdG9yPGNoCiAgICAgfQogfQogCi1UZXh0RW5jb2RpbmcgRm9ybURhdGFC
dWlsZGVyOjplbmNvZGluZ0Zyb21BY2NlcHRDaGFyc2V0KGNvbnN0IFN0cmluZyYgYWNjZXB0Q2hh
cnNldCwgRG9jdW1lbnQqIGRvY3VtZW50KQorVGV4dEVuY29kaW5nIEZvcm1EYXRhQnVpbGRlcjo6
ZW5jb2RpbmdGcm9tQWNjZXB0Q2hhcnNldChjb25zdCBTdHJpbmcmIGFjY2VwdENoYXJzZXQsIERv
Y3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBTdHJpbmcgbm9ybWFsaXplZEFjY2VwdENoYXJzZXQg
PSBhY2NlcHRDaGFyc2V0OwogICAgIG5vcm1hbGl6ZWRBY2NlcHRDaGFyc2V0LnJlcGxhY2UoJywn
LCAnICcpOwpAQCAtOTQsNyArOTQsNyBAQCBUZXh0RW5jb2RpbmcgRm9ybURhdGFCdWlsZGVyOjpl
bmNvZGluZ0ZyCiAgICAgICAgICAgICByZXR1cm4gZW5jb2Rpbmc7CiAgICAgfQogCi0gICAgcmV0
dXJuIGRvY3VtZW50LT5pbnB1dEVuY29kaW5nKCk7CisgICAgcmV0dXJuIGRvY3VtZW50LmlucHV0
RW5jb2RpbmcoKTsKIH0KIAogVmVjdG9yPGNoYXI+IEZvcm1EYXRhQnVpbGRlcjo6Z2VuZXJhdGVV
bmlxdWVCb3VuZGFyeVN0cmluZygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Zvcm1EYXRhQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmgJKHJldmlzaW9uIDE1NjM4MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDcgKzMyLDcgQEAgY2xhc3MgVGV4dEVuY29kaW5nOwogY2xhc3MgRm9ybURhdGFC
dWlsZGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb3JtRGF0YUJ1aWxkZXIpOwogcHVi
bGljOgotICAgIHN0YXRpYyBUZXh0RW5jb2RpbmcgZW5jb2RpbmdGcm9tQWNjZXB0Q2hhcnNldChj
b25zdCBTdHJpbmcmIGFjY2VwdENoYXJzZXQsIERvY3VtZW50KiBkb2N1bWVudCk7CisgICAgc3Rh
dGljIFRleHRFbmNvZGluZyBlbmNvZGluZ0Zyb21BY2NlcHRDaGFyc2V0KGNvbnN0IFN0cmluZyYg
YWNjZXB0Q2hhcnNldCwgRG9jdW1lbnQmKTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbnMgdXNl
ZCBieSBIVE1MRm9ybUVsZW1lbnQgZm9yIG11bHRpLXBhcnQgZm9ybSBkYXRhCiAgICAgc3RhdGlj
IFZlY3RvcjxjaGFyPiBnZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwCShyZXZpc2lvbiAx
NTYzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNCw5ICsxMTQsOSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gY3JlYXRlRnVsCiAgICAgcmV0dXJuIGZ1bGxzY3JlZW5TdHlsZS5yZWxlYXNlKCk7
CiB9CiAKLVJlbmRlckZ1bGxTY3JlZW4qIFJlbmRlckZ1bGxTY3JlZW46OndyYXBSZW5kZXJlcihS
ZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyRWxlbWVudCogcGFyZW50LCBEb2N1bWVudCogZG9j
dW1lbnQpCitSZW5kZXJGdWxsU2NyZWVuKiBSZW5kZXJGdWxsU2NyZWVuOjp3cmFwUmVuZGVyZXIo
UmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlckVsZW1lbnQqIHBhcmVudCwgRG9jdW1lbnQmIGRv
Y3VtZW50KQogewotICAgIFJlbmRlckZ1bGxTY3JlZW4qIGZ1bGxzY3JlZW5SZW5kZXJlciA9IFJl
bmRlckZ1bGxTY3JlZW46OmNyZWF0ZUFub255bW91cygqZG9jdW1lbnQpOworICAgIFJlbmRlckZ1
bGxTY3JlZW4qIGZ1bGxzY3JlZW5SZW5kZXJlciA9IFJlbmRlckZ1bGxTY3JlZW46OmNyZWF0ZUFu
b255bW91cyhkb2N1bWVudCk7CiAgICAgZnVsbHNjcmVlblJlbmRlcmVyLT5zZXRTdHlsZShjcmVh
dGVGdWxsU2NyZWVuU3R5bGUoKSk7CiAgICAgaWYgKHBhcmVudCAmJiAhcGFyZW50LT5pc0NoaWxk
QWxsb3dlZChmdWxsc2NyZWVuUmVuZGVyZXIsIGZ1bGxzY3JlZW5SZW5kZXJlci0+c3R5bGUoKSkp
IHsKICAgICAgICAgZnVsbHNjcmVlblJlbmRlcmVyLT5kZXN0cm95KCk7CkBAIC0xNDQsNyArMTQ0
LDcgQEAgUmVuZGVyRnVsbFNjcmVlbiogUmVuZGVyRnVsbFNjcmVlbjo6d3JhcAogICAgICAgICBm
dWxsc2NyZWVuUmVuZGVyZXItPmFkZENoaWxkKG9iamVjdCk7CiAgICAgICAgIGZ1bGxzY3JlZW5S
ZW5kZXJlci0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgfQotICAg
IGRvY3VtZW50LT5zZXRGdWxsU2NyZWVuUmVuZGVyZXIoZnVsbHNjcmVlblJlbmRlcmVyKTsKKyAg
ICBkb2N1bWVudC5zZXRGdWxsU2NyZWVuUmVuZGVyZXIoZnVsbHNjcmVlblJlbmRlcmVyKTsKICAg
ICByZXR1cm4gZnVsbHNjcmVlblJlbmRlcmVyOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmgJKHJldmlzaW9uIDE1NjM4MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHZvaWQgY3JlYXRlUGxhY2Vob2xkZXIoUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4sIGNvbnN0IExheW91dFJlY3QmIGZyYW1lUmVjdCk7CiAKIAotICAg
IHN0YXRpYyBSZW5kZXJGdWxsU2NyZWVuKiB3cmFwUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiwgUmVu
ZGVyRWxlbWVudCosIERvY3VtZW50Kik7CisgICAgc3RhdGljIFJlbmRlckZ1bGxTY3JlZW4qIHdy
YXBSZW5kZXJlcihSZW5kZXJPYmplY3QqLCBSZW5kZXJFbGVtZW50KiwgRG9jdW1lbnQmKTsKICAg
ICB2b2lkIHVud3JhcFJlbmRlcmVyKCk7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
ci5oCShyZXZpc2lvbiAxNTYzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDE5ICs3Nywx
OSBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8UmVuZGVyTGF5ZXIqPiBtX2NsaWVudExheWVyczsK
IH07CiAKLWlubGluZSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogZ2V0UmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXJCeUlkKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5n
JiBpZCkKK2lubGluZSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogZ2V0UmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXJCeUlkKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5n
JiBpZCkKIHsKICAgICBpZiAoaWQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IGlmIChSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogcmVuZGVyUmVzb3VyY2UgPSBkb2N1bWVu
dC0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXNvdXJjZUJ5SWQoaWQpKQorICAgIGlmIChSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogcmVuZGVyUmVzb3VyY2UgPSBkb2N1bWVudC5hY2Nlc3NT
VkdFeHRlbnNpb25zKCktPnJlc291cmNlQnlJZChpZCkpCiAgICAgICAgIHJldHVybiByZW5kZXJS
ZXNvdXJjZTsKIAogICAgIHJldHVybiAwOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBSZW5kZXJl
cj4KLVJlbmRlcmVyKiBnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBBdG9taWNTdHJpbmcmIGlkKQorUmVuZGVyZXIqIGdldFJlbmRlclNWR1Jlc291cmNl
QnlJZChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgaWQpCiB7CiAgICAg
aWYgKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBjb250YWluZXIgPSBnZXRSZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lckJ5SWQoZG9jdW1lbnQsIGlkKSkKICAgICAgICAgcmV0dXJuIGNvbnRh
aW5lci0+Y2FzdDxSZW5kZXJlcj4oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwCShyZXZpc2lvbiAxNTYzODIpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBTVkdUZXh0UGF0aEVsZW1lbnQmIFJlbmRlclNWR1Rl
eHRQYXRoOjp0CiAKIFBhdGggUmVuZGVyU1ZHVGV4dFBhdGg6OmxheW91dFBhdGgoKSBjb25zdAog
ewotICAgIEVsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVs
ZW1lbnRGcm9tSVJJU3RyaW5nKHRleHRQYXRoRWxlbWVudCgpLmhyZWYoKSwgJmRvY3VtZW50KCkp
OworICAgIEVsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVs
ZW1lbnRGcm9tSVJJU3RyaW5nKHRleHRQYXRoRWxlbWVudCgpLmhyZWYoKSwgZG9jdW1lbnQoKSk7
CiAgICAgaWYgKCF0YXJnZXRFbGVtZW50IHx8ICF0YXJnZXRFbGVtZW50LT5oYXNUYWdOYW1lKFNW
R05hbWVzOjpwYXRoVGFnKSkKICAgICAgICAgcmV0dXJuIFBhdGgoKTsKICAgICAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0
LmNwcAkocmV2aXNpb24gMTU2MzgyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQzLDcgKzY0Myw3IEBA
IHZvaWQgd3JpdGVSZXNvdXJjZXMoVGV4dFN0cmVhbSYgdHMsIGNvbnMKICAgICAvLyBGb3Igbm93
IGxlYXZlIHRoZSBEUlQgb3V0cHV0IGFzIGlzLCBidXQgbGF0ZXIgb24gd2Ugc2hvdWxkIGNoYW5n
ZSB0aGlzIHNvIGN5Y2xlcyBhcmUgcHJvcGVybHkgaWdub3JlZCBpbiB0aGUgRFJUIG91dHB1dC4K
ICAgICBSZW5kZXJPYmplY3QmIHJlbmRlcmVyID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3QmPihv
YmplY3QpOwogICAgIGlmICghc3ZnU3R5bGUtPm1hc2tlclJlc291cmNlKCkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hc2tlciogbWFza2VyID0gZ2V0UmVuZGVy
U1ZHUmVzb3VyY2VCeUlkPFJlbmRlclNWR1Jlc291cmNlTWFza2VyPigmb2JqZWN0LmRvY3VtZW50
KCksIHN2Z1N0eWxlLT5tYXNrZXJSZXNvdXJjZSgpKSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZH
UmVzb3VyY2VNYXNrZXIqIG1hc2tlciA9IGdldFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5kZXJT
VkdSZXNvdXJjZU1hc2tlcj4ob2JqZWN0LmRvY3VtZW50KCksIHN2Z1N0eWxlLT5tYXNrZXJSZXNv
dXJjZSgpKSkgewogICAgICAgICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CiAgICAgICAg
ICAgICB0cyA8PCAiICI7CiAgICAgICAgICAgICB3cml0ZU5hbWVBbmRRdW90ZWRWYWx1ZSh0cywg
Im1hc2tlciIsIHN2Z1N0eWxlLT5tYXNrZXJSZXNvdXJjZSgpKTsKQEAgLTY1Myw3ICs2NTMsNyBA
QCB2b2lkIHdyaXRlUmVzb3VyY2VzKFRleHRTdHJlYW0mIHRzLCBjb25zCiAgICAgICAgIH0KICAg
ICB9CiAgICAgaWYgKCFzdmdTdHlsZS0+Y2xpcHBlclJlc291cmNlKCkuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIgPSBnZXRSZW5kZXJT
VkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyPigmb2JqZWN0LmRvY3VtZW50
KCksIHN2Z1N0eWxlLT5jbGlwcGVyUmVzb3VyY2UoKSkpIHsKKyAgICAgICAgaWYgKFJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlciogY2xpcHBlciA9IGdldFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXI+KG9iamVjdC5kb2N1bWVudCgpLCBzdmdTdHlsZS0+Y2xpcHBl
clJlc291cmNlKCkpKSB7CiAgICAgICAgICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKICAg
ICAgICAgICAgIHRzIDw8ICIgIjsKICAgICAgICAgICAgIHdyaXRlTmFtZUFuZFF1b3RlZFZhbHVl
KHRzLCAiY2xpcFBhdGgiLCBzdmdTdHlsZS0+Y2xpcHBlclJlc291cmNlKCkpOwpAQCAtNjY0LDcg
KzY2NCw3IEBAIHZvaWQgd3JpdGVSZXNvdXJjZXMoVGV4dFN0cmVhbSYgdHMsIGNvbnMKICAgICB9
CiAjaWYgRU5BQkxFKEZJTFRFUlMpCiAgICAgaWYgKCFzdmdTdHlsZS0+ZmlsdGVyUmVzb3VyY2Uo
KS5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlRmlsdGVyKiBmaWx0
ZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI+KCZv
YmplY3QuZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmZpbHRlclJlc291cmNlKCkpKSB7CisgICAgICAg
IGlmIChSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVyID0gZ2V0UmVuZGVyU1ZHUmVzb3Vy
Y2VCeUlkPFJlbmRlclNWR1Jlc291cmNlRmlsdGVyPihvYmplY3QuZG9jdW1lbnQoKSwgc3ZnU3R5
bGUtPmZpbHRlclJlc291cmNlKCkpKSB7CiAgICAgICAgICAgICB3cml0ZUluZGVudCh0cywgaW5k
ZW50KTsKICAgICAgICAgICAgIHRzIDw8ICIgIjsKICAgICAgICAgICAgIHdyaXRlTmFtZUFuZFF1
b3RlZFZhbHVlKHRzLCAiZmlsdGVyIiwgc3ZnU3R5bGUtPmZpbHRlclJlc291cmNlKCkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcAkocmV2
aXNpb24gMTU2MzgyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJj
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsMTAgKzE1NCwxMCBAQCBzdGF0aWMgaW5saW5l
IFN0cmluZyB0YXJnZXRSZWZlcmVuY2VGcm9tCiAgICAgZWxzZQogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIAotICAgIHJldHVybiBTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRp
ZmllckZyb21JUklTdHJpbmcodGFyZ2V0LCAmZWxlbWVudC0+ZG9jdW1lbnQoKSk7CisgICAgcmV0
dXJuIFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyh0YXJn
ZXQsIGVsZW1lbnQtPmRvY3VtZW50KCkpOwogfQogCi1zdGF0aWMgaW5saW5lIFJlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyKiBwYWludGluZ1Jlc291cmNlRnJvbVNWR1BhaW50KERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgU1ZHUGFpbnQ6OlNWR1BhaW50VHlwZSYgcGFpbnRUeXBlLCBjb25zdCBT
dHJpbmcmIHBhaW50VXJpLCBBdG9taWNTdHJpbmcmIGlkLCBib29sJiBoYXNQZW5kaW5nUmVzb3Vy
Y2UpCitzdGF0aWMgaW5saW5lIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBwYWludGluZ1Jl
c291cmNlRnJvbVNWR1BhaW50KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU1ZHUGFpbnQ6OlNW
R1BhaW50VHlwZSYgcGFpbnRUeXBlLCBjb25zdCBTdHJpbmcmIHBhaW50VXJpLCBBdG9taWNTdHJp
bmcmIGlkLCBib29sJiBoYXNQZW5kaW5nUmVzb3VyY2UpCiB7CiAgICAgaWYgKHBhaW50VHlwZSAh
PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUkkgJiYgcGFpbnRUeXBlICE9IFNWR1BhaW50OjpT
VkdfUEFJTlRUWVBFX1VSSV9SR0JDT0xPUikKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDgsNyAr
MjA4LDcgQEAgYm9vbCBTVkdSZXNvdXJjZXM6OmJ1aWxkQ2FjaGVkUmVzb3VyY2VzKAogICAgIGlm
IChjbGlwcGVyRmlsdGVyTWFza2VyVGFncygpLmNvbnRhaW5zKHRhZ05hbWUpKSB7CiAgICAgICAg
IGlmIChzdHlsZS0+aGFzQ2xpcHBlcigpKSB7CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgaWQo
c3R5bGUtPmNsaXBwZXJSZXNvdXJjZSgpKTsKLSAgICAgICAgICAgIGlmIChzZXRDbGlwcGVyKGdl
dFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI+KCZkb2N1bWVu
dCwgaWQpKSkKKyAgICAgICAgICAgIGlmIChzZXRDbGlwcGVyKGdldFJlbmRlclNWR1Jlc291cmNl
QnlJZDxSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI+KGRvY3VtZW50LCBpZCkpKQogICAgICAgICAg
ICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShleHRlbnNpb25zLCBpZCwgZWxlbWVudCk7
CkBAIC0yMTcsNyArMjE3LDcgQEAgYm9vbCBTVkdSZXNvdXJjZXM6OmJ1aWxkQ2FjaGVkUmVzb3Vy
Y2VzKAogI2lmIEVOQUJMRShGSUxURVJTKQogICAgICAgICBpZiAoc3R5bGUtPmhhc0ZpbHRlcigp
KSB7CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgaWQoc3R5bGUtPmZpbHRlclJlc291cmNlKCkp
OwotICAgICAgICAgICAgaWYgKHNldEZpbHRlcihnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXI+KCZkb2N1bWVudCwgaWQpKSkKKyAgICAgICAgICAgIGlmIChz
ZXRGaWx0ZXIoZ2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlkPFJlbmRlclNWR1Jlc291cmNlRmlsdGVy
Pihkb2N1bWVudCwgaWQpKSkKICAgICAgICAgICAgICAgICBmb3VuZFJlc291cmNlcyA9IHRydWU7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmVnaXN0ZXJQZW5kaW5nUmVzb3Vy
Y2UoZXh0ZW5zaW9ucywgaWQsIGVsZW1lbnQpOwpAQCAtMjI2LDcgKzIyNiw3IEBAIGJvb2wgU1ZH
UmVzb3VyY2VzOjpidWlsZENhY2hlZFJlc291cmNlcygKIAogICAgICAgICBpZiAoc3R5bGUtPmhh
c01hc2tlcigpKSB7CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgaWQoc3R5bGUtPm1hc2tlclJl
c291cmNlKCkpOwotICAgICAgICAgICAgaWYgKHNldE1hc2tlcihnZXRSZW5kZXJTVkdSZXNvdXJj
ZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI+KCZkb2N1bWVudCwgaWQpKSkKKyAgICAgICAg
ICAgIGlmIChzZXRNYXNrZXIoZ2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlkPFJlbmRlclNWR1Jlc291
cmNlTWFza2VyPihkb2N1bWVudCwgaWQpKSkKICAgICAgICAgICAgICAgICBmb3VuZFJlc291cmNl
cyA9IHRydWU7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmVnaXN0ZXJQZW5k
aW5nUmVzb3VyY2UoZXh0ZW5zaW9ucywgaWQsIGVsZW1lbnQpOwpAQCAtMjM1LDE5ICsyMzUsMTkg
QEAgYm9vbCBTVkdSZXNvdXJjZXM6OmJ1aWxkQ2FjaGVkUmVzb3VyY2VzKAogCiAgICAgaWYgKG1h
cmtlclRhZ3MoKS5jb250YWlucyh0YWdOYW1lKSAmJiBzdHlsZS0+aGFzTWFya2VycygpKSB7CiAg
ICAgICAgIEF0b21pY1N0cmluZyBtYXJrZXJTdGFydElkKHN0eWxlLT5tYXJrZXJTdGFydFJlc291
cmNlKCkpOwotICAgICAgICBpZiAoc2V0TWFya2VyU3RhcnQoZ2V0UmVuZGVyU1ZHUmVzb3VyY2VC
eUlkPFJlbmRlclNWR1Jlc291cmNlTWFya2VyPigmZG9jdW1lbnQsIG1hcmtlclN0YXJ0SWQpKSkK
KyAgICAgICAgaWYgKHNldE1hcmtlclN0YXJ0KGdldFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlcj4oZG9jdW1lbnQsIG1hcmtlclN0YXJ0SWQpKSkKICAgICAgICAg
ICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVn
aXN0ZXJQZW5kaW5nUmVzb3VyY2UoZXh0ZW5zaW9ucywgbWFya2VyU3RhcnRJZCwgZWxlbWVudCk7
CiAKICAgICAgICAgQXRvbWljU3RyaW5nIG1hcmtlck1pZElkKHN0eWxlLT5tYXJrZXJNaWRSZXNv
dXJjZSgpKTsKLSAgICAgICAgaWYgKHNldE1hcmtlck1pZChnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5
SWQ8UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI+KCZkb2N1bWVudCwgbWFya2VyTWlkSWQpKSkKKyAg
ICAgICAgaWYgKHNldE1hcmtlck1pZChnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXI+KGRvY3VtZW50LCBtYXJrZXJNaWRJZCkpKQogICAgICAgICAgICAgZm91
bmRSZXNvdXJjZXMgPSB0cnVlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZWdpc3RlclBl
bmRpbmdSZXNvdXJjZShleHRlbnNpb25zLCBtYXJrZXJNaWRJZCwgZWxlbWVudCk7CiAKICAgICAg
ICAgQXRvbWljU3RyaW5nIG1hcmtlckVuZElkKHN0eWxlLT5tYXJrZXJFbmRSZXNvdXJjZSgpKTsK
LSAgICAgICAgaWYgKHNldE1hcmtlckVuZChnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXI+KCZkb2N1bWVudCwgbWFya2VyRW5kSWQpKSkKKyAgICAgICAgaWYg
KHNldE1hcmtlckVuZChnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXI+KGRvY3VtZW50LCBtYXJrZXJFbmRJZCkpKQogICAgICAgICAgICAgZm91bmRSZXNvdXJj
ZXMgPSB0cnVlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNv
dXJjZShleHRlbnNpb25zLCBtYXJrZXJFbmRJZCwgZWxlbWVudCk7CkBAIC0yNTcsNyArMjU3LDcg
QEAgYm9vbCBTVkdSZXNvdXJjZXM6OmJ1aWxkQ2FjaGVkUmVzb3VyY2VzKAogICAgICAgICBpZiAo
c3R5bGUtPmhhc0ZpbGwoKSkgewogICAgICAgICAgICAgYm9vbCBoYXNQZW5kaW5nUmVzb3VyY2Ug
PSBmYWxzZTsKICAgICAgICAgICAgIEF0b21pY1N0cmluZyBpZDsKLSAgICAgICAgICAgIGlmIChz
ZXRGaWxsKHBhaW50aW5nUmVzb3VyY2VGcm9tU1ZHUGFpbnQoJmRvY3VtZW50LCBzdHlsZS0+Zmls
bFBhaW50VHlwZSgpLCBzdHlsZS0+ZmlsbFBhaW50VXJpKCksIGlkLCBoYXNQZW5kaW5nUmVzb3Vy
Y2UpKSkKKyAgICAgICAgICAgIGlmIChzZXRGaWxsKHBhaW50aW5nUmVzb3VyY2VGcm9tU1ZHUGFp
bnQoZG9jdW1lbnQsIHN0eWxlLT5maWxsUGFpbnRUeXBlKCksIHN0eWxlLT5maWxsUGFpbnRVcmko
KSwgaWQsIGhhc1BlbmRpbmdSZXNvdXJjZSkpKQogICAgICAgICAgICAgICAgIGZvdW5kUmVzb3Vy
Y2VzID0gdHJ1ZTsKICAgICAgICAgICAgIGVsc2UgaWYgKGhhc1BlbmRpbmdSZXNvdXJjZSkKICAg
ICAgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShleHRlbnNpb25zLCBpZCwgZWxl
bWVudCk7CkBAIC0yNjYsNyArMjY2LDcgQEAgYm9vbCBTVkdSZXNvdXJjZXM6OmJ1aWxkQ2FjaGVk
UmVzb3VyY2VzKAogICAgICAgICBpZiAoc3R5bGUtPmhhc1N0cm9rZSgpKSB7CiAgICAgICAgICAg
ICBib29sIGhhc1BlbmRpbmdSZXNvdXJjZSA9IGZhbHNlOwogICAgICAgICAgICAgQXRvbWljU3Ry
aW5nIGlkOwotICAgICAgICAgICAgaWYgKHNldFN0cm9rZShwYWludGluZ1Jlc291cmNlRnJvbVNW
R1BhaW50KCZkb2N1bWVudCwgc3R5bGUtPnN0cm9rZVBhaW50VHlwZSgpLCBzdHlsZS0+c3Ryb2tl
UGFpbnRVcmkoKSwgaWQsIGhhc1BlbmRpbmdSZXNvdXJjZSkpKQorICAgICAgICAgICAgaWYgKHNl
dFN0cm9rZShwYWludGluZ1Jlc291cmNlRnJvbVNWR1BhaW50KGRvY3VtZW50LCBzdHlsZS0+c3Ry
b2tlUGFpbnRUeXBlKCksIHN0eWxlLT5zdHJva2VQYWludFVyaSgpLCBpZCwgaGFzUGVuZGluZ1Jl
c291cmNlKSkpCiAgICAgICAgICAgICAgICAgZm91bmRSZXNvdXJjZXMgPSB0cnVlOwogICAgICAg
ICAgICAgZWxzZSBpZiAoaGFzUGVuZGluZ1Jlc291cmNlKQogICAgICAgICAgICAgICAgIHJlZ2lz
dGVyUGVuZGluZ1Jlc291cmNlKGV4dGVuc2lvbnMsIGlkLCBlbGVtZW50KTsKQEAgLTI3NSw3ICsy
NzUsNyBAQCBib29sIFNWR1Jlc291cmNlczo6YnVpbGRDYWNoZWRSZXNvdXJjZXMoCiAKICAgICBp
ZiAoY2hhaW5hYmxlUmVzb3VyY2VUYWdzKCkuY29udGFpbnModGFnTmFtZSkpIHsKICAgICAgICAg
QXRvbWljU3RyaW5nIGlkKHRhcmdldFJlZmVyZW5jZUZyb21SZXNvdXJjZShlbGVtZW50KSk7Ci0g
ICAgICAgIGlmIChzZXRMaW5rZWRSZXNvdXJjZShnZXRSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
ckJ5SWQoJmRvY3VtZW50LCBpZCkpKQorICAgICAgICBpZiAoc2V0TGlua2VkUmVzb3VyY2UoZ2V0
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXJCeUlkKGRvY3VtZW50LCBpZCkpKQogICAgICAgICAg
ICAgZm91bmRSZXNvdXJjZXMgPSB0cnVlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZWdp
c3RlclBlbmRpbmdSZXNvdXJjZShleHRlbnNpb25zLCBpZCwgZWxlbWVudCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcAkocmV2aXNpb24gMTU2MzgyKQor
KysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0OCw3ICsyNDgsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVSZW5kZXJlcklmTmVlZGVk
KEVsZW1lCiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgaWYgKGRvY3VtZW50Lndl
YmtpdElzRnVsbFNjcmVlbigpICYmIGRvY3VtZW50LndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxl
bWVudCgpID09ICZlbGVtZW50KSB7Ci0gICAgICAgIG5ld1JlbmRlcmVyID0gUmVuZGVyRnVsbFNj
cmVlbjo6d3JhcFJlbmRlcmVyKG5ld1JlbmRlcmVyLCBwYXJlbnRSZW5kZXJlciwgJmRvY3VtZW50
KTsKKyAgICAgICAgbmV3UmVuZGVyZXIgPSBSZW5kZXJGdWxsU2NyZWVuOjp3cmFwUmVuZGVyZXIo
bmV3UmVuZGVyZXIsIHBhcmVudFJlbmRlcmVyLCBkb2N1bWVudCk7CiAgICAgICAgIGlmICghbmV3
UmVuZGVyZXIpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NjM4MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbHRHbHlwaEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MCw3ICs5MCw3IEBAIFJlbmRlckVsZW1lbnQqIFNWR0FsdEdseXBoRWxlbWVudDo6Y3JlYXQKIGJv
b2wgU1ZHQWx0R2x5cGhFbGVtZW50OjpoYXNWYWxpZEdseXBoRWxlbWVudHMoVmVjdG9yPFN0cmlu
Zz4mIGdseXBoTmFtZXMpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHRhcmdldDsKLSAgICBFbGVtZW50
KiBlbGVtZW50ID0gdGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoZ2V0QXR0cmlidXRlKFhMaW5r
TmFtZXM6OmhyZWZBdHRyKSwgJmRvY3VtZW50KCksICZ0YXJnZXQpOworICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSB0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhnZXRBdHRyaWJ1dGUoWExpbmtOYW1l
czo6aHJlZkF0dHIpLCBkb2N1bWVudCgpLCAmdGFyZ2V0KTsKICAgICBpZiAoIWVsZW1lbnQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1h
Z2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFn
ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTYzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHZvaWQg
U1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc28KICAgICAgICAgcmV0dXJuOwogCiAg
ICAgU3RyaW5nIGlkOwotICAgIEVsZW1lbnQqIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFy
Z2V0RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZigpLCAmZG9jdW1lbnQoKSwgJmlkKTsKKyAgICBF
bGVtZW50KiB0YXJnZXQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3Ry
aW5nKGhyZWYoKSwgZG9jdW1lbnQoKSwgJmlkKTsKICAgICBpZiAoIXRhcmdldCkgewogICAgICAg
ICBpZiAoaWQuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmVxdWVzdEltYWdlUmVzb3VyY2UoKTsK
QEAgLTIwNiw3ICsyMDYsNyBAQCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVJbWFnZUVs
ZW1lCiB7CiAgICAgaWYgKG1fY2FjaGVkSW1hZ2UpCiAgICAgICAgIHJldHVybiBGRUltYWdlOjpj
cmVhdGVXaXRoSW1hZ2UoZmlsdGVyLCBtX2NhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJl
bmRlcmVyKCkpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOwotICAgIHJldHVybiBGRUltYWdlOjpj
cmVhdGVXaXRoSVJJUmVmZXJlbmNlKGZpbHRlciwgJmRvY3VtZW50KCksIGhyZWYoKSwgcHJlc2Vy
dmVBc3BlY3RSYXRpbygpKTsKKyAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlV2l0aElSSVJlZmVy
ZW5jZShmaWx0ZXIsIGRvY3VtZW50KCksIGhyZWYoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsK
IH0KIAogdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxz
KExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0dseXBoUmVmRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0dseXBoUmVmRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NjM4MikKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdHbHlwaFJlZkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1
OCw3IEBAIGJvb2wgU1ZHR2x5cGhSZWZFbGVtZW50OjpoYXNWYWxpZEdseXBoRWwKIHsKICAgICAv
LyBGSVhNRTogV2Ugb25seSBzdXBwb3J0IHhsaW5rOmhyZWYgc28gZmFyLgogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDc4NwotICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSB0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhnZXRBdHRyaWJ1dGUoWExpbmtOYW1l
czo6aHJlZkF0dHIpLCAmZG9jdW1lbnQoKSwgJmdseXBoTmFtZSk7CisgICAgRWxlbWVudCogZWxl
bWVudCA9IHRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGdldEF0dHJpYnV0ZShYTGlua05hbWVz
OjpocmVmQXR0ciksIGRvY3VtZW50KCksICZnbHlwaE5hbWUpOwogICAgIGlmICghZWxlbWVudCB8
fCAhZWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6Z2x5cGhUYWcpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMTU2MzgyKQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3MSw3ICsxNzEsNyBAQCBib29sIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6Y29s
bGVjdEdyCiAgICAgICAgIHByb2Nlc3NlZEdyYWRpZW50cy5hZGQoY3VycmVudCk7CiAKICAgICAg
ICAgLy8gUmVzcGVjdCB4bGluazpocmVmLCB0YWtlIGF0dHJpYnV0ZXMgZnJvbSByZWZlcmVuY2Vk
IGVsZW1lbnQKLSAgICAgICAgTm9kZSogcmVmTm9kZSA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0
RWxlbWVudEZyb21JUklTdHJpbmcoY3VycmVudC0+aHJlZigpLCAmZG9jdW1lbnQoKSk7CisgICAg
ICAgIE5vZGUqIHJlZk5vZGUgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJ
U3RyaW5nKGN1cnJlbnQtPmhyZWYoKSwgZG9jdW1lbnQoKSk7CiAgICAgICAgIGlmIChyZWZOb2Rl
ICYmIChyZWZOb2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpsaW5lYXJHcmFkaWVudFRhZykgfHwg
cmVmTm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6cmFkaWFsR3JhZGllbnRUYWcpKSkgewogICAg
ICAgICAgICAgY3VycmVudCA9IHRvU1ZHR3JhZGllbnRFbGVtZW50KHJlZk5vZGUpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmNwcAkocmV2aXNpb24gMTU2MzgyKQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBTVkdNUGF0aEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291
cgogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgaWQ7Ci0gICAgRWxlbWVudCogdGFyZ2V0
ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCksICZk
b2N1bWVudCgpLCAmaWQpOworICAgIEVsZW1lbnQqIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6
dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZigpLCBkb2N1bWVudCgpLCAmaWQpOwogICAg
IGlmICghdGFyZ2V0KSB7CiAgICAgICAgIC8vIERvIG5vdCByZWdpc3RlciBhcyBwZW5kaW5nIGlm
IHdlIGFyZSBhbHJlYWR5IHBlbmRpbmcgdGhpcyByZXNvdXJjZS4KICAgICAgICAgaWYgKGRvY3Vt
ZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5pc0VsZW1lbnRQZW5kaW5nUmVzb3VyY2UodGhp
cywgaWQpKQpAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgU1ZHTVBhdGhFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2UKIAogU1ZHUGF0aEVsZW1lbnQqIFNWR01QYXRoRWxlbWVudDo6cGF0aEVsZW1l
bnQoKQogewotICAgIEVsZW1lbnQqIHRhcmdldCA9IHRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5n
KGhyZWYoKSwgJmRvY3VtZW50KCkpOworICAgIEVsZW1lbnQqIHRhcmdldCA9IHRhcmdldEVsZW1l
bnRGcm9tSVJJU3RyaW5nKGhyZWYoKSwgZG9jdW1lbnQoKSk7CiAgICAgaWYgKHRhcmdldCAmJiB0
YXJnZXQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnBhdGhUYWcpKQogICAgICAgICByZXR1cm4gdG9T
VkdQYXRoRWxlbWVudCh0YXJnZXQpOwogICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTYzODIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjks
NyArMjI5LDcgQEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6Y29sbGVjdFBhdHRlcm5BdAogICAg
ICAgICBwcm9jZXNzZWRQYXR0ZXJucy5hZGQoY3VycmVudCk7CiAKICAgICAgICAgLy8gUmVzcGVj
dCB4bGluazpocmVmLCB0YWtlIGF0dHJpYnV0ZXMgZnJvbSByZWZlcmVuY2VkIGVsZW1lbnQKLSAg
ICAgICAgRWxlbWVudCogcmVmRWxlbWVudCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVu
dEZyb21JUklTdHJpbmcoY3VycmVudC0+aHJlZigpLCAmZG9jdW1lbnQoKSk7CisgICAgICAgIEVs
ZW1lbnQqIHJlZkVsZW1lbnQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJ
U3RyaW5nKGN1cnJlbnQtPmhyZWYoKSwgZG9jdW1lbnQoKSk7CiAgICAgICAgIGlmIChyZWZFbGVt
ZW50ICYmIGlzU1ZHUGF0dGVybkVsZW1lbnQocmVmRWxlbWVudCkpIHsKICAgICAgICAgICAgIGN1
cnJlbnQgPSB0b1NWR1BhdHRlcm5FbGVtZW50KHJlZkVsZW1lbnQpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24g
MTU2MzgyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw3ICsxODksNyBAQCBib29sIFNWR1JhZGlhbEdyYWRp
ZW50RWxlbWVudDo6Y29sbGVjdEdyCiAgICAgICAgIHByb2Nlc3NlZEdyYWRpZW50cy5hZGQoY3Vy
cmVudCk7CiAKICAgICAgICAgLy8gUmVzcGVjdCB4bGluazpocmVmLCB0YWtlIGF0dHJpYnV0ZXMg
ZnJvbSByZWZlcmVuY2VkIGVsZW1lbnQKLSAgICAgICAgTm9kZSogcmVmTm9kZSA9IFNWR1VSSVJl
ZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoY3VycmVudC0+aHJlZigpLCAmZG9j
dW1lbnQoKSk7CisgICAgICAgIE5vZGUqIHJlZk5vZGUgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdl
dEVsZW1lbnRGcm9tSVJJU3RyaW5nKGN1cnJlbnQtPmhyZWYoKSwgZG9jdW1lbnQoKSk7CiAgICAg
ICAgIGlmIChyZWZOb2RlICYmIChyZWZOb2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpyYWRpYWxH
cmFkaWVudFRhZykgfHwgcmVmTm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6bGluZWFyR3JhZGll
bnRUYWcpKSkgewogICAgICAgICAgICAgY3VycmVudCA9IHRvU1ZHR3JhZGllbnRFbGVtZW50KHJl
Zk5vZGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAkocmV2
aXNpb24gMTU2MzgyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgaW5saW5lIFNWR1N0eWxlRWxlbWVudDo6
U1ZHU3R5bGVFbGVtZW50KAogCiBTVkdTdHlsZUVsZW1lbnQ6On5TVkdTdHlsZUVsZW1lbnQoKQog
ewotICAgIG1fc3R5bGVTaGVldE93bmVyLmNsZWFyRG9jdW1lbnREYXRhKCZkb2N1bWVudCgpLCB0
aGlzKTsKKyAgICBtX3N0eWxlU2hlZXRPd25lci5jbGVhckRvY3VtZW50RGF0YShkb2N1bWVudCgp
LCAqdGhpcyk7CiB9CiAKIFBhc3NSZWZQdHI8U1ZHU3R5bGVFbGVtZW50PiBTVkdTdHlsZUVsZW1l
bnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCYgZG9jdW1l
bnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQpAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgU1ZHU3R5
bGVFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb24KIAogdm9pZCBTVkdTdHlsZUVsZW1lbnQ6OmZp
bmlzaFBhcnNpbmdDaGlsZHJlbigpCiB7Ci0gICAgbV9zdHlsZVNoZWV0T3duZXIuZmluaXNoUGFy
c2luZ0NoaWxkcmVuKHRoaXMpOworICAgIG1fc3R5bGVTaGVldE93bmVyLmZpbmlzaFBhcnNpbmdD
aGlsZHJlbigqdGhpcyk7CiAgICAgU1ZHRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7
CiB9CiAKQEAgLTE0NCw3ICsxNDQsNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1
ZXN0IFNWR1N0CiB7CiAgICAgU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKHJvb3RQYXJlbnQpOwog
ICAgIGlmIChyb290UGFyZW50LT5pbkRvY3VtZW50KCkpCi0gICAgICAgIG1fc3R5bGVTaGVldE93
bmVyLmluc2VydGVkSW50b0RvY3VtZW50KCZkb2N1bWVudCgpLCB0aGlzKTsKKyAgICAgICAgbV9z
dHlsZVNoZWV0T3duZXIuaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoZG9jdW1lbnQoKSwgKnRoaXMpOwog
ICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwogfQogCkBAIC0xNTIsMTMgKzE1MiwxMyBAQCB2b2lk
IFNWR1N0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpCiB7CiAgICAgU1ZHRWxlbWVudDo6
cmVtb3ZlZEZyb20ocm9vdFBhcmVudCk7CiAgICAgaWYgKHJvb3RQYXJlbnQtPmluRG9jdW1lbnQo
KSkKLSAgICAgICAgbV9zdHlsZVNoZWV0T3duZXIucmVtb3ZlZEZyb21Eb2N1bWVudCgmZG9jdW1l
bnQoKSwgdGhpcyk7CisgICAgICAgIG1fc3R5bGVTaGVldE93bmVyLnJlbW92ZWRGcm9tRG9jdW1l
bnQoZG9jdW1lbnQoKSwgKnRoaXMpOwogfQogCiB2b2lkIFNWR1N0eWxlRWxlbWVudDo6Y2hpbGRy
ZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJiBjaGFuZ2UpCiB7CiAgICAgU1ZHRWxlbWVudDo6
Y2hpbGRyZW5DaGFuZ2VkKGNoYW5nZSk7Ci0gICAgbV9zdHlsZVNoZWV0T3duZXIuY2hpbGRyZW5D
aGFuZ2VkKHRoaXMpOworICAgIG1fc3R5bGVTaGVldE93bmVyLmNoaWxkcmVuQ2hhbmdlZCgqdGhp
cyk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmgJKHJldmlz
aW9uIDE1NjM4MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNjEsOCArNjEsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBm
aW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRpbmcoKSBj
b25zdCB7IHJldHVybiBtX3N0eWxlU2hlZXRPd25lci5pc0xvYWRpbmcoKTsgfQotICAgIHZpcnR1
YWwgYm9vbCBzaGVldExvYWRlZCgpIE9WRVJSSURFIHsgcmV0dXJuIG1fc3R5bGVTaGVldE93bmVy
LnNoZWV0TG9hZGVkKCZkb2N1bWVudCgpKTsgfQotICAgIHZpcnR1YWwgdm9pZCBzdGFydExvYWRp
bmdEeW5hbWljU2hlZXQoKSBPVkVSUklERSB7IG1fc3R5bGVTaGVldE93bmVyLnN0YXJ0TG9hZGlu
Z0R5bmFtaWNTaGVldCgmZG9jdW1lbnQoKSk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hlZXRMb2Fk
ZWQoKSBPVkVSUklERSB7IHJldHVybiBtX3N0eWxlU2hlZXRPd25lci5zaGVldExvYWRlZChkb2N1
bWVudCgpKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzdGFydExvYWRpbmdEeW5hbWljU2hlZXQoKSBP
VkVSUklERSB7IG1fc3R5bGVTaGVldE93bmVyLnN0YXJ0TG9hZGluZ0R5bmFtaWNTaGVldChkb2N1
bWVudCgpKTsgfQogICAgIHZpcnR1YWwgVGltZXI8U1ZHRWxlbWVudD4qIHN2Z0xvYWRFdmVudFRp
bWVyKCkgT1ZFUlJJREUgeyByZXR1cm4gJm1fc3ZnTG9hZEV2ZW50VGltZXI7IH0KIAogICAgIElu
bGluZVN0eWxlU2hlZXRPd25lciBtX3N0eWxlU2hlZXRPd25lcjsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1RSZWZFbGVtZW50LmNwcAkocmV2aXNpb24gMTU2MzgyKQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDcgKzE3NSw3
IEBAIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OmRldGFjaFRhcmdldCgpCiAKICAgICAvLyBNYXJrIHRo
ZSByZWZlcmVuY2VkIElEIGFzIHBlbmRpbmcuCiAgICAgU3RyaW5nIGlkOwotICAgIFNWR1VSSVJl
ZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZigpLCAmZG9jdW1lbnQoKSwg
JmlkKTsKKyAgICBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGhy
ZWYoKSwgZG9jdW1lbnQoKSwgJmlkKTsKICAgICBpZiAoIWlkLmlzRW1wdHkoKSkKICAgICAgICAg
ZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPmFkZFBlbmRpbmdSZXNvdXJjZShpZCwg
dGhpcyk7CiB9CkBAIC0yNTUsNyArMjU1LDcgQEAgdm9pZCBTVkdUUmVmRWxlbWVudDo6YnVpbGRQ
ZW5kaW5nUmVzb3VyYwogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgaWQ7Ci0gICAgUmVm
UHRyPEVsZW1lbnQ+IHRhcmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21J
UklTdHJpbmcoaHJlZigpLCAmZG9jdW1lbnQoKSwgJmlkKTsKKyAgICBSZWZQdHI8RWxlbWVudD4g
dGFyZ2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVm
KCksIGRvY3VtZW50KCksICZpZCk7CiAgICAgaWYgKCF0YXJnZXQuZ2V0KCkpIHsKICAgICAgICAg
aWYgKGlkLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTYzODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYwLDcgKzE2MCw3IEBAIHZvaWQgU1ZHVGV4dFBhdGhFbGVtZW50OjpidWlsZFBlbmRpbmdSZXMK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGlkOwotICAgIEVsZW1lbnQqIHRhcmdldCA9
IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZigpLCAmZG9j
dW1lbnQoKSwgJmlkKTsKKyAgICBFbGVtZW50KiB0YXJnZXQgPSBTVkdVUklSZWZlcmVuY2U6OnRh
cmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGhyZWYoKSwgZG9jdW1lbnQoKSwgJmlkKTsKICAgICBp
ZiAoIXRhcmdldCkgewogICAgICAgICAvLyBEbyBub3QgcmVnaXN0ZXIgYXMgcGVuZGluZyBpZiB3
ZSBhcmUgYWxyZWFkeSBwZW5kaW5nIHRoaXMgcmVzb3VyY2UuCiAgICAgICAgIGlmIChkb2N1bWVu
dCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+aXNFbGVtZW50UGVuZGluZ1Jlc291cmNlKHRoaXMs
IGlkKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVUklSZWZlcmVuY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVUklSZWZlcmVuY2UuY3BwCShyZXZpc2lv
biAxNTYzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVVJJUmVmZXJlbmNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDYsMjYgKzQ2LDI0IEBAIGJvb2wgU1ZHVVJJUmVmZXJlbmNlOjppc0tu
b3duQXR0cmlidXRlKGMKICAgICByZXR1cm4gYXR0ck5hbWUubWF0Y2hlcyhYTGlua05hbWVzOjpo
cmVmQXR0cik7CiB9CiAKLVN0cmluZyBTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmll
ckZyb21JUklTdHJpbmcoY29uc3QgU3RyaW5nJiB1cmwsIERvY3VtZW50KiBkb2N1bWVudCkKK1N0
cmluZyBTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcoY29u
c3QgU3RyaW5nJiB1cmwsIERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBBU1NFUlQoZG9jdW1l
bnQpOwogICAgIHNpemVfdCBzdGFydCA9IHVybC5maW5kKCcjJyk7CiAgICAgaWYgKHN0YXJ0ID09
IG5vdEZvdW5kKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAotICAgIEtVUkwgYmFz
ZSA9IHN0YXJ0ID8gS1VSTChkb2N1bWVudC0+YmFzZVVSSSgpLCB1cmwuc3Vic3RyaW5nKDAsIHN0
YXJ0KSkgOiBkb2N1bWVudC0+YmFzZVVSSSgpOworICAgIEtVUkwgYmFzZSA9IHN0YXJ0ID8gS1VS
TChkb2N1bWVudC5iYXNlVVJJKCksIHVybC5zdWJzdHJpbmcoMCwgc3RhcnQpKSA6IGRvY3VtZW50
LmJhc2VVUkkoKTsKICAgICBTdHJpbmcgZnJhZ21lbnRJZGVudGlmaWVyID0gdXJsLnN1YnN0cmlu
ZyhzdGFydCk7CiAgICAgS1VSTCBrdXJsKGJhc2UsIGZyYWdtZW50SWRlbnRpZmllcik7Ci0gICAg
aWYgKGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIoa3VybCwgZG9jdW1lbnQtPnVybCgp
KSkKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcihrdXJsLCBkb2N1bWVu
dC51cmwoKSkpCiAgICAgICAgIHJldHVybiBmcmFnbWVudElkZW50aWZpZXIuc3Vic3RyaW5nKDEp
OwogCiAgICAgLy8gVGhlIHVybCBkb2Vzbid0IGhhdmUgYW55IGZyYWdtZW50IGlkZW50aWZpZXIu
CiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgS1VSTCB1cmxG
cm9tSVJJU3RyaW5nV2l0aEZyYWdtZW50SWRlbnRpZmllcihjb25zdCBTdHJpbmcmIHVybCwgRG9j
dW1lbnQqIGRvY3VtZW50LCBTdHJpbmcmIGZyYWdtZW50SWRlbnRpZmllcikKK3N0YXRpYyBpbmxp
bmUgS1VSTCB1cmxGcm9tSVJJU3RyaW5nV2l0aEZyYWdtZW50SWRlbnRpZmllcihjb25zdCBTdHJp
bmcmIHVybCwgRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmcmIGZyYWdtZW50SWRlbnRpZmllcikK
IHsKLSAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAgIHNpemVfdCBzdGFydE9mRnJhZ21lbnRJZGVu
dGlmaWVyID0gdXJsLmZpbmQoJyMnKTsKICAgICBpZiAoc3RhcnRPZkZyYWdtZW50SWRlbnRpZmll
ciA9PSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuIEtVUkwoKTsKQEAgLTczLDE0ICs3MSwxNCBA
QCBzdGF0aWMgaW5saW5lIEtVUkwgdXJsRnJvbUlSSVN0cmluZ1dpdGhGCiAgICAgLy8gRXhjbHVk
ZSB0aGUgJyMnIGNoYXJhY3RlciB3aGVuIGRldGVybWluaW5nIHRoZSBmcmFnbWVudElkZW50aWZp
ZXIuCiAgICAgZnJhZ21lbnRJZGVudGlmaWVyID0gdXJsLnN1YnN0cmluZyhzdGFydE9mRnJhZ21l
bnRJZGVudGlmaWVyICsgMSk7CiAgICAgaWYgKHN0YXJ0T2ZGcmFnbWVudElkZW50aWZpZXIpIHsK
LSAgICAgICAgS1VSTCBiYXNlKGRvY3VtZW50LT5iYXNlVVJJKCksIHVybC5zdWJzdHJpbmcoMCwg
c3RhcnRPZkZyYWdtZW50SWRlbnRpZmllcikpOworICAgICAgICBLVVJMIGJhc2UoZG9jdW1lbnQu
YmFzZVVSSSgpLCB1cmwuc3Vic3RyaW5nKDAsIHN0YXJ0T2ZGcmFnbWVudElkZW50aWZpZXIpKTsK
ICAgICAgICAgcmV0dXJuIEtVUkwoYmFzZSwgdXJsLnN1YnN0cmluZyhzdGFydE9mRnJhZ21lbnRJ
ZGVudGlmaWVyKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEtVUkwoZG9jdW1lbnQtPmJhc2VVUkko
KSwgdXJsLnN1YnN0cmluZyhzdGFydE9mRnJhZ21lbnRJZGVudGlmaWVyKSk7CisgICAgcmV0dXJu
IEtVUkwoZG9jdW1lbnQuYmFzZVVSSSgpLCB1cmwuc3Vic3RyaW5nKHN0YXJ0T2ZGcmFnbWVudElk
ZW50aWZpZXIpKTsKIH0KIAotRWxlbWVudCogU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50
RnJvbUlSSVN0cmluZyhjb25zdCBTdHJpbmcmIGlyaSwgRG9jdW1lbnQqIGRvY3VtZW50LCBTdHJp
bmcqIGZyYWdtZW50SWRlbnRpZmllciwgRG9jdW1lbnQqIGV4dGVybmFsRG9jdW1lbnQpCitFbGVt
ZW50KiBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGNvbnN0IFN0
cmluZyYgaXJpLCBEb2N1bWVudCYgZG9jdW1lbnQsIFN0cmluZyogZnJhZ21lbnRJZGVudGlmaWVy
LCBEb2N1bWVudCogZXh0ZXJuYWxEb2N1bWVudCkKIHsKICAgICAvLyBJZiB0aGVyZSdzIG5vIGZy
YWdtZW50IGlkZW50aWZpZXIgY29udGFpbmVkIHdpdGhpbiB0aGUgSVJJIHN0cmluZywgd2UgY2Fu
J3QgbG9va3VwIGFuIGVsZW1lbnQuCiAgICAgU3RyaW5nIGlkOwpAQCAtMTA0LDcgKzEwMiw3IEBA
IEVsZW1lbnQqIFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEYKICAgICBpZiAoaXNFeHRl
cm5hbFVSSVJlZmVyZW5jZShpcmksIGRvY3VtZW50KSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAg
ICByZXR1cm4gZG9jdW1lbnQtPmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICByZXR1cm4gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwogfQogCiB2b2lkIFNWR1VSSVJlZmVyZW5jZTo6YWRkU3Vw
cG9ydGVkQXR0cmlidXRlcyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+JiBzdXBwb3J0ZWRBdHRyaWJ1
dGVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VSSVJlZmVyZW5jZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVUklSZWZlcmVuY2UuaAkocmV2aXNpb24gMTU2
MzgyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VSSVJlZmVyZW5jZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNywxOSArMzcsMTggQEAgcHVibGljOgogICAgIGJvb2wgaXNLbm93bkF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdm9pZCBhZGRTdXBwb3J0ZWRBdHRyaWJ1dGVz
KEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4mKTsKIAotICAgIHN0YXRpYyBTdHJpbmcgZnJhZ21lbnRJ
ZGVudGlmaWVyRnJvbUlSSVN0cmluZyhjb25zdCBTdHJpbmcmLCBEb2N1bWVudCopOwotICAgIHN0
YXRpYyBFbGVtZW50KiB0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhjb25zdCBTdHJpbmcmLCBE
b2N1bWVudCosIFN0cmluZyogPSAwLCBEb2N1bWVudCogPSAwKTsKKyAgICBzdGF0aWMgU3RyaW5n
IGZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnQm
KTsKKyAgICBzdGF0aWMgRWxlbWVudCogdGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoY29uc3Qg
U3RyaW5nJiwgRG9jdW1lbnQmLCBTdHJpbmcqID0gMCwgRG9jdW1lbnQqID0gMCk7CiAKLSAgICBz
dGF0aWMgaW5saW5lIGJvb2wgaXNFeHRlcm5hbFVSSVJlZmVyZW5jZShjb25zdCBTdHJpbmcmIHVy
aSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0V4dGVybmFs
VVJJUmVmZXJlbmNlKGNvbnN0IFN0cmluZyYgdXJpLCBEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAg
ewogICAgICAgICAvLyBGcmFnbWVudC1vbmx5IFVSSXMgYXJlIGFsd2F5cyBpbnRlcm5hbAogICAg
ICAgICBpZiAodXJpLnN0YXJ0c1dpdGgoJyMnKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgICAgICAvLyBJZiB0aGUgVVJJIG1hdGNoZXMgb3VyIGRvY3VtZW50cyBVUkwsIHdlJ3Jl
IGRlYWxpbmcgd2l0aCBhIGxvY2FsIHJlZmVyZW5jZS4KLSAgICAgICAgQVNTRVJUKGRvY3VtZW50
KTsKLSAgICAgICAgS1VSTCB1cmwgPSBkb2N1bWVudC0+Y29tcGxldGVVUkwodXJpKTsKLSAgICAg
ICAgcmV0dXJuICFlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyKHVybCwgZG9jdW1lbnQt
PnVybCgpKTsKKyAgICAgICAgS1VSTCB1cmwgPSBkb2N1bWVudC5jb21wbGV0ZVVSTCh1cmkpOwor
ICAgICAgICByZXR1cm4gIWVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIodXJsLCBkb2N1
bWVudC51cmwoKSk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1VzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTYzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lk
IFNWR1VzZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lCiAKIERvY3VtZW50KiBTVkdVc2VF
bGVtZW50OjpyZWZlcmVuY2VkRG9jdW1lbnQoKSBjb25zdAogewotICAgIGlmICghaXNFeHRlcm5h
bFVSSVJlZmVyZW5jZShocmVmKCksICZkb2N1bWVudCgpKSkKKyAgICBpZiAoIWlzRXh0ZXJuYWxV
UklSZWZlcmVuY2UoaHJlZigpLCBkb2N1bWVudCgpKSkKICAgICAgICAgcmV0dXJuICZkb2N1bWVu
dCgpOwogICAgIHJldHVybiBleHRlcm5hbERvY3VtZW50KCk7CiB9CkBAIC0yMzksNyArMjM5LDcg
QEAgdm9pZCBTVkdVc2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKAogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KSkgewotICAgICAgICBib29sIGlzRXh0ZXJuYWxSZWZlcmVuY2UgPSBpc0V4dGVybmFsVVJJUmVm
ZXJlbmNlKGhyZWYoKSwgJmRvY3VtZW50KCkpOworICAgICAgICBib29sIGlzRXh0ZXJuYWxSZWZl
cmVuY2UgPSBpc0V4dGVybmFsVVJJUmVmZXJlbmNlKGhyZWYoKSwgZG9jdW1lbnQoKSk7CiAgICAg
ICAgIGlmIChpc0V4dGVybmFsUmVmZXJlbmNlKSB7CiAgICAgICAgICAgICBLVVJMIHVybCA9IGRv
Y3VtZW50KCkuY29tcGxldGVVUkwoaHJlZigpKTsKICAgICAgICAgICAgIGlmICh1cmwuaGFzRnJh
Z21lbnRJZGVudGlmaWVyKCkpIHsKQEAgLTQwOSw3ICs0MDksNyBAQCB2b2lkIFNWR1VzZUVsZW1l
bnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBp
ZDsKLSAgICBFbGVtZW50KiB0YXJnZXQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRG
cm9tSVJJU3RyaW5nKGhyZWYoKSwgJmRvY3VtZW50KCksICZpZCwgZXh0ZXJuYWxEb2N1bWVudCgp
KTsKKyAgICBFbGVtZW50KiB0YXJnZXQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRG
cm9tSVJJU3RyaW5nKGhyZWYoKSwgZG9jdW1lbnQoKSwgJmlkLCBleHRlcm5hbERvY3VtZW50KCkp
OwogICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQtPmluRG9jdW1lbnQoKSkgewogICAgICAgICAv
LyBJZiB3ZSBjYW4ndCBmaW5kIHRoZSB0YXJnZXQgb2YgYW4gZXh0ZXJuYWwgZWxlbWVudCwganVz
dCBnaXZlIHVwLgogICAgICAgICAvLyBXZSBjYW4ndCBvYnNlcnZlIGlmIHRoZSB0YXJnZXQgc29t
ZXdoZW4gZW50ZXJzIHRoZSBleHRlcm5hbCBkb2N1bWVudCwgbm9yIHNob3VsZCB3ZSBkbyBpdC4K
QEAgLTY0Myw3ICs2NDMsOCBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6OmJ1aWxkSW5zdGFuY2VUcmVl
KFNWCiAKIGJvb2wgU1ZHVXNlRWxlbWVudDo6aGFzQ3ljbGVVc2VSZWZlcmVuY2luZyhTVkdVc2VF
bGVtZW50KiB1c2UsIFNWR0VsZW1lbnRJbnN0YW5jZSogdGFyZ2V0SW5zdGFuY2UsIFNWR0VsZW1l
bnQqJiBuZXdUYXJnZXQpCiB7Ci0gICAgRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IFNWR1VSSVJl
ZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcodXNlLT5ocmVmKCksIHJlZmVyZW5j
ZWREb2N1bWVudCgpKTsKKyAgICBBU1NFUlQocmVmZXJlbmNlZERvY3VtZW50KCkpOworICAgIEVs
ZW1lbnQqIHRhcmdldEVsZW1lbnQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9t
SVJJU3RyaW5nKHVzZS0+aHJlZigpLCAqcmVmZXJlbmNlZERvY3VtZW50KCkpOwogICAgIG5ld1Rh
cmdldCA9IDA7CiAgICAgaWYgKHRhcmdldEVsZW1lbnQgJiYgdGFyZ2V0RWxlbWVudC0+aXNTVkdF
bGVtZW50KCkpCiAgICAgICAgIG5ld1RhcmdldCA9IHRvU1ZHRWxlbWVudCh0YXJnZXRFbGVtZW50
KTsKQEAgLTcxNSw3ICs3MTYsOCBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6OmV4cGFuZFVzZUVsZW1l
bnRzSW5TCiAgICAgICAgIFNWR1VzZUVsZW1lbnQqIHVzZSA9IHRvU1ZHVXNlRWxlbWVudChlbGVt
ZW50KTsKICAgICAgICAgQVNTRVJUKCF1c2UtPmNhY2hlZERvY3VtZW50SXNTdGlsbExvYWRpbmco
KSk7CiAKLSAgICAgICAgRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IFNWR1VSSVJlZmVyZW5jZTo6
dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcodXNlLT5ocmVmKCksIHJlZmVyZW5jZWREb2N1bWVu
dCgpKTsKKyAgICAgICAgQVNTRVJUKHJlZmVyZW5jZWREb2N1bWVudCgpKTsKKyAgICAgICAgRWxl
bWVudCogdGFyZ2V0RWxlbWVudCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21J
UklTdHJpbmcodXNlLT5ocmVmKCksICpyZWZlcmVuY2VkRG9jdW1lbnQoKSk7CiAgICAgICAgIFNW
R0VsZW1lbnQqIHRhcmdldCA9IDA7CiAgICAgICAgIGlmICh0YXJnZXRFbGVtZW50ICYmIHRhcmdl
dEVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQogICAgICAgICAgICAgdGFyZ2V0ID0gdG9TVkdFbGVt
ZW50KHRhcmdldEVsZW1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9T
VkdTTUlMRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NjM4MikKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjYsNyArMTY2LDcgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyYwog
ICAgIGlmIChocmVmLmlzRW1wdHkoKSkKICAgICAgICAgdGFyZ2V0ID0gcGFyZW50Tm9kZSgpICYm
IHBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVtZW50KHBhcmVudE5vZGUoKSkg
OiAwOwogICAgIGVsc2UKLSAgICAgICAgdGFyZ2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRF
bGVtZW50RnJvbUlSSVN0cmluZyhocmVmLCAmZG9jdW1lbnQoKSwgJmlkKTsKKyAgICAgICAgdGFy
Z2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmLCBk
b2N1bWVudCgpLCAmaWQpOwogICAgIFNWR0VsZW1lbnQqIHN2Z1RhcmdldCA9IHRhcmdldCAmJiB0
YXJnZXQtPmlzU1ZHRWxlbWVudCgpID8gdG9TVkdFbGVtZW50KHRhcmdldCkgOiAwOwogCiAgICAg
aWYgKHN2Z1RhcmdldCAmJiAhc3ZnVGFyZ2V0LT5pbkRvY3VtZW50KCkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAkocmV2
aXNpb24gMTU2MzgyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDkgQEAgRkVJbWFnZTo6RkVJ
bWFnZShGaWx0ZXIqIGZpbHRlciwgUGFzc1JlZgogewogfQogCi1GRUltYWdlOjpGRUltYWdlKEZp
bHRlciogZmlsdGVyLCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29u
c3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyYgcHJlc2VydmVBc3BlY3RSYXRpbykKK0ZFSW1hZ2U6
OkZFSW1hZ2UoRmlsdGVyKiBmaWx0ZXIsIERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5n
JiBocmVmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvJiBwcmVzZXJ2ZUFzcGVjdFJhdGlv
KQogICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlcikKLSAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQp
CisgICAgLCBtX2RvY3VtZW50KCZkb2N1bWVudCkKICAgICAsIG1faHJlZihocmVmKQogICAgICwg
bV9wcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pCiB7CkBAIC02MCw3ICs2
MCw3IEBAIFBhc3NSZWZQdHI8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlV2l0aEkKICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEZFSW1hZ2UoZmlsdGVyLCBpbWFnZSwgcHJlc2VydmVBc3BlY3RSYXRp
bykpOwogfQogCi1QYXNzUmVmUHRyPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZVdpdGhJUklSZWZl
cmVuY2UoRmlsdGVyKiBmaWx0ZXIsIERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBo
cmVmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQor
UGFzc1JlZlB0cjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKEZpbHRl
ciogZmlsdGVyLCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3Qg
U1ZHUHJlc2VydmVBc3BlY3RSYXRpbyYgcHJlc2VydmVBc3BlY3RSYXRpbykKIHsKICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEZFSW1hZ2UoZmlsdGVyLCBkb2N1bWVudCwgaHJlZiwgcHJlc2VydmVB
c3BlY3RSYXRpbykpOwogfQpAQCAtODgsNyArODgsNyBAQCBSZW5kZXJFbGVtZW50KiBGRUltYWdl
OjpyZWZlcmVuY2VkUmVuZGVyCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1
cm4gMDsKLSAgICBFbGVtZW50KiBocmVmRWxlbWVudCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0
RWxlbWVudEZyb21JUklTdHJpbmcobV9ocmVmLCBtX2RvY3VtZW50KTsKKyAgICBFbGVtZW50KiBo
cmVmRWxlbWVudCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmco
bV9ocmVmLCAqbV9kb2N1bWVudCk7CiAgICAgaWYgKCFocmVmRWxlbWVudCB8fCAhaHJlZkVsZW1l
bnQtPmlzU1ZHRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gaHJlZkVs
ZW1lbnQtPnJlbmRlcmVyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCShyZXZpc2lvbiAxNTYzODIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDcgKzM2LDcgQEAgY2xhc3MgUmVuZGVyRWxlbWVudDsKIGNsYXNzIEZFSW1hZ2UgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUltYWdl
PiBjcmVhdGVXaXRoSW1hZ2UoRmlsdGVyKiwgUGFzc1JlZlB0cjxJbWFnZT4sIGNvbnN0IFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW8mKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUltYWdlPiBjcmVh
dGVXaXRoSVJJUmVmZXJlbmNlKEZpbHRlciosIERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiwgY29u
c3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFSW1h
Z2U+IGNyZWF0ZVdpdGhJUklSZWZlcmVuY2UoRmlsdGVyKiwgRG9jdW1lbnQmLCBjb25zdCBTdHJp
bmcmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvJik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CiAjaWYgRU5BQkxFKE9QRU5DTCkKQEAgLTUzLDcgKzUz
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIH5GRUltYWdlKCkgeyB9CiAgICAg
RkVJbWFnZShGaWx0ZXIqLCBQYXNzUmVmUHRyPEltYWdlPiwgY29uc3QgU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpbyYpOwotICAgIEZFSW1hZ2UoRmlsdGVyKiwgRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcm
LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvJik7CisgICAgRkVJbWFnZShGaWx0ZXIqLCBE
b2N1bWVudCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8mKTsK
ICAgICBSZW5kZXJFbGVtZW50KiByZWZlcmVuY2VkUmVuZGVyZXIoKSBjb25zdDsKIAogICAgIFJl
ZlB0cjxJbWFnZT4gbV9pbWFnZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAJKHJldmlzaW9uIDE1NjM4MikKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyOSwxNyArMTYyOSwyNyBAQCB2b2lkIEludGVybmFs
czo6YWxsb3dSb3VuZGluZ0hhY2tzKCkgY29uCiAgICAgVGV4dFJ1bjo6c2V0QWxsb3dzUm91bmRp
bmdIYWNrcyh0cnVlKTsKIH0KIAotdm9pZCBJbnRlcm5hbHM6Omluc2VydEF1dGhvckNTUyhEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgY3NzKSBjb25zdAordm9pZCBJbnRlcm5hbHM6
Omluc2VydEF1dGhvckNTUyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgY3NzLCBF
eGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKLSAgICBSZWZQdHI8U3R5bGVTaGVldENvbnRlbnRz
PiBwYXJzZWRTaGVldCA9IFN0eWxlU2hlZXRDb250ZW50czo6Y3JlYXRlKGRvY3VtZW50KTsKKyAg
ICBpZiAoIWRvY3VtZW50KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gcGFy
c2VkU2hlZXQgPSBTdHlsZVNoZWV0Q29udGVudHM6OmNyZWF0ZSgqZG9jdW1lbnQpOwogICAgIHBh
cnNlZFNoZWV0LT5zZXRJc1VzZXJTdHlsZVNoZWV0KGZhbHNlKTsKICAgICBwYXJzZWRTaGVldC0+
cGFyc2VTdHJpbmcoY3NzKTsKICAgICBkb2N1bWVudC0+c3R5bGVTaGVldENvbGxlY3Rpb24oKS0+
YWRkQXV0aG9yU2hlZXQocGFyc2VkU2hlZXQpOwogfQogCi12b2lkIEludGVybmFsczo6aW5zZXJ0
VXNlckNTUyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgY3NzKSBjb25zdAordm9p
ZCBJbnRlcm5hbHM6Omluc2VydFVzZXJDU1MoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJp
bmcmIGNzcywgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPFN0eWxlU2hl
ZXRDb250ZW50cz4gcGFyc2VkU2hlZXQgPSBTdHlsZVNoZWV0Q29udGVudHM6OmNyZWF0ZShkb2N1
bWVudCk7CisgICAgaWYgKCFkb2N1bWVudCkgeworICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNT
X0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxTdHlsZVNoZWV0Q29u
dGVudHM+IHBhcnNlZFNoZWV0ID0gU3R5bGVTaGVldENvbnRlbnRzOjpjcmVhdGUoKmRvY3VtZW50
KTsKICAgICBwYXJzZWRTaGVldC0+c2V0SXNVc2VyU3R5bGVTaGVldCh0cnVlKTsKICAgICBwYXJz
ZWRTaGVldC0+cGFyc2VTdHJpbmcoY3NzKTsKICAgICBkb2N1bWVudC0+c3R5bGVTaGVldENvbGxl
Y3Rpb24oKS0+YWRkVXNlclNoZWV0KHBhcnNlZFNoZWV0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaAkocmV2aXNpb24gMTU2MzgyKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDggKzIzMSw4IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgYWxsb3dSb3VuZGluZ0hhY2tzKCkgY29uc3Q7CiAKLSAgICB2b2lkIGluc2Vy
dEF1dGhvckNTUyhEb2N1bWVudCosIGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgIHZvaWQgaW5z
ZXJ0VXNlckNTUyhEb2N1bWVudCosIGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIHZvaWQgaW5z
ZXJ0QXV0aG9yQ1NTKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpIGNv
bnN0OworICAgIHZvaWQgaW5zZXJ0VXNlckNTUyhEb2N1bWVudCosIGNvbnN0IFN0cmluZyYsIEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZMaXZlTm9kZXMoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5pZGwJKHJldmlzaW9uIDE1NjM4MikKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDggKzE4MSw4IEBACiAKICAgICB2
b2lkIGFsbG93Um91bmRpbmdIYWNrcygpOwogCi0gICAgdm9pZCBpbnNlcnRBdXRob3JDU1MoRG9j
dW1lbnQgZG9jdW1lbnQsIERPTVN0cmluZyBjc3MpOwotICAgIHZvaWQgaW5zZXJ0VXNlckNTUyhE
b2N1bWVudCBkb2N1bWVudCwgRE9NU3RyaW5nIGNzcyk7CisgICAgW1JhaXNlc0V4Y2VwdGlvbl0g
dm9pZCBpbnNlcnRBdXRob3JDU1MoRG9jdW1lbnQgZG9jdW1lbnQsIERPTVN0cmluZyBjc3MpOwor
ICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgaW5zZXJ0VXNlckNTUyhEb2N1bWVudCBkb2N1bWVu
dCwgRE9NU3RyaW5nIGNzcyk7CiAKICNpZiBkZWZpbmVkKEVOQUJMRV9CQVRURVJZX1NUQVRVUykg
JiYgRU5BQkxFX0JBVFRFUllfU1RBVFVTCiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRC
YXR0ZXJ5U3RhdHVzKERvY3VtZW50IGRvY3VtZW50LCBET01TdHJpbmcgZXZlbnRUeXBlLCBib29s
ZWFuIGNoYXJnaW5nLCBkb3VibGUgY2hhcmdpbmdUaW1lLCBkb3VibGUgZGlzY2hhcmdpbmdUaW1l
LCBkb3VibGUgbGV2ZWwpOwo=
</data>
<flag name="review"
          id="234774"
          type_id="1"
          status="+"
          setter="andersca"
    />
    <flag name="commit-queue"
          id="234779"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>