<?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>124990</bug_id>
          
          <creation_ts>2013-11-28 12:00:20 -0800</creation_ts>
          <short_desc>Rename StylePropertySet to StyleProperties</short_desc>
          <delta_ts>2013-11-28 12:51:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gyuyoung.kim</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>954813</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-11-28 12:00:20 -0800</bug_when>
    <thetext>Less clunky name</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954814</commentid>
    <comment_count>1</comment_count>
      <attachid>218022</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-11-28 12:04:35 -0800</bug_when>
    <thetext>Created attachment 218022
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954815</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-28 12:05:36 -0800</bug_when>
    <thetext>Attachment 218022 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/CodeGeneratorCPP.pm&apos;, u&apos;Source/WebCore/bindings/scripts/CodeGeneratorJS.pm&apos;, u&apos;Source/WebCore/bindings/scripts/CodeGeneratorObjC.pm&apos;, u&apos;Source/WebCore/css/CSSAllInOne.cpp&apos;, u&apos;Source/WebCore/css/CSSComputedStyleDeclaration.cpp&apos;, u&apos;Source/WebCore/css/CSSComputedStyleDeclaration.h&apos;, u&apos;Source/WebCore/css/CSSFontFaceRule.cpp&apos;, u&apos;Source/WebCore/css/CSSFontSelector.cpp&apos;, u&apos;Source/WebCore/css/CSSPageRule.cpp&apos;, u&apos;Source/WebCore/css/CSSParser.cpp&apos;, u&apos;Source/WebCore/css/CSSParser.h&apos;, u&apos;Source/WebCore/css/CSSStyleDeclaration.h&apos;, u&apos;Source/WebCore/css/CSSStyleRule.cpp&apos;, u&apos;Source/WebCore/css/DOMWindowCSS.cpp&apos;, u&apos;Source/WebCore/css/ElementRuleCollector.cpp&apos;, u&apos;Source/WebCore/css/ElementRuleCollector.h&apos;, u&apos;Source/WebCore/css/FontLoader.cpp&apos;, u&apos;Source/WebCore/css/PageRuleCollector.cpp&apos;, u&apos;Source/WebCore/css/PropertySetCSSStyleDeclaration.cpp&apos;, u&apos;Source/WebCore/css/PropertySetCSSStyleDeclaration.h&apos;, u&apos;Source/WebCore/css/StyleProperties.cpp&apos;, u&apos;Source/WebCore/css/StyleProperties.h&apos;, u&apos;Source/WebCore/css/StylePropertySet.cpp&apos;, u&apos;Source/WebCore/css/StylePropertySet.h&apos;, u&apos;Source/WebCore/css/StyleResolver.cpp&apos;, u&apos;Source/WebCore/css/StyleResolver.h&apos;, u&apos;Source/WebCore/css/StyleRule.cpp&apos;, u&apos;Source/WebCore/css/StyleRule.h&apos;, u&apos;Source/WebCore/css/StyleSheetContents.cpp&apos;, u&apos;Source/WebCore/css/ViewportStyleResolver.cpp&apos;, u&apos;Source/WebCore/css/ViewportStyleResolver.h&apos;, u&apos;Source/WebCore/css/WebKitCSSFilterRule.cpp&apos;, u&apos;Source/WebCore/css/WebKitCSSKeyframeRule.cpp&apos;, u&apos;Source/WebCore/css/WebKitCSSKeyframeRule.h&apos;, u&apos;Source/WebCore/css/WebKitCSSKeyframesRule.cpp&apos;, u&apos;Source/WebCore/css/WebKitCSSMatrix.cpp&apos;, u&apos;Source/WebCore/css/WebKitCSSViewportRule.cpp&apos;, u&apos;Source/WebCore/dom/Attr.cpp&apos;, u&apos;Source/WebCore/dom/Attr.h&apos;, u&apos;Source/WebCore/dom/Document.cpp&apos;, u&apos;Source/WebCore/dom/Element.cpp&apos;, u&apos;Source/WebCore/dom/ElementData.cpp&apos;, u&apos;Source/WebCore/dom/ElementData.h&apos;, u&apos;Source/WebCore/dom/StyledElement.cpp&apos;, u&apos;Source/WebCore/dom/StyledElement.h&apos;, u&apos;Source/WebCore/editing/ApplyStyleCommand.cpp&apos;, u&apos;Source/WebCore/editing/DeleteButtonController.cpp&apos;, u&apos;Source/WebCore/editing/EditingStyle.cpp&apos;, u&apos;Source/WebCore/editing/EditingStyle.h&apos;, u&apos;Source/WebCore/editing/Editor.cpp&apos;, u&apos;Source/WebCore/editing/Editor.h&apos;, u&apos;Source/WebCore/editing/EditorCommand.cpp&apos;, u&apos;Source/WebCore/editing/FrameSelection.cpp&apos;, u&apos;Source/WebCore/editing/FrameSelection.h&apos;, u&apos;Source/WebCore/editing/RemoveCSSPropertyCommand.cpp&apos;, u&apos;Source/WebCore/editing/RemoveFormatCommand.cpp&apos;, u&apos;Source/WebCore/editing/ReplaceSelectionCommand.cpp&apos;, u&apos;Source/WebCore/editing/ios/EditorIOS.mm&apos;, u&apos;Source/WebCore/editing/mac/EditorMac.mm&apos;, u&apos;Source/WebCore/editing/markup.cpp&apos;, u&apos;Source/WebCore/html/HTMLBRElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLBRElement.h&apos;, u&apos;Source/WebCore/html/HTMLBodyElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLBodyElement.h&apos;, u&apos;Source/WebCore/html/HTMLDivElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLDivElement.h&apos;, u&apos;Source/WebCore/html/HTMLElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLElement.h&apos;, u&apos;Source/WebCore/html/HTMLEmbedElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLEmbedElement.h&apos;, u&apos;Source/WebCore/html/HTMLFontElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLFontElement.h&apos;, u&apos;Source/WebCore/html/HTMLFrameSetElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLFrameSetElement.h&apos;, u&apos;Source/WebCore/html/HTMLHRElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLHRElement.h&apos;, u&apos;Source/WebCore/html/HTMLIFrameElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLIFrameElement.h&apos;, u&apos;Source/WebCore/html/HTMLImageElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLImageElement.h&apos;, u&apos;Source/WebCore/html/HTMLInputElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLInputElement.h&apos;, u&apos;Source/WebCore/html/HTMLLIElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLLIElement.h&apos;, u&apos;Source/WebCore/html/HTMLMarqueeElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLMarqueeElement.h&apos;, u&apos;Source/WebCore/html/HTMLOListElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLOListElement.h&apos;, u&apos;Source/WebCore/html/HTMLObjectElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLObjectElement.h&apos;, u&apos;Source/WebCore/html/HTMLParagraphElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLParagraphElement.h&apos;, u&apos;Source/WebCore/html/HTMLPlugInElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLPlugInElement.h&apos;, u&apos;Source/WebCore/html/HTMLPreElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLPreElement.h&apos;, u&apos;Source/WebCore/html/HTMLTableCaptionElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLTableCaptionElement.h&apos;, u&apos;Source/WebCore/html/HTMLTableCellElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLTableCellElement.h&apos;, u&apos;Source/WebCore/html/HTMLTableColElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLTableColElement.h&apos;, u&apos;Source/WebCore/html/HTMLTableElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLTableElement.h&apos;, u&apos;Source/WebCore/html/HTMLTablePartElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLTablePartElement.h&apos;, u&apos;Source/WebCore/html/HTMLTableSectionElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLTableSectionElement.h&apos;, u&apos;Source/WebCore/html/HTMLTextAreaElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLTextAreaElement.h&apos;, u&apos;Source/WebCore/html/HTMLUListElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLUListElement.h&apos;, u&apos;Source/WebCore/html/HTMLVideoElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLVideoElement.h&apos;, u&apos;Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp&apos;, u&apos;Source/WebCore/html/canvas/CanvasStyle.cpp&apos;, u&apos;Source/WebCore/html/shadow/MediaControlElementTypes.cpp&apos;, u&apos;Source/WebCore/html/shadow/MeterShadowElement.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorCSSAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorDOMAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorStyleSheet.cpp&apos;, u&apos;Source/WebCore/loader/EmptyClients.h&apos;, u&apos;Source/WebCore/mathml/MathMLElement.cpp&apos;, u&apos;Source/WebCore/mathml/MathMLElement.h&apos;, u&apos;Source/WebCore/page/DragController.cpp&apos;, u&apos;Source/WebCore/page/EditorClient.h&apos;, u&apos;Source/WebCore/page/Frame.cpp&apos;, u&apos;Source/WebCore/page/PageSerializer.cpp&apos;, u&apos;Source/WebCore/page/PageSerializer.h&apos;, u&apos;Source/WebCore/rendering/RenderLayer.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTableCell.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTreeAsText.cpp&apos;, u&apos;Source/WebCore/svg/SVGAnimateElement.cpp&apos;, u&apos;Source/WebCore/svg/SVGElement.cpp&apos;, u&apos;Source/WebCore/svg/SVGElement.h&apos;, u&apos;Source/WebCore/svg/SVGElementRareData.h&apos;, u&apos;Source/WebCore/svg/SVGFontFaceElement.cpp&apos;, u&apos;Source/WebCore/svg/SVGImageElement.cpp&apos;, u&apos;Source/WebCore/svg/SVGImageElement.h&apos;, u&apos;Source/WebCore/svg/SVGTextContentElement.cpp&apos;, u&apos;Source/WebCore/svg/SVGTextContentElement.h&apos;, u&apos;Source/WebKit/efl/WebCoreSupport/EditorClientEfl.cpp&apos;, u&apos;Source/WebKit/efl/WebCoreSupport/EditorClientEfl.h&apos;, u&apos;Source/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp&apos;, u&apos;Source/WebKit/gtk/WebCoreSupport/EditorClientGtk.h&apos;, u&apos;Source/WebKit/mac/WebCoreSupport/WebEditorClient.h&apos;, u&apos;Source/WebKit/mac/WebCoreSupport/WebEditorClient.mm&apos;, u&apos;Source/WebKit/mac/WebView/WebFrame.mm&apos;, u&apos;Source/WebKit/mac/WebView/WebHTMLView.mm&apos;, u&apos;Source/WebKit/mac/WebView/WebView.mm&apos;, u&apos;Source/WebKit/win/WebCoreSupport/WebEditorClient.cpp&apos;, u&apos;Source/WebKit/win/WebCoreSupport/WebEditorClient.h&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.h&apos;]&quot; exit_code: 1
Source/WebCore/css/StyleProperties.cpp:211:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/StyleProperties.cpp:373:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/css/StyleProperties.cpp:393:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 3 in 159 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>954816</commentid>
    <comment_count>3</comment_count>
      <attachid>218022</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-11-28 12:08:56 -0800</bug_when>
    <thetext>Comment on attachment 218022
patch

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

PropertySetCSSStyleDeclaration could use a new name, too.

&gt; Source/WebCore/ChangeLog:6
&gt; +        &quot;Set&quot; does not add useful informatio here. Use less clunky plural name.

information</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954821</commentid>
    <comment_count>4</comment_count>
      <attachid>218022</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-28 12:36:25 -0800</bug_when>
    <thetext>Comment on attachment 218022
patch

Attachment 218022 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/39138006</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954822</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-11-28 12:51:54 -0800</bug_when>
    <thetext>https://trac.webkit.org/r159856</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218022</attachid>
            <date>2013-11-28 12:04:35 -0800</date>
            <delta_ts>2013-11-28 12:36:25 -0800</delta_ts>
            <desc>patch</desc>
            <filename>style-properties-rename.patch</filename>
            <type>text/plain</type>
            <size>388950</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTg1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwIEBACisyMDEzLTExLTI4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU3R5bGVQcm9wZXJ0
eVNldCB0byBTdHlsZVByb3BlcnRpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyNDk5MAorCisgICAgICAgICJTZXQiIGRvZXMgbm90IGFkZCB1c2Vm
dWwgaW5mb3JtYXRpbyBoZXJlLiBVc2UgbGVzcyBjbHVua3kgcGx1cmFsIG5hbWUuCisKIDIwMTMt
MTEtMjggIFRoaWFnbyBkZSBCYXJyb3MgTGFjZXJkYSAgPHRoaWFnby5sYWNlcmRhQG9wZW5ib3Nz
YS5vcmc+CiAKICAgICAgICAgTml4IFVwc3RyZWFtOiBBZGRpbmcgRWRpdG9yTml4IHRvIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTA4Nyw3ICsxMDg3LDcg
QEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGNzcy9TZWxlY3RvckZpbHRlci5jcHAKICAgICBj
c3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAKICAgICBjc3MvU3R5bGVNZWRpYS5jcHAK
LSAgICBjc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAKKyAgICBjc3MvU3R5bGVQcm9wZXJ0aWVzLmNw
cAogICAgIGNzcy9TdHlsZVByb3BlcnR5U2hvcnRoYW5kLmNwcAogICAgIGNzcy9TdHlsZVJlc29s
dmVyLmNwcAogICAgIGNzcy9TdHlsZVJ1bGUuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHJldmlzaW9uIDE1OTg0MikKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTI2NzQsOCArMjY3NCw4IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMu
aCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVNZWRpYS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNl
dC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmggXAorCVNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVQcm9wZXJ0aWVzLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2hv
cnRoYW5kLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTaG9ydGhhbmQu
aCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIFwKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtODIzLDYgKzgyMyw4IEBAIF9fWk43V2ViQ29yZTIx
c2V0R2xvYmFsSWNvbkRhdGFiYXNlRVBOU18KIF9fWk43V2ViQ29yZTIxc2V0UGxhdGZvcm1TdHJh
dGVnaWVzRVBOU18xOFBsYXRmb3JtU3RyYXRlZ2llc0UKIF9fWk43V2ViQ29yZTIySFRNTFBsdWdJ
bkltYWdlRWxlbWVudDI0cmVzdGFydFNuYXBzaG90dGVkUGx1Z0luRXYKIF9fWk43V2ViQ29yZTIy
SFRNTFBsdWdJbkltYWdlRWxlbWVudDI5c2V0SXNQcmltYXJ5U25hcHNob3R0ZWRQbHVnSW5FYgor
X19aTjdXZWJDb3JlMjJNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzMjVlbnN1cmVDU1NTdHlsZURlY2xh
cmF0aW9uRXYKK19fWk43V2ViQ29yZTIyTXV0YWJsZVN0eWxlUHJvcGVydGllc0QxRXYKIF9fWk43
V2ViQ29yZTIyUnVudGltZUVuYWJsZWRGZWF0dXJlczE0c2hhcmVkRmVhdHVyZXNFdgogX19aTjdX
ZWJDb3JlMjJTY3JpcHRFeGVjdXRpb25Db250ZXh0MjZjYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0
c0V2CiBfX1pON1dlYkNvcmUyMlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQydm1FdgpAQCAtODQ3LDgg
Kzg0OSw2IEBAIF9fWk43V2ViQ29yZTIzQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UyNnMKIF9fWk43
V2ViQ29yZTIzQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U1ZW1wdHlFdgogX19aTjdXZWJDb3JlMjNB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZTIzc2V0QXV0aGVudGljYXRpb25DbGllbnRFUE5TXzIwQXV0
aGVudGljYXRpb25DbGllbnRFCiBfX1pON1dlYkNvcmUyM0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
QzFFUktOU18xNVByb3RlY3Rpb25TcGFjZUVSS05TXzEwQ3JlZGVudGlhbEVqUktOU18xNlJlc291
cmNlUmVzcG9uc2VFUktOU18xM1Jlc291cmNlRXJyb3JFCi1fX1pON1dlYkNvcmUyM011dGFibGVT
dHlsZVByb3BlcnR5U2V0MjVlbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uRXYKLV9fWk43V2ViQ29y
ZTIzTXV0YWJsZVN0eWxlUHJvcGVydHlTZXREMUV2CiBfX1pON1dlYkNvcmUyM1N5bmNocm9ub3Vz
TG9hZGVyQ2xpZW50MjRwbGF0Zm9ybUJhZFJlc3BvbnNlRXJyb3JFdgogX19aTjdXZWJDb3JlMjNk
YXRhRm9yVVJMQ29tcG9uZW50VHlwZUVQNU5TVVJMbAogX19aTjdXZWJDb3JlMjNkZWNvZGVIb3N0
TmFtZVdpdGhSYW5nZUVQOE5TU3RyaW5nOF9OU1JhbmdlCkBAIC04NjUsNiArODY1LDcgQEAgX19a
TjdXZWJDb3JlMjRGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIxNAogX19aTjdXZWJDb3JlMjRGcmFt
ZURlc3RydWN0aW9uT2JzZXJ2ZXIxNHdpbGxEZXRhY2hQYWdlRXYKIF9fWk43V2ViQ29yZTI0RnJh
bWVEZXN0cnVjdGlvbk9ic2VydmVyQzJFUE5TXzVGcmFtZUUKIF9fWk43V2ViQ29yZTI0RnJhbWVE
ZXN0cnVjdGlvbk9ic2VydmVyRDJFdgorX19aTjdXZWJDb3JlMjRJbW11dGFibGVTdHlsZVByb3Bl
cnRpZXNEMUV2CiBfX1pON1dlYkNvcmUyNFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbkMxRVJLTjNX
VEY2U3RyaW5nRVM0X05TXzE1RmlsdGVyT3BlcmF0aW9uMTNPcGVyYXRpb25UeXBlRQogX19aTjdX
ZWJDb3JlMjRjcmVhdGVGcmFnbWVudEZyb21NYXJrdXBFUk5TXzhEb2N1bWVudEVSS04zV1RGNlN0
cmluZ0VTNV9OU18xOVBhcnNlckNvbnRlbnRQb2xpY3lFCiBfX1pON1dlYkNvcmUyNGRlY29kZVVS
TEVzY2FwZVNlcXVlbmNlc0VSS04zV1RGNlN0cmluZ0UKQEAgLTg3Miw3ICs4NzMsNiBAQCBfX1pO
N1dlYkNvcmUyNGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZUVSCiBfX1pON1dlYkNvcmUyNGZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbkVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTI0bm90aWZ5
SGlzdG9yeUl0ZW1DaGFuZ2VkRQogX19aTjdXZWJDb3JlMjRwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnRFUktOM1dURjZTdHJpbmdFUzNfCi1fX1pON1dlYkNvcmUyNUltbXV0YWJsZVN0eWxlUHJvcGVy
dHlTZXREMUV2CiBfX1pON1dlYkNvcmUyNWFkZExhbmd1YWdlQ2hhbmdlT2JzZXJ2ZXJFUHZQRnZT
MF9FCiBfX1pON1dlYkNvcmUyNWNvbXB1dGVWaWV3cG9ydEF0dHJpYnV0ZXNFTlNfMTdWaWV3cG9y
dEFyZ3VtZW50c0VpaWlmTlNfN0ludFNpemVFCiBfX1pON1dlYkNvcmUyNWNyZWF0ZUNhbm9uaWNh
bFVVSURTdHJpbmdFdgpAQCAtMTAyNyw3ICsxMDI3LDcgQEAgX19aTjdXZWJDb3JlNVJhbmdlOHNl
dFN0YXJ0RU4zV1RGMTBQYXNzUgogX19aTjdXZWJDb3JlNVJhbmdlRDFFdgogX19aTjdXZWJDb3Jl
NkNocm9tZTE2c2V0U3RhdHVzYmFyVGV4dEVQTlNfNUZyYW1lRVJLTjNXVEY2U3RyaW5nRQogX19a
TjdXZWJDb3JlNkNocm9tZTVwcmludEVQTlNfNUZyYW1lRQotX19aTjdXZWJDb3JlNkVkaXRvcjEw
YXBwbHlTdHlsZUVQTlNfMTZTdHlsZVByb3BlcnR5U2V0RU5TXzEwRWRpdEFjdGlvbkUKK19fWk43
V2ViQ29yZTZFZGl0b3IxMGFwcGx5U3R5bGVFUE5TXzE1U3R5bGVQcm9wZXJ0aWVzRU5TXzEwRWRp
dEFjdGlvbkUKIF9fWk43V2ViQ29yZTZFZGl0b3IxMGZpbmRTdHJpbmdFUktOM1dURjZTdHJpbmdF
agogX19aTjdXZWJDb3JlNkVkaXRvcjEwaW5zZXJ0VGV4dEVSS04zV1RGNlN0cmluZ0VQTlNfNUV2
ZW50RQogX19aTjdXZWJDb3JlNkVkaXRvcjEzcGVyZm9ybURlbGV0ZUV2CkBAIC0xMDQ0LDkgKzEw
NDQsOSBAQCBfX1pON1dlYkNvcmU2RWRpdG9yMThpbnNlcnREaWN0YXRlZFRleHRFCiBfX1pON1dl
YkNvcmU2RWRpdG9yMTljb3VudE1hdGNoZXNGb3JUZXh0RVJLTjNXVEY2U3RyaW5nRVBOU181UmFu
Z2VFampiUE5TMV82VmVjdG9ySU5TMV82UmVmUHRySVM1X0VFTG0wRU5TMV8xNUNyYXNoT25PdmVy
Zmxvd0VFRQogX19aTjdXZWJDb3JlNkVkaXRvcjE5ZGVsZXRlV2l0aERpcmVjdGlvbkVOU18xOFNl
bGVjdGlvbkRpcmVjdGlvbkVOU18xNVRleHRHcmFudWxhcml0eUViYgogX19aTjdXZWJDb3JlNkVk
aXRvcjE5aW5zZXJ0VW5vcmRlcmVkTGlzdEV2Ci1fX1pON1dlYkNvcmU2RWRpdG9yMjFhcHBseVN0
eWxlVG9TZWxlY3Rpb25FUE5TXzE2U3R5bGVQcm9wZXJ0eVNldEVOU18xMEVkaXRBY3Rpb25FCitf
X1pON1dlYkNvcmU2RWRpdG9yMjFhcHBseVN0eWxlVG9TZWxlY3Rpb25FUE5TXzE1U3R5bGVQcm9w
ZXJ0aWVzRU5TXzEwRWRpdEFjdGlvbkUKIF9fWk43V2ViQ29yZTZFZGl0b3IyM3NldEJhc2VXcml0
aW5nRGlyZWN0aW9uRTE2V3JpdGluZ0RpcmVjdGlvbgotX19aTjdXZWJDb3JlNkVkaXRvcjI0Y29t
cHV0ZUFuZFNldFR5cGluZ1N0eWxlRVBOU18xNlN0eWxlUHJvcGVydHlTZXRFTlNfMTBFZGl0QWN0
aW9uRQorX19aTjdXZWJDb3JlNkVkaXRvcjI0Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlRVBOU18x
NVN0eWxlUHJvcGVydGllc0VOU18xMEVkaXRBY3Rpb25FCiBfX1pON1dlYkNvcmU2RWRpdG9yMjRp
c1NlbGVjdGlvblVuZ3JhbW1hdGljYWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI0cmVwbGFjZVNl
bGVjdGlvbldpdGhUZXh0RVJLTjNXVEY2U3RyaW5nRWJiCiBfX1pON1dlYkNvcmU2RWRpdG9yMjZk
ZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CkBAIC0xNTU1LDYgKzE1NTUsNyBAQCBfX1pOSzdX
ZWJDb3JlMTVQcm90ZWN0aW9uU3BhY2U1cmVhbG1FdgogX19aTks3V2ViQ29yZTE1UHJvdGVjdGlv
blNwYWNlN2lzUHJveHlFdgogX19aTks3V2ViQ29yZTE1UmVzb3VyY2VSZXF1ZXN0MTJjZlVSTFJl
cXVlc3RFTlNfMjBIVFRQQm9keVVwZGF0ZVBvbGljeUUKIF9fWk5LN1dlYkNvcmUxNVJlc291cmNl
UmVxdWVzdDEybnNVUkxSZXF1ZXN0RU5TXzIwSFRUUEJvZHlVcGRhdGVQb2xpY3lFCitfX1pOSzdX
ZWJDb3JlMTVTdHlsZVByb3BlcnRpZXMxMW11dGFibGVDb3B5RXYKIF9fWk5LN1dlYkNvcmUxNVZp
c2libGVQb3NpdGlvbjE0Y2hhcmFjdGVyQWZ0ZXJFdgogX19aTks3V2ViQ29yZTE1VmlzaWJsZVBv
c2l0aW9uMTRsb2NhbENhcmV0UmVjdEVSUE5TXzEyUmVuZGVyT2JqZWN0RQogX19aTks3V2ViQ29y
ZTE1VmlzaWJsZVBvc2l0aW9uMTlhYnNvbHV0ZUNhcmV0Qm91bmRzRXYKQEAgLTE1NzAsNyArMTU3
MSw2IEBAIF9fWk5LN1dlYkNvcmUxNkhUTUxJbnB1dEVsZW1lbnQ2aXNUZXh0RXYKIF9fWk5LN1dl
YkNvcmUxNkljb25EYXRhYmFzZUJhc2UxMmRhdGFiYXNlUGF0aEV2CiBfX1pOSzdXZWJDb3JlMTZS
ZXNvdXJjZVJlc3BvbnNlMTNuc1VSTFJlc3BvbnNlRXYKIF9fWk5LN1dlYkNvcmUxNlJlc291cmNl
UmVzcG9uc2UxNmNlcnRpZmljYXRlQ2hhaW5FdgotX19aTks3V2ViQ29yZTE2U3R5bGVQcm9wZXJ0
eVNldDExbXV0YWJsZUNvcHlFdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjE3aXND
b250ZW50RWRpdGFibGVFdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjE3dG9Ob3Jt
YWxpemVkUmFuZ2VFdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjE5cm9vdEVkaXRh
YmxlRWxlbWVudEV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTk0MDksNyArOTQw
OSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxjc3NcU2VsZWN0b3JDaGVja2VyLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGNzc1xTdHlsZUludmFsaWRhdGlvbkFu
YWx5c2lzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGNzc1xTdHlsZU1lZGlh
LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGNzc1xTdHlsZVByb3BlcnR5U2V0
LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxjc3NcU3R5bGVQcm9wZXJ0aWVzLmNw
cCI+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgog
ICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8
RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgpAQCAt
MTk3ODQsNyArMTk3ODQsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cY3NzXFNlbGVj
dG9yQ2hlY2tlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cY3NzXFN0eWxlSW52
YWxpZGF0aW9uQW5hbHlzaXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNzc1xT
dHlsZU1lZGlhLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxjc3NcU3R5bGVQcm9w
ZXJ0eVNldC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cY3NzXFN0eWxlUHJvcGVy
dGllcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cY3NzXFN0eWxlUHJvcGVydHlT
aG9ydGhhbmQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNzc1xTdHlsZVJlc29s
dmVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxjc3NcU3R5bGVSdWxlLmgiIC8+
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAxNTk4NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsOCBAQAog
CQkwNzY5NzA4NjE0NjNBRDg3MDBGNTAyQ0YgLyogVGV4dFRyYWNrTGlzdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzY5NzA4NDE0NjNBRDg3MDBG
NTAyQ0YgLyogVGV4dFRyYWNrTGlzdC5jcHAgKi87IH07CiAJCTA3Njk3MDg3MTQ2M0FEODcwMEY1
MDJDRiAvKiBUZXh0VHJhY2tMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwNzY5NzA4NTE0NjNBRDg3MDBGNTAyQ0YgLyogVGV4dFRyYWNrTGlzdC5o
ICovOyB9OwogCQkwNzZGMEQwRTEyQjgxOTI3MDBDMjZBQTQgLyogTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNzZGMEQwQTEyQjgxOTI3MDBDMjZBQTQgLyogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uLmggKi87IH07CisJCTA3NzY2NEZDMTgzRTZCNUMwMDEzM0I5MiAvKiBKU1F1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA3NzY2NEZBMTgzRTZCNUMwMDEzM0I5MiAvKiBKU1F1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50LmNwcCAqLzsgfTsKKwkJMDc3NjY0RkQxODNFNkI1QzAwMTMzQjkyIC8qIEpT
UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA3NzY2NEZCMTgzRTZCNUMwMDEzM0I5MiAvKiBKU1F1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50LmggKi87IH07CiAJCTA3NzlCRjBEMTg0NTMxNjgwMDBCNkFFNyAv
KiBIVE1MTWVkaWFFbGVtZW50TWVkaWFTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc3OUJGMEExODQ1MzE2ODAwMEI2QUU3IC8qIEhUTUxN
ZWRpYUVsZW1lbnRNZWRpYVN0cmVhbS5jcHAgKi87IH07CiAJCTA3NzlCRjBFMTg0NTMxNjgwMDBC
NkFFNyAvKiBIVE1MTWVkaWFFbGVtZW50TWVkaWFTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3NzlCRjBCMTg0NTMxNjgwMDBCNkFFNyAvKiBI
VE1MTWVkaWFFbGVtZW50TWVkaWFTdHJlYW0uaCAqLzsgfTsKIAkJMDc4MzIyODQxODAxM0VEODAw
OTk5RTBDIC8qIE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc4MzIyODIxODAxM0VENzAwOTk5RTBDIC8qIE1l
ZGlhU3RyZWFtQXVkaW9Tb3VyY2UuY3BwICovOyB9OwpAQCAtMTkwLDggKzE5Miw2IEBACiAJCTA3
ODQ2MzQyMTQ1QjE1MUEwMEE1OERGMSAvKiBKU1RyYWNrRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc4NDYzNDAxNDVCMTUxQTAwQTU4REYx
IC8qIEpTVHJhY2tFdmVudC5jcHAgKi87IH07CiAJCTA3ODQ2MzQzMTQ1QjE1MUEwMEE1OERGMSAv
KiBKU1RyYWNrRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA3ODQ2MzQxMTQ1QjE1MUEwMEE1OERGMSAvKiBKU1RyYWNrRXZlbnQuaCAqLzsgfTsK
IAkJMDc4NDYzODUxNDVCMUI4RTAwQTU4REYxIC8qIEpTVHJhY2tDdXN0b20uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3ODQ2Mzg0MTQ1QjFCOEUwMEE1
OERGMSAvKiBKU1RyYWNrQ3VzdG9tLmggKi87IH07Ci0gCQkwNzc2NjRGQzE4M0U2QjVDMDAxMzNC
OTIgLyogSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzc2NjRGQTE4M0U2QjVDMDAxMzNCOTIgLyog
SlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jcHAgKi87IH07Ci0gCQkwNzc2NjRGRDE4M0U2
QjVDMDAxMzNCOTIgLyogSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc3NjY0RkIxODNFNkI1QzAwMTMz
QjkyIC8qIEpTUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCAqLzsgfTsKIAkJMDc4RTA4RkUx
N0QxNENFRTAwNDIwQUExIC8qIE1lZGlhQ29uc3RyYWludHNJbXBsLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MjIxQjRBMTdDRUMzMjcwMDg0OEU1
MSAvKiBNZWRpYUNvbnN0cmFpbnRzSW1wbC5jcHAgKi87IH07CiAJCTA3OEUwOEZGMTdEMTRDRUUw
MDQyMEFBMSAvKiBNZWRpYVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwNzIyMUI0QzE3Q0VDMzI3MDA4NDhFNTEgLyogTWVkaWFTdHJlYW0u
Y3BwICovOyB9OwogCQkwNzhFMDkwMDE3RDE0Q0VFMDA0MjBBQTEgLyogTWVkaWFTdHJlYW1FdmVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIy
MUI0RjE3Q0VDMzI3MDA4NDhFNTEgLyogTWVkaWFTdHJlYW1FdmVudC5jcHAgKi87IH07CkBAIC0z
NjUzLDggKzM2NTMsOCBAQAogCQlBODBFNkQwQjBBMTk4OUNBMDA3RkI4QzUgLyogRGFzaGJvYXJk
UmVnaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
ODBFNkNFMTBBMTk4OUNBMDA3RkI4QzUgLyogRGFzaGJvYXJkUmVnaW9uLmggKi87IH07CiAJCUE4
MEU2RDBDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NTdHlsZVJ1bGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0UyMEExOTg5Q0EwMDdGQjhDNSAv
KiBDU1NTdHlsZVJ1bGUuaCAqLzsgfTsKIAkJQTgwRTZEMEQwQTE5ODlDQTAwN0ZCOEM1IC8qIENT
U1J1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
MEU2Q0UzMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NSdWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTgwRTZERkIwQTE5OTA2NzAwN0ZCOEM1IC8q
IFN0eWxlUHJvcGVydHlTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTgwRTZERjkwQTE5OTA2NzAwN0ZCOEM1IC8qIFN0eWxlUHJvcGVydHlTZXQu
Y3BwICovOyB9OwotCQlBODBFNkRGQzBBMTk5MDY3MDA3RkI4QzUgLyogU3R5bGVQcm9wZXJ0eVNl
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZE
RkEwQTE5OTA2NzAwN0ZCOEM1IC8qIFN0eWxlUHJvcGVydHlTZXQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBODBFNkRGQjBBMTk5MDY3MDA3RkI4
QzUgLyogU3R5bGVQcm9wZXJ0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4MEU2REY5MEExOTkwNjcwMDdGQjhDNSAvKiBTdHlsZVByb3BlcnRp
ZXMuY3BwICovOyB9OworCQlBODBFNkRGQzBBMTk5MDY3MDA3RkI4QzUgLyogU3R5bGVQcm9wZXJ0
aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBF
NkRGQTBBMTk5MDY3MDA3RkI4QzUgLyogU3R5bGVQcm9wZXJ0aWVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTgwRTZFMEYwQTE5OTExQzAwN0ZC
OEM1IC8qIENTU1N0eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2RTBEMEExOTkxMUMwMDdGQjhDNSAvKiBDU1NTdHlsZURl
Y2xhcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQTgwRTczNEYwQTE5OUM3NzAwN0ZCOEM1IC8qIENTU1NlbGVjdG9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU3MzQ4MEExOTlDNzcw
MDdGQjhDNSAvKiBDU1NTZWxlY3Rvci5jcHAgKi87IH07CiAJCUE4MEU3MzUyMEExOTlDNzcwMDdG
QjhDNSAvKiBDU1NTZWxlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTgwRTczNEIwQTE5OUM3NzAwN0ZCOEM1IC8qIENTU1NlbGVjdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTY4MDcsMTMg
KzY4MDcsMTMgQEAKIAkJMDc2OTcwODUxNDYzQUQ4NzAwRjUwMkNGIC8qIFRleHRUcmFja0xpc3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFRyYWNrTGlzdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzZGMEQwOTEyQjgxOTI3MDBDMjZBQTQgLyogTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NkYwRDBBMTJCODE5MjcwMEMyNkFBNCAvKiBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTA3NzY2NEZBMTgzRTZCNUMwMDEzM0I5MiAvKiBKU1F1aWNrVGltZVBsdWdpblJl
cGxhY2VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUXVp
Y2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwNzc2NjRGQjE4M0U2QjVDMDAxMzNCOTIgLyogSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1F1aWNrVGltZVBsdWdpblJl
cGxhY2VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NzlCRjBBMTg0NTMx
NjgwMDBCNkFFNyAvKiBIVE1MTWVkaWFFbGVtZW50TWVkaWFTdHJlYW0uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTE1lZGlhRWxlbWVudE1lZGlhU3RyZWFtLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc3OUJGMEIxODQ1MzE2ODAwMEI2QUU3
IC8qIEhUTUxNZWRpYUVsZW1lbnRNZWRpYVN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIVE1MTWVkaWFFbGVtZW50TWVkaWFTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDc3OUJGMEMxODQ1MzE2ODAwMEI2QUU3IC8qIEhUTUxNZWRpYUVsZW1l
bnRNZWRpYVN0cmVhbS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSFRNTE1lZGlhRWxlbWVu
dE1lZGlhU3RyZWFtLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc4MzIyODIx
ODAxM0VENzAwOTk5RTBDIC8qIE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFTdHJlYW1BdWRpb1NvdXJjZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3ODMyMjgzMTgwMTNFRDgwMDk5OUUwQyAvKiBN
ZWRpYVN0cmVhbUF1ZGlvU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLSAJ
CTA3NzY2NEZBMTgzRTZCNUMwMDEzM0I5MiAvKiBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTUXVpY2tUaW1lUGx1
Z2luUmVwbGFjZW1lbnQuY3BwOyBwYXRoID0gSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0gCQkwNzc2NjRGQjE4M0U2QjVDMDAxMzNC
OTIgLyogSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lmg7IHBhdGggPSBKU1F1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTA3ODQ2MzQwMTQ1QjE1MUEwMEE1OERGMSAvKiBKU1RyYWNrRXZlbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUcmFja0V2ZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDc4NDYzNDExNDVCMTUxQTAwQTU4REYxIC8qIEpTVHJhY2tFdmVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1RyYWNrRXZlbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc4NDYzODQxNDVCMUI4RTAwQTU4REYxIC8qIEpT
VHJhY2tDdXN0b20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNUcmFja0N1
c3RvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA0NjgsOCArMTA0NjgsOCBA
QAogCQlBODBFNkNFMTBBMTk4OUNBMDA3RkI4QzUgLyogRGFzaGJvYXJkUmVnaW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXNoYm9hcmRSZWdpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDRTIwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1N0eWxl
UnVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTU3R5bGVSdWxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MEU2Q0UzMEExOTg5Q0EwMDdGQjhDNSAv
KiBDU1NSdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NSdWxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4MEU2REY5MEExOTkwNjcwMDdGQjhDNSAv
KiBTdHlsZVByb3BlcnR5U2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTdHlsZVByb3BlcnR5U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTgwRTZERkEwQTE5OTA2NzAwN0ZCOEM1IC8qIFN0eWxlUHJvcGVydHlTZXQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlUHJvcGVydHlTZXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTgwRTZERjkwQTE5OTA2NzAwN0ZCOEM1IC8qIFN0eWxlUHJvcGVy
dGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVQcm9w
ZXJ0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTgwRTZERkEwQTE5OTA2
NzAwN0ZCOEM1IC8qIFN0eWxlUHJvcGVydGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3R5bGVQcm9wZXJ0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE4MEU2RTBEMEExOTkxMUMwMDdGQjhDNSAvKiBDU1NTdHlsZURlY2xhcmF0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NTdHlsZURlY2xhcmF0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MEU3MzQ4MEExOTlDNzcwMDdGQjhDNSAvKiBDU1NT
ZWxlY3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTU2Vs
ZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODBFNzM0QjBBMTk5Qzc3
MDA3RkI4QzUgLyogQ1NTU2VsZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENTU1NlbGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDg4Niw4
ICsyMDg4Niw4IEBACiAJCQkJMEZGNTAyNkUxMDJCQTk2NjAwNjZGMzlBIC8qIFN0eWxlTWVkaWEu
Y3BwICovLAogCQkJCTBGRjUwMjZGMTAyQkE5NkEwMDY2RjM5QSAvKiBTdHlsZU1lZGlhLmggKi8s
CiAJCQkJMEZGNTAyNzAxMDJCQTk2QTAwNjZGMzlBIC8qIFN0eWxlTWVkaWEuaWRsICovLAotCQkJ
CUE4MEU2REY5MEExOTkwNjcwMDdGQjhDNSAvKiBTdHlsZVByb3BlcnR5U2V0LmNwcCAqLywKLQkJ
CQlBODBFNkRGQTBBMTk5MDY3MDA3RkI4QzUgLyogU3R5bGVQcm9wZXJ0eVNldC5oICovLAorCQkJ
CUE4MEU2REY5MEExOTkwNjcwMDdGQjhDNSAvKiBTdHlsZVByb3BlcnRpZXMuY3BwICovLAorCQkJ
CUE4MEU2REZBMEExOTkwNjcwMDdGQjhDNSAvKiBTdHlsZVByb3BlcnRpZXMuaCAqLywKIAkJCQlF
MUIyNTEwNDE1MkEwQkFGMDA2OUI3NzkgLyogU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5jcHAgKi8s
CiAJCQkJRTFCMjUxMDUxNTJBMEJBRjAwNjlCNzc5IC8qIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQu
aCAqLywKIAkJCQlFMTM5ODY2MTE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5jcHAg
Ki8sCkBAIC0yNDYzNCw3ICsyNDYzNCw3IEBACiAJCQkJNTFENzE5RjYxODExMDZFMDAwMTZEQzUx
IC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNTAyNzIx
MDJCQTk2QTAwNjZGMzlBIC8qIFN0eWxlTWVkaWEuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVC
NzRFMEU4MUUwNjcwMEIyNTk2NSAvKiBTdHlsZU11bHRpQ29sRGF0YS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQTgwRTZERkMwQTE5OTA2NzAwN0ZCOEM1IC8qIFN0eWxlUHJvcGVydHlTZXQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUE4MEU2REZDMEExOTkwNjcwMDdGQjhDNSAvKiBTdHlsZVByb3BlcnRp
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQjI1MTA3MTUyQTBCQjAwMDY5Qjc3OSAvKiBTdHls
ZVByb3BlcnR5U2hvcnRoYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzIyNzJFNDBFODJFRTlC
MDBFN0Y5NzUgLyogU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMyMjcyQkQwRTgyRUFBRTAwRTdGOTc1IC8qIFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaCBp
biBIZWFkZXJzICovLApAQCAtMjc4NDksNyArMjc4NDksNyBAQAogCQkJCUJDNUVCNzI5MEU4MURF
ODEwMEIyNTk2NSAvKiBTdHlsZU1hcnF1ZWVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RjUwMjcxMTAyQkE5NkEwMDY2RjM5QSAvKiBTdHlsZU1lZGlhLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDNUVCNzREMEU4MUUwNjcwMEIyNTk2NSAvKiBTdHlsZU11bHRpQ29sRGF0YS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlBODBFNkRGQjBBMTk5MDY3MDA3RkI4QzUgLyogU3R5bGVQcm9wZXJ0
eVNldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBODBFNkRGQjBBMTk5MDY3MDA3RkI4QzUgLyog
U3R5bGVQcm9wZXJ0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQjI1MTA2MTUyQTBCQUYw
MDY5Qjc3OSAvKiBTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDMjI3MkUzMEU4MkVFOUIwMEU3Rjk3NSAvKiBTdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDMjI3MkJDMEU4MkVBQUUwMEU3Rjk3NSAvKiBTdHlsZVJhcmVO
b25Jbmhlcml0ZWREYXRhLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20u
Y3BwCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NT
U1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3
IEBACiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5o
IgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvU3RyaW5n
UHJvdG90eXBlLmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9BdG9taWNTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckNQUC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JDUFAucG0JKHJldmlzaW9uIDE1OTg0MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckNQUC5wbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzE2LDcgKzMxNiw3IEBAIHN1YiBBZGRJbmNsdWRlc0ZvclR5cGUKICAgICB9
CiAKICAgICAkaW1wbEluY2x1ZGVzeyJOb2RlLmgifSA9IDEgaWYgJHR5cGUgZXEgIk5vZGVMaXN0
IjsKLSAgICAkaW1wbEluY2x1ZGVzeyJTdHlsZVByb3BlcnR5U2V0LmgifSA9IDEgaWYgJHR5cGUg
ZXEgIkNTU1N0eWxlRGVjbGFyYXRpb24iOworICAgICRpbXBsSW5jbHVkZXN7IlN0eWxlUHJvcGVy
dGllcy5oIn0gPSAxIGlmICR0eXBlIGVxICJDU1NTdHlsZURlY2xhcmF0aW9uIjsKIAogICAgICMg
RGVmYXVsdCwgaW5jbHVkZSB0aGUgc2FtZSBuYW1lZCBmaWxlICh0aGUgaW1wbGVtZW50YXRpb24p
IGFuZCB0aGUgc2FtZSBuYW1lIHByZWZpeGVkIHdpdGggIldlYkRPTSIuIAogICAgICRpbXBsSW5j
bHVkZXN7IiR0eXBlLmgifSA9IDEgdW5sZXNzICR0eXBlIGVxICJhbnkiOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJl
dmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zNDc4LDcgKzM0NzgsNyBAQCBzdWIgTmF0
aXZlVG9KU1ZhbHVlCiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJDU1NTdHlsZURlY2xhcmF0
aW9uIikgewotICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU3R5bGVQcm9wZXJ0eVNldC5oIiwg
JGNvbmRpdGlvbmFsKTsKKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlN0eWxlUHJvcGVydGll
cy5oIiwgJGNvbmRpdGlvbmFsKTsKICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgIk5vZGVMaXN0
IikgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
T2JqQy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JPYmpDLnBtCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtCSh3b3JraW5nIGNvcHkpCkBAIC02
NzcsNyArNjc3LDcgQEAgc3ViIEFkZEluY2x1ZGVzRm9yVHlwZQogCiAgICAgIyBGSVhNRTogd29u
J3QgY29tcGlsZSB3aXRob3V0IHRoZXNlCiAgICAgJGltcGxJbmNsdWRlc3siQ1NTSW1wb3J0UnVs
ZS5oIn0gPSAxIGlmICR0eXBlIGVxICJDU1NSdWxlIjsKLSAgICAkaW1wbEluY2x1ZGVzeyJTdHls
ZVByb3BlcnR5U2V0LmgifSA9IDEgaWYgJHR5cGUgZXEgIkNTU1N0eWxlRGVjbGFyYXRpb24iOwor
ICAgICRpbXBsSW5jbHVkZXN7IlN0eWxlUHJvcGVydGllcy5oIn0gPSAxIGlmICR0eXBlIGVxICJD
U1NTdHlsZURlY2xhcmF0aW9uIjsKICAgICAkaW1wbEluY2x1ZGVzeyJOYW1lTm9kZUxpc3QuaCJ9
ID0gMSBpZiAkdHlwZSBlcSAiTm9kZUxpc3QiOwogCiAgICAgIyBEZWZhdWx0LCBpbmNsdWRlIHRo
ZSBzYW1lIG5hbWVkIGZpbGUgKHRoZSBpbXBsZW1lbnRhdGlvbikgYW5kIHRoZSBzYW1lIG5hbWUg
cHJlZml4ZWQgd2l0aCAiRE9NIi4gCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5P
bmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAJ
KHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAKICNpbmNsdWRlICJSdWxlU2V0LmNwcCIK
ICNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5jcHAiCiAjaW5jbHVkZSAiU2VsZWN0
b3JGaWx0ZXIuY3BwIgotI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuY3BwIgorI2luY2x1ZGUg
IlN0eWxlUHJvcGVydGllcy5jcHAiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5j
cHAiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5jcHAiCiAjaW5jbHVkZSAiU3R5bGVTY29wZVJl
c29sdmVyLmNwcCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiAxNTk4NDIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTksNyArNTksNyBAQAogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
Vmlldy5oIgogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgotI2luY2x1ZGUgIlN0eWxl
UHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlICJT
dHlsZVByb3BlcnR5U2hvcnRoYW5kLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2lu
Y2x1ZGUgIldlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgiCkBAIC0xNzA5LDcgKzE3MDksNyBAQCBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjCiAgICAgcmV0dXJuIENvbXB1
dGVkU3R5bGVFeHRyYWN0b3IobV9ub2RlLCBtX2FsbG93VmlzaXRlZFN0eWxlLCBtX3BzZXVkb0Vs
ZW1lbnRTcGVjaWZpZXIpLnByb3BlcnR5VmFsdWUocHJvcGVydHlJRCwgdXBkYXRlTGF5b3V0KTsK
IH0KIAotUGFzc1JlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uOjpjb3B5UHJvcGVydGllcygpIGNvbnN0CitQYXNzUmVmPE11dGFibGVTdHlsZVBy
b3BlcnRpZXM+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y29weVByb3BlcnRpZXMoKSBj
b25zdAogewogICAgIHJldHVybiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yKG1fbm9kZSwgbV9hbGxv
d1Zpc2l0ZWRTdHlsZSwgbV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyKS5jb3B5UHJvcGVydGllcygp
OwogfQpAQCAtMzE4MCw3ICszMTgwLDcgQEAgYm9vbCBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpw
cm9wZXJ0eU1hdAogICAgIHJldHVybiBjb21wdXRlZFZhbHVlICYmIHZhbHVlICYmIGNvbXB1dGVk
VmFsdWUtPmVxdWFscygqdmFsdWUpOwogfQogCi1QYXNzUmVmPE11dGFibGVTdHlsZVByb3BlcnR5
U2V0PiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpjb3B5UHJvcGVydGllcygpIGNvbnN0CitQYXNz
UmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmNvcHlQ
cm9wZXJ0aWVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gY29weVByb3BlcnRpZXNJblNldChjb21w
dXRlZFByb3BlcnRpZXMsIG51bUNvbXB1dGVkUHJvcGVydGllcyk7CiB9CkBAIC0zMjMzLDcgKzMy
MzMsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ29tcHV0ZWRTdHlsZUV4CiAgICAgcmV0
dXJuIGxpc3QucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmPE11dGFibGVTdHlsZVByb3BlcnR5U2V0
PiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IENTU1By
b3BlcnR5SUQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdAorUGFzc1JlZjxNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpjb3B5UHJvcGVydGllc0luU2V0
KGNvbnN0IENTU1Byb3BlcnR5SUQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdAogewogICAg
IFZlY3RvcjxDU1NQcm9wZXJ0eSwgMjU2PiBsaXN0OwogICAgIGxpc3QucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShsZW5ndGgpOwpAQCAtMzI0Miw3ICszMjQyLDcgQEAgUGFzc1JlZjxNdXRhYmxlU3R5
bGVQcm9wZXJ0eVNldD4gQ29tcHV0ZQogICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICBs
aXN0LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0sIHZhbHVlLnJlbGVhc2UoKSwgZmFsc2UpKTsK
ICAgICB9Ci0gICAgcmV0dXJuIE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUobGlzdC5k
YXRhKCksIGxpc3Quc2l6ZSgpKTsKKyAgICByZXR1cm4gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6
Y3JlYXRlKGxpc3QuZGF0YSgpLCBsaXN0LnNpemUoKSk7CiB9CiAKIENTU1J1bGUqIENTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbjo6cGFyZW50UnVsZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAx
NTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEzICszMiwxMyBAQCBjbGFzcyBDU1NQcmltaXRpdmVW
YWx1ZTsKIGNsYXNzIENTU1ZhbHVlTGlzdDsKIGNsYXNzIENvbG9yOwogY2xhc3MgRmlsdGVyT3Bl
cmF0aW9uczsKLWNsYXNzIE11dGFibGVTdHlsZVByb3BlcnR5U2V0OworY2xhc3MgTXV0YWJsZVN0
eWxlUHJvcGVydGllczsKIGNsYXNzIE5vZGU7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBS
ZW5kZXJTdHlsZTsKIGNsYXNzIFNWR1BhaW50OwogY2xhc3MgU2hhZG93RGF0YTsKLWNsYXNzIFN0
eWxlUHJvcGVydHlTZXQ7CitjbGFzcyBTdHlsZVByb3BlcnRpZXM7CiBjbGFzcyBTdHlsZVByb3Bl
cnR5U2hvcnRoYW5kOwogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQpAQCAtNTcsOCArNTcsOCBA
QCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcHJvcGVydHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBFVXBkYXRlTGF5b3V0ID0gVXBkYXRlTGF5b3V0KSBjb25zdDsKIAogICAgIC8vIEhl
bHBlciBtZXRob2RzIGZvciBIVE1MIGVkaXRpbmcuCi0gICAgUGFzc1JlZjxNdXRhYmxlU3R5bGVQ
cm9wZXJ0eVNldD4gY29weVByb3BlcnRpZXNJblNldChjb25zdCBDU1NQcm9wZXJ0eUlEKiBzZXQs
IHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7Ci0gICAgUGFzc1JlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0
eVNldD4gY29weVByb3BlcnRpZXMoKSBjb25zdDsKKyAgICBQYXNzUmVmPE11dGFibGVTdHlsZVBy
b3BlcnRpZXM+IGNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgQ1NTUHJvcGVydHlJRCogc2V0LCB1
bnNpZ25lZCBsZW5ndGgpIGNvbnN0OworICAgIFBhc3NSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGll
cz4gY29weVByb3BlcnRpZXMoKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBnZXRGb250U2l6ZUNTU1ZhbHVlUHJlZmVycmluZ0tleXdvcmQoKSBjb25zdDsKICAgICBi
b29sIHVzZUZpeGVkRm9udERlZmF1bHRTaXplKCkgY29uc3Q7CiAgICAgYm9vbCBwcm9wZXJ0eU1h
dGNoZXMoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NTVmFsdWUqKSBjb25zdDsKQEAgLTEyNCw3ICsx
MjQsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJv
cGVydHlDU1NWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQpIE9WRVJSSURFOwogICAgIHZpcnR1
YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEKSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHlJbnRlcm5hbChDU1NQcm9wZXJ0eUlELCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgUGFzc1JlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gY29weVBy
b3BlcnRpZXMoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWY8TXV0YWJsZVN0
eWxlUHJvcGVydGllcz4gY29weVByb3BlcnRpZXMoKSBjb25zdCBPVkVSUklERTsKIAogICAgIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlJRCwgRVVw
ZGF0ZUxheW91dCA9IFVwZGF0ZUxheW91dCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZVJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250RmFjZVJ1bGUuY3BwCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBA
QAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlUnVsZS5oIgogCiAjaW5jbHVkZSAiUHJvcGVydHlTZXRD
U1NTdHlsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2lu
Y2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250U2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBACiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUg
IlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1
ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNs
dWRlICJTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJXZWJLaXRGb250RmFtaWx5TmFtZXMuaCIKQEAg
LTkwLDcgKzkwLDcgQEAgYm9vbCBDU1NGb250U2VsZWN0b3I6OmlzRW1wdHkoKSBjb25zdAogdm9p
ZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFj
ZSogZm9udEZhY2VSdWxlKQogewogICAgIC8vIE9idGFpbiB0aGUgZm9udC1mYW1pbHkgcHJvcGVy
dHkgYW5kIHRoZSBzcmMgcHJvcGVydHkuICBCb3RoIG11c3QgYmUgZGVmaW5lZC4KLSAgICBjb25z
dCBTdHlsZVByb3BlcnR5U2V0JiBzdHlsZSA9IGZvbnRGYWNlUnVsZS0+cHJvcGVydGllcygpOwor
ICAgIGNvbnN0IFN0eWxlUHJvcGVydGllcyYgc3R5bGUgPSBmb250RmFjZVJ1bGUtPnByb3BlcnRp
ZXMoKTsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IGZvbnRGYW1pbHkgPSBzdHlsZS5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBz
cmMgPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5U3JjKTsKICAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHVuaWNvZGVSYW5nZSA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NT
UHJvcGVydHlVbmljb2RlUmFuZ2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VS
dWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFnZVJ1bGUuY3Bw
CShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFnZVJ1bGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVl
dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUg
IlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMTU5ODQyKQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAKICNp
bmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnR5
U2V0LmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9w
ZXJ0eVNob3J0aGFuZC5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogI2luY2x1ZGUgIlN0eWxl
UnVsZUltcG9ydC5oIgpAQCAtNTA3LDcgKzUwNyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Nv
bG9yUHJvcGVydHlJRChDU1MKICAgICB9CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlQ29sb3JWYWx1
ZShNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJZCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJN
b2RlIGNzc1BhcnNlck1vZGUpCitzdGF0aWMgYm9vbCBwYXJzZUNvbG9yVmFsdWUoTXV0YWJsZVN0
eWxlUHJvcGVydGllcyogZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgY29u
c3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNl
ck1vZGUpCiB7CiAgICAgQVNTRVJUKCFzdHJpbmcuaXNFbXB0eSgpKTsKICAgICBib29sIHN0cmlj
dCA9IGlzU3RyaWN0UGFyc2VyTW9kZShjc3NQYXJzZXJNb2RlKTsKQEAgLTYwNSw3ICs2MDUsNyBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgcGFyc2VTaW1wbGVMZW5ndGgoY29uCiAgICAgcmV0dXJuIG9r
OwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKE11dGFibGVTdHlsZVBy
b3BlcnR5U2V0KiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBjb25zdCBT
dHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9k
ZSkKK3N0YXRpYyBib29sIHBhcnNlU2ltcGxlTGVuZ3RoVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVy
dGllcyogZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5n
JiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCiB7
CiAgICAgQVNTRVJUKCFzdHJpbmcuaXNFbXB0eSgpKTsKICAgICBib29sIGFjY2VwdHNOZWdhdGl2
ZU51bWJlcnM7CkBAIC0xMTcwLDcgKzExNzAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNLZXl3
b3JkUHJvcGVydHlJRChDCiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBwYXJzZUtleXdvcmRWYWx1
ZShNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJZCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBjb25zdCBDU1NQ
YXJzZXJDb250ZXh0JiBwYXJzZXJDb250ZXh0KQorc3RhdGljIGJvb2wgcGFyc2VLZXl3b3JkVmFs
dWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyogZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJZCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBjb25zdCBDU1NQ
YXJzZXJDb250ZXh0JiBwYXJzZXJDb250ZXh0KQogewogICAgIEFTU0VSVCghc3RyaW5nLmlzRW1w
dHkoKSk7CiAKQEAgLTEyMjcsNyArMTIyNyw3IEBAIHN0YXRpYyBib29sIHBhcnNlVHJhbnNmb3Jt
QXJndW1lbnRzKFdlYksKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VU
cmFuc2xhdGVUcmFuc2Zvcm1WYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGll
cywgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBp
bXBvcnRhbnQpCitzdGF0aWMgYm9vbCBwYXJzZVRyYW5zbGF0ZVRyYW5zZm9ybVZhbHVlKE11dGFi
bGVTdHlsZVByb3BlcnRpZXMqIHByb3BlcnRpZXMsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50KQogewogICAgIGlmIChwcm9wZXJ0
eUlEICE9IENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xMjc4LDcgKzEyNzgsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2Vy
OjpwYXJzCiB7CiAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gZHVtbXlTdHlsZSA9IE11dGFibGVT
dHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVy
dGllcz4gZHVtbXlTdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwogICAg
IGlmICghcGFyc2VWYWx1ZShkdW1teVN0eWxlLmdldCgpLCBDU1NQcm9wZXJ0eUZvbnRGYW1pbHks
IHN0cmluZywgZmFsc2UsIENTU1F1aXJrc01vZGUsIDApKQogICAgICAgICByZXR1cm4gMDsKIApA
QCAtMTI4OCw3ICsxMjg4LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6
cGFycwogICAgIHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PENTU1ZhbHVlTGlzdD4oZm9udEZh
bWlseS5yZWxlYXNlKCkpOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShNdXRhYmxl
U3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlIGNzc1Bh
cnNlck1vZGUsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCitib29sIENT
U1BhcnNlcjo6cGFyc2VWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwg
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBv
cnRhbnQsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgU3R5bGVTaGVldENvbnRlbnRzKiBj
b250ZXh0U3R5bGVTaGVldCkKIHsKICAgICBBU1NFUlQoIXN0cmluZy5pc0VtcHR5KCkpOwogICAg
IGlmIChwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlELCBzdHJp
bmcsIGltcG9ydGFudCwgY3NzUGFyc2VyTW9kZSkpCkBAIC0xMzExLDcgKzEzMTEsNyBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VWYWx1ZShNdXRhYmxlU3R5bGVQCiAgICAgcmV0dXJuIHBhcnNlci5w
YXJzZVZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlELCBzdHJpbmcsIGltcG9ydGFudCwgY29u
dGV4dFN0eWxlU2hlZXQpOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShNdXRhYmxl
U3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBTdHlsZVNoZWV0Q29udGVudHMq
IGNvbnRleHRTdHlsZVNoZWV0KQorYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoTXV0YWJsZVN0
eWxlUHJvcGVydGllcyogZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29u
c3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBTdHlsZVNoZWV0Q29udGVudHMqIGNv
bnRleHRTdHlsZVNoZWV0KQogewogICAgIHNldFN0eWxlU2hlZXQoY29udGV4dFN0eWxlU2hlZXQp
OwogCkBAIC0xMzk3LDE0ICsxMzk3LDE0IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNlbGVjdG9y
KGNvbnN0IFN0cmkKICAgICBtX3NlbGVjdG9yTGlzdEZvclBhcnNlU2VsZWN0b3IgPSAwOwogfQog
Ci1QYXNzUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IENTU1BhcnNlcjo6cGFyc2VJbmxp
bmVTdHlsZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBFbGVtZW50KiBlbGVtZW50
KQorUGFzc1JlZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IENTU1BhcnNlcjo6cGFyc2VJbmxp
bmVTdHlsZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBFbGVtZW50KiBlbGVtZW50
KQogewogICAgIENTU1BhcnNlckNvbnRleHQgY29udGV4dCA9IGVsZW1lbnQtPmRvY3VtZW50KCku
ZWxlbWVudFNoZWV0KCkuY29udGVudHMoKS5wYXJzZXJDb250ZXh0KCk7CiAgICAgY29udGV4dC5t
b2RlID0gc3RyaWN0VG9DU1NQYXJzZXJNb2RlKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiAh
ZWxlbWVudC0+ZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSk7CiAgICAgcmV0dXJuIENTU1BhcnNl
cihjb250ZXh0KS5wYXJzZURlY2xhcmF0aW9uKHN0cmluZywgJmVsZW1lbnQtPmRvY3VtZW50KCku
ZWxlbWVudFNoZWV0KCkuY29udGVudHMoKSk7CiB9CiAKLVBhc3NSZWY8SW1tdXRhYmxlU3R5bGVQ
cm9wZXJ0eVNldD4gQ1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQorUGFzc1JlZjxJbW11
dGFibGVTdHlsZVByb3BlcnRpZXM+IENTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbihjb25zdCBT
dHJpbmcmIHN0cmluZywgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCkKIHsK
ICAgICBzZXRTdHlsZVNoZWV0KGNvbnRleHRTdHlsZVNoZWV0KTsKIApAQCAtMTQxNSwxMyArMTQx
NSwxMyBAQCBQYXNzUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IENTU1BhCiAgICAgaWYg
KG1faGFzRm9udEZhY2VPbmx5VmFsdWVzKQogICAgICAgICBkZWxldGVGb250RmFjZU9ubHlWYWx1
ZXMoKTsKIAotICAgIFBhc3NSZWY8SW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUgPSBj
cmVhdGVTdHlsZVByb3BlcnR5U2V0KCk7CisgICAgUGFzc1JlZjxJbW11dGFibGVTdHlsZVByb3Bl
cnRpZXM+IHN0eWxlID0gY3JlYXRlU3R5bGVQcm9wZXJ0aWVzKCk7CiAgICAgY2xlYXJQcm9wZXJ0
aWVzKCk7CiAgICAgcmV0dXJuIHN0eWxlOwogfQogCiAKLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZURl
Y2xhcmF0aW9uKE11dGFibGVTdHlsZVByb3BlcnR5U2V0KiBkZWNsYXJhdGlvbiwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHBycFJ1bGVTb3VyY2VE
YXRhLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQorYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlRGVjbGFyYXRpb24oTXV0YWJsZVN0eWxlUHJvcGVydGllcyogZGVjbGFyYXRpb24s
IGNvbnN0IFN0cmluZyYgc3RyaW5nLCBQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBwcnBS
dWxlU291cmNlRGF0YSwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCkKIHsK
ICAgICAvLyBMZW5ndGggb2YgdGhlICJALXdlYmtpdC1kZWNsc3siIHByZWZpeC4KICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgcHJlZml4TGVuZ3RoID0gMTU7CkBAIC0xNDk0LDcgKzE0OTQsNyBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgZmlsdGVyUHJvcGVydGllcyhib29sCiAgICAgfQogfQogCi1Q
YXNzUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IENTU1BhcnNlcjo6Y3JlYXRlU3R5bGVQ
cm9wZXJ0eVNldCgpCitQYXNzUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gQ1NTUGFyc2Vy
OjpjcmVhdGVTdHlsZVByb3BlcnRpZXMoKQogewogICAgIEJpdEFycmF5PG51bUNTU1Byb3BlcnRp
ZXM+IHNlZW5Qcm9wZXJ0aWVzOwogICAgIHNpemVfdCB1bnVzZWRFbnRyaWVzID0gbV9wYXJzZWRQ
cm9wZXJ0aWVzLnNpemUoKTsKQEAgLTE1MDYsNyArMTUwNiw3IEBAIFBhc3NSZWY8SW1tdXRhYmxl
U3R5bGVQcm9wZXJ0eVNldD4gQ1NTUGEKICAgICBpZiAodW51c2VkRW50cmllcykKICAgICAgICAg
cmVzdWx0cy5yZW1vdmUoMCwgdW51c2VkRW50cmllcyk7CiAKLSAgICByZXR1cm4gSW1tdXRhYmxl
U3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKHJlc3VsdHMuZGF0YSgpLCByZXN1bHRzLnNpemUoKSwg
bV9jb250ZXh0Lm1vZGUpOworICAgIHJldHVybiBJbW11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNy
ZWF0ZShyZXN1bHRzLmRhdGEoKSwgcmVzdWx0cy5zaXplKCksIG1fY29udGV4dC5tb2RlKTsKIH0K
IAogdm9pZCBDU1NQYXJzZXI6OmFkZFByb3BlcnR5V2l0aFByZWZpeGluZ1ZhcmlhbnQoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlLCBib29sIGltcG9ydGFu
dCwgYm9vbCBpbXBsaWNpdCkKQEAgLTk0ODUsNyArOTQ4NSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUZpbHRlclJ1bGVQYXJhbWV0ZXIKIAogUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBDU1NQ
YXJzZXI6OmNyZWF0ZUZpbHRlclJ1bGUoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBmaWx0ZXJOYW1l
KQogewotICAgIFJlZlB0cjxTdHlsZVJ1bGVGaWx0ZXI+IHJ1bGUgPSBTdHlsZVJ1bGVGaWx0ZXI6
OmNyZWF0ZShmaWx0ZXJOYW1lLCBjcmVhdGVTdHlsZVByb3BlcnR5U2V0KCkpOworICAgIFJlZlB0
cjxTdHlsZVJ1bGVGaWx0ZXI+IHJ1bGUgPSBTdHlsZVJ1bGVGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJO
YW1lLCBjcmVhdGVTdHlsZVByb3BlcnRpZXMoKSk7CiAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7CiAg
ICAgcHJvY2Vzc0FuZEFkZE5ld1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgpOwogICAgIHJldHVy
biBydWxlLnJlbGVhc2UoKTsKQEAgLTExOTAyLDcgKzExOTAyLDcgQEAgUGFzc1JlZlB0cjxTdHls
ZVJ1bGVCYXNlPiBDU1NQYXJzZXI6OmNyZQogICAgICAgICBtX2FsbG93TmFtZXNwYWNlRGVjbGFy
YXRpb25zID0gZmFsc2U7CiAgICAgICAgIGlmIChtX2hhc0ZvbnRGYWNlT25seVZhbHVlcykKICAg
ICAgICAgICAgIGRlbGV0ZUZvbnRGYWNlT25seVZhbHVlcygpOwotICAgICAgICBydWxlID0gU3R5
bGVSdWxlOjpjcmVhdGUobV9sYXN0U2VsZWN0b3JMaW5lTnVtYmVyLCBjcmVhdGVTdHlsZVByb3Bl
cnR5U2V0KCkpOworICAgICAgICBydWxlID0gU3R5bGVSdWxlOjpjcmVhdGUobV9sYXN0U2VsZWN0
b3JMaW5lTnVtYmVyLCBjcmVhdGVTdHlsZVByb3BlcnRpZXMoKSk7CiAgICAgICAgIHJ1bGUtPnBh
cnNlckFkb3B0U2VsZWN0b3JWZWN0b3IoKnNlbGVjdG9ycyk7CiAgICAgICAgIHByb2Nlc3NBbmRB
ZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKICAgICB9IGVsc2UKQEAgLTExOTI4LDcg
KzExOTI4LDcgQEAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBDU1NQYXJzZXI6OmNyZQogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9Ci0gICAgUmVmUHRyPFN0eWxlUnVs
ZUZvbnRGYWNlPiBydWxlID0gU3R5bGVSdWxlRm9udEZhY2U6OmNyZWF0ZShjcmVhdGVTdHlsZVBy
b3BlcnR5U2V0KCkpOworICAgIFJlZlB0cjxTdHlsZVJ1bGVGb250RmFjZT4gcnVsZSA9IFN0eWxl
UnVsZUZvbnRGYWNlOjpjcmVhdGUoY3JlYXRlU3R5bGVQcm9wZXJ0aWVzKCkpOwogICAgIGNsZWFy
UHJvcGVydGllcygpOwogICAgIHByb2Nlc3NBbmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVk
ZWQoKTsKICAgICByZXR1cm4gcnVsZS5yZWxlYXNlKCk7CkBAIC0xMjAzNCw3ICsxMjAzNCw3IEBA
IFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gQ1NTUGFyc2VyOjpjcmUKICAgICBtX2FsbG93SW1w
b3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CiAgICAgUmVm
UHRyPFN0eWxlUnVsZVBhZ2U+IHJ1bGU7CiAgICAgaWYgKHBhZ2VTZWxlY3RvcikgewotICAgICAg
ICBydWxlID0gU3R5bGVSdWxlUGFnZTo6Y3JlYXRlKGNyZWF0ZVN0eWxlUHJvcGVydHlTZXQoKSk7
CisgICAgICAgIHJ1bGUgPSBTdHlsZVJ1bGVQYWdlOjpjcmVhdGUoY3JlYXRlU3R5bGVQcm9wZXJ0
aWVzKCkpOwogICAgICAgICBWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPj4gc2VsZWN0
b3JWZWN0b3I7CiAgICAgICAgIHNlbGVjdG9yVmVjdG9yLmFwcGVuZChwYWdlU2VsZWN0b3IpOwog
ICAgICAgICBydWxlLT5wYXJzZXJBZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsK
QEAgLTEyMTM5LDcgKzEyMTM5LDcgQEAgUGFzc1JlZlB0cjxTdHlsZUtleWZyYW1lPiBDU1NQYXJz
ZXI6OmNyZQogICAgICAgICBrZXlTdHJpbmcuYXBwZW5kKCclJyk7CiAgICAgfQogCi0gICAgUmVm
UHRyPFN0eWxlS2V5ZnJhbWU+IGtleWZyYW1lID0gU3R5bGVLZXlmcmFtZTo6Y3JlYXRlKGNyZWF0
ZVN0eWxlUHJvcGVydHlTZXQoKSk7CisgICAgUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IGtleWZyYW1l
ID0gU3R5bGVLZXlmcmFtZTo6Y3JlYXRlKGNyZWF0ZVN0eWxlUHJvcGVydGllcygpKTsKICAgICBr
ZXlmcmFtZS0+c2V0S2V5VGV4dChrZXlTdHJpbmcudG9TdHJpbmcoKSk7CiAKICAgICBjbGVhclBy
b3BlcnRpZXMoKTsKQEAgLTEyMzU2LDcgKzEyMzU2LDcgQEAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVC
YXNlPiBDU1NQYXJzZXI6OmNyZQogewogICAgIG1fYWxsb3dJbXBvcnRSdWxlcyA9IG1fYWxsb3dO
YW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKIAotICAgIFJlZlB0cjxTdHlsZVJ1bGVWaWV3
cG9ydD4gcnVsZSA9IFN0eWxlUnVsZVZpZXdwb3J0OjpjcmVhdGUoY3JlYXRlU3R5bGVQcm9wZXJ0
eVNldCgpKTsKKyAgICBSZWZQdHI8U3R5bGVSdWxlVmlld3BvcnQ+IHJ1bGUgPSBTdHlsZVJ1bGVW
aWV3cG9ydDo6Y3JlYXRlKGNyZWF0ZVN0eWxlUHJvcGVydGllcygpKTsKICAgICBjbGVhclByb3Bl
cnRpZXMoKTsKIAogICAgIHByb2Nlc3NBbmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJKHJldmlzaW9uIDE1OTg0MikKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTAgKzU0LDEw
IEBAIGNsYXNzIENTU1ZhbHVlTGlzdDsKIGNsYXNzIENTU0Jhc2ljU2hhcGU7CiBjbGFzcyBEb2N1
bWVudDsKIGNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBJbW11dGFibGVTdHlsZVByb3BlcnR5U2V0Owor
Y2xhc3MgSW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOwogY2xhc3MgTWVkaWFRdWVyeUV4cDsKIGNs
YXNzIE1lZGlhUXVlcnlTZXQ7Ci1jbGFzcyBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDsKK2NsYXNz
IE11dGFibGVTdHlsZVByb3BlcnRpZXM7CiBjbGFzcyBTdHlsZUtleWZyYW1lOwogY2xhc3MgU3R5
bGVQcm9wZXJ0eVNob3J0aGFuZDsKIGNsYXNzIFN0eWxlUnVsZUJhc2U7CkBAIC05MywxMyArOTMs
MTMgQEAgcHVibGljOgogI2lmIEVOQUJMRShDU1MzX0NPTkRJVElPTkFMX1JVTEVTKQogICAgIGJv
b2wgcGFyc2VTdXBwb3J0c0NvbmRpdGlvbihjb25zdCBTdHJpbmcmKTsKICNlbmRpZgotICAgIHN0
YXRpYyBib29sIHBhcnNlVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQqLCBDU1NQcm9wZXJ0
eUlELCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSwgU3R5bGVT
aGVldENvbnRlbnRzKik7CisgICAgc3RhdGljIGJvb2wgcGFyc2VWYWx1ZShNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzKiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQs
IENTU1BhcnNlck1vZGUsIFN0eWxlU2hlZXRDb250ZW50cyopOwogICAgIHN0YXRpYyBib29sIHBh
cnNlQ29sb3IoUkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiwgYm9vbCBzdHJpY3QgPSBmYWxz
ZSk7CiAgICAgc3RhdGljIGJvb2wgcGFyc2VTeXN0ZW1Db2xvcihSR0JBMzImIGNvbG9yLCBjb25z
dCBTdHJpbmcmLCBEb2N1bWVudCopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlTGlz
dD4gcGFyc2VGb250RmFjZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYpOwogICAgIFBhc3NSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlVmFsaWRQcmltaXRpdmUoQ1NTVmFsdWVJRCBpZGVu
dCwgQ1NTUGFyc2VyVmFsdWUqKTsKLSAgICBib29sIHBhcnNlRGVjbGFyYXRpb24oTXV0YWJsZVN0
eWxlUHJvcGVydHlTZXQqLCBjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VE
YXRhPiwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCk7Ci0gICAgc3RhdGlj
IFBhc3NSZWY8SW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gcGFyc2VJbmxpbmVTdHlsZURlY2xh
cmF0aW9uKGNvbnN0IFN0cmluZyYsIEVsZW1lbnQqKTsKKyAgICBib29sIHBhcnNlRGVjbGFyYXRp
b24oTXV0YWJsZVN0eWxlUHJvcGVydGllcyosIGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8Q1NT
UnVsZVNvdXJjZURhdGE+LCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsK
KyAgICBzdGF0aWMgUGFzc1JlZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IHBhcnNlSW5saW5l
U3R5bGVEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmLCBFbGVtZW50Kik7CiAgICAgUGFzc093blB0
cjxNZWRpYVF1ZXJ5PiBwYXJzZU1lZGlhUXVlcnkoY29uc3QgU3RyaW5nJik7CiAKICAgICB2b2lk
IGFkZFByb3BlcnR5V2l0aFByZWZpeGluZ1ZhcmlhbnQoQ1NTUHJvcGVydHlJRCwgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4sIGJvb2wgaW1wb3J0YW50LCBib29sIGltcGxpY2l0ID0gZmFsc2UpOwpAQCAt
MzUzLDcgKzM1Myw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXJQcm9wZXJ0aWVzKCk7CiAK
LSAgICBQYXNzUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IGNyZWF0ZVN0eWxlUHJvcGVy
dHlTZXQoKTsKKyAgICBQYXNzUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gY3JlYXRlU3R5
bGVQcm9wZXJ0aWVzKCk7CiAKICAgICBDU1NQYXJzZXJDb250ZXh0IG1fY29udGV4dDsKIApAQCAt
NTI2LDggKzUyNiw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc0dlbmVyYXRlZEltYWdlVmFsdWUo
Q1NTUGFyc2VyVmFsdWUqKSBjb25zdDsKICAgICBib29sIHBhcnNlR2VuZXJhdGVkSW1hZ2UoQ1NT
UGFyc2VyVmFsdWVMaXN0KiwgUmVmUHRyPENTU1ZhbHVlPiYpOwogCi0gICAgYm9vbCBwYXJzZVZh
bHVlKE11dGFibGVTdHlsZVByb3BlcnR5U2V0KiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5n
JiwgYm9vbCBpbXBvcnRhbnQsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQp
OwotICAgIFBhc3NSZWY8SW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gcGFyc2VEZWNsYXJhdGlv
bihjb25zdCBTdHJpbmcmLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsK
KyAgICBib29sIHBhcnNlVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyosIENTU1Byb3BlcnR5
SUQsIGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBTdHlsZVNoZWV0Q29udGVudHMqIGNv
bnRleHRTdHlsZVNoZWV0KTsKKyAgICBQYXNzUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4g
cGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRl
eHRTdHlsZVNoZWV0KTsKIAogICAgIGVudW0gU2l6ZVBhcmFtZXRlclR5cGUgewogICAgICAgICBO
b25lLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZp
c2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBAIGNsYXNzIENTU1Byb3BlcnR5OwogY2xh
c3MgQ1NTUnVsZTsKIGNsYXNzIENTU1N0eWxlU2hlZXQ7CiBjbGFzcyBDU1NWYWx1ZTsKLWNsYXNz
IE11dGFibGVTdHlsZVByb3BlcnR5U2V0OwotY2xhc3MgU3R5bGVQcm9wZXJ0eVNldDsKK2NsYXNz
IE11dGFibGVTdHlsZVByb3BlcnRpZXM7CitjbGFzcyBTdHlsZVByb3BlcnRpZXM7CiBjbGFzcyBT
dHlsZWRFbGVtZW50OwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwpAQCAtNjUsNyArNjUs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZUludGVybmFs
KENTU1Byb3BlcnR5SUQpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHlJbnRlcm5h
bChDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhj
ZXB0aW9uQ29kZSYpID0gMDsKIAotICAgIHZpcnR1YWwgUGFzc1JlZjxNdXRhYmxlU3R5bGVQcm9w
ZXJ0eVNldD4gY29weVByb3BlcnRpZXMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVm
PE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGNvcHlQcm9wZXJ0aWVzKCkgY29uc3QgPSAwOwogCiAg
ICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1
cm4gMDsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAkocmV2aXNpb24g
MTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIlJ1bGVTZXQuaCIK
LSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVz
LmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRE9NV2luZG93Q1NTLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRE9NV2luZG93Q1NTLmNwcAkocmV2aXNpb24g
MTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0RPTVdpbmRvd0NTUy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpZiBFTkFCTEUoQ1NTM19DT05ESVRJT05BTF9SVUxF
UykKIAogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgotI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQu
aCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzMsNyArNzMsNyBAQCBib29sIERP
TVdpbmRvd0NTUzo6c3VwcG9ydHMoY29uc3QgU3RyaW5nCiAgICAgaWYgKG5vcm1hbGl6ZWRWYWx1
ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlZlB0cjxNdXRhYmxl
U3R5bGVQcm9wZXJ0eVNldD4gZHVtbXlTdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnR5U2V0Ojpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZHVtbXlTdHlsZSA9
IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwogICAgIHJldHVybiBDU1NQYXJzZXI6
OnBhcnNlVmFsdWUoZHVtbXlTdHlsZS5nZXQoKSwgcHJvcGVydHlJRCwgbm9ybWFsaXplZFZhbHVl
LCBmYWxzZSwgQ1NTU3RyaWN0TW9kZSwgMCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAsMjQgKzQwLDI0IEBACiAjaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCiAjaW5jbHVkZSAiU1ZH
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmgiCi0jaW5jbHVk
ZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2lu
Y2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKIAogI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2Uu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgU3R5bGVQcm9wZXJ0eVNl
dCYgbGVmdFRvUmlnaHREZWNsYXJhdGlvbigpCitzdGF0aWMgY29uc3QgU3R5bGVQcm9wZXJ0aWVz
JiBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
UmVmPE11dGFibGVTdHlsZVByb3BlcnR5U2V0Pj4gbGVmdFRvUmlnaHREZWNsKE11dGFibGVTdHls
ZVByb3BlcnR5U2V0OjpjcmVhdGUoKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZjxN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzPj4gbGVmdFRvUmlnaHREZWNsKE11dGFibGVTdHlsZVByb3Bl
cnRpZXM6OmNyZWF0ZSgpKTsKICAgICBpZiAobGVmdFRvUmlnaHREZWNsLmdldCgpLT5pc0VtcHR5
KCkpCiAgICAgICAgIGxlZnRUb1JpZ2h0RGVjbC5nZXQoKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlEaXJlY3Rpb24sIENTU1ZhbHVlTHRyKTsKICAgICByZXR1cm4gbGVmdFRvUmlnaHREZWNsLmdl
dCgpLmdldCgpOwogfQogCi1zdGF0aWMgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCYgcmlnaHRUb0xl
ZnREZWNsYXJhdGlvbigpCitzdGF0aWMgY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiByaWdodFRvTGVm
dERlY2xhcmF0aW9uKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmPE11dGFibGVT
dHlsZVByb3BlcnR5U2V0Pj4gcmlnaHRUb0xlZnREZWNsKE11dGFibGVTdHlsZVByb3BlcnR5U2V0
OjpjcmVhdGUoKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZjxNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzPj4gcmlnaHRUb0xlZnREZWNsKE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0
ZSgpKTsKICAgICBpZiAocmlnaHRUb0xlZnREZWNsLmdldCgpLT5pc0VtcHR5KCkpCiAgICAgICAg
IHJpZ2h0VG9MZWZ0RGVjbC5nZXQoKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24s
IENTU1ZhbHVlUnRsKTsKICAgICByZXR1cm4gcmlnaHRUb0xlZnREZWNsLmdldCgpLmdldCgpOwpA
QCAtMTAwLDcgKzEwMCw3IEBAIGlubGluZSB2b2lkIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpjbGVh
ck0KICAgICBtX21hdGNoZWRSdWxlcy0+Y2xlYXIoKTsKIH0KIAotaW5saW5lIHZvaWQgRWxlbWVu
dFJ1bGVDb2xsZWN0b3I6OmFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9w
ZXJ0eVNldCogcHJvcGVydHlTZXQsIGJvb2wgaXNDYWNoZWFibGUpCitpbmxpbmUgdm9pZCBFbGVt
ZW50UnVsZUNvbGxlY3Rvcjo6YWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhjb25zdCBTdHlsZVBy
b3BlcnRpZXMqIHByb3BlcnR5U2V0LCBib29sIGlzQ2FjaGVhYmxlKQogewogICAgIGlmICghcHJv
cGVydHlTZXQpCiAgICAgICAgIHJldHVybjsKQEAgLTM2MCw3ICszNjAsNyBAQCB2b2lkIEVsZW1l
bnRSdWxlQ29sbGVjdG9yOjpkb0NvbGxlY3RNYXRjCiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGlnbm9y
ZSBpdCBpbiB0aGUgbm9uLWRlYnVnIG1vZGUuCi0gICAgICAgICAgICBjb25zdCBTdHlsZVByb3Bl
cnR5U2V0JiBwcm9wZXJ0aWVzID0gcnVsZS0+cHJvcGVydGllcygpOworICAgICAgICAgICAgY29u
c3QgU3R5bGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzID0gcnVsZS0+cHJvcGVydGllcygpOwogICAg
ICAgICAgICAgaWYgKHByb3BlcnRpZXMuaXNFbXB0eSgpICYmICFtYXRjaFJlcXVlc3QuaW5jbHVk
ZUVtcHR5UnVsZXMpIHsKICAgICAgICAgICAgICAgICBpZiAoaGFzSW5zcGVjdG9yRnJvbnRlbmRz
KQogICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNo
UnVsZShjb29raWUsIGZhbHNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVs
ZUNvbGxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVs
ZUNvbGxlY3Rvci5oCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRWxl
bWVudFJ1bGVDb2xsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJs
aWM6CiAKIHByaXZhdGU6CiAgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgeyByZXR1cm4gbV9zdGF0
ZS5kb2N1bWVudCgpOyB9Ci0gICAgdm9pZCBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKGNvbnN0
IFN0eWxlUHJvcGVydHlTZXQqLCBib29sIGlzQ2FjaGVhYmxlID0gdHJ1ZSk7CisgICAgdm9pZCBh
ZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydGllcyosIGJvb2wgaXND
YWNoZWFibGUgPSB0cnVlKTsKIAogICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKFJ1bGVTZXQqKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmNwcAkocmV2aXNpb24gMTU5ODQxKQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICsz
Niw3IEBACiAjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2lu
Y2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjYxLDcgKzI2MSw3IEBAIGJvb2wgRm9udExvYWRlcjo6
Y2hlY2tGb250KGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZv
aWQgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1Byb3BlcnR5SUQgaWQsIGNvbnN0IFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiYgcGFy
c2VkU3R5bGUpCitzdGF0aWMgdm9pZCBhcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTUHJvcGVydHlJRCBpZCwgY29uc3QgUmVmUHRyPFN0
eWxlUHJvcGVydGllcz4mIHBhcnNlZFN0eWxlKQogewogICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5
UHJvcGVydHlUb0N1cnJlbnRTdHlsZShpZCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFs
dWUoaWQpLmdldCgpKTsKIH0KQEAgLTI2OSw3ICsyNjksNyBAQCBzdGF0aWMgdm9pZCBhcHBseVBy
b3BlcnR5VG9DdXJyZW50U3R5bGUoCiBib29sIEZvbnRMb2FkZXI6OnJlc29sdmVGb250U3R5bGUo
Y29uc3QgU3RyaW5nJiBmb250U3RyaW5nLCBGb250JiBmb250KQogewogICAgIC8vIEludGVycHJl
dCBmb250U3RyaW5nIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgJ2ZvbnQnIGF0dHJpYnV0ZSBvZiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuCi0gICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnR5
U2V0PiBwYXJzZWRTdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gcGFyc2VkU3R5bGUgPSBNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKICAgICBDU1NQYXJzZXI6OnBhcnNlVmFsdWUocGFyc2Vk
U3R5bGUuZ2V0KCksIENTU1Byb3BlcnR5Rm9udCwgZm9udFN0cmluZywgdHJ1ZSwgQ1NTU3RyaWN0
TW9kZSwgMCk7CiAgICAgaWYgKHBhcnNlZFN0eWxlLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9QYWdlUnVsZUNvbGxlY3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcAko
cmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1BhZ2VSdWxlQ29sbGVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIlBhZ2VSdWxl
Q29sbGVjdG9yLmgiCiAKICNpbmNsdWRlICJDU1NEZWZhdWx0U3R5bGVTaGVldHMuaCIKLSNpbmNs
dWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAj
aW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExOCw3ICsx
MTgsNyBAQCB2b2lkIFBhZ2VSdWxlQ29sbGVjdG9yOjptYXRjaFBhZ2VSdWxlc0ZvCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGll
cyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQuCi0gICAgICAgIGNvbnN0IFN0eWxlUHJvcGVydHlT
ZXQmIHByb3BlcnRpZXMgPSBydWxlLT5wcm9wZXJ0aWVzKCk7CisgICAgICAgIGNvbnN0IFN0eWxl
UHJvcGVydGllcyYgcHJvcGVydGllcyA9IHJ1bGUtPnByb3BlcnRpZXMoKTsKICAgICAgICAgaWYg
KHByb3BlcnRpZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b24uY3BwCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlT
ZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBA
QAogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIk11dGF0
aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmgiCiAjaW5jbHVkZSAiTXV0YXRpb25SZWNvcmQuaCIK
LSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVz
LmgiCiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0yODgsMTIgKzI4OCwxMiBAQCBTdHlsZVNoZWV0Q29udGVudHMqIFByb3BlcnR5U2V0Q1NTU3R5
bGVECiAgICAgcmV0dXJuIGNzc1N0eWxlU2hlZXQgPyAmY3NzU3R5bGVTaGVldC0+Y29udGVudHMo
KSA6IDA7CiB9CiAKLVBhc3NSZWY8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IFByb3BlcnR5U2V0
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Y29weVByb3BlcnRpZXMoKSBjb25zdAorUGFzc1JlZjxNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzPiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmNvcHlQ
cm9wZXJ0aWVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+bXV0YWJsZUNv
cHkoKTsKIH0KICAgICAKLVN0eWxlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb246OlN0eWxlUnVsZUNT
U1N0eWxlRGVjbGFyYXRpb24oTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQmIHByb3BlcnR5U2V0LCBD
U1NSdWxlJiBwYXJlbnRSdWxlKQorU3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6U3R5bGVS
dWxlQ1NTU3R5bGVEZWNsYXJhdGlvbihNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBwcm9wZXJ0eVNl
dCwgQ1NTUnVsZSYgcGFyZW50UnVsZSkKICAgICA6IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbigmcHJvcGVydHlTZXQpCiAgICAgLCBtX3JlZkNvdW50KDEpCiAgICAgLCBtX3BhcmVudFJ1
bGUoJnBhcmVudFJ1bGUpCkBAIC0zMzksNyArMzM5LDcgQEAgQ1NTU3R5bGVTaGVldCogU3R5bGVS
dWxlQ1NTU3R5bGVEZWNsYXJhdAogICAgIHJldHVybiBtX3BhcmVudFJ1bGUgPyBtX3BhcmVudFJ1
bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA6IDA7CiB9CiAKLXZvaWQgU3R5bGVSdWxlQ1NTU3R5bGVE
ZWNsYXJhdGlvbjo6cmVhdHRhY2goTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQmIHByb3BlcnR5U2V0
KQordm9pZCBTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpyZWF0dGFjaChNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzJiBwcm9wZXJ0eVNldCkKIHsKICAgICBtX3Byb3BlcnR5U2V0LT5kZXJlZigp
OwogICAgIG1fcHJvcGVydHlTZXQgPSAmcHJvcGVydHlTZXQ7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lv
biAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEzICszNiwxMyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBDU1NSdWxlOwogY2xhc3MgQ1NTUHJvcGVydHk7CiBjbGFzcyBDU1NWYWx1
ZTsKLWNsYXNzIE11dGFibGVTdHlsZVByb3BlcnR5U2V0OworY2xhc3MgTXV0YWJsZVN0eWxlUHJv
cGVydGllczsKIGNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKIGNsYXNzIFN0eWxlZEVsZW1lbnQ7
CiAKIGNsYXNzIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBDU1NTdHls
ZURlY2xhcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b24oTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnR5U2V0KSA6IG1fcHJvcGVydHlTZXQo
cHJvcGVydHlTZXQpIHsgfQorICAgIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbihNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzKiBwcm9wZXJ0eVNldCkgOiBtX3Byb3BlcnR5U2V0KHByb3BlcnR5
U2V0KSB7IH0KICAgICAKICAgICB2aXJ0dWFsIFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQo
KSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyUGFyZW50RWxlbWVu
dCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KQEAgLTY4LDcgKzY4LDcgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJ
RCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5SW50ZXJuYWwoQ1NTUHJv
cGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNv
ZGUmKSBPVkVSUklERTsKICAgICAKLSAgICB2aXJ0dWFsIFBhc3NSZWY8TXV0YWJsZVN0eWxlUHJv
cGVydHlTZXQ+IGNvcHlQcm9wZXJ0aWVzKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQ
YXNzUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGNvcHlQcm9wZXJ0aWVzKCkgY29uc3QgT1ZF
UlJJREU7CiAKICAgICBDU1NWYWx1ZSogY2xvbmVBbmRDYWNoZUZvckNTU09NKENTU1ZhbHVlKik7
CiAgICAgCkBAIC03NywxNCArNzcsMTQgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB3
aWxsTXV0YXRlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZE11dGF0ZShNdXRhdGlvblR5cGUp
IHsgfQogCi0gICAgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQqIG1fcHJvcGVydHlTZXQ7CisgICAg
TXV0YWJsZVN0eWxlUHJvcGVydGllcyogbV9wcm9wZXJ0eVNldDsKICAgICBPd25QdHI8SGFzaE1h
cDxDU1NWYWx1ZSosIFJlZlB0cjxDU1NWYWx1ZT4+PiBtX2Nzc29tQ1NTVmFsdWVDbG9uZXM7CiB9
OwogCiBjbGFzcyBTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIFByb3BlcnR5
U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbgogewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0eWxlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24+IGNyZWF0ZShNdXRhYmxlU3R5bGVQcm9wZXJ0
eVNldCYgcHJvcGVydHlTZXQsIENTU1J1bGUmIHBhcmVudFJ1bGUpCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbj4gY3JlYXRlKE11dGFibGVTdHlsZVBy
b3BlcnRpZXMmIHByb3BlcnR5U2V0LCBDU1NSdWxlJiBwYXJlbnRSdWxlKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uKHByb3Bl
cnR5U2V0LCBwYXJlbnRSdWxlKSk7CiAgICAgfQpAQCAtOTUsMTAgKzk1LDEwIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgcmVmKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRlcmVm
KCkgT1ZFUlJJREU7CiAKLSAgICB2b2lkIHJlYXR0YWNoKE11dGFibGVTdHlsZVByb3BlcnR5U2V0
Jik7CisgICAgdm9pZCByZWF0dGFjaChNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJik7CiAKIHByaXZh
dGU6Ci0gICAgU3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbihNdXRhYmxlU3R5bGVQcm9wZXJ0
eVNldCYsIENTU1J1bGUmKTsKKyAgICBTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uKE11dGFi
bGVTdHlsZVByb3BlcnRpZXMmLCBDU1NSdWxlJik7CiAKICAgICB2aXJ0dWFsIENTU1N0eWxlU2hl
ZXQqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCBPVkVSUklERTsKIApAQCAtMTE0LDcgKzExNCw3
IEBAIHByaXZhdGU6CiBjbGFzcyBJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIFBy
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbgogewogcHVibGljOgotICAgIElubGluZUNTU1N0
eWxlRGVjbGFyYXRpb24oTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnR5U2V0LCBTdHls
ZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50KQorICAgIElubGluZUNTU1N0eWxlRGVjbGFyYXRpb24o
TXV0YWJsZVN0eWxlUHJvcGVydGllcyogcHJvcGVydHlTZXQsIFN0eWxlZEVsZW1lbnQqIHBhcmVu
dEVsZW1lbnQpCiAgICAgICAgIDogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKHByb3Bl
cnR5U2V0KQogICAgICAgICAsIG1fcGFyZW50RWxlbWVudChwYXJlbnRFbGVtZW50KSAKICAgICB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcAkocmV2aXNpb24gMTU5
ODQyKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHA6MTU5ODQy
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMjczIEBACisvKgorICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LCAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0
eWxlUHJvcGVydHlTZXQuaCIKKworI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5oIgorI2luY2x1ZGUgIkNTU1BhcnNlci5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMu
aCIKKyNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNs
YXJhdGlvbi5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCIKKyNpbmNsdWRl
ICJTdHlsZVNoZWV0Q29udGVudHMuaCIKKyNpbmNsdWRlIDx3dGYvQml0QXJyYXkuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKKyNpZm5kZWYgTkRFQlVHCisjaW5jbHVk
ZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBz
aXplX3Qgc2l6ZUZvckltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXRXaXRoUHJvcGVydHlDb3VudCh1
bnNpZ25lZCBjb3VudCkKK3sKKyAgICByZXR1cm4gc2l6ZW9mKEltbXV0YWJsZVN0eWxlUHJvcGVy
dHlTZXQpIC0gc2l6ZW9mKHZvaWQqKSArIHNpemVvZihDU1NWYWx1ZSopICogY291bnQgKyBzaXpl
b2YoU3R5bGVQcm9wZXJ0eU1ldGFkYXRhKSAqIGNvdW50OworfQorCitzdGF0aWMgYm9vbCBpc0lu
aXRpYWxPckluaGVyaXQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFN0cmluZywgaW5pdGlhbCwgKCJpbml0aWFsIikpOworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoU3RyaW5nLCBpbmhlcml0LCAoImluaGVyaXQiKSk7CisgICAgcmV0dXJuIHZhbHVlLmxl
bmd0aCgpID09IDcgJiYgKHZhbHVlID09IGluaXRpYWwgfHwgdmFsdWUgPT0gaW5oZXJpdCk7Cit9
CisKK1Bhc3NSZWY8SW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gSW1tdXRhYmxlU3R5bGVQcm9w
ZXJ0eVNldDo6Y3JlYXRlKGNvbnN0IENTU1Byb3BlcnR5KiBwcm9wZXJ0aWVzLCB1bnNpZ25lZCBj
b3VudCwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQoreworICAgIHZvaWQqIHNsb3QgPSBX
VEY6OmZhc3RNYWxsb2Moc2l6ZUZvckltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXRXaXRoUHJvcGVy
dHlDb3VudChjb3VudCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IChOb3ROdWxsLCBzbG90
KSBJbW11dGFibGVTdHlsZVByb3BlcnR5U2V0KHByb3BlcnRpZXMsIGNvdW50LCBjc3NQYXJzZXJN
b2RlKSk7Cit9CisKK1Bhc3NSZWY8SW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gU3R5bGVQcm9w
ZXJ0eVNldDo6aW1tdXRhYmxlQ29weUlmTmVlZGVkKCkgY29uc3QKK3sKKyAgICBpZiAoIWlzTXV0
YWJsZSgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW1tdXRhYmxlU3R5bGVQcm9wZXJ0
eVNldCY+KGNvbnN0X2Nhc3Q8U3R5bGVQcm9wZXJ0eVNldCY+KCp0aGlzKSk7CisgICAgY29uc3Qg
TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQmIG11dGFibGVUaGlzID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQmPigqdGhpcyk7CisgICAgcmV0dXJuIEltbXV0YWJsZVN0
eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShtdXRhYmxlVGhpcy5tX3Byb3BlcnR5VmVjdG9yLmRhdGEo
KSwgbXV0YWJsZVRoaXMubV9wcm9wZXJ0eVZlY3Rvci5zaXplKCksIGNzc1BhcnNlck1vZGUoKSk7
Cit9CisKK011dGFibGVTdHlsZVByb3BlcnR5U2V0OjpNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldChD
U1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCisgICAgOiBTdHlsZVByb3BlcnR5U2V0KGNzc1Bh
cnNlck1vZGUpCit7Cit9CisKK011dGFibGVTdHlsZVByb3BlcnR5U2V0OjpNdXRhYmxlU3R5bGVQ
cm9wZXJ0eVNldChjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydGllcywgdW5zaWduZWQgbGVuZ3Ro
KQorICAgIDogU3R5bGVQcm9wZXJ0eVNldChDU1NTdHJpY3RNb2RlKQoreworICAgIG1fcHJvcGVy
dHlWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgbV9wcm9wZXJ0eVZlY3Rvci51bmNo
ZWNrZWRBcHBlbmQocHJvcGVydGllc1tpXSk7Cit9CisKK011dGFibGVTdHlsZVByb3BlcnR5U2V0
Ojp+TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQoKQoreworfQorCitJbW11dGFibGVTdHlsZVByb3Bl
cnR5U2V0OjpJbW11dGFibGVTdHlsZVByb3BlcnR5U2V0KGNvbnN0IENTU1Byb3BlcnR5KiBwcm9w
ZXJ0aWVzLCB1bnNpZ25lZCBsZW5ndGgsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKKyAg
ICA6IFN0eWxlUHJvcGVydHlTZXQoY3NzUGFyc2VyTW9kZSwgbGVuZ3RoKQoreworICAgIFN0eWxl
UHJvcGVydHlNZXRhZGF0YSogbWV0YWRhdGFBcnJheSA9IGNvbnN0X2Nhc3Q8U3R5bGVQcm9wZXJ0
eU1ldGFkYXRhKj4odGhpcy0+bWV0YWRhdGFBcnJheSgpKTsKKyAgICBDU1NWYWx1ZSoqIHZhbHVl
QXJyYXkgPSBjb25zdF9jYXN0PENTU1ZhbHVlKio+KHRoaXMtPnZhbHVlQXJyYXkoKSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIG1ldGFkYXRh
QXJyYXlbaV0gPSBwcm9wZXJ0aWVzW2ldLm1ldGFkYXRhKCk7CisgICAgICAgIHZhbHVlQXJyYXlb
aV0gPSBwcm9wZXJ0aWVzW2ldLnZhbHVlKCk7CisgICAgICAgIHZhbHVlQXJyYXlbaV0tPnJlZigp
OworICAgIH0KK30KKworSW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6fkltbXV0YWJsZVN0eWxl
UHJvcGVydHlTZXQoKQoreworICAgIENTU1ZhbHVlKiogdmFsdWVBcnJheSA9IGNvbnN0X2Nhc3Q8
Q1NTVmFsdWUqKj4odGhpcy0+dmFsdWVBcnJheSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9hcnJheVNpemU7ICsraSkKKyAgICAgICAgdmFsdWVBcnJheVtpXS0+ZGVyZWYoKTsK
K30KKworTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6Ok11dGFibGVTdHlsZVByb3BlcnR5U2V0KGNv
bnN0IFN0eWxlUHJvcGVydHlTZXQmIG90aGVyKQorICAgIDogU3R5bGVQcm9wZXJ0eVNldChvdGhl
ci5jc3NQYXJzZXJNb2RlKCkpCit7CisgICAgaWYgKG90aGVyLmlzTXV0YWJsZSgpKQorICAgICAg
ICBtX3Byb3BlcnR5VmVjdG9yID0gc3RhdGljX2Nhc3Q8Y29uc3QgTXV0YWJsZVN0eWxlUHJvcGVy
dHlTZXQmPihvdGhlcikubV9wcm9wZXJ0eVZlY3RvcjsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9w
cm9wZXJ0eVZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG90aGVyLnByb3BlcnR5Q291bnQo
KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvdGhlci5wcm9wZXJ0eUNvdW50
KCk7ICsraSkKKyAgICAgICAgICAgIG1fcHJvcGVydHlWZWN0b3IudW5jaGVja2VkQXBwZW5kKG90
aGVyLnByb3BlcnR5QXQoaSkudG9DU1NQcm9wZXJ0eSgpKTsKKyAgICB9Cit9CisKK1N0cmluZyBT
dHlsZVByb3BlcnR5U2V0OjpnZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCkgY29uc3QKK3sKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NW
YWx1ZShwcm9wZXJ0eUlEKTsKKyAgICBpZiAodmFsdWUpCisgICAgICAgIHJldHVybiB2YWx1ZS0+
Y3NzVGV4dCgpOworCisgICAgLy8gU2hvcnRoYW5kIGFuZCA0LXZhbHVlcyBwcm9wZXJ0aWVzCisg
ICAgc3dpdGNoIChwcm9wZXJ0eUlEKSB7CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclNwYWNp
bmc6CisgICAgICAgIHJldHVybiBib3JkZXJTcGFjaW5nVmFsdWUoYm9yZGVyU3BhY2luZ1Nob3J0
aGFuZCgpKTsKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uOgorICAgICAg
ICByZXR1cm4gZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGJhY2tncm91bmRQb3NpdGlvblNob3J0
aGFuZCgpKTsKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdDoKKyAgICAgICAg
cmV0dXJuIGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShiYWNrZ3JvdW5kUmVwZWF0U2hvcnRoYW5k
KCkpOworICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOgorICAgICAgICByZXR1cm4gZ2V0
TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGJhY2tncm91bmRTaG9ydGhhbmQoKSk7CisgICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlcjoKKyAgICAgICAgcmV0dXJuIGJvcmRlclByb3BlcnR5VmFsdWUoT21p
dFVuY29tbW9uVmFsdWVzKTsKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wOgorICAgICAg
ICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUoYm9yZGVyVG9wU2hvcnRoYW5kKCkpOworICAgIGNh
c2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodDoKKyAgICAgICAgcmV0dXJuIGdldFNob3J0aGFuZFZh
bHVlKGJvcmRlclJpZ2h0U2hvcnRoYW5kKCkpOworICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJC
b3R0b206CisgICAgICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1ZShib3JkZXJCb3R0b21TaG9y
dGhhbmQoKSk7CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnQ6CisgICAgICAgIHJldHVy
biBnZXRTaG9ydGhhbmRWYWx1ZShib3JkZXJMZWZ0U2hvcnRoYW5kKCkpOworICAgIGNhc2UgQ1NT
UHJvcGVydHlPdXRsaW5lOgorICAgICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUob3V0bGlu
ZVNob3J0aGFuZCgpKTsKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQ29sb3I6CisgICAgICAg
IHJldHVybiBnZXQ0VmFsdWVzKGJvcmRlckNvbG9yU2hvcnRoYW5kKCkpOworICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJXaWR0aDoKKyAgICAgICAgcmV0dXJuIGdldDRWYWx1ZXMoYm9yZGVyV2lk
dGhTaG9ydGhhbmQoKSk7CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclN0eWxlOgorICAgICAg
ICByZXR1cm4gZ2V0NFZhbHVlcyhib3JkZXJTdHlsZVNob3J0aGFuZCgpKTsKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZToKKyAgICAgICAgcmV0dXJuIGdldFNob3J0aGFuZFZh
bHVlKHdlYmtpdENvbHVtblJ1bGVTaG9ydGhhbmQoKSk7CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdENvbHVtbnM6CisgICAgICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1ZSh3ZWJraXRDb2x1
bW5zU2hvcnRoYW5kKCkpOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4OgorICAgICAg
ICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUod2Via2l0RmxleFNob3J0aGFuZCgpKTsKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0RmxleEZsb3c6CisgICAgICAgIHJldHVybiBnZXRTaG9ydGhh
bmRWYWx1ZSh3ZWJraXRGbGV4Rmxvd1Nob3J0aGFuZCgpKTsKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0R3JpZEFyZWE6CisgICAgICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1ZSh3ZWJraXRH
cmlkQXJlYVNob3J0aGFuZCgpKTsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZENvbHVt
bjoKKyAgICAgICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHdlYmtpdEdyaWRDb2x1bW5TaG9y
dGhhbmQoKSk7CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRSb3c6CisgICAgICAgIHJl
dHVybiBnZXRTaG9ydGhhbmRWYWx1ZSh3ZWJraXRHcmlkUm93U2hvcnRoYW5kKCkpOworICAgIGNh
c2UgQ1NTUHJvcGVydHlGb250OgorICAgICAgICByZXR1cm4gZm9udFZhbHVlKCk7CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eU1hcmdpbjoKKyAgICAgICAgcmV0dXJuIGdldDRWYWx1ZXMobWFyZ2luU2hv
cnRoYW5kKCkpOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Db2xsYXBzZToKKyAg
ICAgICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHdlYmtpdE1hcmdpbkNvbGxhcHNlU2hvcnRo
YW5kKCkpOworICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvdzoKKyAgICAgICAgcmV0dXJuIGdl
dENvbW1vblZhbHVlKG92ZXJmbG93U2hvcnRoYW5kKCkpOworICAgIGNhc2UgQ1NTUHJvcGVydHlQ
YWRkaW5nOgorICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyhwYWRkaW5nU2hvcnRoYW5kKCkpOwor
ICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0aW9uOgorICAgICAgICByZXR1cm4gZ2V0TGF5ZXJl
ZFNob3J0aGFuZFZhbHVlKHRyYW5zaXRpb25TaG9ydGhhbmQoKSk7CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eUxpc3RTdHlsZToKKyAgICAgICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKGxpc3RTdHls
ZVNob3J0aGFuZCgpKTsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZToKKyAgICAg
ICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHdlYmtpdE1hcnF1ZWVTaG9ydGhhbmQoKSk7Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbjoKKyAgICAgICAgcmV0dXJuIGdl
dExheWVyZWRTaG9ydGhhbmRWYWx1ZSh3ZWJraXRNYXNrUG9zaXRpb25TaG9ydGhhbmQoKSk7Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQ6CisgICAgICAgIHJldHVybiBnZXRM
YXllcmVkU2hvcnRoYW5kVmFsdWUod2Via2l0TWFza1JlcGVhdFNob3J0aGFuZCgpKTsKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFzazoKKyAgICAgICAgcmV0dXJuIGdldExheWVyZWRTaG9y
dGhhbmRWYWx1ZSh3ZWJraXRNYXNrU2hvcnRoYW5kKCkpOworICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRUZXh0RW1waGFzaXM6CisgICAgICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1ZSh3ZWJr
aXRUZXh0RW1waGFzaXNTaG9ydGhhbmQoKSk7CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRTdHJva2U6CisgICAgICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1ZSh3ZWJraXRUZXh0U3Ry
b2tlU2hvcnRoYW5kKCkpOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1Pcmln
aW46CisgICAgICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1ZSh3ZWJraXRUcmFuc2Zvcm1Pcmln
aW5TaG9ydGhhbmQoKSk7CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246Cisg
ICAgICAgIHJldHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUod2Via2l0VHJhbnNpdGlvblNo
b3J0aGFuZCgpKTsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uOgorICAgICAg
ICByZXR1cm4gZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHdlYmtpdEFuaW1hdGlvblNob3J0aGFu
ZCgpKTsKKyNpZiBFTkFCTEUoU1ZHKQorICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJrZXI6IHsKKyAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJv
cGVydHlNYXJrZXJTdGFydCk7CisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIHJldHVy
biB2YWx1ZS0+Y3NzVGV4dCgpOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorI2Vu
ZGlmCisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJhZGl1czoKKyAgICAgICAgcmV0dXJuIGdl
dDRWYWx1ZXMoYm9yZGVyUmFkaXVzU2hvcnRoYW5kKCkpOworICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KK30KKworU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6
OmJvcmRlclNwYWNpbmdWYWx1ZShjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzaG9ydGhh
bmQpIGNvbnN0Cit7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBob3Jpem9udGFsVmFsdWUgPSBnZXRQ
cm9wZXJ0eUNTU1ZhbHVlKHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbMF0pOworICAgIFJlZlB0cjxD
U1NWYWx1ZT4gdmVydGljYWxWYWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUoc2hvcnRoYW5kLnBy
b3BlcnRpZXMoKVsxXSk7CisKKyAgICAvLyBXaGlsZSBzdGFuZGFyZCBib3JkZXItc3BhY2luZyBw
cm9wZXJ0eSBkb2VzIG5vdCBhbGxvdyBzcGVjaWZ5aW5nIGJvcmRlci1zcGFjaW5nLXZlcnRpY2Fs
IHdpdGhvdXQKKyAgICAvLyBzcGVjaWZ5aW5nIGJvcmRlci1zcGFjaW5nLWhvcml6b250YWwgPGh0
dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3RhYmxlcy5odG1sI3NlcGFyYXRlZC1ib3JkZXJzPiwK
KyAgICAvLyAtd2Via2l0LWJvcmRlci1zcGFjaW5nLXZlcnRpY2FsIGNhbiBiZSBzZXQgd2l0aG91
dCAtd2Via2l0LWJvcmRlci1zcGFjaW5nLWhvcml6b250YWwuCisgICAgaWYgKCFob3Jpem9udGFs
VmFsdWUgfHwgIXZlcnRpY2FsVmFsdWUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAg
IFN0cmluZyBob3Jpem9udGFsVmFsdWVDU1NUZXh0ID0gaG9yaXpvbnRhbFZhbHVlLT5jc3NUZXh0
KCk7CisgICAgU3RyaW5nIHZlcnRpY2FsVmFsdWVDU1NUZXh0ID0gdmVydGljYWxWYWx1ZS0+Y3Nz
VGV4dCgpOworICAgIGlmIChob3Jpem9udGFsVmFsdWVDU1NUZXh0ID09IHZlcnRpY2FsVmFsdWVD
U1NUZXh0KQorICAgICAgICByZXR1cm4gaG9yaXpvbnRhbFZhbHVlQ1NTVGV4dDsKKyAgICByZXR1
cm4gaG9yaXpvbnRhbFZhbHVlQ1NTVGV4dCArICcgJyArIHZlcnRpY2FsVmFsdWVDU1NUZXh0Owor
fQorCit2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmFwcGVuZEZvbnRMb25naGFuZFZhbHVlSWZFeHBs
aWNpdChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgU3Ry
aW5nJiBjb21tb25WYWx1ZSkgY29uc3QKK3sKKyAgICBpbnQgZm91bmRQcm9wZXJ0eUluZGV4ID0g
ZmluZFByb3BlcnR5SW5kZXgocHJvcGVydHlJRCk7CisgICAgaWYgKGZvdW5kUHJvcGVydHlJbmRl
eCA9PSAtMSkKKyAgICAgICAgcmV0dXJuOyAvLyBBbGwgbG9uZ2hhbmRzIG11c3QgaGF2ZSBhdCBs
ZWFzdCBpbXBsaWNpdCB2YWx1ZXMgaWYgImZvbnQiIGlzIHNwZWNpZmllZC4KKworICAgIGlmIChw
cm9wZXJ0eUF0KGZvdW5kUHJvcGVydHlJbmRleCkuaXNJbXBsaWNpdCgpKSB7CisgICAgICAgIGNv
bW1vblZhbHVlID0gU3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjaGFy
IHByZWZpeCA9ICdcMCc7CisgICAgc3dpdGNoIChwcm9wZXJ0eUlEKSB7CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUZvbnRTdHlsZToKKyAgICAgICAgYnJlYWs7IC8vIE5vIHByZWZpeC4KKyAgICBjYXNl
IENTU1Byb3BlcnR5Rm9udEZhbWlseToKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQ6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQ6CisgICAgICAgIHByZWZpeCA9ICcgJzsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQ6CisgICAgICAg
IHByZWZpeCA9ICcvJzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgaWYgKHByZWZpeCAmJiAhcmVzdWx0Lmlz
RW1wdHkoKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChwcmVmaXgpOworICAgIFN0cmluZyB2YWx1
ZSA9IHByb3BlcnR5QXQoZm91bmRQcm9wZXJ0eUluZGV4KS52YWx1ZSgpLT5jc3NUZXh0KCk7Cisg
ICAgcmVzdWx0LmFwcGVuZCh2YWx1ZSk7CisgICAgaWYgKCFjb21tb25WYWx1ZS5pc051bGwoKSAm
JiBjb21tb25WYWx1ZSAhPSB2YWx1ZSkKKyAgICAgICAgY29tbW9uVmFsdWUgPSBTdHJpbmcoKTsK
K30KKworU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmZvbnRWYWx1ZSgpIGNvbnN0Cit7CisgICAg
aW50IGZvbnRTaXplUHJvcGVydHlJbmRleCA9IGZpbmRQcm9wZXJ0eUluZGV4KENTU1Byb3BlcnR5
Rm9udFNpemUpOworICAgIGludCBmb250RmFtaWx5UHJvcGVydHlJbmRleCA9IGZpbmRQcm9wZXJ0
eUluZGV4KENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CisgICAgaWYgKGZvbnRTaXplUHJvcGVydHlJ
bmRleCA9PSAtMSB8fCBmb250RmFtaWx5UHJvcGVydHlJbmRleCA9PSAtMSkKKyAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7CisKKyAgICBQcm9wZXJ0eVJlZmVyZW5jZSBmb250U2l6ZVByb3Bl
cnR5ID0gcHJvcGVydHlBdChmb250U2l6ZVByb3BlcnR5SW5kZXgpOworICAgIFByb3BlcnR5UmVm
ZXJlbmNlIGZvbnRGYW1pbHlQcm9wZXJ0eSA9IHByb3BlcnR5QXQoZm9udEZhbWlseVByb3BlcnR5
SW5kZXgpOworICAgIGlmIChmb250U2l6ZVByb3BlcnR5LmlzSW1wbGljaXQoKSB8fCBmb250RmFt
aWx5UHJvcGVydHkuaXNJbXBsaWNpdCgpKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
KworICAgIFN0cmluZyBjb21tb25WYWx1ZSA9IGZvbnRTaXplUHJvcGVydHkudmFsdWUoKS0+Y3Nz
VGV4dCgpOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIGFwcGVuZEZvbnRMb25naGFu
ZFZhbHVlSWZFeHBsaWNpdChDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgcmVzdWx0LCBjb21tb25WYWx1
ZSk7CisgICAgYXBwZW5kRm9udExvbmdoYW5kVmFsdWVJZkV4cGxpY2l0KENTU1Byb3BlcnR5Rm9u
dFZhcmlhbnQsIHJlc3VsdCwgY29tbW9uVmFsdWUpOworICAgIGFwcGVuZEZvbnRMb25naGFuZFZh
bHVlSWZFeHBsaWNpdChDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIHJlc3VsdCwgY29tbW9uVmFsdWUp
OworICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcp
OworICAgIHJlc3VsdC5hcHBlbmQoZm9udFNpemVQcm9wZXJ0eS52YWx1ZSgpLT5jc3NUZXh0KCkp
OworICAgIGFwcGVuZEZvbnRMb25naGFuZFZhbHVlSWZFeHBsaWNpdChDU1NQcm9wZXJ0eUxpbmVI
ZWlnaHQsIHJlc3VsdCwgY29tbW9uVmFsdWUpOworICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkK
KyAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOworICAgIHJlc3VsdC5hcHBlbmQoZm9udEZhbWls
eVByb3BlcnR5LnZhbHVlKCktPmNzc1RleHQoKSk7CisgICAgaWYgKGlzSW5pdGlhbE9ySW5oZXJp
dChjb21tb25WYWx1ZSkpCisgICAgICAgIHJldHVybiBjb21tb25WYWx1ZTsKKyAgICByZXR1cm4g
cmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBTdHlsZVByb3BlcnR5U2V0OjpnZXQ0VmFs
dWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmIHNob3J0aGFuZCkgY29uc3QKK3sKKyAg
ICAvLyBBc3N1bWUgdGhlIHByb3BlcnRpZXMgYXJlIGluIHRoZSB1c3VhbCBvcmRlciB0b3AsIHJp
Z2h0LCBib3R0b20sIGxlZnQuCisgICAgaW50IHRvcFZhbHVlSW5kZXggPSBmaW5kUHJvcGVydHlJ
bmRleChzaG9ydGhhbmQucHJvcGVydGllcygpWzBdKTsKKyAgICBpbnQgcmlnaHRWYWx1ZUluZGV4
ID0gZmluZFByb3BlcnR5SW5kZXgoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVsxXSk7CisgICAgaW50
IGJvdHRvbVZhbHVlSW5kZXggPSBmaW5kUHJvcGVydHlJbmRleChzaG9ydGhhbmQucHJvcGVydGll
cygpWzJdKTsKKyAgICBpbnQgbGVmdFZhbHVlSW5kZXggPSBmaW5kUHJvcGVydHlJbmRleChzaG9y
dGhhbmQucHJvcGVydGllcygpWzNdKTsKKworICAgIGlmICh0b3BWYWx1ZUluZGV4ID09IC0xIHx8
IHJpZ2h0VmFsdWVJbmRleCA9PSAtMSB8fCBib3R0b21WYWx1ZUluZGV4ID09IC0xIHx8IGxlZnRW
YWx1ZUluZGV4ID09IC0xKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBQcm9wZXJ0
eVJlZmVyZW5jZSB0b3AgPSBwcm9wZXJ0eUF0KHRvcFZhbHVlSW5kZXgpOworICAgIFByb3BlcnR5
UmVmZXJlbmNlIHJpZ2h0ID0gcHJvcGVydHlBdChyaWdodFZhbHVlSW5kZXgpOworICAgIFByb3Bl
cnR5UmVmZXJlbmNlIGJvdHRvbSA9IHByb3BlcnR5QXQoYm90dG9tVmFsdWVJbmRleCk7CisgICAg
UHJvcGVydHlSZWZlcmVuY2UgbGVmdCA9IHByb3BlcnR5QXQobGVmdFZhbHVlSW5kZXgpOworCisg
ICAgLy8gQWxsIDQgcHJvcGVydGllcyBtdXN0IGJlIHNwZWNpZmllZC4KKyAgICBpZiAoIXRvcC52
YWx1ZSgpIHx8ICFyaWdodC52YWx1ZSgpIHx8ICFib3R0b20udmFsdWUoKSB8fCAhbGVmdC52YWx1
ZSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBpZiAodG9wLmlzSW5oZXJpdGVk
KCkgJiYgcmlnaHQuaXNJbmhlcml0ZWQoKSAmJiBib3R0b20uaXNJbmhlcml0ZWQoKSAmJiBsZWZ0
LmlzSW5oZXJpdGVkKCkpCisgICAgICAgIHJldHVybiBnZXRWYWx1ZU5hbWUoQ1NTVmFsdWVJbmhl
cml0KTsKKworICAgIGlmICh0b3AudmFsdWUoKS0+aXNJbml0aWFsVmFsdWUoKSB8fCByaWdodC52
YWx1ZSgpLT5pc0luaXRpYWxWYWx1ZSgpIHx8IGJvdHRvbS52YWx1ZSgpLT5pc0luaXRpYWxWYWx1
ZSgpIHx8IGxlZnQudmFsdWUoKS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAgICBpZiAodG9w
LnZhbHVlKCktPmlzSW5pdGlhbFZhbHVlKCkgJiYgcmlnaHQudmFsdWUoKS0+aXNJbml0aWFsVmFs
dWUoKSAmJiBib3R0b20udmFsdWUoKS0+aXNJbml0aWFsVmFsdWUoKSAmJiBsZWZ0LnZhbHVlKCkt
PmlzSW5pdGlhbFZhbHVlKCkgJiYgIXRvcC5pc0ltcGxpY2l0KCkpIHsKKyAgICAgICAgICAgIC8v
IEFsbCBjb21wb25lbnRzIGFyZSAiaW5pdGlhbCIgYW5kICJ0b3AiIGlzIG5vdCBpbXBsaWNpdC4K
KyAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZU5hbWUoQ1NTVmFsdWVJbml0aWFsKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorICAgIGlmICh0b3AuaXNJbXBv
cnRhbnQoKSAhPSByaWdodC5pc0ltcG9ydGFudCgpIHx8IHJpZ2h0LmlzSW1wb3J0YW50KCkgIT0g
Ym90dG9tLmlzSW1wb3J0YW50KCkgfHwgYm90dG9tLmlzSW1wb3J0YW50KCkgIT0gbGVmdC5pc0lt
cG9ydGFudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBib29sIHNob3dMZWZ0
ID0gIXJpZ2h0LnZhbHVlKCktPmVxdWFscygqbGVmdC52YWx1ZSgpKTsKKyAgICBib29sIHNob3dC
b3R0b20gPSAhdG9wLnZhbHVlKCktPmVxdWFscygqYm90dG9tLnZhbHVlKCkpIHx8IHNob3dMZWZ0
OworICAgIGJvb2wgc2hvd1JpZ2h0ID0gIXRvcC52YWx1ZSgpLT5lcXVhbHMoKnJpZ2h0LnZhbHVl
KCkpIHx8IHNob3dCb3R0b207CisKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1
bHQuYXBwZW5kKHRvcC52YWx1ZSgpLT5jc3NUZXh0KCkpOworICAgIGlmIChzaG93UmlnaHQpIHsK
KyAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOworICAgICAgICByZXN1bHQuYXBwZW5kKHJpZ2h0
LnZhbHVlKCktPmNzc1RleHQoKSk7CisgICAgfQorICAgIGlmIChzaG93Qm90dG9tKSB7CisgICAg
ICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChib3R0b20udmFs
dWUoKS0+Y3NzVGV4dCgpKTsKKyAgICB9CisgICAgaWYgKHNob3dMZWZ0KSB7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChsZWZ0LnZhbHVlKCktPmNz
c1RleHQoKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKworU3Ry
aW5nIFN0eWxlUHJvcGVydHlTZXQ6OmdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShjb25zdCBTdHls
ZVByb3BlcnR5U2hvcnRoYW5kJiBzaG9ydGhhbmQpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRl
ciByZXN1bHQ7CisKKyAgICBjb25zdCB1bnNpZ25lZCBzaXplID0gc2hvcnRoYW5kLmxlbmd0aCgp
OworICAgIC8vIEJlZ2luIGJ5IGNvbGxlY3RpbmcgdGhlIHByb3BlcnRpZXMgaW50byBhbiBhcnJh
eS4KKyAgICBWZWN0b3I8IFJlZlB0cjxDU1NWYWx1ZT4+IHZhbHVlcyhzaXplKTsKKyAgICBzaXpl
X3QgbnVtTGF5ZXJzID0gMDsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKKyAgICAgICAgdmFsdWVzW2ldID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShzaG9ydGhhbmQu
cHJvcGVydGllcygpW2ldKTsKKyAgICAgICAgaWYgKHZhbHVlc1tpXSkgeworICAgICAgICAgICAg
aWYgKHZhbHVlc1tpXS0+aXNCYXNlVmFsdWVMaXN0KCkpCisgICAgICAgICAgICAgICAgbnVtTGF5
ZXJzID0gc3RkOjptYXgodG9DU1NWYWx1ZUxpc3QodmFsdWVzW2ldLmdldCgpKS0+bGVuZ3RoKCks
IG51bUxheWVycyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbnVtTGF5ZXJz
ID0gc3RkOjptYXg8c2l6ZV90PigxVSwgbnVtTGF5ZXJzKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIFN0cmluZyBjb21tb25WYWx1ZTsKKyAgICBib29sIGNvbW1vblZhbHVlSW5pdGlhbGl6ZWQg
PSBmYWxzZTsKKworICAgIC8vIE5vdyBzdGl0Y2ggdGhlIHByb3BlcnRpZXMgdG9nZXRoZXIuICBJ
bXBsaWNpdCBpbml0aWFsIHZhbHVlcyBhcmUgZmxhZ2dlZCBhcyBzdWNoIGFuZAorICAgIC8vIGNh
biBzYWZlbHkgYmUgb21pdHRlZC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUxheWVy
czsgaSsrKSB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgbGF5ZXJSZXN1bHQ7CisgICAgICAgIGJv
b2wgdXNlUmVwZWF0WFNob3J0aGFuZCA9IGZhbHNlOworICAgICAgICBib29sIHVzZVJlcGVhdFlT
aG9ydGhhbmQgPSBmYWxzZTsKKyAgICAgICAgYm9vbCB1c2VTaW5nbGVXb3JkU2hvcnRoYW5kID0g
ZmFsc2U7CisgICAgICAgIGJvb2wgZm91bmRQb3NpdGlvbllDU1NQcm9wZXJ0eSA9IGZhbHNlOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7CisgICAgICAgICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOworICAgICAgICAgICAgaWYgKHZhbHVlc1tqXSkgewor
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZXNbal0tPmlzQmFzZVZhbHVlTGlzdCgpKQorICAgICAg
ICAgICAgICAgICAgICB2YWx1ZSA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlc1tqXS5nZXQoKSktPml0
ZW0oaSk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVl
ID0gdmFsdWVzW2pdOworCisgICAgICAgICAgICAgICAgICAgIC8vIENvbG9yIG9ubHkgYmVsb25n
cyBpbiB0aGUgbGFzdCBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHNob3J0aGFuZC5w
cm9wZXJ0aWVzKClbal0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpICE9IG51bUxheWVycyAtIDEpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPSAwOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkg
IT0gMCkgLy8gT3RoZXIgc2luZ2xldG9ucyBvbmx5IGJlbG9uZyBpbiB0aGUgZmlyc3QgbGF5ZXIu
CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHJlcG9ydCBiYWNrZ3Jv
dW5kLXJlcGVhdCBhcyBpdCB3YXMgd3JpdHRlbiBpbiB0aGUgQ1NTLiBJZiB0aGUgcHJvcGVydHkg
aXMgaW1wbGljaXQsCisgICAgICAgICAgICAvLyB0aGVuIGl0IHdhcyB3cml0dGVuIHdpdGggb25s
eSBvbmUgdmFsdWUuIEhlcmUgd2UgZmlndXJlIG91dCB3aGljaCB2YWx1ZSB0aGF0IHdhcyBzbyB3
ZSBjYW4KKyAgICAgICAgICAgIC8vIHJlcG9ydCBiYWNrIGNvcnJlY3RseS4KKyAgICAgICAgICAg
IGlmICgoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtqXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRS
ZXBlYXRYICYmIGlzUHJvcGVydHlJbXBsaWNpdChzaG9ydGhhbmQucHJvcGVydGllcygpW2pdKSkK
KyAgICAgICAgICAgICAgICB8fCAoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtqXSA9PSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tSZXBlYXRYICYmIGlzUHJvcGVydHlJbXBsaWNpdChzaG9ydGhhbmQucHJv
cGVydGllcygpW2pdKSkpIHsKKworICAgICAgICAgICAgICAgIC8vIEJVRyA0OTA1NTogbWFrZSBz
dXJlIHRoZSB2YWx1ZSB3YXMgbm90IHJlc2V0IGluIHRoZSBsYXllciBjaGVjayBqdXN0IGFib3Zl
LgorICAgICAgICAgICAgICAgIGlmICgoaiA8IHNpemUgLSAxICYmIHNob3J0aGFuZC5wcm9wZXJ0
aWVzKClbaiArIDFdID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFkgJiYgdmFsdWUpCisg
ICAgICAgICAgICAgICAgICAgIHx8IChqIDwgc2l6ZSAtIDEgJiYgc2hvcnRoYW5kLnByb3BlcnRp
ZXMoKVtqICsgMV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WSAmJiB2YWx1ZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB5VmFsdWU7CisgICAgICAgICAg
ICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gbmV4dFZhbHVlID0gdmFsdWVzW2ogKyAxXTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG5leHRWYWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHlWYWx1ZSA9IHRvQ1NTVmFsdWVMaXN0KG5leHRWYWx1ZS5nZXQoKSkt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHlWYWx1ZSA9IG5leHRWYWx1ZTsKKworICAgICAgICAgICAg
ICAgICAgICBDU1NWYWx1ZUlEIHhJZCA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUuZ2V0KCkp
LT5nZXRWYWx1ZUlEKCk7CisgICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlSUQgeUlkID0gdG9D
U1NQcmltaXRpdmVWYWx1ZSh5VmFsdWUuZ2V0KCkpLT5nZXRWYWx1ZUlEKCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh4SWQgIT0geUlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
eElkID09IENTU1ZhbHVlUmVwZWF0ICYmIHlJZCA9PSBDU1NWYWx1ZU5vUmVwZWF0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXNlUmVwZWF0WFNob3J0aGFuZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKytqOworICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICh4SWQgPT0gQ1NTVmFsdWVOb1JlcGVhdCAmJiB5SWQgPT0gQ1NTVmFsdWVSZXBlYXQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VSZXBlYXRZU2hvcnRoYW5kID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHVzZVNpbmdsZVdvcmRTaG9ydGhhbmQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgKytqOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdHJpbmcgdmFsdWVUZXh0OworICAgICAgICAg
ICAgaWYgKHZhbHVlICYmICF2YWx1ZS0+aXNJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFsYXllclJlc3VsdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
ICAgIGxheWVyUmVzdWx0LmFwcGVuZCgnICcpOworICAgICAgICAgICAgICAgIGlmIChmb3VuZFBv
c2l0aW9uWUNTU1Byb3BlcnR5CisgICAgICAgICAgICAgICAgICAgICYmIChzaG9ydGhhbmQucHJv
cGVydGllcygpW2pdID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUgfHwgc2hvcnRoYW5kLnBy
b3BlcnRpZXMoKVtqXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplKSkKKyAgICAgICAgICAg
ICAgICAgICAgbGF5ZXJSZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLyAiKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWZvdW5kUG9zaXRpb25ZQ1NTUHJvcGVydHkKKyAgICAgICAgICAgICAgICAgICAgJiYg
KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbal0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6ZSB8
fCBzaG9ydGhhbmQucHJvcGVydGllcygpW2pdID09IENTU1Byb3BlcnR5V2Via2l0TWFza1NpemUp
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGlmICh1
c2VSZXBlYXRYU2hvcnRoYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIHVzZVJlcGVhdFhTaG9y
dGhhbmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXJSZXN1bHQuYXBwZW5kKGdl
dFZhbHVlTmFtZShDU1NWYWx1ZVJlcGVhdFgpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHVzZVJlcGVhdFlTaG9ydGhhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlUmVwZWF0WVNo
b3J0aGFuZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBsYXllclJlc3VsdC5hcHBlbmQo
Z2V0VmFsdWVOYW1lKENTU1ZhbHVlUmVwZWF0WSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICh1c2VTaW5nbGVXb3JkU2hvcnRoYW5kKQorICAgICAg
ICAgICAgICAgICAgICAgICAgdXNlU2luZ2xlV29yZFNob3J0aGFuZCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICB2YWx1ZVRleHQgPSB2YWx1ZS0+Y3NzVGV4dCgpOworICAgICAgICAgICAg
ICAgICAgICBsYXllclJlc3VsdC5hcHBlbmQodmFsdWVUZXh0KTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtqXSA9PSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblkKKyAgICAgICAgICAgICAgICAgICAgfHwgc2hvcnRo
YW5kLnByb3BlcnRpZXMoKVtqXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblkpIHsK
KyAgICAgICAgICAgICAgICAgICAgZm91bmRQb3NpdGlvbllDU1NQcm9wZXJ0eSA9IHRydWU7CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gYmFja2dyb3VuZC1wb3NpdGlvbiBpcyBhIHNwZWNpYWwg
Y2FzZTogaWYgb25seSB0aGUgZmlyc3Qgb2Zmc2V0IGlzIHNwZWNpZmllZCwKKyAgICAgICAgICAg
ICAgICAgICAgLy8gdGhlIHNlY29uZCBvbmUgZGVmYXVsdHMgdG8gImNlbnRlciIsIG5vdCB0aGUg
c2FtZSB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1vblZhbHVlSW5pdGlhbGl6
ZWQgJiYgY29tbW9uVmFsdWUgIT0gImluaXRpYWwiICYmIGNvbW1vblZhbHVlICE9ICJpbmhlcml0
IikKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblZhbHVlID0gU3RyaW5nKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbW1vblZh
bHVlSW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgICAgICAgICBjb21tb25WYWx1ZSA9IHZhbHVlVGV4
dDsKKyAgICAgICAgICAgICAgICBjb21tb25WYWx1ZUluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIWNvbW1vblZhbHVlLmlzTnVsbCgpICYmIGNvbW1vblZhbHVlICE9
IHZhbHVlVGV4dCkKKyAgICAgICAgICAgICAgICBjb21tb25WYWx1ZSA9IFN0cmluZygpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFsYXllclJlc3VsdC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
TGl0ZXJhbCgiLCAiKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobGF5ZXJSZXN1bHQpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGlzSW5pdGlhbE9ySW5oZXJpdChjb21tb25WYWx1
ZSkpCisgICAgICAgIHJldHVybiBjb21tb25WYWx1ZTsKKworICAgIGlmIChyZXN1bHQuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmlu
ZygpOworfQorCitTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0U2hvcnRoYW5kVmFsdWUoY29u
c3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYgc2hvcnRoYW5kKSBjb25zdAoreworICAgIFN0cmlu
ZyBjb21tb25WYWx1ZTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2hvcnRoYW5kLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFp
c1Byb3BlcnR5SW1wbGljaXQoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtpXSkpIHsKKyAgICAgICAg
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHNob3J0aGFu
ZC5wcm9wZXJ0aWVzKClbaV0pOworICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgICAgICBTdHJpbmcgdmFsdWVUZXh0ID0gdmFs
dWUtPmNzc1RleHQoKTsKKyAgICAgICAgICAgIGlmICghaSkKKyAgICAgICAgICAgICAgICBjb21t
b25WYWx1ZSA9IHZhbHVlVGV4dDsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFjb21tb25WYWx1ZS5p
c051bGwoKSAmJiBjb21tb25WYWx1ZSAhPSB2YWx1ZVRleHQpCisgICAgICAgICAgICAgICAgY29t
bW9uVmFsdWUgPSBTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFs
dWUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKHZhbHVlVGV4dCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgY29tbW9uVmFsdWUgPSBTdHJpbmcoKTsKKyAgICB9CisgICAgaWYgKGlzSW5pdGlhbE9ySW5o
ZXJpdChjb21tb25WYWx1ZSkpCisgICAgICAgIHJldHVybiBjb21tb25WYWx1ZTsKKyAgICBpZiAo
cmVzdWx0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBy
ZXN1bHQudG9TdHJpbmcoKTsKK30KKworLy8gb25seSByZXR1cm5zIGEgbm9uLW51bGwgdmFsdWUg
aWYgYWxsIHByb3BlcnRpZXMgaGF2ZSB0aGUgc2FtZSwgbm9uLW51bGwgdmFsdWUKK1N0cmluZyBT
dHlsZVByb3BlcnR5U2V0OjpnZXRDb21tb25WYWx1ZShjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRo
YW5kJiBzaG9ydGhhbmQpIGNvbnN0Cit7CisgICAgU3RyaW5nIHJlczsKKyAgICBib29sIGxhc3RQ
cm9wZXJ0eVdhc0ltcG9ydGFudCA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaG9ydGhhbmQubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZh
bHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShzaG9ydGhhbmQucHJvcGVydGllcygpW2ldKTsKKyAg
ICAgICAgLy8gRklYTUU6IENTU0luaXRpYWxWYWx1ZTo6Y3NzVGV4dCBzaG91bGQgZ2VuZXJhdGUg
dGhlIHJpZ2h0IHZhbHVlLgorICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgICAgICBTdHJpbmcgdGV4dCA9IHZhbHVlLT5jc3NUZXh0KCk7CisgICAg
ICAgIGlmICh0ZXh0LmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAg
ICAgICBpZiAocmVzLmlzTnVsbCgpKQorICAgICAgICAgICAgcmVzID0gdGV4dDsKKyAgICAgICAg
ZWxzZSBpZiAocmVzICE9IHRleHQpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAg
ICAgICAgYm9vbCBjdXJyZW50UHJvcGVydHlJc0ltcG9ydGFudCA9IHByb3BlcnR5SXNJbXBvcnRh
bnQoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtpXSk7CisgICAgICAgIGlmIChpICYmIGxhc3RQcm9w
ZXJ0eVdhc0ltcG9ydGFudCAhPSBjdXJyZW50UHJvcGVydHlJc0ltcG9ydGFudCkKKyAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgbGFzdFByb3BlcnR5V2FzSW1wb3J0YW50ID0g
Y3VycmVudFByb3BlcnR5SXNJbXBvcnRhbnQ7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisK
K1N0cmluZyBTdHlsZVByb3BlcnR5U2V0Ojpib3JkZXJQcm9wZXJ0eVZhbHVlKENvbW1vblZhbHVl
TW9kZSB2YWx1ZU1vZGUpIGNvbnN0Cit7CisgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFu
ZCBwcm9wZXJ0aWVzWzNdID0geyBib3JkZXJXaWR0aFNob3J0aGFuZCgpLCBib3JkZXJTdHlsZVNo
b3J0aGFuZCgpLCBib3JkZXJDb2xvclNob3J0aGFuZCgpIH07CisgICAgU3RyaW5nIGNvbW1vblZh
bHVlOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgV1RGX0FSUkFZX0xFTkdUSChwcm9wZXJ0aWVzKTsgKytpKSB7CisgICAgICAgIFN0cmluZyB2
YWx1ZSA9IGdldENvbW1vblZhbHVlKHByb3BlcnRpZXNbaV0pOworICAgICAgICBpZiAodmFsdWUu
aXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZU1vZGUgPT0gUmV0dXJuTnVsbE9uVW5j
b21tb25WYWx1ZXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICAg
ICAgQVNTRVJUKHZhbHVlTW9kZSA9PSBPbWl0VW5jb21tb25WYWx1ZXMpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpKQorICAgICAgICAgICAgY29tbW9u
VmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgZWxzZSBpZiAoIWNvbW1vblZhbHVlLmlzTnVsbCgpICYm
IGNvbW1vblZhbHVlICE9IHZhbHVlKQorICAgICAgICAgICAgY29tbW9uVmFsdWUgPSBTdHJpbmco
KTsKKyAgICAgICAgaWYgKHZhbHVlID09ICJpbml0aWFsIikKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCcgJyk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQodmFsdWUpOworICAgIH0KKyAgICBpZiAo
aXNJbml0aWFsT3JJbmhlcml0KGNvbW1vblZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGNvbW1vblZh
bHVlOworICAgIHJldHVybiByZXN1bHQuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiByZXN1bHQudG9T
dHJpbmcoKTsKK30KKworUGFzc1JlZlB0cjxDU1NWYWx1ZT4gU3R5bGVQcm9wZXJ0eVNldDo6Z2V0
UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpIGNvbnN0Cit7CisgICAg
aW50IGZvdW5kUHJvcGVydHlJbmRleCA9IGZpbmRQcm9wZXJ0eUluZGV4KHByb3BlcnR5SUQpOwor
ICAgIGlmIChmb3VuZFByb3BlcnR5SW5kZXggPT0gLTEpCisgICAgICAgIHJldHVybiAwOworICAg
IHJldHVybiBwcm9wZXJ0eUF0KGZvdW5kUHJvcGVydHlJbmRleCkudmFsdWUoKTsKK30KKworYm9v
bCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlEKQoreworICAgIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQgc2hvcnRo
YW5kID0gc2hvcnRoYW5kRm9yUHJvcGVydHkocHJvcGVydHlJRCk7CisgICAgaWYgKCFzaG9ydGhh
bmQubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgcmV0ID0gcmVt
b3ZlUHJvcGVydGllc0luU2V0KHNob3J0aGFuZC5wcm9wZXJ0aWVzKCksIHNob3J0aGFuZC5sZW5n
dGgoKSk7CisKKyAgICBDU1NQcm9wZXJ0eUlEIHByZWZpeGluZ1ZhcmlhbnQgPSBwcmVmaXhpbmdW
YXJpYW50Rm9yUHJvcGVydHlJZChwcm9wZXJ0eUlEKTsKKyAgICBpZiAocHJlZml4aW5nVmFyaWFu
dCA9PSBwcm9wZXJ0eUlEKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgU3R5bGVQcm9wZXJ0
eVNob3J0aGFuZCBzaG9ydGhhbmRQcmVmaXhpbmdWYXJpYW50ID0gc2hvcnRoYW5kRm9yUHJvcGVy
dHkocHJlZml4aW5nVmFyaWFudCk7CisgICAgcmV0dXJuIHJlbW92ZVByb3BlcnRpZXNJblNldChz
aG9ydGhhbmRQcmVmaXhpbmdWYXJpYW50LnByb3BlcnRpZXMoKSwgc2hvcnRoYW5kUHJlZml4aW5n
VmFyaWFudC5sZW5ndGgoKSk7Cit9CisKK2Jvb2wgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OnJl
bW92ZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3RyaW5nKiByZXR1cm5UZXh0
KQoreworICAgIGlmIChyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eShwcm9wZXJ0eUlEKSkgeworICAg
ICAgICAvLyBGSVhNRTogUmV0dXJuIGFuIGVxdWl2YWxlbnQgc2hvcnRoYW5kIHdoZW4gcG9zc2li
bGUuCisgICAgICAgIGlmIChyZXR1cm5UZXh0KQorICAgICAgICAgICAgKnJldHVyblRleHQgPSAi
IjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaW50IGZvdW5kUHJvcGVydHlJ
bmRleCA9IGZpbmRQcm9wZXJ0eUluZGV4KHByb3BlcnR5SUQpOworICAgIGlmIChmb3VuZFByb3Bl
cnR5SW5kZXggPT0gLTEpIHsKKyAgICAgICAgaWYgKHJldHVyblRleHQpCisgICAgICAgICAgICAq
cmV0dXJuVGV4dCA9ICIiOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KHJldHVyblRleHQpCisgICAgICAgICpyZXR1cm5UZXh0ID0gcHJvcGVydHlBdChmb3VuZFByb3Bl
cnR5SW5kZXgpLnZhbHVlKCktPmNzc1RleHQoKTsKKworICAgIC8vIEEgbW9yZSBlZmZpY2llbnQg
cmVtb3ZhbCBzdHJhdGVneSB3b3VsZCBpbnZvbHZlIG1hcmtpbmcgZW50cmllcyBhcyBlbXB0eQor
ICAgIC8vIGFuZCBzd2VlcGluZyB0aGVtIHdoZW4gdGhlIHZlY3RvciBncm93cyB0b28gYmlnLgor
ICAgIG1fcHJvcGVydHlWZWN0b3IucmVtb3ZlKGZvdW5kUHJvcGVydHlJbmRleCk7CisKKyAgICBy
ZW1vdmVQcmVmaXhlZE9yVW5wcmVmaXhlZFByb3BlcnR5KHByb3BlcnR5SUQpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZVByZWZp
eGVkT3JVbnByZWZpeGVkUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQoreworICAg
IGludCBmb3VuZFByb3BlcnR5SW5kZXggPSBmaW5kUHJvcGVydHlJbmRleChwcmVmaXhpbmdWYXJp
YW50Rm9yUHJvcGVydHlJZChwcm9wZXJ0eUlEKSk7CisgICAgaWYgKGZvdW5kUHJvcGVydHlJbmRl
eCA9PSAtMSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcHJvcGVydHlWZWN0b3IucmVtb3ZlKGZv
dW5kUHJvcGVydHlJbmRleCk7Cit9CisKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cHJvcGVydHlJ
c0ltcG9ydGFudChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpIGNvbnN0Cit7CisgICAgaW50IGZv
dW5kUHJvcGVydHlJbmRleCA9IGZpbmRQcm9wZXJ0eUluZGV4KHByb3BlcnR5SUQpOworICAgIGlm
IChmb3VuZFByb3BlcnR5SW5kZXggIT0gLTEpCisgICAgICAgIHJldHVybiBwcm9wZXJ0eUF0KGZv
dW5kUHJvcGVydHlJbmRleCkuaXNJbXBvcnRhbnQoKTsKKworICAgIFN0eWxlUHJvcGVydHlTaG9y
dGhhbmQgc2hvcnRoYW5kID0gc2hvcnRoYW5kRm9yUHJvcGVydHkocHJvcGVydHlJRCk7CisgICAg
aWYgKCFzaG9ydGhhbmQubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaG9ydGhhbmQubGVuZ3RoKCk7ICsraSkgeworICAgICAg
ICBpZiAoIXByb3BlcnR5SXNJbXBvcnRhbnQoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtpXSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitT
dHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0UHJvcGVydHlTaG9ydGhhbmQoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlEKSBjb25zdAoreworICAgIGludCBmb3VuZFByb3BlcnR5SW5kZXggPSBmaW5k
UHJvcGVydHlJbmRleChwcm9wZXJ0eUlEKTsKKyAgICBpZiAoZm91bmRQcm9wZXJ0eUluZGV4ID09
IC0xKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGdldFByb3BlcnR5TmFt
ZVN0cmluZyhwcm9wZXJ0eUF0KGZvdW5kUHJvcGVydHlJbmRleCkuc2hvcnRoYW5kSUQoKSk7Cit9
CisKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6aXNQcm9wZXJ0eUltcGxpY2l0KENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCkgY29uc3QKK3sKKyAgICBpbnQgZm91bmRQcm9wZXJ0eUluZGV4ID0gZmlu
ZFByb3BlcnR5SW5kZXgocHJvcGVydHlJRCk7CisgICAgaWYgKGZvdW5kUHJvcGVydHlJbmRleCA9
PSAtMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBwcm9wZXJ0eUF0KGZvdW5k
UHJvcGVydHlJbmRleCkuaXNJbXBsaWNpdCgpOworfQorCitib29sIE11dGFibGVTdHlsZVByb3Bl
cnR5U2V0OjpzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHls
ZVNoZWV0KQoreworICAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIHRvIGFuIGVtcHR5IHN0cmluZyBq
dXN0IHJlbW92ZXMgdGhlIHByb3BlcnR5IGluIGJvdGggSUUgYW5kIEdlY2tvLgorICAgIC8vIFNl
dHRpbmcgaXQgdG8gbnVsbCBzZWVtcyB0byBwcm9kdWNlIGxlc3MgY29uc2lzdGVudCByZXN1bHRz
LCBidXQgd2UgdHJlYXQgaXQganVzdCB0aGUgc2FtZS4KKyAgICBpZiAodmFsdWUuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCk7CisKKyAgICAvLyBX
aGVuIHJlcGxhY2luZyBhbiBleGlzdGluZyBwcm9wZXJ0eSB2YWx1ZSwgdGhpcyBtb3ZlcyB0aGUg
cHJvcGVydHkgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4KKyAgICAvLyBGaXJlZm94IHByZXNlcnZl
cyB0aGUgcG9zaXRpb24sIGFuZCBNU0lFIG1vdmVzIHRoZSBwcm9wZXJ0eSB0byB0aGUgYmVnaW5u
aW5nLgorICAgIHJldHVybiBDU1NQYXJzZXI6OnBhcnNlVmFsdWUodGhpcywgcHJvcGVydHlJRCwg
dmFsdWUsIGltcG9ydGFudCwgY3NzUGFyc2VyTW9kZSgpLCBjb250ZXh0U3R5bGVTaGVldCk7Cit9
CisKK3ZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcHJwVmFsdWUsIGJvb2wgaW1wb3J0
YW50KQoreworICAgIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQgc2hvcnRoYW5kID0gc2hvcnRoYW5k
Rm9yUHJvcGVydHkocHJvcGVydHlJRCk7CisgICAgaWYgKCFzaG9ydGhhbmQubGVuZ3RoKCkpIHsK
KyAgICAgICAgc2V0UHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHlJRCwgcHJwVmFsdWUsIGlt
cG9ydGFudCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVtb3ZlUHJvcGVydGll
c0luU2V0KHNob3J0aGFuZC5wcm9wZXJ0aWVzKCksIHNob3J0aGFuZC5sZW5ndGgoKSk7CisKKyAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNob3J0aGFuZC5sZW5ndGgoKTsgKytpKQorICAgICAgICBtX3Byb3BlcnR5VmVj
dG9yLmFwcGVuZChDU1NQcm9wZXJ0eShzaG9ydGhhbmQucHJvcGVydGllcygpW2ldLCB2YWx1ZSwg
aW1wb3J0YW50KSk7Cit9CisKK3ZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3Bl
cnR5KGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSwgQ1NTUHJvcGVydHkqIHNsb3QpCit7Cisg
ICAgaWYgKCFyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eShwcm9wZXJ0eS5pZCgpKSkgeworICAgICAg
ICBDU1NQcm9wZXJ0eSogdG9SZXBsYWNlID0gc2xvdCA/IHNsb3QgOiBmaW5kQ1NTUHJvcGVydHlX
aXRoSUQocHJvcGVydHkuaWQoKSk7CisgICAgICAgIGlmICh0b1JlcGxhY2UpIHsKKyAgICAgICAg
ICAgICp0b1JlcGxhY2UgPSBwcm9wZXJ0eTsKKyAgICAgICAgICAgIHNldFByZWZpeGluZ1Zhcmlh
bnRQcm9wZXJ0eShwcm9wZXJ0eSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisgICAgYXBwZW5kUHJlZml4aW5nVmFyaWFudFByb3BlcnR5KHByb3BlcnR5KTsKK30KKwor
c3RhdGljIHVuc2lnbmVkIGdldEluZGV4SW5TaG9ydGhhbmRWZWN0b3JGb3JQcmVmaXhpbmdWYXJp
YW50KGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSwgQ1NTUHJvcGVydHlJRCBwcmVmaXhpbmdW
YXJpYW50KQoreworICAgIGlmICghcHJvcGVydHkuaXNTZXRGcm9tU2hvcnRoYW5kKCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgQ1NTUHJvcGVydHlJRCBwcmVmaXhlZFNob3J0aGFuZCA9IHBy
ZWZpeGluZ1ZhcmlhbnRGb3JQcm9wZXJ0eUlkKHByb3BlcnR5LnNob3J0aGFuZElEKCkpOworICAg
IHJldHVybiBpbmRleE9mU2hvcnRoYW5kRm9yTG9uZ2hhbmQocHJlZml4ZWRTaG9ydGhhbmQsIG1h
dGNoaW5nU2hvcnRoYW5kc0ZvckxvbmdoYW5kKHByZWZpeGluZ1ZhcmlhbnQpKTsKK30KKwordm9p
ZCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6YXBwZW5kUHJlZml4aW5nVmFyaWFudFByb3BlcnR5
KGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSkKK3sKKyAgICBtX3Byb3BlcnR5VmVjdG9yLmFw
cGVuZChwcm9wZXJ0eSk7CisgICAgQ1NTUHJvcGVydHlJRCBwcmVmaXhpbmdWYXJpYW50ID0gcHJl
Zml4aW5nVmFyaWFudEZvclByb3BlcnR5SWQocHJvcGVydHkuaWQoKSk7CisgICAgaWYgKHByZWZp
eGluZ1ZhcmlhbnQgPT0gcHJvcGVydHkuaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9w
cm9wZXJ0eVZlY3Rvci5hcHBlbmQoQ1NTUHJvcGVydHkocHJlZml4aW5nVmFyaWFudCwgcHJvcGVy
dHkudmFsdWUoKSwgcHJvcGVydHkuaXNJbXBvcnRhbnQoKSwgcHJvcGVydHkuaXNTZXRGcm9tU2hv
cnRoYW5kKCksIGdldEluZGV4SW5TaG9ydGhhbmRWZWN0b3JGb3JQcmVmaXhpbmdWYXJpYW50KHBy
b3BlcnR5LCBwcmVmaXhpbmdWYXJpYW50KSwgcHJvcGVydHkubWV0YWRhdGEoKS5tX2ltcGxpY2l0
KSk7Cit9CisKK3ZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OnNldFByZWZpeGluZ1Zhcmlh
bnRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkpCit7CisgICAgQ1NTUHJvcGVy
dHlJRCBwcmVmaXhpbmdWYXJpYW50ID0gcHJlZml4aW5nVmFyaWFudEZvclByb3BlcnR5SWQocHJv
cGVydHkuaWQoKSk7CisgICAgQ1NTUHJvcGVydHkqIHRvUmVwbGFjZSA9IGZpbmRDU1NQcm9wZXJ0
eVdpdGhJRChwcmVmaXhpbmdWYXJpYW50KTsKKyAgICBpZiAodG9SZXBsYWNlICYmIHByZWZpeGlu
Z1ZhcmlhbnQgIT0gcHJvcGVydHkuaWQoKSkKKyAgICAgICAgKnRvUmVwbGFjZSA9IENTU1Byb3Bl
cnR5KHByZWZpeGluZ1ZhcmlhbnQsIHByb3BlcnR5LnZhbHVlKCksIHByb3BlcnR5LmlzSW1wb3J0
YW50KCksIHByb3BlcnR5LmlzU2V0RnJvbVNob3J0aGFuZCgpLCBnZXRJbmRleEluU2hvcnRoYW5k
VmVjdG9yRm9yUHJlZml4aW5nVmFyaWFudChwcm9wZXJ0eSwgcHJlZml4aW5nVmFyaWFudCksIHBy
b3BlcnR5Lm1ldGFkYXRhKCkubV9pbXBsaWNpdCk7Cit9CisKK2Jvb2wgTXV0YWJsZVN0eWxlUHJv
cGVydHlTZXQ6OnNldFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgQ1NTVmFsdWVJ
RCBpZGVudGlmaWVyLCBib29sIGltcG9ydGFudCkKK3sKKyAgICBzZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eShwcm9wZXJ0eUlELCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWRl
bnRpZmllciksIGltcG9ydGFudCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE11dGFi
bGVTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
IENTU1Byb3BlcnR5SUQgaWRlbnRpZmllciwgYm9vbCBpbXBvcnRhbnQpCit7CisgICAgc2V0UHJv
cGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHlJRCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKGlkZW50aWZpZXIpLCBpbXBvcnRhbnQpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6cGFyc2VEZWNsYXJhdGlvbihjb25zdCBT
dHJpbmcmIHN0eWxlRGVjbGFyYXRpb24sIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxl
U2hlZXQpCit7CisgICAgbV9wcm9wZXJ0eVZlY3Rvci5jbGVhcigpOworCisgICAgQ1NTUGFyc2Vy
Q29udGV4dCBjb250ZXh0KGNzc1BhcnNlck1vZGUoKSk7CisgICAgaWYgKGNvbnRleHRTdHlsZVNo
ZWV0KSB7CisgICAgICAgIGNvbnRleHQgPSBjb250ZXh0U3R5bGVTaGVldC0+cGFyc2VyQ29udGV4
dCgpOworICAgICAgICBjb250ZXh0Lm1vZGUgPSBjc3NQYXJzZXJNb2RlKCk7CisgICAgfQorICAg
IENTU1BhcnNlciBwYXJzZXIoY29udGV4dCk7CisgICAgcGFyc2VyLnBhcnNlRGVjbGFyYXRpb24o
dGhpcywgc3R5bGVEZWNsYXJhdGlvbiwgMCwgY29udGV4dFN0eWxlU2hlZXQpOworfQorCit2b2lk
IE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjphZGRQYXJzZWRQcm9wZXJ0aWVzKGNvbnN0IFZlY3Rv
cjxDU1NQcm9wZXJ0eT4mIHByb3BlcnRpZXMpCit7CisgICAgbV9wcm9wZXJ0eVZlY3Rvci5yZXNl
cnZlQ2FwYWNpdHkobV9wcm9wZXJ0eVZlY3Rvci5zaXplKCkgKyBwcm9wZXJ0aWVzLnNpemUoKSk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnRpZXMuc2l6ZSgpOyArK2kpCisg
ICAgICAgIGFkZFBhcnNlZFByb3BlcnR5KHByb3BlcnRpZXNbaV0pOworfQorCit2b2lkIE11dGFi
bGVTdHlsZVByb3BlcnR5U2V0OjphZGRQYXJzZWRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYg
cHJvcGVydHkpCit7CisgICAgLy8gT25seSBhZGQgcHJvcGVydGllcyB0aGF0IGhhdmUgbm8gIWlt
cG9ydGFudCBjb3VudGVycGFydCBwcmVzZW50CisgICAgaWYgKCFwcm9wZXJ0eUlzSW1wb3J0YW50
KHByb3BlcnR5LmlkKCkpIHx8IHByb3BlcnR5LmlzSW1wb3J0YW50KCkpCisgICAgICAgIHNldFBy
b3BlcnR5KHByb3BlcnR5KTsKK30KKworU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmFzVGV4dCgp
IGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisKKyAgICBpbnQgcG9zaXRpb25Y
UHJvcGVydHlJbmRleCA9IC0xOworICAgIGludCBwb3NpdGlvbllQcm9wZXJ0eUluZGV4ID0gLTE7
CisgICAgaW50IHJlcGVhdFhQcm9wZXJ0eUluZGV4ID0gLTE7CisgICAgaW50IHJlcGVhdFlQcm9w
ZXJ0eUluZGV4ID0gLTE7CisKKyAgICBCaXRBcnJheTxudW1DU1NQcm9wZXJ0aWVzPiBzaG9ydGhh
bmRQcm9wZXJ0eVVzZWQ7CisgICAgQml0QXJyYXk8bnVtQ1NTUHJvcGVydGllcz4gc2hvcnRoYW5k
UHJvcGVydHlBcHBlYXJlZDsKKworICAgIHVuc2lnbmVkIHNpemUgPSBwcm9wZXJ0eUNvdW50KCk7
CisgICAgdW5zaWduZWQgbnVtRGVjbHMgPSAwOworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4g
PCBzaXplOyArK24pIHsKKyAgICAgICAgUHJvcGVydHlSZWZlcmVuY2UgcHJvcGVydHkgPSBwcm9w
ZXJ0eUF0KG4pOworICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBwcm9wZXJ0eS5p
ZCgpOworICAgICAgICBDU1NQcm9wZXJ0eUlEIHNob3J0aGFuZFByb3BlcnR5SUQgPSBDU1NQcm9w
ZXJ0eUludmFsaWQ7CisgICAgICAgIENTU1Byb3BlcnR5SUQgYm9yZGVyRmFsbGJhY2tTaG9ydGhh
bmRQcm9wZXJ0eSA9IENTU1Byb3BlcnR5SW52YWxpZDsKKyAgICAgICAgU3RyaW5nIHZhbHVlOwor
CisgICAgICAgIHN3aXRjaCAocHJvcGVydHlJRCkgeworICAgICAgICBjYXNlIENTU1Byb3BlcnR5
QmFja2dyb3VuZFBvc2l0aW9uWDoKKyAgICAgICAgICAgIHBvc2l0aW9uWFByb3BlcnR5SW5kZXgg
PSBuOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kUG9zaXRpb25ZOgorICAgICAgICAgICAgcG9zaXRpb25ZUHJvcGVydHlJbmRleCA9IG47
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRSZXBlYXRYOgorICAgICAgICAgICAgcmVwZWF0WFByb3BlcnR5SW5kZXggPSBuOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0
WToKKyAgICAgICAgICAgIHJlcGVhdFlQcm9wZXJ0eUluZGV4ID0gbjsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGg6CisgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoOgorICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyQm90dG9tV2lkdGg6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0
V2lkdGg6CisgICAgICAgICAgICBpZiAoIWJvcmRlckZhbGxiYWNrU2hvcnRoYW5kUHJvcGVydHkp
CisgICAgICAgICAgICAgICAgYm9yZGVyRmFsbGJhY2tTaG9ydGhhbmRQcm9wZXJ0eSA9IENTU1By
b3BlcnR5Qm9yZGVyV2lkdGg7CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BTdHls
ZToKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGU6CisgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21TdHlsZToKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUJvcmRlckxlZnRTdHlsZToKKyAgICAgICAgICAgIGlmICghYm9yZGVyRmFsbGJhY2tTaG9ydGhh
bmRQcm9wZXJ0eSkKKyAgICAgICAgICAgICAgICBib3JkZXJGYWxsYmFja1Nob3J0aGFuZFByb3Bl
cnR5ID0gQ1NTUHJvcGVydHlCb3JkZXJTdHlsZTsKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJv
cmRlclRvcENvbG9yOgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcjoK
KyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yOgorICAgICAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yOgorICAgICAgICAgICAgaWYgKCFib3JkZXJGYWxs
YmFja1Nob3J0aGFuZFByb3BlcnR5KQorICAgICAgICAgICAgICAgIGJvcmRlckZhbGxiYWNrU2hv
cnRoYW5kUHJvcGVydHkgPSBDU1NQcm9wZXJ0eUJvcmRlckNvbG9yOworCisgICAgICAgICAgICAv
LyBGSVhNRTogRGVhbCB3aXRoIGNhc2VzIHdoZXJlIG9ubHkgc29tZSBvZiBib3JkZXItKHRvcHxy
aWdodHxib3R0b218bGVmdCkgYXJlIHNwZWNpZmllZC4KKyAgICAgICAgICAgIGlmICghc2hvcnRo
YW5kUHJvcGVydHlBcHBlYXJlZC5nZXQoQ1NTUHJvcGVydHlCb3JkZXIgLSBmaXJzdENTU1Byb3Bl
cnR5KSkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gYm9yZGVyUHJvcGVydHlWYWx1ZShSZXR1
cm5OdWxsT25VbmNvbW1vblZhbHVlcyk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVs
bCgpKQorICAgICAgICAgICAgICAgICAgICBzaG9ydGhhbmRQcm9wZXJ0eUFwcGVhcmVkLnNldChD
U1NQcm9wZXJ0eUJvcmRlciAtIGZpcnN0Q1NTUHJvcGVydHkpOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kUHJvcGVydHlJRCA9IENTU1Byb3BlcnR5
Qm9yZGVyOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG9ydGhhbmRQcm9wZXJ0eVVzZWQuZ2V0
KENTU1Byb3BlcnR5Qm9yZGVyIC0gZmlyc3RDU1NQcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAg
c2hvcnRoYW5kUHJvcGVydHlJRCA9IENTU1Byb3BlcnR5Qm9yZGVyOworICAgICAgICAgICAgaWYg
KCFzaG9ydGhhbmRQcm9wZXJ0eUlEKQorICAgICAgICAgICAgICAgIHNob3J0aGFuZFByb3BlcnR5
SUQgPSBib3JkZXJGYWxsYmFja1Nob3J0aGFuZFByb3BlcnR5OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZzoK
KyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZzoKKyAg
ICAgICAgICAgIHNob3J0aGFuZFByb3BlcnR5SUQgPSBDU1NQcm9wZXJ0eUJvcmRlclNwYWNpbmc7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6
CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0OgorICAgICAgICBjYXNlIENTU1By
b3BlcnR5Rm9udFNpemU6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3R5bGU6CisgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudDoKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUZvbnRXZWlnaHQ6CisgICAgICAgICAgICAvLyBEb24ndCB1c2UgQ1NTUHJvcGVydHlGb250IGJl
Y2F1c2Ugb2xkIFVBcyBjYW4ndCByZWNvZ25pemUgdGhlbSBidXQgYXJlIGltcG9ydGFudCBmb3Ig
ZWRpdGluZy4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlz
dFN0eWxlVHlwZToKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZVBvc2l0aW9uOgor
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2U6CisgICAgICAgICAgICBzaG9y
dGhhbmRQcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHlMaXN0U3R5bGU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpblRvcDoKKyAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eU1hcmdpblJpZ2h0OgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luQm90dG9t
OgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luTGVmdDoKKyAgICAgICAgICAgIHNob3J0
aGFuZFByb3BlcnR5SUQgPSBDU1NQcm9wZXJ0eU1hcmdpbjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZVdpZHRoOgorICAgICAgICBjYXNlIENTU1By
b3BlcnR5T3V0bGluZVN0eWxlOgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZUNvbG9y
OgorICAgICAgICAgICAgc2hvcnRoYW5kUHJvcGVydHlJRCA9IENTU1Byb3BlcnR5T3V0bGluZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3dYOgor
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3dZOgorICAgICAgICAgICAgc2hvcnRoYW5k
UHJvcGVydHlJRCA9IENTU1Byb3BlcnR5T3ZlcmZsb3c7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdUb3A6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlQYWRkaW5nUmlnaHQ6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tOgor
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ0xlZnQ6CisgICAgICAgICAgICBzaG9ydGhh
bmRQcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHlQYWRkaW5nOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0aW9uUHJvcGVydHk6CisgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlUcmFuc2l0aW9uRHVyYXRpb246CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlU
cmFuc2l0aW9uVGltaW5nRnVuY3Rpb246CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0
aW9uRGVsYXk6CisgICAgICAgICAgICBzaG9ydGhhbmRQcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHlU
cmFuc2l0aW9uOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRBbmltYXRpb25OYW1lOgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0
aW9uRHVyYXRpb246CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25UaW1p
bmdGdW5jdGlvbjoKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRlbGF5
OgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6
CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EaXJlY3Rpb246CisgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25GaWxsTW9kZToKKyAgICAgICAgICAg
IHNob3J0aGFuZFByb3BlcnR5SUQgPSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleERpcmVjdGlv
bjoKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhXcmFwOgorICAgICAgICAgICAg
c2hvcnRoYW5kUHJvcGVydHlJRCA9IENTU1Byb3BlcnR5V2Via2l0RmxleEZsb3c7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhCYXNpczoKKyAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhHcm93OgorICAgICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0RmxleFNocmluazoKKyAgICAgICAgICAgIHNob3J0aGFuZFByb3BlcnR5SUQg
PSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblg6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXNrUG9zaXRpb25ZOgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFz
a1JlcGVhdFg6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WToKKyAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZToKKyAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQ6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXNrUG9zaXRpb246CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcDoKKyAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW46CisgICAgICAgICAgICBzaG9y
dGhhbmRQcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHlXZWJraXRNYXNrOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5YOgorICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWToKKyAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblo6CisgICAgICAgICAgICBzaG9ydGhh
bmRQcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW47CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9w
ZXJ0eToKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbjoK
KyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjoK
KyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EZWxheToKKyAgICAgICAg
ICAgIHNob3J0aGFuZFByb3BlcnR5SUQgPSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb247Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc2hvcnRQcm9wZXJ0eUluZGV4ID0gc2hvcnRo
YW5kUHJvcGVydHlJRCAtIGZpcnN0Q1NTUHJvcGVydHk7CisgICAgICAgIGlmIChzaG9ydGhhbmRQ
cm9wZXJ0eUlEKSB7CisgICAgICAgICAgICBpZiAoc2hvcnRoYW5kUHJvcGVydHlVc2VkLmdldChz
aG9ydFByb3BlcnR5SW5kZXgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgaWYgKCFzaG9ydGhhbmRQcm9wZXJ0eUFwcGVhcmVkLmdldChzaG9ydFByb3BlcnR5SW5kZXgp
ICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0UHJvcGVydHlW
YWx1ZShzaG9ydGhhbmRQcm9wZXJ0eUlEKTsKKyAgICAgICAgICAgIHNob3J0aGFuZFByb3BlcnR5
QXBwZWFyZWQuc2V0KHNob3J0UHJvcGVydHlJbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIXZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBwcm9wZXJ0eUlEID0gc2hvcnRoYW5k
UHJvcGVydHlJRDsKKyAgICAgICAgICAgIHNob3J0aGFuZFByb3BlcnR5VXNlZC5zZXQoc2hvcnRQ
cm9wZXJ0eUluZGV4KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB2YWx1ZSA9IHByb3Bl
cnR5LnZhbHVlKCktPmNzc1RleHQoKTsKKworICAgICAgICBpZiAodmFsdWUgPT0gImluaXRpYWwi
ICYmICFDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQcm9wZXJ0eShwcm9wZXJ0eUlEKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChudW1EZWNscysrKQorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnICcpOworICAgICAgICByZXN1bHQuYXBwZW5kKGdldFByb3BlcnR5TmFt
ZShwcm9wZXJ0eUlEKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCI6ICIpOworICAg
ICAgICByZXN1bHQuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgaWYgKHByb3BlcnR5LmlzSW1wb3J0
YW50KCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiICFpbXBvcnRhbnQiKTsK
KyAgICAgICAgcmVzdWx0LmFwcGVuZCgnOycpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGEgbm90LXNvLW5pY2Ugd2F5IHRvIHR1cm4geC95IHBvc2l0aW9ucyBpbnRvIHNpbmdsZSBi
YWNrZ3JvdW5kLXBvc2l0aW9uIGluIG91dHB1dC4KKyAgICAvLyBJdCBpcyByZXF1aXJlZCBiZWNh
dXNlIGJhY2tncm91bmQtcG9zaXRpb24teC95IGFyZSBub24tc3RhbmRhcmQgcHJvcGVydGllcyBh
bmQgV2ViS2l0IGdlbmVyYXRlZCBvdXRwdXQKKyAgICAvLyB3b3VsZCBub3Qgd29yayBpbiBGaXJl
Zm94ICg8cmRhcjovL3Byb2JsZW0vNTE0MzE4Mz4pCisgICAgLy8gSXQgd291bGQgYmUgYSBiZXR0
ZXIgc29sdXRpb24gaWYgYmFja2dyb3VuZC1wb3NpdGlvbiB3YXMgQ1NTX1BBSVIuCisgICAgaWYg
KHBvc2l0aW9uWFByb3BlcnR5SW5kZXggIT0gLTEgJiYgcG9zaXRpb25ZUHJvcGVydHlJbmRleCAh
PSAtMSAmJiBwcm9wZXJ0eUF0KHBvc2l0aW9uWFByb3BlcnR5SW5kZXgpLmlzSW1wb3J0YW50KCkg
PT0gcHJvcGVydHlBdChwb3NpdGlvbllQcm9wZXJ0eUluZGV4KS5pc0ltcG9ydGFudCgpKSB7Cisg
ICAgICAgIFByb3BlcnR5UmVmZXJlbmNlIHBvc2l0aW9uWFByb3BlcnR5ID0gcHJvcGVydHlBdChw
b3NpdGlvblhQcm9wZXJ0eUluZGV4KTsKKyAgICAgICAgUHJvcGVydHlSZWZlcmVuY2UgcG9zaXRp
b25ZUHJvcGVydHkgPSBwcm9wZXJ0eUF0KHBvc2l0aW9uWVByb3BlcnR5SW5kZXgpOworCisgICAg
ICAgIGlmIChudW1EZWNscysrKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOworICAg
ICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiYmFja2dyb3VuZC1wb3NpdGlvbjogIik7CisgICAg
ICAgIGlmIChwb3NpdGlvblhQcm9wZXJ0eS52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpIHx8IHBvc2l0
aW9uWVByb3BlcnR5LnZhbHVlKCktPmlzVmFsdWVMaXN0KCkpCisgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShiYWNrZ3JvdW5kUG9zaXRpb25TaG9ydGhh
bmQoKSkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocG9zaXRp
b25YUHJvcGVydHkudmFsdWUoKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJyAnKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocG9zaXRpb25ZUHJvcGVydHkudmFs
dWUoKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocG9zaXRpb25YUHJvcGVy
dHkuaXNJbXBvcnRhbnQoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIgIWlt
cG9ydGFudCIpOworICAgICAgICByZXN1bHQuYXBwZW5kKCc7Jyk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKHBvc2l0aW9uWFByb3BlcnR5SW5kZXggIT0gLTEpIHsKKyAgICAgICAgICAgIGlm
IChudW1EZWNscysrKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQocHJvcGVydHlBdChwb3NpdGlvblhQcm9wZXJ0eUluZGV4KS5j
c3NUZXh0KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChwb3NpdGlvbllQcm9wZXJ0eUluZGV4
ICE9IC0xKSB7CisgICAgICAgICAgICBpZiAobnVtRGVjbHMrKykKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHByb3BlcnR5QXQo
cG9zaXRpb25ZUHJvcGVydHlJbmRleCkuY3NzVGV4dCgpKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGRvIHRoZSBzYW1lIGZvciBiYWNrZ3JvdW5kLXJlcGVh
dC4KKyAgICBpZiAocmVwZWF0WFByb3BlcnR5SW5kZXggIT0gLTEgJiYgcmVwZWF0WVByb3BlcnR5
SW5kZXggIT0gLTEgJiYgcHJvcGVydHlBdChyZXBlYXRYUHJvcGVydHlJbmRleCkuaXNJbXBvcnRh
bnQoKSA9PSBwcm9wZXJ0eUF0KHJlcGVhdFlQcm9wZXJ0eUluZGV4KS5pc0ltcG9ydGFudCgpKSB7
CisgICAgICAgIFByb3BlcnR5UmVmZXJlbmNlIHJlcGVhdFhQcm9wZXJ0eSA9IHByb3BlcnR5QXQo
cmVwZWF0WFByb3BlcnR5SW5kZXgpOworICAgICAgICBQcm9wZXJ0eVJlZmVyZW5jZSByZXBlYXRZ
UHJvcGVydHkgPSBwcm9wZXJ0eUF0KHJlcGVhdFlQcm9wZXJ0eUluZGV4KTsKKworICAgICAgICBp
ZiAobnVtRGVjbHMrKykKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAg
cmVzdWx0LmFwcGVuZExpdGVyYWwoImJhY2tncm91bmQtcmVwZWF0OiAiKTsKKyAgICAgICAgaWYg
KHJlcGVhdFhQcm9wZXJ0eS52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpIHx8IHJlcGVhdFlQcm9wZXJ0
eS52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChnZXRM
YXllcmVkU2hvcnRoYW5kVmFsdWUoYmFja2dyb3VuZFJlcGVhdFNob3J0aGFuZCgpKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZXBlYXRYUHJvcGVydHkudmFs
dWUoKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQocmVwZWF0WVByb3BlcnR5LnZhbHVlKCktPmNzc1RleHQoKSk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlcGVhdFhQcm9wZXJ0eS5pc0ltcG9ydGFudCgpKQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIiAhaW1wb3J0YW50Iik7CisgICAgICAg
IHJlc3VsdC5hcHBlbmQoJzsnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocmVwZWF0WFBy
b3BlcnR5SW5kZXggIT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChudW1EZWNscysrKQorICAgICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
cHJvcGVydHlBdChyZXBlYXRYUHJvcGVydHlJbmRleCkuY3NzVGV4dCgpKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAocmVwZWF0WVByb3BlcnR5SW5kZXggIT0gLTEpIHsKKyAgICAgICAgICAgIGlm
IChudW1EZWNscysrKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQocHJvcGVydHlBdChyZXBlYXRZUHJvcGVydHlJbmRleCkuY3Nz
VGV4dCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVCghbnVtRGVjbHMgXiAhcmVz
dWx0LmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworfQorCitib29s
IFN0eWxlUHJvcGVydHlTZXQ6Omhhc0NTU09NV3JhcHBlcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1faXNNdXRhYmxlICYmIHN0YXRpY19jYXN0PGNvbnN0IE11dGFibGVTdHlsZVByb3BlcnR5U2V0
Kj4odGhpcyktPm1fY3Nzb21XcmFwcGVyOworfQorCit2b2lkIE11dGFibGVTdHlsZVByb3BlcnR5
U2V0OjptZXJnZUFuZE92ZXJyaWRlT25Db25mbGljdChjb25zdCBTdHlsZVByb3BlcnR5U2V0JiBv
dGhlcikKK3sKKyAgICB1bnNpZ25lZCBzaXplID0gb3RoZXIucHJvcGVydHlDb3VudCgpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIGFkZFBhcnNlZFBy
b3BlcnR5KG90aGVyLnByb3BlcnR5QXQoaSkudG9DU1NQcm9wZXJ0eSgpKTsKK30KKwordm9pZCBT
dHlsZVByb3BlcnR5U2V0OjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxVUkw+
JiB1cmxzLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KSBjb25zdAorewor
ICAgIHVuc2lnbmVkIHNpemUgPSBwcm9wZXJ0eUNvdW50KCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgcHJvcGVydHlBdChpKS52YWx1ZSgpLT5hZGRT
dWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBjb250ZXh0U3R5bGVTaGVldCk7Cit9CisKK2Jvb2wg
U3R5bGVQcm9wZXJ0eVNldDo6aGFzRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcygpIGNvbnN0
Cit7CisgICAgdW5zaWduZWQgc2l6ZSA9IHByb3BlcnR5Q291bnQoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmIChwcm9wZXJ0eUF0KGkpLnZh
bHVlKCktPmhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgaXMgdGhl
IGxpc3Qgb2YgcHJvcGVydGllcyB3ZSB3YW50IHRvIGNvcHkgaW4gdGhlIGNvcHlCbG9ja1Byb3Bl
cnRpZXMoKSBmdW5jdGlvbi4KKy8vIEl0IGlzIHRoZSBsaXN0IG9mIENTUyBwcm9wZXJ0aWVzIHRo
YXQgYXBwbHkgc3BlY2lhbGx5IHRvIGJsb2NrLWxldmVsIGVsZW1lbnRzLgorc3RhdGljIGNvbnN0
IENTU1Byb3BlcnR5SUQgYmxvY2tQcm9wZXJ0aWVzW10gPSB7CisgICAgQ1NTUHJvcGVydHlPcnBo
YW5zLAorICAgIENTU1Byb3BlcnR5T3ZlcmZsb3csIC8vIFRoaXMgY2FuIGJlIGFsc28gYmUgYXBw
bGllZCB0byByZXBsYWNlZCBlbGVtZW50cworICAgIENTU1Byb3BlcnR5V2Via2l0QXNwZWN0UmF0
aW8sCisgICAgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5Db3VudCwKKyAgICBDU1NQcm9wZXJ0eVdl
YmtpdENvbHVtbkdhcCwKKyAgICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvciwKKyAg
ICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVTdHlsZSwKKyAgICBDU1NQcm9wZXJ0eVdlYmtp
dENvbHVtblJ1bGVXaWR0aCwKKyAgICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrQmVmb3Jl
LAorICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJlYWtBZnRlciwKKyAgICBDU1NQcm9wZXJ0
eVdlYmtpdENvbHVtbkJyZWFrSW5zaWRlLAorICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uV2lk
dGgsCisgICAgQ1NTUHJvcGVydHlQYWdlQnJlYWtBZnRlciwKKyAgICBDU1NQcm9wZXJ0eVBhZ2VC
cmVha0JlZm9yZSwKKyAgICBDU1NQcm9wZXJ0eVBhZ2VCcmVha0luc2lkZSwKKyNpZiBFTkFCTEUo
Q1NTX1JFR0lPTlMpCisgICAgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVha0FmdGVyLAorICAg
IENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtCZWZvcmUsCisgICAgQ1NTUHJvcGVydHlXZWJr
aXRSZWdpb25CcmVha0luc2lkZSwKKyNlbmRpZgorICAgIENTU1Byb3BlcnR5VGV4dEFsaWduLAor
I2lmIEVOQUJMRShDU1MzX1RFWFQpCisgICAgQ1NTUHJvcGVydHlXZWJraXRUZXh0QWxpZ25MYXN0
LAorICAgIENTU1Byb3BlcnR5V2Via2l0VGV4dEp1c3RpZnksCisjZW5kaWYgLy8gQ1NTM19URVhU
CisgICAgQ1NTUHJvcGVydHlUZXh0SW5kZW50LAorICAgIENTU1Byb3BlcnR5V2lkb3dzCit9Owor
Cit2b2lkIE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpjbGVhcigpCit7CisgICAgbV9wcm9wZXJ0
eVZlY3Rvci5jbGVhcigpOworfQorCitjb25zdCB1bnNpZ25lZCBudW1CbG9ja1Byb3BlcnRpZXMg
PSBXVEZfQVJSQVlfTEVOR1RIKGJsb2NrUHJvcGVydGllcyk7CisKK1Bhc3NSZWY8TXV0YWJsZVN0
eWxlUHJvcGVydHlTZXQ+IFN0eWxlUHJvcGVydHlTZXQ6OmNvcHlCbG9ja1Byb3BlcnRpZXMoKSBj
b25zdAoreworICAgIHJldHVybiBjb3B5UHJvcGVydGllc0luU2V0KGJsb2NrUHJvcGVydGllcywg
bnVtQmxvY2tQcm9wZXJ0aWVzKTsKK30KKwordm9pZCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6
cmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCkKK3sKKyAgICByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoYmxv
Y2tQcm9wZXJ0aWVzLCBudW1CbG9ja1Byb3BlcnRpZXMpOworfQorCitib29sIE11dGFibGVTdHls
ZVByb3BlcnR5U2V0OjpyZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3QgQ1NTUHJvcGVydHlJRCog
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYgKG1fcHJvcGVydHlWZWN0b3IuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhbHdh
eXMgdXNlZCB3aXRoIHN0YXRpYyBzZXRzIGFuZCBpbiB0aGF0IGNhc2UgY29uc3RydWN0aW5nIHRo
ZSBoYXNoIHJlcGVhdGVkbHkgaXMgcHJldHR5IHBvaW50bGVzcy4KKyAgICBIYXNoU2V0PENTU1By
b3BlcnR5SUQ+IHRvUmVtb3ZlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKKyAgICAgICAgdG9SZW1vdmUuYWRkKHNldFtpXSk7CisKKyAgICBWZWN0b3I8Q1NTUHJv
cGVydHk+IG5ld1Byb3BlcnRpZXM7CisgICAgbmV3UHJvcGVydGllcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG1fcHJvcGVydHlWZWN0b3Iuc2l6ZSgpKTsKKworICAgIHVuc2lnbmVkIHNpemUgPSBt
X3Byb3BlcnR5VmVjdG9yLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgc2l6
ZTsgKytuKSB7CisgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSA9IG1fcHJvcGVy
dHlWZWN0b3IuYXQobik7CisgICAgICAgIC8vIE5vdCBxdWl0ZSBzdXJlIGlmIHRoZSBpc0ltcG9y
dGFudCB0ZXN0IGlzIG5lZWRlZCBidXQgaXQgbWF0Y2hlcyB0aGUgZXhpc3RpbmcgYmVoYXZpb3Iu
CisgICAgICAgIGlmICghcHJvcGVydHkuaXNJbXBvcnRhbnQoKSkgeworICAgICAgICAgICAgaWYg
KHRvUmVtb3ZlLmNvbnRhaW5zKHByb3BlcnR5LmlkKCkpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIG5ld1Byb3BlcnRpZXMuYXBwZW5kKHByb3BlcnR5KTsK
KyAgICB9CisKKyAgICBib29sIGNoYW5nZWQgPSBuZXdQcm9wZXJ0aWVzLnNpemUoKSAhPSBtX3By
b3BlcnR5VmVjdG9yLnNpemUoKTsKKyAgICBtX3Byb3BlcnR5VmVjdG9yID0gbmV3UHJvcGVydGll
czsKKyAgICByZXR1cm4gY2hhbmdlZDsKK30KKworaW50IFN0eWxlUHJvcGVydHlTZXQ6OmZpbmRQ
cm9wZXJ0eUluZGV4KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkgY29uc3QKK3sKKyAgICAvLyBD
b252ZXJ0IGhlcmUgcHJvcGVydHlJRCBpbnRvIGFuIHVpbnQxNl90IHRvIGNvbXBhcmUgaXQgd2l0
aCB0aGUgbWV0YWRhdGEncyBtX3Byb3BlcnR5SUQgdG8gYXZvaWQKKyAgICAvLyB0aGUgY29tcGls
ZXIgY29udmVydGluZyBpdCB0byBhbiBpbnQgbXVsdGlwbGUgdGltZXMgaW4gdGhlIGxvb3AuCisg
ICAgdWludDE2X3QgaWQgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4ocHJvcGVydHlJRCk7CisgICAg
Zm9yIChpbnQgbiA9IHByb3BlcnR5Q291bnQoKSAtIDEgOyBuID49IDA7IC0tbikgeworICAgICAg
ICBpZiAoaWQgPT0gcHJvcGVydHlBdChuKS5wcm9wZXJ0eU1ldGFkYXRhKCkubV9wcm9wZXJ0eUlE
KQorICAgICAgICAgICAgcmV0dXJuIG47CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKworQ1NT
UHJvcGVydHkqIE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpmaW5kQ1NTUHJvcGVydHlXaXRoSUQo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQoreworICAgIGludCBmb3VuZFByb3BlcnR5SW5kZXgg
PSBmaW5kUHJvcGVydHlJbmRleChwcm9wZXJ0eUlEKTsKKyAgICBpZiAoZm91bmRQcm9wZXJ0eUlu
ZGV4ID09IC0xKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gJm1fcHJvcGVydHlWZWN0
b3IuYXQoZm91bmRQcm9wZXJ0eUluZGV4KTsKK30KKworYm9vbCBTdHlsZVByb3BlcnR5U2V0Ojpw
cm9wZXJ0eU1hdGNoZXMoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBDU1NWYWx1ZSog
cHJvcGVydHlWYWx1ZSkgY29uc3QKK3sKKyAgICBpbnQgZm91bmRQcm9wZXJ0eUluZGV4ID0gZmlu
ZFByb3BlcnR5SW5kZXgocHJvcGVydHlJRCk7CisgICAgaWYgKGZvdW5kUHJvcGVydHlJbmRleCA9
PSAtMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBwcm9wZXJ0eUF0KGZvdW5k
UHJvcGVydHlJbmRleCkudmFsdWUoKS0+ZXF1YWxzKCpwcm9wZXJ0eVZhbHVlKTsKK30KKwordm9p
ZCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMoY29u
c3QgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUpCit7CisgICAgVmVjdG9yPENTU1Byb3BlcnR5SUQ+
IHByb3BlcnRpZXNUb1JlbW92ZTsKKyAgICB1bnNpZ25lZCBzaXplID0gbV9wcm9wZXJ0eVZlY3Rv
ci5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAg
ICAgICBQcm9wZXJ0eVJlZmVyZW5jZSBwcm9wZXJ0eSA9IHByb3BlcnR5QXQoaSk7CisgICAgICAg
IGlmIChzdHlsZS0+cHJvcGVydHlNYXRjaGVzKHByb3BlcnR5LmlkKCksIHByb3BlcnR5LnZhbHVl
KCkpKQorICAgICAgICAgICAgcHJvcGVydGllc1RvUmVtb3ZlLmFwcGVuZChwcm9wZXJ0eS5pZCgp
KTsKKyAgICB9ICAgIAorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgbWFzcyByZW1vdmFs
LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzVG9SZW1vdmUuc2l6ZSgp
OyArK2kpCisgICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnRpZXNUb1JlbW92ZVtpXSk7Cit9
CisKK3ZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0
aWVzKGNvbnN0IENvbXB1dGVkU3R5bGVFeHRyYWN0b3IqIGNvbXB1dGVkU3R5bGUpCit7CisgICAg
VmVjdG9yPENTU1Byb3BlcnR5SUQ+IHByb3BlcnRpZXNUb1JlbW92ZTsKKyAgICB1bnNpZ25lZCBz
aXplID0gbV9wcm9wZXJ0eVZlY3Rvci5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemU7ICsraSkgeworICAgICAgICBQcm9wZXJ0eVJlZmVyZW5jZSBwcm9wZXJ0eSA9IHBy
b3BlcnR5QXQoaSk7CisgICAgICAgIGlmIChjb21wdXRlZFN0eWxlLT5wcm9wZXJ0eU1hdGNoZXMo
cHJvcGVydHkuaWQoKSwgcHJvcGVydHkudmFsdWUoKSkpCisgICAgICAgICAgICBwcm9wZXJ0aWVz
VG9SZW1vdmUuYXBwZW5kKHByb3BlcnR5LmlkKCkpOworICAgIH0gICAgCisgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIHVzZSBtYXNzIHJlbW92YWwuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHByb3BlcnRpZXNUb1JlbW92ZS5zaXplKCk7ICsraSkKKyAgICAgICAgcmVtb3ZlUHJvcGVy
dHkocHJvcGVydGllc1RvUmVtb3ZlW2ldKTsKK30KKworUGFzc1JlZjxNdXRhYmxlU3R5bGVQcm9w
ZXJ0eVNldD4gU3R5bGVQcm9wZXJ0eVNldDo6bXV0YWJsZUNvcHkoKSBjb25zdAoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IE11dGFibGVTdHlsZVByb3BlcnR5U2V0KCp0aGlzKSk7Cit9CisK
K1Bhc3NSZWY8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IFN0eWxlUHJvcGVydHlTZXQ6OmNvcHlQ
cm9wZXJ0aWVzSW5TZXQoY29uc3QgQ1NTUHJvcGVydHlJRCogc2V0LCB1bnNpZ25lZCBsZW5ndGgp
IGNvbnN0Cit7CisgICAgVmVjdG9yPENTU1Byb3BlcnR5LCAyNTY+IGxpc3Q7CisgICAgbGlzdC5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQ
cm9wZXJ0eUNTU1ZhbHVlKHNldFtpXSk7CisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAg
IGxpc3QuYXBwZW5kKENTU1Byb3BlcnR5KHNldFtpXSwgdmFsdWUucmVsZWFzZSgpLCBmYWxzZSkp
OworICAgIH0KKyAgICByZXR1cm4gTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShsaXN0
LmRhdGEoKSwgbGlzdC5zaXplKCkpOworfQorCitQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b24qIE11dGFibGVTdHlsZVByb3BlcnR5U2V0Ojpjc3NTdHlsZURlY2xhcmF0aW9uKCkKK3sKKyAg
ICByZXR1cm4gbV9jc3NvbVdyYXBwZXIuZ2V0KCk7Cit9CisKK0NTU1N0eWxlRGVjbGFyYXRpb24q
IE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjplbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkKK3sK
KyAgICBpZiAobV9jc3NvbVdyYXBwZXIpIHsKKyAgICAgICAgQVNTRVJUKCFzdGF0aWNfY2FzdDxD
U1NTdHlsZURlY2xhcmF0aW9uKj4obV9jc3NvbVdyYXBwZXIuZ2V0KCkpLT5wYXJlbnRSdWxlKCkp
OworICAgICAgICBBU1NFUlQoIW1fY3Nzb21XcmFwcGVyLT5wYXJlbnRFbGVtZW50KCkpOworICAg
ICAgICByZXR1cm4gbV9jc3NvbVdyYXBwZXIuZ2V0KCk7CisgICAgfQorICAgIG1fY3Nzb21XcmFw
cGVyID0gYWRvcHRQdHIobmV3IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbih0aGlzKSk7
CisgICAgcmV0dXJuIG1fY3Nzb21XcmFwcGVyLmdldCgpOworfQorCitDU1NTdHlsZURlY2xhcmF0
aW9uKiBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6ZW5zdXJlSW5saW5lQ1NTU3R5bGVEZWNsYXJh
dGlvbihTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50KQoreworICAgIGlmIChtX2Nzc29tV3Jh
cHBlcikgeworICAgICAgICBBU1NFUlQobV9jc3NvbVdyYXBwZXItPnBhcmVudEVsZW1lbnQoKSA9
PSBwYXJlbnRFbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIG1fY3Nzb21XcmFwcGVyLmdldCgpOwor
ICAgIH0KKyAgICBtX2Nzc29tV3JhcHBlciA9IGFkb3B0UHRyKG5ldyBJbmxpbmVDU1NTdHlsZURl
Y2xhcmF0aW9uKHRoaXMsIHBhcmVudEVsZW1lbnQpKTsKKyAgICByZXR1cm4gbV9jc3NvbVdyYXBw
ZXIuZ2V0KCk7Cit9CisKK3Vuc2lnbmVkIFN0eWxlUHJvcGVydHlTZXQ6OmF2ZXJhZ2VTaXplSW5C
eXRlcygpCit7CisgICAgLy8gUGxlYXNlIHVwZGF0ZSB0aGlzIGlmIHRoZSBzdG9yYWdlIHNjaGVt
ZSBjaGFuZ2VzIHNvIHRoYXQgdGhpcyBsb25nZXIgcmVmbGVjdHMgdGhlIGFjdHVhbCBzaXplLgor
ICAgIHJldHVybiBzaXplRm9ySW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNldFdpdGhQcm9wZXJ0eUNv
dW50KDQpOworfQorCisvLyBTZWUgdGhlIGZ1bmN0aW9uIGFib3ZlIGlmIHlvdSBuZWVkIHRvIHVw
ZGF0ZSB0aGlzLgorc3RydWN0IFNhbWVTaXplQXNTdHlsZVByb3BlcnR5U2V0IDogcHVibGljIFJl
ZkNvdW50ZWQ8U2FtZVNpemVBc1N0eWxlUHJvcGVydHlTZXQ+IHsKKyAgICB1bnNpZ25lZCBiaXRm
aWVsZDsKK307CitDT01QSUxFX0FTU0VSVChzaXplb2YoU3R5bGVQcm9wZXJ0eVNldCkgPT0gc2l6
ZW9mKFNhbWVTaXplQXNTdHlsZVByb3BlcnR5U2V0KSwgc3R5bGVfcHJvcGVydHlfc2V0X3Nob3Vs
ZF9zdGF5X3NtYWxsKTsKKworI2lmbmRlZiBOREVCVUcKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6
c2hvd1N0eWxlKCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBhc1RleHQoKS5hc2Np
aSgpLmRhdGEoKSk7Cit9CisjZW5kaWYKKworUGFzc1JlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNl
dD4gTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShDU1NQYXJzZXJNb2RlIGNzc1BhcnNl
ck1vZGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTXV0YWJsZVN0eWxlUHJvcGVydHlT
ZXQoY3NzUGFyc2VyTW9kZSkpOworfQorCitQYXNzUmVmPE11dGFibGVTdHlsZVByb3BlcnR5U2V0
PiBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKGNvbnN0IENTU1Byb3BlcnR5KiBwcm9w
ZXJ0aWVzLCB1bnNpZ25lZCBjb3VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNdXRh
YmxlU3R5bGVQcm9wZXJ0eVNldChwcm9wZXJ0aWVzLCBjb3VudCkpOworfQorCitTdHJpbmcgU3R5
bGVQcm9wZXJ0eVNldDo6UHJvcGVydHlSZWZlcmVuY2U6OmNzc05hbWUoKSBjb25zdAoreworICAg
IHJldHVybiBnZXRQcm9wZXJ0eU5hbWVTdHJpbmcoaWQoKSk7Cit9CisKK1N0cmluZyBTdHlsZVBy
b3BlcnR5U2V0OjpQcm9wZXJ0eVJlZmVyZW5jZTo6Y3NzVGV4dCgpIGNvbnN0Cit7CisgICAgU3Ry
aW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZChjc3NOYW1lKCkpOworICAgIHJl
c3VsdC5hcHBlbmRMaXRlcmFsKCI6ICIpOworICAgIHJlc3VsdC5hcHBlbmQocHJvcGVydHlWYWx1
ZSgpLT5jc3NUZXh0KCkpOworICAgIGlmIChpc0ltcG9ydGFudCgpKQorICAgICAgICByZXN1bHQu
YXBwZW5kTGl0ZXJhbCgiICFpbXBvcnRhbnQiKTsKKyAgICByZXN1bHQuYXBwZW5kKCc7Jyk7Cisg
ICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCSh3b3JraW5nIGNv
cHkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjEsNyArMjEsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAK
ICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NQ
YXJzZXIuaCIKQEAgLTQzLDkgKzQzLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0
aWMgc2l6ZV90IHNpemVGb3JJbW11dGFibGVTdHlsZVByb3BlcnR5U2V0V2l0aFByb3BlcnR5Q291
bnQodW5zaWduZWQgY291bnQpCitzdGF0aWMgc2l6ZV90IHNpemVGb3JJbW11dGFibGVTdHlsZVBy
b3BlcnRpZXNXaXRoUHJvcGVydHlDb3VudCh1bnNpZ25lZCBjb3VudCkKIHsKLSAgICByZXR1cm4g
c2l6ZW9mKEltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXQpIC0gc2l6ZW9mKHZvaWQqKSArIHNpemVv
ZihDU1NWYWx1ZSopICogY291bnQgKyBzaXplb2YoU3R5bGVQcm9wZXJ0eU1ldGFkYXRhKSAqIGNv
dW50OworICAgIHJldHVybiBzaXplb2YoSW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKSAtIHNpemVv
Zih2b2lkKikgKyBzaXplb2YoQ1NTVmFsdWUqKSAqIGNvdW50ICsgc2l6ZW9mKFN0eWxlUHJvcGVy
dHlNZXRhZGF0YSkgKiBjb3VudDsKIH0KIAogc3RhdGljIGJvb2wgaXNJbml0aWFsT3JJbmhlcml0
KGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC01NSwzOSArNTUsMzkgQEAgc3RhdGljIGJvb2wgaXNJ
bml0aWFsT3JJbmhlcml0KGNvbnN0IFN0cgogICAgIHJldHVybiB2YWx1ZS5sZW5ndGgoKSA9PSA3
ICYmICh2YWx1ZSA9PSBpbml0aWFsIHx8IHZhbHVlID09IGluaGVyaXQpOwogfQogCi1QYXNzUmVm
PEltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IEltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OmNy
ZWF0ZShjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydGllcywgdW5zaWduZWQgY291bnQsIENTU1Bh
cnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK1Bhc3NSZWY8SW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
PiBJbW11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZShjb25zdCBDU1NQcm9wZXJ0eSogcHJv
cGVydGllcywgdW5zaWduZWQgY291bnQsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKIHsK
LSAgICB2b2lkKiBzbG90ID0gV1RGOjpmYXN0TWFsbG9jKHNpemVGb3JJbW11dGFibGVTdHlsZVBy
b3BlcnR5U2V0V2l0aFByb3BlcnR5Q291bnQoY291bnQpKTsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyAoTm90TnVsbCwgc2xvdCkgSW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNldChwcm9wZXJ0aWVz
LCBjb3VudCwgY3NzUGFyc2VyTW9kZSkpOworICAgIHZvaWQqIHNsb3QgPSBXVEY6OmZhc3RNYWxs
b2Moc2l6ZUZvckltbXV0YWJsZVN0eWxlUHJvcGVydGllc1dpdGhQcm9wZXJ0eUNvdW50KGNvdW50
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgKE5vdE51bGwsIHNsb3QpIEltbXV0YWJsZVN0
eWxlUHJvcGVydGllcyhwcm9wZXJ0aWVzLCBjb3VudCwgY3NzUGFyc2VyTW9kZSkpOwogfQogCi1Q
YXNzUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IFN0eWxlUHJvcGVydHlTZXQ6OmltbXV0
YWJsZUNvcHlJZk5lZWRlZCgpIGNvbnN0CitQYXNzUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGll
cz4gU3R5bGVQcm9wZXJ0aWVzOjppbW11dGFibGVDb3B5SWZOZWVkZWQoKSBjb25zdAogewogICAg
IGlmICghaXNNdXRhYmxlKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbW11dGFibGVT
dHlsZVByb3BlcnR5U2V0Jj4oY29uc3RfY2FzdDxTdHlsZVByb3BlcnR5U2V0Jj4oKnRoaXMpKTsK
LSAgICBjb25zdCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCYgbXV0YWJsZVRoaXMgPSBzdGF0aWNf
Y2FzdDxjb25zdCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCY+KCp0aGlzKTsKLSAgICByZXR1cm4g
SW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKG11dGFibGVUaGlzLm1fcHJvcGVydHlW
ZWN0b3IuZGF0YSgpLCBtdXRhYmxlVGhpcy5tX3Byb3BlcnR5VmVjdG9yLnNpemUoKSwgY3NzUGFy
c2VyTW9kZSgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEltbXV0YWJsZVN0eWxlUHJv
cGVydGllcyY+KGNvbnN0X2Nhc3Q8U3R5bGVQcm9wZXJ0aWVzJj4oKnRoaXMpKTsKKyAgICBjb25z
dCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBtdXRhYmxlVGhpcyA9IHN0YXRpY19jYXN0PGNvbnN0
IE11dGFibGVTdHlsZVByb3BlcnRpZXMmPigqdGhpcyk7CisgICAgcmV0dXJuIEltbXV0YWJsZVN0
eWxlUHJvcGVydGllczo6Y3JlYXRlKG11dGFibGVUaGlzLm1fcHJvcGVydHlWZWN0b3IuZGF0YSgp
LCBtdXRhYmxlVGhpcy5tX3Byb3BlcnR5VmVjdG9yLnNpemUoKSwgY3NzUGFyc2VyTW9kZSgpKTsK
IH0KIAotTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6Ok11dGFibGVTdHlsZVByb3BlcnR5U2V0KENT
U1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKLSAgICA6IFN0eWxlUHJvcGVydHlTZXQoY3NzUGFy
c2VyTW9kZSkKK011dGFibGVTdHlsZVByb3BlcnRpZXM6Ok11dGFibGVTdHlsZVByb3BlcnRpZXMo
Q1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorICAgIDogU3R5bGVQcm9wZXJ0aWVzKGNzc1Bh
cnNlck1vZGUpCiB7CiB9CiAKLU11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpNdXRhYmxlU3R5bGVQ
cm9wZXJ0eVNldChjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydGllcywgdW5zaWduZWQgbGVuZ3Ro
KQotICAgIDogU3R5bGVQcm9wZXJ0eVNldChDU1NTdHJpY3RNb2RlKQorTXV0YWJsZVN0eWxlUHJv
cGVydGllczo6TXV0YWJsZVN0eWxlUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVy
dGllcywgdW5zaWduZWQgbGVuZ3RoKQorICAgIDogU3R5bGVQcm9wZXJ0aWVzKENTU1N0cmljdE1v
ZGUpCiB7CiAgICAgbV9wcm9wZXJ0eVZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0
aCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAgICAgICBt
X3Byb3BlcnR5VmVjdG9yLnVuY2hlY2tlZEFwcGVuZChwcm9wZXJ0aWVzW2ldKTsKIH0KIAotTXV0
YWJsZVN0eWxlUHJvcGVydHlTZXQ6On5NdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCgpCitNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzOjp+TXV0YWJsZVN0eWxlUHJvcGVydGllcygpCiB7CiB9CiAKLUltbXV0
YWJsZVN0eWxlUHJvcGVydHlTZXQ6OkltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXQoY29uc3QgQ1NT
UHJvcGVydHkqIHByb3BlcnRpZXMsIHVuc2lnbmVkIGxlbmd0aCwgQ1NTUGFyc2VyTW9kZSBjc3NQ
YXJzZXJNb2RlKQotICAgIDogU3R5bGVQcm9wZXJ0eVNldChjc3NQYXJzZXJNb2RlLCBsZW5ndGgp
CitJbW11dGFibGVTdHlsZVByb3BlcnRpZXM6OkltbXV0YWJsZVN0eWxlUHJvcGVydGllcyhjb25z
dCBDU1NQcm9wZXJ0eSogcHJvcGVydGllcywgdW5zaWduZWQgbGVuZ3RoLCBDU1NQYXJzZXJNb2Rl
IGNzc1BhcnNlck1vZGUpCisgICAgOiBTdHlsZVByb3BlcnRpZXMoY3NzUGFyc2VyTW9kZSwgbGVu
Z3RoKQogewogICAgIFN0eWxlUHJvcGVydHlNZXRhZGF0YSogbWV0YWRhdGFBcnJheSA9IGNvbnN0
X2Nhc3Q8U3R5bGVQcm9wZXJ0eU1ldGFkYXRhKj4odGhpcy0+bWV0YWRhdGFBcnJheSgpKTsKICAg
ICBDU1NWYWx1ZSoqIHZhbHVlQXJyYXkgPSBjb25zdF9jYXN0PENTU1ZhbHVlKio+KHRoaXMtPnZh
bHVlQXJyYXkoKSk7CkBAIC05OCwxOCArOTgsMTggQEAgSW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNl
dDo6SW1tdXRhYmxlU3R5bAogICAgIH0KIH0KIAotSW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6
fkltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXQoKQorSW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjp+
SW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKCkKIHsKICAgICBDU1NWYWx1ZSoqIHZhbHVlQXJyYXkg
PSBjb25zdF9jYXN0PENTU1ZhbHVlKio+KHRoaXMtPnZhbHVlQXJyYXkoKSk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fYXJyYXlTaXplOyArK2kpCiAgICAgICAgIHZhbHVlQXJyYXlb
aV0tPmRlcmVmKCk7CiB9CiAKLU11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpNdXRhYmxlU3R5bGVQ
cm9wZXJ0eVNldChjb25zdCBTdHlsZVByb3BlcnR5U2V0JiBvdGhlcikKLSAgICA6IFN0eWxlUHJv
cGVydHlTZXQob3RoZXIuY3NzUGFyc2VyTW9kZSgpKQorTXV0YWJsZVN0eWxlUHJvcGVydGllczo6
TXV0YWJsZVN0eWxlUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnRpZXMmIG90aGVyKQorICAg
IDogU3R5bGVQcm9wZXJ0aWVzKG90aGVyLmNzc1BhcnNlck1vZGUoKSkKIHsKICAgICBpZiAob3Ro
ZXIuaXNNdXRhYmxlKCkpCi0gICAgICAgIG1fcHJvcGVydHlWZWN0b3IgPSBzdGF0aWNfY2FzdDxj
b25zdCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCY+KG90aGVyKS5tX3Byb3BlcnR5VmVjdG9yOwor
ICAgICAgICBtX3Byb3BlcnR5VmVjdG9yID0gc3RhdGljX2Nhc3Q8Y29uc3QgTXV0YWJsZVN0eWxl
UHJvcGVydGllcyY+KG90aGVyKS5tX3Byb3BlcnR5VmVjdG9yOwogICAgIGVsc2UgewogICAgICAg
ICBtX3Byb3BlcnR5VmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkob3RoZXIucHJvcGVydHlD
b3VudCgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG90aGVyLnByb3BlcnR5
Q291bnQoKTsgKytpKQpAQCAtMTE3LDcgKzExNyw3IEBAIE11dGFibGVTdHlsZVByb3BlcnR5U2V0
OjpNdXRhYmxlU3R5bGVQcm8KICAgICB9CiB9CiAKLVN0cmluZyBTdHlsZVByb3BlcnR5U2V0Ojpn
ZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkgY29uc3QKK1N0cmluZyBT
dHlsZVByb3BlcnRpZXM6OmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
KSBjb25zdAogewogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1Zh
bHVlKHByb3BlcnR5SUQpOwogICAgIGlmICh2YWx1ZSkKQEAgLTIxMiw3ICsyMTIsNyBAQCBTdHJp
bmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0UHJvcGVydHlWYWx1CiAgICAgfQogfQogCi1TdHJpbmcg
U3R5bGVQcm9wZXJ0eVNldDo6Ym9yZGVyU3BhY2luZ1ZhbHVlKGNvbnN0IFN0eWxlUHJvcGVydHlT
aG9ydGhhbmQmIHNob3J0aGFuZCkgY29uc3QKK1N0cmluZyBTdHlsZVByb3BlcnRpZXM6OmJvcmRl
clNwYWNpbmdWYWx1ZShjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzaG9ydGhhbmQpIGNv
bnN0CiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBob3Jpem9udGFsVmFsdWUgPSBnZXRQcm9wZXJ0
eUNTU1ZhbHVlKHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbMF0pOwogICAgIFJlZlB0cjxDU1NWYWx1
ZT4gdmVydGljYWxWYWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUoc2hvcnRoYW5kLnByb3BlcnRp
ZXMoKVsxXSk7CkBAIC0yMzAsNyArMjMwLDcgQEAgU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmJv
cmRlclNwYWNpbmdWYQogICAgIHJldHVybiBob3Jpem9udGFsVmFsdWVDU1NUZXh0ICsgJyAnICsg
dmVydGljYWxWYWx1ZUNTU1RleHQ7CiB9CiAKLXZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6YXBwZW5k
Rm9udExvbmdoYW5kVmFsdWVJZkV4cGxpY2l0KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3Ry
aW5nQnVpbGRlciYgcmVzdWx0LCBTdHJpbmcmIGNvbW1vblZhbHVlKSBjb25zdAordm9pZCBTdHls
ZVByb3BlcnRpZXM6OmFwcGVuZEZvbnRMb25naGFuZFZhbHVlSWZFeHBsaWNpdChDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsIFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgU3RyaW5nJiBjb21tb25WYWx1
ZSkgY29uc3QKIHsKICAgICBpbnQgZm91bmRQcm9wZXJ0eUluZGV4ID0gZmluZFByb3BlcnR5SW5k
ZXgocHJvcGVydHlJRCk7CiAgICAgaWYgKGZvdW5kUHJvcGVydHlJbmRleCA9PSAtMSkKQEAgLTI2
NSw3ICsyNjUsNyBAQCB2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmFwcGVuZEZvbnRMb25naGFuCiAg
ICAgICAgIGNvbW1vblZhbHVlID0gU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBTdHlsZVByb3BlcnR5
U2V0Ojpmb250VmFsdWUoKSBjb25zdAorU3RyaW5nIFN0eWxlUHJvcGVydGllczo6Zm9udFZhbHVl
KCkgY29uc3QKIHsKICAgICBpbnQgZm9udFNpemVQcm9wZXJ0eUluZGV4ID0gZmluZFByb3BlcnR5
SW5kZXgoQ1NTUHJvcGVydHlGb250U2l6ZSk7CiAgICAgaW50IGZvbnRGYW1pbHlQcm9wZXJ0eUlu
ZGV4ID0gZmluZFByb3BlcnR5SW5kZXgoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsKQEAgLTI5NCw3
ICsyOTQsNyBAQCBTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Zm9udFZhbHVlKCkgY29uCiAgICAg
cmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi1TdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6
Z2V0NFZhbHVlcyhjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzaG9ydGhhbmQpIGNvbnN0
CitTdHJpbmcgU3R5bGVQcm9wZXJ0aWVzOjpnZXQ0VmFsdWVzKGNvbnN0IFN0eWxlUHJvcGVydHlT
aG9ydGhhbmQmIHNob3J0aGFuZCkgY29uc3QKIHsKICAgICAvLyBBc3N1bWUgdGhlIHByb3BlcnRp
ZXMgYXJlIGluIHRoZSB1c3VhbCBvcmRlciB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQuCiAgICAg
aW50IHRvcFZhbHVlSW5kZXggPSBmaW5kUHJvcGVydHlJbmRleChzaG9ydGhhbmQucHJvcGVydGll
cygpWzBdKTsKQEAgLTM0OCw3ICszNDgsNyBAQCBTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0
NFZhbHVlcyhjb25zCiAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi1TdHJpbmcg
U3R5bGVQcm9wZXJ0eVNldDo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0IFN0eWxlUHJv
cGVydHlTaG9ydGhhbmQmIHNob3J0aGFuZCkgY29uc3QKK1N0cmluZyBTdHlsZVByb3BlcnRpZXM6
OmdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBz
aG9ydGhhbmQpIGNvbnN0CiB7CiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAKQEAgLTQ4NSw3
ICs0ODUsNyBAQCBTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0TGF5ZXJlZFNob3J0CiAgICAg
cmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi1TdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6
Z2V0U2hvcnRoYW5kVmFsdWUoY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYgc2hvcnRoYW5k
KSBjb25zdAorU3RyaW5nIFN0eWxlUHJvcGVydGllczo6Z2V0U2hvcnRoYW5kVmFsdWUoY29uc3Qg
U3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYgc2hvcnRoYW5kKSBjb25zdAogewogICAgIFN0cmluZyBj
b21tb25WYWx1ZTsKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKQEAgLTUxNSw3ICs1MTUsNyBA
QCBTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0U2hvcnRoYW5kVmFsCiB9CiAKIC8vIG9ubHkg
cmV0dXJucyBhIG5vbi1udWxsIHZhbHVlIGlmIGFsbCBwcm9wZXJ0aWVzIGhhdmUgdGhlIHNhbWUs
IG5vbi1udWxsIHZhbHVlCi1TdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0Q29tbW9uVmFsdWUo
Y29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYgc2hvcnRoYW5kKSBjb25zdAorU3RyaW5nIFN0
eWxlUHJvcGVydGllczo6Z2V0Q29tbW9uVmFsdWUoY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFu
ZCYgc2hvcnRoYW5kKSBjb25zdAogewogICAgIFN0cmluZyByZXM7CiAgICAgYm9vbCBsYXN0UHJv
cGVydHlXYXNJbXBvcnRhbnQgPSBmYWxzZTsKQEAgLTU0MCw3ICs1NDAsNyBAQCBTdHJpbmcgU3R5
bGVQcm9wZXJ0eVNldDo6Z2V0Q29tbW9uVmFsdWUoCiAgICAgcmV0dXJuIHJlczsKIH0KIAotU3Ry
aW5nIFN0eWxlUHJvcGVydHlTZXQ6OmJvcmRlclByb3BlcnR5VmFsdWUoQ29tbW9uVmFsdWVNb2Rl
IHZhbHVlTW9kZSkgY29uc3QKK1N0cmluZyBTdHlsZVByb3BlcnRpZXM6OmJvcmRlclByb3BlcnR5
VmFsdWUoQ29tbW9uVmFsdWVNb2RlIHZhbHVlTW9kZSkgY29uc3QKIHsKICAgICBjb25zdCBTdHls
ZVByb3BlcnR5U2hvcnRoYW5kIHByb3BlcnRpZXNbM10gPSB7IGJvcmRlcldpZHRoU2hvcnRoYW5k
KCksIGJvcmRlclN0eWxlU2hvcnRoYW5kKCksIGJvcmRlckNvbG9yU2hvcnRoYW5kKCkgfTsKICAg
ICBTdHJpbmcgY29tbW9uVmFsdWU7CkBAIC01NjgsNyArNTY4LDcgQEAgU3RyaW5nIFN0eWxlUHJv
cGVydHlTZXQ6OmJvcmRlclByb3BlcnR5VgogICAgIHJldHVybiByZXN1bHQuaXNFbXB0eSgpID8g
U3RyaW5nKCkgOiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
U3R5bGVQcm9wZXJ0eVNldDo6Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQpIGNvbnN0CitQYXNzUmVmUHRyPENTU1ZhbHVlPiBTdHlsZVByb3BlcnRpZXM6OmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKSBjb25zdAogewogICAgIGlu
dCBmb3VuZFByb3BlcnR5SW5kZXggPSBmaW5kUHJvcGVydHlJbmRleChwcm9wZXJ0eUlEKTsKICAg
ICBpZiAoZm91bmRQcm9wZXJ0eUluZGV4ID09IC0xKQpAQCAtNTc2LDcgKzU3Niw3IEBAIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IFN0eWxlUHJvcGVydHlTZXQ6OmcKICAgICByZXR1cm4gcHJvcGVydHlB
dChmb3VuZFByb3BlcnR5SW5kZXgpLnZhbHVlKCk7CiB9CiAKLWJvb2wgTXV0YWJsZVN0eWxlUHJv
cGVydHlTZXQ6OnJlbW92ZVNob3J0aGFuZFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCkKK2Jvb2wgTXV0YWJsZVN0eWxlUHJvcGVydGllczo6cmVtb3ZlU2hvcnRoYW5kUHJvcGVydHko
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewogICAgIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQg
c2hvcnRoYW5kID0gc2hvcnRoYW5kRm9yUHJvcGVydHkocHJvcGVydHlJRCk7CiAgICAgaWYgKCFz
aG9ydGhhbmQubGVuZ3RoKCkpCkBAIC01OTIsNyArNTkyLDcgQEAgYm9vbCBNdXRhYmxlU3R5bGVQ
cm9wZXJ0eVNldDo6cmVtb3ZlU2hvcgogICAgIHJldHVybiByZW1vdmVQcm9wZXJ0aWVzSW5TZXQo
c2hvcnRoYW5kUHJlZml4aW5nVmFyaWFudC5wcm9wZXJ0aWVzKCksIHNob3J0aGFuZFByZWZpeGlu
Z1ZhcmlhbnQubGVuZ3RoKCkpOwogfQogCi1ib29sIE11dGFibGVTdHlsZVByb3BlcnR5U2V0Ojpy
ZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0cmluZyogcmV0dXJuVGV4
dCkKK2Jvb2wgTXV0YWJsZVN0eWxlUHJvcGVydGllczo6cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlELCBTdHJpbmcqIHJldHVyblRleHQpCiB7CiAgICAgaWYgKHJlbW92ZVNo
b3J0aGFuZFByb3BlcnR5KHByb3BlcnR5SUQpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBSZXR1cm4g
YW4gZXF1aXZhbGVudCBzaG9ydGhhbmQgd2hlbiBwb3NzaWJsZS4KQEAgLTYyMCw3ICs2MjAsNyBA
QCBib29sIE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVQcm9wCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZVByZWZpeGVkT3JV
bnByZWZpeGVkUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQordm9pZCBNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzOjpyZW1vdmVQcmVmaXhlZE9yVW5wcmVmaXhlZFByb3BlcnR5KENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCkKIHsKICAgICBpbnQgZm91bmRQcm9wZXJ0eUluZGV4ID0gZmlu
ZFByb3BlcnR5SW5kZXgocHJlZml4aW5nVmFyaWFudEZvclByb3BlcnR5SWQocHJvcGVydHlJRCkp
OwogICAgIGlmIChmb3VuZFByb3BlcnR5SW5kZXggPT0gLTEpCkBAIC02MjgsNyArNjI4LDcgQEAg
dm9pZCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlUHJlZgogICAgIG1fcHJvcGVydHlW
ZWN0b3IucmVtb3ZlKGZvdW5kUHJvcGVydHlJbmRleCk7CiB9CiAKLWJvb2wgU3R5bGVQcm9wZXJ0
eVNldDo6cHJvcGVydHlJc0ltcG9ydGFudChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpIGNvbnN0
Citib29sIFN0eWxlUHJvcGVydGllczo6cHJvcGVydHlJc0ltcG9ydGFudChDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQpIGNvbnN0CiB7CiAgICAgaW50IGZvdW5kUHJvcGVydHlJbmRleCA9IGZpbmRQ
cm9wZXJ0eUluZGV4KHByb3BlcnR5SUQpOwogICAgIGlmIChmb3VuZFByb3BlcnR5SW5kZXggIT0g
LTEpCkBAIC02NDUsNyArNjQ1LDcgQEAgYm9vbCBTdHlsZVByb3BlcnR5U2V0Ojpwcm9wZXJ0eUlz
SW1wb3J0YQogICAgIHJldHVybiB0cnVlOwogfQogCi1TdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6
Z2V0UHJvcGVydHlTaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKSBjb25zdAorU3Ry
aW5nIFN0eWxlUHJvcGVydGllczo6Z2V0UHJvcGVydHlTaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlEKSBjb25zdAogewogICAgIGludCBmb3VuZFByb3BlcnR5SW5kZXggPSBmaW5kUHJv
cGVydHlJbmRleChwcm9wZXJ0eUlEKTsKICAgICBpZiAoZm91bmRQcm9wZXJ0eUluZGV4ID09IC0x
KQpAQCAtNjUzLDcgKzY1Myw3IEBAIFN0cmluZyBTdHlsZVByb3BlcnR5U2V0OjpnZXRQcm9wZXJ0
eVNob3IKICAgICByZXR1cm4gZ2V0UHJvcGVydHlOYW1lU3RyaW5nKHByb3BlcnR5QXQoZm91bmRQ
cm9wZXJ0eUluZGV4KS5zaG9ydGhhbmRJRCgpKTsKIH0KIAotYm9vbCBTdHlsZVByb3BlcnR5U2V0
Ojppc1Byb3BlcnR5SW1wbGljaXQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKSBjb25zdAorYm9v
bCBTdHlsZVByb3BlcnRpZXM6OmlzUHJvcGVydHlJbXBsaWNpdChDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQpIGNvbnN0CiB7CiAgICAgaW50IGZvdW5kUHJvcGVydHlJbmRleCA9IGZpbmRQcm9wZXJ0
eUluZGV4KHByb3BlcnR5SUQpOwogICAgIGlmIChmb3VuZFByb3BlcnR5SW5kZXggPT0gLTEpCkBA
IC02NjEsNyArNjYxLDcgQEAgYm9vbCBTdHlsZVByb3BlcnR5U2V0Ojppc1Byb3BlcnR5SW1wbGlj
aQogICAgIHJldHVybiBwcm9wZXJ0eUF0KGZvdW5kUHJvcGVydHlJbmRleCkuaXNJbXBsaWNpdCgp
OwogfQogCi1ib29sIE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBT
dHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQorYm9vbCBNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzOjpzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0
cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRT
dHlsZVNoZWV0KQogewogICAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIHRvIGFuIGVtcHR5IHN0cmlu
ZyBqdXN0IHJlbW92ZXMgdGhlIHByb3BlcnR5IGluIGJvdGggSUUgYW5kIEdlY2tvLgogICAgIC8v
IFNldHRpbmcgaXQgdG8gbnVsbCBzZWVtcyB0byBwcm9kdWNlIGxlc3MgY29uc2lzdGVudCByZXN1
bHRzLCBidXQgd2UgdHJlYXQgaXQganVzdCB0aGUgc2FtZS4KQEAgLTY3Myw3ICs2NzMsNyBAQCBi
b29sIE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0CiAgICAgcmV0dXJuIENTU1Bh
cnNlcjo6cGFyc2VWYWx1ZSh0aGlzLCBwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCBjc3NQ
YXJzZXJNb2RlKCksIGNvbnRleHRTdHlsZVNoZWV0KTsKIH0KIAotdm9pZCBNdXRhYmxlU3R5bGVQ
cm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBQYXNzUmVm
UHRyPENTU1ZhbHVlPiBwcnBWYWx1ZSwgYm9vbCBpbXBvcnRhbnQpCit2b2lkIE11dGFibGVTdHls
ZVByb3BlcnRpZXM6OnNldFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gcHJwVmFsdWUsIGJvb2wgaW1wb3J0YW50KQogewogICAgIFN0eWxlUHJv
cGVydHlTaG9ydGhhbmQgc2hvcnRoYW5kID0gc2hvcnRoYW5kRm9yUHJvcGVydHkocHJvcGVydHlJ
RCk7CiAgICAgaWYgKCFzaG9ydGhhbmQubGVuZ3RoKCkpIHsKQEAgLTY4OCw3ICs2ODgsNyBAQCB2
b2lkIE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0CiAgICAgICAgIG1fcHJvcGVy
dHlWZWN0b3IuYXBwZW5kKENTU1Byb3BlcnR5KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbaV0sIHZh
bHVlLCBpbXBvcnRhbnQpKTsKIH0KIAotdm9pZCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6c2V0
UHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5LCBDU1NQcm9wZXJ0eSogc2xvdCkK
K3ZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydGllczo6c2V0UHJvcGVydHkoY29uc3QgQ1NTUHJvcGVy
dHkmIHByb3BlcnR5LCBDU1NQcm9wZXJ0eSogc2xvdCkKIHsKICAgICBpZiAoIXJlbW92ZVNob3J0
aGFuZFByb3BlcnR5KHByb3BlcnR5LmlkKCkpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5KiB0b1Jl
cGxhY2UgPSBzbG90ID8gc2xvdCA6IGZpbmRDU1NQcm9wZXJ0eVdpdGhJRChwcm9wZXJ0eS5pZCgp
KTsKQEAgLTcxMCw3ICs3MTAsNyBAQCBzdGF0aWMgdW5zaWduZWQgZ2V0SW5kZXhJblNob3J0aGFu
ZFZlY3RvCiAgICAgcmV0dXJuIGluZGV4T2ZTaG9ydGhhbmRGb3JMb25naGFuZChwcmVmaXhlZFNo
b3J0aGFuZCwgbWF0Y2hpbmdTaG9ydGhhbmRzRm9yTG9uZ2hhbmQocHJlZml4aW5nVmFyaWFudCkp
OwogfQogCi12b2lkIE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjphcHBlbmRQcmVmaXhpbmdWYXJp
YW50UHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5KQordm9pZCBNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzOjphcHBlbmRQcmVmaXhpbmdWYXJpYW50UHJvcGVydHkoY29uc3QgQ1NTUHJv
cGVydHkmIHByb3BlcnR5KQogewogICAgIG1fcHJvcGVydHlWZWN0b3IuYXBwZW5kKHByb3BlcnR5
KTsKICAgICBDU1NQcm9wZXJ0eUlEIHByZWZpeGluZ1ZhcmlhbnQgPSBwcmVmaXhpbmdWYXJpYW50
Rm9yUHJvcGVydHlJZChwcm9wZXJ0eS5pZCgpKTsKQEAgLTcyMCw3ICs3MjAsNyBAQCB2b2lkIE11
dGFibGVTdHlsZVByb3BlcnR5U2V0OjphcHBlbmRQcmVmCiAgICAgbV9wcm9wZXJ0eVZlY3Rvci5h
cHBlbmQoQ1NTUHJvcGVydHkocHJlZml4aW5nVmFyaWFudCwgcHJvcGVydHkudmFsdWUoKSwgcHJv
cGVydHkuaXNJbXBvcnRhbnQoKSwgcHJvcGVydHkuaXNTZXRGcm9tU2hvcnRoYW5kKCksIGdldElu
ZGV4SW5TaG9ydGhhbmRWZWN0b3JGb3JQcmVmaXhpbmdWYXJpYW50KHByb3BlcnR5LCBwcmVmaXhp
bmdWYXJpYW50KSwgcHJvcGVydHkubWV0YWRhdGEoKS5tX2ltcGxpY2l0KSk7CiB9CiAKLXZvaWQg
TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OnNldFByZWZpeGluZ1ZhcmlhbnRQcm9wZXJ0eShjb25z
dCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkpCit2b2lkIE11dGFibGVTdHlsZVByb3BlcnRpZXM6OnNl
dFByZWZpeGluZ1ZhcmlhbnRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkpCiB7
CiAgICAgQ1NTUHJvcGVydHlJRCBwcmVmaXhpbmdWYXJpYW50ID0gcHJlZml4aW5nVmFyaWFudEZv
clByb3BlcnR5SWQocHJvcGVydHkuaWQoKSk7CiAgICAgQ1NTUHJvcGVydHkqIHRvUmVwbGFjZSA9
IGZpbmRDU1NQcm9wZXJ0eVdpdGhJRChwcmVmaXhpbmdWYXJpYW50KTsKQEAgLTcyOCwxOSArNzI4
LDE5IEBAIHZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OnNldFByZWZpeGkKICAgICAgICAg
KnRvUmVwbGFjZSA9IENTU1Byb3BlcnR5KHByZWZpeGluZ1ZhcmlhbnQsIHByb3BlcnR5LnZhbHVl
KCksIHByb3BlcnR5LmlzSW1wb3J0YW50KCksIHByb3BlcnR5LmlzU2V0RnJvbVNob3J0aGFuZCgp
LCBnZXRJbmRleEluU2hvcnRoYW5kVmVjdG9yRm9yUHJlZml4aW5nVmFyaWFudChwcm9wZXJ0eSwg
cHJlZml4aW5nVmFyaWFudCksIHByb3BlcnR5Lm1ldGFkYXRhKCkubV9pbXBsaWNpdCk7CiB9CiAK
LWJvb2wgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgQ1NTVmFsdWVJRCBpZGVudGlmaWVyLCBib29sIGltcG9ydGFudCkKK2Jvb2wg
TXV0YWJsZVN0eWxlUHJvcGVydGllczo6c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBDU1NWYWx1ZUlEIGlkZW50aWZpZXIsIGJvb2wgaW1wb3J0YW50KQogewogICAgIHNldFBy
b3BlcnR5KENTU1Byb3BlcnR5KHByb3BlcnR5SUQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShpZGVudGlmaWVyKSwgaW1wb3J0YW50KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgQ1NTUHJvcGVydHlJRCBpZGVudGlmaWVyLCBib29sIGltcG9ydGFudCkK
K2Jvb2wgTXV0YWJsZVN0eWxlUHJvcGVydGllczo6c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlELCBDU1NQcm9wZXJ0eUlEIGlkZW50aWZpZXIsIGJvb2wgaW1wb3J0YW50KQogewog
ICAgIHNldFByb3BlcnR5KENTU1Byb3BlcnR5KHByb3BlcnR5SUQsIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShpZGVudGlmaWVyKSwgaW1wb3J0YW50KSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OnBhcnNlRGVjbGFyYXRp
b24oY29uc3QgU3RyaW5nJiBzdHlsZURlY2xhcmF0aW9uLCBTdHlsZVNoZWV0Q29udGVudHMqIGNv
bnRleHRTdHlsZVNoZWV0KQordm9pZCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpwYXJzZURlY2xh
cmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlvbiwgU3R5bGVTaGVldENvbnRlbnRz
KiBjb250ZXh0U3R5bGVTaGVldCkKIHsKICAgICBtX3Byb3BlcnR5VmVjdG9yLmNsZWFyKCk7CiAK
QEAgLTc1MywyMSArNzUzLDIxIEBAIHZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OnBhcnNl
RGVjbGEKICAgICBwYXJzZXIucGFyc2VEZWNsYXJhdGlvbih0aGlzLCBzdHlsZURlY2xhcmF0aW9u
LCAwLCBjb250ZXh0U3R5bGVTaGVldCk7CiB9CiAKLXZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydHlT
ZXQ6OmFkZFBhcnNlZFByb3BlcnRpZXMoY29uc3QgVmVjdG9yPENTU1Byb3BlcnR5PiYgcHJvcGVy
dGllcykKK3ZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydGllczo6YWRkUGFyc2VkUHJvcGVydGllcyhj
b25zdCBWZWN0b3I8Q1NTUHJvcGVydHk+JiBwcm9wZXJ0aWVzKQogewogICAgIG1fcHJvcGVydHlW
ZWN0b3IucmVzZXJ2ZUNhcGFjaXR5KG1fcHJvcGVydHlWZWN0b3Iuc2l6ZSgpICsgcHJvcGVydGll
cy5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLnNpemUo
KTsgKytpKQogICAgICAgICBhZGRQYXJzZWRQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldKTsKIH0KIAot
dm9pZCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6YWRkUGFyc2VkUHJvcGVydHkoY29uc3QgQ1NT
UHJvcGVydHkmIHByb3BlcnR5KQordm9pZCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjphZGRQYXJz
ZWRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkpCiB7CiAgICAgLy8gT25seSBh
ZGQgcHJvcGVydGllcyB0aGF0IGhhdmUgbm8gIWltcG9ydGFudCBjb3VudGVycGFydCBwcmVzZW50
CiAgICAgaWYgKCFwcm9wZXJ0eUlzSW1wb3J0YW50KHByb3BlcnR5LmlkKCkpIHx8IHByb3BlcnR5
LmlzSW1wb3J0YW50KCkpCiAgICAgICAgIHNldFByb3BlcnR5KHByb3BlcnR5KTsKIH0KIAotU3Ry
aW5nIFN0eWxlUHJvcGVydHlTZXQ6OmFzVGV4dCgpIGNvbnN0CitTdHJpbmcgU3R5bGVQcm9wZXJ0
aWVzOjphc1RleHQoKSBjb25zdAogewogICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogCkBAIC0x
MDE3LDI2ICsxMDE3LDI2IEBAIFN0cmluZyBTdHlsZVByb3BlcnR5U2V0Ojphc1RleHQoKSBjb25z
dAogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotYm9vbCBTdHlsZVByb3BlcnR5
U2V0OjpoYXNDU1NPTVdyYXBwZXIoKSBjb25zdAorYm9vbCBTdHlsZVByb3BlcnRpZXM6Omhhc0NT
U09NV3JhcHBlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faXNNdXRhYmxlICYmIHN0YXRpY19j
YXN0PGNvbnN0IE11dGFibGVTdHlsZVByb3BlcnR5U2V0Kj4odGhpcyktPm1fY3Nzb21XcmFwcGVy
OworICAgIHJldHVybiBtX2lzTXV0YWJsZSAmJiBzdGF0aWNfY2FzdDxjb25zdCBNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzKj4odGhpcyktPm1fY3Nzb21XcmFwcGVyOwogfQogCi12b2lkIE11dGFibGVT
dHlsZVByb3BlcnR5U2V0OjptZXJnZUFuZE92ZXJyaWRlT25Db25mbGljdChjb25zdCBTdHlsZVBy
b3BlcnR5U2V0JiBvdGhlcikKK3ZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydGllczo6bWVyZ2VBbmRP
dmVycmlkZU9uQ29uZmxpY3QoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBvdGhlcikKIHsKICAgICB1
bnNpZ25lZCBzaXplID0gb3RoZXIucHJvcGVydHlDb3VudCgpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAgIGFkZFBhcnNlZFByb3BlcnR5KG90aGVyLnBy
b3BlcnR5QXQoaSkudG9DU1NQcm9wZXJ0eSgpKTsKIH0KIAotdm9pZCBTdHlsZVByb3BlcnR5U2V0
OjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxVUkw+JiB1cmxzLCBTdHlsZVNo
ZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KSBjb25zdAordm9pZCBTdHlsZVByb3BlcnRp
ZXM6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PFVSTD4mIHVybHMsIFN0eWxl
U2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQg
c2l6ZSA9IHByb3BlcnR5Q291bnQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZTsgKytpKQogICAgICAgICBwcm9wZXJ0eUF0KGkpLnZhbHVlKCktPmFkZFN1YnJlc291cmNlU3R5
bGVVUkxzKHVybHMsIGNvbnRleHRTdHlsZVNoZWV0KTsKIH0KIAotYm9vbCBTdHlsZVByb3BlcnR5
U2V0OjpoYXNGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKCkgY29uc3QKK2Jvb2wgU3R5bGVQ
cm9wZXJ0aWVzOjpoYXNGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKCkgY29uc3QKIHsKICAg
ICB1bnNpZ25lZCBzaXplID0gcHJvcGVydHlDb3VudCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKQEAgLTEwNzgsMjQgKzEwNzgsMjQgQEAgc3RhdGljIGNvbnN0
IENTU1Byb3BlcnR5SUQgYmxvY2tQcm9wZXJ0aQogICAgIENTU1Byb3BlcnR5V2lkb3dzCiB9Owog
Ci12b2lkIE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpjbGVhcigpCit2b2lkIE11dGFibGVTdHls
ZVByb3BlcnRpZXM6OmNsZWFyKCkKIHsKICAgICBtX3Byb3BlcnR5VmVjdG9yLmNsZWFyKCk7CiB9
CiAKIGNvbnN0IHVuc2lnbmVkIG51bUJsb2NrUHJvcGVydGllcyA9IFdURl9BUlJBWV9MRU5HVEgo
YmxvY2tQcm9wZXJ0aWVzKTsKIAotUGFzc1JlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gU3R5
bGVQcm9wZXJ0eVNldDo6Y29weUJsb2NrUHJvcGVydGllcygpIGNvbnN0CitQYXNzUmVmPE11dGFi
bGVTdHlsZVByb3BlcnRpZXM+IFN0eWxlUHJvcGVydGllczo6Y29weUJsb2NrUHJvcGVydGllcygp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGNvcHlQcm9wZXJ0aWVzSW5TZXQoYmxvY2tQcm9wZXJ0aWVz
LCBudW1CbG9ja1Byb3BlcnRpZXMpOwogfQogCi12b2lkIE11dGFibGVTdHlsZVByb3BlcnR5U2V0
OjpyZW1vdmVCbG9ja1Byb3BlcnRpZXMoKQordm9pZCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpy
ZW1vdmVCbG9ja1Byb3BlcnRpZXMoKQogewogICAgIHJlbW92ZVByb3BlcnRpZXNJblNldChibG9j
a1Byb3BlcnRpZXMsIG51bUJsb2NrUHJvcGVydGllcyk7CiB9CiAKLWJvb2wgTXV0YWJsZVN0eWxl
UHJvcGVydHlTZXQ6OnJlbW92ZVByb3BlcnRpZXNJblNldChjb25zdCBDU1NQcm9wZXJ0eUlEKiBz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkKK2Jvb2wgTXV0YWJsZVN0eWxlUHJvcGVydGllczo6cmVtb3Zl
UHJvcGVydGllc0luU2V0KGNvbnN0IENTU1Byb3BlcnR5SUQqIHNldCwgdW5zaWduZWQgbGVuZ3Ro
KQogewogICAgIGlmIChtX3Byb3BlcnR5VmVjdG9yLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTEyNCw3ICsxMTI0LDcgQEAgYm9vbCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNl
dDo6cmVtb3ZlUHJvcAogICAgIHJldHVybiBjaGFuZ2VkOwogfQogCi1pbnQgU3R5bGVQcm9wZXJ0
eVNldDo6ZmluZFByb3BlcnR5SW5kZXgoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKSBjb25zdAor
aW50IFN0eWxlUHJvcGVydGllczo6ZmluZFByb3BlcnR5SW5kZXgoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlEKSBjb25zdAogewogICAgIC8vIENvbnZlcnQgaGVyZSBwcm9wZXJ0eUlEIGludG8gYW4g
dWludDE2X3QgdG8gY29tcGFyZSBpdCB3aXRoIHRoZSBtZXRhZGF0YSdzIG1fcHJvcGVydHlJRCB0
byBhdm9pZAogICAgIC8vIHRoZSBjb21waWxlciBjb252ZXJ0aW5nIGl0IHRvIGFuIGludCBtdWx0
aXBsZSB0aW1lcyBpbiB0aGUgbG9vcC4KQEAgLTExMzYsNyArMTEzNiw3IEBAIGludCBTdHlsZVBy
b3BlcnR5U2V0OjpmaW5kUHJvcGVydHlJbmRleCgKICAgICByZXR1cm4gLTE7CiB9CiAKLUNTU1By
b3BlcnR5KiBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6ZmluZENTU1Byb3BlcnR5V2l0aElEKENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK0NTU1Byb3BlcnR5KiBNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzOjpmaW5kQ1NTUHJvcGVydHlXaXRoSUQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewog
ICAgIGludCBmb3VuZFByb3BlcnR5SW5kZXggPSBmaW5kUHJvcGVydHlJbmRleChwcm9wZXJ0eUlE
KTsKICAgICBpZiAoZm91bmRQcm9wZXJ0eUluZGV4ID09IC0xKQpAQCAtMTE0NCw3ICsxMTQ0LDcg
QEAgQ1NTUHJvcGVydHkqIE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpmaQogICAgIHJldHVybiAm
bV9wcm9wZXJ0eVZlY3Rvci5hdChmb3VuZFByb3BlcnR5SW5kZXgpOwogfQogCi1ib29sIFN0eWxl
UHJvcGVydHlTZXQ6OnByb3BlcnR5TWF0Y2hlcyhDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNv
bnN0IENTU1ZhbHVlKiBwcm9wZXJ0eVZhbHVlKSBjb25zdAorYm9vbCBTdHlsZVByb3BlcnRpZXM6
OnByb3BlcnR5TWF0Y2hlcyhDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IENTU1ZhbHVl
KiBwcm9wZXJ0eVZhbHVlKSBjb25zdAogewogICAgIGludCBmb3VuZFByb3BlcnR5SW5kZXggPSBm
aW5kUHJvcGVydHlJbmRleChwcm9wZXJ0eUlEKTsKICAgICBpZiAoZm91bmRQcm9wZXJ0eUluZGV4
ID09IC0xKQpAQCAtMTE1Miw3ICsxMTUyLDcgQEAgYm9vbCBTdHlsZVByb3BlcnR5U2V0Ojpwcm9w
ZXJ0eU1hdGNoZXMoQwogICAgIHJldHVybiBwcm9wZXJ0eUF0KGZvdW5kUHJvcGVydHlJbmRleCku
dmFsdWUoKS0+ZXF1YWxzKCpwcm9wZXJ0eVZhbHVlKTsKIH0KIAotdm9pZCBNdXRhYmxlU3R5bGVQ
cm9wZXJ0eVNldDo6cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0
eVNldCogc3R5bGUpCit2b2lkIE11dGFibGVTdHlsZVByb3BlcnRpZXM6OnJlbW92ZUVxdWl2YWxl
bnRQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydGllcyogc3R5bGUpCiB7CiAgICAgVmVjdG9y
PENTU1Byb3BlcnR5SUQ+IHByb3BlcnRpZXNUb1JlbW92ZTsKICAgICB1bnNpZ25lZCBzaXplID0g
bV9wcm9wZXJ0eVZlY3Rvci5zaXplKCk7CkBAIC0xMTY2LDcgKzExNjYsNyBAQCB2b2lkIE11dGFi
bGVTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVFcXVpCiAgICAgICAgIHJlbW92ZVByb3BlcnR5KHBy
b3BlcnRpZXNUb1JlbW92ZVtpXSk7CiB9CiAKLXZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6
OnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKGNvbnN0IENvbXB1dGVkU3R5bGVFeHRyYWN0b3Iq
IGNvbXB1dGVkU3R5bGUpCit2b2lkIE11dGFibGVTdHlsZVByb3BlcnRpZXM6OnJlbW92ZUVxdWl2
YWxlbnRQcm9wZXJ0aWVzKGNvbnN0IENvbXB1dGVkU3R5bGVFeHRyYWN0b3IqIGNvbXB1dGVkU3R5
bGUpCiB7CiAgICAgVmVjdG9yPENTU1Byb3BlcnR5SUQ+IHByb3BlcnRpZXNUb1JlbW92ZTsKICAg
ICB1bnNpZ25lZCBzaXplID0gbV9wcm9wZXJ0eVZlY3Rvci5zaXplKCk7CkBAIC0xMTgwLDEyICsx
MTgwLDEyIEBAIHZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZUVxdWkKICAgICAg
ICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydGllc1RvUmVtb3ZlW2ldKTsKIH0KIAotUGFzc1JlZjxN
dXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gU3R5bGVQcm9wZXJ0eVNldDo6bXV0YWJsZUNvcHkoKSBj
b25zdAorUGFzc1JlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBTdHlsZVByb3BlcnRpZXM6Om11
dGFibGVDb3B5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNdXRhYmxlU3R5
bGVQcm9wZXJ0eVNldCgqdGhpcykpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE11dGFibGVT
dHlsZVByb3BlcnRpZXMoKnRoaXMpKTsKIH0KIAotUGFzc1JlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0
eVNldD4gU3R5bGVQcm9wZXJ0eVNldDo6Y29weVByb3BlcnRpZXNJblNldChjb25zdCBDU1NQcm9w
ZXJ0eUlEKiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKK1Bhc3NSZWY8TXV0YWJsZVN0eWxl
UHJvcGVydGllcz4gU3R5bGVQcm9wZXJ0aWVzOjpjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IENT
U1Byb3BlcnR5SUQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdAogewogICAgIFZlY3RvcjxD
U1NQcm9wZXJ0eSwgMjU2PiBsaXN0OwogICAgIGxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShs
ZW5ndGgpOwpAQCAtMTE5NCwxNSArMTE5NCwxNSBAQCBQYXNzUmVmPE11dGFibGVTdHlsZVByb3Bl
cnR5U2V0PiBTdHlsZVByCiAgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAgIGxpc3QuYXBw
ZW5kKENTU1Byb3BlcnR5KHNldFtpXSwgdmFsdWUucmVsZWFzZSgpLCBmYWxzZSkpOwogICAgIH0K
LSAgICByZXR1cm4gTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShsaXN0LmRhdGEoKSwg
bGlzdC5zaXplKCkpOworICAgIHJldHVybiBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUo
bGlzdC5kYXRhKCksIGxpc3Quc2l6ZSgpKTsKIH0KIAotUHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uKiBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6Y3NzU3R5bGVEZWNsYXJhdGlvbigpCitQ
cm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24qIE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNz
c1N0eWxlRGVjbGFyYXRpb24oKQogewogICAgIHJldHVybiBtX2Nzc29tV3JhcHBlci5nZXQoKTsK
IH0KIAotQ1NTU3R5bGVEZWNsYXJhdGlvbiogTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OmVuc3Vy
ZUNTU1N0eWxlRGVjbGFyYXRpb24oKQorQ1NTU3R5bGVEZWNsYXJhdGlvbiogTXV0YWJsZVN0eWxl
UHJvcGVydGllczo6ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpCiB7CiAgICAgaWYgKG1fY3Nz
b21XcmFwcGVyKSB7CiAgICAgICAgIEFTU0VSVCghc3RhdGljX2Nhc3Q8Q1NTU3R5bGVEZWNsYXJh
dGlvbio+KG1fY3Nzb21XcmFwcGVyLmdldCgpKS0+cGFyZW50UnVsZSgpKTsKQEAgLTEyMTMsNyAr
MTIxMyw3IEBAIENTU1N0eWxlRGVjbGFyYXRpb24qIE11dGFibGVTdHlsZVByb3BlcnQKICAgICBy
ZXR1cm4gbV9jc3NvbVdyYXBwZXIuZ2V0KCk7CiB9CiAKLUNTU1N0eWxlRGVjbGFyYXRpb24qIE11
dGFibGVTdHlsZVByb3BlcnR5U2V0OjplbnN1cmVJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uKFN0
eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQpCitDU1NTdHlsZURlY2xhcmF0aW9uKiBNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzOjplbnN1cmVJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uKFN0eWxlZEVs
ZW1lbnQqIHBhcmVudEVsZW1lbnQpCiB7CiAgICAgaWYgKG1fY3Nzb21XcmFwcGVyKSB7CiAgICAg
ICAgIEFTU0VSVChtX2Nzc29tV3JhcHBlci0+cGFyZW50RWxlbWVudCgpID09IHBhcmVudEVsZW1l
bnQpOwpAQCAtMTIyMyw0MSArMTIyMyw0MSBAQCBDU1NTdHlsZURlY2xhcmF0aW9uKiBNdXRhYmxl
U3R5bGVQcm9wZXJ0CiAgICAgcmV0dXJuIG1fY3Nzb21XcmFwcGVyLmdldCgpOwogfQogCi11bnNp
Z25lZCBTdHlsZVByb3BlcnR5U2V0OjphdmVyYWdlU2l6ZUluQnl0ZXMoKQordW5zaWduZWQgU3R5
bGVQcm9wZXJ0aWVzOjphdmVyYWdlU2l6ZUluQnl0ZXMoKQogewogICAgIC8vIFBsZWFzZSB1cGRh
dGUgdGhpcyBpZiB0aGUgc3RvcmFnZSBzY2hlbWUgY2hhbmdlcyBzbyB0aGF0IHRoaXMgbG9uZ2Vy
IHJlZmxlY3RzIHRoZSBhY3R1YWwgc2l6ZS4KLSAgICByZXR1cm4gc2l6ZUZvckltbXV0YWJsZVN0
eWxlUHJvcGVydHlTZXRXaXRoUHJvcGVydHlDb3VudCg0KTsKKyAgICByZXR1cm4gc2l6ZUZvcklt
bXV0YWJsZVN0eWxlUHJvcGVydGllc1dpdGhQcm9wZXJ0eUNvdW50KDQpOwogfQogCiAvLyBTZWUg
dGhlIGZ1bmN0aW9uIGFib3ZlIGlmIHlvdSBuZWVkIHRvIHVwZGF0ZSB0aGlzLgotc3RydWN0IFNh
bWVTaXplQXNTdHlsZVByb3BlcnR5U2V0IDogcHVibGljIFJlZkNvdW50ZWQ8U2FtZVNpemVBc1N0
eWxlUHJvcGVydHlTZXQ+IHsKK3N0cnVjdCBTYW1lU2l6ZUFzU3R5bGVQcm9wZXJ0aWVzIDogcHVi
bGljIFJlZkNvdW50ZWQ8U2FtZVNpemVBc1N0eWxlUHJvcGVydGllcz4gewogICAgIHVuc2lnbmVk
IGJpdGZpZWxkOwogfTsKLUNPTVBJTEVfQVNTRVJUKHNpemVvZihTdHlsZVByb3BlcnR5U2V0KSA9
PSBzaXplb2YoU2FtZVNpemVBc1N0eWxlUHJvcGVydHlTZXQpLCBzdHlsZV9wcm9wZXJ0eV9zZXRf
c2hvdWxkX3N0YXlfc21hbGwpOworQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFN0eWxlUHJvcGVydGll
cykgPT0gc2l6ZW9mKFNhbWVTaXplQXNTdHlsZVByb3BlcnRpZXMpLCBzdHlsZV9wcm9wZXJ0eV9z
ZXRfc2hvdWxkX3N0YXlfc21hbGwpOwogCiAjaWZuZGVmIE5ERUJVRwotdm9pZCBTdHlsZVByb3Bl
cnR5U2V0OjpzaG93U3R5bGUoKQordm9pZCBTdHlsZVByb3BlcnRpZXM6OnNob3dTdHlsZSgpCiB7
CiAgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgYXNUZXh0KCkuYXNjaWkoKS5kYXRhKCkpOwog
fQogI2VuZGlmCiAKLVBhc3NSZWY8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IE11dGFibGVTdHls
ZVByb3BlcnR5U2V0OjpjcmVhdGUoQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorUGFzc1Jl
ZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUo
Q1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IE11dGFibGVTdHlsZVByb3BlcnR5U2V0KGNzc1BhcnNlck1vZGUpKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKGNzc1BhcnNlck1vZGUpKTsKIH0KIAot
UGFzc1JlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6
OmNyZWF0ZShjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydGllcywgdW5zaWduZWQgY291bnQpCitQ
YXNzUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNy
ZWF0ZShjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydGllcywgdW5zaWduZWQgY291bnQpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQocHJvcGVydGll
cywgY291bnQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzKHByb3BlcnRpZXMsIGNvdW50KSk7CiB9CiAKLVN0cmluZyBTdHlsZVByb3BlcnR5U2V0OjpQ
cm9wZXJ0eVJlZmVyZW5jZTo6Y3NzTmFtZSgpIGNvbnN0CitTdHJpbmcgU3R5bGVQcm9wZXJ0aWVz
OjpQcm9wZXJ0eVJlZmVyZW5jZTo6Y3NzTmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldFBy
b3BlcnR5TmFtZVN0cmluZyhpZCgpKTsKIH0KIAotU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OlBy
b3BlcnR5UmVmZXJlbmNlOjpjc3NUZXh0KCkgY29uc3QKK1N0cmluZyBTdHlsZVByb3BlcnRpZXM6
OlByb3BlcnR5UmVmZXJlbmNlOjpjc3NUZXh0KCkgY29uc3QKIHsKICAgICBTdHJpbmdCdWlsZGVy
IHJlc3VsdDsKICAgICByZXN1bHQuYXBwZW5kKGNzc05hbWUoKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUHJvcGVydGllcy5oCShyZXZpc2lvbiAxNTk4NDEpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0Lmg6MTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUHJvcGVydGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjc3IEBACisvKgor
ICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTdHlsZVByb3BlcnR5U2V0X2gKKyNkZWZpbmUg
U3R5bGVQcm9wZXJ0eVNldF9oCisKKyNpbmNsdWRlICJDU1NQYXJzZXJNb2RlLmgiCisjaW5jbHVk
ZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eS5oIgorI2luY2x1
ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisj
aW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIENTU1J1bGU7CitjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOworY2xhc3MgQ29tcHV0ZWRT
dHlsZUV4dHJhY3RvcjsKK2NsYXNzIEltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ7CitjbGFzcyBV
Ukw7CitjbGFzcyBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDsKK2NsYXNzIFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIFN0eWxlZEVsZW1lbnQ7CitjbGFzcyBTdHlsZVByb3Bl
cnR5U2hvcnRoYW5kOworY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOworCitjbGFzcyBTdHlsZVBy
b3BlcnR5U2V0IDogcHVibGljIFJlZkNvdW50ZWQ8U3R5bGVQcm9wZXJ0eVNldD4geworICAgIGZy
aWVuZCBjbGFzcyBQcm9wZXJ0eVJlZmVyZW5jZTsKK3B1YmxpYzoKKyAgICAvLyBPdmVycmlkZSBS
ZWZDb3VudGVkJ3MgZGVyZWYoKSB0byBlbnN1cmUgb3BlcmF0b3IgZGVsZXRlIGlzIGNhbGxlZCBv
bgorICAgIC8vIHRoZSBhcHByb3ByaWF0ZSBzdWJjbGFzcyB0eXBlLgorICAgIHZvaWQgZGVyZWYo
KTsKKworICAgIGNsYXNzIFByb3BlcnR5UmVmZXJlbmNlIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFByb3BlcnR5UmVmZXJlbmNlKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQmIHByb3BlcnR5U2V0LCB1
bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9wcm9wZXJ0eVNldChwcm9wZXJ0eVNldCkK
KyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgQ1NTUHJvcGVydHlJRCBpZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENTU1By
b3BlcnR5SUQ+KHByb3BlcnR5TWV0YWRhdGEoKS5tX3Byb3BlcnR5SUQpOyB9CisgICAgICAgIENT
U1Byb3BlcnR5SUQgc2hvcnRoYW5kSUQoKSBjb25zdCB7IHJldHVybiBwcm9wZXJ0eU1ldGFkYXRh
KCkuc2hvcnRoYW5kSUQoKTsgfQorCisgICAgICAgIGJvb2wgaXNJbXBvcnRhbnQoKSBjb25zdCB7
IHJldHVybiBwcm9wZXJ0eU1ldGFkYXRhKCkubV9pbXBvcnRhbnQ7IH0KKyAgICAgICAgYm9vbCBp
c0luaGVyaXRlZCgpIGNvbnN0IHsgcmV0dXJuIHByb3BlcnR5TWV0YWRhdGEoKS5tX2luaGVyaXRl
ZDsgfQorICAgICAgICBib29sIGlzSW1wbGljaXQoKSBjb25zdCB7IHJldHVybiBwcm9wZXJ0eU1l
dGFkYXRhKCkubV9pbXBsaWNpdDsgfQorCisgICAgICAgIFN0cmluZyBjc3NOYW1lKCkgY29uc3Q7
CisgICAgICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CisKKyAgICAgICAgY29uc3QgQ1NTVmFs
dWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gcHJvcGVydHlWYWx1ZSgpOyB9CisgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgdHJ5IHRvIHJlbW92ZSB0aGlzIG11dGFibGUgb3ZlcmxvYWQuCisg
ICAgICAgIENTU1ZhbHVlKiB2YWx1ZSgpIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Q1NTVmFsdWUqPihw
cm9wZXJ0eVZhbHVlKCkpOyB9CisKKyAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzLgorICAg
ICAgICBDU1NQcm9wZXJ0eSB0b0NTU1Byb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gQ1NTUHJvcGVy
dHkocHJvcGVydHlNZXRhZGF0YSgpLCBjb25zdF9jYXN0PENTU1ZhbHVlKj4ocHJvcGVydHlWYWx1
ZSgpKSk7IH0KKyAgICAgICAgY29uc3QgU3R5bGVQcm9wZXJ0eU1ldGFkYXRhJiBwcm9wZXJ0eU1l
dGFkYXRhKCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDU1NWYWx1ZSog
cHJvcGVydHlWYWx1ZSgpIGNvbnN0OworCisgICAgICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQm
IG1fcHJvcGVydHlTZXQ7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAg
IHVuc2lnbmVkIHByb3BlcnR5Q291bnQoKSBjb25zdDsKKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dDsKKyAgICBQcm9wZXJ0eVJlZmVyZW5jZSBwcm9wZXJ0eUF0KHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IHJldHVybiBQcm9wZXJ0eVJlZmVyZW5jZSgqdGhpcywgaW5kZXgpOyB9CisKKyAgICBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5SUQpIGNvbnN0
OworICAgIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQpIGNvbnN0OworICAg
IGJvb2wgcHJvcGVydHlJc0ltcG9ydGFudChDU1NQcm9wZXJ0eUlEKSBjb25zdDsKKyAgICBTdHJp
bmcgZ2V0UHJvcGVydHlTaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCkgY29uc3Q7CisgICAgYm9vbCBp
c1Byb3BlcnR5SW1wbGljaXQoQ1NTUHJvcGVydHlJRCkgY29uc3Q7CisKKyAgICBQYXNzUmVmPE11
dGFibGVTdHlsZVByb3BlcnR5U2V0PiBjb3B5QmxvY2tQcm9wZXJ0aWVzKCkgY29uc3Q7CisKKyAg
ICBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxDU1NQYXJzZXJNb2RlPihtX2Nzc1BhcnNlck1vZGUpOyB9CisKKyAgICB2b2lkIGFkZFN1YnJl
c291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PFVSTD4mLCBTdHlsZVNoZWV0Q29udGVudHMqIGNv
bnRleHRTdHlsZVNoZWV0KSBjb25zdDsKKworICAgIFBhc3NSZWY8TXV0YWJsZVN0eWxlUHJvcGVy
dHlTZXQ+IG11dGFibGVDb3B5KCkgY29uc3Q7CisgICAgUGFzc1JlZjxJbW11dGFibGVTdHlsZVBy
b3BlcnR5U2V0PiBpbW11dGFibGVDb3B5SWZOZWVkZWQoKSBjb25zdDsKKworICAgIFBhc3NSZWY8
TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IGNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgQ1NTUHJv
cGVydHlJRCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OworICAgIAorICAgIFN0cmluZyBh
c1RleHQoKSBjb25zdDsKKworICAgIGJvb2wgaXNNdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9p
c011dGFibGU7IH0KKyAgICBib29sIGhhc0NTU09NV3JhcHBlcigpIGNvbnN0OworCisgICAgYm9v
bCBoYXNGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKCkgY29uc3Q7CisKKyAgICBzdGF0aWMg
dW5zaWduZWQgYXZlcmFnZVNpemVJbkJ5dGVzKCk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9p
ZCBzaG93U3R5bGUoKTsKKyNlbmRpZgorCisgICAgYm9vbCBwcm9wZXJ0eU1hdGNoZXMoQ1NTUHJv
cGVydHlJRCwgY29uc3QgQ1NTVmFsdWUqKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIFN0eWxl
UHJvcGVydHlTZXQoQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorICAgICAgICA6IG1fY3Nz
UGFyc2VyTW9kZShjc3NQYXJzZXJNb2RlKQorICAgICAgICAsIG1faXNNdXRhYmxlKHRydWUpCisg
ICAgICAgICwgbV9hcnJheVNpemUoMCkKKyAgICB7IH0KKworICAgIFN0eWxlUHJvcGVydHlTZXQo
Q1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCB1bnNpZ25lZCBpbW11dGFibGVBcnJheVNpemUp
CisgICAgICAgIDogbV9jc3NQYXJzZXJNb2RlKGNzc1BhcnNlck1vZGUpCisgICAgICAgICwgbV9p
c011dGFibGUoZmFsc2UpCisgICAgICAgICwgbV9hcnJheVNpemUoaW1tdXRhYmxlQXJyYXlTaXpl
KQorICAgIHsgfQorCisgICAgaW50IGZpbmRQcm9wZXJ0eUluZGV4KENTU1Byb3BlcnR5SUQpIGNv
bnN0OworCisgICAgdW5zaWduZWQgbV9jc3NQYXJzZXJNb2RlIDogMjsKKyAgICBtdXRhYmxlIHVu
c2lnbmVkIG1faXNNdXRhYmxlIDogMTsKKyAgICB1bnNpZ25lZCBtX2FycmF5U2l6ZSA6IDI5Owor
ICAgIAorcHJpdmF0ZToKKyAgICBTdHJpbmcgZ2V0U2hvcnRoYW5kVmFsdWUoY29uc3QgU3R5bGVQ
cm9wZXJ0eVNob3J0aGFuZCYpIGNvbnN0OworICAgIFN0cmluZyBnZXRDb21tb25WYWx1ZShjb25z
dCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJikgY29uc3Q7CisgICAgZW51bSBDb21tb25WYWx1ZU1v
ZGUgeyBPbWl0VW5jb21tb25WYWx1ZXMsIFJldHVybk51bGxPblVuY29tbW9uVmFsdWVzIH07Cisg
ICAgU3RyaW5nIGJvcmRlclByb3BlcnR5VmFsdWUoQ29tbW9uVmFsdWVNb2RlKSBjb25zdDsKKyAg
ICBTdHJpbmcgZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0IFN0eWxlUHJvcGVydHlTaG9y
dGhhbmQmKSBjb25zdDsKKyAgICBTdHJpbmcgZ2V0NFZhbHVlcyhjb25zdCBTdHlsZVByb3BlcnR5
U2hvcnRoYW5kJikgY29uc3Q7CisgICAgU3RyaW5nIGJvcmRlclNwYWNpbmdWYWx1ZShjb25zdCBT
dHlsZVByb3BlcnR5U2hvcnRoYW5kJikgY29uc3Q7CisgICAgU3RyaW5nIGZvbnRWYWx1ZSgpIGNv
bnN0OworICAgIHZvaWQgYXBwZW5kRm9udExvbmdoYW5kVmFsdWVJZkV4cGxpY2l0KENTU1Byb3Bl
cnR5SUQsIFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgU3RyaW5nJiB2YWx1ZSkgY29uc3Q7CisKKyAg
ICBmcmllbmQgY2xhc3MgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOworfTsKKworY2xh
c3MgSW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCA6IHB1YmxpYyBTdHlsZVByb3BlcnR5U2V0IHsK
K3B1YmxpYzoKKyAgICB+SW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCgpOworICAgIHN0YXRpYyBQ
YXNzUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IGNyZWF0ZShjb25zdCBDU1NQcm9wZXJ0
eSogcHJvcGVydGllcywgdW5zaWduZWQgY291bnQsIENTU1BhcnNlck1vZGUpOworCisgICAgdW5z
aWduZWQgcHJvcGVydHlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlTaXplOyB9CisKKyAg
ICBjb25zdCBDU1NWYWx1ZSoqIHZhbHVlQXJyYXkoKSBjb25zdDsKKyAgICBjb25zdCBTdHlsZVBy
b3BlcnR5TWV0YWRhdGEqIG1ldGFkYXRhQXJyYXkoKSBjb25zdDsKKworICAgIHZvaWQqIG1fc3Rv
cmFnZTsKKworcHJpdmF0ZToKKyAgICBJbW11dGFibGVTdHlsZVByb3BlcnR5U2V0KGNvbnN0IENT
U1Byb3BlcnR5KiwgdW5zaWduZWQgY291bnQsIENTU1BhcnNlck1vZGUpOworfTsKKworaW5saW5l
IGNvbnN0IENTU1ZhbHVlKiogSW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6dmFsdWVBcnJheSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ1NTVmFsdWUqKj4o
Y29uc3RfY2FzdDxjb25zdCB2b2lkKio+KCgmKHRoaXMtPm1fc3RvcmFnZSkpKSk7Cit9CisKK2lu
bGluZSBjb25zdCBTdHlsZVByb3BlcnR5TWV0YWRhdGEqIEltbXV0YWJsZVN0eWxlUHJvcGVydHlT
ZXQ6Om1ldGFkYXRhQXJyYXkoKSBjb25zdAoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0
X3B0cjxjb25zdCBTdHlsZVByb3BlcnR5TWV0YWRhdGEqPigmcmVpbnRlcnByZXRfY2FzdF9wdHI8
Y29uc3QgY2hhcio+KCYodGhpcy0+bV9zdG9yYWdlKSlbbV9hcnJheVNpemUgKiBzaXplb2YoQ1NT
VmFsdWUqKV0pOworfQorCitjbGFzcyBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCA6IHB1YmxpYyBT
dHlsZVByb3BlcnR5U2V0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZjxNdXRhYmxlU3R5
bGVQcm9wZXJ0eVNldD4gY3JlYXRlKENTU1BhcnNlck1vZGUgPSBDU1NRdWlya3NNb2RlKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gY3JlYXRlKGNvbnN0IENT
U1Byb3BlcnR5KiBwcm9wZXJ0aWVzLCB1bnNpZ25lZCBjb3VudCk7CisKKyAgICB+TXV0YWJsZVN0
eWxlUHJvcGVydHlTZXQoKTsKKworICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQoKSBjb25zdCB7
IHJldHVybiBtX3Byb3BlcnR5VmVjdG9yLnNpemUoKTsgfQorCisgICAgUHJvcGVydHlTZXRDU1NT
dHlsZURlY2xhcmF0aW9uKiBjc3NTdHlsZURlY2xhcmF0aW9uKCk7CisKKyAgICB2b2lkIGFkZFBh
cnNlZFByb3BlcnRpZXMoY29uc3QgVmVjdG9yPENTU1Byb3BlcnR5PiYpOworICAgIHZvaWQgYWRk
UGFyc2VkUHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmKTsKKworICAgIC8vIFRoZXNlIGV4cGFu
ZCBzaG9ydGhhbmQgcHJvcGVydGllcyBpbnRvIG11bHRpcGxlIHByb3BlcnRpZXMuCisgICAgYm9v
bCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGlt
cG9ydGFudCA9IGZhbHNlLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0ID0g
MCk7CisgICAgdm9pZCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBQYXNzUmVmUHRyPENTU1Zh
bHVlPiwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7CisKKyAgICAvLyBUaGVzZSBkbyBub3QuIEZJ
WE1FOiBUaGlzIGlzIHRvbyBtZXNzeSwgd2UgY2FuIGRvIGJldHRlci4KKyAgICBib29sIHNldFBy
b3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlSUQgaWRlbnRpZmllciwgYm9vbCBpbXBvcnRh
bnQgPSBmYWxzZSk7CisgICAgYm9vbCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBDU1NQcm9w
ZXJ0eUlEIGlkZW50aWZpZXIsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpOworICAgIHZvaWQgYXBw
ZW5kUHJlZml4aW5nVmFyaWFudFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5Jik7CisgICAgdm9p
ZCBzZXRQcmVmaXhpbmdWYXJpYW50UHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmKTsKKyAgICB2
b2lkIHNldFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5JiwgQ1NTUHJvcGVydHkqIHNsb3QgPSAw
KTsKKworICAgIGJvb2wgcmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgU3RyaW5nKiByZXR1
cm5UZXh0ID0gMCk7CisgICAgdm9pZCByZW1vdmVQcmVmaXhlZE9yVW5wcmVmaXhlZFByb3BlcnR5
KENTU1Byb3BlcnR5SUQpOworICAgIHZvaWQgcmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CisgICAg
Ym9vbCByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3QgQ1NTUHJvcGVydHlJRCogc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOworCisgICAgLy8gRklYTUU6IFRoZXNlIHR3byBjYW4gYmUgbW92ZWQgdG8g
RWRpdGluZ1N0eWxlLmNwcAorICAgIHZvaWQgcmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMoY29u
c3QgU3R5bGVQcm9wZXJ0eVNldCopOworICAgIHZvaWQgcmVtb3ZlRXF1aXZhbGVudFByb3BlcnRp
ZXMoY29uc3QgQ29tcHV0ZWRTdHlsZUV4dHJhY3RvciopOworCisgICAgdm9pZCBtZXJnZUFuZE92
ZXJyaWRlT25Db25mbGljdChjb25zdCBTdHlsZVByb3BlcnR5U2V0Jik7CisKKyAgICB2b2lkIGNs
ZWFyKCk7CisgICAgdm9pZCBwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNs
YXJhdGlvbiwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCk7CisKKyAgICBD
U1NTdHlsZURlY2xhcmF0aW9uKiBlbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCk7CisgICAgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogZW5zdXJlSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbihTdHlsZWRF
bGVtZW50KiBwYXJlbnRFbGVtZW50KTsKKworICAgIFZlY3RvcjxDU1NQcm9wZXJ0eSwgND4gbV9w
cm9wZXJ0eVZlY3RvcjsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBNdXRhYmxlU3R5bGVQcm9w
ZXJ0eVNldChDU1NQYXJzZXJNb2RlKTsKKyAgICBleHBsaWNpdCBNdXRhYmxlU3R5bGVQcm9wZXJ0
eVNldChjb25zdCBTdHlsZVByb3BlcnR5U2V0Jik7CisgICAgTXV0YWJsZVN0eWxlUHJvcGVydHlT
ZXQoY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnRpZXMsIHVuc2lnbmVkIGNvdW50KTsKKworICAg
IGJvb2wgcmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7CisgICAgQ1NTUHJv
cGVydHkqIGZpbmRDU1NQcm9wZXJ0eVdpdGhJRChDU1NQcm9wZXJ0eUlEKTsKKyAgICBPd25QdHI8
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uPiBtX2Nzc29tV3JhcHBlcjsKKworICAgIGZy
aWVuZCBjbGFzcyBTdHlsZVByb3BlcnR5U2V0OworfTsKKworaW5saW5lIGNvbnN0IFN0eWxlUHJv
cGVydHlNZXRhZGF0YSYgU3R5bGVQcm9wZXJ0eVNldDo6UHJvcGVydHlSZWZlcmVuY2U6OnByb3Bl
cnR5TWV0YWRhdGEoKSBjb25zdAoreworICAgIGlmIChtX3Byb3BlcnR5U2V0LmlzTXV0YWJsZSgp
KQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTXV0YWJsZVN0eWxlUHJvcGVydHlT
ZXQmPihtX3Byb3BlcnR5U2V0KS5tX3Byb3BlcnR5VmVjdG9yLmF0KG1faW5kZXgpLm1ldGFkYXRh
KCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEltbXV0YWJsZVN0eWxlUHJvcGVydHlT
ZXQmPihtX3Byb3BlcnR5U2V0KS5tZXRhZGF0YUFycmF5KClbbV9pbmRleF07Cit9CisKK2lubGlu
ZSBjb25zdCBDU1NWYWx1ZSogU3R5bGVQcm9wZXJ0eVNldDo6UHJvcGVydHlSZWZlcmVuY2U6OnBy
b3BlcnR5VmFsdWUoKSBjb25zdAoreworICAgIGlmIChtX3Byb3BlcnR5U2V0LmlzTXV0YWJsZSgp
KQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTXV0YWJsZVN0eWxlUHJvcGVydHlT
ZXQmPihtX3Byb3BlcnR5U2V0KS5tX3Byb3BlcnR5VmVjdG9yLmF0KG1faW5kZXgpLnZhbHVlKCk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXQm
PihtX3Byb3BlcnR5U2V0KS52YWx1ZUFycmF5KClbbV9pbmRleF07Cit9CisKK2lubGluZSB1bnNp
Z25lZCBTdHlsZVByb3BlcnR5U2V0Ojpwcm9wZXJ0eUNvdW50KCkgY29uc3QKK3sKKyAgICBpZiAo
bV9pc011dGFibGUpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBNdXRhYmxlU3R5
bGVQcm9wZXJ0eVNldCo+KHRoaXMpLT5tX3Byb3BlcnR5VmVjdG9yLnNpemUoKTsKKyAgICByZXR1
cm4gbV9hcnJheVNpemU7Cit9CisKK2lubGluZSBib29sIFN0eWxlUHJvcGVydHlTZXQ6OmlzRW1w
dHkoKSBjb25zdAoreworICAgIHJldHVybiAhcHJvcGVydHlDb3VudCgpOworfQorCitpbmxpbmUg
dm9pZCBTdHlsZVByb3BlcnR5U2V0OjpkZXJlZigpCit7CisgICAgaWYgKCFkZXJlZkJhc2UoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faXNNdXRhYmxlKQorICAgICAgICBkZWxldGUg
c3RhdGljX2Nhc3Q8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQqPih0aGlzKTsKKyAgICBlbHNlCisg
ICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxJbW11dGFibGVTdHlsZVByb3BlcnR5U2V0Kj4odGhp
cyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFN0eWxlUHJvcGVy
dHlTZXRfaApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuaAkod29ya2luZyBj
b3B5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xOSw4ICsxOSw4IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAq
LwogCi0jaWZuZGVmIFN0eWxlUHJvcGVydHlTZXRfaAotI2RlZmluZSBTdHlsZVByb3BlcnR5U2V0
X2gKKyNpZm5kZWYgU3R5bGVQcm9wZXJ0aWVzX2gKKyNkZWZpbmUgU3R5bGVQcm9wZXJ0aWVzX2gK
IAogI2luY2x1ZGUgIkNTU1BhcnNlck1vZGUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1
ZS5oIgpAQCAtMzYsMTUgKzM2LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENTU1J1
bGU7CiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ29tcHV0ZWRTdHlsZUV4dHJh
Y3RvcjsKLWNsYXNzIEltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ7CitjbGFzcyBJbW11dGFibGVT
dHlsZVByb3BlcnRpZXM7CiBjbGFzcyBVUkw7Ci1jbGFzcyBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNl
dDsKK2NsYXNzIE11dGFibGVTdHlsZVByb3BlcnRpZXM7CiBjbGFzcyBQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb247CiBjbGFzcyBTdHlsZWRFbGVtZW50OwogY2xhc3MgU3R5bGVQcm9wZXJ0
eVNob3J0aGFuZDsKIGNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKIAotY2xhc3MgU3R5bGVQcm9w
ZXJ0eVNldCA6IHB1YmxpYyBSZWZDb3VudGVkPFN0eWxlUHJvcGVydHlTZXQ+IHsKK2NsYXNzIFN0
eWxlUHJvcGVydGllcyA6IHB1YmxpYyBSZWZDb3VudGVkPFN0eWxlUHJvcGVydGllcz4gewogICAg
IGZyaWVuZCBjbGFzcyBQcm9wZXJ0eVJlZmVyZW5jZTsKIHB1YmxpYzoKICAgICAvLyBPdmVycmlk
ZSBSZWZDb3VudGVkJ3MgZGVyZWYoKSB0byBlbnN1cmUgb3BlcmF0b3IgZGVsZXRlIGlzIGNhbGxl
ZCBvbgpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAKICAgICBjbGFzcyBQcm9wZXJ0eVJlZmVy
ZW5jZSB7CiAgICAgcHVibGljOgotICAgICAgICBQcm9wZXJ0eVJlZmVyZW5jZShjb25zdCBTdHls
ZVByb3BlcnR5U2V0JiBwcm9wZXJ0eVNldCwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgIFByb3Bl
cnR5UmVmZXJlbmNlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgcHJvcGVydHlTZXQsIHVuc2lnbmVk
IGluZGV4KQogICAgICAgICAgICAgOiBtX3Byb3BlcnR5U2V0KHByb3BlcnR5U2V0KQogICAgICAg
ICAgICAgLCBtX2luZGV4KGluZGV4KQogICAgICAgICB7CkBAIC04MCw3ICs4MCw3IEBAIHB1Ymxp
YzoKICAgICBwcml2YXRlOgogICAgICAgICBjb25zdCBDU1NWYWx1ZSogcHJvcGVydHlWYWx1ZSgp
IGNvbnN0OwogCi0gICAgICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQmIG1fcHJvcGVydHlTZXQ7
CisgICAgICAgIGNvbnN0IFN0eWxlUHJvcGVydGllcyYgbV9wcm9wZXJ0eVNldDsKICAgICAgICAg
dW5zaWduZWQgbV9pbmRleDsKICAgICB9OwogCkBAIC05NCwxNiArOTQsMTYgQEAgcHVibGljOgog
ICAgIFN0cmluZyBnZXRQcm9wZXJ0eVNob3J0aGFuZChDU1NQcm9wZXJ0eUlEKSBjb25zdDsKICAg
ICBib29sIGlzUHJvcGVydHlJbXBsaWNpdChDU1NQcm9wZXJ0eUlEKSBjb25zdDsKIAotICAgIFBh
c3NSZWY8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IGNvcHlCbG9ja1Byb3BlcnRpZXMoKSBjb25z
dDsKKyAgICBQYXNzUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGNvcHlCbG9ja1Byb3BlcnRp
ZXMoKSBjb25zdDsKIAogICAgIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PENTU1BhcnNlck1vZGU+KG1fY3NzUGFyc2VyTW9kZSk7IH0KIAog
ICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8VVJMPiYsIFN0eWxl
U2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpIGNvbnN0OwogCi0gICAgUGFzc1JlZjxN
dXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gbXV0YWJsZUNvcHkoKSBjb25zdDsKLSAgICBQYXNzUmVm
PEltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IGltbXV0YWJsZUNvcHlJZk5lZWRlZCgpIGNvbnN0
OworICAgIFBhc3NSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gbXV0YWJsZUNvcHkoKSBjb25z
dDsKKyAgICBQYXNzUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gaW1tdXRhYmxlQ29weUlm
TmVlZGVkKCkgY29uc3Q7CiAKLSAgICBQYXNzUmVmPE11dGFibGVTdHlsZVByb3BlcnR5U2V0PiBj
b3B5UHJvcGVydGllc0luU2V0KGNvbnN0IENTU1Byb3BlcnR5SUQqIHNldCwgdW5zaWduZWQgbGVu
Z3RoKSBjb25zdDsKKyAgICBQYXNzUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGNvcHlQcm9w
ZXJ0aWVzSW5TZXQoY29uc3QgQ1NTUHJvcGVydHlJRCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNv
bnN0OwogICAgIAogICAgIFN0cmluZyBhc1RleHQoKSBjb25zdDsKIApAQCAtMTIxLDEzICsxMjEs
MTMgQEAgcHVibGljOgogICAgIGJvb2wgcHJvcGVydHlNYXRjaGVzKENTU1Byb3BlcnR5SUQsIGNv
bnN0IENTU1ZhbHVlKikgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICBTdHlsZVByb3BlcnR5U2V0
KENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKKyAgICBTdHlsZVByb3BlcnRpZXMoQ1NTUGFy
c2VyTW9kZSBjc3NQYXJzZXJNb2RlKQogICAgICAgICA6IG1fY3NzUGFyc2VyTW9kZShjc3NQYXJz
ZXJNb2RlKQogICAgICAgICAsIG1faXNNdXRhYmxlKHRydWUpCiAgICAgICAgICwgbV9hcnJheVNp
emUoMCkKICAgICB7IH0KIAotICAgIFN0eWxlUHJvcGVydHlTZXQoQ1NTUGFyc2VyTW9kZSBjc3NQ
YXJzZXJNb2RlLCB1bnNpZ25lZCBpbW11dGFibGVBcnJheVNpemUpCisgICAgU3R5bGVQcm9wZXJ0
aWVzKENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgdW5zaWduZWQgaW1tdXRhYmxlQXJyYXlT
aXplKQogICAgICAgICA6IG1fY3NzUGFyc2VyTW9kZShjc3NQYXJzZXJNb2RlKQogICAgICAgICAs
IG1faXNNdXRhYmxlKGZhbHNlKQogICAgICAgICAsIG1fYXJyYXlTaXplKGltbXV0YWJsZUFycmF5
U2l6ZSkKQEAgLTE1MywxMCArMTUzLDEwIEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBy
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjsKIH07CiAKLWNsYXNzIEltbXV0YWJsZVN0eWxl
UHJvcGVydHlTZXQgOiBwdWJsaWMgU3R5bGVQcm9wZXJ0eVNldCB7CitjbGFzcyBJbW11dGFibGVT
dHlsZVByb3BlcnRpZXMgOiBwdWJsaWMgU3R5bGVQcm9wZXJ0aWVzIHsKIHB1YmxpYzoKLSAgICB+
SW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCgpOwotICAgIHN0YXRpYyBQYXNzUmVmPEltbXV0YWJs
ZVN0eWxlUHJvcGVydHlTZXQ+IGNyZWF0ZShjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydGllcywg
dW5zaWduZWQgY291bnQsIENTU1BhcnNlck1vZGUpOworICAgIH5JbW11dGFibGVTdHlsZVByb3Bl
cnRpZXMoKTsKKyAgICBzdGF0aWMgUGFzc1JlZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IGNy
ZWF0ZShjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydGllcywgdW5zaWduZWQgY291bnQsIENTU1Bh
cnNlck1vZGUpOwogCiAgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fYXJyYXlTaXplOyB9CiAKQEAgLTE2NiwyNSArMTY2LDI1IEBAIHB1YmxpYzoKICAgICB2b2lk
KiBtX3N0b3JhZ2U7CiAKIHByaXZhdGU6Ci0gICAgSW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNldChj
b25zdCBDU1NQcm9wZXJ0eSosIHVuc2lnbmVkIGNvdW50LCBDU1NQYXJzZXJNb2RlKTsKKyAgICBJ
bW11dGFibGVTdHlsZVByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHkqLCB1bnNpZ25lZCBjb3Vu
dCwgQ1NTUGFyc2VyTW9kZSk7CiB9OwogCi1pbmxpbmUgY29uc3QgQ1NTVmFsdWUqKiBJbW11dGFi
bGVTdHlsZVByb3BlcnR5U2V0Ojp2YWx1ZUFycmF5KCkgY29uc3QKK2lubGluZSBjb25zdCBDU1NW
YWx1ZSoqIEltbXV0YWJsZVN0eWxlUHJvcGVydGllczo6dmFsdWVBcnJheSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ1NTVmFsdWUqKj4oY29uc3RfY2FzdDxj
b25zdCB2b2lkKio+KCgmKHRoaXMtPm1fc3RvcmFnZSkpKSk7CiB9CiAKLWlubGluZSBjb25zdCBT
dHlsZVByb3BlcnR5TWV0YWRhdGEqIEltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6Om1ldGFkYXRh
QXJyYXkoKSBjb25zdAoraW5saW5lIGNvbnN0IFN0eWxlUHJvcGVydHlNZXRhZGF0YSogSW1tdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzOjptZXRhZGF0YUFycmF5KCkgY29uc3QKIHsKICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgU3R5bGVQcm9wZXJ0eU1ldGFkYXRhKj4oJnJlaW50
ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IGNoYXIqPigmKHRoaXMtPm1fc3RvcmFnZSkpW21fYXJyYXlT
aXplICogc2l6ZW9mKENTU1ZhbHVlKildKTsKIH0KIAotY2xhc3MgTXV0YWJsZVN0eWxlUHJvcGVy
dHlTZXQgOiBwdWJsaWMgU3R5bGVQcm9wZXJ0eVNldCB7CitjbGFzcyBNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzIDogcHVibGljIFN0eWxlUHJvcGVydGllcyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWY8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IGNyZWF0ZShDU1NQYXJzZXJNb2RlID0gQ1NT
UXVpcmtzTW9kZSk7Ci0gICAgc3RhdGljIFBhc3NSZWY8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+
IGNyZWF0ZShjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydGllcywgdW5zaWduZWQgY291bnQpOwor
ICAgIHN0YXRpYyBQYXNzUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGNyZWF0ZShDU1NQYXJz
ZXJNb2RlID0gQ1NTUXVpcmtzTW9kZSk7CisgICAgc3RhdGljIFBhc3NSZWY8TXV0YWJsZVN0eWxl
UHJvcGVydGllcz4gY3JlYXRlKGNvbnN0IENTU1Byb3BlcnR5KiBwcm9wZXJ0aWVzLCB1bnNpZ25l
ZCBjb3VudCk7CiAKLSAgICB+TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQoKTsKKyAgICB+TXV0YWJs
ZVN0eWxlUHJvcGVydGllcygpOwogCiAgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvcGVydHlWZWN0b3Iuc2l6ZSgpOyB9CiAKQEAgLTIxMCwxMCArMjEwLDEw
IEBAIHB1YmxpYzoKICAgICBib29sIHJlbW92ZVByb3BlcnRpZXNJblNldChjb25zdCBDU1NQcm9w
ZXJ0eUlEKiBzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICAvLyBGSVhNRTogVGhlc2UgdHdv
IGNhbiBiZSBtb3ZlZCB0byBFZGl0aW5nU3R5bGUuY3BwCi0gICAgdm9pZCByZW1vdmVFcXVpdmFs
ZW50UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0Kik7CisgICAgdm9pZCByZW1vdmVF
cXVpdmFsZW50UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnRpZXMqKTsKICAgICB2b2lkIHJl
bW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKGNvbnN0IENvbXB1dGVkU3R5bGVFeHRyYWN0b3IqKTsK
IAotICAgIHZvaWQgbWVyZ2VBbmRPdmVycmlkZU9uQ29uZmxpY3QoY29uc3QgU3R5bGVQcm9wZXJ0
eVNldCYpOworICAgIHZvaWQgbWVyZ2VBbmRPdmVycmlkZU9uQ29uZmxpY3QoY29uc3QgU3R5bGVQ
cm9wZXJ0aWVzJik7CiAKICAgICB2b2lkIGNsZWFyKCk7CiAgICAgdm9pZCBwYXJzZURlY2xhcmF0
aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlvbiwgU3R5bGVTaGVldENvbnRlbnRzKiBj
b250ZXh0U3R5bGVTaGVldCk7CkBAIC0yMjQsNTQgKzIyNCw1NCBAQCBwdWJsaWM6CiAgICAgVmVj
dG9yPENTU1Byb3BlcnR5LCA0PiBtX3Byb3BlcnR5VmVjdG9yOwogCiBwcml2YXRlOgotICAgIGV4
cGxpY2l0IE11dGFibGVTdHlsZVByb3BlcnR5U2V0KENTU1BhcnNlck1vZGUpOwotICAgIGV4cGxp
Y2l0IE11dGFibGVTdHlsZVByb3BlcnR5U2V0KGNvbnN0IFN0eWxlUHJvcGVydHlTZXQmKTsKLSAg
ICBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldChjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydGllcywg
dW5zaWduZWQgY291bnQpOworICAgIGV4cGxpY2l0IE11dGFibGVTdHlsZVByb3BlcnRpZXMoQ1NT
UGFyc2VyTW9kZSk7CisgICAgZXhwbGljaXQgTXV0YWJsZVN0eWxlUHJvcGVydGllcyhjb25zdCBT
dHlsZVByb3BlcnRpZXMmKTsKKyAgICBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKGNvbnN0IENTU1By
b3BlcnR5KiBwcm9wZXJ0aWVzLCB1bnNpZ25lZCBjb3VudCk7CiAKICAgICBib29sIHJlbW92ZVNo
b3J0aGFuZFByb3BlcnR5KENTU1Byb3BlcnR5SUQpOwogICAgIENTU1Byb3BlcnR5KiBmaW5kQ1NT
UHJvcGVydHlXaXRoSUQoQ1NTUHJvcGVydHlJRCk7CiAgICAgT3duUHRyPFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbj4gbV9jc3NvbVdyYXBwZXI7CiAKLSAgICBmcmllbmQgY2xhc3MgU3R5
bGVQcm9wZXJ0eVNldDsKKyAgICBmcmllbmQgY2xhc3MgU3R5bGVQcm9wZXJ0aWVzOwogfTsKIAot
aW5saW5lIGNvbnN0IFN0eWxlUHJvcGVydHlNZXRhZGF0YSYgU3R5bGVQcm9wZXJ0eVNldDo6UHJv
cGVydHlSZWZlcmVuY2U6OnByb3BlcnR5TWV0YWRhdGEoKSBjb25zdAoraW5saW5lIGNvbnN0IFN0
eWxlUHJvcGVydHlNZXRhZGF0YSYgU3R5bGVQcm9wZXJ0aWVzOjpQcm9wZXJ0eVJlZmVyZW5jZTo6
cHJvcGVydHlNZXRhZGF0YSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fcHJvcGVydHlTZXQuaXNNdXRh
YmxlKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBNdXRhYmxlU3R5bGVQcm9w
ZXJ0eVNldCY+KG1fcHJvcGVydHlTZXQpLm1fcHJvcGVydHlWZWN0b3IuYXQobV9pbmRleCkubWV0
YWRhdGEoKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSW1tdXRhYmxlU3R5bGVQcm9w
ZXJ0eVNldCY+KG1fcHJvcGVydHlTZXQpLm1ldGFkYXRhQXJyYXkoKVttX2luZGV4XTsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IE11dGFibGVTdHlsZVByb3BlcnRpZXMmPihtX3By
b3BlcnR5U2V0KS5tX3Byb3BlcnR5VmVjdG9yLmF0KG1faW5kZXgpLm1ldGFkYXRhKCk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEltbXV0YWJsZVN0eWxlUHJvcGVydGllcyY+KG1fcHJv
cGVydHlTZXQpLm1ldGFkYXRhQXJyYXkoKVttX2luZGV4XTsKIH0KIAotaW5saW5lIGNvbnN0IENT
U1ZhbHVlKiBTdHlsZVByb3BlcnR5U2V0OjpQcm9wZXJ0eVJlZmVyZW5jZTo6cHJvcGVydHlWYWx1
ZSgpIGNvbnN0CitpbmxpbmUgY29uc3QgQ1NTVmFsdWUqIFN0eWxlUHJvcGVydGllczo6UHJvcGVy
dHlSZWZlcmVuY2U6OnByb3BlcnR5VmFsdWUoKSBjb25zdAogewogICAgIGlmIChtX3Byb3BlcnR5
U2V0LmlzTXV0YWJsZSgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTXV0YWJs
ZVN0eWxlUHJvcGVydHlTZXQmPihtX3Byb3BlcnR5U2V0KS5tX3Byb3BlcnR5VmVjdG9yLmF0KG1f
aW5kZXgpLnZhbHVlKCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEltbXV0YWJsZVN0
eWxlUHJvcGVydHlTZXQmPihtX3Byb3BlcnR5U2V0KS52YWx1ZUFycmF5KClbbV9pbmRleF07Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJj4o
bV9wcm9wZXJ0eVNldCkubV9wcm9wZXJ0eVZlY3Rvci5hdChtX2luZGV4KS52YWx1ZSgpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBJbW11dGFibGVTdHlsZVByb3BlcnRpZXMmPihtX3By
b3BlcnR5U2V0KS52YWx1ZUFycmF5KClbbV9pbmRleF07CiB9CiAKLWlubGluZSB1bnNpZ25lZCBT
dHlsZVByb3BlcnR5U2V0Ojpwcm9wZXJ0eUNvdW50KCkgY29uc3QKK2lubGluZSB1bnNpZ25lZCBT
dHlsZVByb3BlcnRpZXM6OnByb3BlcnR5Q291bnQoKSBjb25zdAogewogICAgIGlmIChtX2lzTXV0
YWJsZSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IE11dGFibGVTdHlsZVByb3Bl
cnR5U2V0Kj4odGhpcyktPm1fcHJvcGVydHlWZWN0b3Iuc2l6ZSgpOworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgTXV0YWJsZVN0eWxlUHJvcGVydGllcyo+KHRoaXMpLT5tX3Byb3Bl
cnR5VmVjdG9yLnNpemUoKTsKICAgICByZXR1cm4gbV9hcnJheVNpemU7CiB9CiAKLWlubGluZSBi
b29sIFN0eWxlUHJvcGVydHlTZXQ6OmlzRW1wdHkoKSBjb25zdAoraW5saW5lIGJvb2wgU3R5bGVQ
cm9wZXJ0aWVzOjppc0VtcHR5KCkgY29uc3QKIHsKICAgICByZXR1cm4gIXByb3BlcnR5Q291bnQo
KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6ZGVyZWYoKQoraW5saW5lIHZv
aWQgU3R5bGVQcm9wZXJ0aWVzOjpkZXJlZigpCiB7CiAgICAgaWYgKCFkZXJlZkJhc2UoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1faXNNdXRhYmxlKQotICAgICAgICBkZWxldGUgc3Rh
dGljX2Nhc3Q8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQqPih0aGlzKTsKKyAgICAgICAgZGVsZXRl
IHN0YXRpY19jYXN0PE11dGFibGVTdHlsZVByb3BlcnRpZXMqPih0aGlzKTsKICAgICBlbHNlCi0g
ICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxJbW11dGFibGVTdHlsZVByb3BlcnR5U2V0Kj4odGhp
cyk7CisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxJbW11dGFibGVTdHlsZVByb3BlcnRpZXMq
Pih0aGlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gU3R5bGVQ
cm9wZXJ0eVNldF9oCisjZW5kaWYgLy8gU3R5bGVQcm9wZXJ0aWVzX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAJKHJldmlzaW9uIDE1OTg0MikKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwx
MjczICswLDAgQEAKLS8qCi0gKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTAsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0
eVNldC5oIgotCi0jaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCi0jaW5j
bHVkZSAiQ1NTUGFyc2VyLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1
ZGUgIkNTU1ZhbHVlTGlzdC5oIgotI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgotI2luY2x1ZGUg
IkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmgi
Ci0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIgotI2luY2x1ZGUgIlN0eWxlU2hl
ZXRDb250ZW50cy5oIgotI2luY2x1ZGUgPHd0Zi9CaXRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlIDxzdGRpby5o
PgotI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIHNpemVfdCBzaXpl
Rm9ySW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNldFdpdGhQcm9wZXJ0eUNvdW50KHVuc2lnbmVkIGNv
dW50KQotewotICAgIHJldHVybiBzaXplb2YoSW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCkgLSBz
aXplb2Yodm9pZCopICsgc2l6ZW9mKENTU1ZhbHVlKikgKiBjb3VudCArIHNpemVvZihTdHlsZVBy
b3BlcnR5TWV0YWRhdGEpICogY291bnQ7Ci19Ci0KLXN0YXRpYyBib29sIGlzSW5pdGlhbE9ySW5o
ZXJpdChjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCBpbml0aWFsLCAoImluaXRpYWwiKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJp
bmcsIGluaGVyaXQsICgiaW5oZXJpdCIpKTsKLSAgICByZXR1cm4gdmFsdWUubGVuZ3RoKCkgPT0g
NyAmJiAodmFsdWUgPT0gaW5pdGlhbCB8fCB2YWx1ZSA9PSBpbmhlcml0KTsKLX0KLQotUGFzc1Jl
ZjxJbW11dGFibGVTdHlsZVByb3BlcnR5U2V0PiBJbW11dGFibGVTdHlsZVByb3BlcnR5U2V0Ojpj
cmVhdGUoY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnRpZXMsIHVuc2lnbmVkIGNvdW50LCBDU1NQ
YXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCi17Ci0gICAgdm9pZCogc2xvdCA9IFdURjo6ZmFzdE1h
bGxvYyhzaXplRm9ySW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNldFdpdGhQcm9wZXJ0eUNvdW50KGNv
dW50KSk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgKE5vdE51bGwsIHNsb3QpIEltbXV0YWJs
ZVN0eWxlUHJvcGVydHlTZXQocHJvcGVydGllcywgY291bnQsIGNzc1BhcnNlck1vZGUpKTsKLX0K
LQotUGFzc1JlZjxJbW11dGFibGVTdHlsZVByb3BlcnR5U2V0PiBTdHlsZVByb3BlcnR5U2V0Ojpp
bW11dGFibGVDb3B5SWZOZWVkZWQoKSBjb25zdAotewotICAgIGlmICghaXNNdXRhYmxlKCkpCi0g
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbW11dGFibGVTdHlsZVByb3BlcnR5U2V0Jj4oY29u
c3RfY2FzdDxTdHlsZVByb3BlcnR5U2V0Jj4oKnRoaXMpKTsKLSAgICBjb25zdCBNdXRhYmxlU3R5
bGVQcm9wZXJ0eVNldCYgbXV0YWJsZVRoaXMgPSBzdGF0aWNfY2FzdDxjb25zdCBNdXRhYmxlU3R5
bGVQcm9wZXJ0eVNldCY+KCp0aGlzKTsKLSAgICByZXR1cm4gSW1tdXRhYmxlU3R5bGVQcm9wZXJ0
eVNldDo6Y3JlYXRlKG11dGFibGVUaGlzLm1fcHJvcGVydHlWZWN0b3IuZGF0YSgpLCBtdXRhYmxl
VGhpcy5tX3Byb3BlcnR5VmVjdG9yLnNpemUoKSwgY3NzUGFyc2VyTW9kZSgpKTsKLX0KLQotTXV0
YWJsZVN0eWxlUHJvcGVydHlTZXQ6Ok11dGFibGVTdHlsZVByb3BlcnR5U2V0KENTU1BhcnNlck1v
ZGUgY3NzUGFyc2VyTW9kZSkKLSAgICA6IFN0eWxlUHJvcGVydHlTZXQoY3NzUGFyc2VyTW9kZSkK
LXsKLX0KLQotTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6Ok11dGFibGVTdHlsZVByb3BlcnR5U2V0
KGNvbnN0IENTU1Byb3BlcnR5KiBwcm9wZXJ0aWVzLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBT
dHlsZVByb3BlcnR5U2V0KENTU1N0cmljdE1vZGUpCi17Ci0gICAgbV9wcm9wZXJ0eVZlY3Rvci5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKQotICAgICAgICBtX3Byb3BlcnR5VmVjdG9yLnVuY2hlY2tlZEFwcGVu
ZChwcm9wZXJ0aWVzW2ldKTsKLX0KLQotTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6On5NdXRhYmxl
U3R5bGVQcm9wZXJ0eVNldCgpCi17Ci19Ci0KLUltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6Oklt
bXV0YWJsZVN0eWxlUHJvcGVydHlTZXQoY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnRpZXMsIHVu
c2lnbmVkIGxlbmd0aCwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQotICAgIDogU3R5bGVQ
cm9wZXJ0eVNldChjc3NQYXJzZXJNb2RlLCBsZW5ndGgpCi17Ci0gICAgU3R5bGVQcm9wZXJ0eU1l
dGFkYXRhKiBtZXRhZGF0YUFycmF5ID0gY29uc3RfY2FzdDxTdHlsZVByb3BlcnR5TWV0YWRhdGEq
Pih0aGlzLT5tZXRhZGF0YUFycmF5KCkpOwotICAgIENTU1ZhbHVlKiogdmFsdWVBcnJheSA9IGNv
bnN0X2Nhc3Q8Q1NTVmFsdWUqKj4odGhpcy0+dmFsdWVBcnJheSgpKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgbWV0YWRhdGFBcnJheVtpXSA9
IHByb3BlcnRpZXNbaV0ubWV0YWRhdGEoKTsKLSAgICAgICAgdmFsdWVBcnJheVtpXSA9IHByb3Bl
cnRpZXNbaV0udmFsdWUoKTsKLSAgICAgICAgdmFsdWVBcnJheVtpXS0+cmVmKCk7Ci0gICAgfQot
fQotCi1JbW11dGFibGVTdHlsZVByb3BlcnR5U2V0Ojp+SW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNl
dCgpCi17Ci0gICAgQ1NTVmFsdWUqKiB2YWx1ZUFycmF5ID0gY29uc3RfY2FzdDxDU1NWYWx1ZSoq
Pih0aGlzLT52YWx1ZUFycmF5KCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fy
cmF5U2l6ZTsgKytpKQotICAgICAgICB2YWx1ZUFycmF5W2ldLT5kZXJlZigpOwotfQotCi1NdXRh
YmxlU3R5bGVQcm9wZXJ0eVNldDo6TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQoY29uc3QgU3R5bGVQ
cm9wZXJ0eVNldCYgb3RoZXIpCi0gICAgOiBTdHlsZVByb3BlcnR5U2V0KG90aGVyLmNzc1BhcnNl
ck1vZGUoKSkKLXsKLSAgICBpZiAob3RoZXIuaXNNdXRhYmxlKCkpCi0gICAgICAgIG1fcHJvcGVy
dHlWZWN0b3IgPSBzdGF0aWNfY2FzdDxjb25zdCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCY+KG90
aGVyKS5tX3Byb3BlcnR5VmVjdG9yOwotICAgIGVsc2UgewotICAgICAgICBtX3Byb3BlcnR5VmVj
dG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkob3RoZXIucHJvcGVydHlDb3VudCgpKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG90aGVyLnByb3BlcnR5Q291bnQoKTsgKytpKQot
ICAgICAgICAgICAgbV9wcm9wZXJ0eVZlY3Rvci51bmNoZWNrZWRBcHBlbmQob3RoZXIucHJvcGVy
dHlBdChpKS50b0NTU1Byb3BlcnR5KCkpOwotICAgIH0KLX0KLQotU3RyaW5nIFN0eWxlUHJvcGVy
dHlTZXQ6OmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKSBjb25zdAot
ewotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3Bl
cnR5SUQpOwotICAgIGlmICh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLT5jc3NUZXh0KCk7
Ci0KLSAgICAvLyBTaG9ydGhhbmQgYW5kIDQtdmFsdWVzIHByb3BlcnRpZXMKLSAgICBzd2l0Y2gg
KHByb3BlcnR5SUQpIHsKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyU3BhY2luZzoKLSAgICAg
ICAgcmV0dXJuIGJvcmRlclNwYWNpbmdWYWx1ZShib3JkZXJTcGFjaW5nU2hvcnRoYW5kKCkpOwot
ICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb246Ci0gICAgICAgIHJldHVybiBn
ZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUoYmFja2dyb3VuZFBvc2l0aW9uU2hvcnRoYW5kKCkpOwot
ICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0OgotICAgICAgICByZXR1cm4gZ2V0
TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGJhY2tncm91bmRSZXBlYXRTaG9ydGhhbmQoKSk7Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmQ6Ci0gICAgICAgIHJldHVybiBnZXRMYXllcmVkU2hv
cnRoYW5kVmFsdWUoYmFja2dyb3VuZFNob3J0aGFuZCgpKTsKLSAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyOgotICAgICAgICByZXR1cm4gYm9yZGVyUHJvcGVydHlWYWx1ZShPbWl0VW5jb21tb25W
YWx1ZXMpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3A6Ci0gICAgICAgIHJldHVybiBn
ZXRTaG9ydGhhbmRWYWx1ZShib3JkZXJUb3BTaG9ydGhhbmQoKSk7Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlclJpZ2h0OgotICAgICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUoYm9yZGVy
UmlnaHRTaG9ydGhhbmQoKSk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbToKLSAg
ICAgICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKGJvcmRlckJvdHRvbVNob3J0aGFuZCgpKTsK
LSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdDoKLSAgICAgICAgcmV0dXJuIGdldFNob3J0
aGFuZFZhbHVlKGJvcmRlckxlZnRTaG9ydGhhbmQoKSk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU91
dGxpbmU6Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1ZShvdXRsaW5lU2hvcnRoYW5k
KCkpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xvcjoKLSAgICAgICAgcmV0dXJuIGdl
dDRWYWx1ZXMoYm9yZGVyQ29sb3JTaG9ydGhhbmQoKSk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJv
cmRlcldpZHRoOgotICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyhib3JkZXJXaWR0aFNob3J0aGFu
ZCgpKTsKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyU3R5bGU6Ci0gICAgICAgIHJldHVybiBn
ZXQ0VmFsdWVzKGJvcmRlclN0eWxlU2hvcnRoYW5kKCkpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRDb2x1bW5SdWxlOgotICAgICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUod2Via2l0
Q29sdW1uUnVsZVNob3J0aGFuZCgpKTsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1u
czoKLSAgICAgICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHdlYmtpdENvbHVtbnNTaG9ydGhh
bmQoKSk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXg6Ci0gICAgICAgIHJldHVybiBn
ZXRTaG9ydGhhbmRWYWx1ZSh3ZWJraXRGbGV4U2hvcnRoYW5kKCkpOwotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRGbGV4RmxvdzoKLSAgICAgICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHdl
YmtpdEZsZXhGbG93U2hvcnRoYW5kKCkpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlk
QXJlYToKLSAgICAgICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHdlYmtpdEdyaWRBcmVhU2hv
cnRoYW5kKCkpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkQ29sdW1uOgotICAgICAg
ICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUod2Via2l0R3JpZENvbHVtblNob3J0aGFuZCgpKTsK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZFJvdzoKLSAgICAgICAgcmV0dXJuIGdldFNo
b3J0aGFuZFZhbHVlKHdlYmtpdEdyaWRSb3dTaG9ydGhhbmQoKSk7Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUZvbnQ6Ci0gICAgICAgIHJldHVybiBmb250VmFsdWUoKTsKLSAgICBjYXNlIENTU1Byb3Bl
cnR5TWFyZ2luOgotICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyhtYXJnaW5TaG9ydGhhbmQoKSk7
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkNvbGxhcHNlOgotICAgICAgICByZXR1
cm4gZ2V0U2hvcnRoYW5kVmFsdWUod2Via2l0TWFyZ2luQ29sbGFwc2VTaG9ydGhhbmQoKSk7Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93OgotICAgICAgICByZXR1cm4gZ2V0Q29tbW9uVmFs
dWUob3ZlcmZsb3dTaG9ydGhhbmQoKSk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmc6Ci0g
ICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKHBhZGRpbmdTaG9ydGhhbmQoKSk7Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVRyYW5zaXRpb246Ci0gICAgICAgIHJldHVybiBnZXRMYXllcmVkU2hvcnRoYW5k
VmFsdWUodHJhbnNpdGlvblNob3J0aGFuZCgpKTsKLSAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0
eWxlOgotICAgICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUobGlzdFN0eWxlU2hvcnRoYW5k
KCkpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlOgotICAgICAgICByZXR1cm4g
Z2V0U2hvcnRoYW5kVmFsdWUod2Via2l0TWFycXVlZVNob3J0aGFuZCgpKTsKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uOgotICAgICAgICByZXR1cm4gZ2V0TGF5ZXJlZFNo
b3J0aGFuZFZhbHVlKHdlYmtpdE1hc2tQb3NpdGlvblNob3J0aGFuZCgpKTsKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdDoKLSAgICAgICAgcmV0dXJuIGdldExheWVyZWRTaG9y
dGhhbmRWYWx1ZSh3ZWJraXRNYXNrUmVwZWF0U2hvcnRoYW5kKCkpOwotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXNrOgotICAgICAgICByZXR1cm4gZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVl
KHdlYmtpdE1hc2tTaG9ydGhhbmQoKSk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRF
bXBoYXNpczoKLSAgICAgICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHdlYmtpdFRleHRFbXBo
YXNpc1Nob3J0aGFuZCgpKTsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZToK
LSAgICAgICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHdlYmtpdFRleHRTdHJva2VTaG9ydGhh
bmQoKSk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpbjoKLSAgICAg
ICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHdlYmtpdFRyYW5zZm9ybU9yaWdpblNob3J0aGFu
ZCgpKTsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbjoKLSAgICAgICAgcmV0
dXJuIGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZSh3ZWJraXRUcmFuc2l0aW9uU2hvcnRoYW5kKCkp
OwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb246Ci0gICAgICAgIHJldHVybiBn
ZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUod2Via2l0QW5pbWF0aW9uU2hvcnRoYW5kKCkpOwotI2lm
IEVOQUJMRShTVkcpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmtlcjogewotICAgICAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eU1hcmtl
clN0YXJ0KTsKLSAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLT5j
c3NUZXh0KCk7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICB9Ci0jZW5kaWYKLSAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyUmFkaXVzOgotICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyhi
b3JkZXJSYWRpdXNTaG9ydGhhbmQoKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0gICAgfQotfQotCi1TdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Ym9yZGVyU3Bh
Y2luZ1ZhbHVlKGNvbnN0IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmIHNob3J0aGFuZCkgY29uc3QK
LXsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IGhvcml6b250YWxWYWx1ZSA9IGdldFByb3BlcnR5Q1NT
VmFsdWUoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVswXSk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2
ZXJ0aWNhbFZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShzaG9ydGhhbmQucHJvcGVydGllcygp
WzFdKTsKLQotICAgIC8vIFdoaWxlIHN0YW5kYXJkIGJvcmRlci1zcGFjaW5nIHByb3BlcnR5IGRv
ZXMgbm90IGFsbG93IHNwZWNpZnlpbmcgYm9yZGVyLXNwYWNpbmctdmVydGljYWwgd2l0aG91dAot
ICAgIC8vIHNwZWNpZnlpbmcgYm9yZGVyLXNwYWNpbmctaG9yaXpvbnRhbCA8aHR0cDovL3d3dy53
My5vcmcvVFIvQ1NTMjEvdGFibGVzLmh0bWwjc2VwYXJhdGVkLWJvcmRlcnM+LAotICAgIC8vIC13
ZWJraXQtYm9yZGVyLXNwYWNpbmctdmVydGljYWwgY2FuIGJlIHNldCB3aXRob3V0IC13ZWJraXQt
Ym9yZGVyLXNwYWNpbmctaG9yaXpvbnRhbC4KLSAgICBpZiAoIWhvcml6b250YWxWYWx1ZSB8fCAh
dmVydGljYWxWYWx1ZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgU3RyaW5nIGhv
cml6b250YWxWYWx1ZUNTU1RleHQgPSBob3Jpem9udGFsVmFsdWUtPmNzc1RleHQoKTsKLSAgICBT
dHJpbmcgdmVydGljYWxWYWx1ZUNTU1RleHQgPSB2ZXJ0aWNhbFZhbHVlLT5jc3NUZXh0KCk7Ci0g
ICAgaWYgKGhvcml6b250YWxWYWx1ZUNTU1RleHQgPT0gdmVydGljYWxWYWx1ZUNTU1RleHQpCi0g
ICAgICAgIHJldHVybiBob3Jpem9udGFsVmFsdWVDU1NUZXh0OwotICAgIHJldHVybiBob3Jpem9u
dGFsVmFsdWVDU1NUZXh0ICsgJyAnICsgdmVydGljYWxWYWx1ZUNTU1RleHQ7Ci19Ci0KLXZvaWQg
U3R5bGVQcm9wZXJ0eVNldDo6YXBwZW5kRm9udExvbmdoYW5kVmFsdWVJZkV4cGxpY2l0KENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBTdHJpbmcmIGNvbW1v
blZhbHVlKSBjb25zdAotewotICAgIGludCBmb3VuZFByb3BlcnR5SW5kZXggPSBmaW5kUHJvcGVy
dHlJbmRleChwcm9wZXJ0eUlEKTsKLSAgICBpZiAoZm91bmRQcm9wZXJ0eUluZGV4ID09IC0xKQot
ICAgICAgICByZXR1cm47IC8vIEFsbCBsb25naGFuZHMgbXVzdCBoYXZlIGF0IGxlYXN0IGltcGxp
Y2l0IHZhbHVlcyBpZiAiZm9udCIgaXMgc3BlY2lmaWVkLgotCi0gICAgaWYgKHByb3BlcnR5QXQo
Zm91bmRQcm9wZXJ0eUluZGV4KS5pc0ltcGxpY2l0KCkpIHsKLSAgICAgICAgY29tbW9uVmFsdWUg
PSBTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNoYXIgcHJlZml4ID0g
J1wwJzsKLSAgICBzd2l0Y2ggKHByb3BlcnR5SUQpIHsKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9u
dFN0eWxlOgotICAgICAgICBicmVhazsgLy8gTm8gcHJlZml4LgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlGb250RmFtaWx5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5Rm9udFdlaWdodDoKLSAgICAgICAgcHJlZml4ID0gJyAnOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5TGluZUhlaWdodDoKLSAgICAgICAgcHJlZml4ID0g
Jy8nOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICB9Ci0KLSAgICBpZiAocHJlZml4ICYmICFyZXN1bHQuaXNFbXB0eSgpKQot
ICAgICAgICByZXN1bHQuYXBwZW5kKHByZWZpeCk7Ci0gICAgU3RyaW5nIHZhbHVlID0gcHJvcGVy
dHlBdChmb3VuZFByb3BlcnR5SW5kZXgpLnZhbHVlKCktPmNzc1RleHQoKTsKLSAgICByZXN1bHQu
YXBwZW5kKHZhbHVlKTsKLSAgICBpZiAoIWNvbW1vblZhbHVlLmlzTnVsbCgpICYmIGNvbW1vblZh
bHVlICE9IHZhbHVlKQotICAgICAgICBjb21tb25WYWx1ZSA9IFN0cmluZygpOwotfQotCi1TdHJp
bmcgU3R5bGVQcm9wZXJ0eVNldDo6Zm9udFZhbHVlKCkgY29uc3QKLXsKLSAgICBpbnQgZm9udFNp
emVQcm9wZXJ0eUluZGV4ID0gZmluZFByb3BlcnR5SW5kZXgoQ1NTUHJvcGVydHlGb250U2l6ZSk7
Ci0gICAgaW50IGZvbnRGYW1pbHlQcm9wZXJ0eUluZGV4ID0gZmluZFByb3BlcnR5SW5kZXgoQ1NT
UHJvcGVydHlGb250RmFtaWx5KTsKLSAgICBpZiAoZm9udFNpemVQcm9wZXJ0eUluZGV4ID09IC0x
IHx8IGZvbnRGYW1pbHlQcm9wZXJ0eUluZGV4ID09IC0xKQotICAgICAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKLQotICAgIFByb3BlcnR5UmVmZXJlbmNlIGZvbnRTaXplUHJvcGVydHkgPSBwcm9w
ZXJ0eUF0KGZvbnRTaXplUHJvcGVydHlJbmRleCk7Ci0gICAgUHJvcGVydHlSZWZlcmVuY2UgZm9u
dEZhbWlseVByb3BlcnR5ID0gcHJvcGVydHlBdChmb250RmFtaWx5UHJvcGVydHlJbmRleCk7Ci0g
ICAgaWYgKGZvbnRTaXplUHJvcGVydHkuaXNJbXBsaWNpdCgpIHx8IGZvbnRGYW1pbHlQcm9wZXJ0
eS5pc0ltcGxpY2l0KCkpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotCi0gICAgU3Ry
aW5nIGNvbW1vblZhbHVlID0gZm9udFNpemVQcm9wZXJ0eS52YWx1ZSgpLT5jc3NUZXh0KCk7Ci0g
ICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0gICAgYXBwZW5kRm9udExvbmdoYW5kVmFsdWVJZkV4
cGxpY2l0KENTU1Byb3BlcnR5Rm9udFN0eWxlLCByZXN1bHQsIGNvbW1vblZhbHVlKTsKLSAgICBh
cHBlbmRGb250TG9uZ2hhbmRWYWx1ZUlmRXhwbGljaXQoQ1NTUHJvcGVydHlGb250VmFyaWFudCwg
cmVzdWx0LCBjb21tb25WYWx1ZSk7Ci0gICAgYXBwZW5kRm9udExvbmdoYW5kVmFsdWVJZkV4cGxp
Y2l0KENTU1Byb3BlcnR5Rm9udFdlaWdodCwgcmVzdWx0LCBjb21tb25WYWx1ZSk7Ci0gICAgaWYg
KCFyZXN1bHQuaXNFbXB0eSgpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7Ci0gICAgcmVz
dWx0LmFwcGVuZChmb250U2l6ZVByb3BlcnR5LnZhbHVlKCktPmNzc1RleHQoKSk7Ci0gICAgYXBw
ZW5kRm9udExvbmdoYW5kVmFsdWVJZkV4cGxpY2l0KENTU1Byb3BlcnR5TGluZUhlaWdodCwgcmVz
dWx0LCBjb21tb25WYWx1ZSk7Ci0gICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgpKQotICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgJyk7Ci0gICAgcmVzdWx0LmFwcGVuZChmb250RmFtaWx5UHJvcGVydHku
dmFsdWUoKS0+Y3NzVGV4dCgpKTsKLSAgICBpZiAoaXNJbml0aWFsT3JJbmhlcml0KGNvbW1vblZh
bHVlKSkKLSAgICAgICAgcmV0dXJuIGNvbW1vblZhbHVlOwotICAgIHJldHVybiByZXN1bHQudG9T
dHJpbmcoKTsKLX0KLQotU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmdldDRWYWx1ZXMoY29uc3Qg
U3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYgc2hvcnRoYW5kKSBjb25zdAotewotICAgIC8vIEFzc3Vt
ZSB0aGUgcHJvcGVydGllcyBhcmUgaW4gdGhlIHVzdWFsIG9yZGVyIHRvcCwgcmlnaHQsIGJvdHRv
bSwgbGVmdC4KLSAgICBpbnQgdG9wVmFsdWVJbmRleCA9IGZpbmRQcm9wZXJ0eUluZGV4KHNob3J0
aGFuZC5wcm9wZXJ0aWVzKClbMF0pOwotICAgIGludCByaWdodFZhbHVlSW5kZXggPSBmaW5kUHJv
cGVydHlJbmRleChzaG9ydGhhbmQucHJvcGVydGllcygpWzFdKTsKLSAgICBpbnQgYm90dG9tVmFs
dWVJbmRleCA9IGZpbmRQcm9wZXJ0eUluZGV4KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbMl0pOwot
ICAgIGludCBsZWZ0VmFsdWVJbmRleCA9IGZpbmRQcm9wZXJ0eUluZGV4KHNob3J0aGFuZC5wcm9w
ZXJ0aWVzKClbM10pOwotCi0gICAgaWYgKHRvcFZhbHVlSW5kZXggPT0gLTEgfHwgcmlnaHRWYWx1
ZUluZGV4ID09IC0xIHx8IGJvdHRvbVZhbHVlSW5kZXggPT0gLTEgfHwgbGVmdFZhbHVlSW5kZXgg
PT0gLTEpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIFByb3BlcnR5UmVmZXJlbmNl
IHRvcCA9IHByb3BlcnR5QXQodG9wVmFsdWVJbmRleCk7Ci0gICAgUHJvcGVydHlSZWZlcmVuY2Ug
cmlnaHQgPSBwcm9wZXJ0eUF0KHJpZ2h0VmFsdWVJbmRleCk7Ci0gICAgUHJvcGVydHlSZWZlcmVu
Y2UgYm90dG9tID0gcHJvcGVydHlBdChib3R0b21WYWx1ZUluZGV4KTsKLSAgICBQcm9wZXJ0eVJl
ZmVyZW5jZSBsZWZ0ID0gcHJvcGVydHlBdChsZWZ0VmFsdWVJbmRleCk7Ci0KLSAgICAvLyBBbGwg
NCBwcm9wZXJ0aWVzIG11c3QgYmUgc3BlY2lmaWVkLgotICAgIGlmICghdG9wLnZhbHVlKCkgfHwg
IXJpZ2h0LnZhbHVlKCkgfHwgIWJvdHRvbS52YWx1ZSgpIHx8ICFsZWZ0LnZhbHVlKCkpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmICh0b3AuaXNJbmhlcml0ZWQoKSAmJiByaWdo
dC5pc0luaGVyaXRlZCgpICYmIGJvdHRvbS5pc0luaGVyaXRlZCgpICYmIGxlZnQuaXNJbmhlcml0
ZWQoKSkKLSAgICAgICAgcmV0dXJuIGdldFZhbHVlTmFtZShDU1NWYWx1ZUluaGVyaXQpOwotCi0g
ICAgaWYgKHRvcC52YWx1ZSgpLT5pc0luaXRpYWxWYWx1ZSgpIHx8IHJpZ2h0LnZhbHVlKCktPmlz
SW5pdGlhbFZhbHVlKCkgfHwgYm90dG9tLnZhbHVlKCktPmlzSW5pdGlhbFZhbHVlKCkgfHwgbGVm
dC52YWx1ZSgpLT5pc0luaXRpYWxWYWx1ZSgpKSB7Ci0gICAgICAgIGlmICh0b3AudmFsdWUoKS0+
aXNJbml0aWFsVmFsdWUoKSAmJiByaWdodC52YWx1ZSgpLT5pc0luaXRpYWxWYWx1ZSgpICYmIGJv
dHRvbS52YWx1ZSgpLT5pc0luaXRpYWxWYWx1ZSgpICYmIGxlZnQudmFsdWUoKS0+aXNJbml0aWFs
VmFsdWUoKSAmJiAhdG9wLmlzSW1wbGljaXQoKSkgewotICAgICAgICAgICAgLy8gQWxsIGNvbXBv
bmVudHMgYXJlICJpbml0aWFsIiBhbmQgInRvcCIgaXMgbm90IGltcGxpY2l0LgotICAgICAgICAg
ICAgcmV0dXJuIGdldFZhbHVlTmFtZShDU1NWYWx1ZUluaXRpYWwpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICB9Ci0gICAgaWYgKHRvcC5pc0ltcG9ydGFudCgpICE9
IHJpZ2h0LmlzSW1wb3J0YW50KCkgfHwgcmlnaHQuaXNJbXBvcnRhbnQoKSAhPSBib3R0b20uaXNJ
bXBvcnRhbnQoKSB8fCBib3R0b20uaXNJbXBvcnRhbnQoKSAhPSBsZWZ0LmlzSW1wb3J0YW50KCkp
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGJvb2wgc2hvd0xlZnQgPSAhcmlnaHQu
dmFsdWUoKS0+ZXF1YWxzKCpsZWZ0LnZhbHVlKCkpOwotICAgIGJvb2wgc2hvd0JvdHRvbSA9ICF0
b3AudmFsdWUoKS0+ZXF1YWxzKCpib3R0b20udmFsdWUoKSkgfHwgc2hvd0xlZnQ7Ci0gICAgYm9v
bCBzaG93UmlnaHQgPSAhdG9wLnZhbHVlKCktPmVxdWFscygqcmlnaHQudmFsdWUoKSkgfHwgc2hv
d0JvdHRvbTsKLQotICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotICAgIHJlc3VsdC5hcHBlbmQo
dG9wLnZhbHVlKCktPmNzc1RleHQoKSk7Ci0gICAgaWYgKHNob3dSaWdodCkgewotICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgJyk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQocmlnaHQudmFsdWUoKS0+
Y3NzVGV4dCgpKTsKLSAgICB9Ci0gICAgaWYgKHNob3dCb3R0b20pIHsKLSAgICAgICAgcmVzdWx0
LmFwcGVuZCgnICcpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGJvdHRvbS52YWx1ZSgpLT5jc3NU
ZXh0KCkpOwotICAgIH0KLSAgICBpZiAoc2hvd0xlZnQpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnICcpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGxlZnQudmFsdWUoKS0+Y3NzVGV4dCgpKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotfQotCi1TdHJpbmcgU3R5bGVQ
cm9wZXJ0eVNldDo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0IFN0eWxlUHJvcGVydHlT
aG9ydGhhbmQmIHNob3J0aGFuZCkgY29uc3QKLXsKLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsK
LQotICAgIGNvbnN0IHVuc2lnbmVkIHNpemUgPSBzaG9ydGhhbmQubGVuZ3RoKCk7Ci0gICAgLy8g
QmVnaW4gYnkgY29sbGVjdGluZyB0aGUgcHJvcGVydGllcyBpbnRvIGFuIGFycmF5LgotICAgIFZl
Y3RvcjwgUmVmUHRyPENTU1ZhbHVlPj4gdmFsdWVzKHNpemUpOwotICAgIHNpemVfdCBudW1MYXll
cnMgPSAwOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAg
ICAgICB2YWx1ZXNbaV0gPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHNob3J0aGFuZC5wcm9wZXJ0aWVz
KClbaV0pOwotICAgICAgICBpZiAodmFsdWVzW2ldKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWVz
W2ldLT5pc0Jhc2VWYWx1ZUxpc3QoKSkKLSAgICAgICAgICAgICAgICBudW1MYXllcnMgPSBzdGQ6
Om1heCh0b0NTU1ZhbHVlTGlzdCh2YWx1ZXNbaV0uZ2V0KCkpLT5sZW5ndGgoKSwgbnVtTGF5ZXJz
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBudW1MYXllcnMgPSBzdGQ6Om1h
eDxzaXplX3Q+KDFVLCBudW1MYXllcnMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgU3RyaW5n
IGNvbW1vblZhbHVlOwotICAgIGJvb2wgY29tbW9uVmFsdWVJbml0aWFsaXplZCA9IGZhbHNlOwot
Ci0gICAgLy8gTm93IHN0aXRjaCB0aGUgcHJvcGVydGllcyB0b2dldGhlci4gIEltcGxpY2l0IGlu
aXRpYWwgdmFsdWVzIGFyZSBmbGFnZ2VkIGFzIHN1Y2ggYW5kCi0gICAgLy8gY2FuIHNhZmVseSBi
ZSBvbWl0dGVkLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtTGF5ZXJzOyBpKyspIHsK
LSAgICAgICAgU3RyaW5nQnVpbGRlciBsYXllclJlc3VsdDsKLSAgICAgICAgYm9vbCB1c2VSZXBl
YXRYU2hvcnRoYW5kID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgdXNlUmVwZWF0WVNob3J0aGFuZCA9
IGZhbHNlOwotICAgICAgICBib29sIHVzZVNpbmdsZVdvcmRTaG9ydGhhbmQgPSBmYWxzZTsKLSAg
ICAgICAgYm9vbCBmb3VuZFBvc2l0aW9uWUNTU1Byb3BlcnR5ID0gZmFsc2U7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKLSAgICAgICAgICAgIFJlZlB0cjxD
U1NWYWx1ZT4gdmFsdWU7Ci0gICAgICAgICAgICBpZiAodmFsdWVzW2pdKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHZhbHVlc1tqXS0+aXNCYXNlVmFsdWVMaXN0KCkpCi0gICAgICAgICAgICAgICAg
ICAgIHZhbHVlID0gdG9DU1NWYWx1ZUxpc3QodmFsdWVzW2pdLmdldCgpKS0+aXRlbShpKTsKLSAg
ICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXNb
al07Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gQ29sb3Igb25seSBiZWxvbmdzIGluIHRoZSBs
YXN0IGxheWVyLgotICAgICAgICAgICAgICAgICAgICBpZiAoc2hvcnRoYW5kLnByb3BlcnRpZXMo
KVtqXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGkgIT0gbnVtTGF5ZXJzIC0gMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSAhPSAwKSAvLyBP
dGhlciBzaW5nbGV0b25zIG9ubHkgYmVsb25nIGluIHRoZSBmaXJzdCBsYXllci4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVwb3J0IGJhY2tncm91bmQtcmVwZWF0
IGFzIGl0IHdhcyB3cml0dGVuIGluIHRoZSBDU1MuIElmIHRoZSBwcm9wZXJ0eSBpcyBpbXBsaWNp
dCwKLSAgICAgICAgICAgIC8vIHRoZW4gaXQgd2FzIHdyaXR0ZW4gd2l0aCBvbmx5IG9uZSB2YWx1
ZS4gSGVyZSB3ZSBmaWd1cmUgb3V0IHdoaWNoIHZhbHVlIHRoYXQgd2FzIHNvIHdlIGNhbgotICAg
ICAgICAgICAgLy8gcmVwb3J0IGJhY2sgY29ycmVjdGx5LgotICAgICAgICAgICAgaWYgKChzaG9y
dGhhbmQucHJvcGVydGllcygpW2pdID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFggJiYg
aXNQcm9wZXJ0eUltcGxpY2l0KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbal0pKQotICAgICAgICAg
ICAgICAgIHx8IChzaG9ydGhhbmQucHJvcGVydGllcygpW2pdID09IENTU1Byb3BlcnR5V2Via2l0
TWFza1JlcGVhdFggJiYgaXNQcm9wZXJ0eUltcGxpY2l0KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClb
al0pKSkgewotCi0gICAgICAgICAgICAgICAgLy8gQlVHIDQ5MDU1OiBtYWtlIHN1cmUgdGhlIHZh
bHVlIHdhcyBub3QgcmVzZXQgaW4gdGhlIGxheWVyIGNoZWNrIGp1c3QgYWJvdmUuCi0gICAgICAg
ICAgICAgICAgaWYgKChqIDwgc2l6ZSAtIDEgJiYgc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtqICsg
MV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WSAmJiB2YWx1ZSkKLSAgICAgICAgICAg
ICAgICAgICAgfHwgKGogPCBzaXplIC0gMSAmJiBzaG9ydGhhbmQucHJvcGVydGllcygpW2ogKyAx
XSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRZICYmIHZhbHVlKSkgewotICAgICAgICAg
ICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHlWYWx1ZTsKLSAgICAgICAgICAgICAgICAgICAg
UmVmUHRyPENTU1ZhbHVlPiBuZXh0VmFsdWUgPSB2YWx1ZXNbaiArIDFdOwotICAgICAgICAgICAg
ICAgICAgICBpZiAobmV4dFZhbHVlLT5pc1ZhbHVlTGlzdCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgeVZhbHVlID0gdG9DU1NWYWx1ZUxpc3QobmV4dFZhbHVlLmdldCgpKS0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjayhpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICAgICAgeVZhbHVlID0gbmV4dFZhbHVlOwotCi0gICAgICAgICAgICAgICAgICAgIENT
U1ZhbHVlSUQgeElkID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS5nZXQoKSktPmdldFZhbHVl
SUQoKTsKLSAgICAgICAgICAgICAgICAgICAgQ1NTVmFsdWVJRCB5SWQgPSB0b0NTU1ByaW1pdGl2
ZVZhbHVlKHlWYWx1ZS5nZXQoKSktPmdldFZhbHVlSUQoKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHhJZCAhPSB5SWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4SWQgPT0gQ1NT
VmFsdWVSZXBlYXQgJiYgeUlkID09IENTU1ZhbHVlTm9SZXBlYXQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1c2VSZXBlYXRYU2hvcnRoYW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICArK2o7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHhJ
ZCA9PSBDU1NWYWx1ZU5vUmVwZWF0ICYmIHlJZCA9PSBDU1NWYWx1ZVJlcGVhdCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVzZVJlcGVhdFlTaG9ydGhhbmQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
dXNlU2luZ2xlV29yZFNob3J0aGFuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAr
K2o7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVRleHQ7Ci0gICAgICAgICAgICBpZiAodmFs
dWUgJiYgIXZhbHVlLT5pc0ltcGxpY2l0SW5pdGlhbFZhbHVlKCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIWxheWVyUmVzdWx0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgbGF5ZXJS
ZXN1bHQuYXBwZW5kKCcgJyk7Ci0gICAgICAgICAgICAgICAgaWYgKGZvdW5kUG9zaXRpb25ZQ1NT
UHJvcGVydHkKLSAgICAgICAgICAgICAgICAgICAgJiYgKHNob3J0aGFuZC5wcm9wZXJ0aWVzKClb
al0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6ZSB8fCBzaG9ydGhhbmQucHJvcGVydGllcygp
W2pdID09IENTU1Byb3BlcnR5V2Via2l0TWFza1NpemUpKQotICAgICAgICAgICAgICAgICAgICBs
YXllclJlc3VsdC5hcHBlbmRMaXRlcmFsKCIvICIpOwotICAgICAgICAgICAgICAgIGlmICghZm91
bmRQb3NpdGlvbllDU1NQcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICAmJiAoc2hvcnRoYW5k
LnByb3BlcnRpZXMoKVtqXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplIHx8IHNob3J0aGFu
ZC5wcm9wZXJ0aWVzKClbal0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZSkpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgaWYgKHVzZVJlcGVhdFhT
aG9ydGhhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgdXNlUmVwZWF0WFNob3J0aGFuZCA9IGZh
bHNlOwotICAgICAgICAgICAgICAgICAgICBsYXllclJlc3VsdC5hcHBlbmQoZ2V0VmFsdWVOYW1l
KENTU1ZhbHVlUmVwZWF0WCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlUmVwZWF0
WVNob3J0aGFuZCkgewotICAgICAgICAgICAgICAgICAgICB1c2VSZXBlYXRZU2hvcnRoYW5kID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGxheWVyUmVzdWx0LmFwcGVuZChnZXRWYWx1ZU5h
bWUoQ1NTVmFsdWVSZXBlYXRZKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHVzZVNpbmdsZVdvcmRTaG9ydGhhbmQpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB1c2VTaW5nbGVXb3JkU2hvcnRoYW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhbHVlVGV4dCA9IHZhbHVlLT5jc3NUZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGxh
eWVyUmVzdWx0LmFwcGVuZCh2YWx1ZVRleHQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmIChzaG9ydGhhbmQucHJvcGVydGllcygpW2pdID09IENTU1Byb3BlcnR5QmFj
a2dyb3VuZFBvc2l0aW9uWQotICAgICAgICAgICAgICAgICAgICB8fCBzaG9ydGhhbmQucHJvcGVy
dGllcygpW2pdID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWSkgewotICAgICAgICAg
ICAgICAgICAgICBmb3VuZFBvc2l0aW9uWUNTU1Byb3BlcnR5ID0gdHJ1ZTsKLQotICAgICAgICAg
ICAgICAgICAgICAvLyBiYWNrZ3JvdW5kLXBvc2l0aW9uIGlzIGEgc3BlY2lhbCBjYXNlOiBpZiBv
bmx5IHRoZSBmaXJzdCBvZmZzZXQgaXMgc3BlY2lmaWVkLAotICAgICAgICAgICAgICAgICAgICAv
LyB0aGUgc2Vjb25kIG9uZSBkZWZhdWx0cyB0byAiY2VudGVyIiwgbm90IHRoZSBzYW1lIHZhbHVl
LgotICAgICAgICAgICAgICAgICAgICBpZiAoY29tbW9uVmFsdWVJbml0aWFsaXplZCAmJiBjb21t
b25WYWx1ZSAhPSAiaW5pdGlhbCIgJiYgY29tbW9uVmFsdWUgIT0gImluaGVyaXQiKQotICAgICAg
ICAgICAgICAgICAgICAgICAgY29tbW9uVmFsdWUgPSBTdHJpbmcoKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghY29tbW9uVmFsdWVJbml0aWFs
aXplZCkgewotICAgICAgICAgICAgICAgIGNvbW1vblZhbHVlID0gdmFsdWVUZXh0OwotICAgICAg
ICAgICAgICAgIGNvbW1vblZhbHVlSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICAgICAgfSBl
bHNlIGlmICghY29tbW9uVmFsdWUuaXNOdWxsKCkgJiYgY29tbW9uVmFsdWUgIT0gdmFsdWVUZXh0
KQotICAgICAgICAgICAgICAgIGNvbW1vblZhbHVlID0gU3RyaW5nKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoIWxheWVyUmVzdWx0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaWYgKCFy
ZXN1bHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIs
ICIpOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChsYXllclJlc3VsdCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoaXNJbml0aWFsT3JJbmhlcml0KGNvbW1vblZhbHVlKSkKLSAgICAg
ICAgcmV0dXJuIGNvbW1vblZhbHVlOwotCi0gICAgaWYgKHJlc3VsdC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci19Ci0K
LVN0cmluZyBTdHlsZVByb3BlcnR5U2V0OjpnZXRTaG9ydGhhbmRWYWx1ZShjb25zdCBTdHlsZVBy
b3BlcnR5U2hvcnRoYW5kJiBzaG9ydGhhbmQpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIGNvbW1vblZh
bHVlOwotICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaG9ydGhhbmQubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBpZiAoIWlzUHJvcGVydHlJ
bXBsaWNpdChzaG9ydGhhbmQucHJvcGVydGllcygpW2ldKSkgewotICAgICAgICAgICAgUmVmUHRy
PENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUoc2hvcnRoYW5kLnByb3BlcnRp
ZXMoKVtpXSk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVRleHQgPSB2YWx1ZS0+Y3NzVGV4
dCgpOwotICAgICAgICAgICAgaWYgKCFpKQotICAgICAgICAgICAgICAgIGNvbW1vblZhbHVlID0g
dmFsdWVUZXh0OwotICAgICAgICAgICAgZWxzZSBpZiAoIWNvbW1vblZhbHVlLmlzTnVsbCgpICYm
IGNvbW1vblZhbHVlICE9IHZhbHVlVGV4dCkKLSAgICAgICAgICAgICAgICBjb21tb25WYWx1ZSA9
IFN0cmluZygpOwotICAgICAgICAgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKLSAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQodmFsdWVUZXh0KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjb21tb25W
YWx1ZSA9IFN0cmluZygpOwotICAgIH0KLSAgICBpZiAoaXNJbml0aWFsT3JJbmhlcml0KGNvbW1v
blZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGNvbW1vblZhbHVlOwotICAgIGlmIChyZXN1bHQuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0
cmluZygpOwotfQotCi0vLyBvbmx5IHJldHVybnMgYSBub24tbnVsbCB2YWx1ZSBpZiBhbGwgcHJv
cGVydGllcyBoYXZlIHRoZSBzYW1lLCBub24tbnVsbCB2YWx1ZQotU3RyaW5nIFN0eWxlUHJvcGVy
dHlTZXQ6OmdldENvbW1vblZhbHVlKGNvbnN0IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmIHNob3J0
aGFuZCkgY29uc3QKLXsKLSAgICBTdHJpbmcgcmVzOwotICAgIGJvb2wgbGFzdFByb3BlcnR5V2Fz
SW1wb3J0YW50ID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNob3J0aGFu
ZC5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQ
cm9wZXJ0eUNTU1ZhbHVlKHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbaV0pOwotICAgICAgICAvLyBG
SVhNRTogQ1NTSW5pdGlhbFZhbHVlOjpjc3NUZXh0IHNob3VsZCBnZW5lcmF0ZSB0aGUgcmlnaHQg
dmFsdWUuCi0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0gICAgICAgIFN0cmluZyB0ZXh0ID0gdmFsdWUtPmNzc1RleHQoKTsKLSAgICAgICAgaWYgKHRl
eHQuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIGlmIChy
ZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXMgPSB0ZXh0OwotICAgICAgICBlbHNlIGlmIChy
ZXMgIT0gdGV4dCkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgICAgICBib29s
IGN1cnJlbnRQcm9wZXJ0eUlzSW1wb3J0YW50ID0gcHJvcGVydHlJc0ltcG9ydGFudChzaG9ydGhh
bmQucHJvcGVydGllcygpW2ldKTsKLSAgICAgICAgaWYgKGkgJiYgbGFzdFByb3BlcnR5V2FzSW1w
b3J0YW50ICE9IGN1cnJlbnRQcm9wZXJ0eUlzSW1wb3J0YW50KQotICAgICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotICAgICAgICBsYXN0UHJvcGVydHlXYXNJbXBvcnRhbnQgPSBjdXJyZW50UHJv
cGVydHlJc0ltcG9ydGFudDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotU3RyaW5nIFN0
eWxlUHJvcGVydHlTZXQ6OmJvcmRlclByb3BlcnR5VmFsdWUoQ29tbW9uVmFsdWVNb2RlIHZhbHVl
TW9kZSkgY29uc3QKLXsKLSAgICBjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kIHByb3BlcnRp
ZXNbM10gPSB7IGJvcmRlcldpZHRoU2hvcnRoYW5kKCksIGJvcmRlclN0eWxlU2hvcnRoYW5kKCks
IGJvcmRlckNvbG9yU2hvcnRoYW5kKCkgfTsKLSAgICBTdHJpbmcgY29tbW9uVmFsdWU7Ci0gICAg
U3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJS
QVlfTEVOR1RIKHByb3BlcnRpZXMpOyArK2kpIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gZ2V0
Q29tbW9uVmFsdWUocHJvcGVydGllc1tpXSk7Ci0gICAgICAgIGlmICh2YWx1ZS5pc051bGwoKSkg
ewotICAgICAgICAgICAgaWYgKHZhbHVlTW9kZSA9PSBSZXR1cm5OdWxsT25VbmNvbW1vblZhbHVl
cykKLSAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgICAgICBBU1NFUlQo
dmFsdWVNb2RlID09IE9taXRVbmNvbW1vblZhbHVlcyk7Ci0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgfQotICAgICAgICBpZiAoIWkpCi0gICAgICAgICAgICBjb21tb25WYWx1ZSA9IHZh
bHVlOwotICAgICAgICBlbHNlIGlmICghY29tbW9uVmFsdWUuaXNOdWxsKCkgJiYgY29tbW9uVmFs
dWUgIT0gdmFsdWUpCi0gICAgICAgICAgICBjb21tb25WYWx1ZSA9IFN0cmluZygpOwotICAgICAg
ICBpZiAodmFsdWUgPT0gImluaXRpYWwiKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGlmICghcmVzdWx0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsK
LSAgICAgICAgcmVzdWx0LmFwcGVuZCh2YWx1ZSk7Ci0gICAgfQotICAgIGlmIChpc0luaXRpYWxP
ckluaGVyaXQoY29tbW9uVmFsdWUpKQotICAgICAgICByZXR1cm4gY29tbW9uVmFsdWU7Ci0gICAg
cmV0dXJuIHJlc3VsdC5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IHJlc3VsdC50b1N0cmluZygpOwot
fQotCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBTdHlsZVByb3BlcnR5U2V0OjpnZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkgY29uc3QKLXsKLSAgICBpbnQgZm91bmRQ
cm9wZXJ0eUluZGV4ID0gZmluZFByb3BlcnR5SW5kZXgocHJvcGVydHlJRCk7Ci0gICAgaWYgKGZv
dW5kUHJvcGVydHlJbmRleCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHBy
b3BlcnR5QXQoZm91bmRQcm9wZXJ0eUluZGV4KS52YWx1ZSgpOwotfQotCi1ib29sIE11dGFibGVT
dHlsZVByb3BlcnR5U2V0OjpyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQpCi17Ci0gICAgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCBzaG9ydGhhbmQgPSBzaG9y
dGhhbmRGb3JQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKLSAgICBpZiAoIXNob3J0aGFuZC5sZW5ndGgo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCByZXQgPSByZW1vdmVQcm9wZXJ0
aWVzSW5TZXQoc2hvcnRoYW5kLnByb3BlcnRpZXMoKSwgc2hvcnRoYW5kLmxlbmd0aCgpKTsKLQot
ICAgIENTU1Byb3BlcnR5SUQgcHJlZml4aW5nVmFyaWFudCA9IHByZWZpeGluZ1ZhcmlhbnRGb3JQ
cm9wZXJ0eUlkKHByb3BlcnR5SUQpOwotICAgIGlmIChwcmVmaXhpbmdWYXJpYW50ID09IHByb3Bl
cnR5SUQpCi0gICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICBTdHlsZVByb3BlcnR5U2hvcnRoYW5k
IHNob3J0aGFuZFByZWZpeGluZ1ZhcmlhbnQgPSBzaG9ydGhhbmRGb3JQcm9wZXJ0eShwcmVmaXhp
bmdWYXJpYW50KTsKLSAgICByZXR1cm4gcmVtb3ZlUHJvcGVydGllc0luU2V0KHNob3J0aGFuZFBy
ZWZpeGluZ1ZhcmlhbnQucHJvcGVydGllcygpLCBzaG9ydGhhbmRQcmVmaXhpbmdWYXJpYW50Lmxl
bmd0aCgpKTsKLX0KLQotYm9vbCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlUHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHJpbmcqIHJldHVyblRleHQpCi17Ci0gICAg
aWYgKHJlbW92ZVNob3J0aGFuZFByb3BlcnR5KHByb3BlcnR5SUQpKSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBSZXR1cm4gYW4gZXF1aXZhbGVudCBzaG9ydGhhbmQgd2hlbiBwb3NzaWJsZS4KLSAgICAg
ICAgaWYgKHJldHVyblRleHQpCi0gICAgICAgICAgICAqcmV0dXJuVGV4dCA9ICIiOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpbnQgZm91bmRQcm9wZXJ0eUluZGV4ID0gZmlu
ZFByb3BlcnR5SW5kZXgocHJvcGVydHlJRCk7Ci0gICAgaWYgKGZvdW5kUHJvcGVydHlJbmRleCA9
PSAtMSkgewotICAgICAgICBpZiAocmV0dXJuVGV4dCkKLSAgICAgICAgICAgICpyZXR1cm5UZXh0
ID0gIiI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAocmV0dXJuVGV4
dCkKLSAgICAgICAgKnJldHVyblRleHQgPSBwcm9wZXJ0eUF0KGZvdW5kUHJvcGVydHlJbmRleCku
dmFsdWUoKS0+Y3NzVGV4dCgpOwotCi0gICAgLy8gQSBtb3JlIGVmZmljaWVudCByZW1vdmFsIHN0
cmF0ZWd5IHdvdWxkIGludm9sdmUgbWFya2luZyBlbnRyaWVzIGFzIGVtcHR5Ci0gICAgLy8gYW5k
IHN3ZWVwaW5nIHRoZW0gd2hlbiB0aGUgdmVjdG9yIGdyb3dzIHRvbyBiaWcuCi0gICAgbV9wcm9w
ZXJ0eVZlY3Rvci5yZW1vdmUoZm91bmRQcm9wZXJ0eUluZGV4KTsKLQotICAgIHJlbW92ZVByZWZp
eGVkT3JVbnByZWZpeGVkUHJvcGVydHkocHJvcGVydHlJRCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlUHJlZml4ZWRPclVucHJl
Zml4ZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCi17Ci0gICAgaW50IGZvdW5k
UHJvcGVydHlJbmRleCA9IGZpbmRQcm9wZXJ0eUluZGV4KHByZWZpeGluZ1ZhcmlhbnRGb3JQcm9w
ZXJ0eUlkKHByb3BlcnR5SUQpKTsKLSAgICBpZiAoZm91bmRQcm9wZXJ0eUluZGV4ID09IC0xKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9wcm9wZXJ0eVZlY3Rvci5yZW1vdmUoZm91bmRQcm9wZXJ0
eUluZGV4KTsKLX0KLQotYm9vbCBTdHlsZVByb3BlcnR5U2V0Ojpwcm9wZXJ0eUlzSW1wb3J0YW50
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkgY29uc3QKLXsKLSAgICBpbnQgZm91bmRQcm9wZXJ0
eUluZGV4ID0gZmluZFByb3BlcnR5SW5kZXgocHJvcGVydHlJRCk7Ci0gICAgaWYgKGZvdW5kUHJv
cGVydHlJbmRleCAhPSAtMSkKLSAgICAgICAgcmV0dXJuIHByb3BlcnR5QXQoZm91bmRQcm9wZXJ0
eUluZGV4KS5pc0ltcG9ydGFudCgpOwotCi0gICAgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCBzaG9y
dGhhbmQgPSBzaG9ydGhhbmRGb3JQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKLSAgICBpZiAoIXNob3J0
aGFuZC5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNob3J0aGFuZC5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGlmICghcHJv
cGVydHlJc0ltcG9ydGFudChzaG9ydGhhbmQucHJvcGVydGllcygpW2ldKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVN0cmluZyBTdHls
ZVByb3BlcnR5U2V0OjpnZXRQcm9wZXJ0eVNob3J0aGFuZChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQpIGNvbnN0Ci17Ci0gICAgaW50IGZvdW5kUHJvcGVydHlJbmRleCA9IGZpbmRQcm9wZXJ0eUlu
ZGV4KHByb3BlcnR5SUQpOwotICAgIGlmIChmb3VuZFByb3BlcnR5SW5kZXggPT0gLTEpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlOYW1lU3RyaW5nKHBy
b3BlcnR5QXQoZm91bmRQcm9wZXJ0eUluZGV4KS5zaG9ydGhhbmRJRCgpKTsKLX0KLQotYm9vbCBT
dHlsZVByb3BlcnR5U2V0Ojppc1Byb3BlcnR5SW1wbGljaXQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlEKSBjb25zdAotewotICAgIGludCBmb3VuZFByb3BlcnR5SW5kZXggPSBmaW5kUHJvcGVydHlJ
bmRleChwcm9wZXJ0eUlEKTsKLSAgICBpZiAoZm91bmRQcm9wZXJ0eUluZGV4ID09IC0xKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHByb3BlcnR5QXQoZm91bmRQcm9wZXJ0eUlu
ZGV4KS5pc0ltcGxpY2l0KCk7Ci19Ci0KLWJvb2wgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwg
Ym9vbCBpbXBvcnRhbnQsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCi17
Ci0gICAgLy8gU2V0dGluZyB0aGUgdmFsdWUgdG8gYW4gZW1wdHkgc3RyaW5nIGp1c3QgcmVtb3Zl
cyB0aGUgcHJvcGVydHkgaW4gYm90aCBJRSBhbmQgR2Vja28uCi0gICAgLy8gU2V0dGluZyBpdCB0
byBudWxsIHNlZW1zIHRvIHByb2R1Y2UgbGVzcyBjb25zaXN0ZW50IHJlc3VsdHMsIGJ1dCB3ZSB0
cmVhdCBpdCBqdXN0IHRoZSBzYW1lLgotICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKLQotICAgIC8vIFdoZW4gcmVwbGFj
aW5nIGFuIGV4aXN0aW5nIHByb3BlcnR5IHZhbHVlLCB0aGlzIG1vdmVzIHRoZSBwcm9wZXJ0eSB0
byB0aGUgZW5kIG9mIHRoZSBsaXN0LgotICAgIC8vIEZpcmVmb3ggcHJlc2VydmVzIHRoZSBwb3Np
dGlvbiwgYW5kIE1TSUUgbW92ZXMgdGhlIHByb3BlcnR5IHRvIHRoZSBiZWdpbm5pbmcuCi0gICAg
cmV0dXJuIENTU1BhcnNlcjo6cGFyc2VWYWx1ZSh0aGlzLCBwcm9wZXJ0eUlELCB2YWx1ZSwgaW1w
b3J0YW50LCBjc3NQYXJzZXJNb2RlKCksIGNvbnRleHRTdHlsZVNoZWV0KTsKLX0KLQotdm9pZCBN
dXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwcnBWYWx1ZSwgYm9vbCBpbXBvcnRhbnQpCi17Ci0g
ICAgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCBzaG9ydGhhbmQgPSBzaG9ydGhhbmRGb3JQcm9wZXJ0
eShwcm9wZXJ0eUlEKTsKLSAgICBpZiAoIXNob3J0aGFuZC5sZW5ndGgoKSkgewotICAgICAgICBz
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eUlELCBwcnBWYWx1ZSwgaW1wb3J0YW50KSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoc2hv
cnRoYW5kLnByb3BlcnRpZXMoKSwgc2hvcnRoYW5kLmxlbmd0aCgpKTsKLQotICAgIFJlZlB0cjxD
U1NWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2hvcnRoYW5kLmxlbmd0aCgpOyArK2kpCi0gICAgICAgIG1fcHJvcGVydHlWZWN0b3IuYXBwZW5k
KENTU1Byb3BlcnR5KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbaV0sIHZhbHVlLCBpbXBvcnRhbnQp
KTsKLX0KLQotdm9pZCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoY29uc3Qg
Q1NTUHJvcGVydHkmIHByb3BlcnR5LCBDU1NQcm9wZXJ0eSogc2xvdCkKLXsKLSAgICBpZiAoIXJl
bW92ZVNob3J0aGFuZFByb3BlcnR5KHByb3BlcnR5LmlkKCkpKSB7Ci0gICAgICAgIENTU1Byb3Bl
cnR5KiB0b1JlcGxhY2UgPSBzbG90ID8gc2xvdCA6IGZpbmRDU1NQcm9wZXJ0eVdpdGhJRChwcm9w
ZXJ0eS5pZCgpKTsKLSAgICAgICAgaWYgKHRvUmVwbGFjZSkgewotICAgICAgICAgICAgKnRvUmVw
bGFjZSA9IHByb3BlcnR5OwotICAgICAgICAgICAgc2V0UHJlZml4aW5nVmFyaWFudFByb3BlcnR5
KHByb3BlcnR5KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBh
cHBlbmRQcmVmaXhpbmdWYXJpYW50UHJvcGVydHkocHJvcGVydHkpOwotfQotCi1zdGF0aWMgdW5z
aWduZWQgZ2V0SW5kZXhJblNob3J0aGFuZFZlY3RvckZvclByZWZpeGluZ1ZhcmlhbnQoY29uc3Qg
Q1NTUHJvcGVydHkmIHByb3BlcnR5LCBDU1NQcm9wZXJ0eUlEIHByZWZpeGluZ1ZhcmlhbnQpCi17
Ci0gICAgaWYgKCFwcm9wZXJ0eS5pc1NldEZyb21TaG9ydGhhbmQoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBDU1NQcm9wZXJ0eUlEIHByZWZpeGVkU2hvcnRoYW5kID0gcHJlZml4aW5nVmFy
aWFudEZvclByb3BlcnR5SWQocHJvcGVydHkuc2hvcnRoYW5kSUQoKSk7Ci0gICAgcmV0dXJuIGlu
ZGV4T2ZTaG9ydGhhbmRGb3JMb25naGFuZChwcmVmaXhlZFNob3J0aGFuZCwgbWF0Y2hpbmdTaG9y
dGhhbmRzRm9yTG9uZ2hhbmQocHJlZml4aW5nVmFyaWFudCkpOwotfQotCi12b2lkIE11dGFibGVT
dHlsZVByb3BlcnR5U2V0OjphcHBlbmRQcmVmaXhpbmdWYXJpYW50UHJvcGVydHkoY29uc3QgQ1NT
UHJvcGVydHkmIHByb3BlcnR5KQotewotICAgIG1fcHJvcGVydHlWZWN0b3IuYXBwZW5kKHByb3Bl
cnR5KTsKLSAgICBDU1NQcm9wZXJ0eUlEIHByZWZpeGluZ1ZhcmlhbnQgPSBwcmVmaXhpbmdWYXJp
YW50Rm9yUHJvcGVydHlJZChwcm9wZXJ0eS5pZCgpKTsKLSAgICBpZiAocHJlZml4aW5nVmFyaWFu
dCA9PSBwcm9wZXJ0eS5pZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Byb3BlcnR5VmVj
dG9yLmFwcGVuZChDU1NQcm9wZXJ0eShwcmVmaXhpbmdWYXJpYW50LCBwcm9wZXJ0eS52YWx1ZSgp
LCBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpLCBwcm9wZXJ0eS5pc1NldEZyb21TaG9ydGhhbmQoKSwg
Z2V0SW5kZXhJblNob3J0aGFuZFZlY3RvckZvclByZWZpeGluZ1ZhcmlhbnQocHJvcGVydHksIHBy
ZWZpeGluZ1ZhcmlhbnQpLCBwcm9wZXJ0eS5tZXRhZGF0YSgpLm1faW1wbGljaXQpKTsKLX0KLQot
dm9pZCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJlZml4aW5nVmFyaWFudFByb3BlcnR5
KGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSkKLXsKLSAgICBDU1NQcm9wZXJ0eUlEIHByZWZp
eGluZ1ZhcmlhbnQgPSBwcmVmaXhpbmdWYXJpYW50Rm9yUHJvcGVydHlJZChwcm9wZXJ0eS5pZCgp
KTsKLSAgICBDU1NQcm9wZXJ0eSogdG9SZXBsYWNlID0gZmluZENTU1Byb3BlcnR5V2l0aElEKHBy
ZWZpeGluZ1ZhcmlhbnQpOwotICAgIGlmICh0b1JlcGxhY2UgJiYgcHJlZml4aW5nVmFyaWFudCAh
PSBwcm9wZXJ0eS5pZCgpKQotICAgICAgICAqdG9SZXBsYWNlID0gQ1NTUHJvcGVydHkocHJlZml4
aW5nVmFyaWFudCwgcHJvcGVydHkudmFsdWUoKSwgcHJvcGVydHkuaXNJbXBvcnRhbnQoKSwgcHJv
cGVydHkuaXNTZXRGcm9tU2hvcnRoYW5kKCksIGdldEluZGV4SW5TaG9ydGhhbmRWZWN0b3JGb3JQ
cmVmaXhpbmdWYXJpYW50KHByb3BlcnR5LCBwcmVmaXhpbmdWYXJpYW50KSwgcHJvcGVydHkubWV0
YWRhdGEoKS5tX2ltcGxpY2l0KTsKLX0KLQotYm9vbCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6
c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBDU1NWYWx1ZUlEIGlkZW50aWZp
ZXIsIGJvb2wgaW1wb3J0YW50KQotewotICAgIHNldFByb3BlcnR5KENTU1Byb3BlcnR5KHByb3Bl
cnR5SUQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZGVudGlmaWVyKSwg
aW1wb3J0YW50KSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTXV0YWJsZVN0eWxlUHJv
cGVydHlTZXQ6OnNldFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgQ1NTUHJvcGVy
dHlJRCBpZGVudGlmaWVyLCBib29sIGltcG9ydGFudCkKLXsKLSAgICBzZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eShwcm9wZXJ0eUlELCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
aWRlbnRpZmllciksIGltcG9ydGFudCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE11
dGFibGVTdHlsZVByb3BlcnR5U2V0OjpwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5
bGVEZWNsYXJhdGlvbiwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCkKLXsK
LSAgICBtX3Byb3BlcnR5VmVjdG9yLmNsZWFyKCk7Ci0KLSAgICBDU1NQYXJzZXJDb250ZXh0IGNv
bnRleHQoY3NzUGFyc2VyTW9kZSgpKTsKLSAgICBpZiAoY29udGV4dFN0eWxlU2hlZXQpIHsKLSAg
ICAgICAgY29udGV4dCA9IGNvbnRleHRTdHlsZVNoZWV0LT5wYXJzZXJDb250ZXh0KCk7Ci0gICAg
ICAgIGNvbnRleHQubW9kZSA9IGNzc1BhcnNlck1vZGUoKTsKLSAgICB9Ci0gICAgQ1NTUGFyc2Vy
IHBhcnNlcihjb250ZXh0KTsKLSAgICBwYXJzZXIucGFyc2VEZWNsYXJhdGlvbih0aGlzLCBzdHls
ZURlY2xhcmF0aW9uLCAwLCBjb250ZXh0U3R5bGVTaGVldCk7Ci19Ci0KLXZvaWQgTXV0YWJsZVN0
eWxlUHJvcGVydHlTZXQ6OmFkZFBhcnNlZFByb3BlcnRpZXMoY29uc3QgVmVjdG9yPENTU1Byb3Bl
cnR5PiYgcHJvcGVydGllcykKLXsKLSAgICBtX3Byb3BlcnR5VmVjdG9yLnJlc2VydmVDYXBhY2l0
eShtX3Byb3BlcnR5VmVjdG9yLnNpemUoKSArIHByb3BlcnRpZXMuc2l6ZSgpKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydGllcy5zaXplKCk7ICsraSkKLSAgICAgICAgYWRk
UGFyc2VkUHJvcGVydHkocHJvcGVydGllc1tpXSk7Ci19Ci0KLXZvaWQgTXV0YWJsZVN0eWxlUHJv
cGVydHlTZXQ6OmFkZFBhcnNlZFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSkK
LXsKLSAgICAvLyBPbmx5IGFkZCBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBubyAhaW1wb3J0YW50IGNv
dW50ZXJwYXJ0IHByZXNlbnQKLSAgICBpZiAoIXByb3BlcnR5SXNJbXBvcnRhbnQocHJvcGVydHku
aWQoKSkgfHwgcHJvcGVydHkuaXNJbXBvcnRhbnQoKSkKLSAgICAgICAgc2V0UHJvcGVydHkocHJv
cGVydHkpOwotfQotCi1TdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6YXNUZXh0KCkgY29uc3QKLXsK
LSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLQotICAgIGludCBwb3NpdGlvblhQcm9wZXJ0eUlu
ZGV4ID0gLTE7Ci0gICAgaW50IHBvc2l0aW9uWVByb3BlcnR5SW5kZXggPSAtMTsKLSAgICBpbnQg
cmVwZWF0WFByb3BlcnR5SW5kZXggPSAtMTsKLSAgICBpbnQgcmVwZWF0WVByb3BlcnR5SW5kZXgg
PSAtMTsKLQotICAgIEJpdEFycmF5PG51bUNTU1Byb3BlcnRpZXM+IHNob3J0aGFuZFByb3BlcnR5
VXNlZDsKLSAgICBCaXRBcnJheTxudW1DU1NQcm9wZXJ0aWVzPiBzaG9ydGhhbmRQcm9wZXJ0eUFw
cGVhcmVkOwotCi0gICAgdW5zaWduZWQgc2l6ZSA9IHByb3BlcnR5Q291bnQoKTsKLSAgICB1bnNp
Z25lZCBudW1EZWNscyA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHNpemU7ICsr
bikgewotICAgICAgICBQcm9wZXJ0eVJlZmVyZW5jZSBwcm9wZXJ0eSA9IHByb3BlcnR5QXQobik7
Ci0gICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IHByb3BlcnR5LmlkKCk7Ci0gICAg
ICAgIENTU1Byb3BlcnR5SUQgc2hvcnRoYW5kUHJvcGVydHlJRCA9IENTU1Byb3BlcnR5SW52YWxp
ZDsKLSAgICAgICAgQ1NTUHJvcGVydHlJRCBib3JkZXJGYWxsYmFja1Nob3J0aGFuZFByb3BlcnR5
ID0gQ1NTUHJvcGVydHlJbnZhbGlkOwotICAgICAgICBTdHJpbmcgdmFsdWU7Ci0KLSAgICAgICAg
c3dpdGNoIChwcm9wZXJ0eUlEKSB7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
UG9zaXRpb25YOgotICAgICAgICAgICAgcG9zaXRpb25YUHJvcGVydHlJbmRleCA9IG47Ci0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3Np
dGlvblk6Ci0gICAgICAgICAgICBwb3NpdGlvbllQcm9wZXJ0eUluZGV4ID0gbjsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFg6
Ci0gICAgICAgICAgICByZXBlYXRYUHJvcGVydHlJbmRleCA9IG47Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZOgotICAgICAg
ICAgICAgcmVwZWF0WVByb3BlcnR5SW5kZXggPSBuOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aDoKLSAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGg6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJC
b3R0b21XaWR0aDoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aDoKLSAg
ICAgICAgICAgIGlmICghYm9yZGVyRmFsbGJhY2tTaG9ydGhhbmRQcm9wZXJ0eSkKLSAgICAgICAg
ICAgICAgICBib3JkZXJGYWxsYmFja1Nob3J0aGFuZFByb3BlcnR5ID0gQ1NTUHJvcGVydHlCb3Jk
ZXJXaWR0aDsKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFN0eWxlOgotICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRTdHlsZToKLSAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlckJvdHRvbVN0eWxlOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVm
dFN0eWxlOgotICAgICAgICAgICAgaWYgKCFib3JkZXJGYWxsYmFja1Nob3J0aGFuZFByb3BlcnR5
KQotICAgICAgICAgICAgICAgIGJvcmRlckZhbGxiYWNrU2hvcnRoYW5kUHJvcGVydHkgPSBDU1NQ
cm9wZXJ0eUJvcmRlclN0eWxlOwotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29s
b3I6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yOgotICAgICAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3I6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXJMZWZ0Q29sb3I6Ci0gICAgICAgICAgICBpZiAoIWJvcmRlckZhbGxiYWNrU2hvcnRo
YW5kUHJvcGVydHkpCi0gICAgICAgICAgICAgICAgYm9yZGVyRmFsbGJhY2tTaG9ydGhhbmRQcm9w
ZXJ0eSA9IENTU1Byb3BlcnR5Qm9yZGVyQ29sb3I7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBE
ZWFsIHdpdGggY2FzZXMgd2hlcmUgb25seSBzb21lIG9mIGJvcmRlci0odG9wfHJpZ2h0fGJvdHRv
bXxsZWZ0KSBhcmUgc3BlY2lmaWVkLgotICAgICAgICAgICAgaWYgKCFzaG9ydGhhbmRQcm9wZXJ0
eUFwcGVhcmVkLmdldChDU1NQcm9wZXJ0eUJvcmRlciAtIGZpcnN0Q1NTUHJvcGVydHkpKSB7Ci0g
ICAgICAgICAgICAgICAgdmFsdWUgPSBib3JkZXJQcm9wZXJ0eVZhbHVlKFJldHVybk51bGxPblVu
Y29tbW9uVmFsdWVzKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHNob3J0aGFuZFByb3BlcnR5QXBwZWFyZWQuc2V0KENTU1Byb3BlcnR5
Qm9yZGVyIC0gZmlyc3RDU1NQcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICBzaG9ydGhhbmRQcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHlCb3JkZXI7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKHNob3J0aGFuZFByb3BlcnR5VXNlZC5nZXQoQ1NTUHJvcGVy
dHlCb3JkZXIgLSBmaXJzdENTU1Byb3BlcnR5KSkKLSAgICAgICAgICAgICAgICBzaG9ydGhhbmRQ
cm9wZXJ0eUlEID0gQ1NTUHJvcGVydHlCb3JkZXI7Ci0gICAgICAgICAgICBpZiAoIXNob3J0aGFu
ZFByb3BlcnR5SUQpCi0gICAgICAgICAgICAgICAgc2hvcnRoYW5kUHJvcGVydHlJRCA9IGJvcmRl
ckZhbGxiYWNrU2hvcnRoYW5kUHJvcGVydHk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nOgotICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nOgotICAgICAgICAgICAg
c2hvcnRoYW5kUHJvcGVydHlJRCA9IENTU1Byb3BlcnR5Qm9yZGVyU3BhY2luZzsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseToKLSAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQ6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGb250
U2l6ZToKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHlsZToKLSAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUZvbnRWYXJpYW50OgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFdlaWdo
dDoKLSAgICAgICAgICAgIC8vIERvbid0IHVzZSBDU1NQcm9wZXJ0eUZvbnQgYmVjYXVzZSBvbGQg
VUFzIGNhbid0IHJlY29nbml6ZSB0aGVtIGJ1dCBhcmUgaW1wb3J0YW50IGZvciBlZGl0aW5nLgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVUeXBl
OgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlUG9zaXRpb246Ci0gICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZToKLSAgICAgICAgICAgIHNob3J0aGFuZFByb3Bl
cnR5SUQgPSBDU1NQcm9wZXJ0eUxpc3RTdHlsZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luVG9wOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFy
Z2luUmlnaHQ6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b206Ci0gICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5MZWZ0OgotICAgICAgICAgICAgc2hvcnRoYW5kUHJvcGVy
dHlJRCA9IENTU1Byb3BlcnR5TWFyZ2luOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGg6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRs
aW5lU3R5bGU6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6Ci0gICAgICAg
ICAgICBzaG9ydGhhbmRQcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHlPdXRsaW5lOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1g6Ci0gICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlPdmVyZmxvd1k6Ci0gICAgICAgICAgICBzaG9ydGhhbmRQcm9wZXJ0eUlE
ID0gQ1NTUHJvcGVydHlPdmVyZmxvdzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU1Byb3BlcnR5UGFkZGluZ1RvcDoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdS
aWdodDoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b206Ci0gICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlQYWRkaW5nTGVmdDoKLSAgICAgICAgICAgIHNob3J0aGFuZFByb3BlcnR5
SUQgPSBDU1NQcm9wZXJ0eVBhZGRpbmc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVRyYW5zaXRpb25Qcm9wZXJ0eToKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVRyYW5zaXRpb25EdXJhdGlvbjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zaXRpb25U
aW1pbmdGdW5jdGlvbjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zaXRpb25EZWxheToK
LSAgICAgICAgICAgIHNob3J0aGFuZFByb3BlcnR5SUQgPSBDU1NQcm9wZXJ0eVRyYW5zaXRpb247
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1h
dGlvbk5hbWU6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EdXJhdGlv
bjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9u
OgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGVsYXk6Ci0gICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudDoKLSAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRpcmVjdGlvbjoKLSAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkZpbGxNb2RlOgotICAgICAgICAgICAgc2hvcnRoYW5k
UHJvcGVydHlJRCA9IENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4RGlyZWN0aW9uOgotICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleFdyYXA6Ci0gICAgICAgICAgICBzaG9ydGhhbmRQ
cm9wZXJ0eUlEID0gQ1NTUHJvcGVydHlXZWJraXRGbGV4RmxvdzsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleEJhc2lzOgotICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0RmxleEdyb3c6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRGbGV4U2hyaW5rOgotICAgICAgICAgICAgc2hvcnRoYW5kUHJvcGVydHlJRCA9IENTU1Byb3Bl
cnR5V2Via2l0RmxleDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFza1Bvc2l0aW9uWDoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tQb3NpdGlvblk6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WDoK
LSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRZOgotICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFza1JlcGVhdDoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlv
bjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlwOgotICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFza09yaWdpbjoKLSAgICAgICAgICAgIHNob3J0aGFuZFByb3Bl
cnR5SUQgPSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2s7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblg6Ci0gICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5ZOgotICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWjoKLSAgICAgICAgICAgIHNob3J0aGFuZFByb3BlcnR5
SUQgPSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpbjsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5OgotICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uOgotICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOgotICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5OgotICAgICAgICAgICAgc2hvcnRo
YW5kUHJvcGVydHlJRCA9IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbjsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQotICAgICAgICB1bnNpZ25lZCBzaG9ydFByb3BlcnR5SW5kZXggPSBzaG9ydGhhbmRQcm9wZXJ0
eUlEIC0gZmlyc3RDU1NQcm9wZXJ0eTsKLSAgICAgICAgaWYgKHNob3J0aGFuZFByb3BlcnR5SUQp
IHsKLSAgICAgICAgICAgIGlmIChzaG9ydGhhbmRQcm9wZXJ0eVVzZWQuZ2V0KHNob3J0UHJvcGVy
dHlJbmRleCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIXNo
b3J0aGFuZFByb3BlcnR5QXBwZWFyZWQuZ2V0KHNob3J0UHJvcGVydHlJbmRleCkgJiYgdmFsdWUu
aXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRQcm9wZXJ0eVZhbHVlKHNob3J0
aGFuZFByb3BlcnR5SUQpOwotICAgICAgICAgICAgc2hvcnRoYW5kUHJvcGVydHlBcHBlYXJlZC5z
ZXQoc2hvcnRQcm9wZXJ0eUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghdmFsdWUu
aXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHByb3BlcnR5SUQgPSBzaG9ydGhhbmRQcm9wZXJ0eUlE
OwotICAgICAgICAgICAgc2hvcnRoYW5kUHJvcGVydHlVc2VkLnNldChzaG9ydFByb3BlcnR5SW5k
ZXgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHZhbHVlID0gcHJvcGVydHkudmFsdWUo
KS0+Y3NzVGV4dCgpOwotCi0gICAgICAgIGlmICh2YWx1ZSA9PSAiaW5pdGlhbCIgJiYgIUNTU1By
b3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KHByb3BlcnR5SUQpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgaWYgKG51bURlY2xzKyspCi0gICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCcgJyk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5
SUQpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIjogIik7Ci0gICAgICAgIHJlc3Vs
dC5hcHBlbmQodmFsdWUpOwotICAgICAgICBpZiAocHJvcGVydHkuaXNJbXBvcnRhbnQoKSkKLSAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIgIWltcG9ydGFudCIpOwotICAgICAgICBy
ZXN1bHQuYXBwZW5kKCc7Jyk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSBub3Qt
c28tbmljZSB3YXkgdG8gdHVybiB4L3kgcG9zaXRpb25zIGludG8gc2luZ2xlIGJhY2tncm91bmQt
cG9zaXRpb24gaW4gb3V0cHV0LgotICAgIC8vIEl0IGlzIHJlcXVpcmVkIGJlY2F1c2UgYmFja2dy
b3VuZC1wb3NpdGlvbi14L3kgYXJlIG5vbi1zdGFuZGFyZCBwcm9wZXJ0aWVzIGFuZCBXZWJLaXQg
Z2VuZXJhdGVkIG91dHB1dAotICAgIC8vIHdvdWxkIG5vdCB3b3JrIGluIEZpcmVmb3ggKDxyZGFy
Oi8vcHJvYmxlbS81MTQzMTgzPikKLSAgICAvLyBJdCB3b3VsZCBiZSBhIGJldHRlciBzb2x1dGlv
biBpZiBiYWNrZ3JvdW5kLXBvc2l0aW9uIHdhcyBDU1NfUEFJUi4KLSAgICBpZiAocG9zaXRpb25Y
UHJvcGVydHlJbmRleCAhPSAtMSAmJiBwb3NpdGlvbllQcm9wZXJ0eUluZGV4ICE9IC0xICYmIHBy
b3BlcnR5QXQocG9zaXRpb25YUHJvcGVydHlJbmRleCkuaXNJbXBvcnRhbnQoKSA9PSBwcm9wZXJ0
eUF0KHBvc2l0aW9uWVByb3BlcnR5SW5kZXgpLmlzSW1wb3J0YW50KCkpIHsKLSAgICAgICAgUHJv
cGVydHlSZWZlcmVuY2UgcG9zaXRpb25YUHJvcGVydHkgPSBwcm9wZXJ0eUF0KHBvc2l0aW9uWFBy
b3BlcnR5SW5kZXgpOwotICAgICAgICBQcm9wZXJ0eVJlZmVyZW5jZSBwb3NpdGlvbllQcm9wZXJ0
eSA9IHByb3BlcnR5QXQocG9zaXRpb25ZUHJvcGVydHlJbmRleCk7Ci0KLSAgICAgICAgaWYgKG51
bURlY2xzKyspCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7Ci0gICAgICAgIHJlc3Vs
dC5hcHBlbmRMaXRlcmFsKCJiYWNrZ3JvdW5kLXBvc2l0aW9uOiAiKTsKLSAgICAgICAgaWYgKHBv
c2l0aW9uWFByb3BlcnR5LnZhbHVlKCktPmlzVmFsdWVMaXN0KCkgfHwgcG9zaXRpb25ZUHJvcGVy
dHkudmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZ2V0
TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGJhY2tncm91bmRQb3NpdGlvblNob3J0aGFuZCgpKSk7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwb3NpdGlvblhQcm9wZXJ0
eS52YWx1ZSgpLT5jc3NUZXh0KCkpOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwot
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwb3NpdGlvbllQcm9wZXJ0eS52YWx1ZSgpLT5jc3NU
ZXh0KCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwb3NpdGlvblhQcm9wZXJ0eS5pc0ltcG9y
dGFudCgpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIiAhaW1wb3J0YW50Iik7
Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoJzsnKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
cG9zaXRpb25YUHJvcGVydHlJbmRleCAhPSAtMSkgewotICAgICAgICAgICAgaWYgKG51bURlY2xz
KyspCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwotICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChwcm9wZXJ0eUF0KHBvc2l0aW9uWFByb3BlcnR5SW5kZXgpLmNzc1RleHQoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBvc2l0aW9uWVByb3BlcnR5SW5kZXggIT0gLTEpIHsK
LSAgICAgICAgICAgIGlmIChudW1EZWNscysrKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJyAnKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocHJvcGVydHlBdChwb3NpdGlvbllQ
cm9wZXJ0eUluZGV4KS5jc3NUZXh0KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRklY
TUU6IFdlIG5lZWQgdG8gZG8gdGhlIHNhbWUgZm9yIGJhY2tncm91bmQtcmVwZWF0LgotICAgIGlm
IChyZXBlYXRYUHJvcGVydHlJbmRleCAhPSAtMSAmJiByZXBlYXRZUHJvcGVydHlJbmRleCAhPSAt
MSAmJiBwcm9wZXJ0eUF0KHJlcGVhdFhQcm9wZXJ0eUluZGV4KS5pc0ltcG9ydGFudCgpID09IHBy
b3BlcnR5QXQocmVwZWF0WVByb3BlcnR5SW5kZXgpLmlzSW1wb3J0YW50KCkpIHsKLSAgICAgICAg
UHJvcGVydHlSZWZlcmVuY2UgcmVwZWF0WFByb3BlcnR5ID0gcHJvcGVydHlBdChyZXBlYXRYUHJv
cGVydHlJbmRleCk7Ci0gICAgICAgIFByb3BlcnR5UmVmZXJlbmNlIHJlcGVhdFlQcm9wZXJ0eSA9
IHByb3BlcnR5QXQocmVwZWF0WVByb3BlcnR5SW5kZXgpOwotCi0gICAgICAgIGlmIChudW1EZWNs
cysrKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwotICAgICAgICByZXN1bHQuYXBw
ZW5kTGl0ZXJhbCgiYmFja2dyb3VuZC1yZXBlYXQ6ICIpOwotICAgICAgICBpZiAocmVwZWF0WFBy
b3BlcnR5LnZhbHVlKCktPmlzVmFsdWVMaXN0KCkgfHwgcmVwZWF0WVByb3BlcnR5LnZhbHVlKCkt
PmlzVmFsdWVMaXN0KCkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGdldExheWVyZWRTaG9y
dGhhbmRWYWx1ZShiYWNrZ3JvdW5kUmVwZWF0U2hvcnRoYW5kKCkpKTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlcGVhdFhQcm9wZXJ0eS52YWx1ZSgpLT5jc3NU
ZXh0KCkpOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwotICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChyZXBlYXRZUHJvcGVydHkudmFsdWUoKS0+Y3NzVGV4dCgpKTsKLSAgICAgICAg
fQotICAgICAgICBpZiAocmVwZWF0WFByb3BlcnR5LmlzSW1wb3J0YW50KCkpCi0gICAgICAgICAg
ICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiICFpbXBvcnRhbnQiKTsKLSAgICAgICAgcmVzdWx0LmFw
cGVuZCgnOycpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChyZXBlYXRYUHJvcGVydHlJbmRl
eCAhPSAtMSkgewotICAgICAgICAgICAgaWYgKG51bURlY2xzKyspCi0gICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnICcpOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwcm9wZXJ0eUF0
KHJlcGVhdFhQcm9wZXJ0eUluZGV4KS5jc3NUZXh0KCkpOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChyZXBlYXRZUHJvcGVydHlJbmRleCAhPSAtMSkgewotICAgICAgICAgICAgaWYgKG51bURlY2xz
KyspCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwotICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChwcm9wZXJ0eUF0KHJlcGVhdFlQcm9wZXJ0eUluZGV4KS5jc3NUZXh0KCkpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgQVNTRVJUKCFudW1EZWNscyBeICFyZXN1bHQuaXNFbXB0
eSgpKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci19Ci0KLWJvb2wgU3R5bGVQcm9w
ZXJ0eVNldDo6aGFzQ1NTT01XcmFwcGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pc011dGFi
bGUgJiYgc3RhdGljX2Nhc3Q8Y29uc3QgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQqPih0aGlzKS0+
bV9jc3NvbVdyYXBwZXI7Ci19Ci0KLXZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6Om1lcmdl
QW5kT3ZlcnJpZGVPbkNvbmZsaWN0KGNvbnN0IFN0eWxlUHJvcGVydHlTZXQmIG90aGVyKQotewot
ICAgIHVuc2lnbmVkIHNpemUgPSBvdGhlci5wcm9wZXJ0eUNvdW50KCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgYWRkUGFyc2VkUHJvcGVydHkob3Ro
ZXIucHJvcGVydHlBdChpKS50b0NTU1Byb3BlcnR5KCkpOwotfQotCi12b2lkIFN0eWxlUHJvcGVy
dHlTZXQ6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PFVSTD4mIHVybHMsIFN0
eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpIGNvbnN0Ci17Ci0gICAgdW5zaWdu
ZWQgc2l6ZSA9IHByb3BlcnR5Q291bnQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBwcm9wZXJ0eUF0KGkpLnZhbHVlKCktPmFkZFN1YnJlc291cmNl
U3R5bGVVUkxzKHVybHMsIGNvbnRleHRTdHlsZVNoZWV0KTsKLX0KLQotYm9vbCBTdHlsZVByb3Bl
cnR5U2V0OjpoYXNGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKCkgY29uc3QKLXsKLSAgICB1
bnNpZ25lZCBzaXplID0gcHJvcGVydHlDb3VudCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKHByb3BlcnR5QXQoaSkudmFsdWUoKS0+aGFz
RmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcygpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gVGhpcyBpcyB0aGUgbGlzdCBvZiBw
cm9wZXJ0aWVzIHdlIHdhbnQgdG8gY29weSBpbiB0aGUgY29weUJsb2NrUHJvcGVydGllcygpIGZ1
bmN0aW9uLgotLy8gSXQgaXMgdGhlIGxpc3Qgb2YgQ1NTIHByb3BlcnRpZXMgdGhhdCBhcHBseSBz
cGVjaWFsbHkgdG8gYmxvY2stbGV2ZWwgZWxlbWVudHMuCi1zdGF0aWMgY29uc3QgQ1NTUHJvcGVy
dHlJRCBibG9ja1Byb3BlcnRpZXNbXSA9IHsKLSAgICBDU1NQcm9wZXJ0eU9ycGhhbnMsCi0gICAg
Q1NTUHJvcGVydHlPdmVyZmxvdywgLy8gVGhpcyBjYW4gYmUgYWxzbyBiZSBhcHBsaWVkIHRvIHJl
cGxhY2VkIGVsZW1lbnRzCi0gICAgQ1NTUHJvcGVydHlXZWJraXRBc3BlY3RSYXRpbywKLSAgICBD
U1NQcm9wZXJ0eVdlYmtpdENvbHVtbkNvdW50LAotICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1u
R2FwLAotICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yLAotICAgIENTU1Byb3Bl
cnR5V2Via2l0Q29sdW1uUnVsZVN0eWxlLAotICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVs
ZVdpZHRoLAotICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJlYWtCZWZvcmUsCi0gICAgQ1NT
UHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0FmdGVyLAotICAgIENTU1Byb3BlcnR5V2Via2l0Q29s
dW1uQnJlYWtJbnNpZGUsCi0gICAgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5XaWR0aCwKLSAgICBD
U1NQcm9wZXJ0eVBhZ2VCcmVha0FmdGVyLAotICAgIENTU1Byb3BlcnR5UGFnZUJyZWFrQmVmb3Jl
LAotICAgIENTU1Byb3BlcnR5UGFnZUJyZWFrSW5zaWRlLAotI2lmIEVOQUJMRShDU1NfUkVHSU9O
UykKLSAgICBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrQWZ0ZXIsCi0gICAgQ1NTUHJvcGVy
dHlXZWJraXRSZWdpb25CcmVha0JlZm9yZSwKLSAgICBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJy
ZWFrSW5zaWRlLAotI2VuZGlmCi0gICAgQ1NTUHJvcGVydHlUZXh0QWxpZ24sCi0jaWYgRU5BQkxF
KENTUzNfVEVYVCkKLSAgICBDU1NQcm9wZXJ0eVdlYmtpdFRleHRBbGlnbkxhc3QsCi0gICAgQ1NT
UHJvcGVydHlXZWJraXRUZXh0SnVzdGlmeSwKLSNlbmRpZiAvLyBDU1MzX1RFWFQKLSAgICBDU1NQ
cm9wZXJ0eVRleHRJbmRlbnQsCi0gICAgQ1NTUHJvcGVydHlXaWRvd3MKLX07Ci0KLXZvaWQgTXV0
YWJsZVN0eWxlUHJvcGVydHlTZXQ6OmNsZWFyKCkKLXsKLSAgICBtX3Byb3BlcnR5VmVjdG9yLmNs
ZWFyKCk7Ci19Ci0KLWNvbnN0IHVuc2lnbmVkIG51bUJsb2NrUHJvcGVydGllcyA9IFdURl9BUlJB
WV9MRU5HVEgoYmxvY2tQcm9wZXJ0aWVzKTsKLQotUGFzc1JlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0
eVNldD4gU3R5bGVQcm9wZXJ0eVNldDo6Y29weUJsb2NrUHJvcGVydGllcygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGNvcHlQcm9wZXJ0aWVzSW5TZXQoYmxvY2tQcm9wZXJ0aWVzLCBudW1CbG9ja1By
b3BlcnRpZXMpOwotfQotCi12b2lkIE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVCbG9j
a1Byb3BlcnRpZXMoKQotewotICAgIHJlbW92ZVByb3BlcnRpZXNJblNldChibG9ja1Byb3BlcnRp
ZXMsIG51bUJsb2NrUHJvcGVydGllcyk7Ci19Ci0KLWJvb2wgTXV0YWJsZVN0eWxlUHJvcGVydHlT
ZXQ6OnJlbW92ZVByb3BlcnRpZXNJblNldChjb25zdCBDU1NQcm9wZXJ0eUlEKiBzZXQsIHVuc2ln
bmVkIGxlbmd0aCkKLXsKLSAgICBpZiAobV9wcm9wZXJ0eVZlY3Rvci5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFsd2F5cyB1c2VkIHdp
dGggc3RhdGljIHNldHMgYW5kIGluIHRoYXQgY2FzZSBjb25zdHJ1Y3RpbmcgdGhlIGhhc2ggcmVw
ZWF0ZWRseSBpcyBwcmV0dHkgcG9pbnRsZXNzLgotICAgIEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4g
dG9SZW1vdmU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAg
ICAgICB0b1JlbW92ZS5hZGQoc2V0W2ldKTsKLQotICAgIFZlY3RvcjxDU1NQcm9wZXJ0eT4gbmV3
UHJvcGVydGllczsKLSAgICBuZXdQcm9wZXJ0aWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9w
cm9wZXJ0eVZlY3Rvci5zaXplKCkpOwotCi0gICAgdW5zaWduZWQgc2l6ZSA9IG1fcHJvcGVydHlW
ZWN0b3Iuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyArK24pIHsK
LSAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9wcm9wZXJ0eVZlY3Rvci5h
dChuKTsKLSAgICAgICAgLy8gTm90IHF1aXRlIHN1cmUgaWYgdGhlIGlzSW1wb3J0YW50IHRlc3Qg
aXMgbmVlZGVkIGJ1dCBpdCBtYXRjaGVzIHRoZSBleGlzdGluZyBiZWhhdmlvci4KLSAgICAgICAg
aWYgKCFwcm9wZXJ0eS5pc0ltcG9ydGFudCgpKSB7Ci0gICAgICAgICAgICBpZiAodG9SZW1vdmUu
Y29udGFpbnMocHJvcGVydHkuaWQoKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgbmV3UHJvcGVydGllcy5hcHBlbmQocHJvcGVydHkpOwotICAgIH0KLQot
ICAgIGJvb2wgY2hhbmdlZCA9IG5ld1Byb3BlcnRpZXMuc2l6ZSgpICE9IG1fcHJvcGVydHlWZWN0
b3Iuc2l6ZSgpOwotICAgIG1fcHJvcGVydHlWZWN0b3IgPSBuZXdQcm9wZXJ0aWVzOwotICAgIHJl
dHVybiBjaGFuZ2VkOwotfQotCi1pbnQgU3R5bGVQcm9wZXJ0eVNldDo6ZmluZFByb3BlcnR5SW5k
ZXgoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKSBjb25zdAotewotICAgIC8vIENvbnZlcnQgaGVy
ZSBwcm9wZXJ0eUlEIGludG8gYW4gdWludDE2X3QgdG8gY29tcGFyZSBpdCB3aXRoIHRoZSBtZXRh
ZGF0YSdzIG1fcHJvcGVydHlJRCB0byBhdm9pZAotICAgIC8vIHRoZSBjb21waWxlciBjb252ZXJ0
aW5nIGl0IHRvIGFuIGludCBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgbG9vcC4KLSAgICB1aW50MTZf
dCBpZCA9IHN0YXRpY19jYXN0PHVpbnQxNl90Pihwcm9wZXJ0eUlEKTsKLSAgICBmb3IgKGludCBu
ID0gcHJvcGVydHlDb3VudCgpIC0gMSA7IG4gPj0gMDsgLS1uKSB7Ci0gICAgICAgIGlmIChpZCA9
PSBwcm9wZXJ0eUF0KG4pLnByb3BlcnR5TWV0YWRhdGEoKS5tX3Byb3BlcnR5SUQpCi0gICAgICAg
ICAgICByZXR1cm4gbjsKLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQotCi1DU1NQcm9wZXJ0eSog
TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OmZpbmRDU1NQcm9wZXJ0eVdpdGhJRChDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQpCi17Ci0gICAgaW50IGZvdW5kUHJvcGVydHlJbmRleCA9IGZpbmRQcm9w
ZXJ0eUluZGV4KHByb3BlcnR5SUQpOwotICAgIGlmIChmb3VuZFByb3BlcnR5SW5kZXggPT0gLTEp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAmbV9wcm9wZXJ0eVZlY3Rvci5hdChmb3Vu
ZFByb3BlcnR5SW5kZXgpOwotfQotCi1ib29sIFN0eWxlUHJvcGVydHlTZXQ6OnByb3BlcnR5TWF0
Y2hlcyhDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IENTU1ZhbHVlKiBwcm9wZXJ0eVZh
bHVlKSBjb25zdAotewotICAgIGludCBmb3VuZFByb3BlcnR5SW5kZXggPSBmaW5kUHJvcGVydHlJ
bmRleChwcm9wZXJ0eUlEKTsKLSAgICBpZiAoZm91bmRQcm9wZXJ0eUluZGV4ID09IC0xKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHByb3BlcnR5QXQoZm91bmRQcm9wZXJ0eUlu
ZGV4KS52YWx1ZSgpLT5lcXVhbHMoKnByb3BlcnR5VmFsdWUpOwotfQotCi12b2lkIE11dGFibGVT
dHlsZVByb3BlcnR5U2V0OjpyZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhjb25zdCBTdHlsZVBy
b3BlcnR5U2V0KiBzdHlsZSkKLXsKLSAgICBWZWN0b3I8Q1NTUHJvcGVydHlJRD4gcHJvcGVydGll
c1RvUmVtb3ZlOwotICAgIHVuc2lnbmVkIHNpemUgPSBtX3Byb3BlcnR5VmVjdG9yLnNpemUoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIFByb3Bl
cnR5UmVmZXJlbmNlIHByb3BlcnR5ID0gcHJvcGVydHlBdChpKTsKLSAgICAgICAgaWYgKHN0eWxl
LT5wcm9wZXJ0eU1hdGNoZXMocHJvcGVydHkuaWQoKSwgcHJvcGVydHkudmFsdWUoKSkpCi0gICAg
ICAgICAgICBwcm9wZXJ0aWVzVG9SZW1vdmUuYXBwZW5kKHByb3BlcnR5LmlkKCkpOwotICAgIH0g
ICAgCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBtYXNzIHJlbW92YWwuCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnRpZXNUb1JlbW92ZS5zaXplKCk7ICsraSkKLSAg
ICAgICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydGllc1RvUmVtb3ZlW2ldKTsKLX0KLQotdm9pZCBN
dXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMoY29uc3Qg
Q29tcHV0ZWRTdHlsZUV4dHJhY3RvciogY29tcHV0ZWRTdHlsZSkKLXsKLSAgICBWZWN0b3I8Q1NT
UHJvcGVydHlJRD4gcHJvcGVydGllc1RvUmVtb3ZlOwotICAgIHVuc2lnbmVkIHNpemUgPSBtX3By
b3BlcnR5VmVjdG9yLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7Ci0gICAgICAgIFByb3BlcnR5UmVmZXJlbmNlIHByb3BlcnR5ID0gcHJvcGVydHlBdChp
KTsKLSAgICAgICAgaWYgKGNvbXB1dGVkU3R5bGUtPnByb3BlcnR5TWF0Y2hlcyhwcm9wZXJ0eS5p
ZCgpLCBwcm9wZXJ0eS52YWx1ZSgpKSkKLSAgICAgICAgICAgIHByb3BlcnRpZXNUb1JlbW92ZS5h
cHBlbmQocHJvcGVydHkuaWQoKSk7Ci0gICAgfSAgICAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgdXNlIG1hc3MgcmVtb3ZhbC4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVy
dGllc1RvUmVtb3ZlLnNpemUoKTsgKytpKQotICAgICAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0
aWVzVG9SZW1vdmVbaV0pOwotfQotCi1QYXNzUmVmPE11dGFibGVTdHlsZVByb3BlcnR5U2V0PiBT
dHlsZVByb3BlcnR5U2V0OjptdXRhYmxlQ29weSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQoKnRoaXMpKTsKLX0KLQotUGFzc1JlZjxN
dXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gU3R5bGVQcm9wZXJ0eVNldDo6Y29weVByb3BlcnRpZXNJ
blNldChjb25zdCBDU1NQcm9wZXJ0eUlEKiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKLXsK
LSAgICBWZWN0b3I8Q1NTUHJvcGVydHksIDI1Nj4gbGlzdDsKLSAgICBsaXN0LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NT
VmFsdWUoc2V0W2ldKTsKLSAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbGlzdC5hcHBl
bmQoQ1NTUHJvcGVydHkoc2V0W2ldLCB2YWx1ZS5yZWxlYXNlKCksIGZhbHNlKSk7Ci0gICAgfQot
ICAgIHJldHVybiBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKGxpc3QuZGF0YSgpLCBs
aXN0LnNpemUoKSk7Ci19Ci0KLVByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiogTXV0YWJs
ZVN0eWxlUHJvcGVydHlTZXQ6OmNzc1N0eWxlRGVjbGFyYXRpb24oKQotewotICAgIHJldHVybiBt
X2Nzc29tV3JhcHBlci5nZXQoKTsKLX0KLQotQ1NTU3R5bGVEZWNsYXJhdGlvbiogTXV0YWJsZVN0
eWxlUHJvcGVydHlTZXQ6OmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKQotewotICAgIGlmICht
X2Nzc29tV3JhcHBlcikgewotICAgICAgICBBU1NFUlQoIXN0YXRpY19jYXN0PENTU1N0eWxlRGVj
bGFyYXRpb24qPihtX2Nzc29tV3JhcHBlci5nZXQoKSktPnBhcmVudFJ1bGUoKSk7Ci0gICAgICAg
IEFTU0VSVCghbV9jc3NvbVdyYXBwZXItPnBhcmVudEVsZW1lbnQoKSk7Ci0gICAgICAgIHJldHVy
biBtX2Nzc29tV3JhcHBlci5nZXQoKTsKLSAgICB9Ci0gICAgbV9jc3NvbVdyYXBwZXIgPSBhZG9w
dFB0cihuZXcgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKHRoaXMpKTsKLSAgICByZXR1
cm4gbV9jc3NvbVdyYXBwZXIuZ2V0KCk7Ci19Ci0KLUNTU1N0eWxlRGVjbGFyYXRpb24qIE11dGFi
bGVTdHlsZVByb3BlcnR5U2V0OjplbnN1cmVJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uKFN0eWxl
ZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQpCi17Ci0gICAgaWYgKG1fY3Nzb21XcmFwcGVyKSB7Ci0g
ICAgICAgIEFTU0VSVChtX2Nzc29tV3JhcHBlci0+cGFyZW50RWxlbWVudCgpID09IHBhcmVudEVs
ZW1lbnQpOwotICAgICAgICByZXR1cm4gbV9jc3NvbVdyYXBwZXIuZ2V0KCk7Ci0gICAgfQotICAg
IG1fY3Nzb21XcmFwcGVyID0gYWRvcHRQdHIobmV3IElubGluZUNTU1N0eWxlRGVjbGFyYXRpb24o
dGhpcywgcGFyZW50RWxlbWVudCkpOwotICAgIHJldHVybiBtX2Nzc29tV3JhcHBlci5nZXQoKTsK
LX0KLQotdW5zaWduZWQgU3R5bGVQcm9wZXJ0eVNldDo6YXZlcmFnZVNpemVJbkJ5dGVzKCkKLXsK
LSAgICAvLyBQbGVhc2UgdXBkYXRlIHRoaXMgaWYgdGhlIHN0b3JhZ2Ugc2NoZW1lIGNoYW5nZXMg
c28gdGhhdCB0aGlzIGxvbmdlciByZWZsZWN0cyB0aGUgYWN0dWFsIHNpemUuCi0gICAgcmV0dXJu
IHNpemVGb3JJbW11dGFibGVTdHlsZVByb3BlcnR5U2V0V2l0aFByb3BlcnR5Q291bnQoNCk7Ci19
Ci0KLS8vIFNlZSB0aGUgZnVuY3Rpb24gYWJvdmUgaWYgeW91IG5lZWQgdG8gdXBkYXRlIHRoaXMu
Ci1zdHJ1Y3QgU2FtZVNpemVBc1N0eWxlUHJvcGVydHlTZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxT
YW1lU2l6ZUFzU3R5bGVQcm9wZXJ0eVNldD4gewotICAgIHVuc2lnbmVkIGJpdGZpZWxkOwotfTsK
LUNPTVBJTEVfQVNTRVJUKHNpemVvZihTdHlsZVByb3BlcnR5U2V0KSA9PSBzaXplb2YoU2FtZVNp
emVBc1N0eWxlUHJvcGVydHlTZXQpLCBzdHlsZV9wcm9wZXJ0eV9zZXRfc2hvdWxkX3N0YXlfc21h
bGwpOwotCi0jaWZuZGVmIE5ERUJVRwotdm9pZCBTdHlsZVByb3BlcnR5U2V0OjpzaG93U3R5bGUo
KQotewotICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIGFzVGV4dCgpLmFzY2lpKCkuZGF0YSgp
KTsKLX0KLSNlbmRpZgotCi1QYXNzUmVmPE11dGFibGVTdHlsZVByb3BlcnR5U2V0PiBNdXRhYmxl
U3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKLXsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldChjc3NQYXJz
ZXJNb2RlKSk7Ci19Ci0KLVBhc3NSZWY8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IE11dGFibGVT
dHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnRpZXMsIHVu
c2lnbmVkIGNvdW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE11dGFibGVTdHlsZVBy
b3BlcnR5U2V0KHByb3BlcnRpZXMsIGNvdW50KSk7Ci19Ci0KLVN0cmluZyBTdHlsZVByb3BlcnR5
U2V0OjpQcm9wZXJ0eVJlZmVyZW5jZTo6Y3NzTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdl
dFByb3BlcnR5TmFtZVN0cmluZyhpZCgpKTsKLX0KLQotU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6
OlByb3BlcnR5UmVmZXJlbmNlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICBTdHJpbmdCdWlsZGVy
IHJlc3VsdDsKLSAgICByZXN1bHQuYXBwZW5kKGNzc05hbWUoKSk7Ci0gICAgcmVzdWx0LmFwcGVu
ZExpdGVyYWwoIjogIik7Ci0gICAgcmVzdWx0LmFwcGVuZChwcm9wZXJ0eVZhbHVlKCktPmNzc1Rl
eHQoKSk7Ci0gICAgaWYgKGlzSW1wb3J0YW50KCkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmRMaXRl
cmFsKCIgIWltcG9ydGFudCIpOwotICAgIHJlc3VsdC5hcHBlbmQoJzsnKTsKLSAgICByZXR1cm4g
cmVzdWx0LnRvU3RyaW5nKCk7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5oCShyZXZpc2lvbiAxNTk4NDEpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDI3NyArMCwwIEBACi0vKgotICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDEyLCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBJ
bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTdHlsZVByb3Bl
cnR5U2V0X2gKLSNkZWZpbmUgU3R5bGVQcm9wZXJ0eVNldF9oCi0KLSNpbmNsdWRlICJDU1NQYXJz
ZXJNb2RlLmgiCi0jaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NQ
cm9wZXJ0eS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NW
YWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENTU1J1bGU7Ci1jbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9u
OwotY2xhc3MgQ29tcHV0ZWRTdHlsZUV4dHJhY3RvcjsKLWNsYXNzIEltbXV0YWJsZVN0eWxlUHJv
cGVydHlTZXQ7Ci1jbGFzcyBVUkw7Ci1jbGFzcyBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDsKLWNs
YXNzIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjsKLWNsYXNzIFN0eWxlZEVsZW1lbnQ7
Ci1jbGFzcyBTdHlsZVByb3BlcnR5U2hvcnRoYW5kOwotY2xhc3MgU3R5bGVTaGVldENvbnRlbnRz
OwotCi1jbGFzcyBTdHlsZVByb3BlcnR5U2V0IDogcHVibGljIFJlZkNvdW50ZWQ8U3R5bGVQcm9w
ZXJ0eVNldD4gewotICAgIGZyaWVuZCBjbGFzcyBQcm9wZXJ0eVJlZmVyZW5jZTsKLXB1YmxpYzoK
LSAgICAvLyBPdmVycmlkZSBSZWZDb3VudGVkJ3MgZGVyZWYoKSB0byBlbnN1cmUgb3BlcmF0b3Ig
ZGVsZXRlIGlzIGNhbGxlZCBvbgotICAgIC8vIHRoZSBhcHByb3ByaWF0ZSBzdWJjbGFzcyB0eXBl
LgotICAgIHZvaWQgZGVyZWYoKTsKLQotICAgIGNsYXNzIFByb3BlcnR5UmVmZXJlbmNlIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIFByb3BlcnR5UmVmZXJlbmNlKGNvbnN0IFN0eWxlUHJvcGVydHlT
ZXQmIHByb3BlcnR5U2V0LCB1bnNpZ25lZCBpbmRleCkKLSAgICAgICAgICAgIDogbV9wcm9wZXJ0
eVNldChwcm9wZXJ0eVNldCkKLSAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKLSAgICAgICAg
ewotICAgICAgICB9Ci0KLSAgICAgICAgQ1NTUHJvcGVydHlJRCBpZCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KHByb3BlcnR5TWV0YWRhdGEoKS5tX3Byb3BlcnR5
SUQpOyB9Ci0gICAgICAgIENTU1Byb3BlcnR5SUQgc2hvcnRoYW5kSUQoKSBjb25zdCB7IHJldHVy
biBwcm9wZXJ0eU1ldGFkYXRhKCkuc2hvcnRoYW5kSUQoKTsgfQotCi0gICAgICAgIGJvb2wgaXNJ
bXBvcnRhbnQoKSBjb25zdCB7IHJldHVybiBwcm9wZXJ0eU1ldGFkYXRhKCkubV9pbXBvcnRhbnQ7
IH0KLSAgICAgICAgYm9vbCBpc0luaGVyaXRlZCgpIGNvbnN0IHsgcmV0dXJuIHByb3BlcnR5TWV0
YWRhdGEoKS5tX2luaGVyaXRlZDsgfQotICAgICAgICBib29sIGlzSW1wbGljaXQoKSBjb25zdCB7
IHJldHVybiBwcm9wZXJ0eU1ldGFkYXRhKCkubV9pbXBsaWNpdDsgfQotCi0gICAgICAgIFN0cmlu
ZyBjc3NOYW1lKCkgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAg
ICAgICAgY29uc3QgQ1NTVmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gcHJvcGVydHlWYWx1
ZSgpOyB9Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdHJ5IHRvIHJlbW92ZSB0aGlzIG11
dGFibGUgb3ZlcmxvYWQuCi0gICAgICAgIENTU1ZhbHVlKiB2YWx1ZSgpIHsgcmV0dXJuIGNvbnN0
X2Nhc3Q8Q1NTVmFsdWUqPihwcm9wZXJ0eVZhbHVlKCkpOyB9Ci0KLSAgICAgICAgLy8gRklYTUU6
IFJlbW92ZSB0aGlzLgotICAgICAgICBDU1NQcm9wZXJ0eSB0b0NTU1Byb3BlcnR5KCkgY29uc3Qg
eyByZXR1cm4gQ1NTUHJvcGVydHkocHJvcGVydHlNZXRhZGF0YSgpLCBjb25zdF9jYXN0PENTU1Zh
bHVlKj4ocHJvcGVydHlWYWx1ZSgpKSk7IH0KLSAgICAgICAgY29uc3QgU3R5bGVQcm9wZXJ0eU1l
dGFkYXRhJiBwcm9wZXJ0eU1ldGFkYXRhKCkgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAg
ICBjb25zdCBDU1NWYWx1ZSogcHJvcGVydHlWYWx1ZSgpIGNvbnN0OwotCi0gICAgICAgIGNvbnN0
IFN0eWxlUHJvcGVydHlTZXQmIG1fcHJvcGVydHlTZXQ7Ci0gICAgICAgIHVuc2lnbmVkIG1faW5k
ZXg7Ci0gICAgfTsKLQotICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQoKSBjb25zdDsKLSAgICBi
b29sIGlzRW1wdHkoKSBjb25zdDsKLSAgICBQcm9wZXJ0eVJlZmVyZW5jZSBwcm9wZXJ0eUF0KHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBQcm9wZXJ0eVJlZmVyZW5jZSgqdGhpcywgaW5k
ZXgpOyB9Ci0KLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKENT
U1Byb3BlcnR5SUQpIGNvbnN0OwotICAgIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3Bl
cnR5SUQpIGNvbnN0OwotICAgIGJvb2wgcHJvcGVydHlJc0ltcG9ydGFudChDU1NQcm9wZXJ0eUlE
KSBjb25zdDsKLSAgICBTdHJpbmcgZ2V0UHJvcGVydHlTaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCkg
Y29uc3Q7Ci0gICAgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoQ1NTUHJvcGVydHlJRCkgY29uc3Q7
Ci0KLSAgICBQYXNzUmVmPE11dGFibGVTdHlsZVByb3BlcnR5U2V0PiBjb3B5QmxvY2tQcm9wZXJ0
aWVzKCkgY29uc3Q7Ci0KLSAgICBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxDU1NQYXJzZXJNb2RlPihtX2Nzc1BhcnNlck1vZGUpOyB9Ci0K
LSAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PFVSTD4mLCBTdHls
ZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KSBjb25zdDsKLQotICAgIFBhc3NSZWY8
TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IG11dGFibGVDb3B5KCkgY29uc3Q7Ci0gICAgUGFzc1Jl
ZjxJbW11dGFibGVTdHlsZVByb3BlcnR5U2V0PiBpbW11dGFibGVDb3B5SWZOZWVkZWQoKSBjb25z
dDsKLQotICAgIFBhc3NSZWY8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IGNvcHlQcm9wZXJ0aWVz
SW5TZXQoY29uc3QgQ1NTUHJvcGVydHlJRCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0Owot
ICAgIAotICAgIFN0cmluZyBhc1RleHQoKSBjb25zdDsKLQotICAgIGJvb2wgaXNNdXRhYmxlKCkg
Y29uc3QgeyByZXR1cm4gbV9pc011dGFibGU7IH0KLSAgICBib29sIGhhc0NTU09NV3JhcHBlcigp
IGNvbnN0OwotCi0gICAgYm9vbCBoYXNGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKCkgY29u
c3Q7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgYXZlcmFnZVNpemVJbkJ5dGVzKCk7Ci0KLSNpZm5k
ZWYgTkRFQlVHCi0gICAgdm9pZCBzaG93U3R5bGUoKTsKLSNlbmRpZgotCi0gICAgYm9vbCBwcm9w
ZXJ0eU1hdGNoZXMoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NTVmFsdWUqKSBjb25zdDsKLQotcHJv
dGVjdGVkOgotICAgIFN0eWxlUHJvcGVydHlTZXQoQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2Rl
KQotICAgICAgICA6IG1fY3NzUGFyc2VyTW9kZShjc3NQYXJzZXJNb2RlKQotICAgICAgICAsIG1f
aXNNdXRhYmxlKHRydWUpCi0gICAgICAgICwgbV9hcnJheVNpemUoMCkKLSAgICB7IH0KLQotICAg
IFN0eWxlUHJvcGVydHlTZXQoQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCB1bnNpZ25lZCBp
bW11dGFibGVBcnJheVNpemUpCi0gICAgICAgIDogbV9jc3NQYXJzZXJNb2RlKGNzc1BhcnNlck1v
ZGUpCi0gICAgICAgICwgbV9pc011dGFibGUoZmFsc2UpCi0gICAgICAgICwgbV9hcnJheVNpemUo
aW1tdXRhYmxlQXJyYXlTaXplKQotICAgIHsgfQotCi0gICAgaW50IGZpbmRQcm9wZXJ0eUluZGV4
KENTU1Byb3BlcnR5SUQpIGNvbnN0OwotCi0gICAgdW5zaWduZWQgbV9jc3NQYXJzZXJNb2RlIDog
MjsKLSAgICBtdXRhYmxlIHVuc2lnbmVkIG1faXNNdXRhYmxlIDogMTsKLSAgICB1bnNpZ25lZCBt
X2FycmF5U2l6ZSA6IDI5OwotICAgIAotcHJpdmF0ZToKLSAgICBTdHJpbmcgZ2V0U2hvcnRoYW5k
VmFsdWUoY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYpIGNvbnN0OwotICAgIFN0cmluZyBn
ZXRDb21tb25WYWx1ZShjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJikgY29uc3Q7Ci0gICAg
ZW51bSBDb21tb25WYWx1ZU1vZGUgeyBPbWl0VW5jb21tb25WYWx1ZXMsIFJldHVybk51bGxPblVu
Y29tbW9uVmFsdWVzIH07Ci0gICAgU3RyaW5nIGJvcmRlclByb3BlcnR5VmFsdWUoQ29tbW9uVmFs
dWVNb2RlKSBjb25zdDsKLSAgICBTdHJpbmcgZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0
IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmKSBjb25zdDsKLSAgICBTdHJpbmcgZ2V0NFZhbHVlcyhj
b25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJikgY29uc3Q7Ci0gICAgU3RyaW5nIGJvcmRlclNw
YWNpbmdWYWx1ZShjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJikgY29uc3Q7Ci0gICAgU3Ry
aW5nIGZvbnRWYWx1ZSgpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kRm9udExvbmdoYW5kVmFsdWVJ
ZkV4cGxpY2l0KENTU1Byb3BlcnR5SUQsIFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgU3RyaW5nJiB2
YWx1ZSkgY29uc3Q7Ci0KLSAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uOwotfTsKLQotY2xhc3MgSW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCA6IHB1YmxpYyBT
dHlsZVByb3BlcnR5U2V0IHsKLXB1YmxpYzoKLSAgICB+SW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNl
dCgpOwotICAgIHN0YXRpYyBQYXNzUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IGNyZWF0
ZShjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydGllcywgdW5zaWduZWQgY291bnQsIENTU1BhcnNl
ck1vZGUpOwotCi0gICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1f
YXJyYXlTaXplOyB9Ci0KLSAgICBjb25zdCBDU1NWYWx1ZSoqIHZhbHVlQXJyYXkoKSBjb25zdDsK
LSAgICBjb25zdCBTdHlsZVByb3BlcnR5TWV0YWRhdGEqIG1ldGFkYXRhQXJyYXkoKSBjb25zdDsK
LQotICAgIHZvaWQqIG1fc3RvcmFnZTsKLQotcHJpdmF0ZToKLSAgICBJbW11dGFibGVTdHlsZVBy
b3BlcnR5U2V0KGNvbnN0IENTU1Byb3BlcnR5KiwgdW5zaWduZWQgY291bnQsIENTU1BhcnNlck1v
ZGUpOwotfTsKLQotaW5saW5lIGNvbnN0IENTU1ZhbHVlKiogSW1tdXRhYmxlU3R5bGVQcm9wZXJ0
eVNldDo6dmFsdWVBcnJheSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgQ1NTVmFsdWUqKj4oY29uc3RfY2FzdDxjb25zdCB2b2lkKio+KCgmKHRoaXMtPm1fc3Rv
cmFnZSkpKSk7Ci19Ci0KLWlubGluZSBjb25zdCBTdHlsZVByb3BlcnR5TWV0YWRhdGEqIEltbXV0
YWJsZVN0eWxlUHJvcGVydHlTZXQ6Om1ldGFkYXRhQXJyYXkoKSBjb25zdAotewotICAgIHJldHVy
biByZWludGVycHJldF9jYXN0X3B0cjxjb25zdCBTdHlsZVByb3BlcnR5TWV0YWRhdGEqPigmcmVp
bnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgY2hhcio+KCYodGhpcy0+bV9zdG9yYWdlKSlbbV9hcnJh
eVNpemUgKiBzaXplb2YoQ1NTVmFsdWUqKV0pOwotfQotCi1jbGFzcyBNdXRhYmxlU3R5bGVQcm9w
ZXJ0eVNldCA6IHB1YmxpYyBTdHlsZVByb3BlcnR5U2V0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gY3JlYXRlKENTU1BhcnNlck1vZGUgPSBD
U1NRdWlya3NNb2RlKTsKLSAgICBzdGF0aWMgUGFzc1JlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNl
dD4gY3JlYXRlKGNvbnN0IENTU1Byb3BlcnR5KiBwcm9wZXJ0aWVzLCB1bnNpZ25lZCBjb3VudCk7
Ci0KLSAgICB+TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQoKTsKLQotICAgIHVuc2lnbmVkIHByb3Bl
cnR5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5VmVjdG9yLnNpemUoKTsgfQotCi0g
ICAgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBjc3NTdHlsZURlY2xhcmF0aW9uKCk7
Ci0KLSAgICB2b2lkIGFkZFBhcnNlZFByb3BlcnRpZXMoY29uc3QgVmVjdG9yPENTU1Byb3BlcnR5
PiYpOwotICAgIHZvaWQgYWRkUGFyc2VkUHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmKTsKLQot
ICAgIC8vIFRoZXNlIGV4cGFuZCBzaG9ydGhhbmQgcHJvcGVydGllcyBpbnRvIG11bHRpcGxlIHBy
b3BlcnRpZXMuCi0gICAgYm9vbCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJp
bmcmIHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlLCBTdHlsZVNoZWV0Q29udGVudHMqIGNv
bnRleHRTdHlsZVNoZWV0ID0gMCk7Ci0gICAgdm9pZCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
LCBQYXNzUmVmUHRyPENTU1ZhbHVlPiwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7Ci0KLSAgICAv
LyBUaGVzZSBkbyBub3QuIEZJWE1FOiBUaGlzIGlzIHRvbyBtZXNzeSwgd2UgY2FuIGRvIGJldHRl
ci4KLSAgICBib29sIHNldFByb3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlSUQgaWRlbnRp
ZmllciwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlELCBDU1NQcm9wZXJ0eUlEIGlkZW50aWZpZXIsIGJvb2wgaW1wb3J0YW50ID0gZmFs
c2UpOwotICAgIHZvaWQgYXBwZW5kUHJlZml4aW5nVmFyaWFudFByb3BlcnR5KGNvbnN0IENTU1By
b3BlcnR5Jik7Ci0gICAgdm9pZCBzZXRQcmVmaXhpbmdWYXJpYW50UHJvcGVydHkoY29uc3QgQ1NT
UHJvcGVydHkmKTsKLSAgICB2b2lkIHNldFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5JiwgQ1NT
UHJvcGVydHkqIHNsb3QgPSAwKTsKLQotICAgIGJvb2wgcmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCwgU3RyaW5nKiByZXR1cm5UZXh0ID0gMCk7Ci0gICAgdm9pZCByZW1vdmVQcmVmaXhlZE9y
VW5wcmVmaXhlZFByb3BlcnR5KENTU1Byb3BlcnR5SUQpOwotICAgIHZvaWQgcmVtb3ZlQmxvY2tQ
cm9wZXJ0aWVzKCk7Ci0gICAgYm9vbCByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3QgQ1NTUHJv
cGVydHlJRCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gRklYTUU6IFRoZXNlIHR3
byBjYW4gYmUgbW92ZWQgdG8gRWRpdGluZ1N0eWxlLmNwcAotICAgIHZvaWQgcmVtb3ZlRXF1aXZh
bGVudFByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCopOwotICAgIHZvaWQgcmVtb3Zl
RXF1aXZhbGVudFByb3BlcnRpZXMoY29uc3QgQ29tcHV0ZWRTdHlsZUV4dHJhY3RvciopOwotCi0g
ICAgdm9pZCBtZXJnZUFuZE92ZXJyaWRlT25Db25mbGljdChjb25zdCBTdHlsZVByb3BlcnR5U2V0
Jik7Ci0KLSAgICB2b2lkIGNsZWFyKCk7Ci0gICAgdm9pZCBwYXJzZURlY2xhcmF0aW9uKGNvbnN0
IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlvbiwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5
bGVTaGVldCk7Ci0KLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBlbnN1cmVDU1NTdHlsZURlY2xh
cmF0aW9uKCk7Ci0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogZW5zdXJlSW5saW5lQ1NTU3R5bGVE
ZWNsYXJhdGlvbihTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50KTsKLQotICAgIFZlY3RvcjxD
U1NQcm9wZXJ0eSwgND4gbV9wcm9wZXJ0eVZlY3RvcjsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNp
dCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldChDU1NQYXJzZXJNb2RlKTsKLSAgICBleHBsaWNpdCBN
dXRhYmxlU3R5bGVQcm9wZXJ0eVNldChjb25zdCBTdHlsZVByb3BlcnR5U2V0Jik7Ci0gICAgTXV0
YWJsZVN0eWxlUHJvcGVydHlTZXQoY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnRpZXMsIHVuc2ln
bmVkIGNvdW50KTsKLQotICAgIGJvb2wgcmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCk7Ci0gICAgQ1NTUHJvcGVydHkqIGZpbmRDU1NQcm9wZXJ0eVdpdGhJRChDU1NQcm9wZXJ0
eUlEKTsKLSAgICBPd25QdHI8UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uPiBtX2Nzc29t
V3JhcHBlcjsKLQotICAgIGZyaWVuZCBjbGFzcyBTdHlsZVByb3BlcnR5U2V0OwotfTsKLQotaW5s
aW5lIGNvbnN0IFN0eWxlUHJvcGVydHlNZXRhZGF0YSYgU3R5bGVQcm9wZXJ0eVNldDo6UHJvcGVy
dHlSZWZlcmVuY2U6OnByb3BlcnR5TWV0YWRhdGEoKSBjb25zdAotewotICAgIGlmIChtX3Byb3Bl
cnR5U2V0LmlzTXV0YWJsZSgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTXV0
YWJsZVN0eWxlUHJvcGVydHlTZXQmPihtX3Byb3BlcnR5U2V0KS5tX3Byb3BlcnR5VmVjdG9yLmF0
KG1faW5kZXgpLm1ldGFkYXRhKCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEltbXV0
YWJsZVN0eWxlUHJvcGVydHlTZXQmPihtX3Byb3BlcnR5U2V0KS5tZXRhZGF0YUFycmF5KClbbV9p
bmRleF07Ci19Ci0KLWlubGluZSBjb25zdCBDU1NWYWx1ZSogU3R5bGVQcm9wZXJ0eVNldDo6UHJv
cGVydHlSZWZlcmVuY2U6OnByb3BlcnR5VmFsdWUoKSBjb25zdAotewotICAgIGlmIChtX3Byb3Bl
cnR5U2V0LmlzTXV0YWJsZSgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTXV0
YWJsZVN0eWxlUHJvcGVydHlTZXQmPihtX3Byb3BlcnR5U2V0KS5tX3Byb3BlcnR5VmVjdG9yLmF0
KG1faW5kZXgpLnZhbHVlKCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEltbXV0YWJs
ZVN0eWxlUHJvcGVydHlTZXQmPihtX3Byb3BlcnR5U2V0KS52YWx1ZUFycmF5KClbbV9pbmRleF07
Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBTdHlsZVByb3BlcnR5U2V0Ojpwcm9wZXJ0eUNvdW50KCkg
Y29uc3QKLXsKLSAgICBpZiAobV9pc011dGFibGUpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCo+KHRoaXMpLT5tX3Byb3BlcnR5VmVjdG9y
LnNpemUoKTsKLSAgICByZXR1cm4gbV9hcnJheVNpemU7Ci19Ci0KLWlubGluZSBib29sIFN0eWxl
UHJvcGVydHlTZXQ6OmlzRW1wdHkoKSBjb25zdAotewotICAgIHJldHVybiAhcHJvcGVydHlDb3Vu
dCgpOwotfQotCi1pbmxpbmUgdm9pZCBTdHlsZVByb3BlcnR5U2V0OjpkZXJlZigpCi17Ci0gICAg
aWYgKCFkZXJlZkJhc2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faXNNdXRhYmxl
KQotICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQqPih0
aGlzKTsKLSAgICBlbHNlCi0gICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxJbW11dGFibGVTdHls
ZVByb3BlcnR5U2V0Kj4odGhpcyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIFN0eWxlUHJvcGVydHlTZXRfaApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcAkocmV2aXNpb24gMTU5ODQyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAKICNpbmNsdWRlICJT
dHlsZUZvbnRTaXplRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJbWFnZS5o
IgogI2luY2x1ZGUgIlN0eWxlUGVuZGluZ0ltYWdlLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0
eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgIlN0eWxlUHJv
cGVydHlTaG9ydGhhbmQuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJTdHls
ZVJ1bGVJbXBvcnQuaCIKQEAgLTIzMiwxMSArMjMyLDExIEBAIGlubGluZSB2b2lkIFN0eWxlUmVz
b2x2ZXI6OlN0YXRlOjpjbGVhcigKICNlbmRpZgogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Ok1h
dGNoUmVzdWx0OjphZGRNYXRjaGVkUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0JiBw
cm9wZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUsIFByb3Bl
cnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGUpCit2b2lkIFN0eWxlUmVzb2x2
ZXI6Ok1hdGNoUmVzdWx0OjphZGRNYXRjaGVkUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnRp
ZXMmIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgbGlua01hdGNoVHlwZSwg
UHJvcGVydHlXaGl0ZWxpc3RUeXBlIHByb3BlcnR5V2hpdGVsaXN0VHlwZSkKIHsKICAgICBtYXRj
aGVkUHJvcGVydGllcy5ncm93KG1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSArIDEpOwogICAgIFN0
eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBuZXdQcm9wZXJ0aWVzID0gbWF0Y2hlZFBy
b3BlcnRpZXMubGFzdCgpOwotICAgIG5ld1Byb3BlcnRpZXMucHJvcGVydGllcyA9IGNvbnN0X2Nh
c3Q8U3R5bGVQcm9wZXJ0eVNldCo+KCZwcm9wZXJ0aWVzKTsKKyAgICBuZXdQcm9wZXJ0aWVzLnBy
b3BlcnRpZXMgPSBjb25zdF9jYXN0PFN0eWxlUHJvcGVydGllcyo+KCZwcm9wZXJ0aWVzKTsKICAg
ICBuZXdQcm9wZXJ0aWVzLmxpbmtNYXRjaFR5cGUgPSBsaW5rTWF0Y2hUeXBlOwogICAgIG5ld1By
b3BlcnRpZXMud2hpdGVsaXN0VHlwZSA9IHByb3BlcnR5V2hpdGVsaXN0VHlwZTsKICAgICBtYXRj
aGVkUnVsZXMuYXBwZW5kKHJ1bGUpOwpAQCAtOTQ2LDcgKzk0Niw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmkKICAgICBpZiAoaW5pdGlhbExpc3RTaXplID4gMCAm
JiBsaXN0WzBdLmtleSgpKSB7CiAgICAgICAgIHN0YXRpYyBTdHlsZUtleWZyYW1lKiB6ZXJvUGVy
Y2VudEtleWZyYW1lOwogICAgICAgICBpZiAoIXplcm9QZXJjZW50S2V5ZnJhbWUpIHsKLSAgICAg
ICAgICAgIHplcm9QZXJjZW50S2V5ZnJhbWUgPSBTdHlsZUtleWZyYW1lOjpjcmVhdGUoTXV0YWJs
ZVN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpKS5sZWFrUmVmKCk7CisgICAgICAgICAgICB6ZXJv
UGVyY2VudEtleWZyYW1lID0gU3R5bGVLZXlmcmFtZTo6Y3JlYXRlKE11dGFibGVTdHlsZVByb3Bl
cnRpZXM6OmNyZWF0ZSgpKS5sZWFrUmVmKCk7CiAgICAgICAgICAgICB6ZXJvUGVyY2VudEtleWZy
YW1lLT5zZXRLZXlUZXh0KCIwJSIpOwogICAgICAgICB9CiAgICAgICAgIEtleWZyYW1lVmFsdWUg
a2V5ZnJhbWVWYWx1ZSgwLCAwKTsKQEAgLTk1OCw3ICs5NTgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pCiAgICAgaWYgKGluaXRpYWxMaXN0U2l6ZSA+IDAgJiYg
KGxpc3RbbGlzdC5zaXplKCkgLSAxXS5rZXkoKSAhPSAxKSkgewogICAgICAgICBzdGF0aWMgU3R5
bGVLZXlmcmFtZSogaHVuZHJlZFBlcmNlbnRLZXlmcmFtZTsKICAgICAgICAgaWYgKCFodW5kcmVk
UGVyY2VudEtleWZyYW1lKSB7Ci0gICAgICAgICAgICBodW5kcmVkUGVyY2VudEtleWZyYW1lID0g
U3R5bGVLZXlmcmFtZTo6Y3JlYXRlKE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKSku
bGVha1JlZigpOworICAgICAgICAgICAgaHVuZHJlZFBlcmNlbnRLZXlmcmFtZSA9IFN0eWxlS2V5
ZnJhbWU6OmNyZWF0ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKSkubGVha1JlZigp
OwogICAgICAgICAgICAgaHVuZHJlZFBlcmNlbnRLZXlmcmFtZS0+c2V0S2V5VGV4dCgiMTAwJSIp
OwogICAgICAgICB9CiAgICAgICAgIEtleWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1ZSgxLCAwKTsK
QEAgLTE1MjEsMTQgKzE1MjEsMTQgQEAgTGVuZ3RoIFN0eWxlUmVzb2x2ZXI6OmNvbnZlcnRUb0Zs
b2F0TGVuZwogfQogCiB0ZW1wbGF0ZSA8U3R5bGVSZXNvbHZlcjo6U3R5bGVBcHBsaWNhdGlvblBh
c3MgcGFzcz4KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxl
UHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgYm9vbCBpc0ltcG9ydGFu
dCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgcHJvcGVydHlXaGl0
ZWxpc3RUeXBlKQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnRpZXMoY29uc3QgU3R5
bGVQcm9wZXJ0aWVzKiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaXNJbXBvcnRh
bnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlIHByb3BlcnR5V2hp
dGVsaXN0VHlwZSkKIHsKICAgICBBU1NFUlQoKHByb3BlcnR5V2hpdGVsaXN0VHlwZSAhPSBQcm9w
ZXJ0eVdoaXRlbGlzdFJlZ2lvbikgfHwgbV9zdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCkpOwogICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxQcm9jZXNzUnVsZSgmZG9jdW1lbnQoKSwgcnVsZSwgKnRoaXMpOwogCiAg
ICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IHByb3BlcnRpZXMtPnByb3BlcnR5Q291bnQoKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsgKytpKSB7Ci0gICAg
ICAgIFN0eWxlUHJvcGVydHlTZXQ6OlByb3BlcnR5UmVmZXJlbmNlIGN1cnJlbnQgPSBwcm9wZXJ0
aWVzLT5wcm9wZXJ0eUF0KGkpOworICAgICAgICBTdHlsZVByb3BlcnRpZXM6OlByb3BlcnR5UmVm
ZXJlbmNlIGN1cnJlbnQgPSBwcm9wZXJ0aWVzLT5wcm9wZXJ0eUF0KGkpOwogICAgICAgICBpZiAo
aXNJbXBvcnRhbnQgIT0gY3VycmVudC5pc0ltcG9ydGFudCgpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIGlmIChpbmhlcml0ZWRPbmx5ICYmICFjdXJyZW50LmlzSW5oZXJpdGVkKCkp
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAkocmV2aXNpb24gMTU5ODQyKQor
KysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
OTIsNyArOTIsNyBAQCBjbGFzcyBTdHlsZVNjb3BlUmVzb2x2ZXI7CiBjbGFzcyBTdHlsZUltYWdl
OwogY2xhc3MgU3R5bGVLZXlmcmFtZTsKIGNsYXNzIFN0eWxlUGVuZGluZ0ltYWdlOwotY2xhc3Mg
U3R5bGVQcm9wZXJ0eVNldDsKK2NsYXNzIFN0eWxlUHJvcGVydGllczsKIGNsYXNzIFN0eWxlUnVs
ZTsKICNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKIGNsYXNzIFN0eWxlUnVsZUhvc3Q7CkBAIC0zMTYs
NyArMzE2LDcgQEAgcHVibGljOgogICAgICAgICBNYXRjaGVkUHJvcGVydGllcygpOwogICAgICAg
ICB+TWF0Y2hlZFByb3BlcnRpZXMoKTsKICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxTdHlsZVBy
b3BlcnR5U2V0PiBwcm9wZXJ0aWVzOworICAgICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0aWVzPiBw
cm9wZXJ0aWVzOwogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgOiAyOwpAQCAtMzM0LDcgKzMzNCw3IEBA
IHB1YmxpYzoKICAgICAgICAgTWF0Y2hSYW5nZXMgcmFuZ2VzOwogICAgICAgICBib29sIGlzQ2Fj
aGVhYmxlOwogCi0gICAgICAgIHZvaWQgYWRkTWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgU3R5bGVQ
cm9wZXJ0eVNldCYgcHJvcGVydGllcywgU3R5bGVSdWxlKiA9IDAsIHVuc2lnbmVkIGxpbmtNYXRj
aFR5cGUgPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoQWxsLCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUg
PSBQcm9wZXJ0eVdoaXRlbGlzdE5vbmUpOworICAgICAgICB2b2lkIGFkZE1hdGNoZWRQcm9wZXJ0
aWVzKGNvbnN0IFN0eWxlUHJvcGVydGllcyYsIFN0eWxlUnVsZSogPSAwLCB1bnNpZ25lZCBsaW5r
TWF0Y2hUeXBlID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCwgUHJvcGVydHlXaGl0ZWxpc3RU
eXBlID0gUHJvcGVydHlXaGl0ZWxpc3ROb25lKTsKICAgICB9OwogCiBwcml2YXRlOgpAQCAtMzU5
LDcgKzM1OSw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPFN0eWxlQXBwbGljYXRpb25QYXNz
IHBhc3M+CiAgICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0
JiwgYm9vbCBpbXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5o
ZXJpdGVkT25seSk7CiAgICAgdGVtcGxhdGUgPFN0eWxlQXBwbGljYXRpb25QYXNzIHBhc3M+Ci0g
ICAgdm9pZCBhcHBseVByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGll
cywgU3R5bGVSdWxlKiwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBQcm9w
ZXJ0eVdoaXRlbGlzdFR5cGUgPSBQcm9wZXJ0eVdoaXRlbGlzdE5vbmUpOworICAgIHZvaWQgYXBw
bHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydGllcyosIFN0eWxlUnVsZSosIGJvb2wgaXNJ
bXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlID0gUHJv
cGVydHlXaGl0ZWxpc3ROb25lKTsKICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkUmVnaW9uU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgc3Rh
dGljIGJvb2wgaXNWYWxpZEN1ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSdWxlLmNwcAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNp
bmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJDU1NTdXBwb3J0c1J1bGUuaCIKICNp
bmNsdWRlICJDU1NVbmtub3duUnVsZS5oIgotI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIK
KyNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGVJbXBvcnQu
aCIKICNpbmNsdWRlICJXZWJLaXRDU1NGaWx0ZXJSdWxlLmgiCiAjaW5jbHVkZSAiV2ViS2l0Q1NT
S2V5ZnJhbWVSdWxlLmgiCkBAIC0yMjgsMTAgKzIyOCwxMCBAQCBQYXNzUmVmUHRyPENTU1J1bGU+
IFN0eWxlUnVsZUJhc2U6OmNyZWF0CiAKIHVuc2lnbmVkIFN0eWxlUnVsZTo6YXZlcmFnZVNpemVJ
bkJ5dGVzKCkKIHsKLSAgICByZXR1cm4gc2l6ZW9mKFN0eWxlUnVsZSkgKyBzaXplb2YoQ1NTU2Vs
ZWN0b3IpICsgU3R5bGVQcm9wZXJ0eVNldDo6YXZlcmFnZVNpemVJbkJ5dGVzKCk7CisgICAgcmV0
dXJuIHNpemVvZihTdHlsZVJ1bGUpICsgc2l6ZW9mKENTU1NlbGVjdG9yKSArIFN0eWxlUHJvcGVy
dGllczo6YXZlcmFnZVNpemVJbkJ5dGVzKCk7CiB9CiAKLVN0eWxlUnVsZTo6U3R5bGVSdWxlKGlu
dCBzb3VyY2VMaW5lLCBQYXNzUmVmPFN0eWxlUHJvcGVydHlTZXQ+IHByb3BlcnRpZXMpCitTdHls
ZVJ1bGU6OlN0eWxlUnVsZShpbnQgc291cmNlTGluZSwgUGFzc1JlZjxTdHlsZVByb3BlcnRpZXM+
IHByb3BlcnRpZXMpCiAgICAgOiBTdHlsZVJ1bGVCYXNlKFN0eWxlLCBzb3VyY2VMaW5lKQogICAg
ICwgbV9wcm9wZXJ0aWVzKHN0ZDo6bW92ZShwcm9wZXJ0aWVzKSkKIHsKQEAgLTI0OCwxNCArMjQ4
LDE0IEBAIFN0eWxlUnVsZTo6flN0eWxlUnVsZSgpCiB7CiB9CiAKLU11dGFibGVTdHlsZVByb3Bl
cnR5U2V0JiBTdHlsZVJ1bGU6Om11dGFibGVQcm9wZXJ0aWVzKCkKK011dGFibGVTdHlsZVByb3Bl
cnRpZXMmIFN0eWxlUnVsZTo6bXV0YWJsZVByb3BlcnRpZXMoKQogewogICAgIGlmICghbV9wcm9w
ZXJ0aWVzLT5pc011dGFibGUoKSkKICAgICAgICAgbV9wcm9wZXJ0aWVzID0gbV9wcm9wZXJ0aWVz
LT5tdXRhYmxlQ29weSgpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNdXRhYmxlU3R5bGVQcm9w
ZXJ0eVNldCY+KG1fcHJvcGVydGllcy5nZXQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE11
dGFibGVTdHlsZVByb3BlcnRpZXMmPihtX3Byb3BlcnRpZXMuZ2V0KCkpOwogfQogCi1QYXNzUmVm
PFN0eWxlUnVsZT4gU3R5bGVSdWxlOjpjcmVhdGUoaW50IHNvdXJjZUxpbmUsIGNvbnN0IFZlY3Rv
cjxjb25zdCBDU1NTZWxlY3Rvcio+JiBzZWxlY3RvcnMsIFBhc3NSZWY8U3R5bGVQcm9wZXJ0eVNl
dD4gcHJvcGVydGllcykKK1Bhc3NSZWY8U3R5bGVSdWxlPiBTdHlsZVJ1bGU6OmNyZWF0ZShpbnQg
c291cmNlTGluZSwgY29uc3QgVmVjdG9yPGNvbnN0IENTU1NlbGVjdG9yKj4mIHNlbGVjdG9ycywg
UGFzc1JlZjxTdHlsZVByb3BlcnRpZXM+IHByb3BlcnRpZXMpCiB7CiAgICAgQ1NTU2VsZWN0b3Iq
IHNlbGVjdG9yTGlzdEFycmF5ID0gcmVpbnRlcnByZXRfY2FzdDxDU1NTZWxlY3Rvcio+KGZhc3RN
YWxsb2Moc2l6ZW9mKENTU1NlbGVjdG9yKSAqIHNlbGVjdG9ycy5zaXplKCkpKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VsZWN0b3JzLnNpemUoKTsgKytpKQpAQCAtMjc5LDcgKzI3
OSw3IEBAIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4gU3R5bGVSdWxlOjpzcGwKICAgICAgICAg
ICAgIGNvbXBvbmVudHNJblRoaXNTZWxlY3Rvci5hcHBlbmQoY29tcG9uZW50KTsKIAogICAgICAg
ICBpZiAoY29tcG9uZW50c0luVGhpc1NlbGVjdG9yLnNpemUoKSArIGNvbXBvbmVudHNTaW5jZUxh
c3RTcGxpdC5zaXplKCkgPiBtYXhDb3VudCkgewotICAgICAgICAgICAgcnVsZXMuYXBwZW5kKGNy
ZWF0ZShzb3VyY2VMaW5lKCksIGNvbXBvbmVudHNTaW5jZUxhc3RTcGxpdCwgY29uc3RfY2FzdDxT
dHlsZVByb3BlcnR5U2V0Jj4obV9wcm9wZXJ0aWVzLmdldCgpKSkpOworICAgICAgICAgICAgcnVs
ZXMuYXBwZW5kKGNyZWF0ZShzb3VyY2VMaW5lKCksIGNvbXBvbmVudHNTaW5jZUxhc3RTcGxpdCwg
Y29uc3RfY2FzdDxTdHlsZVByb3BlcnRpZXMmPihtX3Byb3BlcnRpZXMuZ2V0KCkpKSk7CiAgICAg
ICAgICAgICBjb21wb25lbnRzU2luY2VMYXN0U3BsaXQuY2xlYXIoKTsKICAgICAgICAgfQogCkBA
IC0yODcsMTIgKzI4NywxMiBAQCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+IFN0eWxlUnVsZTo6
c3BsCiAgICAgfQogCiAgICAgaWYgKCFjb21wb25lbnRzU2luY2VMYXN0U3BsaXQuaXNFbXB0eSgp
KQotICAgICAgICBydWxlcy5hcHBlbmQoY3JlYXRlKHNvdXJjZUxpbmUoKSwgY29tcG9uZW50c1Np
bmNlTGFzdFNwbGl0LCBjb25zdF9jYXN0PFN0eWxlUHJvcGVydHlTZXQmPihtX3Byb3BlcnRpZXMu
Z2V0KCkpKSk7CisgICAgICAgIHJ1bGVzLmFwcGVuZChjcmVhdGUoc291cmNlTGluZSgpLCBjb21w
b25lbnRzU2luY2VMYXN0U3BsaXQsIGNvbnN0X2Nhc3Q8U3R5bGVQcm9wZXJ0aWVzJj4obV9wcm9w
ZXJ0aWVzLmdldCgpKSkpOwogCiAgICAgcmV0dXJuIHJ1bGVzOwogfQogCi1TdHlsZVJ1bGVQYWdl
OjpTdHlsZVJ1bGVQYWdlKFBhc3NSZWY8U3R5bGVQcm9wZXJ0eVNldD4gcHJvcGVydGllcykKK1N0
eWxlUnVsZVBhZ2U6OlN0eWxlUnVsZVBhZ2UoUGFzc1JlZjxTdHlsZVByb3BlcnRpZXM+IHByb3Bl
cnRpZXMpCiAgICAgOiBTdHlsZVJ1bGVCYXNlKFBhZ2UpCiAgICAgLCBtX3Byb3BlcnRpZXMoc3Rk
Ojptb3ZlKHByb3BlcnRpZXMpKQogewpAQCAtMzA5LDE0ICszMDksMTQgQEAgU3R5bGVSdWxlUGFn
ZTo6flN0eWxlUnVsZVBhZ2UoKQogewogfQogCi1NdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCYgU3R5
bGVSdWxlUGFnZTo6bXV0YWJsZVByb3BlcnRpZXMoKQorTXV0YWJsZVN0eWxlUHJvcGVydGllcyYg
U3R5bGVSdWxlUGFnZTo6bXV0YWJsZVByb3BlcnRpZXMoKQogewogICAgIGlmICghbV9wcm9wZXJ0
aWVzLT5pc011dGFibGUoKSkKICAgICAgICAgbV9wcm9wZXJ0aWVzID0gbV9wcm9wZXJ0aWVzLT5t
dXRhYmxlQ29weSgpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNdXRhYmxlU3R5bGVQcm9wZXJ0
eVNldCY+KG1fcHJvcGVydGllcy5nZXQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE11dGFi
bGVTdHlsZVByb3BlcnRpZXMmPihtX3Byb3BlcnRpZXMuZ2V0KCkpOwogfQogCi1TdHlsZVJ1bGVG
b250RmFjZTo6U3R5bGVSdWxlRm9udEZhY2UoUGFzc1JlZjxTdHlsZVByb3BlcnR5U2V0PiBwcm9w
ZXJ0aWVzKQorU3R5bGVSdWxlRm9udEZhY2U6OlN0eWxlUnVsZUZvbnRGYWNlKFBhc3NSZWY8U3R5
bGVQcm9wZXJ0aWVzPiBwcm9wZXJ0aWVzKQogICAgIDogU3R5bGVSdWxlQmFzZShGb250RmFjZSwg
MCkKICAgICAsIG1fcHJvcGVydGllcyhzdGQ6Om1vdmUocHJvcGVydGllcykpCiB7CkBAIC0zMzIs
MTEgKzMzMiwxMSBAQCBTdHlsZVJ1bGVGb250RmFjZTo6flN0eWxlUnVsZUZvbnRGYWNlKCkKIHsK
IH0KIAotTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQmIFN0eWxlUnVsZUZvbnRGYWNlOjptdXRhYmxl
UHJvcGVydGllcygpCitNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBTdHlsZVJ1bGVGb250RmFjZTo6
bXV0YWJsZVByb3BlcnRpZXMoKQogewogICAgIGlmICghbV9wcm9wZXJ0aWVzLT5pc011dGFibGUo
KSkKICAgICAgICAgbV9wcm9wZXJ0aWVzID0gbV9wcm9wZXJ0aWVzLT5tdXRhYmxlQ29weSgpOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCY+KG1fcHJvcGVy
dGllcy5nZXQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE11dGFibGVTdHlsZVByb3BlcnRp
ZXMmPihtX3Byb3BlcnRpZXMuZ2V0KCkpOwogfQogCiBTdHlsZVJ1bGVHcm91cDo6U3R5bGVSdWxl
R3JvdXAoVHlwZSB0eXBlLCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYgYWRvcHRSdWxl
KQpAQCAtNDA4LDcgKzQwOCw3IEBAIFN0eWxlUnVsZVJlZ2lvbjo6U3R5bGVSdWxlUmVnaW9uKGNv
bnN0IFMKIAogCiAjaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKLVN0eWxlUnVsZVZp
ZXdwb3J0OjpTdHlsZVJ1bGVWaWV3cG9ydChQYXNzUmVmPFN0eWxlUHJvcGVydHlTZXQ+IHByb3Bl
cnRpZXMpCitTdHlsZVJ1bGVWaWV3cG9ydDo6U3R5bGVSdWxlVmlld3BvcnQoUGFzc1JlZjxTdHls
ZVByb3BlcnRpZXM+IHByb3BlcnRpZXMpCiAgICAgOiBTdHlsZVJ1bGVCYXNlKFZpZXdwb3J0LCAw
KQogICAgICwgbV9wcm9wZXJ0aWVzKHN0ZDo6bW92ZShwcm9wZXJ0aWVzKSkKIHsKQEAgLTQyNCwx
NiArNDI0LDE2IEBAIFN0eWxlUnVsZVZpZXdwb3J0Ojp+U3R5bGVSdWxlVmlld3BvcnQoKQogewog
fQogCi1NdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCYgU3R5bGVSdWxlVmlld3BvcnQ6Om11dGFibGVQ
cm9wZXJ0aWVzKCkKK011dGFibGVTdHlsZVByb3BlcnRpZXMmIFN0eWxlUnVsZVZpZXdwb3J0Ojpt
dXRhYmxlUHJvcGVydGllcygpCiB7CiAgICAgaWYgKCFtX3Byb3BlcnRpZXMtPmlzTXV0YWJsZSgp
KQogICAgICAgICBtX3Byb3BlcnRpZXMgPSBtX3Byb3BlcnRpZXMtPm11dGFibGVDb3B5KCk7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PE11dGFibGVTdHlsZVByb3BlcnR5U2V0Jj4obV9wcm9wZXJ0
aWVzLmdldCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TXV0YWJsZVN0eWxlUHJvcGVydGll
cyY+KG1fcHJvcGVydGllcy5nZXQoKSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKENTU19ERVZJQ0Vf
QURBUFRBVElPTikKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLVN0eWxlUnVsZUZpbHRlcjo6
U3R5bGVSdWxlRmlsdGVyKGNvbnN0IFN0cmluZyYgZmlsdGVyTmFtZSwgUGFzc1JlZjxTdHlsZVBy
b3BlcnR5U2V0PiBwcm9wZXJ0aWVzKQorU3R5bGVSdWxlRmlsdGVyOjpTdHlsZVJ1bGVGaWx0ZXIo
Y29uc3QgU3RyaW5nJiBmaWx0ZXJOYW1lLCBQYXNzUmVmPFN0eWxlUHJvcGVydGllcz4gcHJvcGVy
dGllcykKICAgICA6IFN0eWxlUnVsZUJhc2UoRmlsdGVyLCAwKQogICAgICwgbV9maWx0ZXJOYW1l
KGZpbHRlck5hbWUpCiAgICAgLCBtX3Byb3BlcnRpZXMoc3RkOjptb3ZlKHByb3BlcnRpZXMpKQpA
QCAtNDUxLDExICs0NTEsMTEgQEAgU3R5bGVSdWxlRmlsdGVyOjp+U3R5bGVSdWxlRmlsdGVyKCkK
IHsKIH0KIAotTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQmIFN0eWxlUnVsZUZpbHRlcjo6bXV0YWJs
ZVByb3BlcnRpZXMoKQorTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgU3R5bGVSdWxlRmlsdGVyOjpt
dXRhYmxlUHJvcGVydGllcygpCiB7CiAgICAgaWYgKCFtX3Byb3BlcnRpZXMtPmlzTXV0YWJsZSgp
KQogICAgICAgICBtX3Byb3BlcnRpZXMgPSBtX3Byb3BlcnRpZXMtPm11dGFibGVDb3B5KCk7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PE11dGFibGVTdHlsZVByb3BlcnR5U2V0Jj4obV9wcm9wZXJ0
aWVzLmdldCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TXV0YWJsZVN0eWxlUHJvcGVydGll
cyY+KG1fcHJvcGVydGllcy5nZXQoKSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NIQURF
UlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcg
QEAKIAogI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgogI2luY2x1ZGUgIk1lZGlhTGlzdC5o
IgotI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnRp
ZXMuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTMyLDggKzMyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ1NTUnVsZTsKIGNsYXNz
IENTU1N0eWxlUnVsZTsKIGNsYXNzIENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBNdXRhYmxlU3R5bGVQ
cm9wZXJ0eVNldDsKLWNsYXNzIFN0eWxlUHJvcGVydHlTZXQ7CitjbGFzcyBNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzOworY2xhc3MgU3R5bGVQcm9wZXJ0aWVzOwogCiBjbGFzcyBTdHlsZVJ1bGVCYXNl
IDogcHVibGljIFdURjo6UmVmQ291bnRlZEJhc2UgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwpAQCAtMTE4LDcgKzExOCw3IEBAIHByaXZhdGU6CiBjbGFzcyBTdHlsZVJ1bGUgOiBwdWJs
aWMgU3R5bGVSdWxlQmFzZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWY8U3R5bGVSdWxlPiBjcmVhdGUoaW50IHNvdXJjZUxpbmUsIFBh
c3NSZWY8U3R5bGVQcm9wZXJ0eVNldD4gcHJvcGVydGllcykKKyAgICBzdGF0aWMgUGFzc1JlZjxT
dHlsZVJ1bGU+IGNyZWF0ZShpbnQgc291cmNlTGluZSwgUGFzc1JlZjxTdHlsZVByb3BlcnRpZXM+
IHByb3BlcnRpZXMpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHlsZVJ1
bGUoc291cmNlTGluZSwgc3RkOjptb3ZlKHByb3BlcnRpZXMpKSk7CiAgICAgfQpAQCAtMTI2LDgg
KzEyNiw4IEBAIHB1YmxpYzoKICAgICB+U3R5bGVSdWxlKCk7CiAKICAgICBjb25zdCBDU1NTZWxl
Y3Rvckxpc3QmIHNlbGVjdG9yTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0b3JMaXN0OyB9
Ci0gICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCYgcHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJu
IG1fcHJvcGVydGllcy5nZXQoKTsgfQotICAgIE11dGFibGVTdHlsZVByb3BlcnR5U2V0JiBtdXRh
YmxlUHJvcGVydGllcygpOworICAgIGNvbnN0IFN0eWxlUHJvcGVydGllcyYgcHJvcGVydGllcygp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcy5nZXQoKTsgfQorICAgIE11dGFibGVTdHlsZVBy
b3BlcnRpZXMmIG11dGFibGVQcm9wZXJ0aWVzKCk7CiAgICAgCiAgICAgdm9pZCBwYXJzZXJBZG9w
dFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+PiYgc2VsZWN0
b3JzKSB7IG1fc2VsZWN0b3JMaXN0LmFkb3B0U2VsZWN0b3JWZWN0b3Ioc2VsZWN0b3JzKTsgfQog
ICAgIHZvaWQgd3JhcHBlckFkb3B0U2VsZWN0b3JMaXN0KENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0
b3JzKSB7IG1fc2VsZWN0b3JMaXN0LmFkb3B0KHNlbGVjdG9ycyk7IH0KQEAgLTE0MCwxMiArMTQw
LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdW5zaWduZWQgYXZlcmFnZVNpemVJbkJ5dGVzKCk7
CiAKIHByaXZhdGU6Ci0gICAgU3R5bGVSdWxlKGludCBzb3VyY2VMaW5lLCBQYXNzUmVmPFN0eWxl
UHJvcGVydHlTZXQ+KTsKKyAgICBTdHlsZVJ1bGUoaW50IHNvdXJjZUxpbmUsIFBhc3NSZWY8U3R5
bGVQcm9wZXJ0aWVzPik7CiAgICAgU3R5bGVSdWxlKGNvbnN0IFN0eWxlUnVsZSYpOwogCi0gICAg
c3RhdGljIFBhc3NSZWY8U3R5bGVSdWxlPiBjcmVhdGUoaW50IHNvdXJjZUxpbmUsIGNvbnN0IFZl
Y3Rvcjxjb25zdCBDU1NTZWxlY3Rvcio+JiwgUGFzc1JlZjxTdHlsZVByb3BlcnR5U2V0Pik7Cisg
ICAgc3RhdGljIFBhc3NSZWY8U3R5bGVSdWxlPiBjcmVhdGUoaW50IHNvdXJjZUxpbmUsIGNvbnN0
IFZlY3Rvcjxjb25zdCBDU1NTZWxlY3Rvcio+JiwgUGFzc1JlZjxTdHlsZVByb3BlcnRpZXM+KTsK
IAotICAgIFJlZjxTdHlsZVByb3BlcnR5U2V0PiBtX3Byb3BlcnRpZXM7CisgICAgUmVmPFN0eWxl
UHJvcGVydGllcz4gbV9wcm9wZXJ0aWVzOwogICAgIENTU1NlbGVjdG9yTGlzdCBtX3NlbGVjdG9y
TGlzdDsKIH07CiAKQEAgLTE1NywzMiArMTU3LDMyIEBAIGlubGluZSBjb25zdCBTdHlsZVJ1bGUq
IHRvU3R5bGVSdWxlKGNvbnMKIAogY2xhc3MgU3R5bGVSdWxlRm9udEZhY2UgOiBwdWJsaWMgU3R5
bGVSdWxlQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWY8U3R5bGVSdWxlRm9udEZh
Y2U+IGNyZWF0ZShQYXNzUmVmPFN0eWxlUHJvcGVydHlTZXQ+IHByb3BlcnRpZXMpIHsgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU3R5bGVSdWxlRm9udEZhY2Uoc3RkOjptb3ZlKHByb3BlcnRpZXMpKSk7
IH0KKyAgICBzdGF0aWMgUGFzc1JlZjxTdHlsZVJ1bGVGb250RmFjZT4gY3JlYXRlKFBhc3NSZWY8
U3R5bGVQcm9wZXJ0aWVzPiBwcm9wZXJ0aWVzKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFN0eWxl
UnVsZUZvbnRGYWNlKHN0ZDo6bW92ZShwcm9wZXJ0aWVzKSkpOyB9CiAgICAgCiAgICAgflN0eWxl
UnVsZUZvbnRGYWNlKCk7CiAKLSAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0JiBwcm9wZXJ0aWVz
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzLmdldCgpOyB9Ci0gICAgTXV0YWJsZVN0eWxl
UHJvcGVydHlTZXQmIG11dGFibGVQcm9wZXJ0aWVzKCk7CisgICAgY29uc3QgU3R5bGVQcm9wZXJ0
aWVzJiBwcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzLmdldCgpOyB9Cisg
ICAgTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgbXV0YWJsZVByb3BlcnRpZXMoKTsKIAogICAgIFBh
c3NSZWY8U3R5bGVSdWxlRm9udEZhY2U+IGNvcHkoKSBjb25zdCB7IHJldHVybiBhZG9wdFJlZigq
bmV3IFN0eWxlUnVsZUZvbnRGYWNlKCp0aGlzKSk7IH0KIAogCiBwcml2YXRlOgotICAgIFN0eWxl
UnVsZUZvbnRGYWNlKFBhc3NSZWY8U3R5bGVQcm9wZXJ0eVNldD4pOworICAgIFN0eWxlUnVsZUZv
bnRGYWNlKFBhc3NSZWY8U3R5bGVQcm9wZXJ0aWVzPik7CiAgICAgU3R5bGVSdWxlRm9udEZhY2Uo
Y29uc3QgU3R5bGVSdWxlRm9udEZhY2UmKTsKIAotICAgIFJlZjxTdHlsZVByb3BlcnR5U2V0PiBt
X3Byb3BlcnRpZXM7CisgICAgUmVmPFN0eWxlUHJvcGVydGllcz4gbV9wcm9wZXJ0aWVzOwogfTsK
IAogY2xhc3MgU3R5bGVSdWxlUGFnZSA6IHB1YmxpYyBTdHlsZVJ1bGVCYXNlIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZjxTdHlsZVJ1bGVQYWdlPiBjcmVhdGUoUGFzc1JlZjxTdHlsZVBy
b3BlcnR5U2V0PiBwcm9wZXJ0aWVzKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFN0eWxlUnVsZVBh
Z2Uoc3RkOjptb3ZlKHByb3BlcnRpZXMpKSk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZjxTdHlsZVJ1
bGVQYWdlPiBjcmVhdGUoUGFzc1JlZjxTdHlsZVByb3BlcnRpZXM+IHByb3BlcnRpZXMpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU3R5bGVSdWxlUGFnZShzdGQ6Om1vdmUocHJvcGVydGllcykpKTsg
fQogCiAgICAgflN0eWxlUnVsZVBhZ2UoKTsKIAogICAgIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxl
Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0b3JMaXN0LmZpcnN0KCk7IH0gICAgCi0gICAg
Y29uc3QgU3R5bGVQcm9wZXJ0eVNldCYgcHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
cGVydGllcy5nZXQoKTsgfQotICAgIE11dGFibGVTdHlsZVByb3BlcnR5U2V0JiBtdXRhYmxlUHJv
cGVydGllcygpOworICAgIGNvbnN0IFN0eWxlUHJvcGVydGllcyYgcHJvcGVydGllcygpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvcGVydGllcy5nZXQoKTsgfQorICAgIE11dGFibGVTdHlsZVByb3BlcnRp
ZXMmIG11dGFibGVQcm9wZXJ0aWVzKCk7CiAKICAgICB2b2lkIHBhcnNlckFkb3B0U2VsZWN0b3JW
ZWN0b3IoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+JiBzZWxlY3RvcnMpIHsgbV9z
ZWxlY3Rvckxpc3QuYWRvcHRTZWxlY3RvclZlY3RvcihzZWxlY3RvcnMpOyB9CiAgICAgdm9pZCB3
cmFwcGVyQWRvcHRTZWxlY3Rvckxpc3QoQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3RvcnMpIHsgbV9z
ZWxlY3Rvckxpc3QuYWRvcHQoc2VsZWN0b3JzKTsgfQpAQCAtMTkwLDEwICsxOTAsMTAgQEAgcHVi
bGljOgogICAgIFBhc3NSZWY8U3R5bGVSdWxlUGFnZT4gY29weSgpIGNvbnN0IHsgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU3R5bGVSdWxlUGFnZSgqdGhpcykpOyB9CiAKIHByaXZhdGU6Ci0gICAgU3R5
bGVSdWxlUGFnZShQYXNzUmVmPFN0eWxlUHJvcGVydHlTZXQ+KTsKKyAgICBTdHlsZVJ1bGVQYWdl
KFBhc3NSZWY8U3R5bGVQcm9wZXJ0aWVzPik7CiAgICAgU3R5bGVSdWxlUGFnZShjb25zdCBTdHls
ZVJ1bGVQYWdlJik7CiAgICAgCi0gICAgUmVmPFN0eWxlUHJvcGVydHlTZXQ+IG1fcHJvcGVydGll
czsKKyAgICBSZWY8U3R5bGVQcm9wZXJ0aWVzPiBtX3Byb3BlcnRpZXM7CiAgICAgQ1NTU2VsZWN0
b3JMaXN0IG1fc2VsZWN0b3JMaXN0OwogfTsKIApAQCAtMjg4LDIwICsyODgsMjAgQEAgcHJpdmF0
ZToKICNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQVEFUSU9OKQogY2xhc3MgU3R5bGVSdWxlVmll
d3BvcnQgOiBwdWJsaWMgU3R5bGVSdWxlQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWY8U3R5bGVSdWxlVmlld3BvcnQ+IGNyZWF0ZShQYXNzUmVmPFN0eWxlUHJvcGVydHlTZXQ+IHBy
b3BlcnRpZXMpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3R5bGVSdWxlVmlld3BvcnQoc3RkOjpt
b3ZlKHByb3BlcnRpZXMpKSk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZjxTdHlsZVJ1bGVWaWV3cG9y
dD4gY3JlYXRlKFBhc3NSZWY8U3R5bGVQcm9wZXJ0aWVzPiBwcm9wZXJ0aWVzKSB7IHJldHVybiBh
ZG9wdFJlZigqbmV3IFN0eWxlUnVsZVZpZXdwb3J0KHN0ZDo6bW92ZShwcm9wZXJ0aWVzKSkpOyB9
CiAKICAgICB+U3R5bGVSdWxlVmlld3BvcnQoKTsKIAotICAgIGNvbnN0IFN0eWxlUHJvcGVydHlT
ZXQmIHByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuZ2V0KCk7IH0KLSAg
ICBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCYgbXV0YWJsZVByb3BlcnRpZXMoKTsKKyAgICBjb25z
dCBTdHlsZVByb3BlcnRpZXMmIHByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRp
ZXMuZ2V0KCk7IH0KKyAgICBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBtdXRhYmxlUHJvcGVydGll
cygpOwogCiAgICAgUGFzc1JlZjxTdHlsZVJ1bGVWaWV3cG9ydD4gY29weSgpIGNvbnN0IHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU3R5bGVSdWxlVmlld3BvcnQoKnRoaXMpKTsgfQogCiBwcml2YXRl
OgotICAgIFN0eWxlUnVsZVZpZXdwb3J0KFBhc3NSZWY8U3R5bGVQcm9wZXJ0eVNldD4pOworICAg
IFN0eWxlUnVsZVZpZXdwb3J0KFBhc3NSZWY8U3R5bGVQcm9wZXJ0aWVzPik7CiAgICAgU3R5bGVS
dWxlVmlld3BvcnQoY29uc3QgU3R5bGVSdWxlVmlld3BvcnQmKTsKIAotICAgIFJlZjxTdHlsZVBy
b3BlcnR5U2V0PiBtX3Byb3BlcnRpZXM7CisgICAgUmVmPFN0eWxlUHJvcGVydGllcz4gbV9wcm9w
ZXJ0aWVzOwogfTsKICNlbmRpZiAvLyBFTkFCTEUoQ1NTX0RFVklDRV9BREFQVEFUSU9OKQogCkBA
IC0zMjgsNyArMzI4LDcgQEAgaW5saW5lIGNvbnN0IFN0eWxlUnVsZVJlZ2lvbiogdG9TdHlsZVJ1
bAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKIGNsYXNzIFN0eWxlUnVsZUZpbHRlciA6IHB1Ymxp
YyBTdHlsZVJ1bGVCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZjxTdHlsZVJ1bGVG
aWx0ZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGZpbHRlck5hbWUsIFBhc3NSZWY8U3R5bGVQcm9w
ZXJ0eVNldD4gcHJvcGVydGllcykKKyAgICBzdGF0aWMgUGFzc1JlZjxTdHlsZVJ1bGVGaWx0ZXI+
IGNyZWF0ZShjb25zdCBTdHJpbmcmIGZpbHRlck5hbWUsIFBhc3NSZWY8U3R5bGVQcm9wZXJ0aWVz
PiBwcm9wZXJ0aWVzKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3R5bGVS
dWxlRmlsdGVyKGZpbHRlck5hbWUsIHN0ZDo6bW92ZShwcm9wZXJ0aWVzKSkpOwogICAgIH0KQEAg
LTMzNywxNyArMzM3LDE3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFN0cmluZyYgZmlsdGVyTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyTmFtZTsgfQogCi0gICAgY29uc3QgU3R5bGVQcm9w
ZXJ0eVNldCYgcHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcy5nZXQoKTsg
fQotICAgIE11dGFibGVTdHlsZVByb3BlcnR5U2V0JiBtdXRhYmxlUHJvcGVydGllcygpOworICAg
IGNvbnN0IFN0eWxlUHJvcGVydGllcyYgcHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
cGVydGllcy5nZXQoKTsgfQorICAgIE11dGFibGVTdHlsZVByb3BlcnRpZXMmIG11dGFibGVQcm9w
ZXJ0aWVzKCk7CiAKICAgICBQYXNzUmVmPFN0eWxlUnVsZUZpbHRlcj4gY29weSgpIGNvbnN0IHsg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU3R5bGVSdWxlRmlsdGVyKCp0aGlzKSk7IH0KIAogcHJpdmF0
ZToKLSAgICBTdHlsZVJ1bGVGaWx0ZXIoY29uc3QgU3RyaW5nJiwgUGFzc1JlZjxTdHlsZVByb3Bl
cnR5U2V0Pik7CisgICAgU3R5bGVSdWxlRmlsdGVyKGNvbnN0IFN0cmluZyYsIFBhc3NSZWY8U3R5
bGVQcm9wZXJ0aWVzPik7CiAgICAgU3R5bGVSdWxlRmlsdGVyKGNvbnN0IFN0eWxlUnVsZUZpbHRl
ciYpOwogCiAgICAgU3RyaW5nIG1fZmlsdGVyTmFtZTsKLSAgICBSZWY8U3R5bGVQcm9wZXJ0eVNl
dD4gbV9wcm9wZXJ0aWVzOworICAgIFJlZjxTdHlsZVByb3BlcnRpZXM+IG1fcHJvcGVydGllczsK
IH07CiAjZW5kaWYgLy8gRU5BQkxFKENTU19TSEFERVJTKQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDcgKzMwLDcgQEAKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUnVsZVNldC5oIgogI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgor
I2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogI2lu
Y2x1ZGUgIlN0eWxlUnVsZUltcG9ydC5oIgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL1ZpZXdwb3J0U3R5bGVSZXNvbHZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL1ZpZXdwb3J0U3R5bGVSZXNvbHZlci5jcHAJKHJldmlzaW9u
IDE1OTg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9WaWV3cG9ydFN0eWxlUmVzb2x2ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlN0
eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRl
ICJTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgogCkBAIC01NCw3
ICs1NCw3IEBAIFZpZXdwb3J0U3R5bGVSZXNvbHZlcjo6flZpZXdwb3J0U3R5bGVSZXMKIAogdm9p
ZCBWaWV3cG9ydFN0eWxlUmVzb2x2ZXI6OmFkZFZpZXdwb3J0UnVsZShTdHlsZVJ1bGVWaWV3cG9y
dCogdmlld3BvcnRSdWxlKQogewotICAgIFN0eWxlUHJvcGVydHlTZXQmIHByb3BlcnR5U2V0ID0g
dmlld3BvcnRSdWxlLT5tdXRhYmxlUHJvcGVydGllcygpOworICAgIFN0eWxlUHJvcGVydGllcyYg
cHJvcGVydHlTZXQgPSB2aWV3cG9ydFJ1bGUtPm11dGFibGVQcm9wZXJ0aWVzKCk7CiAKICAgICB1
bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gcHJvcGVydHlTZXQucHJvcGVydHlDb3VudCgpOwogICAg
IGlmICghcHJvcGVydHlDb3VudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9WaWV3cG9ydFN0
eWxlUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvVmlld3BvcnRT
dHlsZVJlc29sdmVyLmgJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9W
aWV3cG9ydFN0eWxlUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU1ByaW1pdGl2ZVZhbHVlOwogY2xhc3MgRG9j
dW1lbnQ7Ci1jbGFzcyBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDsKK2NsYXNzIE11dGFibGVTdHls
ZVByb3BlcnRpZXM7CiBjbGFzcyBTdHlsZVJ1bGVWaWV3cG9ydDsKIAogY2xhc3MgVmlld3BvcnRT
dHlsZVJlc29sdmVyIDogcHVibGljIFJlZkNvdW50ZWQ8Vmlld3BvcnRTdHlsZVJlc29sdmVyPiB7
CkBAIC02NCw3ICs2NCw3IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgZ2V0Vmlld3BvcnRBcmd1bWVu
dFZhbHVlKENTU1Byb3BlcnR5SUQpIGNvbnN0OwogCiAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7
Ci0gICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnR5U2V0PiBtX3Byb3BlcnR5U2V0OworICAg
IFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBtX3Byb3BlcnR5U2V0OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0Zp
bHRlclJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NG
aWx0ZXJSdWxlLmNwcAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1dl
YktpdENTU0ZpbHRlclJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAj
aWYgRU5BQkxFKENTU19TSEFERVJTKQogCiAjaW5jbHVkZSAiUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0
eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENT
U0tleWZyYW1lUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1dlYktp
dENTU0tleWZyYW1lUnVsZS5jcHAJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMyAr
MjcsMTMgQEAKICNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIKIAogI2luY2x1ZGUg
IlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIlN0eWxlUHJvcGVy
dHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlICJXZWJLaXRD
U1NLZXlmcmFtZXNSdWxlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVN0eWxlS2V5ZnJhbWU6OlN0eWxlS2V5ZnJhbWUoUGFz
c1JlZjxTdHlsZVByb3BlcnR5U2V0PiBwcm9wZXJ0aWVzKQorU3R5bGVLZXlmcmFtZTo6U3R5bGVL
ZXlmcmFtZShQYXNzUmVmPFN0eWxlUHJvcGVydGllcz4gcHJvcGVydGllcykKICAgICA6IG1fcHJv
cGVydGllcyhzdGQ6Om1vdmUocHJvcGVydGllcykpCiB7CiB9CkBAIC00MiwxMSArNDIsMTEgQEAg
U3R5bGVLZXlmcmFtZTo6flN0eWxlS2V5ZnJhbWUoKQogewogfQogCi1NdXRhYmxlU3R5bGVQcm9w
ZXJ0eVNldCYgU3R5bGVLZXlmcmFtZTo6bXV0YWJsZVByb3BlcnRpZXMoKQorTXV0YWJsZVN0eWxl
UHJvcGVydGllcyYgU3R5bGVLZXlmcmFtZTo6bXV0YWJsZVByb3BlcnRpZXMoKQogewogICAgIGlm
ICghbV9wcm9wZXJ0aWVzLT5pc011dGFibGUoKSkKICAgICAgICAgbV9wcm9wZXJ0aWVzID0gbV9w
cm9wZXJ0aWVzLT5tdXRhYmxlQ29weSgpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNdXRhYmxl
U3R5bGVQcm9wZXJ0eVNldCY+KG1fcHJvcGVydGllcy5nZXQoKSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PE11dGFibGVTdHlsZVByb3BlcnRpZXMmPihtX3Byb3BlcnRpZXMuZ2V0KCkpOwogfQog
CiAvKiBzdGF0aWMgKi8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFt
ZVJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJh
bWVSdWxlLmgJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRD
U1NLZXlmcmFtZVJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmlu
ZSBXZWJLaXRDU1NLZXlmcmFtZVJ1bGVfaAogCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgotI2luY2x1
ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCw3ICszOCw3IEBAIGNsYXNzIFdlYktpdENTU0tl
eWZyYW1lc1J1bGU7CiBjbGFzcyBTdHlsZUtleWZyYW1lIDogcHVibGljIFJlZkNvdW50ZWQ8U3R5
bGVLZXlmcmFtZT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IGNyZWF0ZShQYXNzUmVmPFN0eWxlUHJv
cGVydHlTZXQ+IHByb3BlcnRpZXMpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVLZXlmcmFt
ZT4gY3JlYXRlKFBhc3NSZWY8U3R5bGVQcm9wZXJ0aWVzPiBwcm9wZXJ0aWVzKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZUtleWZyYW1lKHN0ZDo6bW92ZShwcm9wZXJ0
aWVzKSkpOwogICAgIH0KQEAgLTQ5LDE3ICs0OSwxNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdl
dEtleXMoVmVjdG9yPGRvdWJsZT4mIGtleXMpIGNvbnN0ICAgeyBwYXJzZUtleVN0cmluZyhtX2tl
eSwga2V5cyk7IH0KICAgICAKLSAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0JiBwcm9wZXJ0aWVz
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzLmdldCgpOyB9Ci0gICAgTXV0YWJsZVN0eWxl
UHJvcGVydHlTZXQmIG11dGFibGVQcm9wZXJ0aWVzKCk7CisgICAgY29uc3QgU3R5bGVQcm9wZXJ0
aWVzJiBwcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzLmdldCgpOyB9Cisg
ICAgTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgbXV0YWJsZVByb3BlcnRpZXMoKTsKICAgICAKICAg
ICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFN0eWxl
S2V5ZnJhbWUoUGFzc1JlZjxTdHlsZVByb3BlcnR5U2V0Pik7CisgICAgZXhwbGljaXQgU3R5bGVL
ZXlmcmFtZShQYXNzUmVmPFN0eWxlUHJvcGVydGllcz4pOwogICAgIAogICAgIHN0YXRpYyB2b2lk
IHBhcnNlS2V5U3RyaW5nKGNvbnN0IFN0cmluZyYsIFZlY3Rvcjxkb3VibGU+JiBrZXlzKTsKICAg
ICAKLSAgICBSZWY8U3R5bGVQcm9wZXJ0eVNldD4gbV9wcm9wZXJ0aWVzOworICAgIFJlZjxTdHls
ZVByb3BlcnRpZXM+IG1fcHJvcGVydGllczsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUg
YSBwYXJzZWQgdmVjdG9yIG9mIGZsb2F0cy4KICAgICAvLyBjb21tYSBzZXBhcmF0ZWQgbGlzdCBv
ZiBrZXlzCiAgICAgU3RyaW5nIG1fa2V5OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1dlYktp
dENTU0tleWZyYW1lc1J1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9X
ZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dl
YkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUnVsZUxp
c3QuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0
eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgIlN0eWxlU2hl
ZXQuaCIKICNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NT
TWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0
cml4LmNwcAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENT
U01hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJD
U1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5j
bHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtRnVuY3Rpb25zLmgi
CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIApAQCAtNTUsNyArNTUsNyBAQCB2b2lkIFdl
YktpdENTU01hdHJpeDo6c2V0TWF0cml4VmFsdWUoY29uCiAgICAgaWYgKHN0cmluZy5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNl
dD4gc3R5bGVEZWNsYXJhdGlvbiA9IE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gc3R5bGVEZWNsYXJhdGlvbiA9IE11
dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwogICAgIGlmIChDU1NQYXJzZXI6OnBhcnNl
VmFsdWUoc3R5bGVEZWNsYXJhdGlvbi5nZXQoKSwgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0s
IHN0cmluZywgdHJ1ZSwgQ1NTU3RyaWN0TW9kZSwgMCkpIHsKICAgICAgICAgLy8gQ29udmVydCB0
byBUcmFuc2Zvcm1PcGVyYXRpb25zLiBUaGlzIGNhbiBmYWlsIGlmIGEgcHJvcGVydHkKICAgICAg
ICAgLy8gcmVxdWlyZXMgc3R5bGUgKGkuZS4sIHBhcmFtIHVzZXMgJ2Vtcycgb3IgJ2V4cycpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcAkocmV2
aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1ZpZXdwb3J0UnVs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpZiBFTkFCTEUoQ1NTX0RF
VklDRV9BREFQVEFUSU9OKQogCiAjaW5jbHVkZSAiUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0
aW9uLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUHJv
cGVydGllcy5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcAkocmV2aXNpb24gMTU5ODQxKQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsy
NSw3IEBACiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiU2NvcGVkRXZl
bnRRdWV1ZS5oIgotI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHls
ZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiVGV4
dE5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCkBAIC0xODgsNyArMTg4
LDcgQEAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogQXR0cjo6c3R5bGUoKQogICAgIC8vIFRoaXMgZnVu
Y3Rpb24gb25seSBleGlzdHMgdG8gc3VwcG9ydCB0aGUgT2JqLUMgYmluZGluZ3MuCiAgICAgaWYg
KCFtX2VsZW1lbnQgfHwgIW1fZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIG1fc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6Y3Jl
YXRlKCk7CisgICAgbV9zdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwog
ICAgIHRvU3R5bGVkRWxlbWVudChtX2VsZW1lbnQpLT5jb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRp
b25BdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSgpLCB2YWx1ZSgpLCAqbV9zdHlsZSk7CiAgICAgcmV0
dXJuIG1fc3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9BdHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0F0
dHIuaAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBDU1NTdHlsZURlY2xhcmF0aW9uOwotY2xhc3MgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ7Citj
bGFzcyBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOwogCiAvLyBBdHRyIGNhbiBoYXZlIFRleHQgYW5k
IEVudGl0eVJlZmVyZW5jZSBjaGlsZHJlbgogLy8gdGhlcmVmb3JlIGl0IGhhcyB0byBiZSBhIGZ1
bGxibG93biBOb2RlLiBUaGUgcGxhbgpAQCAtOTUsNyArOTUsNyBAQCBwcml2YXRlOgogICAgIFF1
YWxpZmllZE5hbWUgbV9uYW1lOwogICAgIEF0b21pY1N0cmluZyBtX3N0YW5kYWxvbmVWYWx1ZTsK
IAotICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gbV9zdHlsZTsKKyAgICBSZWZQ
dHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gbV9zdHlsZTsKICAgICB1bnNpZ25lZCBtX2lnbm9y
ZUNoaWxkcmVuQ2hhbmdlZDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2
aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBACiAjaW5jbHVkZSAiU2VsZWN0b3JRdWVyeS5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgotI2luY2x1ZGUg
IlN0eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNs
dWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAj
aW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKQEAgLTg1Niw3ICs4NTYsNyBAQCBQYXNzUmVmUHRy
PFRleHQ+IERvY3VtZW50OjpjcmVhdGVFZGl0aW5nCiAKIFBhc3NSZWZQdHI8Q1NTU3R5bGVEZWNs
YXJhdGlvbj4gRG9jdW1lbnQ6OmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKQogewotICAgIFJl
ZjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gcHJvcGVydHlTZXQoTXV0YWJsZVN0eWxlUHJvcGVy
dHlTZXQ6OmNyZWF0ZSgpKTsKKyAgICBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gcHJvcGVy
dHlTZXQoTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCkpOwogICAgIHJldHVybiBwcm9w
ZXJ0eVNldC0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJXaWRnZXQuaCIKICNpbmNsdWRlICJTZWxlY3RvclF1ZXJ5LmgiCiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5bGVQcm9w
ZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlRleHRJdGVy
YXRvci5oIgogI2luY2x1ZGUgIlZvaWRDYWxsYmFjay5oIgpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudERhdGEuY3BwCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAi
RWxlbWVudERhdGEuaCIKIAogI2luY2x1ZGUgIkF0dHIuaCIKLSNpbmNsdWRlICJTdHlsZVByb3Bl
cnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMTQ0LDcgKzE0NCw3IEBAIFVuaXF1ZUVsZW1lbnREYXRhOjpVbmlxdWVFbGVt
ZW50RGF0YShjb24KIFVuaXF1ZUVsZW1lbnREYXRhOjpVbmlxdWVFbGVtZW50RGF0YShjb25zdCBT
aGFyZWFibGVFbGVtZW50RGF0YSYgb3RoZXIpCiAgICAgOiBFbGVtZW50RGF0YShvdGhlciwgdHJ1
ZSkKIHsKLSAgICAvLyBBbiBTaGFyZWFibGVFbGVtZW50RGF0YSBzaG91bGQgbmV2ZXIgaGF2ZSBh
IG11dGFibGUgaW5saW5lIFN0eWxlUHJvcGVydHlTZXQgYXR0YWNoZWQuCisgICAgLy8gQW4gU2hh
cmVhYmxlRWxlbWVudERhdGEgc2hvdWxkIG5ldmVyIGhhdmUgYSBtdXRhYmxlIGlubGluZSBTdHls
ZVByb3BlcnRpZXMgYXR0YWNoZWQuCiAgICAgQVNTRVJUKCFvdGhlci5tX2lubGluZVN0eWxlIHx8
ICFvdGhlci5tX2lubGluZVN0eWxlLT5pc011dGFibGUoKSk7CiAgICAgbV9pbmxpbmVTdHlsZSA9
IG90aGVyLm1faW5saW5lU3R5bGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50RGF0YS5oCShy
ZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudERhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEF0dHI7CiBjbGFzcyBTaGFyZWFibGVFbGVtZW50RGF0YTsKLWNsYXNzIFN0eWxlUHJvcGVydHlT
ZXQ7CitjbGFzcyBTdHlsZVByb3BlcnRpZXM7CiBjbGFzcyBVbmlxdWVFbGVtZW50RGF0YTsKIAog
Y2xhc3MgRWxlbWVudERhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxFbGVtZW50RGF0YT4gewpAQCAt
NTMsOCArNTMsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEZvclN0eWxl
UmVzb2x1dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faWRGb3JTdHlsZVJlc29sdXRpb247IH0KICAg
ICB2b2lkIHNldElkRm9yU3R5bGVSZXNvbHV0aW9uKGNvbnN0IEF0b21pY1N0cmluZyYgbmV3SWQp
IGNvbnN0IHsgbV9pZEZvclN0eWxlUmVzb2x1dGlvbiA9IG5ld0lkOyB9CiAKLSAgICBjb25zdCBT
dHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lU3R5
bGUuZ2V0KCk7IH0KLSAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZSgpIGNvbnN0OworICAgIGNvbnN0IFN0eWxlUHJvcGVydGllcyogaW5saW5lU3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX2lubGluZVN0eWxlLmdldCgpOyB9CisgICAgY29uc3QgU3R5
bGVQcm9wZXJ0aWVzKiBwcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpIGNvbnN0OwogCiAgICAg
dW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gIWxlbmd0aCgpOyB9CkBAIC04Nyw3ICs4Nyw3IEBAIHByb3RlY3RlZDoKICAgICBtdXRhYmxl
IHVuc2lnbmVkIG1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGlydHkgOiAxOwogI2VuZGlmCiAK
LSAgICBtdXRhYmxlIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBtX2lubGluZVN0eWxlOworICAg
IG11dGFibGUgUmVmUHRyPFN0eWxlUHJvcGVydGllcz4gbV9pbmxpbmVTdHlsZTsKICAgICBtdXRh
YmxlIFNwYWNlU3BsaXRTdHJpbmcgbV9jbGFzc05hbWVzOwogICAgIG11dGFibGUgQXRvbWljU3Ry
aW5nIG1faWRGb3JTdHlsZVJlc29sdXRpb247CiAKQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6
CiAgICAgZXhwbGljaXQgVW5pcXVlRWxlbWVudERhdGEoY29uc3QgU2hhcmVhYmxlRWxlbWVudERh
dGEmKTsKICAgICBleHBsaWNpdCBVbmlxdWVFbGVtZW50RGF0YShjb25zdCBVbmlxdWVFbGVtZW50
RGF0YSYpOwogCi0gICAgbXV0YWJsZSBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gbV9wcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZTsKKyAgICBtdXRhYmxlIFJlZlB0cjxTdHlsZVByb3BlcnRpZXM+
IG1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGU7CiAgICAgVmVjdG9yPEF0dHJpYnV0ZSwgND4g
bV9hdHRyaWJ1dGVWZWN0b3I7CiB9OwogCkBAIC0xNzAsNyArMTcwLDcgQEAgaW5saW5lIGNvbnN0
IEF0dHJpYnV0ZSogRWxlbWVudERhdGE6OmF0dAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dCBTaGFyZWFibGVFbGVtZW50RGF0YSo+KHRoaXMpLT5tX2F0dHJpYnV0ZUFycmF5OwogfQogCi1p
bmxpbmUgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogRWxlbWVudERhdGE6OnByZXNlbnRhdGlvbkF0
dHJpYnV0ZVN0eWxlKCkgY29uc3QKK2lubGluZSBjb25zdCBTdHlsZVByb3BlcnRpZXMqIEVsZW1l
bnREYXRhOjpwcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFt
X2lzVW5pcXVlKQogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9T
dHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVk
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHls
ZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUg
Ikluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIlByb3BlcnR5U2V0Q1NTU3R5
bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIlNjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oIgot
I2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMu
aCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlv
bnMuaD4KIApAQCAtNTUsNyArNTUsNyBAQCBzdHJ1Y3QgUHJlc2VudGF0aW9uQXR0cmlidXRlQ2Fj
aGVFbnRyeSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgUHJl
c2VudGF0aW9uQXR0cmlidXRlQ2FjaGVLZXkga2V5OwotICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5
U2V0PiB2YWx1ZTsKKyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0aWVzPiB2YWx1ZTsKIH07CiAKIHR5
cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgT3duUHRyPFByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hl
RW50cnk+LCBBbHJlYWR5SGFzaGVkPiBQcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZTsKQEAgLTEy
Myw3ICsxMjMsNyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplU3R5bGVBdHRyCiAg
ICAgQVNTRVJUKGVsZW1lbnREYXRhKCkpOwogICAgIEFTU0VSVChlbGVtZW50RGF0YSgpLT5tX3N0
eWxlQXR0cmlidXRlSXNEaXJ0eSk7CiAgICAgZWxlbWVudERhdGEoKS0+bV9zdHlsZUF0dHJpYnV0
ZUlzRGlydHkgPSBmYWxzZTsKLSAgICBpZiAoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogaW5saW5l
U3R5bGUgPSB0aGlzLT5pbmxpbmVTdHlsZSgpKQorICAgIGlmIChjb25zdCBTdHlsZVByb3BlcnRp
ZXMqIGlubGluZVN0eWxlID0gdGhpcy0+aW5saW5lU3R5bGUoKSkKICAgICAgICAgY29uc3RfY2Fz
dDxTdHlsZWRFbGVtZW50Kj4odGhpcyktPnNldFN5bmNocm9uaXplZExhenlBdHRyaWJ1dGUoc3R5
bGVBdHRyLCBpbmxpbmVTdHlsZS0+YXNUZXh0KCkpOwogfQogCkBAIC0xMzgsMTUgKzEzOCwxNSBA
QCBDU1NTdHlsZURlY2xhcmF0aW9uKiBTdHlsZWRFbGVtZW50OjpzdHlsCiAgICAgcmV0dXJuIGVu
c3VyZU11dGFibGVJbmxpbmVTdHlsZSgpLmVuc3VyZUlubGluZUNTU1N0eWxlRGVjbGFyYXRpb24o
dGhpcyk7CiB9CiAKLU11dGFibGVTdHlsZVByb3BlcnR5U2V0JiBTdHlsZWRFbGVtZW50OjplbnN1
cmVNdXRhYmxlSW5saW5lU3R5bGUoKQorTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgU3R5bGVkRWxl
bWVudDo6ZW5zdXJlTXV0YWJsZUlubGluZVN0eWxlKCkKIHsKLSAgICBSZWZQdHI8U3R5bGVQcm9w
ZXJ0eVNldD4mIGlubGluZVN0eWxlID0gZW5zdXJlVW5pcXVlRWxlbWVudERhdGEoKS5tX2lubGlu
ZVN0eWxlOworICAgIFJlZlB0cjxTdHlsZVByb3BlcnRpZXM+JiBpbmxpbmVTdHlsZSA9IGVuc3Vy
ZVVuaXF1ZUVsZW1lbnREYXRhKCkubV9pbmxpbmVTdHlsZTsKICAgICBpZiAoIWlubGluZVN0eWxl
KQotICAgICAgICBpbmxpbmVTdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUo
c3RyaWN0VG9DU1NQYXJzZXJNb2RlKGlzSFRNTEVsZW1lbnQoKSAmJiAhZG9jdW1lbnQoKS5pblF1
aXJrc01vZGUoKSkpOworICAgICAgICBpbmxpbmVTdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRp
ZXM6OmNyZWF0ZShzdHJpY3RUb0NTU1BhcnNlck1vZGUoaXNIVE1MRWxlbWVudCgpICYmICFkb2N1
bWVudCgpLmluUXVpcmtzTW9kZSgpKSk7CiAgICAgZWxzZSBpZiAoIWlubGluZVN0eWxlLT5pc011
dGFibGUoKSkKICAgICAgICAgaW5saW5lU3R5bGUgPSBpbmxpbmVTdHlsZS0+bXV0YWJsZUNvcHko
KTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmxpbmVTdHlsZS0+aXNN
dXRhYmxlKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNl
dCY+KCppbmxpbmVTdHlsZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE11dGFibGVTdHlsZVBy
b3BlcnRpZXMmPigqaW5saW5lU3R5bGUpOwogfQogCiB2b2lkIFN0eWxlZEVsZW1lbnQ6OmF0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBuZXdWYWx1ZSwgQXR0cmlidXRlTW9kaWZpY2F0aW9uUmVhc29uIHJlYXNvbikKQEAgLTE3Miw3
ICsxNzIsNyBAQCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24qIFN0eWxlZEVsCiAKIGlu
bGluZSB2b2lkIFN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxlRnJvbVN0cmluZyhjb25zdCBB
dG9taWNTdHJpbmcmIG5ld1N0eWxlU3RyaW5nKQogewotICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5
U2V0PiYgaW5saW5lU3R5bGUgPSBlbGVtZW50RGF0YSgpLT5tX2lubGluZVN0eWxlOworICAgIFJl
ZlB0cjxTdHlsZVByb3BlcnRpZXM+JiBpbmxpbmVTdHlsZSA9IGVsZW1lbnREYXRhKCktPm1faW5s
aW5lU3R5bGU7CiAKICAgICAvLyBBdm9pZCByZWR1bmRhbnQgd29yayBpZiB3ZSdyZSB1c2luZyBz
aGFyZWQgYXR0cmlidXRlIGRhdGEgd2l0aCBhbHJlYWR5IHBhcnNlZCBpbmxpbmUgc3R5bGUuCiAg
ICAgaWYgKGlubGluZVN0eWxlICYmICFlbGVtZW50RGF0YSgpLT5pc1VuaXF1ZSgpKQpAQCAtMTg3
LDcgKzE4Nyw3IEBAIGlubGluZSB2b2lkIFN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWwKICAg
ICAgICAgaW5saW5lU3R5bGUgPSBDU1NQYXJzZXI6OnBhcnNlSW5saW5lU3R5bGVEZWNsYXJhdGlv
bihuZXdTdHlsZVN0cmluZywgdGhpcyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChpbmxp
bmVTdHlsZS0+aXNNdXRhYmxlKCkpOwotICAgICAgICBzdGF0aWNfcG9pbnRlcl9jYXN0PE11dGFi
bGVTdHlsZVByb3BlcnR5U2V0PihpbmxpbmVTdHlsZSktPnBhcnNlRGVjbGFyYXRpb24obmV3U3R5
bGVTdHJpbmcsICZkb2N1bWVudCgpLmVsZW1lbnRTaGVldCgpLmNvbnRlbnRzKCkpOworICAgICAg
ICBzdGF0aWNfcG9pbnRlcl9jYXN0PE11dGFibGVTdHlsZVByb3BlcnRpZXM+KGlubGluZVN0eWxl
KS0+cGFyc2VEZWNsYXJhdGlvbihuZXdTdHlsZVN0cmluZywgJmRvY3VtZW50KCkuZWxlbWVudFNo
ZWV0KCkuY29udGVudHMoKSk7CiAgICAgfQogfQogCkBAIC0yNjcsNyArMjY3LDcgQEAgdm9pZCBT
dHlsZWRFbGVtZW50OjpyZW1vdmVBbGxJbmxpbmVTdHlsZQogCiB2b2lkIFN0eWxlZEVsZW1lbnQ6
OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxVUkw+JiB1cmxzKSBjb25z
dAogewotICAgIGlmIChjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSA9IGVsZW1l
bnREYXRhKCkgPyBlbGVtZW50RGF0YSgpLT5pbmxpbmVTdHlsZSgpIDogMCkKKyAgICBpZiAoY29u
c3QgU3R5bGVQcm9wZXJ0aWVzKiBpbmxpbmVTdHlsZSA9IGVsZW1lbnREYXRhKCkgPyBlbGVtZW50
RGF0YSgpLT5pbmxpbmVTdHlsZSgpIDogMCkKICAgICAgICAgaW5saW5lU3R5bGUtPmFkZFN1YnJl
c291cmNlU3R5bGVVUkxzKHVybHMsICZkb2N1bWVudCgpLmVsZW1lbnRTaGVldCgpLmNvbnRlbnRz
KCkpOwogfQogCkBAIC0zMjksMTYgKzMyOSwxNiBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnJlYnVp
bGRQcmVzZW50YXRpb25BCiAgICAgfSBlbHNlCiAgICAgICAgIGNhY2hlSXRlcmF0b3IgPSBwcmVz
ZW50YXRpb25BdHRyaWJ1dGVDYWNoZSgpLmVuZCgpOwogCi0gICAgUmVmUHRyPFN0eWxlUHJvcGVy
dHlTZXQ+IHN0eWxlOworICAgIFJlZlB0cjxTdHlsZVByb3BlcnRpZXM+IHN0eWxlOwogICAgIGlm
IChjYWNoZUhhc2ggJiYgY2FjaGVJdGVyYXRvci0+dmFsdWUpIHsKICAgICAgICAgc3R5bGUgPSBj
YWNoZUl0ZXJhdG9yLT52YWx1ZS0+dmFsdWU7CiAgICAgICAgIHByZXNlbnRhdGlvbkF0dHJpYnV0
ZUNhY2hlQ2xlYW5lcigpLmRpZEhpdFByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlKCk7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRl
KGlzU1ZHRWxlbWVudCgpID8gU1ZHQXR0cmlidXRlTW9kZSA6IENTU1F1aXJrc01vZGUpOworICAg
ICAgICBzdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZShpc1NWR0VsZW1lbnQo
KSA/IFNWR0F0dHJpYnV0ZU1vZGUgOiBDU1NRdWlya3NNb2RlKTsKICAgICAgICAgdW5zaWduZWQg
c2l6ZSA9IGF0dHJpYnV0ZUNvdW50KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlID0g
YXR0cmlidXRlQXQoaSk7Ci0gICAgICAgICAgICBjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25B
dHRyaWJ1dGUoYXR0cmlidXRlLm5hbWUoKSwgYXR0cmlidXRlLnZhbHVlKCksIHN0YXRpY19jYXN0
PE11dGFibGVTdHlsZVByb3BlcnR5U2V0Jj4oKnN0eWxlKSk7CisgICAgICAgICAgICBjb2xsZWN0
U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoYXR0cmlidXRlLm5hbWUoKSwgYXR0cmlidXRl
LnZhbHVlKCksIHN0YXRpY19jYXN0PE11dGFibGVTdHlsZVByb3BlcnRpZXMmPigqc3R5bGUpKTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtMzY0LDE3ICszNjQsMTcgQEAgdm9pZCBTdHlsZWRFbGVt
ZW50OjpyZWJ1aWxkUHJlc2VudGF0aW9uQQogICAgICAgICBjYWNoZUl0ZXJhdG9yLT52YWx1ZSA9
IG5ld0VudHJ5LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBTdHlsZWRFbGVtZW50OjphZGRQcm9wZXJ0
eVRvUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQmIHN0
eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIENTU1ZhbHVlSUQgaWRlbnRpZmllcikKK3Zv
aWQgU3R5bGVkRWxlbWVudDo6YWRkUHJvcGVydHlUb1ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
KE11dGFibGVTdHlsZVByb3BlcnRpZXMmIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
IENTU1ZhbHVlSUQgaWRlbnRpZmllcikKIHsKICAgICBzdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0
eUlELCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWRlbnRpZmllcikpOwog
fQogCi12b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZFByb3BlcnR5VG9QcmVzZW50YXRpb25BdHRyaWJ1
dGVTdHlsZShNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCYgc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHVuaXQp
Cit2b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZFByb3BlcnR5VG9QcmVzZW50YXRpb25BdHRyaWJ1dGVT
dHlsZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBkb3VibGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdW5pdCkKIHsK
ICAgICBzdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZSh2YWx1ZSwgdW5pdCkpOwogfQogICAgIAotdm9pZCBTdHlsZWRFbGVtZW50OjphZGRQcm9w
ZXJ0eVRvUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQm
IHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2
b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZFByb3BlcnR5VG9QcmVzZW50YXRpb25BdHRyaWJ1dGVTdHls
ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIHN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5
SUQsIHZhbHVlLCBmYWxzZSwgJmRvY3VtZW50KCkuZWxlbWVudFNoZWV0KCkuY29udGVudHMoKSk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmgJKHJldmlzaW9uIDE1OTg0MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDkgKzMzLDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXR0cmlidXRlOwot
Y2xhc3MgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ7CitjbGFzcyBNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzOwogY2xhc3MgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOwotY2xhc3MgU3R5bGVQ
cm9wZXJ0eVNldDsKK2NsYXNzIFN0eWxlUHJvcGVydGllczsKIAogc3RydWN0IFByZXNlbnRhdGlv
bkF0dHJpYnV0ZUNhY2hlS2V5OwogCkBAIC00MywxMCArNDMsMTAgQEAgY2xhc3MgU3R5bGVkRWxl
bWVudCA6IHB1YmxpYyBFbGVtZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TdHlsZWRFbGVt
ZW50KCk7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIGFkZGl0aW9uYWxQ
cmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGNv
bnN0IFN0eWxlUHJvcGVydGllcyogYWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
KCkgeyByZXR1cm4gMDsgfQogICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxlQXR0cmlidXRlKCk7CiAK
LSAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IGVsZW1lbnREYXRhKCkgPyBlbGVtZW50RGF0YSgpLT5tX2lubGluZVN0eWxlLmdldCgpIDogMDsg
fQorICAgIGNvbnN0IFN0eWxlUHJvcGVydGllcyogaW5saW5lU3R5bGUoKSBjb25zdCB7IHJldHVy
biBlbGVtZW50RGF0YSgpID8gZWxlbWVudERhdGEoKS0+bV9pbmxpbmVTdHlsZS5nZXQoKSA6IDA7
IH0KICAgICAKICAgICBib29sIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwg
Q1NTVmFsdWVJRCBpZGVudGlmaWVyLCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsKICAgICBib29s
IHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTUHJvcGVydHlJRCBpZGVu
dGlmaWVyLCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsKQEAgLTU5LDggKzU5LDggQEAgcHVibGlj
OgogICAgIAogICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSBPVkVSUklE
RSBGSU5BTDsKIAotICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByZXNlbnRhdGlvbkF0dHJp
YnV0ZVN0eWxlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlv
bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgTXV0
YWJsZVN0eWxlUHJvcGVydHlTZXQmKSB7IH0KKyAgICBjb25zdCBTdHlsZVByb3BlcnRpZXMqIHBy
ZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTdHls
ZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRv
bWljU3RyaW5nJiwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyYpIHsgfQogCiBwcm90ZWN0ZWQ6CiAg
ICAgU3R5bGVkRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBEb2N1bWVudCYgZG9j
dW1lbnQsIENvbnN0cnVjdGlvblR5cGUgdHlwZSkKQEAgLTcyLDkgKzcyLDkgQEAgcHJvdGVjdGVk
OgogCiAgICAgdmlydHVhbCBib29sIGlzUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdm9pZCBhZGRQcm9wZXJ0
eVRvUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQmLCBD
U1NQcm9wZXJ0eUlELCBDU1NWYWx1ZUlEIGlkZW50aWZpZXIpOwotICAgIHZvaWQgYWRkUHJvcGVy
dHlUb1ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKE11dGFibGVTdHlsZVByb3BlcnR5U2V0Jiwg
Q1NTUHJvcGVydHlJRCwgZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVz
KTsKLSAgICB2b2lkIGFkZFByb3BlcnR5VG9QcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZShNdXRh
YmxlU3R5bGVQcm9wZXJ0eVNldCYsIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUp
OworICAgIHZvaWQgYWRkUHJvcGVydHlUb1ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKE11dGFi
bGVTdHlsZVByb3BlcnRpZXMmLCBDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZUlEIGlkZW50aWZpZXIp
OworICAgIHZvaWQgYWRkUHJvcGVydHlUb1ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKE11dGFi
bGVTdHlsZVByb3BlcnRpZXMmLCBDU1NQcm9wZXJ0eUlELCBkb3VibGUgdmFsdWUsIENTU1ByaW1p
dGl2ZVZhbHVlOjpVbml0VHlwZXMpOworICAgIHZvaWQgYWRkUHJvcGVydHlUb1ByZXNlbnRhdGlv
bkF0dHJpYnV0ZVN0eWxlKE11dGFibGVTdHlsZVByb3BlcnRpZXMmLCBDU1NQcm9wZXJ0eUlELCBj
b25zdCBTdHJpbmcmIHZhbHVlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNvdXJjZUF0
dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8VVJMPiYpIGNvbnN0IE9WRVJSSURFOwogCkBAIC04NCw3
ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbmxpbmVTdHlsZUNoYW5nZWQoKTsKICAgICBQ
cm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24qIGlubGluZVN0eWxlQ1NTT01XcmFwcGVyKCk7
CiAgICAgdm9pZCBzZXRJbmxpbmVTdHlsZUZyb21TdHJpbmcoY29uc3QgQXRvbWljU3RyaW5nJik7
Ci0gICAgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQmIGVuc3VyZU11dGFibGVJbmxpbmVTdHlsZSgp
OworICAgIE11dGFibGVTdHlsZVByb3BlcnRpZXMmIGVuc3VyZU11dGFibGVJbmxpbmVTdHlsZSgp
OwogCiAgICAgdm9pZCBtYWtlUHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGVLZXkoUHJlc2VudGF0
aW9uQXR0cmlidXRlQ2FjaGVLZXkmKSBjb25zdDsKICAgICB2b2lkIHJlYnVpbGRQcmVzZW50YXRp
b25BdHRyaWJ1dGVTdHlsZSgpOwpAQCAtOTYsNyArOTYsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZWRF
bGVtZW50OjppbnZhbGlkYXRlU3R5CiAgICAgZWxlbWVudERhdGEoKS0+bV9zdHlsZUF0dHJpYnV0
ZUlzRGlydHkgPSB0cnVlOwogfQogCi1pbmxpbmUgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogU3R5
bGVkRWxlbWVudDo6cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKQoraW5saW5lIGNvbnN0IFN0
eWxlUHJvcGVydGllcyogU3R5bGVkRWxlbWVudDo6cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUo
KQogewogICAgIGlmICghZWxlbWVudERhdGEoKSkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24g
MTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlICJOb2RlVHJhdmVyc2Fs
LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgot
I2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMu
aCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1
ZGUgIlRleHROb2RlVHJhdmVyc2FsLmgiCkBAIC0yOTksMTAgKzI5OSwxMCBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUoCiAgICAgICAgIHVwZGF0ZVN0YXJ0RW5kKHN0
YXJ0UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgZW5kUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7CiB9
CiAKLXN0YXRpYyBQYXNzUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnR5U2V0PiBjb3B5U3R5bGVP
ckNyZWF0ZUVtcHR5KGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlKQorc3RhdGljIFBhc3NS
ZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gY29weVN0eWxlT3JDcmVhdGVFbXB0eShjb25z
dCBTdHlsZVByb3BlcnRpZXMqIHN0eWxlKQogewogICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJl
dHVybiBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CisgICAgICAgIHJldHVybiBN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKICAgICByZXR1cm4gc3R5bGUtPm11dGFi
bGVDb3B5KCk7CiB9CiAKQEAgLTM5Niw3ICszOTYsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjphcHBseVJlbGF0aXZlRm9uCiAgICAgICAgIH0KICAgICAgICAgbGFzdFN0eWxlZE5vZGUgPSBu
b2RlOwogCi0gICAgICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gaW5saW5lU3R5
bGUgPSBjb3B5U3R5bGVPckNyZWF0ZUVtcHR5KGVsZW1lbnQtPmlubGluZVN0eWxlKCkpOworICAg
ICAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gaW5saW5lU3R5bGUgPSBjb3B5U3R5
bGVPckNyZWF0ZUVtcHR5KGVsZW1lbnQtPmlubGluZVN0eWxlKCkpOwogICAgICAgICBmbG9hdCBj
dXJyZW50Rm9udFNpemUgPSBjb21wdXRlZEZvbnRTaXplKG5vZGUpOwogICAgICAgICBmbG9hdCBk
ZXNpcmVkRm9udFNpemUgPSBzdGQ6Om1heChNaW5pbXVtRm9udFNpemUsIHN0YXJ0aW5nRm9udFNp
emVzLmdldChub2RlKSArIHN0eWxlLT5mb250U2l6ZURlbHRhKCkpOwogICAgICAgICBSZWZQdHI8
Q1NTVmFsdWU+IHZhbHVlID0gaW5saW5lU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJv
cGVydHlGb250U2l6ZSk7CkBAIC01MjUsNyArNTI1LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6cmVtb3ZlRW1iZWRkaW5nVQogICAgICAgICAgICAgLy8gb3RoZXIgYXR0cmlidXRlcywgbGlr
ZSB3ZSAoc2hvdWxkKSBkbyB3aXRoIEIgYW5kIEkgZWxlbWVudHMuCiAgICAgICAgICAgICByZW1v
dmVOb2RlQXR0cmlidXRlKGVsZW1lbnQsIGRpckF0dHIpOwogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnR5U2V0PiBpbmxpbmVTdHlsZSA9IGNv
cHlTdHlsZU9yQ3JlYXRlRW1wdHkoZWxlbWVudC0+aW5saW5lU3R5bGUoKSk7CisgICAgICAgICAg
ICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gaW5saW5lU3R5bGUgPSBjb3B5U3R5bGVP
ckNyZWF0ZUVtcHR5KGVsZW1lbnQtPmlubGluZVN0eWxlKCkpOwogICAgICAgICAgICAgaW5saW5l
U3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VW5pY29kZUJpZGksIENTU1ZhbHVlTm9ybWFs
KTsKICAgICAgICAgICAgIGlubGluZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eURp
cmVjdGlvbik7CiAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0
ciwgaW5saW5lU3R5bGUtPmFzVGV4dCgpKTsKQEAgLTc2OSw4ICs3NjksOCBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAvLyBBZGQgdG8gdGhpcyBlbGVtZW50J3MgaW5saW5lIHN0eWxlIGFuZCBza2lw
IG92ZXIgaXRzIGNvbnRlbnRzLgogICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0
b0hUTUxFbGVtZW50KG5vZGUuZ2V0KCkpOwotICAgICAgICAgICAgUmVmUHRyPE11dGFibGVTdHls
ZVByb3BlcnR5U2V0PiBpbmxpbmVTdHlsZSA9IGNvcHlTdHlsZU9yQ3JlYXRlRW1wdHkoZWxlbWVu
dC0+aW5saW5lU3R5bGUoKSk7Ci0gICAgICAgICAgICBpZiAoTXV0YWJsZVN0eWxlUHJvcGVydHlT
ZXQqIG90aGVyU3R5bGUgPSBzdHlsZS0+c3R5bGUoKSkKKyAgICAgICAgICAgIFJlZlB0cjxNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzPiBpbmxpbmVTdHlsZSA9IGNvcHlTdHlsZU9yQ3JlYXRlRW1wdHko
ZWxlbWVudC0+aW5saW5lU3R5bGUoKSk7CisgICAgICAgICAgICBpZiAoTXV0YWJsZVN0eWxlUHJv
cGVydGllcyogb3RoZXJTdHlsZSA9IHN0eWxlLT5zdHlsZSgpKQogICAgICAgICAgICAgICAgIGlu
bGluZVN0eWxlLT5tZXJnZUFuZE92ZXJyaWRlT25Db25mbGljdCgqb3RoZXJTdHlsZSk7CiAgICAg
ICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUt
PmFzVGV4dCgpKTsKICAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBp
bmdDaGlsZHJlbihub2RlLmdldCgpKTsKQEAgLTEzODcsNyArMTM4Nyw3IEBAIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OmFkZEJsb2NrU3R5bGUoY28KICAgICBTdHJpbmcgY3NzU3R5bGUgPSBzdHls
ZUNoYW5nZS5jc3NTdHlsZSgpOwogICAgIFN0cmluZ0J1aWxkZXIgY3NzVGV4dDsKICAgICBjc3NU
ZXh0LmFwcGVuZChjc3NTdHlsZSk7Ci0gICAgaWYgKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIGRl
Y2wgPSBibG9jay0+aW5saW5lU3R5bGUoKSkgeworICAgIGlmIChjb25zdCBTdHlsZVByb3BlcnRp
ZXMqIGRlY2wgPSBibG9jay0+aW5saW5lU3R5bGUoKSkgewogICAgICAgICBpZiAoIWNzc1N0eWxl
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNzc1RleHQuYXBwZW5kKCcgJyk7CiAgICAgICAgIGNz
c1RleHQuYXBwZW5kKGRlY2wtPmFzVGV4dCgpKTsKQEAgLTE0NjcsNyArMTQ2Nyw3IEBAIHZvaWQg
QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKIAogICAgIGlmIChzdHlsZUNoYW5n
ZS5jc3NTdHlsZSgpLmxlbmd0aCgpKSB7CiAgICAgICAgIGlmIChzdHlsZUNvbnRhaW5lcikgewot
ICAgICAgICAgICAgaWYgKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIGV4aXN0aW5nU3R5bGUgPSBz
dHlsZUNvbnRhaW5lci0+aW5saW5lU3R5bGUoKSkgeworICAgICAgICAgICAgaWYgKGNvbnN0IFN0
eWxlUHJvcGVydGllcyogZXhpc3RpbmdTdHlsZSA9IHN0eWxlQ29udGFpbmVyLT5pbmxpbmVTdHls
ZSgpKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGV4aXN0aW5nVGV4dCA9IGV4aXN0aW5nU3R5
bGUtPmFzVGV4dCgpOwogICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgY3NzVGV4dDsKICAg
ICAgICAgICAgICAgICBjc3NUZXh0LmFwcGVuZChleGlzdGluZ1RleHQpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlJlbW92ZU5vZGVDb21tYW5kLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94
LmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVy
dGllcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdGluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBA
QAogI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgIlN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKLSNpbmNsdWRlICJTdHlsZVByb3Bl
cnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogI2luY2x1ZGUgIlN0eWxlZEVsZW1l
bnQuaCIKQEAgLTg5LDcgKzg5LDcgQEAgY29uc3QgdW5zaWduZWQgbnVtSW5oZXJpdGFibGVFZGl0
aW5nUHJvcAogCiBlbnVtIEVkaXRpbmdQcm9wZXJ0aWVzVG9JbmNsdWRlIHsgT25seUluaGVyaXRh
YmxlRWRpdGluZ1Byb3BlcnRpZXMsIEFsbEVkaXRpbmdQcm9wZXJ0aWVzIH07CiB0ZW1wbGF0ZSA8
Y2xhc3MgU3R5bGVEZWNsYXJhdGlvblR5cGU+Ci1zdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5
bGVQcm9wZXJ0eVNldD4gY29weUVkaXRpbmdQcm9wZXJ0aWVzKFN0eWxlRGVjbGFyYXRpb25UeXBl
KiBzdHlsZSwgRWRpdGluZ1Byb3BlcnRpZXNUb0luY2x1ZGUgdHlwZSkKK3N0YXRpYyBQYXNzUmVm
UHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGNvcHlFZGl0aW5nUHJvcGVydGllcyhTdHlsZURl
Y2xhcmF0aW9uVHlwZSogc3R5bGUsIEVkaXRpbmdQcm9wZXJ0aWVzVG9JbmNsdWRlIHR5cGUpCiB7
CiAgICAgaWYgKHR5cGUgPT0gQWxsRWRpdGluZ1Byb3BlcnRpZXMpCiAgICAgICAgIHJldHVybiBz
dHlsZS0+Y29weVByb3BlcnRpZXNJblNldChlZGl0aW5nUHJvcGVydGllcywgbnVtQWxsRWRpdGlu
Z1Byb3BlcnRpZXMpOwpAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Vk
aXRpbmdQcm9wZXJ0eShpbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBQYXNzUmVm
UHRyPE11dGFibGVTdHlsZVByb3BlcnR5U2V0PiBjb3B5UHJvcGVydGllc0Zyb21Db21wdXRlZFN0
eWxlKENvbXB1dGVkU3R5bGVFeHRyYWN0b3ImIGNvbXB1dGVkU3R5bGUsIEVkaXRpbmdTdHlsZTo6
UHJvcGVydGllc1RvSW5jbHVkZSBwcm9wZXJ0aWVzVG9JbmNsdWRlKQorc3RhdGljIFBhc3NSZWZQ
dHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gY29weVByb3BlcnRpZXNGcm9tQ29tcHV0ZWRTdHls
ZShDb21wdXRlZFN0eWxlRXh0cmFjdG9yJiBjb21wdXRlZFN0eWxlLCBFZGl0aW5nU3R5bGU6OlBy
b3BlcnRpZXNUb0luY2x1ZGUgcHJvcGVydGllc1RvSW5jbHVkZSkKIHsKICAgICBzd2l0Y2ggKHBy
b3BlcnRpZXNUb0luY2x1ZGUpIHsKICAgICBjYXNlIEVkaXRpbmdTdHlsZTo6QWxsUHJvcGVydGll
czoKQEAgLTExOSwxMyArMTE5LDEzIEBAIHN0YXRpYyBQYXNzUmVmUHRyPE11dGFibGVTdHlsZVBy
b3BlcnR5U2UKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8TXV0YWJsZVN0
eWxlUHJvcGVydHlTZXQ+IGNvcHlQcm9wZXJ0aWVzRnJvbUNvbXB1dGVkU3R5bGUoTm9kZSogbm9k
ZSwgRWRpdGluZ1N0eWxlOjpQcm9wZXJ0aWVzVG9JbmNsdWRlIHByb3BlcnRpZXNUb0luY2x1ZGUp
CitzdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBjb3B5UHJvcGVydGll
c0Zyb21Db21wdXRlZFN0eWxlKE5vZGUqIG5vZGUsIEVkaXRpbmdTdHlsZTo6UHJvcGVydGllc1Rv
SW5jbHVkZSBwcm9wZXJ0aWVzVG9JbmNsdWRlKQogewogICAgIENvbXB1dGVkU3R5bGVFeHRyYWN0
b3IgY29tcHV0ZWRTdHlsZShub2RlKTsKICAgICByZXR1cm4gY29weVByb3BlcnRpZXNGcm9tQ29t
cHV0ZWRTdHlsZShjb21wdXRlZFN0eWxlLCBwcm9wZXJ0aWVzVG9JbmNsdWRlKTsKIH0KIAotc3Rh
dGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGV4dHJhY3RQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0eWxl
UHJvcGVydHlTZXQqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCitzdGF0aWMgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gZXh0cmFjdFByb3BlcnR5VmFsdWUoY29uc3QgU3R5bGVQcm9wZXJ0
aWVzKiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewogICAgIHJldHVybiBzdHls
ZSA/IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpIDogUGFzc1JlZlB0cjxD
U1NWYWx1ZT4oKTsKIH0KQEAgLTE0NCwxMSArMTQ0LDExIEBAIGludCBpZGVudGlmaWVyRm9yU3R5
bGVQcm9wZXJ0eShUKiBzdHlsZSwKICAgICByZXR1cm4gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1
ZS5nZXQoKSktPmdldFZhbHVlSUQoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc1Jl
ZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gZ2V0UHJvcGVydGllc05vdEluKFN0eWxlUHJv
cGVydHlTZXQqIHN0eWxlV2l0aFJlZHVuZGFudFByb3BlcnRpZXMsIFQqIGJhc2VTdHlsZSk7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNzUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGdl
dFByb3BlcnRpZXNOb3RJbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlV2l0aFJlZHVuZGFudFByb3Bl
cnRpZXMsIFQqIGJhc2VTdHlsZSk7CiBlbnVtIExlZ2FjeUZvbnRTaXplTW9kZSB7IEFsd2F5c1Vz
ZUxlZ2FjeUZvbnRTaXplLCBVc2VMZWdhY3lGb250U2l6ZU9ubHlJZlBpeGVsVmFsdWVzTWF0Y2gg
fTsKIHN0YXRpYyBpbnQgbGVnYWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUoRG9jdW1lbnQqLCBDU1NQ
cmltaXRpdmVWYWx1ZSosIGJvb2wgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUsIExlZ2Fj
eUZvbnRTaXplTW9kZSk7CiBzdGF0aWMgYm9vbCBpc1RyYW5zcGFyZW50Q29sb3JWYWx1ZShDU1NW
YWx1ZSopOwotc3RhdGljIGJvb2wgaGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kQ29sb3IoU3R5bGVQ
cm9wZXJ0eVNldCopOworc3RhdGljIGJvb2wgaGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kQ29sb3Io
U3R5bGVQcm9wZXJ0aWVzKik7CiBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gYmFja2dyb3Vu
ZENvbG9ySW5FZmZlY3QoTm9kZSopOwogCiBjbGFzcyBIVE1MRWxlbWVudEVxdWl2YWxlbnQgewpA
QCAtMTYyLDggKzE2Miw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5IVE1MRWxlbWVudEVxdWl2
YWxlbnQoKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgbWF0Y2hlcyhjb25zdCBFbGVtZW50KiBlbGVt
ZW50KSBjb25zdCB7IHJldHVybiAhbV90YWdOYW1lIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoKm1f
dGFnTmFtZSk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzQXR0cmlidXRlKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcHJvcGVydHlFeGlzdHNJblN0eWxlKGNvbnN0
IFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlKSBjb25zdCB7IHJldHVybiBzdHlsZS0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShtX3Byb3BlcnR5SUQpOyB9Ci0gICAgdmlydHVhbCBib29sIHZhbHVlSXNQcmVz
ZW50SW5TdHlsZShFbGVtZW50KiwgU3R5bGVQcm9wZXJ0eVNldCopIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBwcm9wZXJ0eUV4aXN0c0luU3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHls
ZSkgY29uc3QgeyByZXR1cm4gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUobV9wcm9wZXJ0eUlE
KTsgfQorICAgIHZpcnR1YWwgYm9vbCB2YWx1ZUlzUHJlc2VudEluU3R5bGUoRWxlbWVudCosIFN0
eWxlUHJvcGVydGllcyopIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhZGRUb1N0eWxlKEVsZW1l
bnQqLCBFZGl0aW5nU3R5bGUqKSBjb25zdDsKIAogcHJvdGVjdGVkOgpAQCAtMTk1LDcgKzE5NSw3
IEBAIEhUTUxFbGVtZW50RXF1aXZhbGVudDo6SFRNTEVsZW1lbnRFcXVpdmEKICAgICBBU1NFUlQo
cHJpbWl0aXZlVmFsdWUgIT0gQ1NTVmFsdWVJbnZhbGlkKTsKIH0KIAotYm9vbCBIVE1MRWxlbWVu
dEVxdWl2YWxlbnQ6OnZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50KiBlbGVtZW50LCBTdHls
ZVByb3BlcnR5U2V0KiBzdHlsZSkgY29uc3QKK2Jvb2wgSFRNTEVsZW1lbnRFcXVpdmFsZW50Ojp2
YWx1ZUlzUHJlc2VudEluU3R5bGUoRWxlbWVudCogZWxlbWVudCwgU3R5bGVQcm9wZXJ0aWVzKiBz
dHlsZSkgY29uc3QKIHsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gc3R5bGUtPmdldFBy
b3BlcnR5Q1NTVmFsdWUobV9wcm9wZXJ0eUlEKTsKICAgICByZXR1cm4gbWF0Y2hlcyhlbGVtZW50
KSAmJiB2YWx1ZSAmJiB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpICYmIHRvQ1NTUHJpbWl0aXZl
VmFsdWUodmFsdWUuZ2V0KCkpLT5nZXRWYWx1ZUlEKCkgPT0gbV9wcmltaXRpdmVWYWx1ZS0+Z2V0
VmFsdWVJRCgpOwpAQCAtMjEyLDggKzIxMiw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgSFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudChwcmltaXRpdmVW
YWx1ZSwgdGFnTmFtZSkpOwogICAgIH0KLSAgICB2aXJ0dWFsIGJvb2wgcHJvcGVydHlFeGlzdHNJ
blN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
dmFsdWVJc1ByZXNlbnRJblN0eWxlKEVsZW1lbnQqLCBTdHlsZVByb3BlcnR5U2V0KikgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHByb3BlcnR5RXhpc3RzSW5TdHlsZShjb25zdCBTdHlsZVByb3Bl
cnRpZXMqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgdmFsdWVJc1ByZXNlbnRJblN0eWxlKEVs
ZW1lbnQqLCBTdHlsZVByb3BlcnRpZXMqKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBIVE1MVGV4
dERlY29yYXRpb25FcXVpdmFsZW50KENTU1ZhbHVlSUQgcHJpbWl0aXZlVmFsdWUsIGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUpOwpAQCAtMjI1LDEyICsyMjUsMTIgQEAgSFRNTFRleHREZWNv
cmF0aW9uRXF1aXZhbGVudDo6SFRNTFRleHREZQogewogfQogCi1ib29sIEhUTUxUZXh0RGVjb3Jh
dGlvbkVxdWl2YWxlbnQ6OnByb3BlcnR5RXhpc3RzSW5TdHlsZShjb25zdCBTdHlsZVByb3BlcnR5
U2V0KiBzdHlsZSkgY29uc3QKK2Jvb2wgSFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDo6cHJv
cGVydHlFeGlzdHNJblN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyogc3R5bGUpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0
VGV4dERlY29yYXRpb25zSW5FZmZlY3QpIHx8IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENT
U1Byb3BlcnR5VGV4dERlY29yYXRpb24pOwogfQogCi1ib29sIEhUTUxUZXh0RGVjb3JhdGlvbkVx
dWl2YWxlbnQ6OnZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50KiBlbGVtZW50LCBTdHlsZVBy
b3BlcnR5U2V0KiBzdHlsZSkgY29uc3QKK2Jvb2wgSFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVu
dDo6dmFsdWVJc1ByZXNlbnRJblN0eWxlKEVsZW1lbnQqIGVsZW1lbnQsIFN0eWxlUHJvcGVydGll
cyogc3R5bGUpIGNvbnN0CiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBzdHlsZVZhbHVlID0gc3R5
bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJ
bkVmZmVjdCk7CiAgICAgaWYgKCFzdHlsZVZhbHVlKQpAQCAtMjUxLDcgKzI1MSw3IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBFbGVtZW50KiBlbGVtKSBjb25zdCB7IHJldHVy
biBIVE1MRWxlbWVudEVxdWl2YWxlbnQ6Om1hdGNoZXMoZWxlbSkgJiYgZWxlbS0+aGFzQXR0cmli
dXRlKG1fYXR0ck5hbWUpOyB9CiAgICAgdmlydHVhbCBib29sIGhhc0F0dHJpYnV0ZSgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgdmFsdWVJc1ByZXNlbnRJblN0eWxl
KEVsZW1lbnQqLCBTdHlsZVByb3BlcnR5U2V0KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHZh
bHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50KiwgU3R5bGVQcm9wZXJ0aWVzKikgY29uc3Q7CiAg
ICAgdmlydHVhbCB2b2lkIGFkZFRvU3R5bGUoRWxlbWVudCosIEVkaXRpbmdTdHlsZSopIGNvbnN0
OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gYXR0cmlidXRlVmFsdWVBc0NTU1Zh
bHVlKEVsZW1lbnQqKSBjb25zdDsKICAgICBpbmxpbmUgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
cmlidXRlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0ck5hbWU7IH0KQEAgLTI3NCw3ICsyNzQs
NyBAQCBIVE1MQXR0cmlidXRlRXF1aXZhbGVudDo6SFRNTEF0dHJpYnV0ZUVxCiB7CiB9CiAKLWJv
b2wgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnQ6OnZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50
KiBlbGVtZW50LCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkgY29uc3QKK2Jvb2wgSFRNTEF0dHJp
YnV0ZUVxdWl2YWxlbnQ6OnZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50KiBlbGVtZW50LCBT
dHlsZVByb3BlcnRpZXMqIHN0eWxlKSBjb25zdAogewogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFs
dWUgPSBhdHRyaWJ1dGVWYWx1ZUFzQ1NTVmFsdWUoZWxlbWVudCk7CiAgICAgUmVmUHRyPENTU1Zh
bHVlPiBzdHlsZVZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUobV9wcm9wZXJ0eUlE
KTsKQEAgLTI5NCw4ICsyOTQsOCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBIVE1MQXR0cmlidXRl
RXF1aXZhCiAgICAgaWYgKCFlbGVtZW50LT5oYXNBdHRyaWJ1dGUobV9hdHRyTmFtZSkpCiAgICAg
ICAgIHJldHVybiAwOwogICAgIAotICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4g
ZHVtbXlTdHlsZTsKLSAgICBkdW1teVN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBkdW1teVN0eWxlOwor
ICAgIGR1bW15U3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKICAgICBk
dW1teVN0eWxlLT5zZXRQcm9wZXJ0eShtX3Byb3BlcnR5SUQsIGVsZW1lbnQtPmdldEF0dHJpYnV0
ZShtX2F0dHJOYW1lKSk7CiAgICAgcmV0dXJuIGR1bW15U3R5bGUtPmdldFByb3BlcnR5Q1NTVmFs
dWUobV9wcm9wZXJ0eUlEKTsKIH0KQEAgLTM1MCw3ICszNTAsNyBAQCBFZGl0aW5nU3R5bGU6OkVk
aXRpbmdTdHlsZShjb25zdCBQb3NpdGlvCiAgICAgaW5pdChwb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpLCBwcm9wZXJ0aWVzVG9JbmNsdWRlKTsKIH0KIAotRWRpdGluZ1N0eWxlOjpFZGl0aW5nU3R5
bGUoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUpCitFZGl0aW5nU3R5bGU6OkVkaXRpbmdT
dHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMqIHN0eWxlKQogICAgIDogbV9zaG91bGRVc2VGaXhl
ZERlZmF1bHRGb250U2l6ZShmYWxzZSkKICAgICAsIG1fZm9udFNpemVEZWx0YShOb0ZvbnREZWx0
YSkKIHsKQEAgLTQ3NSw3ICs0NzUsNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlVGV4dEZp
bGxBbmRTdHJvCiB2b2lkIEVkaXRpbmdTdHlsZTo6c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCkKIHsKICAgICBp
ZiAoIW1fbXV0YWJsZVN0eWxlKQotICAgICAgICBtX211dGFibGVTdHlsZSA9IE11dGFibGVTdHls
ZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKKyAgICAgICAgbV9tdXRhYmxlU3R5bGUgPSBNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKIAogICAgIG1fbXV0YWJsZVN0eWxlLT5zZXRQcm9w
ZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50KTsKIH0KQEAgLTU0MCw3ICs1NDAsNyBA
QCBib29sIEVkaXRpbmdTdHlsZTo6dGV4dERpcmVjdGlvbihXcml0aW5nCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIEVkaXRpbmdTdHlsZTo6c2V0U3R5bGUoUGFzc1JlZlB0cjxNdXRhYmxl
U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUpCit2b2lkIEVkaXRpbmdTdHlsZTo6c2V0U3R5bGUoUGFz
c1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBzdHlsZSkKIHsKICAgICBtX211dGFibGVT
dHlsZSA9IHN0eWxlOwogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBmaWd1cmUg
b3V0IHdoZXRoZXIgb3Igbm90IGZvbnQgaXMgZml4ZWQgd2lkdGggZm9yIG11dGFibGUgc3R5bGUu
CkBAIC01NDksNyArNTQ5LDcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnNldFN0eWxlKFBhc3NSZWZQ
dHI8TQogICAgIGV4dHJhY3RGb250U2l6ZURlbHRhKCk7CiB9CiAKLXZvaWQgRWRpdGluZ1N0eWxl
OjpvdmVycmlkZVdpdGhTdHlsZShjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkKK3ZvaWQg
RWRpdGluZ1N0eWxlOjpvdmVycmlkZVdpdGhTdHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMqIHN0
eWxlKQogewogICAgIHJldHVybiBtZXJnZVN0eWxlKHN0eWxlLCBPdmVycmlkZVZhbHVlcyk7CiB9
CkBAIC01ODYsNyArNTg2LDcgQEAgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHls
ZTo6ZQogUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6ZXh0cmFjdEFuZFJl
bW92ZVRleHREaXJlY3Rpb24oKQogewogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHRleHREaXJl
Y3Rpb24gPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgpOwotICAgIHRleHREaXJlY3Rpb24tPm1fbXV0
YWJsZVN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOworICAgIHRleHRE
aXJlY3Rpb24tPm1fbXV0YWJsZVN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRl
KCk7CiAgICAgdGV4dERpcmVjdGlvbi0+bV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1By
b3BlcnR5VW5pY29kZUJpZGksIENTU1ZhbHVlRW1iZWQsIG1fbXV0YWJsZVN0eWxlLT5wcm9wZXJ0
eUlzSW1wb3J0YW50KENTU1Byb3BlcnR5VW5pY29kZUJpZGkpKTsKICAgICB0ZXh0RGlyZWN0aW9u
LT5tX211dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIG1fbXV0
YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKSwKICAgICAg
ICAgbV9tdXRhYmxlU3R5bGUtPnByb3BlcnR5SXNJbXBvcnRhbnQoQ1NTUHJvcGVydHlEaXJlY3Rp
b24pKTsKQEAgLTYwOSw4ICs2MDksOCBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVB
ZGRlZEJ5Tm9kCiB7CiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5wYXJlbnROb2RlKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IHBhcmVudFN0
eWxlID0gY29weVByb3BlcnRpZXNGcm9tQ29tcHV0ZWRTdHlsZShub2RlLT5wYXJlbnROb2RlKCks
IEVkaXRpbmdQcm9wZXJ0aWVzSW5FZmZlY3QpOwotICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9w
ZXJ0eVNldD4gbm9kZVN0eWxlID0gY29weVByb3BlcnRpZXNGcm9tQ29tcHV0ZWRTdHlsZShub2Rl
LCBFZGl0aW5nUHJvcGVydGllc0luRWZmZWN0KTsKKyAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJv
cGVydGllcz4gcGFyZW50U3R5bGUgPSBjb3B5UHJvcGVydGllc0Zyb21Db21wdXRlZFN0eWxlKG5v
ZGUtPnBhcmVudE5vZGUoKSwgRWRpdGluZ1Byb3BlcnRpZXNJbkVmZmVjdCk7CisgICAgUmVmUHRy
PE11dGFibGVTdHlsZVByb3BlcnRpZXM+IG5vZGVTdHlsZSA9IGNvcHlQcm9wZXJ0aWVzRnJvbUNv
bXB1dGVkU3R5bGUobm9kZSwgRWRpdGluZ1Byb3BlcnRpZXNJbkVmZmVjdCk7CiAgICAgbm9kZVN0
eWxlLT5yZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhwYXJlbnRTdHlsZS5nZXQoKSk7CiAgICAg
bV9tdXRhYmxlU3R5bGUtPnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKG5vZGVTdHlsZS5nZXQo
KSk7CiB9CkBAIC02MjAsOCArNjIwLDggQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxl
Q29uZmxpY3RpbgogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cGFyZW50Tm9kZSgpIHx8ICFtX211
dGFibGVTdHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPE11dGFibGVTdHlsZVBy
b3BlcnR5U2V0PiBwYXJlbnRTdHlsZSA9IGNvcHlQcm9wZXJ0aWVzRnJvbUNvbXB1dGVkU3R5bGUo
bm9kZS0+cGFyZW50Tm9kZSgpLCBFZGl0aW5nUHJvcGVydGllc0luRWZmZWN0KTsKLSAgICBSZWZQ
dHI8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IG5vZGVTdHlsZSA9IGNvcHlQcm9wZXJ0aWVzRnJv
bUNvbXB1dGVkU3R5bGUobm9kZSwgRWRpdGluZ1Byb3BlcnRpZXNJbkVmZmVjdCk7CisgICAgUmVm
UHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IHBhcmVudFN0eWxlID0gY29weVByb3BlcnRpZXNG
cm9tQ29tcHV0ZWRTdHlsZShub2RlLT5wYXJlbnROb2RlKCksIEVkaXRpbmdQcm9wZXJ0aWVzSW5F
ZmZlY3QpOworICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBub2RlU3R5bGUgPSBj
b3B5UHJvcGVydGllc0Zyb21Db21wdXRlZFN0eWxlKG5vZGUsIEVkaXRpbmdQcm9wZXJ0aWVzSW5F
ZmZlY3QpOwogICAgIG5vZGVTdHlsZS0+cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMocGFyZW50
U3R5bGUuZ2V0KCkpOwogCiAgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IG5vZGVTdHlsZS0+
cHJvcGVydHlDb3VudCgpOwpAQCAtNjY0LDcgKzY2NCw3IEBAIFRyaVN0YXRlIEVkaXRpbmdTdHls
ZTo6dHJpU3RhdGVPZlN0eWxlKEUKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBUcmlTdGF0ZSBFZGl0
aW5nU3R5bGU6OnRyaVN0YXRlT2ZTdHlsZShUKiBzdHlsZVRvQ29tcGFyZSwgU2hvdWxkSWdub3Jl
VGV4dE9ubHlQcm9wZXJ0aWVzIHNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcykgY29uc3QK
IHsKLSAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IGRpZmZlcmVuY2UgPSBnZXRQ
cm9wZXJ0aWVzTm90SW4obV9tdXRhYmxlU3R5bGUuZ2V0KCksIHN0eWxlVG9Db21wYXJlKTsKKyAg
ICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZGlmZmVyZW5jZSA9IGdldFByb3BlcnRp
ZXNOb3RJbihtX211dGFibGVTdHlsZS5nZXQoKSwgc3R5bGVUb0NvbXBhcmUpOwogCiAgICAgaWYg
KHNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcyA9PSBJZ25vcmVUZXh0T25seVByb3BlcnRp
ZXMpCiAgICAgICAgIGRpZmZlcmVuY2UtPnJlbW92ZVByb3BlcnRpZXNJblNldCh0ZXh0T25seVBy
b3BlcnRpZXMsIFdURl9BUlJBWV9MRU5HVEgodGV4dE9ubHlQcm9wZXJ0aWVzKSk7CkBAIC03MTIs
NyArNzEyLDcgQEAgYm9vbCBFZGl0aW5nU3R5bGU6OmNvbmZsaWN0c1dpdGhJbmxpbmVTdAogICAg
IEFTU0VSVChlbGVtZW50KTsKICAgICBBU1NFUlQoIWNvbmZsaWN0aW5nUHJvcGVydGllcyB8fCBj
b25mbGljdGluZ1Byb3BlcnRpZXMtPmlzRW1wdHkoKSk7CiAKLSAgICBjb25zdCBTdHlsZVByb3Bl
cnR5U2V0KiBpbmxpbmVTdHlsZSA9IGVsZW1lbnQtPmlubGluZVN0eWxlKCk7CisgICAgY29uc3Qg
U3R5bGVQcm9wZXJ0aWVzKiBpbmxpbmVTdHlsZSA9IGVsZW1lbnQtPmlubGluZVN0eWxlKCk7CiAg
ICAgaWYgKCFtX211dGFibGVTdHlsZSB8fCAhaW5saW5lU3R5bGUpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApAQCAtOTAxLDcgKzkwMSw3IEBAIGJvb2wgRWRpdGluZ1N0eWxlOjplbGVtZW50SXNT
dHlsZWRTcGFuT3IKICAgICAgICAgbWF0Y2hlZEF0dHJpYnV0ZXMrKzsKIAogICAgIGlmIChlbGVt
ZW50LT5oYXNBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzdHlsZUF0dHIpKSB7Ci0gICAgICAgIGlmIChj
b25zdCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSA9IGVsZW1lbnQtPmlubGluZVN0eWxlKCkpIHsK
KyAgICAgICAgaWYgKGNvbnN0IFN0eWxlUHJvcGVydGllcyogc3R5bGUgPSBlbGVtZW50LT5pbmxp
bmVTdHlsZSgpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gc3R5bGUt
PnByb3BlcnR5Q291bnQoKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBw
cm9wZXJ0eUNvdW50OyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoIWlzRWRpdGluZ1Byb3Bl
cnR5KHN0eWxlLT5wcm9wZXJ0eUF0KGkpLmlkKCkpKQpAQCAtOTI1LDcgKzkyNSw3IEBAIHZvaWQg
RWRpdGluZ1N0eWxlOjpwcmVwYXJlVG9BcHBseUF0KGNvbnMKICAgICAvLyBJZiB0aGlzIGZ1bmN0
aW9uIHdhcyBtb2RpZmllZCBpbiB0aGUgZnV0dXJlIHRvIGRlbGV0ZSBhbGwgcmVkdW5kYW50IHBy
b3BlcnRpZXMsIHRoZW4gYWRkIGEgYm9vbGVhbiB2YWx1ZSB0byBpbmRpY2F0ZQogICAgIC8vIHdo
aWNoIG9uZSBvZiBlZGl0aW5nU3R5bGVBdFBvc2l0aW9uIG9yIGNvbXB1dGVkU3R5bGUgaXMgY2Fs
bGVkLgogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IGVkaXRpbmdTdHlsZUF0UG9zaXRpb24gPSBF
ZGl0aW5nU3R5bGU6OmNyZWF0ZShwb3NpdGlvbiwgRWRpdGluZ1Byb3BlcnRpZXNJbkVmZmVjdCk7
Ci0gICAgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGVBdFBvc2l0aW9uID0gZWRpdGluZ1N0eWxlQXRQ
b3NpdGlvbi0+bV9tdXRhYmxlU3R5bGUuZ2V0KCk7CisgICAgU3R5bGVQcm9wZXJ0aWVzKiBzdHls
ZUF0UG9zaXRpb24gPSBlZGl0aW5nU3R5bGVBdFBvc2l0aW9uLT5tX211dGFibGVTdHlsZS5nZXQo
KTsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29kZUJpZGk7CiAgICAgUmVmUHRyPENTU1Zh
bHVlPiBkaXJlY3Rpb247CkBAIC05ODIsMTMgKzk4MiwxMyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6
bWVyZ2VJbmxpbmVTdHlsZU9mRWxlCiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50TWF0
Y2hlc0FuZFByb3BlcnR5SXNOb3RJbklubGluZVN0eWxlRGVjbChjb25zdCBIVE1MRWxlbWVudEVx
dWl2YWxlbnQqIGVxdWl2YWxlbnQsIGNvbnN0IFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsCi0gICAg
RWRpdGluZ1N0eWxlOjpDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSBtb2RlLCBTdHlsZVByb3BlcnR5
U2V0KiBzdHlsZSkKKyAgICBFZGl0aW5nU3R5bGU6OkNTU1Byb3BlcnR5T3ZlcnJpZGVNb2RlIG1v
ZGUsIFN0eWxlUHJvcGVydGllcyogc3R5bGUpCiB7CiAgICAgcmV0dXJuIGVxdWl2YWxlbnQtPm1h
dGNoZXMoZWxlbWVudCkgJiYgKCFlbGVtZW50LT5pbmxpbmVTdHlsZSgpIHx8ICFlcXVpdmFsZW50
LT5wcm9wZXJ0eUV4aXN0c0luU3R5bGUoZWxlbWVudC0+aW5saW5lU3R5bGUoKSkpCiAgICAgICAg
ICYmIChtb2RlID09IEVkaXRpbmdTdHlsZTo6T3ZlcnJpZGVWYWx1ZXMgfHwgIWVxdWl2YWxlbnQt
PnByb3BlcnR5RXhpc3RzSW5TdHlsZShzdHlsZSkpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxN
dXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gZXh0cmFjdEVkaXRpbmdQcm9wZXJ0aWVzKGNvbnN0IFN0
eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBFZGl0aW5nU3R5bGU6OlByb3BlcnRpZXNUb0luY2x1ZGUg
cHJvcGVydGllc1RvSW5jbHVkZSkKK3N0YXRpYyBQYXNzUmVmUHRyPE11dGFibGVTdHlsZVByb3Bl
cnRpZXM+IGV4dHJhY3RFZGl0aW5nUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnRpZXMqIHN0
eWxlLCBFZGl0aW5nU3R5bGU6OlByb3BlcnRpZXNUb0luY2x1ZGUgcHJvcGVydGllc1RvSW5jbHVk
ZSkKIHsKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gMDsKQEAgLTEwNzQsNyArMTA3
NCw3IEBAIHN0YXRpYyB2b2lkIG1lcmdlVGV4dERlY29yYXRpb25WYWx1ZXMoQ1MKICAgICAgICAg
bWVyZ2VkVmFsdWUtPmFwcGVuZChsaW5lVGhyb3VnaC5nZXQoKSk7CiB9CiAKLXZvaWQgRWRpdGlu
Z1N0eWxlOjptZXJnZVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBDU1NQcm9w
ZXJ0eU92ZXJyaWRlTW9kZSBtb2RlKQordm9pZCBFZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGUoY29u
c3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgQ1NTUHJvcGVydHlPdmVycmlkZU1vZGUgbW9kZSkK
IHsKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm47CkBAIC0xMDg2LDcgKzEwODYsNyBA
QCB2b2lkIEVkaXRpbmdTdHlsZTo6bWVyZ2VTdHlsZShjb25zdCBTdHlsCiAKICAgICB1bnNpZ25l
ZCBwcm9wZXJ0eUNvdW50ID0gc3R5bGUtPnByb3BlcnR5Q291bnQoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsgKytpKSB7Ci0gICAgICAgIFN0eWxlUHJvcGVy
dHlTZXQ6OlByb3BlcnR5UmVmZXJlbmNlIHByb3BlcnR5ID0gc3R5bGUtPnByb3BlcnR5QXQoaSk7
CisgICAgICAgIFN0eWxlUHJvcGVydGllczo6UHJvcGVydHlSZWZlcmVuY2UgcHJvcGVydHkgPSBz
dHlsZS0+cHJvcGVydHlBdChpKTsKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IG1f
bXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5LmlkKCkpOwogCiAgICAg
ICAgIC8vIHRleHQgZGVjb3JhdGlvbnMgbmV2ZXIgb3ZlcnJpZGUgdmFsdWVzCkBAIC0xMTA3LDkg
KzExMDcsOSBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6bWVyZ2VTdHlsZShjb25zdCBTdHlsCiAgICAg
bV9mb250U2l6ZURlbHRhICs9IG9sZEZvbnRTaXplRGVsdGE7CiB9CiAKLXN0YXRpYyBQYXNzUmVm
UHRyPE11dGFibGVTdHlsZVByb3BlcnR5U2V0PiBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVt
ZW50KEVsZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIHJ1bGVzVG9JbmNsdWRlKQorc3RhdGljIFBh
c3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzRm9y
RWxlbWVudChFbGVtZW50KiBlbGVtZW50LCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKIHsKLSAg
ICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlID0gTXV0YWJsZVN0eWxlUHJv
cGVydHlTZXQ6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBz
dHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwogICAgIFZlY3RvcjxSZWZQ
dHI8U3R5bGVSdWxlQmFzZT4+IG1hdGNoZWRSdWxlcyA9IGVsZW1lbnQtPmRvY3VtZW50KCkuZW5z
dXJlU3R5bGVSZXNvbHZlcigpLnN0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIHJ1bGVzVG9J
bmNsdWRlKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZFJ1bGVzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIGlmIChtYXRjaGVkUnVsZXNbaV0tPmlzU3R5bGVSdWxlKCkpCkBA
IC0xMTIxLDcgKzExMjEsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0
eVNlCiAKIHZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZVN0eWxlRnJvbVJ1bGVzKFN0eWxlZEVsZW1l
bnQqIGVsZW1lbnQpCiB7Ci0gICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnR5U2V0PiBzdHls
ZUZyb21NYXRjaGVkUnVsZXMgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50KGVsZW1l
bnQsCisgICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IHN0eWxlRnJvbU1hdGNoZWRS
dWxlcyA9IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwKICAgICAgICAg
U3R5bGVSZXNvbHZlcjo6QXV0aG9yQ1NTUnVsZXMgfCBTdHlsZVJlc29sdmVyOjpDcm9zc09yaWdp
bkNTU1J1bGVzKTsKICAgICAvLyBTdHlsZXMgZnJvbSB0aGUgaW5saW5lIHN0eWxlIGRlY2xhcmF0
aW9uLCBoZWxkIGluIHRoZSB2YXJpYWJsZSAic3R5bGUiLCB0YWtlIHByZWNlZGVuY2UgCiAgICAg
Ly8gb3ZlciB0aG9zZSBmcm9tIG1hdGNoZWQgcnVsZXMuCkBAIC0xMTM5LDEzICsxMTM5LDEzIEBA
IHZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZVN0eWxlRnJvbVJ1bGVzRm8KICAgICAvLyBUaGUgcHJv
cGVydHkgdmFsdWUsIGlmIGl0J3MgYSBwZXJjZW50YWdlLCBtYXkgbm90IHJlZmxlY3QgdGhlIGFj
dHVhbCBjb21wdXRlZCB2YWx1ZS4gIAogICAgIC8vIEZvciBleGFtcGxlOiBzdHlsZT0iaGVpZ2h0
OiAxJTsgb3ZlcmZsb3c6IHZpc2libGU7IiBpbiBxdWlya3Ntb2RlCiAgICAgLy8gRklYTUU6IFRo
ZXJlIGFyZSBvdGhlcnMgbGlrZSB0aGlzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzUxOTUxMjM+IFNs
YXNoZG90IGNvcHkvcGFzdGUgZmlkZWxpdHkgcHJvYmxlbQotICAgIFJlZlB0cjxNdXRhYmxlU3R5
bGVQcm9wZXJ0eVNldD4gZnJvbUNvbXB1dGVkU3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNl
dDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGZyb21Db21w
dXRlZFN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAgICAgQ29tcHV0
ZWRTdHlsZUV4dHJhY3RvciBjb21wdXRlZFN0eWxlKGVsZW1lbnQpOwogCiAgICAgewogICAgICAg
ICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gbV9tdXRhYmxlU3R5bGUtPnByb3BlcnR5Q291bnQo
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7ICsraSkg
ewotICAgICAgICAgICAgU3R5bGVQcm9wZXJ0eVNldDo6UHJvcGVydHlSZWZlcmVuY2UgcHJvcGVy
dHkgPSBtX211dGFibGVTdHlsZS0+cHJvcGVydHlBdChpKTsKKyAgICAgICAgICAgIFN0eWxlUHJv
cGVydGllczo6UHJvcGVydHlSZWZlcmVuY2UgcHJvcGVydHkgPSBtX211dGFibGVTdHlsZS0+cHJv
cGVydHlBdChpKTsKICAgICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IHByb3BlcnR5LnZhbHVl
KCk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CkBAIC0xMTU4LDcgKzExNTgsNyBAQCB2b2lkIEVkaXRpbmdTdHls
ZTo6bWVyZ2VTdHlsZUZyb21SdWxlc0ZvCiAgICAgbV9tdXRhYmxlU3R5bGUtPm1lcmdlQW5kT3Zl
cnJpZGVPbkNvbmZsaWN0KCpmcm9tQ29tcHV0ZWRTdHlsZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJl
bW92ZVByb3BlcnRpZXNJblN0eWxlKE11dGFibGVTdHlsZVByb3BlcnR5U2V0KiBzdHlsZVRvUmVt
b3ZlUHJvcGVydGllc0Zyb20sIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlKQorc3RhdGljIHZvaWQg
cmVtb3ZlUHJvcGVydGllc0luU3R5bGUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyogc3R5bGVUb1Jl
bW92ZVByb3BlcnRpZXNGcm9tLCBTdHlsZVByb3BlcnRpZXMqIHN0eWxlKQogewogICAgIHVuc2ln
bmVkIHByb3BlcnR5Q291bnQgPSBzdHlsZS0+cHJvcGVydHlDb3VudCgpOwogICAgIFZlY3RvcjxD
U1NQcm9wZXJ0eUlEPiBwcm9wZXJ0aWVzVG9SZW1vdmUocHJvcGVydHlDb3VudCk7CkBAIC0xMTc1
LDcgKzExNzUsNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVGcm9tUnVsZXNBCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIDEuIFJlbW92ZSBzdHlsZSBmcm9tIG1hdGNoZWQgcnVs
ZXMgYmVjYXVzZSBzdHlsZSByZW1haW4gd2l0aG91dCByZXBlYXRpbmcgaXQgaW4gaW5saW5lIHN0
eWxlIGRlY2xhcmF0aW9uCi0gICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnR5U2V0PiBzdHls
ZUZyb21NYXRjaGVkUnVsZXMgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50KGVsZW1l
bnQsIFN0eWxlUmVzb2x2ZXI6OkFsbEJ1dEVtcHR5Q1NTUnVsZXMpOworICAgIFJlZlB0cjxNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzPiBzdHlsZUZyb21NYXRjaGVkUnVsZXMgPSBzdHlsZUZyb21NYXRj
aGVkUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIFN0eWxlUmVzb2x2ZXI6OkFsbEJ1dEVtcHR5Q1NT
UnVsZXMpOwogICAgIGlmIChzdHlsZUZyb21NYXRjaGVkUnVsZXMgJiYgIXN0eWxlRnJvbU1hdGNo
ZWRSdWxlcy0+aXNFbXB0eSgpKQogICAgICAgICBtX211dGFibGVTdHlsZSA9IGdldFByb3BlcnRp
ZXNOb3RJbihtX211dGFibGVTdHlsZS5nZXQoKSwgc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLmdldCgp
KTsKIApAQCAtMTIwNCw3ICsxMjA0LDcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVByb3Bl
cnRpZXNJbkVsZQogICAgIGlmICghbV9tdXRhYmxlU3R5bGUgfHwgbV9tdXRhYmxlU3R5bGUtPmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+
IGRlZmF1bHRTdHlsZSA9IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwg
U3R5bGVSZXNvbHZlcjo6VUFBbmRVc2VyQ1NTUnVsZXMpOworICAgIFJlZlB0cjxTdHlsZVByb3Bl
cnRpZXM+IGRlZmF1bHRTdHlsZSA9IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoZWxl
bWVudCwgU3R5bGVSZXNvbHZlcjo6VUFBbmRVc2VyQ1NTUnVsZXMpOwogCiAgICAgcmVtb3ZlUHJv
cGVydGllc0luU3R5bGUobV9tdXRhYmxlU3R5bGUuZ2V0KCksIGRlZmF1bHRTdHlsZS5nZXQoKSk7
CiB9CkBAIC0xMjEyLDcgKzEyMTIsNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlUHJvcGVy
dGllc0luRWxlCiB2b2lkIEVkaXRpbmdTdHlsZTo6Zm9yY2VJbmxpbmUoKQogewogICAgIGlmICgh
bV9tdXRhYmxlU3R5bGUpCi0gICAgICAgIG1fbXV0YWJsZVN0eWxlID0gTXV0YWJsZVN0eWxlUHJv
cGVydHlTZXQ6OmNyZWF0ZSgpOworICAgICAgICBtX211dGFibGVTdHlsZSA9IE11dGFibGVTdHls
ZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwogICAgIGNvbnN0IGJvb2wgcHJvcGVydHlJc0ltcG9ydGFu
dCA9IHRydWU7CiAgICAgbV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlz
cGxheSwgQ1NTVmFsdWVJbmxpbmUsIHByb3BlcnR5SXNJbXBvcnRhbnQpOwogfQpAQCAtMTM0NCw3
ICsxMzQ0LDcgQEAgV3JpdGluZ0RpcmVjdGlvbiBFZGl0aW5nU3R5bGU6OnRleHREaXJlYwogICAg
IHJldHVybiBmb3VuZERpcmVjdGlvbjsKIH0KIAotc3RhdGljIHZvaWQgcmVjb25jaWxlVGV4dERl
Y29yYXRpb25Qcm9wZXJ0aWVzKE11dGFibGVTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkKK3N0YXRp
YyB2b2lkIHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJvcGVydGllcyhNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzKiBzdHlsZSkKIHsgICAgCiAgICAgUmVmUHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdCA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0
VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERlY29y
YXRpb24gPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0
aW9uKTsKQEAgLTEzODAsNyArMTM4MCw3IEBAIFN0eWxlQ2hhbmdlOjpTdHlsZUNoYW5nZShFZGl0
aW5nU3R5bGUqIHMKICAgICBDb21wdXRlZFN0eWxlRXh0cmFjdG9yIGNvbXB1dGVkU3R5bGUobm9k
ZSk7CiAKICAgICAvLyBGSVhNRTogdGFrZSBjYXJlIG9mIGJhY2tncm91bmQtY29sb3IgaW4gZWZm
ZWN0Ci0gICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnR5U2V0PiBtdXRhYmxlU3R5bGUgPSBn
ZXRQcm9wZXJ0aWVzTm90SW4oc3R5bGUtPnN0eWxlKCksICZjb21wdXRlZFN0eWxlKTsKKyAgICBS
ZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gbXV0YWJsZVN0eWxlID0gZ2V0UHJvcGVydGll
c05vdEluKHN0eWxlLT5zdHlsZSgpLCAmY29tcHV0ZWRTdHlsZSk7CiAKICAgICByZWNvbmNpbGVU
ZXh0RGVjb3JhdGlvblByb3BlcnRpZXMobXV0YWJsZVN0eWxlLmdldCgpKTsKICAgICBpZiAoIWRv
Y3VtZW50LT5mcmFtZSgpLT5lZGl0b3IoKS5zaG91bGRTdHlsZVdpdGhDU1MoKSkKQEAgLTEzOTks
NyArMTM5OSw3IEBAIFN0eWxlQ2hhbmdlOjpTdHlsZUNoYW5nZShFZGl0aW5nU3R5bGUqIHMKICAg
ICBtX2Nzc1N0eWxlID0gbXV0YWJsZVN0eWxlLT5hc1RleHQoKS5zdHJpcFdoaXRlU3BhY2UoKTsK
IH0KIAotc3RhdGljIHZvaWQgc2V0VGV4dERlY29yYXRpb25Qcm9wZXJ0eShNdXRhYmxlU3R5bGVQ
cm9wZXJ0eVNldCogc3R5bGUsIGNvbnN0IENTU1ZhbHVlTGlzdCogbmV3VGV4dERlY29yYXRpb24s
IENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3N0YXRpYyB2b2lkIHNldFRleHREZWNvcmF0aW9u
UHJvcGVydHkoTXV0YWJsZVN0eWxlUHJvcGVydGllcyogc3R5bGUsIGNvbnN0IENTU1ZhbHVlTGlz
dCogbmV3VGV4dERlY29yYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKIHsKICAgICBp
ZiAobmV3VGV4dERlY29yYXRpb24tPmxlbmd0aCgpKQogICAgICAgICBzdHlsZS0+c2V0UHJvcGVy
dHkocHJvcGVydHlJRCwgbmV3VGV4dERlY29yYXRpb24tPmNzc1RleHQoKSwgc3R5bGUtPnByb3Bl
cnR5SXNJbXBvcnRhbnQocHJvcGVydHlJRCkpOwpAQCAtMTQwOSw3ICsxNDA5LDcgQEAgc3RhdGlj
IHZvaWQgc2V0VGV4dERlY29yYXRpb25Qcm9wZXJ0eShNdQogICAgIH0KIH0KIAotdm9pZCBTdHls
ZUNoYW5nZTo6ZXh0cmFjdFRleHRTdHlsZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBNdXRhYmxlU3R5
bGVQcm9wZXJ0eVNldCogc3R5bGUsIGJvb2wgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUp
Cit2b2lkIFN0eWxlQ2hhbmdlOjpleHRyYWN0VGV4dFN0eWxlcyhEb2N1bWVudCogZG9jdW1lbnQs
IE11dGFibGVTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBib29sIHNob3VsZFVzZUZpeGVkRm9udERl
ZmF1bHRTaXplKQogewogICAgIEFTU0VSVChzdHlsZSk7CiAKQEAgLTE0NzQsNyArMTQ3NCw3IEBA
IHZvaWQgU3R5bGVDaGFuZ2U6OmV4dHJhY3RUZXh0U3R5bGVzKERvY3UKICAgICB9CiB9CiAKLXN0
YXRpYyB2b2lkIGRpZmZUZXh0RGVjb3JhdGlvbnMoTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQqIHN0
eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnRJRCwgQ1NTVmFsdWUqIHJlZlRleHREZWNvcmF0aW9u
KQorc3RhdGljIHZvaWQgZGlmZlRleHREZWNvcmF0aW9ucyhNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
KiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0SUQsIENTU1ZhbHVlKiByZWZUZXh0RGVjb3Jh
dGlvbikKIHsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0aW9uID0gc3R5bGUtPmdl
dFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydElEKTsKICAgICBpZiAoIXRleHREZWNvcmF0aW9uIHx8
ICF0ZXh0RGVjb3JhdGlvbi0+aXNWYWx1ZUxpc3QoKSB8fCAhcmVmVGV4dERlY29yYXRpb24gfHwg
IXJlZlRleHREZWNvcmF0aW9uLT5pc1ZhbHVlTGlzdCgpKQpAQCAtMTUyNywxMCArMTUyNywxMCBA
QCBzdGF0aWMgYm9vbCBmb250V2VpZ2h0SXNCb2xkKFQqIHN0eWxlKQogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotc3RhdGljIFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IGV4
dHJhY3RQcm9wZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0eVNldCogc3R5bGVXaXRoUmVkdW5kYW50
UHJvcGVydGllcywgVCogYmFzZVN0eWxlKQorc3RhdGljIFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxl
UHJvcGVydGllcz4gZXh0cmFjdFByb3BlcnRpZXNOb3RJbihTdHlsZVByb3BlcnRpZXMqIHN0eWxl
V2l0aFJlZHVuZGFudFByb3BlcnRpZXMsIFQqIGJhc2VTdHlsZSkKIHsKICAgICBBU1NFUlQoc3R5
bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcyk7Ci0gICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3Bl
cnR5U2V0PiByZXN1bHQgPSBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLT5tdXRhYmxlQ29w
eSgpOworICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiByZXN1bHQgPSBzdHlsZVdp
dGhSZWR1bmRhbnRQcm9wZXJ0aWVzLT5tdXRhYmxlQ29weSgpOwogCiAgICAgcmVzdWx0LT5yZW1v
dmVFcXVpdmFsZW50UHJvcGVydGllcyhiYXNlU3R5bGUpOwogCkBAIC0xNTU1LDcgKzE1NTUsNyBA
QCBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNlCiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci1QYXNzUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnR5U2V0PiBnZXRQcm9w
ZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0eVNldCogc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGll
cywgVCogYmFzZVN0eWxlKQorUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBnZXRQ
cm9wZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0
aWVzLCBUKiBiYXNlU3R5bGUpCiB7CiAgICAgcmV0dXJuIGV4dHJhY3RQcm9wZXJ0aWVzTm90SW4o
c3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcywgYmFzZVN0eWxlKTsKIH0KQEAgLTE1OTgsNyAr
MTU5OCw3IEBAIGJvb2wgaXNUcmFuc3BhcmVudENvbG9yVmFsdWUoQ1NTVmFsdWUqIGMKICAgICBy
ZXR1cm4gdmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVRyYW5zcGFyZW50OwogfQogCi1i
b29sIGhhc1RyYW5zcGFyZW50QmFja2dyb3VuZENvbG9yKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxl
KQorYm9vbCBoYXNUcmFuc3BhcmVudEJhY2tncm91bmRDb2xvcihTdHlsZVByb3BlcnRpZXMqIHN0
eWxlKQogewogICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgcmV0dXJuIGlzVHJh
bnNwYXJlbnRDb2xvclZhbHVlKGNzc1ZhbHVlLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0aW5nU3R5bGUuaAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTIgKzUxLDEyIEBA
IGNsYXNzIENTU1ZhbHVlOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OwogY2xhc3Mg
SFRNTEVsZW1lbnQ7Ci1jbGFzcyBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDsKK2NsYXNzIE11dGFi
bGVTdHlsZVByb3BlcnRpZXM7CiBjbGFzcyBOb2RlOwogY2xhc3MgUG9zaXRpb247CiBjbGFzcyBR
dWFsaWZpZWROYW1lOwogY2xhc3MgUmVuZGVyU3R5bGU7Ci1jbGFzcyBTdHlsZVByb3BlcnR5U2V0
OworY2xhc3MgU3R5bGVQcm9wZXJ0aWVzOwogY2xhc3MgU3R5bGVkRWxlbWVudDsKIGNsYXNzIFZp
c2libGVTZWxlY3Rpb247CiAKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEVkaXRpbmdTdHlsZShwb3NpdGlvbiwgcHJvcGVydGllc1RvSW5jbHVk
ZSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gY3JlYXRl
KGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVk
aXRpbmdTdHlsZT4gY3JlYXRlKGNvbnN0IFN0eWxlUHJvcGVydGllcyogc3R5bGUpCiAgICAgewog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEVkaXRpbmdTdHlsZShzdHlsZSkpOwogICAgIH0K
QEAgLTk2LDExICs5NiwxMSBAQCBwdWJsaWM6CiAKICAgICB+RWRpdGluZ1N0eWxlKCk7CiAKLSAg
ICBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUoKSB7IHJldHVybiBtX211dGFibGVTdHls
ZS5nZXQoKTsgfQorICAgIE11dGFibGVTdHlsZVByb3BlcnRpZXMqIHN0eWxlKCkgeyByZXR1cm4g
bV9tdXRhYmxlU3R5bGUuZ2V0KCk7IH0KICAgICBib29sIHRleHREaXJlY3Rpb24oV3JpdGluZ0Rp
cmVjdGlvbiYpIGNvbnN0OwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwotICAgIHZvaWQgc2V0
U3R5bGUoUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4pOwotICAgIHZvaWQgb3Zl
cnJpZGVXaXRoU3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCopOworICAgIHZvaWQgc2V0U3R5
bGUoUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPik7CisgICAgdm9pZCBvdmVycmlk
ZVdpdGhTdHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMqKTsKICAgICB2b2lkIGNsZWFyKCk7CiAg
ICAgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IGNvcHkoKSBjb25zdDsKICAgICBQYXNzUmVmUHRy
PEVkaXRpbmdTdHlsZT4gZXh0cmFjdEFuZFJlbW92ZUJsb2NrUHJvcGVydGllcygpOwpAQCAtMTQ3
LDcgKzE0Nyw3IEBAIHByaXZhdGU6CiAgICAgRWRpdGluZ1N0eWxlKCk7CiAgICAgRWRpdGluZ1N0
eWxlKE5vZGUqLCBQcm9wZXJ0aWVzVG9JbmNsdWRlKTsKICAgICBFZGl0aW5nU3R5bGUoY29uc3Qg
UG9zaXRpb24mLCBQcm9wZXJ0aWVzVG9JbmNsdWRlKTsKLSAgICBleHBsaWNpdCBFZGl0aW5nU3R5
bGUoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCopOworICAgIGV4cGxpY2l0IEVkaXRpbmdTdHlsZShj
b25zdCBTdHlsZVByb3BlcnRpZXMqKTsKICAgICBFZGl0aW5nU3R5bGUoQ1NTUHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgdm9pZCBpbml0KE5vZGUqLCBQcm9wZXJ0aWVzVG9J
bmNsdWRlKTsKICAgICB2b2lkIHJlbW92ZVRleHRGaWxsQW5kU3Ryb2tlQ29sb3JzSWZOZWVkZWQo
UmVuZGVyU3R5bGUqKTsKQEAgLTE1Nyw5ICsxNTcsOSBAQCBwcml2YXRlOgogICAgIFRyaVN0YXRl
IHRyaVN0YXRlT2ZTdHlsZShUKiBzdHlsZVRvQ29tcGFyZSwgU2hvdWxkSWdub3JlVGV4dE9ubHlQ
cm9wZXJ0aWVzKSBjb25zdDsKICAgICBib29sIGNvbmZsaWN0c1dpdGhJbmxpbmVTdHlsZU9mRWxl
bWVudChTdHlsZWRFbGVtZW50KiwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSwgVmVjdG9y
PENTU1Byb3BlcnR5SUQ+KiBjb25mbGljdGluZ1Byb3BlcnRpZXMpIGNvbnN0OwogICAgIHZvaWQg
bWVyZ2VJbmxpbmVBbmRJbXBsaWNpdFN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqLCBDU1NQ
cm9wZXJ0eU92ZXJyaWRlTW9kZSwgUHJvcGVydGllc1RvSW5jbHVkZSk7Ci0gICAgdm9pZCBtZXJn
ZVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqLCBDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSk7
CisgICAgdm9pZCBtZXJnZVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyosIENTU1Byb3BlcnR5
T3ZlcnJpZGVNb2RlKTsKIAotICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gbV9t
dXRhYmxlU3R5bGU7CisgICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IG1fbXV0YWJs
ZVN0eWxlOwogICAgIGJvb2wgbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZTsKICAgICBm
bG9hdCBtX2ZvbnRTaXplRGVsdGE7CiAKQEAgLTIxMyw3ICsyMTMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICB9CiBwcml2YXRlOgotICAgIHZvaWQg
ZXh0cmFjdFRleHRTdHlsZXMoRG9jdW1lbnQqLCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCosIGJv
b2wgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUpOworICAgIHZvaWQgZXh0cmFjdFRleHRT
dHlsZXMoRG9jdW1lbnQqLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiwgYm9vbCBzaG91bGRVc2VG
aXhlZEZvbnREZWZhdWx0U2l6ZSk7CiAKICAgICBTdHJpbmcgbV9jc3NTdHlsZTsKICAgICBib29s
IG1fYXBwbHlCb2xkOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24g
MTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Nyw3ICs3Nyw3IEBACiAjaW5jbHVkZSAiU291bmQuaCIKICNpbmNsdWRlICJTcGVs
bENoZWNrZXIuaCIKICNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmgiCi0jaW5j
bHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgog
I2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgogI2luY2x1
ZGUgIlRleHRDaGVja2luZ0hlbHBlci5oIgpAQCAtNzQ2LDcgKzc0Niw3IEBAIE5vZGUqIEVkaXRv
cjo6ZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGkKICAgICByZXR1cm4gZmluZEV2ZW50VGFyZ2V0
RnJvbShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAotdm9pZCBFZGl0b3I6
OmFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0Fj
dGlvbikKK3ZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVk
aXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKICAgICBzd2l0Y2ggKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uVHlwZSgpKSB7CiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVj
dGlvbjoKQEAgLTc2MiwxMiArNzYyLDEyIEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFN0eWxl
UHJvcGVydHlTZXQKICAgICB9CiB9CiAgICAgCi1ib29sIEVkaXRvcjo6c2hvdWxkQXBwbHlTdHls
ZShTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwgUmFuZ2UqIHJhbmdlKQorYm9vbCBFZGl0b3I6OnNo
b3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgUmFuZ2UqIHJhbmdlKQogeyAg
IAogICAgIHJldHVybiBjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgcmFuZ2UpOwog
fQogICAgIAotdm9pZCBFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGUoU3R5bGVQcm9wZXJ0eVNl
dCogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKK3ZvaWQgRWRpdG9yOjphcHBseVBh
cmFncmFwaFN0eWxlKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0Fj
dGlvbikKIHsKICAgICBzd2l0Y2ggKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgp
KSB7CiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbjoKQEAgLTc4MSw3ICs3
ODEsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZShTdHlsZVByCiAgICAgfQog
fQogCi12b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydHlTZXQq
IHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCit2b2lkIEVkaXRvcjo6YXBwbHlTdHls
ZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0Fj
dGlvbikKIHsKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRS
aWNobHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzkwLDcgKzc5MCw3IEBAIHZvaWQgRWRpdG9y
OjphcHBseVN0eWxlVG9TZWxlY3Rpb24oU3R5bGUKICAgICAgICAgYXBwbHlTdHlsZShzdHlsZSwg
ZWRpdGluZ0FjdGlvbik7CiB9CiAKLXZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlVG9T
ZWxlY3Rpb24oU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlv
bikKK3ZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9w
ZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogewogICAgIGlmICghc3R5
bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8fCAhY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1
cm47CkBAIC0xNDIzLDcgKzE0MjMsNyBAQCB2b2lkIEVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJl
Y3Rpb24oV3JpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8TXV0YWJsZVN0
eWxlUHJvcGVydHlTZXQ+IHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBzdHlsZSA9IE11dGFibGVTdHls
ZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eURpcmVjdGlvbiwgZGlyZWN0aW9uID09IExlZnRUb1JpZ2h0V3JpdGluZ0RpcmVjdGlvbiA/ICJs
dHIiIDogZGlyZWN0aW9uID09IFJpZ2h0VG9MZWZ0V3JpdGluZ0RpcmVjdGlvbiA/ICJydGwiIDog
ImluaGVyaXQiLCBmYWxzZSk7CiAgICAgYXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKHN0
eWxlLmdldCgpLCBFZGl0QWN0aW9uU2V0V3JpdGluZ0RpcmVjdGlvbik7CiB9CkBAIC0yNzMwLDcg
KzI3MzAsNyBAQCBib29sIEVkaXRvcjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0CiAgICAg
cmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKG9s
ZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBuZXdTZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKIH0KIAotdm9p
ZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShTdHlsZVByb3BlcnR5U2V0KiBzdHls
ZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQordm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRU
eXBpbmdTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rp
b24pCiB7CiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpKSB7CiAgICAgICAgIG1f
ZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5oCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIGNsYXNzIFNoYXJlZEJ1ZmZl
cjsKIGNsYXNzIFNpbXBsZUZvbnREYXRhOwogY2xhc3MgU3BlbGxDaGVja1JlcXVlc3Q7CiBjbGFz
cyBTcGVsbENoZWNrZXI7Ci1jbGFzcyBTdHlsZVByb3BlcnR5U2V0OworY2xhc3MgU3R5bGVQcm9w
ZXJ0aWVzOwogY2xhc3MgVGV4dDsKIGNsYXNzIFRleHRDaGVja2VyQ2xpZW50OwogY2xhc3MgVGV4
dEV2ZW50OwpAQCAtMTM5LDcgKzEzOSw3IEBAIHB1YmxpYzoKICAgICBib29sIHNob3VsZEluc2Vy
dEZyYWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4sIFBhc3NSZWZQdHI8UmFuZ2U+
LCBFZGl0b3JJbnNlcnRBY3Rpb24pOwogICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBT
dHJpbmcmLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbikgY29uc3Q7CiAgICAgYm9vbCBzaG91
bGREZWxldGVSYW5nZShSYW5nZSopIGNvbnN0OwotICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShT
dHlsZVByb3BlcnR5U2V0KiwgUmFuZ2UqKTsKKyAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoU3R5
bGVQcm9wZXJ0aWVzKiwgUmFuZ2UqKTsKIAogICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRl
bnRzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlvbik7CiAKQEAgLTE2Niwx
MCArMTY2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERl
bGV0ZShib29sIHNtYXJ0RGVsZXRlKTsKICAgICBib29sIGRpc3BhdGNoQ1BQRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5KTsKICAgICAKLSAgICB2b2lkIGFw
cGx5U3R5bGUoU3R5bGVQcm9wZXJ0eVNldCosIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uVW5zcGVj
aWZpZWQpOwotICAgIHZvaWQgYXBwbHlQYXJhZ3JhcGhTdHlsZShTdHlsZVByb3BlcnR5U2V0Kiwg
RWRpdEFjdGlvbiA9IEVkaXRBY3Rpb25VbnNwZWNpZmllZCk7Ci0gICAgdm9pZCBhcHBseVN0eWxl
VG9TZWxlY3Rpb24oU3R5bGVQcm9wZXJ0eVNldCosIEVkaXRBY3Rpb24pOwotICAgIHZvaWQgYXBw
bHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydHlTZXQqLCBFZGl0QWN0aW9u
KTsKKyAgICB2b2lkIGFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiwgRWRpdEFjdGlvbiA9IEVk
aXRBY3Rpb25VbnNwZWNpZmllZCk7CisgICAgdm9pZCBhcHBseVBhcmFncmFwaFN0eWxlKFN0eWxl
UHJvcGVydGllcyosIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uVW5zcGVjaWZpZWQpOworICAgIHZv
aWQgYXBwbHlTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyosIEVkaXRBY3Rpb24pOwor
ICAgIHZvaWQgYXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyos
IEVkaXRBY3Rpb24pOwogCiAgICAgdm9pZCBhcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPENvbXBv
c2l0ZUVkaXRDb21tYW5kPik7CiAgICAgdm9pZCB1bmFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8
RWRpdENvbW1hbmRDb21wb3NpdGlvbj4pOwpAQCAtMzMyLDcgKzMzMiw3IEBAIHB1YmxpYzoKICAg
ICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBtYXJrKCkgY29uc3Q7IC8vIE1hcmssIHRvIGJlIHVz
ZWQgYXMgZW1hY3MgdXNlcyBpdC4KICAgICB2b2lkIHNldE1hcmsoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYpOwogCi0gICAgdm9pZCBjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoU3R5bGVQcm9wZXJ0
eVNldCogLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvblVuc3BlY2lmaWVkKTsKKyAgICB2b2lkIGNv
bXB1dGVBbmRTZXRUeXBpbmdTdHlsZShTdHlsZVByb3BlcnRpZXMqICwgRWRpdEFjdGlvbiA9IEVk
aXRBY3Rpb25VbnNwZWNpZmllZCk7CiAgICAgdm9pZCBhcHBseUVkaXRpbmdTdHlsZVRvQm9keUVs
ZW1lbnQoKSBjb25zdDsKICAgICB2b2lkIGFwcGx5RWRpdGluZ1N0eWxlVG9FbGVtZW50KEVsZW1l
bnQqKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQu
Y3BwCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNv
bW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBACiAjaW5jbHVkZSAiU2Ny
b2xsYmFyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTb3VuZC5oIgotI2lu
Y2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIK
ICNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgiCiAjaW5jbHVkZSAiVW5saW5rQ29tbWFuZC5oIgog
I2luY2x1ZGUgIlVzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yLmgiCkBAIC05OCw3ICs5OCw3IEBA
IHN0YXRpYyBGcmFtZSogdGFyZ2V0RnJhbWUoRnJhbWUmIGZyYW1lLCAKICAgICByZXR1cm4gbm9k
ZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogfQogCi1zdGF0aWMgYm9vbCBhcHBseUNvbW1hbmRUb0Zy
YW1lKEZyYW1lJiBmcmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24g
YWN0aW9uLCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkKK3N0YXRpYyBib29sIGFwcGx5Q29tbWFu
ZFRvRnJhbWUoRnJhbWUmIGZyYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRWRpdEFj
dGlvbiBhY3Rpb24sIFN0eWxlUHJvcGVydGllcyogc3R5bGUpCiB7CiAgICAgLy8gRklYTUU6IFdl
IGRvbid0IGNhbGwgc2hvdWxkQXBwbHlTdHlsZSB3aGVuIHRoZSBzb3VyY2UgaXMgRE9NOyBpcyB0
aGVyZSBhIGdvb2QgcmVhc29uIGZvciB0aGF0PwogICAgIHN3aXRjaCAoc291cmNlKSB7CkBAIC0x
MTYsMTQgKzExNiwxNCBAQCBzdGF0aWMgYm9vbCBhcHBseUNvbW1hbmRUb0ZyYW1lKEZyYW1lJiBm
CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVBcHBseVN0eWxlKEZyYW1lJiBmcmFtZSwgRWRpdG9yQ29t
bWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlWYWx1ZSkKIHsKLSAgICBSZWZQdHI8TXV0YWJs
ZVN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBzdHlsZSA9IE11dGFibGVT
dHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0
eUlELCBwcm9wZXJ0eVZhbHVlKTsKICAgICByZXR1cm4gYXBwbHlDb21tYW5kVG9GcmFtZShmcmFt
ZSwgc291cmNlLCBhY3Rpb24sIHN0eWxlLmdldCgpKTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0
ZUFwcGx5U3R5bGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRWRp
dEFjdGlvbiBhY3Rpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgQ1NTVmFsdWVJRCBwcm9w
ZXJ0eVZhbHVlKQogewotICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUg
PSBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPE11dGFibGVT
dHlsZVByb3BlcnRpZXM+IHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7
CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHByb3BlcnR5VmFsdWUpOwogICAg
IHJldHVybiBhcHBseUNvbW1hbmRUb0ZyYW1lKGZyYW1lLCBzb3VyY2UsIGFjdGlvbiwgc3R5bGUu
Z2V0KCkpOwogfQpAQCAtMTUwLDcgKzE1MCw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVUb2dnbGVT
dHlsZUluTGlzdChGcmEKICAgICAgICAgbmV3U3R5bGUgPSB2YWx1ZS0+Y3NzVGV4dCgpOwogCiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBiZSBoYXZpbmcgdG8gY29udmVydCBuZXcgc3R5bGUg
aW50byB0ZXh0LiAgV2Ugc2hvdWxkIGhhdmUgc2V0UHJvcGVydHlDU1NWYWx1ZS4KLSAgICBSZWZQ
dHI8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IG5ld011dGFibGVTdHlsZSA9IE11dGFibGVTdHls
ZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGll
cz4gbmV3TXV0YWJsZVN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAg
ICAgbmV3TXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBuZXdTdHlsZSk7CiAg
ICAgcmV0dXJuIGFwcGx5Q29tbWFuZFRvRnJhbWUoZnJhbWUsIHNvdXJjZSwgYWN0aW9uLCBuZXdN
dXRhYmxlU3R5bGUuZ2V0KCkpOwogfQpAQCAtMTczLDcgKzE3Myw3IEBAIHN0YXRpYyBib29sIGV4
ZWN1dGVUb2dnbGVTdHlsZShGcmFtZSYgZnIKIAogc3RhdGljIGJvb2wgZXhlY3V0ZUFwcGx5UGFy
YWdyYXBoU3R5bGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRWRp
dEFjdGlvbiBhY3Rpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBw
cm9wZXJ0eVZhbHVlKQogewotICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gc3R5
bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPE11dGFi
bGVTdHlsZVByb3BlcnRpZXM+IHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRl
KCk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHByb3BlcnR5VmFsdWUpOwog
ICAgIC8vIEZJWE1FOiBXZSBkb24ndCBjYWxsIHNob3VsZEFwcGx5U3R5bGUgd2hlbiB0aGUgc291
cmNlIGlzIERPTTsgaXMgdGhlcmUgYSBnb29kIHJlYXNvbiBmb3IgdGhhdD8KICAgICBzd2l0Y2gg
KHNvdXJjZSkgewpAQCAtNTkwLDcgKzU5MCw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVKdXN0aWZ5
UmlnaHQoRnJhbWUmIGYKIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1ha2VUZXh0V3JpdGluZ0RpcmVj
dGlvbkxlZnRUb1JpZ2h0KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNl
LCBjb25zdCBTdHJpbmcmKQogewotICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4g
c3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPE11
dGFibGVTdHlsZVByb3BlcnRpZXM+IHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3Jl
YXRlKCk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VW5pY29kZUJpZGksIENT
U1ZhbHVlRW1iZWQpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlv
biwgQ1NTVmFsdWVMdHIpOwogICAgIGZyYW1lLmVkaXRvcigpLmFwcGx5U3R5bGUoc3R5bGUuZ2V0
KCksIEVkaXRBY3Rpb25TZXRXcml0aW5nRGlyZWN0aW9uKTsKQEAgLTU5OSw3ICs1OTksNyBAQCBz
dGF0aWMgYm9vbCBleGVjdXRlTWFrZVRleHRXcml0aW5nRGlyZWN0CiAKIHN0YXRpYyBib29sIGV4
ZWN1dGVNYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25OYXR1cmFsKEZyYW1lJiBmcmFtZSwgRXZlbnQq
LCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIFJlZlB0cjxNdXRh
YmxlU3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6Y3Jl
YXRlKCk7CisgICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IHN0eWxlID0gTXV0YWJs
ZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1By
b3BlcnR5VW5pY29kZUJpZGksIENTU1ZhbHVlTm9ybWFsKTsKICAgICBmcmFtZS5lZGl0b3IoKS5h
cHBseVN0eWxlKHN0eWxlLmdldCgpLCBFZGl0QWN0aW9uU2V0V3JpdGluZ0RpcmVjdGlvbik7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC02MDcsNyArNjA3LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZU1h
a2VUZXh0V3JpdGluZ0RpcmVjdAogCiBzdGF0aWMgYm9vbCBleGVjdXRlTWFrZVRleHRXcml0aW5n
RGlyZWN0aW9uUmlnaHRUb0xlZnQoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRT
b3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnR5
U2V0PiBzdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKKyAgICBSZWZQ
dHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
OjpjcmVhdGUoKTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlVbmljb2RlQmlk
aSwgQ1NTVmFsdWVFbWJlZCk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGly
ZWN0aW9uLCBDU1NWYWx1ZVJ0bCk7CiAgICAgZnJhbWUuZWRpdG9yKCkuYXBwbHlTdHlsZShzdHls
ZS5nZXQoKSwgRWRpdEFjdGlvblNldFdyaXRpbmdEaXJlY3Rpb24pOwpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OCw3ICs1OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyZWRQb3NpdGlvbi5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3BhdGlhbE5hdmlnYXRpb24uaCIKLSNpbmNsdWRlICJT
dHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVk
ZSAiVHlwaW5nQ29tbWFuZC5oIgogI2luY2x1ZGUgIlZpc2libGVVbml0cy5oIgogI2luY2x1ZGUg
Imh0bWxlZGl0aW5nLmgiCkBAIC0xOTA2LDcgKzE5MDYsNyBAQCB2b2lkIERyYWdDYXJldENvbnRy
b2xsZXI6OnBhaW50RHJhZ0NhcmV0CiAjZW5kaWYKIH0KIAotUGFzc1JlZlB0cjxNdXRhYmxlU3R5
bGVQcm9wZXJ0eVNldD4gRnJhbWVTZWxlY3Rpb246OmNvcHlUeXBpbmdTdHlsZSgpIGNvbnN0CitQ
YXNzUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IEZyYW1lU2VsZWN0aW9uOjpjb3B5VHlw
aW5nU3R5bGUoKSBjb25zdAogewogICAgIGlmICghbV90eXBpbmdTdHlsZSB8fCAhbV90eXBpbmdT
dHlsZS0+c3R5bGUoKSkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5oCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcg
QEAgY2xhc3MgQ2hhcmFjdGVyRGF0YTsKIGNsYXNzIEZyYW1lOwogY2xhc3MgR3JhcGhpY3NDb250
ZXh0OwogY2xhc3MgSFRNTEZvcm1FbGVtZW50OwotY2xhc3MgTXV0YWJsZVN0eWxlUHJvcGVydHlT
ZXQ7CitjbGFzcyBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOwogY2xhc3MgUmVuZGVyT2JqZWN0Owog
Y2xhc3MgUmVuZGVyVmlldzsKIGNsYXNzIFNldHRpbmdzOwpAQCAtMjM3LDcgKzIzNyw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHBhaW50RHJhZ0NhcmV0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExh
eW91dFBvaW50JiwgY29uc3QgTGF5b3V0UmVjdCYgY2xpcFJlY3QpIGNvbnN0OwogCiAgICAgRWRp
dGluZ1N0eWxlKiB0eXBpbmdTdHlsZSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8TXV0YWJsZVN0
eWxlUHJvcGVydHlTZXQ+IGNvcHlUeXBpbmdTdHlsZSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8
TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gY29weVR5cGluZ1N0eWxlKCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXRUeXBpbmdTdHlsZShQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4pOwogICAgIHZvaWQgY2xl
YXJUeXBpbmdTdHlsZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUNT
U1Byb3BlcnR5Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNTU1N0eWxlRGVjbGFyYXRpb24u
aCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJTdHls
ZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAi
U3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKQEAgLTQ5LDcg
KzQ5LDcgQEAgUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kOjp+UmVtb3ZlQ1NTUHJvcAogCiB2b2lk
IFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAgY29uc3QgU3R5bGVQ
cm9wZXJ0eVNldCogc3R5bGUgPSBtX2VsZW1lbnQtPmlubGluZVN0eWxlKCk7CisgICAgY29uc3Qg
U3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSA9IG1fZWxlbWVudC0+aW5saW5lU3R5bGUoKTsKICAgICBt
X29sZFZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5VmFsdWUobV9wcm9wZXJ0eSk7CiAgICAgbV9p
bXBvcnRhbnQgPSBzdHlsZS0+cHJvcGVydHlJc0ltcG9ydGFudChtX3Byb3BlcnR5KTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwCShy
ZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENv
bW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgotI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnRp
ZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gMTU5ODQx
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUZXh0Lmgi
CiAjaW5jbHVkZSAiU2ltcGxpZnlNYXJrdXBDb21tYW5kLmgiCiAjaW5jbHVkZSAiU21hcnRSZXBs
YWNlLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUHJv
cGVydGllcy5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKQEAgLTQ4Myw3ICs0ODMsNyBAQCB2b2lkIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1CiAKICAgICAgICAgU3R5bGVkRWxlbWVudCog
ZWxlbWVudCA9IHRvU3R5bGVkRWxlbWVudChub2RlLmdldCgpKTsKIAotICAgICAgICBjb25zdCBT
dHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSA9IGVsZW1lbnQtPmlubGluZVN0eWxlKCk7Cisg
ICAgICAgIGNvbnN0IFN0eWxlUHJvcGVydGllcyogaW5saW5lU3R5bGUgPSBlbGVtZW50LT5pbmxp
bmVTdHlsZSgpOwogICAgICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBuZXdJbmxpbmVTdHlsZSA9
IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKGlubGluZVN0eWxlKTsKICAgICAgICAgaWYgKGlubGluZVN0
eWxlKSB7CiAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcg
QEAKICNpbmNsdWRlICJNYXJrdXBBY2N1bXVsYXRvci5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisj
aW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIlZpc2libGVVbml0cy5oIgpA
QCAtNjgsNyArNjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAKLXN0YXRpYyBib29sIHByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUoU3R5
bGVQcm9wZXJ0eVNldCosIENTU1Byb3BlcnR5SUQpOworc3RhdGljIGJvb2wgcHJvcGVydHlNaXNz
aW5nT3JFcXVhbFRvTm9uZShTdHlsZVByb3BlcnRpZXMqLCBDU1NQcm9wZXJ0eUlEKTsKIAogY2xh
c3MgQXR0cmlidXRlQ2hhbmdlIHsKIHB1YmxpYzoKQEAgLTEyNCwxMyArMTI0LDEzIEBAIHB1Ymxp
YzoKIAogICAgIE5vZGUqIHNlcmlhbGl6ZU5vZGVzKE5vZGUqIHN0YXJ0Tm9kZSwgTm9kZSogcGFz
dEVuZCk7CiAgICAgdm9pZCB3cmFwV2l0aE5vZGUoTm9kZSYsIGJvb2wgY29udmVydEJsb2Nrc1Rv
SW5saW5lcyA9IGZhbHNlLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUgPSBEb2VzRnVsbHlTZWxlY3RO
b2RlKTsKLSAgICB2b2lkIHdyYXBXaXRoU3R5bGVOb2RlKFN0eWxlUHJvcGVydHlTZXQqLCBEb2N1
bWVudCYsIGJvb2wgaXNCbG9jayA9IGZhbHNlKTsKKyAgICB2b2lkIHdyYXBXaXRoU3R5bGVOb2Rl
KFN0eWxlUHJvcGVydGllcyosIERvY3VtZW50JiwgYm9vbCBpc0Jsb2NrID0gZmFsc2UpOwogICAg
IFN0cmluZyB0YWtlUmVzdWx0cygpOwogCiAgICAgdXNpbmcgTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZFN0cmluZzsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGFwcGVuZFN0eWxlTm9kZU9wZW5UYWco
U3RyaW5nQnVpbGRlciYsIFN0eWxlUHJvcGVydHlTZXQqLCBEb2N1bWVudCYsIGJvb2wgaXNCbG9j
ayA9IGZhbHNlKTsKKyAgICB2b2lkIGFwcGVuZFN0eWxlTm9kZU9wZW5UYWcoU3RyaW5nQnVpbGRl
ciYsIFN0eWxlUHJvcGVydGllcyosIERvY3VtZW50JiwgYm9vbCBpc0Jsb2NrID0gZmFsc2UpOwog
ICAgIGNvbnN0IFN0cmluZyYgc3R5bGVOb2RlQ2xvc2VUYWcoYm9vbCBpc0Jsb2NrID0gZmFsc2Up
OwogCiAgICAgU3RyaW5nIHJlbmRlcmVkVGV4dChjb25zdCBOb2RlJiwgY29uc3QgUmFuZ2UqKTsK
QEAgLTE4NCw3ICsxODQsNyBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3cmFwV2l0
aE5vCiAgICAgICAgIG1fbm9kZXMtPmFwcGVuZCgmbm9kZSk7CiB9CiAKLXZvaWQgU3R5bGVkTWFy
a3VwQWNjdW11bGF0b3I6OndyYXBXaXRoU3R5bGVOb2RlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxl
LCBEb2N1bWVudCYgZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKK3ZvaWQgU3R5bGVkTWFya3VwQWNj
dW11bGF0b3I6OndyYXBXaXRoU3R5bGVOb2RlKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIERvY3Vt
ZW50JiBkb2N1bWVudCwgYm9vbCBpc0Jsb2NrKQogewogICAgIFN0cmluZ0J1aWxkZXIgb3BlblRh
ZzsKICAgICBhcHBlbmRTdHlsZU5vZGVPcGVuVGFnKG9wZW5UYWcsIHN0eWxlLCBkb2N1bWVudCwg
aXNCbG9jayk7CkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRv
cjo6d3JhcFdpdGhTdAogICAgIGFwcGVuZFN0cmluZyhzdHlsZU5vZGVDbG9zZVRhZyhpc0Jsb2Nr
KSk7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0eWxlTm9kZU9w
ZW5UYWcoU3RyaW5nQnVpbGRlciYgb3V0LCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwgRG9jdW1l
bnQmIGRvY3VtZW50LCBib29sIGlzQmxvY2spCit2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRTdHlsZU5vZGVPcGVuVGFnKFN0cmluZ0J1aWxkZXImIG91dCwgU3R5bGVQcm9wZXJ0
aWVzKiBzdHlsZSwgRG9jdW1lbnQmIGRvY3VtZW50LCBib29sIGlzQmxvY2spCiB7CiAgICAgLy8g
d3JhcHBpbmdTdHlsZUZvclNlcmlhbGl6YXRpb24gc2hvdWxkIGhhdmUgcmVtb3ZlZCAtd2Via2l0
LXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0CiAgICAgQVNTRVJUKHByb3BlcnR5TWlzc2luZ09y
RXF1YWxUb05vbmUoc3R5bGUsIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZl
Y3QpKTsKQEAgLTQ1NCw3ICs0NTQsNyBAQCBzdGF0aWMgaW5saW5lIE5vZGUqIGFuY2VzdG9yVG9S
ZXRhaW5TdHJ1CiAgICAgcmV0dXJuIGFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVBbmRBcHBlYXJh
bmNlRm9yQmxvY2soZW5jbG9zaW5nQmxvY2soY29tbW9uQW5jZXN0b3IpKTsKIH0KIAotc3RhdGlj
IGJvb2wgcHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZShTdHlsZVByb3BlcnR5U2V0KiBzdHls
ZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQorc3RhdGljIGJvb2wgcHJvcGVydHlNaXNzaW5n
T3JFcXVhbFRvTm9uZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQpCiB7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQkocmV2aXNpb24gMTU5ODQxKQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC01MCw3ICs1MCw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgotI2luY2x1ZGUgIlN0eWxl
UHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlICJU
ZXh0LmgiCiAjaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgogI2luY2x1ZGUgIldBS0FwcEtpdFN0
dWJzLmgiCkBAIC0xNzAsNyArMTcwLDcgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBbGlnbm1lbnRG
b3JDaGFuZ2VkQgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPE11dGFibGVT
dHlsZVByb3BlcnR5U2V0PiBzdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUo
KTsKKyAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gc3R5bGUgPSBNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlUZXh0QWxpZ24sIG5ld1ZhbHVlKTsKICAgICBhcHBseVBhcmFncmFwaFN0eWxlKHN0eWxlLmdl
dCgpKTsKIH0KQEAgLTI3Nyw3ICsyNzcsNyBAQCB2b2lkIEVkaXRvcjo6cmVtb3ZlVW5jaGFuZ2Vh
YmxlU3R5bGVzKCkKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgc3R5bGVzIHRoYXQgdGhl
IHVzZXIgY2Fubm90IG1vZGlmeSBieSBhcHBseWluZyB0aGVpciBkZWZhdWx0IHZhbHVlcy4KICAg
ICAKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBlZGl0aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6
OmNyZWF0ZShtX2ZyYW1lLmRvY3VtZW50KCktPmJvZHkoKSk7Ci0gICAgUmVmUHRyPE11dGFibGVT
dHlsZVByb3BlcnR5U2V0PiBkZWZhdWx0U3R5bGUgPSBlZGl0aW5nU3R5bGUuZ2V0KCktPnN0eWxl
KCktPm11dGFibGVDb3B5KCk7CisgICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGRl
ZmF1bHRTdHlsZSA9IGVkaXRpbmdTdHlsZS5nZXQoKS0+c3R5bGUoKS0+bXV0YWJsZUNvcHkoKTsK
ICAgICAKICAgICAvLyBUZXh0IHdpZGdldHMgaW1wbGVtZW50IGJhY2tncm91bmQgY29sb3Igdmlh
IHRoZSBVSVZpZXcgcHJvcGVydHkuIFRoZWlyIGJvZHkgZWxlbWVudCB3aWxsIG5vdCBoYXZlIG9u
ZS4KICAgICBkZWZhdWx0U3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENv
bG9yLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjApIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYWMvRWRpdG9yTWFjLm1tCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcg
QEAKICNpbXBvcnQgIlJlc291cmNlQnVmZmVyLmgiCiAjaW1wb3J0ICJSdW50aW1lQXBwbGljYXRp
b25DaGVja3MuaCIKICNpbXBvcnQgIlNvdW5kLmgiCi0jaW1wb3J0ICJTdHlsZVByb3BlcnR5U2V0
LmgiCisjaW1wb3J0ICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbXBvcnQgIlRleHQuaCIKICNpbXBv
cnQgIlR5cGluZ0NvbW1hbmQuaCIKICNpbXBvcnQgIlVVSUQuaCIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEJSRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQlJFbGVtZW50LmNwcAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQlJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBA
QCBib29sIEhUTUxCUkVsZW1lbnQ6OmlzUHJlc2VudGF0aW9uQXR0cmliCiAgICAgcmV0dXJuIEhU
TUxFbGVtZW50Ojppc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShuYW1lKTsKIH0KIAotdm9pZCBIVE1M
QlJFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgTXV0YWJsZVN0eWxl
UHJvcGVydHlTZXQmIHN0eWxlKQordm9pZCBIVE1MQlJFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JQ
cmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgc3R5bGUpCiB7CiAgICAg
aWYgKG5hbWUgPT0gY2xlYXJBdHRyKSB7CiAgICAgICAgIC8vIElmIHRoZSBzdHJpbmcgaXMgZW1w
dHksIHRoZW4gZG9uJ3QgYWRkIHRoZSBjbGVhciBwcm9wZXJ0eS4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEJSRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEJSRWxlbWVudC5oCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxCUkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBwcml2
YXRlOgogICAgIEhUTUxCUkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7
CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0U3R5bGVG
b3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21p
Y1N0cmluZyYsIE11dGFibGVTdHlsZVByb3BlcnR5U2V0JikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIGNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyYpIE9W
RVJSSURFOwogCiAgICAgdmlydHVhbCBSZW5kZXJFbGVtZW50KiBjcmVhdGVSZW5kZXJlcihQYXNz
UmVmPFJlbmRlclN0eWxlPikgT1ZFUlJJREU7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQm9keUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEJvZHlFbGVtZW50LmNwcAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBA
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVk
ZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjgsNyAr
NjgsNyBAQCBib29sIEhUTUxCb2R5RWxlbWVudDo6aXNQcmVzZW50YXRpb25BdHRyCiAgICAgcmV0
dXJuIEhUTUxFbGVtZW50Ojppc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShuYW1lKTsKIH0KIAotdm9p
ZCBIVE1MQm9keUVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBNdXRh
YmxlU3R5bGVQcm9wZXJ0eVNldCYgc3R5bGUpCit2b2lkIEhUTUxCb2R5RWxlbWVudDo6Y29sbGVj
dFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUs
IGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIE11dGFibGVTdHlsZVByb3BlcnRpZXMmIHN0eWxl
KQogewogICAgIGlmIChuYW1lID09IGJhY2tncm91bmRBdHRyKSB7CiAgICAgICAgIFN0cmluZyB1
cmwgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModmFsdWUpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5oCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3
ICs3Miw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIE9WRVJSSURFOwogICAgIHZp
cnR1YWwgYm9vbCBpc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikg
Y29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTdHlsZUZvclByZXNlbnRh
dGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiwg
TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY29s
bGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBj
b25zdCBBdG9taWNTdHJpbmcmLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJikgT1ZFUlJJREU7CiAK
ICAgICB2aXJ0dWFsIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENv
bnRhaW5lck5vZGUmKSBPVkVSUklERTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RGl2RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGl2
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TERpdkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIGJvb2wgSFRN
TERpdkVsZW1lbnQ6OmlzUHJlc2VudGF0aW9uQXR0cmkKICAgICByZXR1cm4gSFRNTEVsZW1lbnQ6
OmlzUHJlc2VudGF0aW9uQXR0cmlidXRlKG5hbWUpOwogfQogCi12b2lkIEhUTUxEaXZFbGVtZW50
Ojpjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgTXV0YWJsZVN0eWxlUHJvcGVydHlT
ZXQmIHN0eWxlKQordm9pZCBIVE1MRGl2RWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0
aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUsIE11dGFibGVTdHlsZVByb3BlcnRpZXMmIHN0eWxlKQogewogICAgIGlmIChuYW1l
ID09IGFsaWduQXR0cikgewogICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsICJt
aWRkbGUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZSwgImNlbnRlciIpKQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGl2RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTERpdkVsZW1lbnQuaAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRGl2RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw3IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNQcmVzZW50
YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0IE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYsIE11dGFibGVTdHlsZVByb3BlcnR5
U2V0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTdHlsZUZvclByZXNlbnRh
dGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiwg
TXV0YWJsZVN0eWxlUHJvcGVydGllcyYpIE9WRVJSSURFOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1
OTg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw3ICs1Miw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5j
bHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVk
ZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2lu
Y2x1ZGUgIlN1YmZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRl
eHRJdGVyYXRvci5oIgpAQCAtMTM4LDEzICsxMzgsMTMgQEAgdW5zaWduZWQgSFRNTEVsZW1lbnQ6
OnBhcnNlQm9yZGVyV2lkdGhBdAogICAgIHJldHVybiBib3JkZXJXaWR0aDsKIH0KIAotdm9pZCBI
VE1MRWxlbWVudDo6YXBwbHlCb3JkZXJBdHRyaWJ1dGVUb1N0eWxlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUsIE11dGFibGVTdHlsZVByb3BlcnR5U2V0JiBzdHlsZSkKK3ZvaWQgSFRNTEVsZW1l
bnQ6OmFwcGx5Qm9yZGVyQXR0cmlidXRlVG9TdHlsZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
LCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSkKIHsKICAgICBhZGRQcm9wZXJ0eVRvUHJl
c2VudGF0aW9uQXR0cmlidXRlU3R5bGUoc3R5bGUsIENTU1Byb3BlcnR5Qm9yZGVyV2lkdGgsIHBh
cnNlQm9yZGVyV2lkdGhBdHRyaWJ1dGUodmFsdWUpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BY
KTsKICAgICBhZGRQcm9wZXJ0eVRvUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoc3R5bGUsIENT
U1Byb3BlcnR5Qm9yZGVyU3R5bGUsIENTU1ZhbHVlU29saWQpOwogfQogCi12b2lkIEhUTUxFbGVt
ZW50OjptYXBMYW5ndWFnZUF0dHJpYnV0ZVRvTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUsIE11dGFibGVTdHlsZVByb3BlcnR5U2V0JiBzdHlsZSkKK3ZvaWQgSFRNTEVsZW1lbnQ6Om1h
cExhbmd1YWdlQXR0cmlidXRlVG9Mb2NhbGUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgTXV0
YWJsZVN0eWxlUHJvcGVydGllcyYgc3R5bGUpCiB7CiAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkp
IHsKICAgICAgICAgLy8gSGF2ZSB0byBxdW90ZSBzbyB0aGUgbG9jYWxlIGlkIGlzIHRyZWF0ZWQg
YXMgYSBzdHJpbmcgaW5zdGVhZCBvZiBhcyBhIENTUyBrZXl3b3JkLgpAQCAtMTYyLDcgKzE2Miw3
IEBAIGJvb2wgSFRNTEVsZW1lbnQ6OmlzUHJlc2VudGF0aW9uQXR0cmlidXQKICAgICByZXR1cm4g
U3R5bGVkRWxlbWVudDo6aXNQcmVzZW50YXRpb25BdHRyaWJ1dGUobmFtZSk7CiB9CiAKLXZvaWQg
SFRNTEVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBNdXRhYmxlU3R5
bGVQcm9wZXJ0eVNldCYgc3R5bGUpCit2b2lkIEhUTUxFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JQ
cmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgc3R5bGUpCiB7CiAgICAg
aWYgKG5hbWUgPT0gYWxpZ25BdHRyKSB7CiAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2
YWx1ZSwgIm1pZGRsZSIpKQpAQCAtNjAyLDcgKzYwMiw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6Omlu
c2VydEFkamFjZW50VGV4dChjb24KICAgICBpbnNlcnRBZGphY2VudCh3aGVyZSwgdGV4dE5vZGUu
Z2V0KCksIGVjKTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6YXBwbHlBbGlnbm1lbnRBdHRyaWJ1
dGVUb1N0eWxlKGNvbnN0IEF0b21pY1N0cmluZyYgYWxpZ25tZW50LCBNdXRhYmxlU3R5bGVQcm9w
ZXJ0eVNldCYgc3R5bGUpCit2b2lkIEhUTUxFbGVtZW50OjphcHBseUFsaWdubWVudEF0dHJpYnV0
ZVRvU3R5bGUoY29uc3QgQXRvbWljU3RyaW5nJiBhbGlnbm1lbnQsIE11dGFibGVTdHlsZVByb3Bl
cnRpZXMmIHN0eWxlKQogewogICAgIC8vIFZlcnRpY2FsIGFsaWdubWVudCB3aXRoIHJlc3BlY3Qg
dG8gdGhlIGN1cnJlbnQgYmFzZWxpbmUgb2YgdGhlIHRleHQKICAgICAvLyByaWdodCBvciBsZWZ0
IG1lYW5zIGZsb2F0aW5nIGltYWdlcy4KQEAgLTk2NSw3ICs5NjUsNyBAQCBib29sIEhUTUxFbGVt
ZW50Ojppc1VSTEF0dHJpYnV0ZShjb25zdCBBCiAgICAgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6Omlz
VVJMQXR0cmlidXRlKGF0dHJpYnV0ZSk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OmFkZEhUTUxM
ZW5ndGhUb1N0eWxlKE11dGFibGVTdHlsZVByb3BlcnR5U2V0JiBzdHlsZSwgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBIVE1MRWxlbWVudDo6YWRk
SFRNTExlbmd0aFRvU3R5bGUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgc3R5bGUsIENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICAvLyBGSVhNRTog
VGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IHNwaW4gdXAgdGhlIENTUyBwYXJzZXIsIGJ1dCBzaG91
bGQgaW5zdGVhZCBqdXN0IGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QKICAgICAvLyBsZW5ndGggdW5p
dCBhbmQgbWFrZSB0aGUgYXBwcm9wcmlhdGUgcGFyc2VkIHZhbHVlLgpAQCAtMTA1NCw3ICsxMDU0
LDcgQEAgc3RhdGljIFJHQkEzMiBwYXJzZUNvbG9yU3RyaW5nV2l0aENyYXp5TAogfQogCiAvLyBD
b2xvciBwYXJzaW5nIHRoYXQgbWF0Y2hlcyBIVE1MJ3MgInJ1bGVzIGZvciBwYXJzaW5nIGEgbGVn
YWN5IGNvbG9yIHZhbHVlIgotdm9pZCBIVE1MRWxlbWVudDo6YWRkSFRNTENvbG9yVG9TdHlsZShN
dXRhYmxlU3R5bGVQcm9wZXJ0eVNldCYgc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSkKK3ZvaWQgSFRNTEVsZW1lbnQ6OmFkZEhUTUxD
b2xvclRvU3R5bGUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgc3R5bGUsIENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSkKIHsKICAgICAvLyBBbiBl
bXB0eSBzdHJpbmcgZG9lc24ndCBhcHBseSBhIGNvbG9yLiAoT25lIGNvbnRhaW5pbmcgb25seSB3
aGl0ZXNwYWNlIGRvZXMsIHdoaWNoIGlzIHdoeSB0aGlzIGNoZWNrIG9jY3VycyBiZWZvcmUgc3Ry
aXBwaW5nLikKICAgICBpZiAoYXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEVsZW1lbnQuaAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCwxNSArOTgsMTUgQEAgcHVi
bGljOgogcHJvdGVjdGVkOgogICAgIEhUTUxFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50JiwgQ29uc3RydWN0aW9uVHlwZSk7CiAKLSAgICB2b2lkIGFkZEhUTUxM
ZW5ndGhUb1N0eWxlKE11dGFibGVTdHlsZVByb3BlcnR5U2V0JiwgQ1NTUHJvcGVydHlJRCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBhZGRIVE1MQ29sb3JUb1N0eWxlKE11dGFibGVT
dHlsZVByb3BlcnR5U2V0JiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBjb2xvcik7Cisg
ICAgdm9pZCBhZGRIVE1MTGVuZ3RoVG9TdHlsZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiwgQ1NT
UHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgdm9pZCBhZGRIVE1MQ29sb3JU
b1N0eWxlKE11dGFibGVTdHlsZVByb3BlcnRpZXMmLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJp
bmcmIGNvbG9yKTsKIAotICAgIHZvaWQgYXBwbHlBbGlnbm1lbnRBdHRyaWJ1dGVUb1N0eWxlKGNv
bnN0IEF0b21pY1N0cmluZyYsIE11dGFibGVTdHlsZVByb3BlcnR5U2V0Jik7Ci0gICAgdm9pZCBh
cHBseUJvcmRlckF0dHJpYnV0ZVRvU3R5bGUoY29uc3QgQXRvbWljU3RyaW5nJiwgTXV0YWJsZVN0
eWxlUHJvcGVydHlTZXQmKTsKKyAgICB2b2lkIGFwcGx5QWxpZ25tZW50QXR0cmlidXRlVG9TdHls
ZShjb25zdCBBdG9taWNTdHJpbmcmLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJik7CisgICAgdm9p
ZCBhcHBseUJvcmRlckF0dHJpYnV0ZVRvU3R5bGUoY29uc3QgQXRvbWljU3RyaW5nJiwgTXV0YWJs
ZVN0eWxlUHJvcGVydGllcyYpOwogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBPVkVSUklERTsKICAgICB2
aXJ0dWFsIGJvb2wgaXNQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYp
IGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0U3R5bGVGb3JQcmVzZW50
YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYs
IE11dGFibGVTdHlsZVByb3BlcnR5U2V0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNv
bGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwg
Y29uc3QgQXRvbWljU3RyaW5nJiwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyYpIE9WRVJSSURFOwog
ICAgIHVuc2lnbmVkIHBhcnNlQm9yZGVyV2lkdGhBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5n
JikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxk
Q2hhbmdlJikgT1ZFUlJJREU7CkBAIC0xMTcsNyArMTE3LDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0
ZToKICAgICB2aXJ0dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOwog
Ci0gICAgdm9pZCBtYXBMYW5ndWFnZUF0dHJpYnV0ZVRvTG9jYWxlKGNvbnN0IEF0b21pY1N0cmlu
ZyYsIE11dGFibGVTdHlsZVByb3BlcnR5U2V0Jik7CisgICAgdm9pZCBtYXBMYW5ndWFnZUF0dHJp
YnV0ZVRvTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYsIE11dGFibGVTdHlsZVByb3BlcnRpZXMm
KTsKIAogICAgIHZpcnR1YWwgSFRNTEZvcm1FbGVtZW50KiB2aXJ0dWFsRm9ybSgpIGNvbnN0Owog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAJKHJldmlzaW9u
IDE1OTg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgYm9vbCBIVE1MRW1iZWRFbGVtZW50Ojppc1By
ZXNlbnRhdGlvbkF0dAogICAgIHJldHVybiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojppc1ByZXNl
bnRhdGlvbkF0dHJpYnV0ZShuYW1lKTsKIH0KIAotdm9pZCBIVE1MRW1iZWRFbGVtZW50Ojpjb2xs
ZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQmIHN0
eWxlKQordm9pZCBIVE1MRW1iZWRFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25B
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgc3R5bGUpCiB7CiAgICAgaWYgKG5hbWUgPT0g
aGlkZGVuQXR0cikgewogICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsICJ5ZXMi
KSB8fCBlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZSwgInRydWUiKSkgewpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmgJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICsz
Niw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIE9WRVJSSURFOwogICAgIHZpcnR1
YWwgYm9vbCBpc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlv
bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgTXV0
YWJsZVN0eWxlUHJvcGVydHlTZXQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY29sbGVj
dFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25z
dCBBdG9taWNTdHJpbmcmLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJikgT1ZFUlJJREU7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChjb25zdCBSZW5kZXJTdHlsZSYpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTk4
NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCi0jaW5jbHVk
ZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdURjsK
QEAgLTE4Niw3ICsxODYsNyBAQCBib29sIEhUTUxGb250RWxlbWVudDo6aXNQcmVzZW50YXRpb25B
dHRyCiAgICAgcmV0dXJuIEhUTUxFbGVtZW50Ojppc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShuYW1l
KTsKIH0KIAotdm9pZCBIVE1MRm9udEVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlv
bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlLCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCYgc3R5bGUpCit2b2lkIEhUTUxGb250RWxl
bWVudDo6Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIE11dGFibGVTdHlsZVByb3Bl
cnRpZXMmIHN0eWxlKQogewogICAgIGlmIChuYW1lID09IHNpemVBdHRyKSB7CiAgICAgICAgIENT
U1ZhbHVlSUQgc2l6ZSA9IENTU1ZhbHVlSW52YWxpZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZvbnRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9udEVsZW1lbnQuaAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRm9udEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwcml2
YXRlOgogICAgIEhUTUxGb250RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQm
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTdHls
ZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRv
bWljU3RyaW5nJiwgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgY29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJikg
T1ZFUlJJREU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MCw3ICs3MCw3IEBAIGJvb2wgSFRNTEZyYW1lU2V0RWxlbWVudDo6aXNQcmVzZW50YXRpb24KICAg
ICByZXR1cm4gSFRNTEVsZW1lbnQ6OmlzUHJlc2VudGF0aW9uQXR0cmlidXRlKG5hbWUpOwogfQog
Ci12b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZh
bHVlLCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCYgc3R5bGUpCit2b2lkIEhUTUxGcmFtZVNldEVs
ZW1lbnQ6OmNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzJiBzdHlsZSkKIHsKICAgICBpZiAobmFtZSA9PSBib3JkZXJjb2xvckF0dHIpCiAgICAg
ICAgIGFkZEhUTUxDb2xvclRvU3R5bGUoc3R5bGUsIENTU1Byb3BlcnR5Qm9yZGVyQ29sb3IsIHZh
bHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5oCShy
ZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogCiAgICAgdmly
dHVhbCB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9t
aWNTdHJpbmcmKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNQcmVzZW50YXRpb25BdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwg
dm9pZCBjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYsIE11dGFibGVTdHlsZVByb3BlcnR5U2V0JikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgTXV0YWJsZVN0
eWxlUHJvcGVydGllcyYpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIHdpbGxBdHRhY2hS
ZW5kZXJlcnMoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChj
b25zdCBSZW5kZXJTdHlsZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSFJFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxIUkVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxIUkVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiQ1NTVmFs
dWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgotI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVBy
b3BlcnRpZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Nyw3ICs1Nyw3IEBAIGJv
b2wgSFRNTEhSRWxlbWVudDo6aXNQcmVzZW50YXRpb25BdHRyaWIKICAgICByZXR1cm4gSFRNTEVs
ZW1lbnQ6OmlzUHJlc2VudGF0aW9uQXR0cmlidXRlKG5hbWUpOwogfQogCi12b2lkIEhUTUxIUkVs
ZW1lbnQ6OmNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBNdXRhYmxlU3R5bGVQcm9w
ZXJ0eVNldCYgc3R5bGUpCit2b2lkIEhUTUxIUkVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvclByZXNl
bnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSkKIHsKICAgICBpZiAo
bmFtZSA9PSBhbGlnbkF0dHIpIHsKICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVl
LCAibGVmdCIpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxIUkVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxIUkVsZW1lbnQuaAkocmV2aXNp
b24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSFJFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHJpdmF0ZToKICAgICBIVE1MSFJFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCiAgICAgdmlydHVhbCBib29sIGlzUHJl
c2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdCBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmLCBNdXRhYmxlU3R5bGVQcm9w
ZXJ0eVNldCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0U3R5bGVGb3JQcmVz
ZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmlu
ZyYsIE11dGFibGVTdHlsZVByb3BlcnRpZXMmKSBPVkVSUklERTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBib29sIEhUTUxJRnJh
bWVFbGVtZW50Ojppc1ByZXNlbnRhdGlvbkF0CiAgICAgcmV0dXJuIEhUTUxGcmFtZUVsZW1lbnRC
YXNlOjppc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShuYW1lKTsKIH0KIAotdm9pZCBIVE1MSUZyYW1l
RWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIE11dGFibGVTdHlsZVBy
b3BlcnR5U2V0JiBzdHlsZSkKK3ZvaWQgSFRNTElGcmFtZUVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZv
clByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSkKIHsKICAg
ICBpZiAobmFtZSA9PSB3aWR0aEF0dHIpCiAgICAgICAgIGFkZEhUTUxMZW5ndGhUb1N0eWxlKHN0
eWxlLCBDU1NQcm9wZXJ0eVdpZHRoLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJRnJhbWVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSUZyYW1lRWxlbWVudC5oCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJRnJhbWVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAg
cHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29s
IGlzUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdCBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmLCBNdXRhYmxlU3R5
bGVQcm9wZXJ0eVNldCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0U3R5bGVG
b3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21p
Y1N0cmluZyYsIE11dGFibGVTdHlsZVByb3BlcnRpZXMmKSBPVkVSUklERTsKIAogICAgIHZpcnR1
YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlJik7CiAgICAgdmlydHVh
bCBSZW5kZXJFbGVtZW50KiBjcmVhdGVSZW5kZXJlcihQYXNzUmVmPFJlbmRlclN0eWxlPikgT1ZF
UlJJREU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgYm9vbCBIVE1MSW1hZ2VFbGVtZW50
Ojppc1ByZXNlbnRhdGlvbkF0dAogICAgIHJldHVybiBIVE1MRWxlbWVudDo6aXNQcmVzZW50YXRp
b25BdHRyaWJ1dGUobmFtZSk7CiB9CiAKLXZvaWQgSFRNTEltYWdlRWxlbWVudDo6Y29sbGVjdFN0
eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNv
bnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIE11dGFibGVTdHlsZVByb3BlcnR5U2V0JiBzdHlsZSkK
K3ZvaWQgSFRNTEltYWdlRWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUs
IE11dGFibGVTdHlsZVByb3BlcnRpZXMmIHN0eWxlKQogewogICAgIGlmIChuYW1lID09IHdpZHRo
QXR0cikKICAgICAgICAgYWRkSFRNTExlbmd0aFRvU3R5bGUoc3R5bGUsIENTU1Byb3BlcnR5V2lk
dGgsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCShy
ZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNT
dHJpbmcmKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNQcmVzZW50YXRpb25BdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCBjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIGNvbnN0IEF0b21pY1N0cmluZyYsIE11dGFibGVTdHlsZVByb3BlcnR5U2V0JikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgTXV0YWJsZVN0eWxl
UHJvcGVydGllcyYpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIGRpZEF0dGFjaFJlbmRl
cmVycygpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgUmVuZGVyRWxlbWVudCogY3JlYXRlUmVuZGVy
ZXIoUGFzc1JlZjxSZW5kZXJTdHlsZT4pIE9WRVJSSURFOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTMsNyAr
NTkzLDcgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc1ByZXNlbnRhdGlvbkF0dAogICAgIHJl
dHVybiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6aXNQcmVzZW50YXRpb25BdHRyaWJ1dGUo
bmFtZSk7CiB9CiAKLXZvaWQgSFRNTElucHV0RWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yUHJlc2Vu
dGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUsIE11dGFibGVTdHlsZVByb3BlcnR5U2V0JiBzdHlsZSkKK3ZvaWQgSFRNTElu
cHV0RWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIE11dGFibGVTdHls
ZVByb3BlcnRpZXMmIHN0eWxlKQogewogICAgIGlmIChuYW1lID09IHZzcGFjZUF0dHIpIHsKICAg
ICAgICAgYWRkSFRNTExlbmd0aFRvU3R5bGUoc3R5bGUsIENTU1Byb3BlcnR5TWFyZ2luVG9wLCB2
YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAkocmV2aXNp
b24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM2MSw3ICszNjEsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2
b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJp
bmcmKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNQcmVzZW50YXRpb25BdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBj
b2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IGNvbnN0IEF0b21pY1N0cmluZyYsIE11dGFibGVTdHlsZVByb3BlcnR5U2V0JikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgTXV0YWJsZVN0eWxlUHJv
cGVydGllcyYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRy
ZW4oKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgdm9pZCBjb3B5Tm9uQXR0cmlidXRlUHJvcGVy
dGllc0Zyb21FbGVtZW50KGNvbnN0IEVsZW1lbnQmKSBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTExJRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTElFbGVtZW50LmNwcAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTElFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcs
NyBAQCBib29sIEhUTUxMSUVsZW1lbnQ6OmlzUHJlc2VudGF0aW9uQXR0cmliCiAgICAgcmV0dXJu
IEhUTUxFbGVtZW50Ojppc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShuYW1lKTsKIH0KIAotdm9pZCBI
VE1MTElFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgTXV0YWJsZVN0
eWxlUHJvcGVydHlTZXQmIHN0eWxlKQordm9pZCBIVE1MTElFbGVtZW50Ojpjb2xsZWN0U3R5bGVG
b3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgc3R5bGUpCiB7CiAg
ICAgaWYgKG5hbWUgPT0gdHlwZUF0dHIpIHsKICAgICAgICAgaWYgKHZhbHVlID09ICJhIikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExJRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTExJRWxlbWVudC5oCShyZXZpc2lvbiAxNTk4NDEpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMSUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NyArMzcsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBPVkVSUklERTsKICAgICB2
aXJ0dWFsIGJvb2wgaXNQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYp
IGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0U3R5bGVGb3JQcmVzZW50
YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYs
IE11dGFibGVTdHlsZVByb3BlcnR5U2V0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNv
bGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwg
Y29uc3QgQXRvbWljU3RyaW5nJiwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyYpIE9WRVJSSURFOwog
CiAgICAgdmlydHVhbCB2b2lkIGRpZEF0dGFjaFJlbmRlcmVycygpIE9WRVJSSURFOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
NTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgYm9vbCBIVE1MTWFycXVlZUVsZW1lbnQ6Omlz
UHJlc2VudGF0aW9uQQogICAgIHJldHVybiBIVE1MRWxlbWVudDo6aXNQcmVzZW50YXRpb25BdHRy
aWJ1dGUobmFtZSk7CiB9CiAKLXZvaWQgSFRNTE1hcnF1ZWVFbGVtZW50Ojpjb2xsZWN0U3R5bGVG
b3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSwgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQmIHN0eWxlKQordm9p
ZCBIVE1MTWFycXVlZUVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSkKIHsKICAgICBpZiAobmFtZSA9PSB3aWR0aEF0
dHIpIHsKICAgICAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmgJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcg
KzU0LDcgQEAgcHJpdmF0ZToKICAgICBIVE1MTWFycXVlZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Jik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNQcmVzZW50YXRpb25BdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwg
dm9pZCBjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYsIE11dGFibGVTdHlsZVByb3BlcnR5U2V0JikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgTXV0YWJsZVN0
eWxlUHJvcGVydGllcyYpIE9WRVJSSURFOwogCiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0CiAgICAg
dmlydHVhbCBib29sIGNhblN1c3BlbmQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE9MaXN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MT0xpc3RFbGVtZW50LmNwcAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEs
NyBAQCBib29sIEhUTUxPTGlzdEVsZW1lbnQ6OmlzUHJlc2VudGF0aW9uQXR0CiAgICAgcmV0dXJu
IEhUTUxFbGVtZW50Ojppc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShuYW1lKTsKIH0KIAotdm9pZCBI
VE1MT0xpc3RFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgTXV0YWJs
ZVN0eWxlUHJvcGVydHlTZXQmIHN0eWxlKQordm9pZCBIVE1MT0xpc3RFbGVtZW50Ojpjb2xsZWN0
U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgc3R5bGUp
CiB7CiAgICAgaWYgKG5hbWUgPT0gdHlwZUF0dHIpIHsKICAgICAgICAgaWYgKHZhbHVlID09ICJh
IikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVudC5oCShyZXZpc2lvbiAx
NTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPTGlzdEVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHBh
cnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBP
VkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0
U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0
IEF0b21pY1N0cmluZyYsIE11dGFibGVTdHlsZVByb3BlcnR5U2V0JikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgTXV0YWJsZVN0eWxlUHJvcGVydGll
cyYpIE9WRVJSSURFOwogCiAgICAgaW50IG1fc3RhcnQ7CiAgICAgdW5zaWduZWQgbV9pdGVtQ291
bnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAkocmV2
aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgYm9vbCBIVE1MT2JqZWN0RWxlbWVu
dDo6aXNQcmVzZW50YXRpb25BdAogICAgIHJldHVybiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojpp
c1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShuYW1lKTsKIH0KIAotdm9pZCBIVE1MT2JqZWN0RWxlbWVu
dDo6Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIE11dGFibGVTdHlsZVByb3BlcnR5
U2V0JiBzdHlsZSkKK3ZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvclByZXNl
bnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSkKIHsKICAgICBpZiAo
bmFtZSA9PSBib3JkZXJBdHRyKQogICAgICAgICBhcHBseUJvcmRlckF0dHJpYnV0ZVRvU3R5bGUo
dmFsdWUsIHN0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50
LmgJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwcml2YXRlOgogCiAgICAg
dmlydHVhbCB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBB
dG9taWNTdHJpbmcmKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNQcmVzZW50YXRpb25B
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1
YWwgdm9pZCBjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYsIE11dGFibGVTdHlsZVByb3BlcnR5U2V0Jikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgTXV0YWJs
ZVN0eWxlUHJvcGVydGllcyYpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBJbnNlcnRpb25Ob3Rp
ZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmKSBPVkVSUklERTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBhcmFncmFwaEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBhcmFncmFwaEVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQYXJhZ3JhcGhFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBib29sIEhUTUxQYXJhZ3JhcGhF
bGVtZW50Ojppc1ByZXNlbnRhdGlvCiAgICAgcmV0dXJuIEhUTUxFbGVtZW50Ojppc1ByZXNlbnRh
dGlvbkF0dHJpYnV0ZShuYW1lKTsKIH0KIAotdm9pZCBIVE1MUGFyYWdyYXBoRWxlbWVudDo6Y29s
bGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIE11dGFibGVTdHlsZVByb3BlcnR5U2V0JiBz
dHlsZSkKK3ZvaWQgSFRNTFBhcmFncmFwaEVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvclByZXNlbnRh
dGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSkKIHsKICAgICBpZiAobmFt
ZSA9PSBhbGlnbkF0dHIpIHsKICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLCAi
bWlkZGxlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsICJjZW50ZXIiKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBhcmFncmFwaEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQYXJhZ3JhcGhFbGVtZW50LmgJKHJldmlzaW9uIDE1OTg0
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBhcmFncmFwaEVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwcml2YXRlOgogICAgIEhUTUxQYXJhZ3JhcGhFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCiAgICAgdmlydHVhbCBib29s
IGlzUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdCBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmLCBNdXRhYmxlU3R5
bGVQcm9wZXJ0eVNldCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0U3R5bGVG
b3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21p
Y1N0cmluZyYsIE11dGFibGVTdHlsZVByb3BlcnRpZXMmKSBPVkVSUklERTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQ
bHVnSW5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDcgKzE3OSw3IEBAIGJvb2wg
SFRNTFBsdWdJbkVsZW1lbnQ6OmlzUHJlc2VudGF0aW9uQXQKICAgICByZXR1cm4gSFRNTEZyYW1l
T3duZXJFbGVtZW50Ojppc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShuYW1lKTsKIH0KIAotdm9pZCBI
VE1MUGx1Z0luRWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIE11dGFi
bGVTdHlsZVByb3BlcnR5U2V0JiBzdHlsZSkKK3ZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OmNvbGxl
Y3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1l
LCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHls
ZSkKIHsKICAgICBpZiAobmFtZSA9PSB3aWR0aEF0dHIpCiAgICAgICAgIGFkZEhUTUxMZW5ndGhU
b1N0eWxlKHN0eWxlLCBDU1NQcm9wZXJ0eVdpZHRoLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcg
KzkwLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIHdpbGxEZXRhY2hSZW5kZXJl
cnMoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNQcmVzZW50YXRpb25BdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBj
b2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IGNvbnN0IEF0b21pY1N0cmluZyYsIE11dGFibGVTdHlsZVByb3BlcnR5U2V0JikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgTXV0YWJsZVN0eWxlUHJv
cGVydGllcyYpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBib29sIHVzZUZhbGxiYWNrQ29udGVu
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFByZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFByZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxQcmVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgor
I2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTUwLDcgKzUwLDcgQEAgYm9vbCBIVE1MUHJlRWxlbWVudDo6aXNQcmVzZW50YXRpb25BdHRyaQog
ICAgIHJldHVybiBIVE1MRWxlbWVudDo6aXNQcmVzZW50YXRpb25BdHRyaWJ1dGUobmFtZSk7CiB9
CiAKLXZvaWQgSFRNTFByZUVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
LCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCYgc3R5bGUpCit2b2lkIEhUTUxQcmVFbGVtZW50Ojpj
b2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyYg
c3R5bGUpCiB7CiAgICAgaWYgKG5hbWUgPT0gd3JhcEF0dHIpCiAgICAgICAgIHN0eWxlLnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5V2hpdGVTcGFjZSwgQ1NTVmFsdWVQcmVXcmFwKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxQcmVFbGVtZW50LmgJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFByZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyAr
MzUsNyBAQCBwcml2YXRlOgogICAgIEhUTUxQcmVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCYpOwogCiAgICAgdmlydHVhbCBib29sIGlzUHJlc2VudGF0aW9uQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBjb25zdCBBdG9taWNTdHJpbmcmLCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYsIE11dGFibGVTdHlsZVBy
b3BlcnRpZXMmKSBPVkVSUklERTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNhcHRpb25F
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBib29sIEhUTUxUYWJs
ZUNhcHRpb25FbGVtZW50Ojppc1ByZXNlbnRhCiAgICAgcmV0dXJuIEhUTUxFbGVtZW50Ojppc1By
ZXNlbnRhdGlvbkF0dHJpYnV0ZShuYW1lKTsKIH0KIAotdm9pZCBIVE1MVGFibGVDYXB0aW9uRWxl
bWVudDo6Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIE11dGFibGVTdHlsZVByb3Bl
cnR5U2V0JiBzdHlsZSkKK3ZvaWQgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ6OmNvbGxlY3RTdHls
ZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSkKIHsK
ICAgICBpZiAobmFtZSA9PSBhbGlnbkF0dHIpIHsKICAgICAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5
KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDYXB0aW9uRWxlbWVu
dC5oCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNh
cHRpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHJpdmF0ZToK
ICAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNvbGxlY3RT
dHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3Qg
QXRvbWljU3RyaW5nJiwgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQmKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgY29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
JikgT1ZFUlJJREU7CiB9OwogCiBOT0RFX1RZUEVfQ0FTVFMoSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmNw
cAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDZWxs
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgYm9vbCBIVE1MVGFi
bGVDZWxsRWxlbWVudDo6aXNQcmVzZW50YXRpbwogICAgIHJldHVybiBIVE1MVGFibGVQYXJ0RWxl
bWVudDo6aXNQcmVzZW50YXRpb25BdHRyaWJ1dGUobmFtZSk7CiB9CiAKLXZvaWQgSFRNTFRhYmxl
Q2VsbEVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBNdXRhYmxlU3R5
bGVQcm9wZXJ0eVNldCYgc3R5bGUpCit2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50Ojpjb2xsZWN0
U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgc3R5bGUp
CiB7CiAgICAgaWYgKG5hbWUgPT0gbm93cmFwQXR0cikKICAgICAgICAgYWRkUHJvcGVydHlUb1By
ZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKHN0eWxlLCBDU1NQcm9wZXJ0eVdoaXRlU3BhY2UsIENT
U1ZhbHVlV2Via2l0Tm93cmFwKTsKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIEhUTUxUYWJsZUNl
bGxFbGVtZW50OjpwYXJzZUF0dHJpYnV0CiAgICAgICAgIEhUTUxUYWJsZVBhcnRFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWNvbnN0IFN0eWxlUHJvcGVydHlTZXQq
IEhUTUxUYWJsZUNlbGxFbGVtZW50OjphZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5
bGUoKQorY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBIVE1MVGFibGVDZWxsRWxlbWVudDo6YWRkaXRp
b25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkKIHsKICAgICBpZiAoSFRNTFRhYmxlRWxl
bWVudCogdGFibGUgPSBmaW5kUGFyZW50VGFibGUoKSkKICAgICAgICAgcmV0dXJuIHRhYmxlLT5h
ZGRpdGlvbmFsQ2VsbFN0eWxlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJs
ZUNlbGxFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFi
bGVDZWxsRWxlbWVudC5oCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUYWJsZUNlbGxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDggQEAg
cHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29s
IGlzUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdCBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmLCBNdXRhYmxlU3R5
bGVQcm9wZXJ0eVNldCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgY29uc3QgU3R5bGVQcm9wZXJ0
eVNldCogYWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgTXV0YWJsZVN0eWxlUHJvcGVy
dGllcyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBhZGRp
dGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSBPVkVSUklERTsKIAogICAgIHZpcnR1
YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmKSBjb25zdCBPVkVSUklERTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNvbEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIGJvb2wgSFRNTFRhYmxlQ29s
RWxlbWVudDo6aXNQcmVzZW50YXRpb24KICAgICByZXR1cm4gSFRNTFRhYmxlUGFydEVsZW1lbnQ6
OmlzUHJlc2VudGF0aW9uQXR0cmlidXRlKG5hbWUpOwogfQogCi12b2lkIEhUTUxUYWJsZUNvbEVs
ZW1lbnQ6OmNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBNdXRhYmxlU3R5bGVQcm9w
ZXJ0eVNldCYgc3R5bGUpCit2b2lkIEhUTUxUYWJsZUNvbEVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZv
clByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSkKIHsKICAg
ICBpZiAobmFtZSA9PSB3aWR0aEF0dHIpCiAgICAgICAgIGFkZEhUTUxMZW5ndGhUb1N0eWxlKHN0
eWxlLCBDU1NQcm9wZXJ0eVdpZHRoLCB2YWx1ZSk7CkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgSFRN
TFRhYmxlQ29sRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUKICAgICAgICAgSFRNTFRhYmxlUGFydEVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotY29uc3QgU3R5bGVQcm9w
ZXJ0eVNldCogSFRNTFRhYmxlQ29sRWxlbWVudDo6YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJp
YnV0ZVN0eWxlKCkKK2NvbnN0IFN0eWxlUHJvcGVydGllcyogSFRNTFRhYmxlQ29sRWxlbWVudDo6
YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkKIHsKICAgICBpZiAoIWhhc0xv
Y2FsTmFtZShjb2xncm91cFRhZykpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmgJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw4ICs0NCw4IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIE9WRVJSSURFOwog
ICAgIHZpcnR1YWwgYm9vbCBpc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTdHlsZUZvclBy
ZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiwgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGNv
bnN0IFN0eWxlUHJvcGVydHlTZXQqIGFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHls
ZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRp
b25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYsIE11
dGFibGVTdHlsZVByb3BlcnRpZXMmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGNvbnN0IFN0eWxl
UHJvcGVydGllcyogYWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgT1ZFUlJJ
REU7CiAKICAgICBpbnQgbV9zcGFuOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRhYmxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VGFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGFibGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQAog
I2luY2x1ZGUgIkhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZS5oIgotI2luY2x1ZGUgIlN0
eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRl
IDx3dGYvUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTI5OSw3ICsyOTksNyBAQCBz
dGF0aWMgYm9vbCBnZXRCb3JkZXJzRnJvbUZyYW1lQXR0cmlidXRlCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgSFRNTFRhYmxlRWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9u
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUsIE11dGFibGVTdHlsZVByb3BlcnR5U2V0JiBzdHlsZSkKK3ZvaWQgSFRNTFRhYmxlRWxl
bWVudDo6Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIE11dGFibGVTdHlsZVByb3Bl
cnRpZXMmIHN0eWxlKQogewogICAgIGlmIChuYW1lID09IHdpZHRoQXR0cikKICAgICAgICAgYWRk
SFRNTExlbmd0aFRvU3R5bGUoc3R5bGUsIENTU1Byb3BlcnR5V2lkdGgsIHZhbHVlKTsKQEAgLTQx
Miw5ICs0MTIsOSBAQCB2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvCiAg
ICAgfQogfQogCi1zdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogbGVha0JvcmRlclN0eWxlKENTU1Zh
bHVlSUQgdmFsdWUpCitzdGF0aWMgU3R5bGVQcm9wZXJ0aWVzKiBsZWFrQm9yZGVyU3R5bGUoQ1NT
VmFsdWVJRCB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IHN0
eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzPiBzdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0
ZSgpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlclRvcFN0eWxlLCB2
YWx1ZSk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tU3R5
bGUsIHZhbHVlKTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0
U3R5bGUsIHZhbHVlKTsKQEAgLTQyMiw3ICs0MjIsNyBAQCBzdGF0aWMgU3R5bGVQcm9wZXJ0eVNl
dCogbGVha0JvcmRlclN0eWxlCiAgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2UoKS5sZWFrUmVmKCk7
CiB9CiAKLWNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIEhUTUxUYWJsZUVsZW1lbnQ6OmFkZGl0aW9u
YWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpCitjb25zdCBTdHlsZVByb3BlcnRpZXMqIEhU
TUxUYWJsZUVsZW1lbnQ6OmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpCiB7
CiAgICAgaWYgKG1fZnJhbWVBdHRyKQogICAgICAgICByZXR1cm4gMDsKQEAgLTQzMSwxNyArNDMx
LDE3IEBAIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIEhUTUxUYWJsZUVsZW1lbnQKICAgICAgICAg
Ly8gU2V0dGluZyB0aGUgYm9yZGVyIHRvICdoaWRkZW4nIGFsbG93cyBpdCB0byB3aW4gb3ZlciBh
bnkgYm9yZGVyCiAgICAgICAgIC8vIHNldCBvbiB0aGUgdGFibGUncyBjZWxscyBkdXJpbmcgYm9y
ZGVyLWNvbmZsaWN0IHJlc29sdXRpb24uCiAgICAgICAgIGlmIChtX3J1bGVzQXR0ciAhPSBVbnNl
dFJ1bGVzKSB7Ci0gICAgICAgICAgICBzdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogc29saWRCb3Jk
ZXJTdHlsZSA9IGxlYWtCb3JkZXJTdHlsZShDU1NWYWx1ZUhpZGRlbik7CisgICAgICAgICAgICBz
dGF0aWMgU3R5bGVQcm9wZXJ0aWVzKiBzb2xpZEJvcmRlclN0eWxlID0gbGVha0JvcmRlclN0eWxl
KENTU1ZhbHVlSGlkZGVuKTsKICAgICAgICAgICAgIHJldHVybiBzb2xpZEJvcmRlclN0eWxlOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIGlmIChtX2JvcmRlckNv
bG9yQXR0cikgewotICAgICAgICBzdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogc29saWRCb3JkZXJT
dHlsZSA9IGxlYWtCb3JkZXJTdHlsZShDU1NWYWx1ZVNvbGlkKTsKKyAgICAgICAgc3RhdGljIFN0
eWxlUHJvcGVydGllcyogc29saWRCb3JkZXJTdHlsZSA9IGxlYWtCb3JkZXJTdHlsZShDU1NWYWx1
ZVNvbGlkKTsKICAgICAgICAgcmV0dXJuIHNvbGlkQm9yZGVyU3R5bGU7CiAgICAgfQotICAgIHN0
YXRpYyBTdHlsZVByb3BlcnR5U2V0KiBvdXRzZXRCb3JkZXJTdHlsZSA9IGxlYWtCb3JkZXJTdHls
ZShDU1NWYWx1ZU91dHNldCk7CisgICAgc3RhdGljIFN0eWxlUHJvcGVydGllcyogb3V0c2V0Qm9y
ZGVyU3R5bGUgPSBsZWFrQm9yZGVyU3R5bGUoQ1NTVmFsdWVPdXRzZXQpOwogICAgIHJldHVybiBv
dXRzZXRCb3JkZXJTdHlsZTsKIH0KIApAQCAtNDY4LDkgKzQ2OCw5IEBAIEhUTUxUYWJsZUVsZW1l
bnQ6OkNlbGxCb3JkZXJzIEhUTUxUYWJsZUUKICAgICByZXR1cm4gTm9Cb3JkZXJzOwogfQogCi1Q
YXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IEhUTUxUYWJsZUVsZW1lbnQ6OmNyZWF0ZVNoYXJl
ZENlbGxTdHlsZSgpCitQYXNzUmVmUHRyPFN0eWxlUHJvcGVydGllcz4gSFRNTFRhYmxlRWxlbWVu
dDo6Y3JlYXRlU2hhcmVkQ2VsbFN0eWxlKCkKIHsKLSAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJv
cGVydHlTZXQ+IHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBzdHlsZSA9IE11dGFibGVTdHlsZVByb3Bl
cnRpZXM6OmNyZWF0ZSgpOwogCiAgICAgc3dpdGNoIChjZWxsQm9yZGVycygpKSB7CiAgICAgY2Fz
ZSBTb2xpZEJvcmRlcnNDb2xzT25seToKQEAgLTUwOCwxNiArNTA4LDE2IEBAIFBhc3NSZWZQdHI8
U3R5bGVQcm9wZXJ0eVNldD4gSFRNTFRhYmxlRWwKICAgICByZXR1cm4gc3R5bGUucmVsZWFzZSgp
OwogfQogCi1jb25zdCBTdHlsZVByb3BlcnR5U2V0KiBIVE1MVGFibGVFbGVtZW50OjphZGRpdGlv
bmFsQ2VsbFN0eWxlKCkKK2NvbnN0IFN0eWxlUHJvcGVydGllcyogSFRNTFRhYmxlRWxlbWVudDo6
YWRkaXRpb25hbENlbGxTdHlsZSgpCiB7CiAgICAgaWYgKCFtX3NoYXJlZENlbGxTdHlsZSkKICAg
ICAgICAgbV9zaGFyZWRDZWxsU3R5bGUgPSBjcmVhdGVTaGFyZWRDZWxsU3R5bGUoKTsKICAgICBy
ZXR1cm4gbV9zaGFyZWRDZWxsU3R5bGUuZ2V0KCk7CiB9CiAKLXN0YXRpYyBTdHlsZVByb3BlcnR5
U2V0KiBsZWFrR3JvdXBCb3JkZXJTdHlsZShpbnQgcm93cykKK3N0YXRpYyBTdHlsZVByb3BlcnRp
ZXMqIGxlYWtHcm91cEJvcmRlclN0eWxlKGludCByb3dzKQogewotICAgIFJlZlB0cjxNdXRhYmxl
U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRl
KCk7CisgICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IHN0eWxlID0gTXV0YWJsZVN0
eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAgICAgaWYgKHJvd3MpIHsKICAgICAgICAgc3R5bGUt
PnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGgsIENTU1ZhbHVlVGhpbik7CiAg
ICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoLCBD
U1NWYWx1ZVRoaW4pOwpAQCAtNTMyLDE2ICs1MzIsMTYgQEAgc3RhdGljIFN0eWxlUHJvcGVydHlT
ZXQqIGxlYWtHcm91cEJvcmRlcgogICAgIHJldHVybiBzdHlsZS5yZWxlYXNlKCkubGVha1JlZigp
OwogfQogCi1jb25zdCBTdHlsZVByb3BlcnR5U2V0KiBIVE1MVGFibGVFbGVtZW50OjphZGRpdGlv
bmFsR3JvdXBTdHlsZShib29sIHJvd3MpCitjb25zdCBTdHlsZVByb3BlcnRpZXMqIEhUTUxUYWJs
ZUVsZW1lbnQ6OmFkZGl0aW9uYWxHcm91cFN0eWxlKGJvb2wgcm93cykKIHsKICAgICBpZiAobV9y
dWxlc0F0dHIgIT0gR3JvdXBzUnVsZXMpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKHJv
d3MpIHsKLSAgICAgICAgc3RhdGljIFN0eWxlUHJvcGVydHlTZXQqIHJvd0JvcmRlclN0eWxlID0g
bGVha0dyb3VwQm9yZGVyU3R5bGUodHJ1ZSk7CisgICAgICAgIHN0YXRpYyBTdHlsZVByb3BlcnRp
ZXMqIHJvd0JvcmRlclN0eWxlID0gbGVha0dyb3VwQm9yZGVyU3R5bGUodHJ1ZSk7CiAgICAgICAg
IHJldHVybiByb3dCb3JkZXJTdHlsZTsKICAgICB9Ci0gICAgc3RhdGljIFN0eWxlUHJvcGVydHlT
ZXQqIGNvbHVtbkJvcmRlclN0eWxlID0gbGVha0dyb3VwQm9yZGVyU3R5bGUoZmFsc2UpOworICAg
IHN0YXRpYyBTdHlsZVByb3BlcnRpZXMqIGNvbHVtbkJvcmRlclN0eWxlID0gbGVha0dyb3VwQm9y
ZGVyU3R5bGUoZmFsc2UpOwogICAgIHJldHVybiBjb2x1bW5Cb3JkZXJTdHlsZTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmgJKHJldmlzaW9uIDE1OTg0MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NSwxOSArNjUsMTkgQEAgcHVibGljOgogICAgIFN0cmluZyBydWxlcygpIGNvbnN0Owog
ICAgIFN0cmluZyBzdW1tYXJ5KCkgY29uc3Q7CiAKLSAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0
KiBhZGRpdGlvbmFsQ2VsbFN0eWxlKCk7Ci0gICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogYWRk
aXRpb25hbEdyb3VwU3R5bGUoYm9vbCByb3dzKTsKKyAgICBjb25zdCBTdHlsZVByb3BlcnRpZXMq
IGFkZGl0aW9uYWxDZWxsU3R5bGUoKTsKKyAgICBjb25zdCBTdHlsZVByb3BlcnRpZXMqIGFkZGl0
aW9uYWxHcm91cFN0eWxlKGJvb2wgcm93cyk7CiAKIHByaXZhdGU6CiAgICAgSFRNTFRhYmxlRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5n
JikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGlzUHJlc2VudGF0aW9uQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY29s
bGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBj
b25zdCBBdG9taWNTdHJpbmcmLCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCYpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYsIE11dGFibGVTdHlsZVByb3Bl
cnRpZXMmKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoY29uc3Qg
QXR0cmlidXRlJikgY29uc3QgT1ZFUlJJREU7CiAKICAgICAvLyBVc2VkIHRvIG9idGFpbiBlaXRo
ZXIgYSBzb2xpZCBvciBvdXRzZXQgYm9yZGVyIGRlY2wgYW5kIHRvIGRlYWwgd2l0aCB0aGUgZnJh
bWUgYW5kIHJ1bGVzIGF0dHJpYnV0ZXMuCi0gICAgdmlydHVhbCBjb25zdCBTdHlsZVByb3BlcnR5
U2V0KiBhZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGNvbnN0IFN0eWxlUHJvcGVydGllcyogYWRkaXRpb25hbFByZXNlbnRhdGlvbkF0
dHJpYnV0ZVN0eWxlKCkgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3Vy
Y2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PFVSTD4mKSBjb25zdCBPVkVSUklERTsKIApAQCAt
ODYsNyArODYsNyBAQCBwcml2YXRlOgogCiAgICAgQ2VsbEJvcmRlcnMgY2VsbEJvcmRlcnMoKSBj
b25zdDsKIAotICAgIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY3JlYXRlU2hhcmVkQ2Vs
bFN0eWxlKCk7CisgICAgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnRpZXM+IGNyZWF0ZVNoYXJlZENl
bGxTdHlsZSgpOwogCiAgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIGxhc3RCb2R5KCkgY29u
c3Q7CiAKQEAgLTk3LDcgKzk3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYXJlIHByZXNlbnQsIHRvIG5vbmUgb3RoZXJ3aXNlKS4KIAogICAgIHVuc2ln
bmVkIHNob3J0IG1fcGFkZGluZzsKLSAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gbV9zaGFy
ZWRDZWxsU3R5bGU7CisgICAgUmVmUHRyPFN0eWxlUHJvcGVydGllcz4gbV9zaGFyZWRDZWxsU3R5
bGU7CiB9OwogCiBOT0RFX1RZUEVfQ0FTVFMoSFRNTFRhYmxlRWxlbWVudCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTk4
NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVBhcnRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2lu
Y2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydGll
cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDcgKzQ2LDcgQEAgYm9vbCBIVE1M
VGFibGVQYXJ0RWxlbWVudDo6aXNQcmVzZW50YXRpbwogICAgIHJldHVybiBIVE1MRWxlbWVudDo6
aXNQcmVzZW50YXRpb25BdHRyaWJ1dGUobmFtZSk7CiB9CiAKLXZvaWQgSFRNTFRhYmxlUGFydEVs
ZW1lbnQ6OmNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBNdXRhYmxlU3R5bGVQcm9w
ZXJ0eVNldCYgc3R5bGUpCit2b2lkIEhUTUxUYWJsZVBhcnRFbGVtZW50Ojpjb2xsZWN0U3R5bGVG
b3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgc3R5bGUpCiB7CiAg
ICAgaWYgKG5hbWUgPT0gYmdjb2xvckF0dHIpCiAgICAgICAgIGFkZEhUTUxDb2xvclRvU3R5bGUo
c3R5bGUsIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUYWJsZVBhcnRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVGFibGVQYXJ0RWxlbWVudC5oCShyZXZpc2lvbiAxNTk4NDEpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVBhcnRFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDcgKzQwLDcgQEAgcHJvdGVjdGVkOgogICAgIH0KIAogICAgIHZpcnR1YWwgYm9v
bCBpc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3QgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgTXV0YWJsZVN0
eWxlUHJvcGVydHlTZXQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdFN0eWxl
Rm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9t
aWNTdHJpbmcmLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJikgT1ZFUlJJREU7CiAKICAgICBIVE1M
VGFibGVFbGVtZW50KiBmaW5kUGFyZW50VGFibGUoKSBjb25zdDsKIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24g
MTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgUGFzc1JlZlB0cjxIVE1MVGFibGVT
ZWN0aW9uRWxlbWVudD4gSFRNTAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotY29uc3QgU3R5bGVQcm9wZXJ0
eVNldCogSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZSgpCitjb25zdCBTdHlsZVByb3BlcnRpZXMqIEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50OjphZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKQogewogICAgIGlmIChI
VE1MVGFibGVFbGVtZW50KiB0YWJsZSA9IGZpbmRQYXJlbnRUYWJsZSgpKQogICAgICAgICByZXR1
cm4gdGFibGUtPmFkZGl0aW9uYWxHcm91cFN0eWxlKHRydWUpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMTU5ODQxKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQmKTsK
IAotICAgIHZpcnR1YWwgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogYWRkaXRpb25hbFByZXNlbnRh
dGlvbkF0dHJpYnV0ZVN0eWxlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBjb25zdCBTdHlsZVBy
b3BlcnRpZXMqIGFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpIE9WRVJSSURF
OwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEFyZWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNyArMTUx
LDcgQEAgYm9vbCBIVE1MVGV4dEFyZWFFbGVtZW50Ojppc1ByZXNlbnRhdGlvbgogICAgIHJldHVy
biBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6aXNQcmVzZW50YXRpb25BdHRyaWJ1dGUobmFt
ZSk7CiB9CiAKLXZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yUHJlc2Vu
dGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUsIE11dGFibGVTdHlsZVByb3BlcnR5U2V0JiBzdHlsZSkKK3ZvaWQgSFRNTFRl
eHRBcmVhRWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIE11dGFibGVT
dHlsZVByb3BlcnRpZXMmIHN0eWxlKQogewogICAgIGlmIChuYW1lID09IHdyYXBBdHRyKSB7CiAg
ICAgICAgIGlmIChzaG91bGRXcmFwVGV4dCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUZXh0QXJlYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUZXh0QXJlYUVsZW1lbnQuaAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5
LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENo
aWxkQ2hhbmdlJikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBPVkVSUklERTsKICAgICB2
aXJ0dWFsIGJvb2wgaXNQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYp
IGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0U3R5bGVGb3JQcmVzZW50
YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYs
IE11dGFibGVTdHlsZVByb3BlcnR5U2V0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNv
bGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwg
Y29uc3QgQXRvbWljU3RyaW5nJiwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyYpIE9WRVJSSURFOwog
ICAgIHZpcnR1YWwgUmVuZGVyRWxlbWVudCogY3JlYXRlUmVuZGVyZXIoUGFzc1JlZjxSZW5kZXJT
dHlsZT4pIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBhcHBlbmRGb3JtRGF0YShGb3JtRGF0
YUxpc3QmLCBib29sKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSBPVkVSUklE
RTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFVMaXN0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVUxpc3RFbGVtZW50LmNwcAkocmV2aXNp
b24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVUxpc3RFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBib29sIEhUTUxVTGlzdEVsZW1lbnQ6Omlz
UHJlc2VudGF0aW9uQXR0CiAgICAgcmV0dXJuIEhUTUxFbGVtZW50Ojppc1ByZXNlbnRhdGlvbkF0
dHJpYnV0ZShuYW1lKTsKIH0KIAotdm9pZCBIVE1MVUxpc3RFbGVtZW50Ojpjb2xsZWN0U3R5bGVG
b3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSwgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQmIHN0eWxlKQordm9p
ZCBIVE1MVUxpc3RFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgTXV0
YWJsZVN0eWxlUHJvcGVydGllcyYgc3R5bGUpCiB7CiAgICAgaWYgKG5hbWUgPT0gdHlwZUF0dHIp
CiAgICAgICAgIGFkZFByb3BlcnR5VG9QcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZShzdHlsZSwg
Q1NTUHJvcGVydHlMaXN0U3R5bGVUeXBlLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxVTGlzdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxVTGlzdEVsZW1lbnQuaAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVUxpc3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAg
cHJpdmF0ZToKICAgICBIVE1MVUxpc3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCYpOwogCiAgICAgdmlydHVhbCBib29sIGlzUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY29sbGVj
dFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25z
dCBBdG9taWNTdHJpbmcmLCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCYpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYsIE11dGFibGVTdHlsZVByb3BlcnRp
ZXMmKSBPVkVSUklERTsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyAr
OTYsNyBAQCB2b2lkIEhUTUxWaWRlb0VsZW1lbnQ6OmRpZEF0dGFjaFJlbmRlcmVyCiAjZW5kaWYK
IH0KIAotdm9pZCBIVE1MVmlkZW9FbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25B
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSwgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQmIHN0eWxlKQordm9pZCBIVE1MVmlkZW9FbGVt
ZW50Ojpjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgTXV0YWJsZVN0eWxlUHJvcGVy
dGllcyYgc3R5bGUpCiB7CiAgICAgaWYgKG5hbWUgPT0gd2lkdGhBdHRyKQogICAgICAgICBhZGRI
VE1MTGVuZ3RoVG9TdHlsZShzdHlsZSwgQ1NTUHJvcGVydHlXaWR0aCwgdmFsdWUpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmgJKHJldmlzaW9uIDE1OTg0MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRpZEF0dGFjaFJlbmRl
cmVycygpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJikgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCBib29sIGlzUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25z
dCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9u
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmLCBNdXRh
YmxlU3R5bGVQcm9wZXJ0eVNldCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0
U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0
IEF0b21pY1N0cmluZyYsIE11dGFibGVTdHlsZVByb3BlcnRpZXMmKSBPVkVSUklERTsKICAgICB2
aXJ0dWFsIGJvb2wgaXNWaWRlbygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgaGFzVmlkZW8oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBwbGF5ZXIo
KSAmJiBwbGF5ZXIoKS0+aGFzVmlkZW8oKTsgfQogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1
bGxzY3JlZW4oKSBjb25zdCBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24g
MTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQAogI2luY2x1ZGUgIlJl
bmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlN0
cm9rZVN0eWxlQXBwbGllci5oIgotI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNs
dWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5j
bHVkZSAiVGV4dE1ldHJpY3MuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCkBAIC0xOTkzLDcgKzE5
OTMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjCiAgICAgaWYg
KG5ld0ZvbnQgPT0gc3RhdGUoKS5tX3VucGFyc2VkRm9udCAmJiBzdGF0ZSgpLm1fcmVhbGl6ZWRG
b250KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydHlT
ZXQ+IHBhcnNlZFN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBwYXJzZWRTdHlsZSA9IE11dGFibGVTdHls
ZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwogICAgIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShwYXJzZWRT
dHlsZS5nZXQoKSwgQ1NTUHJvcGVydHlGb250LCBuZXdGb250LCB0cnVlLCBzdHJpY3RUb0NTU1Bh
cnNlck1vZGUoIW1fdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpLCAwKTsKICAgICBpZiAo
cGFyc2VkU3R5bGUtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkocmV2aXNpb24gMTU5ODQxKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCi0jaW5j
bHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgog
CiAjaWYgVVNFKENHKQogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxl
bWVudFR5cGVzLmNwcAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NyArMzgsNyBAQAogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJSZW5kZXJNZWRp
YS5oIgogI2luY2x1ZGUgIlJlbmRlck1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCi0jaW5jbHVkZSAi
U3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xFbGVt
ZW50OjpzaG93KCkKIAogYm9vbCBNZWRpYUNvbnRyb2xFbGVtZW50Ojppc1Nob3dpbmcoKSBjb25z
dAogewotICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnR5U2V0ID0gbV9lbGVtZW50
LT5pbmxpbmVTdHlsZSgpOworICAgIGNvbnN0IFN0eWxlUHJvcGVydGllcyogcHJvcGVydHlTZXQg
PSBtX2VsZW1lbnQtPmlubGluZVN0eWxlKCk7CiAgICAgLy8gRm9sbG93aW5nIHRoZSBjb2RlIGZy
b20gc2hvdygpIGFuZCBoaWRlKCkgYWJvdmUsIHdlIG9ubHkgaGF2ZQogICAgIC8vIHRvIGNoZWNr
IGZvciB0aGUgcHJlc2Vuc2Ugb2YgaW5saW5lIGRpc3BsYXkuCiAgICAgcmV0dXJuICghcHJvcGVy
dHlTZXQgfHwgIXByb3BlcnR5U2V0LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RGlz
cGxheSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWV0ZXJTaGFkb3dFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZXRlclNo
YWRvd0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9NZXRlclNoYWRvd0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICsz
OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTWV0ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0Lmgi
CisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
CShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBACiAjaW5jbHVkZSAi
Tm9kZUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKICNpbmNsdWRlICJTVkdTdHls
ZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5
bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIgogI2lu
Y2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKQEAgLTEzNDgs
MTIgKzEzNDgsMTIgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gSQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIEZJWE1FOiBVZ2xpbmVzcyBiZWxvdy4KLSAgICBT
dHlsZVByb3BlcnR5U2V0KiBhdHRyaWJ1dGVTdHlsZSA9IGNvbnN0X2Nhc3Q8U3R5bGVQcm9wZXJ0
eVNldCo+KHRvU3R5bGVkRWxlbWVudChlbGVtZW50KS0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5
bGUoKSk7CisgICAgU3R5bGVQcm9wZXJ0aWVzKiBhdHRyaWJ1dGVTdHlsZSA9IGNvbnN0X2Nhc3Q8
U3R5bGVQcm9wZXJ0aWVzKj4odG9TdHlsZWRFbGVtZW50KGVsZW1lbnQpLT5wcmVzZW50YXRpb25B
dHRyaWJ1dGVTdHlsZSgpKTsKICAgICBpZiAoIWF0dHJpYnV0ZVN0eWxlKQogICAgICAgICByZXR1
cm4gMDsKIAogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGF0dHJpYnV0ZVN0
eWxlLT5pc011dGFibGUoKSk7Ci0gICAgTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQqIG11dGFibGVB
dHRyaWJ1dGVTdHlsZSA9IHN0YXRpY19jYXN0PE11dGFibGVTdHlsZVByb3BlcnR5U2V0Kj4oYXR0
cmlidXRlU3R5bGUpOworICAgIE11dGFibGVTdHlsZVByb3BlcnRpZXMqIG11dGFibGVBdHRyaWJ1
dGVTdHlsZSA9IHN0YXRpY19jYXN0PE11dGFibGVTdHlsZVByb3BlcnRpZXMqPihhdHRyaWJ1dGVT
dHlsZSk7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gSW5z
cGVjdG9yU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JDU1NJZCgpLCBtdXRhYmxlQXR0cmlidXRlU3R5
bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSwgMCk7CiAgICAgcmV0dXJuIGluc3BlY3Rv
clN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg4LDcgKzg4LDcgQEAKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgotI2luY2x1ZGUgIlN0eWxlUHJv
cGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlICJTdHls
ZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJUZXh0
LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
U2hlZXQuY3BwCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAK
ICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUmVndWxhckV4cHJlc3Npb24uaCIKICNpbmNs
dWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRl
ICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVk
ZSAiU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlSW1wb3J0LmgiCkBAIC0zNjYsNyAr
MzY2LDcgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZTo6c2V0UHJvcGVydHlUZXh0KHVucwogICAgIH0K
IAogICAgIGlmIChwcm9wZXJ0eVRleHQuc3RyaXBXaGl0ZVNwYWNlKCkubGVuZ3RoKCkpIHsKLSAg
ICAgICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnR5U2V0PiB0ZW1wTXV0YWJsZVN0eWxlID0g
TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8TXV0YWJs
ZVN0eWxlUHJvcGVydGllcz4gdGVtcE11dGFibGVTdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRp
ZXM6OmNyZWF0ZSgpOwogICAgICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURh
dGEgPSBDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlKENTU1J1bGVTb3VyY2VEYXRhOjpTVFlMRV9S
VUxFKTsKICAgICAgICAgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQgPSBtX3BhcmVudFN0eWxlU2hl
ZXQtPnBhZ2VTdHlsZVNoZWV0KCkgPyBtX3BhcmVudFN0eWxlU2hlZXQtPnBhZ2VTdHlsZVNoZWV0
KCktPm93bmVyRG9jdW1lbnQoKSA6IDA7CiAgICAgICAgIGNyZWF0ZUNTU1BhcnNlcihvd25lckRv
Y3VtZW50KS0+cGFyc2VEZWNsYXJhdGlvbih0ZW1wTXV0YWJsZVN0eWxlLmdldCgpLCBwcm9wZXJ0
eVRleHQgKyAiICIgKyBib2d1c1Byb3BlcnR5TmFtZSArICI6IG5vbmUiLCBzb3VyY2VEYXRhLCAm
bV9zdHlsZS0+cGFyZW50U3R5bGVTaGVldCgpLT5jb250ZW50cygpKTsKQEAgLTE1NDcsNyArMTU0
Nyw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjoKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnR5U2V0
PiB0ZW1wRGVjbGFyYXRpb24gPSBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IHRlbXBEZWNsYXJhdGlvbiA9IE11dGFi
bGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwogICAgIGNyZWF0ZUNTU1BhcnNlcigmbV9lbGVt
ZW50LT5kb2N1bWVudCgpKS0+cGFyc2VEZWNsYXJhdGlvbih0ZW1wRGVjbGFyYXRpb24uZ2V0KCks
IG1fc3R5bGVUZXh0LCByZXN1bHQsICZtX2VsZW1lbnQtPmRvY3VtZW50KCkuZWxlbWVudFNoZWV0
KCkuY29udGVudHMoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxNiw3ICs0MTYsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwg
UmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoUmFuZ2UqLCBSYW5nZSos
IEVBZmZpbml0eSwgYm9vbCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydHlTZXQqLCBSYW5nZSopIE9WRVJS
SURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHNob3VsZEFwcGx5U3R5bGUo
U3R5bGVQcm9wZXJ0aWVzKiwgUmFuZ2UqKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShSYW5nZSosIFJhbmdlKikg
T1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbkVk
aXRpbmcoKSBPVkVSUklERSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRo
TUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBib29sIE1hdGhN
TEVsZW1lbnQ6OmlzUHJlc2VudGF0aW9uQXR0cmliCiAgICAgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6
OmlzUHJlc2VudGF0aW9uQXR0cmlidXRlKG5hbWUpOwogfQogCi12b2lkIE1hdGhNTEVsZW1lbnQ6
OmNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNl
dCYgc3R5bGUpCit2b2lkIE1hdGhNTEVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlv
bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSkKIHsKICAgICBpZiAobmFtZSA9
PSBtYXRoYmFja2dyb3VuZEF0dHIpCiAgICAgICAgIGFkZFByb3BlcnR5VG9QcmVzZW50YXRpb25B
dHRyaWJ1dGVTdHlsZShzdHlsZSwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIHZhbHVlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuaAkocmV2aXNpb24gMTU5ODQx
KQorKysgU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6ICAgIAogICAgIHZpcnR1
YWwgYm9vbCBpc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlv
bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgTXV0
YWJsZVN0eWxlUHJvcGVydHlTZXQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY29sbGVj
dFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25z
dCBBdG9taWNTdHJpbmcmLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJikgT1ZFUlJJREU7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihjb25zdCBOb2RlJikgY29u
c3QgT1ZFUlJJREU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
CShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQAogI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFkb3dSb290Lmgi
Ci0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydGll
cy5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0RXZlbnQuaCIKICNpbmNsdWRl
ICJodG1sZWRpdGluZy5oIgpAQCAtNDU0LDcgKzQ1NCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6
OmNvbmNsdWRlRWRpdERyYWcoRHIKICAgICAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gaW5uZXJSYW5nZSA9
IGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIFJl
ZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0
eVNldDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBz
dHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwogICAgICAgICBzdHlsZS0+
c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvciwgY29sb3Iuc2VyaWFsaXplZCgpLCBmYWxzZSk7
CiAgICAgICAgIGlmICghaW5uZXJGcmFtZS0+ZWRpdG9yKCkuc2hvdWxkQXBwbHlTdHlsZShzdHls
ZS5nZXQoKSwgaW5uZXJSYW5nZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcg
KzUzLDcgQEAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKIGNsYXNzIE5vZGU7CiBjbGFzcyBSYW5nZTsK
IGNsYXNzIFNoYXJlZEJ1ZmZlcjsKLWNsYXNzIFN0eWxlUHJvcGVydHlTZXQ7CitjbGFzcyBTdHls
ZVByb3BlcnRpZXM7CiBjbGFzcyBUZXh0Q2hlY2tlckNsaWVudDsKIGNsYXNzIFZpc2libGVTZWxl
Y3Rpb247CiBjbGFzcyBWaXNpYmxlUG9zaXRpb247CkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBSYW5nZSos
IEVkaXRvckluc2VydEFjdGlvbikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VT
ZWxlY3RlZFJhbmdlKFJhbmdlKiBmcm9tUmFuZ2UsIFJhbmdlKiB0b1JhbmdlLCBFQWZmaW5pdHks
IGJvb2wgc3RpbGxTZWxlY3RpbmcpID0gMDsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
QXBwbHlTdHlsZShTdHlsZVByb3BlcnR5U2V0KiwgUmFuZ2UqKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIHNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiwgUmFuZ2UqKSA9IDA7CiAgICAg
dmlydHVhbCBib29sIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFJhbmdlKiwgUmFuZ2UqKSA9
IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5FZGl0aW5nKCkgPSAwOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBACiAjaW5jbHVkZSAiU2Ny
aXB0VmFsdWUuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0
eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRl
eHROb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAJKHJldmlzaW9uIDE1OTg0MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw3ICs1Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogI2luY2x1ZGUg
IlN0eWxlQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJTdHlsZUltYWdlLmgiCi0jaW5jbHVkZSAi
U3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1
ZGUgIlN0eWxlUnVsZS5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgogI2luY2x1
ZGUgIlRleHQuaCIKQEAgLTMxNyw3ICszMTcsNyBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpyZXRy
aWV2ZVJlc291cmNlc0ZvCiAgICAgcmV0cmlldmVSZXNvdXJjZXNGb3JQcm9wZXJ0aWVzKCZydWxl
LT5wcm9wZXJ0aWVzKCksIGRvY3VtZW50KTsKIH0KIAotdm9pZCBQYWdlU2VyaWFsaXplcjo6cmV0
cmlldmVSZXNvdXJjZXNGb3JQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHN0eWxl
RGVjbGFyYXRpb24sIERvY3VtZW50KiBkb2N1bWVudCkKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OnJl
dHJpZXZlUmVzb3VyY2VzRm9yUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnRpZXMqIHN0eWxl
RGVjbGFyYXRpb24sIERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBpZiAoIXN0eWxlRGVjbGFy
YXRpb24pCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNl
cmlhbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxp
emVyLmgJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlh
bGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBEb2N1bWVudDsK
IGNsYXNzIEZyYW1lOwogY2xhc3MgUGFnZTsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7Ci1jbGFzcyBT
dHlsZVByb3BlcnR5U2V0OworY2xhc3MgU3R5bGVQcm9wZXJ0aWVzOwogY2xhc3MgU3R5bGVSdWxl
OwogCiAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gc2VyaWFsaXplIGEgcGFnZSBjb250ZW50cyBi
YWNrIHRvIHRleHQgKHR5cGljYWxseSBIVE1MKS4KQEAgLTc4LDcgKzc4LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFVS
TCYpOwogCiAgICAgdm9pZCBhZGRJbWFnZVRvUmVzb3VyY2VzKENhY2hlZEltYWdlKiwgUmVuZGVy
RWxlbWVudCosIGNvbnN0IFVSTCYpOwotICAgIHZvaWQgcmV0cmlldmVSZXNvdXJjZXNGb3JQcm9w
ZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqLCBEb2N1bWVudCopOworICAgIHZvaWQgcmV0
cmlldmVSZXNvdXJjZXNGb3JQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydGllcyosIERvY3Vt
ZW50Kik7CiAgICAgdm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvclJ1bGUoU3R5bGVSdWxlKiwgRG9j
dW1lbnQqKTsKIAogICAgIFZlY3RvcjxSZXNvdXJjZT4qIG1fcmVzb3VyY2VzOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAxNTk4NDEpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDIsNyArMTAyLDcgQEAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNo
YWRvd1Jvb3QuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCi0jaW5jbHVkZSAiU3R5bGVQ
cm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgIlN0
eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBA
QAogI2luY2x1ZGUgIlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKKyNp
bmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgog
I2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTQsNyArNTQsNyBAQAogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlNo
YWRvd1Jvb3QuaCIKICNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCIKLSNpbmNs
dWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAj
aW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNs
dWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgpAQCAtMTM5LDcgKzEzOSw3IEBAIHN0
YXRpYyBib29sIGlzRW1wdHlPclVuc3R5bGVkQXBwbGVTdHlsZVMKICAgICBpZiAoIW5vZGUtPmhh
c0NoaWxkTm9kZXMoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBjb25zdCBTdHlsZVBy
b3BlcnR5U2V0KiBpbmxpbmVTdHlsZURlY2wgPSBlbGVtLT5pbmxpbmVTdHlsZSgpOworICAgIGNv
bnN0IFN0eWxlUHJvcGVydGllcyogaW5saW5lU3R5bGVEZWNsID0gZWxlbS0+aW5saW5lU3R5bGUo
KTsKICAgICByZXR1cm4gKCFpbmxpbmVTdHlsZURlY2wgfHwgaW5saW5lU3R5bGVEZWNsLT5pc0Vt
cHR5KCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5j
cHAJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJTVkdB
bmltYXRvckZhY3RvcnkuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5bGVQ
cm9wZXJ0aWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmNwcAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTksMTQgKzc1OSwxNCBAQCBQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBTVkdFbGVtZW50OjpjdXN0CiAgICAgcmV0dXJuIGRvY3VtZW50KCku
ZW5zdXJlU3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudChjb3JyZXNwb25kaW5nRWxlbWVu
dCgpLCBzdHlsZSwgRGlzYWxsb3dTdHlsZVNoYXJpbmcpOwogfQogCi1NdXRhYmxlU3R5bGVQcm9w
ZXJ0eVNldCogU1ZHRWxlbWVudDo6YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkgY29uc3QK
K011dGFibGVTdHlsZVByb3BlcnRpZXMqIFNWR0VsZW1lbnQ6OmFuaW1hdGVkU01JTFN0eWxlUHJv
cGVydGllcygpIGNvbnN0CiB7CiAgICAgaWYgKG1fc3ZnUmFyZURhdGEpCiAgICAgICAgIHJldHVy
biBtX3N2Z1JhcmVEYXRhLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKTsKICAgICByZXR1
cm4gMDsKIH0KIAotTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQmIFNWR0VsZW1lbnQ6OmVuc3VyZUFu
aW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpCitNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBTVkdF
bGVtZW50OjplbnN1cmVBbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKQogewogICAgIHJldHVy
biBlbnN1cmVTVkdSYXJlRGF0YSgpLmVuc3VyZUFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygp
OwogfQpAQCAtOTY2LDcgKzk2Niw3IEBAIGJvb2wgU1ZHRWxlbWVudDo6aXNQcmVzZW50YXRpb25B
dHRyaWJ1dGUKICAgICByZXR1cm4gU3R5bGVkRWxlbWVudDo6aXNQcmVzZW50YXRpb25BdHRyaWJ1
dGUobmFtZSk7CiB9CiAKLXZvaWQgU1ZHRWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0
aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUsIE11dGFibGVTdHlsZVByb3BlcnR5U2V0JiBzdHlsZSkKK3ZvaWQgU1ZHRWxlbWVu
dDo6Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIE11dGFibGVTdHlsZVByb3BlcnRp
ZXMmIHN0eWxlKQogewogICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5
SWRGb3JTVkdBdHRyaWJ1dGVOYW1lKG5hbWUpOwogICAgIGlmIChwcm9wZXJ0eUlEID4gMCkKQEAg
LTEwNTQsNyArMTA1NCw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IFNWR0VsZW1lbnQ6OmdldFBy
ZXMKICAgICBpZiAoIWF0dHJpYnV0ZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZWZQdHI8
TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6
OmNyZWF0ZShTVkdBdHRyaWJ1dGVNb2RlKTsKKyAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVy
dGllcz4gc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoU1ZHQXR0cmlidXRl
TW9kZSk7CiAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJZEZvclNW
R0F0dHJpYnV0ZU5hbWUoYXR0cmlidXRlLT5uYW1lKCkpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0
eShwcm9wZXJ0eUlELCBhdHRyaWJ1dGUtPnZhbHVlKCkpOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4g
Y3NzVmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDggKzEyNiw4IEBAIHB1
YmxpYzoKICAgICBib29sIGlzQW5pbWF0YWJsZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JikgY29uc3Q7CiAjZW5kaWYKIAotICAgIE11dGFibGVTdHlsZVByb3BlcnR5U2V0KiBhbmltYXRl
ZFNNSUxTdHlsZVByb3BlcnRpZXMoKSBjb25zdDsKLSAgICBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNl
dCYgZW5zdXJlQW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCk7CisgICAgTXV0YWJsZVN0eWxl
UHJvcGVydGllcyogYW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkgY29uc3Q7CisgICAgTXV0
YWJsZVN0eWxlUHJvcGVydGllcyYgZW5zdXJlQW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCk7
CiAgICAgdm9pZCBzZXRVc2VPdmVycmlkZUNvbXB1dGVkU3R5bGUoYm9vbCk7CiAKICAgICB2aXJ0
dWFsIGJvb2wgaGF2ZUxvYWRlZFJlcXVpcmVkUmVzb3VyY2VzKCk7CkBAIC0xNTYsNyArMTU2LDcg
QEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBDU1NQcm9wZXJ0eUlEIGNzc1Byb3BlcnR5SWRGb3JT
VkdBdHRyaWJ1dGVOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAogICAgIHZpcnR1YWwgYm9v
bCBpc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3QgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgTXV0YWJsZVN0
eWxlUHJvcGVydHlTZXQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdFN0eWxl
Rm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9t
aWNTdHJpbmcmLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJikgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCBJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2Rl
JikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUm
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxk
Q2hhbmdlJikgT1ZFUlJJREU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJh
cmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRSYXJl
RGF0YS5oCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVu
dFJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICNpZm5kZWYgU1ZH
RWxlbWVudFJhcmVEYXRhX2gKICNkZWZpbmUgU1ZHRWxlbWVudFJhcmVEYXRhX2gKIAotI2luY2x1
ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNp
bmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTYxLDExICs2MSwxMSBAQCBwdWJsaWM6CiAgICAg
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSogY3Vyc29ySW1hZ2VWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y3Vyc29ySW1hZ2VWYWx1ZTsgfQogICAgIHZvaWQgc2V0Q3Vyc29ySW1hZ2VWYWx1ZShDU1NDdXJz
b3JJbWFnZVZhbHVlKiBjdXJzb3JJbWFnZVZhbHVlKSB7IG1fY3Vyc29ySW1hZ2VWYWx1ZSA9IGN1
cnNvckltYWdlVmFsdWU7IH0KIAotICAgIE11dGFibGVTdHlsZVByb3BlcnR5U2V0KiBhbmltYXRl
ZFNNSUxTdHlsZVByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGVkU01JTFN0eWxl
UHJvcGVydGllcy5nZXQoKTsgfQotICAgIE11dGFibGVTdHlsZVByb3BlcnR5U2V0JiBlbnN1cmVB
bmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKQorICAgIE11dGFibGVTdHlsZVByb3BlcnRpZXMq
IGFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0ZWRT
TUlMU3R5bGVQcm9wZXJ0aWVzLmdldCgpOyB9CisgICAgTXV0YWJsZVN0eWxlUHJvcGVydGllcyYg
ZW5zdXJlQW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkKICAgICB7CiAgICAgICAgIGlmICgh
bV9hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMpCi0gICAgICAgICAgICBtX2FuaW1hdGVkU01J
TFN0eWxlUHJvcGVydGllcyA9IE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoU1ZHQXR0
cmlidXRlTW9kZSk7CisgICAgICAgICAgICBtX2FuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcyA9
IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZShTVkdBdHRyaWJ1dGVNb2RlKTsKICAgICAg
ICAgcmV0dXJuICptX2FuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllczsKICAgICB9CiAKQEAgLTEw
MCw3ICsxMDAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pbnN0YW5jZXNVcGRhdGVzQmxvY2tl
ZCA6IDE7CiAgICAgYm9vbCBtX3VzZU92ZXJyaWRlQ29tcHV0ZWRTdHlsZSA6IDE7CiAgICAgYm9v
bCBtX25lZWRzT3ZlcnJpZGVDb21wdXRlZFN0eWxlVXBkYXRlIDogMTsKLSAgICBSZWZQdHI8TXV0
YWJsZVN0eWxlUHJvcGVydHlTZXQ+IG1fYW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzOworICAg
IFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBtX2FuaW1hdGVkU01JTFN0eWxlUHJvcGVy
dGllczsKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fb3ZlcnJpZGVDb21wdXRlZFN0eWxlOwog
fTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSAiU1ZHRm9udEZh
Y2VTcmNFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHR2x5cGhFbGVtZW50LmgiCiAjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5
bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0
eWxlUnVsZS5oIgogI2luY2x1ZGUgPG1hdGguaD4KQEAgLTUwLDcgKzUwLDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIFNWR05hbWVzOwogCiBpbmxpbmUgU1ZHRm9udEZhY2VFbGVtZW50OjpTVkdGb250RmFj
ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQmIGRvY3VtZW50
KQogICAgIDogU1ZHRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKLSAgICAsIG1fZm9udEZhY2VS
dWxlKFN0eWxlUnVsZUZvbnRGYWNlOjpjcmVhdGUoTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OmNy
ZWF0ZShDU1NTdHJpY3RNb2RlKSkpCisgICAgLCBtX2ZvbnRGYWNlUnVsZShTdHlsZVJ1bGVGb250
RmFjZTo6Y3JlYXRlKE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZShDU1NTdHJpY3RNb2Rl
KSkpCiAgICAgLCBtX2ZvbnRFbGVtZW50KDApCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoZm9u
dF9mYWNlVGFnKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAko
cmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ltYWdlRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgYm9vbCBTVkdJbWFnZUVsZW1lbnQ6
OmlzUHJlc2VudGF0aW9uQXR0cgogICAgIHJldHVybiBTVkdHcmFwaGljc0VsZW1lbnQ6OmlzUHJl
c2VudGF0aW9uQXR0cmlidXRlKG5hbWUpOwogfQogCi12b2lkIFNWR0ltYWdlRWxlbWVudDo6Y29s
bGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIE11dGFibGVTdHlsZVByb3BlcnR5U2V0JiBz
dHlsZSkKK3ZvaWQgU1ZHSW1hZ2VFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25B
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgc3R5bGUpCiB7CiAgICAgaWYgKCFpc1N1cHBv
cnRlZEF0dHJpYnV0ZShuYW1lKSkKICAgICAgICAgU1ZHR3JhcGhpY3NFbGVtZW50Ojpjb2xsZWN0
U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUobmFtZSwgdmFsdWUsIHN0eWxlKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHSW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NyArNDcsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJikgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCBib29sIGlzUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25z
dCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9u
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmLCBNdXRh
YmxlU3R5bGVQcm9wZXJ0eVNldCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0
U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0
IEF0b21pY1N0cmluZyYsIE11dGFibGVTdHlsZVByb3BlcnRpZXMmKSBPVkVSUklERTsKICAgICB2
aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkQXR0YWNoUmVuZGVyZXJzKCkgT1ZFUlJJREU7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAkocmV2aXNpb24g
MTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyOCw3ICsyMjgsNyBAQCBib29sIFNWR1RleHRDb250ZW50RWxl
bWVudDo6aXNQcmVzZW50YXRpCiAgICAgcmV0dXJuIFNWR0dyYXBoaWNzRWxlbWVudDo6aXNQcmVz
ZW50YXRpb25BdHRyaWJ1dGUobmFtZSk7CiB9CiAKLXZvaWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50
Ojpjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgTXV0YWJsZVN0eWxlUHJvcGVydHlT
ZXQmIHN0eWxlKQordm9pZCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvclBy
ZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSkKIHsKICAgICBp
ZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKG5hbWUpKQogICAgICAgICBTVkdHcmFwaGljc0VsZW1l
bnQ6OmNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgc3R5
bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaAko
cmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgcHJvdGVjdGVkOgogICAg
IGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRv
bWljU3RyaW5nJikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGlzUHJlc2VudGF0aW9uQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgY29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmLCBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldCYpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYsIE11dGFibGVT
dHlsZVByb3BlcnRpZXMmKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2VsZkhh
c1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAko
cmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBA
CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU3BlbGxDaGVja2VyLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9TdHlsZVByb3BlcnR5U2V0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TdHlsZVByb3BlcnRp
ZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRJdGVyYXRvci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvVW5kb1N0ZXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJUeXBpbmdHZXN0dXJlSW5kaWNh
dG9yLmg+CkBAIC0xNTMsOSArMTUzLDkgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZENo
YW5nZVNlbGVjdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAgICAgCi1ib29sIFdlYkVkaXRvckNs
aWVudDo6c2hvdWxkQXBwbHlTdHlsZShTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwgUmFuZ2UqIHJh
bmdlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0
aWVzKiBzdHlsZSwgUmFuZ2UqIHJhbmdlKQogewotICAgIFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0
eVNldD4gbXV0YWJsZVN0eWxlKHN0eWxlLT5pc011dGFibGUoKSA/IHN0YXRpY19jYXN0PE11dGFi
bGVTdHlsZVByb3BlcnR5U2V0Jj4oKnN0eWxlKSA6IHN0eWxlLT5tdXRhYmxlQ29weSgpKTsKKyAg
ICBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gbXV0YWJsZVN0eWxlKHN0eWxlLT5pc011dGFi
bGUoKSA/IHN0YXRpY19jYXN0PE11dGFibGVTdHlsZVByb3BlcnRpZXMmPigqc3R5bGUpIDogc3R5
bGUtPm11dGFibGVDb3B5KCkpOwogICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1
bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEFwcGx5U3R5bGUobV9wYWdlLCBtdXRhYmxlU3R5bGUt
PmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSwgcmFuZ2UpOwogICAgIG5vdEltcGxlbWVudGVk
KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkocmV2aXNp
b24gMTU5ODQxKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIFdlYkNv
cmU6OlJhbmdlKiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBPVkVSUklERTsKICAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJDb3JlOjpSYW5nZSogZnJv
bVJhbmdlLCBXZWJDb3JlOjpSYW5nZSogdG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5LCBib29s
IHN0aWxsU2VsZWN0aW5nKSBPVkVSUklERTsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
QXBwbHlTdHlsZShXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0KiwgV2ViQ29yZTo6UmFuZ2UqKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShXZWJDb3JlOjpTdHls
ZVByb3BlcnRpZXMqLCBXZWJDb3JlOjpSYW5nZSopIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OlJh
bmdlKikgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5FZGl0aW5nKCkgT1ZF
UlJJREU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGll
bnRFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0
L0VkaXRvckNsaWVudEVmbC5jcHAJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9XZWJLaXQv
ZWZsL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNiw3ICsxMDYsNyBAQCBib29sIEVkaXRvckNsaWVudEVmbDo6c2hvdWxkQ2hhbmdlU2VsZWN0
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRWRpdG9yQ2xpZW50RWZsOjpzaG91bGRBcHBs
eVN0eWxlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBSYW5nZSogcmFuZ2UpCitib29sIEVkaXRv
ckNsaWVudEVmbDo6c2hvdWxkQXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBSYW5n
ZSogcmFuZ2UpCiB7CiAgICAgRXdrX1Nob3VsZF9BcHBseV9TdHlsZV9FdmVudCBzaG91bGRBcHBs
eVN0eWxlRXZlbnQgPSB7IHN0eWxlLCByYW5nZSB9OwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2NhbGwobV92aWV3LCAiZWRpdG9yY2xpZW50LHN0eWxlLGFwcGx5IiwgJnNob3VsZEFw
cGx5U3R5bGVFdmVudCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9F
ZGl0b3JDbGllbnRFZmwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3Jl
U3VwcG9ydC9FZGl0b3JDbGllbnRFZmwuaAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dl
YktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50RWZsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDcgKzYxLDcgQEAgc3RydWN0IEV3a19TaG91bGRfQ2hhbmdlX1NlbGVjdGVkX1Jhbmdl
XwogfTsKIAogc3RydWN0IEV3a19TaG91bGRfQXBwbHlfU3R5bGVfRXZlbnQgewotICAgIFdlYkNv
cmU6OlN0eWxlUHJvcGVydHlTZXQqIHN0eWxlOworICAgIFdlYkNvcmU6OlN0eWxlUHJvcGVydGll
cyogc3R5bGU7CiAgICAgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlOwogfTsKIApAQCAtOTYsNyArOTYs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3Ry
aW5nJiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pOwogICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFJhbmdlKiBmcm9tUmFuZ2UsIFJhbmdlKiB0b1JhbmdlLCBF
QWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpOwogCi0gICAgdmlydHVhbCBib29sIHNob3Vs
ZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0eVNldCosIFJhbmdlKik7CisgICAgdmlydHVhbCBib29s
IHNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiwgUmFuZ2UqKTsKIAogICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShSYW5nZSosIFJhbmdlKik7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xp
ZW50R3RrLmNwcAkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgs
NyBAQAogI2luY2x1ZGUgIlBhc3RlYm9hcmRIZWxwZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlN0eWxlUHJv
cGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlICJVbmRv
U3RlcC5oIgogI2luY2x1ZGUgIldlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb25Qcml2YXRlLmgi
CiAjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEVsZW1lbnRQcml2YXRlLmgiCkBAIC0xNzcsMTAgKzE3
NywxMCBAQCBib29sIEVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSCiAgICAgcmV0
dXJuIGFjY2VwdDsKIH0KIAotYm9vbCBFZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoV2Vi
Q29yZTo6U3R5bGVQcm9wZXJ0eVNldCogc2V0LCBXZWJDb3JlOjpSYW5nZSogcmFuZ2UpCitib29s
IEVkaXRvckNsaWVudDo6c2hvdWxkQXBwbHlTdHlsZShXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXMq
IHNldCwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlKQogewogICAgIGdib29sZWFuIGFjY2VwdCA9IFRS
VUU7Ci0gICAgUmVmPE11dGFibGVTdHlsZVByb3BlcnR5U2V0PiBtdXRhYmxlU3R5bGUoc2V0LT5t
dXRhYmxlQ29weSgpKTsKKyAgICBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gbXV0YWJsZVN0
eWxlKHNldC0+bXV0YWJsZUNvcHkoKSk7CiAgICAgR1JlZlB0cjxXZWJLaXRET01DU1NTdHlsZURl
Y2xhcmF0aW9uPiBraXREZWNsYXJhdGlvbihraXQobXV0YWJsZVN0eWxlLT5lbnN1cmVDU1NTdHls
ZURlY2xhcmF0aW9uKCkpKTsKICAgICBHUmVmUHRyPFdlYktpdERPTVJhbmdlPiBraXRSYW5nZShh
ZG9wdEdSZWYoa2l0KHJhbmdlKSkpOwogICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYlZp
ZXcsICJzaG91bGQtYXBwbHktc3R5bGUiLCBraXREZWNsYXJhdGlvbi5nZXQoKSwga2l0UmFuZ2Uu
Z2V0KCksICZhY2NlcHQpOwpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RWRpdG9yQ2xpZW50R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmgJKHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5oCSh3b3JraW5nIGNvcHkp
CkBAIC04Nyw3ICs4Nyw3IEBAIGNsYXNzIEVkaXRvckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpF
ZGkKICAgICAgICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgV1RGOjpTdHJp
bmcmLCBXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbik7CiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYkNvcmU6OlJhbmdl
KiBmcm9tUmFuZ2UsIFdlYkNvcmU6OlJhbmdlKiB0b1JhbmdlLCBXZWJDb3JlOjpFQWZmaW5pdHks
IGJvb2wgc3RpbGxTZWxlY3RpbmcpOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBcHBs
eVN0eWxlKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQqLCBXZWJDb3JlOjpSYW5nZSopOworICAg
ICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShXZWJDb3JlOjpTdHlsZVByb3BlcnRp
ZXMqLCBXZWJDb3JlOjpSYW5nZSopOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRNb3Zl
UmFuZ2VBZnRlckRlbGV0ZShXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OlJhbmdlKik7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5oCShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgV1RGOjpTdHJp
bmcmLCBXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViQ29yZTo6
UmFuZ2UqIGZyb21SYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHRvUmFuZ2UsIFdlYkNvcmU6OkVBZmZp
bml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkQXBwbHlTdHlsZShXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0KiwgV2ViQ29yZTo6UmFu
Z2UqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShXZWJDb3Jl
OjpTdHlsZVByb3BlcnRpZXMqLCBXZWJDb3JlOjpSYW5nZSopIE9WRVJSSURFOwogICAgIAogICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShXZWJDb3JlOjpSYW5nZSos
IFdlYkNvcmU6OlJhbmdlKiByYW5nZVRvQmVSZXBsYWNlZCkgT1ZFUlJJREU7CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
bW0JKHJldmlzaW9uIDE1OTg0MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQAogI2lt
cG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUv
U2V0dGluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvU3BlbGxDaGVja2VyLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL1N0eWxlUHJvcGVydHlTZXQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU3R5bGVQcm9wZXJ0
aWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1VuZG9TdGVwLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Vz
ZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpD
RXh0cmFzLmg+CkBAIC0yNDQsOSArMjQ0LDkgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OmlzU2Vs
ZWN0VHJhaWxpbmdXaAogICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygpLnNlbGVjdFRyYWlsaW5n
V2hpdGVzcGFjZUVuYWJsZWQoKTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEFw
cGx5U3R5bGUoU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUsIFJhbmdlKiByYW5nZSkKK2Jvb2wgV2Vi
RWRpdG9yQ2xpZW50OjpzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIFJh
bmdlKiByYW5nZSkKIHsKLSAgICBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IG11dGFibGVT
dHlsZShzdHlsZS0+aXNNdXRhYmxlKCkgPyBzdGF0aWNfY2FzdDxNdXRhYmxlU3R5bGVQcm9wZXJ0
eVNldCY+KCpzdHlsZSkgOiBzdHlsZS0+bXV0YWJsZUNvcHkoKSk7CisgICAgUmVmPE11dGFibGVT
dHlsZVByb3BlcnRpZXM+IG11dGFibGVTdHlsZShzdHlsZS0+aXNNdXRhYmxlKCkgPyBzdGF0aWNf
Y2FzdDxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJj4oKnN0eWxlKSA6IHN0eWxlLT5tdXRhYmxlQ29w
eSgpKTsKICAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0g
d2ViVmlldzptX3dlYlZpZXcKICAgICAgICAgc2hvdWxkQXBwbHlTdHlsZTpraXQobXV0YWJsZVN0
eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkpIHRvRWxlbWVudHNJbkRPTVJhbmdlOmtp
dChyYW5nZSldOwogfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShy
ZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1Njcmlw
dFZhbHVlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1NtYXJ0UmVwbGFjZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9TdHlsZVByb3BlcnR5U2V0
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1N0eWxlUHJvcGVydGllcy5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9TdWJmcmFtZUxvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KICNp
bXBvcnQgPFdlYkNvcmUvVGhyZWFkQ2hlY2suaD4KQEAgLTc4MSw3ICs3ODEsNyBAQCAtIChET01D
U1NTdHlsZURlY2xhcmF0aW9uICopX3R5cGluZ1N0eWxlCiB7CiAgICAgaWYgKCFfcHJpdmF0ZS0+
Y29yZUZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQ
cm9wZXJ0eVNldD4gdHlwaW5nU3R5bGUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24o
KS5jb3B5VHlwaW5nU3R5bGUoKTsKKyAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4g
dHlwaW5nU3R5bGUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5jb3B5VHlwaW5n
U3R5bGUoKTsKICAgICBpZiAoIXR5cGluZ1N0eWxlKQogICAgICAgICByZXR1cm4gbmlsOwogICAg
IHJldHVybiBraXQodHlwaW5nU3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSk7CkBA
IC03OTIsNyArNzkyLDcgQEAgLSAodm9pZClfc2V0VHlwaW5nU3R5bGU6KERPTUNTU1N0eWxlRGVj
bAogICAgIGlmICghX3ByaXZhdGUtPmNvcmVGcmFtZSB8fCAhc3R5bGUpCiAgICAgICAgIHJldHVy
bjsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gY3JlYXRlIGEgY29weSBoZXJl
LgotICAgIFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldD4gcHJvcGVydGllcyhjb3JlKHN0eWxl
KS0+Y29weVByb3BlcnRpZXMoKSk7CisgICAgUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IHBy
b3BlcnRpZXMoY29yZShzdHlsZSktPmNvcHlQcm9wZXJ0aWVzKCkpOwogICAgIF9wcml2YXRlLT5j
b3JlRnJhbWUtPmVkaXRvcigpLmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZSgmcHJvcGVydGllcy5n
ZXQoKSwgdW5kb0FjdGlvbik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJIVE1MVmlldy5tbQkocmV2aXNpb24gMTU5ODQxKQorKysgU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJIVE1MVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCw3IEBACiAj
aW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlRm9udERhdGEuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvU3R5bGVQcm9wZXJ0eVNldC5oPgorI2ltcG9ydCA8V2ViQ29yZS9T
dHlsZVByb3BlcnRpZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dC5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29y
ZU9iakNFeHRyYXMuaD4KQEAgLTQzNjksOCArNDM2OSw4IEBAIC0gKERPTUNTU1N0eWxlRGVjbGFy
YXRpb24gKilfc3R5bGVGcm9tRm8KIC0gKHZvaWQpX2FwcGx5U3R5bGVUb1NlbGVjdGlvbjooRE9N
Q1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIHdpdGhVbmRvQWN0aW9uOihFZGl0QWN0aW9uKXVu
ZG9BY3Rpb24KIHsKICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSkpIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIG1ha2UgYSBjb3B5
IGhlcmUuIFdlIHdhbnQgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIHRvIHdvcmsgZGlyZWN0bHkg
d2l0aCBTdHlsZVByb3BlcnR5U2V0IGV2ZW50dWFsbHkuCi0gICAgICAgIFJlZjxNdXRhYmxlU3R5
bGVQcm9wZXJ0eVNldD4gcHJvcGVydGllcyhjb3JlKHN0eWxlKS0+Y29weVByb3BlcnRpZXMoKSk7
CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBtYWtlIGEgY29weSBoZXJl
LiBXZSB3YW50IGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiB0byB3b3JrIGRpcmVjdGx5IHdpdGgg
U3R5bGVQcm9wZXJ0aWVzIGV2ZW50dWFsbHkuCisgICAgICAgIFJlZjxNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzPiBwcm9wZXJ0aWVzKGNvcmUoc3R5bGUpLT5jb3B5UHJvcGVydGllcygpKTsKICAgICAg
ICAgY29yZUZyYW1lLT5lZGl0b3IoKS5hcHBseVN0eWxlVG9TZWxlY3Rpb24oJnByb3BlcnRpZXMu
Z2V0KCksIHVuZG9BY3Rpb24pOwogICAgIH0KIH0KQEAgLTQ2NzMsNyArNDY3Myw3IEBAIC0gKHZv
aWQpX2NoYW5nZUNTU0NvbG9yVXNpbmdTZWxlY3RvcjooU0UKICAgICBpZiAoW1t3ZWJWaWV3IF9l
ZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBzaG91bGRBcHBseVN0eWxl
OnN0eWxlIHRvRWxlbWVudHNJbkRPTVJhbmdlOnJhbmdlXSkgewogICAgICAgICBpZiAoRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKICAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBtYWtlIGEgY29weSBoZXJlLgotICAgICAgICAgICAgUmVm
PE11dGFibGVTdHlsZVByb3BlcnR5U2V0PiBwcm9wZXJ0aWVzKGNvcmUoc3R5bGUpLT5jb3B5UHJv
cGVydGllcygpKTsKKyAgICAgICAgICAgIFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBwcm9w
ZXJ0aWVzKGNvcmUoc3R5bGUpLT5jb3B5UHJvcGVydGllcygpKTsKICAgICAgICAgICAgIGNvcmVG
cmFtZS0+ZWRpdG9yKCkuYXBwbHlTdHlsZSgmcHJvcGVydGllcy5nZXQoKSwgW3NlbGYgX3VuZG9B
Y3Rpb25Gcm9tQ29sb3JQYW5lbFdpdGhTZWxlY3RvcjpzZWxlY3Rvcl0pOwogICAgICAgICB9CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMTU5
ODQxKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzMsNyArMTczLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4u
aD4KICNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlQb2xpY3kuaD4KICNpbXBvcnQgPFdlYkNvcmUv
U2V0dGluZ3MuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU3R5bGVQcm9wZXJ0eVNldC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9TdHlsZVByb3BlcnRpZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvU3lzdGVtVmVy
c2lvbk1hYy5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0UmVzb3VyY2VEZWNvZGVyLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1RocmVhZENoZWNrLmg+CkBAIC01OTU1LDcgKzU5NTUsNyBAQCAtICh2b2lk
KWFwcGx5U3R5bGU6KERPTUNTU1N0eWxlRGVjbGFyYXRpCiAgICAgV2ViRnJhbWUgKndlYkZyYW1l
ID0gW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdOwogICAgIGlmIChGcmFtZSogY29yZUZyYW1l
ID0gY29yZSh3ZWJGcmFtZSkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZl
IHRvIG1ha2UgYSBjb3B5IGhlcmUuCi0gICAgICAgIFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0eVNl
dD4gcHJvcGVydGllcyhjb3JlKHN0eWxlKS0+Y29weVByb3BlcnRpZXMoKSk7CisgICAgICAgIFJl
ZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBwcm9wZXJ0aWVzKGNvcmUoc3R5bGUpLT5jb3B5UHJv
cGVydGllcygpKTsKICAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS5hcHBseVN0eWxlKCZwcm9w
ZXJ0aWVzLmdldCgpKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHJldmlzaW9uIDE1OTg0MSkK
KysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4MywxMyArMjgzLDEzIEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50
OjpzaG91bGRJbnNlcnRUZXh0KGMKIC8vYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZENoYW5n
ZVNlbGVjdGVkUmFuZ2UoUmFuZ2UgKmN1cnJlbnRSYW5nZSwgUmFuZ2UgKnRvUHJvcG9zZWRSYW5n
ZSwgU2VsZWN0aW9uQWZmaW5pdHkgc2VsZWN0aW9uQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3Rp
bmcpCiAvL3sgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiAKLWJvb2wgV2ViRWRp
dG9yQ2xpZW50OjpzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydHlTZXQqIC8qc3R5bGUqLywg
UmFuZ2UqIC8qdG9FbGVtZW50c0luRE9NUmFuZ2UqLykKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50Ojpz
aG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyogLypzdHlsZSovLCBSYW5nZSogLyp0b0Vs
ZW1lbnRzSW5ET01SYW5nZSovKQogeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gdHJ1ZTsgfQog
CiBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoUmFuZ2Uq
IC8qcmFuZ2UqLywgUmFuZ2UqIC8qcmFuZ2VUb0JlUmVwbGFjZWQqLykKIHsgbm90SW1wbGVtZW50
ZWQoKTsgcmV0dXJuIHRydWU7IH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZENoYW5n
ZVR5cGluZ1N0eWxlKFN0eWxlUHJvcGVydHlTZXQqIC8qY3VycmVudFN0eWxlKi8sIFN0eWxlUHJv
cGVydHlTZXQqIC8qdG9Qcm9wb3NlZFN0eWxlKi8pCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hv
dWxkQ2hhbmdlVHlwaW5nU3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiAvKmN1cnJlbnRTdHlsZSovLCBT
dHlsZVByb3BlcnRpZXMqIC8qdG9Qcm9wb3NlZFN0eWxlKi8pCiB7IG5vdEltcGxlbWVudGVkKCk7
IHJldHVybiBmYWxzZTsgfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6d2ViVmlld0RpZENoYW5n
ZVR5cGluZ1N0eWxlKFdlYk5vdGlmaWNhdGlvbiogLypub3RpZmljYXRpb24qLykKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5o
CShyZXZpc2lvbiAxNTk4NDEpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsOSArNjQsOSBAQCBwdWJsaWM6
CiAgICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShXZWJDb3JlOjpSYW5nZSopOwogCiAgICAgYm9v
bCBzaG91bGRJbnNlcnROb2RlKFdlYkNvcmU6Ok5vZGUqLCBXZWJDb3JlOjpSYW5nZSogcmVwbGFj
aW5nUmFuZ2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbik7Ci0gICAgYm9vbCBzaG91bGRB
cHBseVN0eWxlKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQqLCBXZWJDb3JlOjpSYW5nZSopOwor
ICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXMqLCBXZWJD
b3JlOjpSYW5nZSopOwogICAgIGJvb2wgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoV2ViQ29y
ZTo6UmFuZ2UqLCBXZWJDb3JlOjpSYW5nZSopOwotICAgIGJvb2wgc2hvdWxkQ2hhbmdlVHlwaW5n
U3R5bGUoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldCogY3VycmVudFN0eWxlLCBXZWJDb3JlOjpT
dHlsZVByb3BlcnR5U2V0KiB0b1Byb3Bvc2VkU3R5bGUpOworICAgIGJvb2wgc2hvdWxkQ2hhbmdl
VHlwaW5nU3R5bGUoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzKiBjdXJyZW50U3R5bGUsIFdlYkNv
cmU6OlN0eWxlUHJvcGVydGllcyogdG9Qcm9wb3NlZFN0eWxlKTsKIAogICAgIHZvaWQgd2ViVmll
d0RpZENoYW5nZVR5cGluZ1N0eWxlKFdlYk5vdGlmaWNhdGlvbiopOwogICAgIHZvaWQgd2ViVmll
d0RpZENoYW5nZVNlbGVjdGlvbihXZWJOb3RpZmljYXRpb24qKTsK
</data>
<flag name="review"
          id="241309"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="241310"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>