<?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>121466</bug_id>
          
          <creation_ts>2013-09-16 20:03:25 -0700</creation_ts>
          <short_desc>CTTE: InputType should store its HTMLInputElement back pointer as a reference</short_desc>
          <delta_ts>2013-09-16 23:32:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>kling</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>930031</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-16 20:03:25 -0700</bug_when>
    <thetext>CTTE: InputType should store its HTMLInputElement back pointer as a reference</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930032</commentid>
    <comment_count>1</comment_count>
      <attachid>211859</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-16 20:06:39 -0700</bug_when>
    <thetext>Created attachment 211859
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930034</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-16 20:08:40 -0700</bug_when>
    <thetext>Attachment 211859 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/accessibility/AccessibilitySlider.cpp&apos;, u&apos;Source/WebCore/html/BaseButtonInputType.cpp&apos;, u&apos;Source/WebCore/html/BaseButtonInputType.h&apos;, u&apos;Source/WebCore/html/BaseCheckableInputType.cpp&apos;, u&apos;Source/WebCore/html/BaseCheckableInputType.h&apos;, u&apos;Source/WebCore/html/BaseChooserOnlyDateAndTimeInputType.cpp&apos;, u&apos;Source/WebCore/html/BaseChooserOnlyDateAndTimeInputType.h&apos;, u&apos;Source/WebCore/html/BaseClickableWithKeyInputType.cpp&apos;, u&apos;Source/WebCore/html/BaseClickableWithKeyInputType.h&apos;, u&apos;Source/WebCore/html/BaseDateAndTimeInputType.cpp&apos;, u&apos;Source/WebCore/html/BaseDateAndTimeInputType.h&apos;, u&apos;Source/WebCore/html/BaseTextInputType.cpp&apos;, u&apos;Source/WebCore/html/BaseTextInputType.h&apos;, u&apos;Source/WebCore/html/ButtonInputType.cpp&apos;, u&apos;Source/WebCore/html/ButtonInputType.h&apos;, u&apos;Source/WebCore/html/CheckboxInputType.cpp&apos;, u&apos;Source/WebCore/html/CheckboxInputType.h&apos;, u&apos;Source/WebCore/html/ColorInputType.cpp&apos;, u&apos;Source/WebCore/html/ColorInputType.h&apos;, u&apos;Source/WebCore/html/DateInputType.cpp&apos;, u&apos;Source/WebCore/html/DateInputType.h&apos;, u&apos;Source/WebCore/html/DateTimeInputType.cpp&apos;, u&apos;Source/WebCore/html/DateTimeInputType.h&apos;, u&apos;Source/WebCore/html/DateTimeLocalInputType.cpp&apos;, u&apos;Source/WebCore/html/DateTimeLocalInputType.h&apos;, u&apos;Source/WebCore/html/EmailInputType.cpp&apos;, u&apos;Source/WebCore/html/EmailInputType.h&apos;, u&apos;Source/WebCore/html/FileInputType.cpp&apos;, u&apos;Source/WebCore/html/FileInputType.h&apos;, u&apos;Source/WebCore/html/HTMLInputElement.cpp&apos;, u&apos;Source/WebCore/html/HiddenInputType.cpp&apos;, u&apos;Source/WebCore/html/HiddenInputType.h&apos;, u&apos;Source/WebCore/html/ImageInputType.cpp&apos;, u&apos;Source/WebCore/html/ImageInputType.h&apos;, u&apos;Source/WebCore/html/InputType.cpp&apos;, u&apos;Source/WebCore/html/InputType.h&apos;, u&apos;Source/WebCore/html/MonthInputType.cpp&apos;, u&apos;Source/WebCore/html/MonthInputType.h&apos;, u&apos;Source/WebCore/html/NumberInputType.cpp&apos;, u&apos;Source/WebCore/html/NumberInputType.h&apos;, u&apos;Source/WebCore/html/PasswordInputType.cpp&apos;, u&apos;Source/WebCore/html/PasswordInputType.h&apos;, u&apos;Source/WebCore/html/RadioInputType.cpp&apos;, u&apos;Source/WebCore/html/RadioInputType.h&apos;, u&apos;Source/WebCore/html/RangeInputType.cpp&apos;, u&apos;Source/WebCore/html/RangeInputType.h&apos;, u&apos;Source/WebCore/html/ResetInputType.cpp&apos;, u&apos;Source/WebCore/html/ResetInputType.h&apos;, u&apos;Source/WebCore/html/SearchInputType.cpp&apos;, u&apos;Source/WebCore/html/SearchInputType.h&apos;, u&apos;Source/WebCore/html/SubmitInputType.cpp&apos;, u&apos;Source/WebCore/html/SubmitInputType.h&apos;, u&apos;Source/WebCore/html/TelephoneInputType.cpp&apos;, u&apos;Source/WebCore/html/TelephoneInputType.h&apos;, u&apos;Source/WebCore/html/TextFieldInputType.cpp&apos;, u&apos;Source/WebCore/html/TextFieldInputType.h&apos;, u&apos;Source/WebCore/html/TextInputType.cpp&apos;, u&apos;Source/WebCore/html/TextInputType.h&apos;, u&apos;Source/WebCore/html/TimeInputType.cpp&apos;, u&apos;Source/WebCore/html/TimeInputType.h&apos;, u&apos;Source/WebCore/html/URLInputType.cpp&apos;, u&apos;Source/WebCore/html/URLInputType.h&apos;, u&apos;Source/WebCore/html/WeekInputType.cpp&apos;, u&apos;Source/WebCore/html/WeekInputType.h&apos;, u&apos;Source/WebCore/html/shadow/SliderThumbElement.cpp&apos;, u&apos;Source/WebCore/html/shadow/SliderThumbElement.h&apos;, u&apos;Source/WebCore/rendering/RenderSlider.cpp&apos;]&quot; exit_code: 1
Source/WebCore/html/InputType.cpp:142:  Local variables should never be PassOwnPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Total errors found: 1 in 68 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>930047</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-16 21:20:59 -0700</bug_when>
    <thetext>Committed r155928: &lt;http://trac.webkit.org/changeset/155928&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930072</commentid>
    <comment_count>4</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-09-16 23:32:40 -0700</bug_when>
    <thetext>*** Bug 121401 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211859</attachid>
            <date>2013-09-16 20:06:39 -0700</date>
            <delta_ts>2013-09-16 21:07:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121466-20130916200638.patch</filename>
            <type>text/plain</type>
            <size>136554</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NTkyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEzLTA5LTE2ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogSW5wdXRUeXBlIHNob3VsZCBz
dG9yZSBpdHMgSFRNTElucHV0RWxlbWVudCBiYWNrIHBvaW50ZXIgYXMgYSByZWZlcmVuY2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTQ2NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gQ29udmVydHMg
SW5wdXRUeXBlOjpjcmVhdGUoKSBhbmQgSW5wdXRUeXBlOjpjcmVhdGVUZXh0KCkgdG8gdGFrZSBh
IEhUTUxJbnB1dEVsZW1lbnQmCisgICAgICAgICAgKGFzIHdlbGwgYXMgYWxsIHRoZSBzdWJjbGFz
c2VzKS4KKyAgICAgICAgLSBDaGFuZ2UgSW5wdXRUeXBlOjplbGVtZW50KCkgdG8gcmV0dXJuIGFu
IEhUTUxJbnB1dEVsZW1lbnQmIGFuZCB1cGRhdGUgYWxsIHRoZSBjYWxsZXJzLgorCiAyMDEzLTA5
LTE2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtl
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQgdXNlIGFuIGVudW0gZm9yIHRoZSByZWNvcmQgdHlwZSBp
bnN0ZWFkIG9mIGEgc3RyaW5nLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE1
NTkwNykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTIxLDcgKzI1MjEsNiBAQCBfX1pOSzdXZWJDb3JlMTJJY29uRGF0YWJhc2U5aXNFbmFibGVk
RXYKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKIF9fWk43V2ViQ29yZTVDb2xvckMxRVA3
Q0dDb2xvcgogX19aTjdXZWJDb3JlNUNvbG9yQzFFUktOM1dURjZTdHJpbmdFCi1fX1pON1dlYkNv
cmUxNENvbG9ySW5wdXRUeXBlNmNyZWF0ZUVQTlNfMTZIVE1MSW5wdXRFbGVtZW50RQogX19aTjdX
ZWJDb3JlMTZIVE1MSW5wdXRFbGVtZW50MjVzZWxlY3RDb2xvckluQ29sb3JDaG9vc2VyRVJLTlNf
NUNvbG9yRQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVNsaWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcAkocmV2aXNpb24gMTU1OTA3KQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY0LDcgKzE2NCw3IEBAIExheW91dFJlY3QgQWNjZXNzaWJpbGl0eVNsaWRl
clRodW1iOjplbGUKICAgICBSZW5kZXJPYmplY3QqIHNsaWRlclJlbmRlcmVyID0gbV9wYXJlbnQt
PnJlbmRlcmVyKCk7CiAgICAgaWYgKCFzbGlkZXJSZW5kZXJlciB8fCAhc2xpZGVyUmVuZGVyZXIt
PmlzU2xpZGVyKCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7Ci0gICAgcmV0dXJuIHNs
aWRlclRodW1iRWxlbWVudE9mKHNsaWRlclJlbmRlcmVyLT5ub2RlKCkpLT5ib3VuZGluZ0JveCgp
OworICAgIHJldHVybiBzbGlkZXJUaHVtYkVsZW1lbnRPZigqdG9IVE1MSW5wdXRFbGVtZW50KHNs
aWRlclJlbmRlcmVyLT5ub2RlKCkpKS0+Ym91bmRpbmdCb3goKTsKIH0KIAogYm9vbCBBY2Nlc3Np
YmlsaXR5U2xpZGVyVGh1bWI6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUJ1dHRvbklucHV0VHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQnV0dG9uSW5wdXRUeXBlLmNwcAkocmV2
aXNpb24gMTU1OTA4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQnV0dG9uSW5wdXRUeXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsOCArNTQsNyBAQCBib29sIEJhc2VCdXR0b25JbnB1
dFR5cGU6OmFwcGVuZEZvcm1EYXRhCiAKIFJlbmRlck9iamVjdCogQmFzZUJ1dHRvbklucHV0VHlw
ZTo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEmIGFyZW5hLCBSZW5kZXJTdHlsZSYpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7IC8vIEZJWE1FOiBlbGVtZW50KCkgc2hvdWxkIHJl
dHVybiBhIHJlZmVyZW5jZS4KLSAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyQnV0dG9uKCpl
bGVtZW50KCkpOworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJCdXR0b24oZWxlbWVudCgp
KTsKIH0KIAogYm9vbCBCYXNlQnV0dG9uSW5wdXRUeXBlOjpzdG9yZXNWYWx1ZVNlcGFyYXRlRnJv
bUF0dHJpYnV0ZSgpCkBAIC02NSw3ICs2NCw3IEBAIGJvb2wgQmFzZUJ1dHRvbklucHV0VHlwZTo6
c3RvcmVzVmFsdWVTZXAKIAogdm9pZCBCYXNlQnV0dG9uSW5wdXRUeXBlOjpzZXRWYWx1ZShjb25z
dCBTdHJpbmcmIHNhbml0aXplZFZhbHVlLCBib29sLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yKQog
ewotICAgIGVsZW1lbnQoKS0+c2V0QXR0cmlidXRlKHZhbHVlQXR0ciwgc2FuaXRpemVkVmFsdWUp
OworICAgIGVsZW1lbnQoKS5zZXRBdHRyaWJ1dGUodmFsdWVBdHRyLCBzYW5pdGl6ZWRWYWx1ZSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
QmFzZUJ1dHRvbklucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
QmFzZUJ1dHRvbklucHV0VHlwZS5oCShyZXZpc2lvbiAxNTU5MDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBCYXNlIG9mIGJ1dHRvbiwgZmlsZSwgaW1hZ2Us
IHJlc2V0LCBhbmQgc3VibWl0IHR5cGVzLgogY2xhc3MgQmFzZUJ1dHRvbklucHV0VHlwZSA6IHB1
YmxpYyBCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZSB7CiBwcm90ZWN0ZWQ6Ci0gICAgZXhw
bGljaXQgQmFzZUJ1dHRvbklucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KSA6IEJh
c2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlKGVsZW1lbnQpIHsgfQorICAgIGV4cGxpY2l0IEJh
c2VCdXR0b25JbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkgOiBCYXNlQ2xpY2th
YmxlV2l0aEtleUlucHV0VHlwZShlbGVtZW50KSB7IH0KIAogcHJpdmF0ZToKICAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCkgY29uc3QgT1ZFUlJJ
REU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VDaGVja2FibGVJbnB1dFR5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNoZWNrYWJsZUlucHV0VHlw
ZS5jcHAJKHJldmlzaW9uIDE1NTkwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNoZWNr
YWJsZUlucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE5ICs0NSwxOSBAQCB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBGb3JtQ29udHJvbFN0YXRlIEJhc2VDaGVja2FibGVJ
bnB1dFR5cGU6OnNhdmVGb3JtQ29udHJvbFN0YXRlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRm9y
bUNvbnRyb2xTdGF0ZShlbGVtZW50KCktPmNoZWNrZWQoKSA/IEFTQ0lJTGl0ZXJhbCgib24iKSA6
IEFTQ0lJTGl0ZXJhbCgib2ZmIikpOworICAgIHJldHVybiBGb3JtQ29udHJvbFN0YXRlKGVsZW1l
bnQoKS5jaGVja2VkKCkgPyBBU0NJSUxpdGVyYWwoIm9uIikgOiBBU0NJSUxpdGVyYWwoIm9mZiIp
KTsKIH0KIAogdm9pZCBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjpyZXN0b3JlRm9ybUNvbnRyb2xT
dGF0ZShjb25zdCBGb3JtQ29udHJvbFN0YXRlJiBzdGF0ZSkKIHsKLSAgICBlbGVtZW50KCktPnNl
dENoZWNrZWQoc3RhdGVbMF0gPT0gIm9uIik7CisgICAgZWxlbWVudCgpLnNldENoZWNrZWQoc3Rh
dGVbMF0gPT0gIm9uIik7CiB9CiAKIGJvb2wgQmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6YXBwZW5k
Rm9ybURhdGEoRm9ybURhdGFMaXN0JiBlbmNvZGluZywgYm9vbCkgY29uc3QKIHsKLSAgICBpZiAo
IWVsZW1lbnQoKS0+Y2hlY2tlZCgpKQorICAgIGlmICghZWxlbWVudCgpLmNoZWNrZWQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGVuY29kaW5nLmFwcGVuZERhdGEoZWxlbWVudCgpLT5u
YW1lKCksIGVsZW1lbnQoKS0+dmFsdWUoKSk7CisgICAgZW5jb2RpbmcuYXBwZW5kRGF0YShlbGVt
ZW50KCkubmFtZSgpLCBlbGVtZW50KCkudmFsdWUoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjpoYW5kbGVLZXlk
bwogewogICAgIGNvbnN0IFN0cmluZyYga2V5ID0gZXZlbnQtPmtleUlkZW50aWZpZXIoKTsKICAg
ICBpZiAoa2V5ID09ICJVKzAwMjAiKSB7Ci0gICAgICAgIGVsZW1lbnQoKS0+c2V0QWN0aXZlKHRy
dWUsIHRydWUpOworICAgICAgICBlbGVtZW50KCkuc2V0QWN0aXZlKHRydWUsIHRydWUpOwogICAg
ICAgICAvLyBObyBzZXREZWZhdWx0SGFuZGxlZCgpLCBiZWNhdXNlIElFIGRpc3BhdGNoZXMgYSBr
ZXlwcmVzcyBpbiB0aGlzIGNhc2UKICAgICAgICAgLy8gYW5kIHRoZSBjYWxsZXIgd2lsbCBvbmx5
IGRpc3BhdGNoIGEga2V5cHJlc3MgaWYgd2UgZG9uJ3QgY2FsbCBzZXREZWZhdWx0SGFuZGxlZCgp
LgogICAgIH0KQEAgLTg5LDcgKzg5LDcgQEAgdm9pZCBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjph
Y2Nlc3NLZXlBYwogewogICAgIElucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9uKHNlbmRNb3VzZUV2
ZW50cyk7CiAKLSAgICBlbGVtZW50KCktPmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soMCwgc2VuZE1v
dXNlRXZlbnRzID8gU2VuZE1vdXNlVXBEb3duRXZlbnRzIDogU2VuZE5vRXZlbnRzKTsKKyAgICBl
bGVtZW50KCkuZGlzcGF0Y2hTaW11bGF0ZWRDbGljaygwLCBzZW5kTW91c2VFdmVudHMgPyBTZW5k
TW91c2VVcERvd25FdmVudHMgOiBTZW5kTm9FdmVudHMpOwogfQogCiBTdHJpbmcgQmFzZUNoZWNr
YWJsZUlucHV0VHlwZTo6ZmFsbGJhY2tWYWx1ZSgpIGNvbnN0CkBAIC0xMDQsNyArMTA0LDcgQEAg
Ym9vbCBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjpzdG9yZXNWYWx1ZQogCiB2b2lkIEJhc2VDaGVj
a2FibGVJbnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgc2FuaXRpemVkVmFsdWUsIGJv
b2wsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IpCiB7Ci0gICAgZWxlbWVudCgpLT5zZXRBdHRyaWJ1
dGUodmFsdWVBdHRyLCBzYW5pdGl6ZWRWYWx1ZSk7CisgICAgZWxlbWVudCgpLnNldEF0dHJpYnV0
ZSh2YWx1ZUF0dHIsIHNhbml0aXplZFZhbHVlKTsKIH0KIAogYm9vbCBCYXNlQ2hlY2thYmxlSW5w
dXRUeXBlOjppc0NoZWNrYWJsZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VDaGVj
a2FibGVJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VD
aGVja2FibGVJbnB1dFR5cGUuaAkocmV2aXNpb24gMTU1OTA3KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9CYXNlQ2hlY2thYmxlSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gQmFzZSBvZiBjaGVja2JveCBhbmQgcmFkaW8g
dHlwZXMuCiBjbGFzcyBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlIDogcHVibGljIElucHV0VHlwZSB7
CiBwcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgQmFzZUNoZWNrYWJsZUlucHV0VHlwZShIVE1MSW5w
dXRFbGVtZW50KiBlbGVtZW50KSA6IElucHV0VHlwZShlbGVtZW50KSB7IH0KKyAgICBleHBsaWNp
dCBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpIDogSW5w
dXRUeXBlKGVsZW1lbnQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXlkb3duRXZlbnQo
S2V5Ym9hcmRFdmVudCopOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9C
YXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9CYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAJ
KHJldmlzaW9uIDE1NTkwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNob29zZXJPbmx5
RGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywzMiArNDMsMzIg
QEAgQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGU6On5CYQogCiB2b2lkIEJhc2VD
aG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlOjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2
ZW50KikKIHsKLSAgICBpZiAoZWxlbWVudCgpLT5pc0Rpc2FibGVkT3JSZWFkT25seSgpIHx8ICFl
bGVtZW50KCktPnJlbmRlcmVyKCkgfHwgIVNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSgpKQorICAgIGlmIChlbGVtZW50KCkuaXNEaXNhYmxlZE9yUmVhZE9ubHkoKSB8fCAh
ZWxlbWVudCgpLnJlbmRlcmVyKCkgfHwgIVNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9kYXRlVGltZUNob29zZXIp
CiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIWVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5wYWdlKCkp
CisgICAgaWYgKCFlbGVtZW50KCkuZG9jdW1lbnQoKS5wYWdlKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBEYXRlVGltZUNob29zZXJQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0gICAgaWYgKCFlbGVt
ZW50KCktPnNldHVwRGF0ZVRpbWVDaG9vc2VyUGFyYW1ldGVycyhwYXJhbWV0ZXJzKSkKKyAgICBp
ZiAoIWVsZW1lbnQoKS5zZXR1cERhdGVUaW1lQ2hvb3NlclBhcmFtZXRlcnMocGFyYW1ldGVycykp
CiAgICAgICAgIHJldHVybjsKLSAgICBtX2RhdGVUaW1lQ2hvb3NlciA9IGVsZW1lbnQoKS0+ZG9j
dW1lbnQoKS5wYWdlKCktPmNocm9tZSgpLm9wZW5EYXRlVGltZUNob29zZXIodGhpcywgcGFyYW1l
dGVycyk7CisgICAgbV9kYXRlVGltZUNob29zZXIgPSBlbGVtZW50KCkuZG9jdW1lbnQoKS5wYWdl
KCktPmNocm9tZSgpLm9wZW5EYXRlVGltZUNob29zZXIodGhpcywgcGFyYW1ldGVycyk7CiB9CiAK
IHZvaWQgQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1
YnRyZWUoKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCB2YWx1ZUNv
bnRhaW5lclBzZXVkbywgKCItd2Via2l0LWRhdGUtYW5kLXRpbWUtdmFsdWUiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAKLSAgICBSZWZQdHI8SFRNTERpdkVsZW1lbnQ+
IHZhbHVlQ29udGFpbmVyID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShlbGVtZW50KCktPmRvY3Vt
ZW50KCkpOworICAgIFJlZlB0cjxIVE1MRGl2RWxlbWVudD4gdmFsdWVDb250YWluZXIgPSBIVE1M
RGl2RWxlbWVudDo6Y3JlYXRlKGVsZW1lbnQoKS5kb2N1bWVudCgpKTsKICAgICB2YWx1ZUNvbnRh
aW5lci0+c2V0UHNldWRvKHZhbHVlQ29udGFpbmVyUHNldWRvKTsKLSAgICBlbGVtZW50KCktPnVz
ZXJBZ2VudFNoYWRvd1Jvb3QoKS0+YXBwZW5kQ2hpbGQodmFsdWVDb250YWluZXIuZ2V0KCkpOwor
ICAgIGVsZW1lbnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCktPmFwcGVuZENoaWxkKHZhbHVlQ29u
dGFpbmVyLmdldCgpKTsKICAgICB1cGRhdGVBcHBlYXJhbmNlKCk7CiB9CiAKIHZvaWQgQmFzZUNo
b29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnVwZGF0ZUFwcGVhcmFuY2UoKQogewotICAg
IE5vZGUqIG5vZGUgPSBlbGVtZW50KCktPnVzZXJBZ2VudFNoYWRvd1Jvb3QoKS0+Zmlyc3RDaGls
ZCgpOworICAgIE5vZGUqIG5vZGUgPSBlbGVtZW50KCkudXNlckFnZW50U2hhZG93Um9vdCgpLT5m
aXJzdENoaWxkKCk7CiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0hUTUxFbGVtZW50KCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBTdHJpbmcgZGlzcGxheVZhbHVlID0gdmlzaWJsZVZhbHVlKCk7
CkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5
cGUKIAogdm9pZCBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZTo6ZGlkQ2hvb3Nl
VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBlbGVtZW50KCktPnNldFZhbHVlKHZh
bHVlLCBEaXNwYXRjaElucHV0QW5kQ2hhbmdlRXZlbnQpOworICAgIGVsZW1lbnQoKS5zZXRWYWx1
ZSh2YWx1ZSwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsKIH0KIAogdm9pZCBCYXNlQ2hv
b3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZTo6ZGlkRW5kQ2hvb3NlcigpCkBAIC0xMzAsNyAr
MTMwLDcgQEAgdm9pZCBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZQogCiBib29s
IEJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlOjppc01vdXNlRm9jdXNhYmxlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5pc1RleHRGb3JtQ29udHJvbEZvY3VzYWJs
ZSgpOworICAgIHJldHVybiBlbGVtZW50KCkuaXNUZXh0Rm9ybUNvbnRyb2xGb2N1c2FibGUoKTsK
IH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQ2hvb3Nlck9ubHlEYXRlQW5k
VGltZUlucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNo
b29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuaAkocmV2aXNpb24gMTU1OTA3KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9CYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUgOiBwdWJsaWMgQmFzZURhdGVB
bmRUaW1lSW5wdXRUeXBlLCBwdWJsaWMgRGF0ZVRpbWVDaG9vc2VyQ2xpZW50IHsKIHByb3RlY3Rl
ZDoKLSAgICBleHBsaWNpdCBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZShIVE1M
SW5wdXRFbGVtZW50KiBlbGVtZW50KSA6IEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZShlbGVtZW50
KSB7IH0KKyAgICBleHBsaWNpdCBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZShI
VE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KSA6IEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZShlbGVt
ZW50KSB7IH0KICAgICB2aXJ0dWFsIH5CYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlw
ZSgpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQ2xpY2thYmxl
V2l0aEtleUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9C
YXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZS5jcHAJKHJldmlzaW9uIDE1NTkwNykKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSwyMSArMzksMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi12b2lkIEJhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRU
eXBlOjpoYW5kbGVLZXlkb3duRXZlbnQoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCwgS2V5Ym9h
cmRFdmVudCogZXZlbnQpCit2b2lkIEJhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlOjpoYW5k
bGVLZXlkb3duRXZlbnQoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCwgS2V5Ym9hcmRFdmVudCog
ZXZlbnQpCiB7CiAgICAgY29uc3QgU3RyaW5nJiBrZXkgPSBldmVudC0+a2V5SWRlbnRpZmllcigp
OwogICAgIGlmIChrZXkgPT0gIlUrMDAyMCIpIHsKLSAgICAgICAgZWxlbWVudC0+c2V0QWN0aXZl
KHRydWUsIHRydWUpOworICAgICAgICBlbGVtZW50LnNldEFjdGl2ZSh0cnVlLCB0cnVlKTsKICAg
ICAgICAgLy8gTm8gc2V0RGVmYXVsdEhhbmRsZWQoKSwgYmVjYXVzZSBJRSBkaXNwYXRjaGVzIGEg
a2V5cHJlc3MgaW4gdGhpcyBjYXNlCiAgICAgICAgIC8vIGFuZCB0aGUgY2FsbGVyIHdpbGwgb25s
eSBkaXNwYXRjaCBhIGtleXByZXNzIGlmIHdlIGRvbid0IGNhbGwgc2V0RGVmYXVsdEhhbmRsZWQo
KS4KICAgICB9CiB9CiAKLXZvaWQgQmFzZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5cGU6OmhhbmRs
ZUtleXByZXNzRXZlbnQoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCwgS2V5Ym9hcmRFdmVudCog
ZXZlbnQpCit2b2lkIEJhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlOjpoYW5kbGVLZXlwcmVz
c0V2ZW50KEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQog
ewogICAgIGludCBjaGFyQ29kZSA9IGV2ZW50LT5jaGFyQ29kZSgpOwogICAgIGlmIChjaGFyQ29k
ZSA9PSAnXHInKSB7Ci0gICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soZXZl
bnQpOworICAgICAgICBlbGVtZW50LmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soZXZlbnQpOwogICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTczLDkgKzczLDkgQEAgdm9pZCBCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZTo6aGFu
ZAogfQogCiAvLyBGSVhNRTogQ291bGQgc2hhcmUgdGhpcyB3aXRoIEJhc2VDaGVja2FibGVJbnB1
dFR5cGUgYW5kIFJhbmdlSW5wdXRUeXBlIGlmIHdlIGhhZCBhIGNvbW1vbiBiYXNlIGNsYXNzLgot
dm9pZCBCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9uKEhUTUxJ
bnB1dEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgc2VuZE1vdXNlRXZlbnRzKQordm9pZCBCYXNlQ2xp
Y2thYmxlV2l0aEtleUlucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9uKEhUTUxJbnB1dEVsZW1lbnQm
IGVsZW1lbnQsIGJvb2wgc2VuZE1vdXNlRXZlbnRzKQogewotICAgIGVsZW1lbnQtPmRpc3BhdGNo
U2ltdWxhdGVkQ2xpY2soMCwgc2VuZE1vdXNlRXZlbnRzID8gU2VuZE1vdXNlVXBEb3duRXZlbnRz
IDogU2VuZE5vRXZlbnRzKTsKKyAgICBlbGVtZW50LmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soMCwg
c2VuZE1vdXNlRXZlbnRzID8gU2VuZE1vdXNlVXBEb3duRXZlbnRzIDogU2VuZE5vRXZlbnRzKTsK
IH0KIAogdm9pZCBCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2
ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9CYXNl
Q2xpY2thYmxlV2l0aEtleUlucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvQmFzZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5cGUuaAkocmV2aXNpb24gMTU1OTA3KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCwxMyArMzgsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8g
QmFzZSBvZiBpbnB1dCB0eXBlcyB0aGF0IGRpc3BhdGNoZXMgYSBzaW11bGF0ZWQgY2xpY2sgb24g
c3BhY2UvcmV0dXJuIGtleS4KIGNsYXNzIEJhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlIDog
cHVibGljIElucHV0VHlwZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgaGFuZGxlS2V5ZG93
bkV2ZW50KEhUTUxJbnB1dEVsZW1lbnQqLCBLZXlib2FyZEV2ZW50Kik7Ci0gICAgc3RhdGljIHZv
aWQgaGFuZGxlS2V5cHJlc3NFdmVudChIVE1MSW5wdXRFbGVtZW50KiwgS2V5Ym9hcmRFdmVudCop
OworICAgIHN0YXRpYyB2b2lkIGhhbmRsZUtleWRvd25FdmVudChIVE1MSW5wdXRFbGVtZW50Jiwg
S2V5Ym9hcmRFdmVudCopOworICAgIHN0YXRpYyB2b2lkIGhhbmRsZUtleXByZXNzRXZlbnQoSFRN
TElucHV0RWxlbWVudCYsIEtleWJvYXJkRXZlbnQqKTsKICAgICBzdGF0aWMgdm9pZCBoYW5kbGVL
ZXl1cEV2ZW50KElucHV0VHlwZSYsIEtleWJvYXJkRXZlbnQqKTsKLSAgICBzdGF0aWMgdm9pZCBh
Y2Nlc3NLZXlBY3Rpb24oSFRNTElucHV0RWxlbWVudCosIGJvb2wgc2VuZE1vdXNlRXZlbnRzKTsK
KyAgICBzdGF0aWMgdm9pZCBhY2Nlc3NLZXlBY3Rpb24oSFRNTElucHV0RWxlbWVudCYsIGJvb2wg
c2VuZE1vdXNlRXZlbnRzKTsKICAgICAKIHByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBCYXNlQ2xp
Y2thYmxlV2l0aEtleUlucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KSA6IElucHV0
VHlwZShlbGVtZW50KSB7IH0KKyAgICBleHBsaWNpdCBCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0
VHlwZShIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KSA6IElucHV0VHlwZShlbGVtZW50KSB7IH0K
IAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJk
RXZlbnQqKSBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRU
aW1lSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VE
YXRlQW5kVGltZUlucHV0VHlwZS5jcHAJKHJldmlzaW9uIDE1NTkwNykKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTcsMTggKzU3LDE4IEBAIGRvdWJsZSBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnZhbHVlQXMK
IAogdm9pZCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNldFZhbHVlQXNEYXRlKGRvdWJsZSB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0CiB7Ci0gICAgZWxlbWVudCgpLT5zZXRWYWx1ZShz
ZXJpYWxpemVXaXRoTWlsbGlzZWNvbmRzKHZhbHVlKSk7CisgICAgZWxlbWVudCgpLnNldFZhbHVl
KHNlcmlhbGl6ZVdpdGhNaWxsaXNlY29uZHModmFsdWUpKTsKIH0KIAogZG91YmxlIEJhc2VEYXRl
QW5kVGltZUlucHV0VHlwZTo6dmFsdWVBc0RvdWJsZSgpIGNvbnN0CiB7Ci0gICAgY29uc3QgRGVj
aW1hbCB2YWx1ZSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT52YWx1ZSgpLCBEZWNpbWFsOjpu
YW4oKSk7CisgICAgY29uc3QgRGVjaW1hbCB2YWx1ZSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgp
LnZhbHVlKCksIERlY2ltYWw6Om5hbigpKTsKICAgICByZXR1cm4gdmFsdWUuaXNGaW5pdGUoKSA/
IHZhbHVlLnRvRG91YmxlKCkgOiBEYXRlQ29tcG9uZW50czo6aW52YWxpZE1pbGxpc2Vjb25kcygp
OwogfQogCiB2b2lkIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6c2V0VmFsdWVBc0RlY2ltYWwo
Y29uc3QgRGVjaW1hbCYgbmV3VmFsdWUsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhh
dmlvciwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0CiB7Ci0gICAgZWxlbWVudCgpLT5zZXRWYWx1ZShz
ZXJpYWxpemUobmV3VmFsdWUpLCBldmVudEJlaGF2aW9yKTsKKyAgICBlbGVtZW50KCkuc2V0VmFs
dWUoc2VyaWFsaXplKG5ld1ZhbHVlKSwgZXZlbnRCZWhhdmlvcik7CiB9CiAKIGJvb2wgQmFzZURh
dGVBbmRUaW1lSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2hGb3IoY29uc3QgU3RyaW5nJiB2YWx1ZSkg
Y29uc3QKQEAgLTc4LDcgKzc4LDcgQEAgYm9vbCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnR5
cGVNaXNtYQogCiBib29sIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6dHlwZU1pc21hdGNoKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gdHlwZU1pc21hdGNoRm9yKGVsZW1lbnQoKS0+dmFsdWUoKSk7
CisgICAgcmV0dXJuIHR5cGVNaXNtYXRjaEZvcihlbGVtZW50KCkudmFsdWUoKSk7CiB9CiAKIERl
Y2ltYWwgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpkZWZhdWx0VmFsdWVGb3JTdGVwVXAoKSBj
b25zdApAQCAtMTI2LDcgKzEyNiw3IEBAIFN0cmluZyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6
OnNlcmlhbGkKIFN0cmluZyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNlcmlhbGl6ZVdpdGhD
b21wb25lbnRzKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlKSBjb25zdAogewogICAgIERlY2lt
YWwgc3RlcDsKLSAgICBpZiAoIWVsZW1lbnQoKS0+Z2V0QWxsb3dlZFZhbHVlU3RlcCgmc3RlcCkp
CisgICAgaWYgKCFlbGVtZW50KCkuZ2V0QWxsb3dlZFZhbHVlU3RlcCgmc3RlcCkpCiAgICAgICAg
IHJldHVybiBkYXRlLnRvU3RyaW5nKCk7CiAgICAgaWYgKHN0ZXAucmVtYWluZGVyKG1zZWNQZXJN
aW51dGUpLmlzWmVybygpKQogICAgICAgICByZXR1cm4gZGF0ZS50b1N0cmluZyhEYXRlQ29tcG9u
ZW50czo6Tm9uZSk7CkBAIC0xNDYsMTMgKzE0NiwxMyBAQCBTdHJpbmcgQmFzZURhdGVBbmRUaW1l
SW5wdXRUeXBlOjpsb2NhbGl6CiAgICAgaWYgKCFwYXJzZVRvRGF0ZUNvbXBvbmVudHMocHJvcG9z
ZWRWYWx1ZSwgJmRhdGUpKQogICAgICAgICByZXR1cm4gcHJvcG9zZWRWYWx1ZTsKIAotICAgIFN0
cmluZyBsb2NhbGl6ZWQgPSBlbGVtZW50KCktPmxvY2FsZSgpLmZvcm1hdERhdGVUaW1lKGRhdGUp
OworICAgIFN0cmluZyBsb2NhbGl6ZWQgPSBlbGVtZW50KCkubG9jYWxlKCkuZm9ybWF0RGF0ZVRp
bWUoZGF0ZSk7CiAgICAgcmV0dXJuIGxvY2FsaXplZC5pc0VtcHR5KCkgPyBwcm9wb3NlZFZhbHVl
IDogbG9jYWxpemVkOwogfQogCiBTdHJpbmcgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjp2aXNp
YmxlVmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiBsb2NhbGl6ZVZhbHVlKGVsZW1lbnQoKS0+
dmFsdWUoKSk7CisgICAgcmV0dXJuIGxvY2FsaXplVmFsdWUoZWxlbWVudCgpLnZhbHVlKCkpOwog
fQogCiBTdHJpbmcgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpzYW5pdGl6ZVZhbHVlKGNvbnN0
IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkgY29uc3QKQEAgLTE3Miw3ICsxNzIsNyBAQCBib29sIEJh
c2VEYXRlQW5kVGltZUlucHV0VHlwZTo6c2hvdWxkUmVzCiAKIGJvb2wgQmFzZURhdGVBbmRUaW1l
SW5wdXRUeXBlOjp2YWx1ZU1pc3NpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsKLSAg
ICByZXR1cm4gZWxlbWVudCgpLT5pc1JlcXVpcmVkKCkgJiYgdmFsdWUuaXNFbXB0eSgpOworICAg
IHJldHVybiBlbGVtZW50KCkuaXNSZXF1aXJlZCgpICYmIHZhbHVlLmlzRW1wdHkoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0
ZUFuZFRpbWVJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0Jh
c2VEYXRlQW5kVGltZUlucHV0VHlwZS5oCShyZXZpc2lvbiAxNTU5MDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw3ICs0MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEEgc3VwZXIgY2xhc3Mgb2YgZGF0
ZSwgZGF0ZXRpbWUsIGRhdGV0aW1lLWxvY2FsLCBtb250aCwgdGltZSwgYW5kIHdlZWsgdHlwZXMu
CiBjbGFzcyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUgOiBwdWJsaWMgSW5wdXRUeXBlIHsKIHBy
b3RlY3RlZDoKLSAgICBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCog
ZWxlbWVudCkgOiBJbnB1dFR5cGUoZWxlbWVudCkgeyB9CisgICAgQmFzZURhdGVBbmRUaW1lSW5w
dXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpIDogSW5wdXRUeXBlKGVsZW1lbnQpIHsg
fQorCiAgICAgdmlydHVhbCBEZWNpbWFsIHBhcnNlVG9OdW1iZXIoY29uc3QgU3RyaW5nJiwgY29u
c3QgRGVjaW1hbCYpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBwYXJzZVRvRGF0
ZUNvbXBvbmVudHMoY29uc3QgU3RyaW5nJiwgRGF0ZUNvbXBvbmVudHMqKSBjb25zdCBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIFN0cmluZyBzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0
IE9WRVJSSURFOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlVGV4dElucHV0VHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlVGV4dElucHV0VHlwZS5j
cHAJKHJldmlzaW9uIDE1NTkwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZVRleHRJbnB1
dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIGJvb2wgQmFzZVRleHRJ
bnB1dFR5cGU6OmlzVGV4dFR5cGUoKSBjb24KIAogYm9vbCBCYXNlVGV4dElucHV0VHlwZTo6cGF0
dGVybk1pc21hdGNoKGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7Ci0gICAgY29uc3QgQXRv
bWljU3RyaW5nJiByYXdQYXR0ZXJuID0gZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKHBhdHRl
cm5BdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHJhd1BhdHRlcm4gPSBlbGVtZW50KCku
ZmFzdEdldEF0dHJpYnV0ZShwYXR0ZXJuQXR0cik7CiAgICAgaWYgKHJhd1BhdHRlcm4uaXNOdWxs
KCkgfHwgdmFsdWUuaXNFbXB0eSgpIHx8ICFSZWd1bGFyRXhwcmVzc2lvbihyYXdQYXR0ZXJuLCBU
ZXh0Q2FzZVNlbnNpdGl2ZSkuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
U3RyaW5nIHBhdHRlcm4gPSAiXig/OiIgKyByYXdQYXR0ZXJuICsgIikkIjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvQmFzZVRleHRJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0Jhc2VUZXh0SW5wdXRUeXBlLmgJKHJldmlzaW9uIDE1NTkwNykKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvQmFzZVRleHRJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBUaGV5IHN1cHBvcnQgbWF4bGVu
Z3RoLCBzZWxlY3Rpb24gZnVuY3Rpb25zLCBhbmQgc28gb24uCiBjbGFzcyBCYXNlVGV4dElucHV0
VHlwZSA6IHB1YmxpYyBUZXh0RmllbGRJbnB1dFR5cGUgewogcHJvdGVjdGVkOgotICAgIGV4cGxp
Y2l0IEJhc2VUZXh0SW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogVGV4dEZp
ZWxkSW5wdXRUeXBlKGVsZW1lbnQpIHsgfQorICAgIGV4cGxpY2l0IEJhc2VUZXh0SW5wdXRUeXBl
KEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpIDogVGV4dEZpZWxkSW5wdXRUeXBlKGVsZW1lbnQp
IHsgfQogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1RleHRUeXBlKCkgY29uc3QgT1ZF
UlJJREU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0J1dHRvbklucHV0VHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9CdXR0b25JbnB1dFR5cGUuY3BwCShyZXZp
c2lvbiAxNTU5MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0J1dHRvbklucHV0VHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1QYXNzT3duUHRyPElucHV0VHlwZT4gQnV0dG9uSW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0
RWxlbWVudCogZWxlbWVudCkKK1Bhc3NPd25QdHI8SW5wdXRUeXBlPiBCdXR0b25JbnB1dFR5cGU6
OmNyZWF0ZShIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KQogewogICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQnV0dG9uSW5wdXRUeXBlKGVsZW1lbnQpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvQnV0dG9uSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9CdXR0b25JbnB1dFR5cGUuaAkocmV2aXNpb24gMTU1OTA3KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9CdXR0b25JbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDEwIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQnV0dG9uSW5wdXRUeXBlIDogcHVibGljIEJh
c2VCdXR0b25JbnB1dFR5cGUgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElucHV0
VHlwZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxJ
bnB1dFR5cGU+IGNyZWF0ZShIVE1MSW5wdXRFbGVtZW50Jik7CiAKIHByaXZhdGU6Ci0gICAgQnV0
dG9uSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogQmFzZUJ1dHRvbklucHV0
VHlwZShlbGVtZW50KSB7IH0KKyAgICBCdXR0b25JbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCYg
ZWxlbWVudCkgOiBCYXNlQnV0dG9uSW5wdXRUeXBlKGVsZW1lbnQpIHsgfQogICAgIHZpcnR1YWwg
Y29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdCBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNWYWxpZGF0aW9uKCkgY29uc3QgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCBib29sIGlzVGV4dEJ1dHRvbigpIGNvbnN0IE9WRVJSSURFOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9DaGVja2JveElucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9DaGVja2JveElucHV0VHlwZS5jcHAJKHJldmlzaW9uIDE1NTkwNykKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw3ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxJ
bnB1dFR5cGU+IENoZWNrYm94SW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCogZWxl
bWVudCkKK1Bhc3NPd25QdHI8SW5wdXRUeXBlPiBDaGVja2JveElucHV0VHlwZTo6Y3JlYXRlKEhU
TUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDaGVj
a2JveElucHV0VHlwZShlbGVtZW50KSk7CiB9CkBAIC01Miw3ICs1Miw3IEBAIGNvbnN0IEF0b21p
Y1N0cmluZyYgQ2hlY2tib3hJbnB1dFR5cGU6OmYKIAogYm9vbCBDaGVja2JveElucHV0VHlwZTo6
dmFsdWVNaXNzaW5nKGNvbnN0IFN0cmluZyYpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGVsZW1lbnQo
KS0+aXNSZXF1aXJlZCgpICYmICFlbGVtZW50KCktPmNoZWNrZWQoKTsKKyAgICByZXR1cm4gZWxl
bWVudCgpLmlzUmVxdWlyZWQoKSAmJiAhZWxlbWVudCgpLmNoZWNrZWQoKTsKIH0KIAogU3RyaW5n
IENoZWNrYm94SW5wdXRUeXBlOjp2YWx1ZU1pc3NpbmdUZXh0KCkgY29uc3QKQEAgLTc1LDEzICs3
NSwxMyBAQCBQYXNzT3duUHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4gQ2hlY2tib3hJCiAKICAgICBP
d25QdHI8Q2xpY2tIYW5kbGluZ1N0YXRlPiBzdGF0ZSA9IGFkb3B0UHRyKG5ldyBDbGlja0hhbmRs
aW5nU3RhdGUpOwogCi0gICAgc3RhdGUtPmNoZWNrZWQgPSBlbGVtZW50KCktPmNoZWNrZWQoKTsK
LSAgICBzdGF0ZS0+aW5kZXRlcm1pbmF0ZSA9IGVsZW1lbnQoKS0+aW5kZXRlcm1pbmF0ZSgpOwor
ICAgIHN0YXRlLT5jaGVja2VkID0gZWxlbWVudCgpLmNoZWNrZWQoKTsKKyAgICBzdGF0ZS0+aW5k
ZXRlcm1pbmF0ZSA9IGVsZW1lbnQoKS5pbmRldGVybWluYXRlKCk7CiAKICAgICBpZiAoc3RhdGUt
PmluZGV0ZXJtaW5hdGUpCi0gICAgICAgIGVsZW1lbnQoKS0+c2V0SW5kZXRlcm1pbmF0ZShmYWxz
ZSk7CisgICAgICAgIGVsZW1lbnQoKS5zZXRJbmRldGVybWluYXRlKGZhbHNlKTsKIAotICAgIGVs
ZW1lbnQoKS0+c2V0Q2hlY2tlZCghc3RhdGUtPmNoZWNrZWQsIERpc3BhdGNoQ2hhbmdlRXZlbnQp
OworICAgIGVsZW1lbnQoKS5zZXRDaGVja2VkKCFzdGF0ZS0+Y2hlY2tlZCwgRGlzcGF0Y2hDaGFu
Z2VFdmVudCk7CiAKICAgICByZXR1cm4gc3RhdGUucmVsZWFzZSgpOwogfQpAQCAtODksOCArODks
OCBAQCBQYXNzT3duUHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4gQ2hlY2tib3hJCiB2b2lkIENoZWNr
Ym94SW5wdXRUeXBlOjpkaWREaXNwYXRjaENsaWNrKEV2ZW50KiBldmVudCwgY29uc3QgQ2xpY2tI
YW5kbGluZ1N0YXRlJiBzdGF0ZSkKIHsKICAgICBpZiAoZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQo
KSB8fCBldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkgewotICAgICAgICBlbGVtZW50KCktPnNldElu
ZGV0ZXJtaW5hdGUoc3RhdGUuaW5kZXRlcm1pbmF0ZSk7Ci0gICAgICAgIGVsZW1lbnQoKS0+c2V0
Q2hlY2tlZChzdGF0ZS5jaGVja2VkKTsKKyAgICAgICAgZWxlbWVudCgpLnNldEluZGV0ZXJtaW5h
dGUoc3RhdGUuaW5kZXRlcm1pbmF0ZSk7CisgICAgICAgIGVsZW1lbnQoKS5zZXRDaGVja2VkKHN0
YXRlLmNoZWNrZWQpOwogICAgIH0KIAogICAgIC8vIFRoZSB3b3JrIHdlIGRpZCBpbiB3aWxsRGlz
cGF0Y2hDbGljayB3YXMgZGVmYXVsdCBoYW5kbGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvQ2hlY2tib3hJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0NoZWNrYm94SW5wdXRUeXBlLmgJKHJldmlzaW9uIDE1NTkwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvQ2hlY2tib3hJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDEw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2hlY2tib3hJbnB1dFR5cGUgOiBwdWJs
aWMgQmFzZUNoZWNrYWJsZUlucHV0VHlwZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25Q
dHI8SW5wdXRUeXBlPiBjcmVhdGUoSFRNTElucHV0RWxlbWVudCopOworICAgIHN0YXRpYyBQYXNz
T3duUHRyPElucHV0VHlwZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQmKTsKIAogcHJpdmF0ZToK
LSAgICBDaGVja2JveElucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KSA6IEJhc2VD
aGVja2FibGVJbnB1dFR5cGUoZWxlbWVudCkgeyB9CisgICAgQ2hlY2tib3hJbnB1dFR5cGUoSFRN
TElucHV0RWxlbWVudCYgZWxlbWVudCkgOiBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlKGVsZW1lbnQp
IHsgfQogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBj
b25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgdmFsdWVNaXNzaW5nKGNvbnN0IFN0cmlu
ZyYpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlTWlzc2luZ1RleHQo
KSBjb25zdCBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUu
Y3BwCShyZXZpc2lvbiAxNTU5MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRU
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgYm9vbCBpc1Zh
bGlkQ29sb3JTdHJpbmcoY29uc3QgU3RyCiAgICAgcmV0dXJuIGNvbG9yLmlzVmFsaWQoKSAmJiAh
Y29sb3IuaGFzQWxwaGEoKTsKIH0KIAotUGFzc093blB0cjxJbnB1dFR5cGU+IENvbG9ySW5wdXRU
eXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKK1Bhc3NPd25QdHI8SW5wdXRU
eXBlPiBDb2xvcklucHV0VHlwZTo6Y3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpCiB7
CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDb2xvcklucHV0VHlwZShlbGVtZW50KSk7CiB9CkBA
IC0xMTEsMjAgKzExMSwyMCBAQCBTdHJpbmcgQ29sb3JJbnB1dFR5cGU6OnNhbml0aXplVmFsdWUo
Y29uCiAKIENvbG9yIENvbG9ySW5wdXRUeXBlOjp2YWx1ZUFzQ29sb3IoKSBjb25zdAogewotICAg
IHJldHVybiBDb2xvcihlbGVtZW50KCktPnZhbHVlKCkpOworICAgIHJldHVybiBDb2xvcihlbGVt
ZW50KCkudmFsdWUoKSk7CiB9CiAKIHZvaWQgQ29sb3JJbnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1
YnRyZWUoKQogewotICAgIEFTU0VSVChlbGVtZW50KCktPnNoYWRvd1Jvb3QoKSk7CisgICAgQVNT
RVJUKGVsZW1lbnQoKS5zaGFkb3dSb290KCkpOwogCi0gICAgRG9jdW1lbnQmIGRvY3VtZW50ID0g
ZWxlbWVudCgpLT5kb2N1bWVudCgpOworICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGVsZW1lbnQo
KS5kb2N1bWVudCgpOwogICAgIFJlZlB0cjxIVE1MRGl2RWxlbWVudD4gd3JhcHBlckVsZW1lbnQg
PSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKICAgICB3cmFwcGVyRWxlbWVudC0+
c2V0UHNldWRvKEF0b21pY1N0cmluZygiLXdlYmtpdC1jb2xvci1zd2F0Y2gtd3JhcHBlciIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKICAgICBSZWZQdHI8SFRNTERpdkVs
ZW1lbnQ+IGNvbG9yU3dhdGNoID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAg
ICAgY29sb3JTd2F0Y2gtPnNldFBzZXVkbyhBdG9taWNTdHJpbmcoIi13ZWJraXQtY29sb3Itc3dh
dGNoIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwogICAgIHdyYXBwZXJF
bGVtZW50LT5hcHBlbmRDaGlsZChjb2xvclN3YXRjaC5yZWxlYXNlKCksIEFTU0VSVF9OT19FWENF
UFRJT04pOwotICAgIGVsZW1lbnQoKS0+dXNlckFnZW50U2hhZG93Um9vdCgpLT5hcHBlbmRDaGls
ZCh3cmFwcGVyRWxlbWVudC5yZWxlYXNlKCksIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIGVs
ZW1lbnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCktPmFwcGVuZENoaWxkKHdyYXBwZXJFbGVtZW50
LnJlbGVhc2UoKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgCiAgICAgdXBkYXRlQ29sb3JT
d2F0Y2goKTsKIH0KQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIENvbG9ySW5wdXRUeXBlOjpzZXRW
YWx1ZShjb25zdCBTdHJpCiAKIHZvaWQgQ29sb3JJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRl
RXZlbnQoRXZlbnQqIGV2ZW50KQogewotICAgIGlmIChlbGVtZW50KCktPmlzRGlzYWJsZWRPclJl
YWRPbmx5KCkgfHwgIWVsZW1lbnQoKS0+cmVuZGVyZXIoKSkKKyAgICBpZiAoZWxlbWVudCgpLmlz
RGlzYWJsZWRPclJlYWRPbmx5KCkgfHwgIWVsZW1lbnQoKS5yZW5kZXJlcigpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoIVNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSgpKQpAQCAtMTgxLDExICsxODEsMTEgQEAgYm9vbCBDb2xvcklucHV0VHlwZTo6c2hvdWxkUmVz
ZXRPbkRvY3VtZQogCiB2b2lkIENvbG9ySW5wdXRUeXBlOjpkaWRDaG9vc2VDb2xvcihjb25zdCBD
b2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKGVsZW1lbnQoKS0+aXNEaXNhYmxlZE9yUmVhZE9ubHko
KSB8fCBjb2xvciA9PSB2YWx1ZUFzQ29sb3IoKSkKKyAgICBpZiAoZWxlbWVudCgpLmlzRGlzYWJs
ZWRPclJlYWRPbmx5KCkgfHwgY29sb3IgPT0gdmFsdWVBc0NvbG9yKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBlbGVtZW50KCktPnNldFZhbHVlRnJvbVJlbmRlcmVyKGNvbG9yLnNlcmlhbGl6ZWQo
KSk7CisgICAgZWxlbWVudCgpLnNldFZhbHVlRnJvbVJlbmRlcmVyKGNvbG9yLnNlcmlhbGl6ZWQo
KSk7CiAgICAgdXBkYXRlQ29sb3JTd2F0Y2goKTsKLSAgICBlbGVtZW50KCktPmRpc3BhdGNoRm9y
bUNvbnRyb2xDaGFuZ2VFdmVudCgpOworICAgIGVsZW1lbnQoKS5kaXNwYXRjaEZvcm1Db250cm9s
Q2hhbmdlRXZlbnQoKTsKIH0KIAogdm9pZCBDb2xvcklucHV0VHlwZTo6ZGlkRW5kQ2hvb3Nlcigp
CkBAIC0yMDUsMTggKzIwNSwxOCBAQCB2b2lkIENvbG9ySW5wdXRUeXBlOjp1cGRhdGVDb2xvclN3
YXRjaCgpCiAgICAgaWYgKCFjb2xvclN3YXRjaCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29s
b3JTd2F0Y2gtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3IsIGVsZW1lbnQoKS0+dmFsdWUoKSwgZmFsc2UpOworICAgIGNvbG9yU3dhdGNoLT5zZXRJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBlbGVtZW50KCkudmFs
dWUoKSwgZmFsc2UpOwogfQogCiBIVE1MRWxlbWVudCogQ29sb3JJbnB1dFR5cGU6OnNoYWRvd0Nv
bG9yU3dhdGNoKCkgY29uc3QKIHsKLSAgICBTaGFkb3dSb290KiBzaGFkb3cgPSBlbGVtZW50KCkt
PnVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKKyAgICBTaGFkb3dSb290KiBzaGFkb3cgPSBlbGVtZW50
KCkudXNlckFnZW50U2hhZG93Um9vdCgpOwogICAgIHJldHVybiBzaGFkb3cgPyB0b0hUTUxFbGVt
ZW50KHNoYWRvdy0+Zmlyc3RDaGlsZCgpLT5maXJzdENoaWxkKCkpIDogMDsKIH0KIAogSW50UmVj
dCBDb2xvcklucHV0VHlwZTo6ZWxlbWVudFJlY3RSZWxhdGl2ZVRvUm9vdFZpZXcoKSBjb25zdAog
ewotICAgIHJldHVybiBlbGVtZW50KCktPmRvY3VtZW50KCkudmlldygpLT5jb250ZW50c1RvUm9v
dFZpZXcoZWxlbWVudCgpLT5waXhlbFNuYXBwZWRCb3VuZGluZ0JveCgpKTsKKyAgICByZXR1cm4g
ZWxlbWVudCgpLmRvY3VtZW50KCkudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoZWxlbWVudCgp
LnBpeGVsU25hcHBlZEJvdW5kaW5nQm94KCkpOwogfQogCiBDb2xvciBDb2xvcklucHV0VHlwZTo6
Y3VycmVudENvbG9yKCkKQEAgLTIyNyw3ICsyMjcsNyBAQCBDb2xvciBDb2xvcklucHV0VHlwZTo6
Y3VycmVudENvbG9yKCkKIGJvb2wgQ29sb3JJbnB1dFR5cGU6OnNob3VsZFNob3dTdWdnZXN0aW9u
cygpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCi0gICAgcmV0dXJuIGVs
ZW1lbnQoKS0+ZmFzdEhhc0F0dHJpYnV0ZShsaXN0QXR0cik7CisgICAgcmV0dXJuIGVsZW1lbnQo
KS5mYXN0SGFzQXR0cmlidXRlKGxpc3RBdHRyKTsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOwog
I2VuZGlmCkBAIC0yMzcsMTEgKzIzNywxMSBAQCBWZWN0b3I8Q29sb3I+IENvbG9ySW5wdXRUeXBl
OjpzdWdnZXN0aW9uCiB7CiAgICAgVmVjdG9yPENvbG9yPiBzdWdnZXN0aW9uczsKICNpZiBFTkFC
TEUoREFUQUxJU1RfRUxFTUVOVCkKLSAgICBIVE1MRGF0YUxpc3RFbGVtZW50KiBkYXRhTGlzdCA9
IGVsZW1lbnQoKS0+ZGF0YUxpc3QoKTsKKyAgICBIVE1MRGF0YUxpc3RFbGVtZW50KiBkYXRhTGlz
dCA9IGVsZW1lbnQoKS5kYXRhTGlzdCgpOwogICAgIGlmIChkYXRhTGlzdCkgewogICAgICAgICBS
ZWZQdHI8SFRNTENvbGxlY3Rpb24+IG9wdGlvbnMgPSBkYXRhTGlzdC0+b3B0aW9ucygpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gdG9I
VE1MT3B0aW9uRWxlbWVudChvcHRpb25zLT5pdGVtKGkpKTsgaSsrKSB7Ci0gICAgICAgICAgICBp
ZiAoIWVsZW1lbnQoKS0+aXNWYWxpZFZhbHVlKG9wdGlvbi0+dmFsdWUoKSkpCisgICAgICAgICAg
ICBpZiAoIWVsZW1lbnQoKS5pc1ZhbGlkVmFsdWUob3B0aW9uLT52YWx1ZSgpKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIENvbG9yIGNvbG9yKG9wdGlvbi0+dmFsdWUo
KSk7CiAgICAgICAgICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0NvbG9ySW5wdXRUeXBlLmgJKHJldmlzaW9uIDE1NTkwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvQ29sb3JJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbG9ySW5wdXRUeXBlIDogcHVibGljIEJhc2VD
bGlja2FibGVXaXRoS2V5SW5wdXRUeXBlLCBwdWJsaWMgQ29sb3JDaG9vc2VyQ2xpZW50IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGU+IGNyZWF0ZShIVE1MSW5wdXRF
bGVtZW50Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlPiBjcmVhdGUoSFRNTElu
cHV0RWxlbWVudCYpOwogICAgIHZpcnR1YWwgfkNvbG9ySW5wdXRUeXBlKCk7CiAKICAgICAvLyBD
b2xvckNob29zZXJDbGllbnQgaW1wbGVtZW50YXRpb24uCkBAIC01MSw3ICs1MSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIFZlY3RvcjxDb2xvcj4gc3VnZ2VzdGlvbnMoKSBjb25zdCBPVkVSUklE
RTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDb2xvcklucHV0VHlwZShIVE1MSW5wdXRFbGVt
ZW50KiBlbGVtZW50KSA6IEJhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlKGVsZW1lbnQpIHsg
fQorICAgIGV4cGxpY2l0IENvbG9ySW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQp
IDogQmFzZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5cGUoZWxlbWVudCkgeyB9CiAgICAgdmlydHVh
bCB2b2lkIGF0dGFjaCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBpc0NvbG9yQ29udHJv
bCgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3Jt
Q29udHJvbFR5cGUoKSBjb25zdCBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
RGF0ZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9EYXRl
SW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMTU1OTA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9E
YXRlSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTIgKzQ2LDEyIEBAIHN0YXRp
YyBjb25zdCBpbnQgZGF0ZURlZmF1bHRTdGVwID0gMTsKIHN0YXRpYyBjb25zdCBpbnQgZGF0ZURl
ZmF1bHRTdGVwQmFzZSA9IDA7CiBzdGF0aWMgY29uc3QgaW50IGRhdGVTdGVwU2NhbGVGYWN0b3Ig
PSA4NjQwMDAwMDsKIAotaW5saW5lIERhdGVJbnB1dFR5cGU6OkRhdGVJbnB1dFR5cGUoSFRNTElu
cHV0RWxlbWVudCogZWxlbWVudCkKK2lubGluZSBEYXRlSW5wdXRUeXBlOjpEYXRlSW5wdXRUeXBl
KEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgOiBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5k
VGltZUlucHV0VHlwZShlbGVtZW50KQogewogfQogCi1QYXNzT3duUHRyPElucHV0VHlwZT4gRGF0
ZUlucHV0VHlwZTo6Y3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCitQYXNzT3duUHRy
PElucHV0VHlwZT4gRGF0ZUlucHV0VHlwZTo6Y3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1l
bnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEYXRlSW5wdXRUeXBlKGVsZW1lbnQpKTsK
IH0KQEAgLTc1LDEwICs3NSwxMCBAQCBTdGVwUmFuZ2UgRGF0ZUlucHV0VHlwZTo6Y3JlYXRlU3Rl
cFJhbmdlCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdGVwUmFuZ2U6OlN0ZXBE
ZXNjcmlwdGlvbiwgc3RlcERlc2NyaXB0aW9uLCAoZGF0ZURlZmF1bHRTdGVwLCBkYXRlRGVmYXVs
dFN0ZXBCYXNlLCBkYXRlU3RlcFNjYWxlRmFjdG9yLCBTdGVwUmFuZ2U6OlBhcnNlZFN0ZXBWYWx1
ZVNob3VsZEJlSW50ZWdlcikpOwogCi0gICAgY29uc3QgRGVjaW1hbCBzdGVwQmFzZSA9IHBhcnNl
VG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCAwKTsKLSAgICBj
b25zdCBEZWNpbWFsIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0
dHJpYnV0ZShtaW5BdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWlu
aW11bURhdGUoKSkpOwotICAgIGNvbnN0IERlY2ltYWwgbWF4aW11bSA9IHBhcnNlVG9OdW1iZXIo
ZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1heEF0dHIpLCBEZWNpbWFsOjpmcm9tRG91Ymxl
KERhdGVDb21wb25lbnRzOjptYXhpbXVtRGF0ZSgpKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBzdGVw
ID0gU3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCBzdGVwRGVzY3JpcHRpb24s
IGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShzdGVwQXR0cikpOworICAgIGNvbnN0IERlY2lt
YWwgc3RlcEJhc2UgPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRlKG1p
bkF0dHIpLCAwKTsKKyAgICBjb25zdCBEZWNpbWFsIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVs
ZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERh
dGVDb21wb25lbnRzOjptaW5pbXVtRGF0ZSgpKSk7CisgICAgY29uc3QgRGVjaW1hbCBtYXhpbXVt
ID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShtYXhBdHRyKSwgRGVj
aW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWF4aW11bURhdGUoKSkpOworICAgIGNv
bnN0IERlY2ltYWwgc3RlcCA9IFN0ZXBSYW5nZTo6cGFyc2VTdGVwKGFueVN0ZXBIYW5kbGluZywg
c3RlcERlc2NyaXB0aW9uLCBlbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShzdGVwQXR0cikpOwog
ICAgIHJldHVybiBTdGVwUmFuZ2Uoc3RlcEJhc2UsIG1pbmltdW0sIG1heGltdW0sIHN0ZXAsIHN0
ZXBEZXNjcmlwdGlvbik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5o
CShyZXZpc2lvbiAxNTU5MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTAgKzM4LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRGF0ZUlucHV0VHlwZSA6IHB1YmxpYyBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGlt
ZUlucHV0VHlwZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlPiBj
cmVhdGUoSFRNTElucHV0RWxlbWVudCopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPElucHV0VHlw
ZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQmKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBE
YXRlSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqKTsKKyAgICBleHBsaWNpdCBEYXRlSW5wdXRU
eXBlKEhUTUxJbnB1dEVsZW1lbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCkgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNv
bnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgRGF0ZUNvbXBvbmVudHM6OlR5cGUgZGF0ZVR5cGUo
KSBjb25zdCBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZVRpbWVJbnB1
dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZVRpbWVJbnB1
dFR5cGUuY3BwCShyZXZpc2lvbiAxNTU5MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVU
aW1lSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBzdGF0aWMg
Y29uc3QgaW50IGRhdGVUaW1lRGVmYXVsdFN0ZXAgPSA2CiBzdGF0aWMgY29uc3QgaW50IGRhdGVU
aW1lRGVmYXVsdFN0ZXBCYXNlID0gMDsKIHN0YXRpYyBjb25zdCBpbnQgZGF0ZVRpbWVTdGVwU2Nh
bGVGYWN0b3IgPSAxMDAwOwogCi1QYXNzT3duUHRyPElucHV0VHlwZT4gRGF0ZVRpbWVJbnB1dFR5
cGU6OmNyZWF0ZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQorUGFzc093blB0cjxJbnB1dFR5
cGU+IERhdGVUaW1lSW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkK
IHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERhdGVUaW1lSW5wdXRUeXBlKGVsZW1lbnQpKTsK
IH0KQEAgLTc2LDEwICs3NiwxMCBAQCBTdGVwUmFuZ2UgRGF0ZVRpbWVJbnB1dFR5cGU6OmNyZWF0
ZVN0ZXBSCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdGVwUmFuZ2U6OlN0ZXBE
ZXNjcmlwdGlvbiwgc3RlcERlc2NyaXB0aW9uLCAoZGF0ZVRpbWVEZWZhdWx0U3RlcCwgZGF0ZVRp
bWVEZWZhdWx0U3RlcEJhc2UsIGRhdGVUaW1lU3RlcFNjYWxlRmFjdG9yLCBTdGVwUmFuZ2U6OlNj
YWxlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcikpOwogCi0gICAgY29uc3QgRGVjaW1hbCBzdGVw
QmFzZSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIp
LCAwKTsKLSAgICBjb25zdCBEZWNpbWFsIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQo
KS0+ZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29t
cG9uZW50czo6bWluaW11bURhdGVUaW1lKCkpKTsKLSAgICBjb25zdCBEZWNpbWFsIG1heGltdW0g
PSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtYXhBdHRyKSwgRGVj
aW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWF4aW11bURhdGVUaW1lKCkpKTsKLSAg
ICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxp
bmcsIHN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRy
KSk7CisgICAgY29uc3QgRGVjaW1hbCBzdGVwQmFzZSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgp
LmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIDApOworICAgIGNvbnN0IERlY2ltYWwgbWluaW11
bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIERl
Y2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1EYXRlVGltZSgpKSk7Cisg
ICAgY29uc3QgRGVjaW1hbCBtYXhpbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuZmFzdEdl
dEF0dHJpYnV0ZShtYXhBdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6
bWF4aW11bURhdGVUaW1lKCkpKTsKKyAgICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6
OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLmZh
c3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpKTsKICAgICByZXR1cm4gU3RlcFJhbmdlKHN0ZXBCYXNl
LCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBzdGVwRGVzY3JpcHRpb24pOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9EYXRlVGltZUlucHV0VHlwZS5oCShyZXZpc2lvbiAxNTU5MDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDEwICszOSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERhdGVUaW1l
SW5wdXRUeXBlIDogcHVibGljIEJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGU+IGNyZWF0ZShIVE1MSW5w
dXRFbGVtZW50Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlPiBjcmVhdGUoSFRN
TElucHV0RWxlbWVudCYpOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IERhdGVUaW1lSW5wdXRU
eXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogQmFzZURhdGVUaW1lSW5wdXRUeXBlKGVs
ZW1lbnQpIHsgfQorICAgIGV4cGxpY2l0IERhdGVUaW1lSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1l
bnQmIGVsZW1lbnQpIDogQmFzZURhdGVUaW1lSW5wdXRUeXBlKGVsZW1lbnQpIHsgfQogICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2goKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBEYXRl
Q29tcG9uZW50czo6VHlwZSBkYXRlVHlwZSgpIGNvbnN0IE9WRVJSSURFOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lTG9jYWxJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAx
NTU5MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lTG9jYWxJbnB1dFR5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHN0YXRpYyBjb25zdCBpbnQgZGF0ZVRp
bWVMb2NhbERlZmF1bHRTdGUKIHN0YXRpYyBjb25zdCBpbnQgZGF0ZVRpbWVMb2NhbERlZmF1bHRT
dGVwQmFzZSA9IDA7CiBzdGF0aWMgY29uc3QgaW50IGRhdGVUaW1lTG9jYWxTdGVwU2NhbGVGYWN0
b3IgPSAxMDAwOwogCi1QYXNzT3duUHRyPElucHV0VHlwZT4gRGF0ZVRpbWVMb2NhbElucHV0VHlw
ZTo6Y3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCitQYXNzT3duUHRyPElucHV0VHlw
ZT4gRGF0ZVRpbWVMb2NhbElucHV0VHlwZTo6Y3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1l
bnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEYXRlVGltZUxvY2FsSW5wdXRUeXBlKGVs
ZW1lbnQpKTsKIH0KQEAgLTgyLDEwICs4MiwxMCBAQCBTdGVwUmFuZ2UgRGF0ZVRpbWVMb2NhbElu
cHV0VHlwZTo6Y3JlYXRlCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdGVwUmFu
Z2U6OlN0ZXBEZXNjcmlwdGlvbiwgc3RlcERlc2NyaXB0aW9uLCAoZGF0ZVRpbWVMb2NhbERlZmF1
bHRTdGVwLCBkYXRlVGltZUxvY2FsRGVmYXVsdFN0ZXBCYXNlLCBkYXRlVGltZUxvY2FsU3RlcFNj
YWxlRmFjdG9yLCBTdGVwUmFuZ2U6OlNjYWxlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcikpOwog
Ci0gICAgY29uc3QgRGVjaW1hbCBzdGVwQmFzZSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5m
YXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCAwKTsKLSAgICBjb25zdCBEZWNpbWFsIG1pbmltdW0g
PSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgRGVj
aW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWluaW11bURhdGVUaW1lKCkpKTsKLSAg
ICBjb25zdCBEZWNpbWFsIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdl
dEF0dHJpYnV0ZShtYXhBdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6
bWF4aW11bURhdGVUaW1lKCkpKTsKLSAgICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6
OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLT5m
YXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKSk7CisgICAgY29uc3QgRGVjaW1hbCBzdGVwQmFzZSA9
IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIDApOwor
ICAgIGNvbnN0IERlY2ltYWwgbWluaW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLmZhc3RH
ZXRBdHRyaWJ1dGUobWluQXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6
Om1pbmltdW1EYXRlVGltZSgpKSk7CisgICAgY29uc3QgRGVjaW1hbCBtYXhpbXVtID0gcGFyc2VU
b051bWJlcihlbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShtYXhBdHRyKSwgRGVjaW1hbDo6ZnJv
bURvdWJsZShEYXRlQ29tcG9uZW50czo6bWF4aW11bURhdGVUaW1lKCkpKTsKKyAgICBjb25zdCBE
ZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0ZXBE
ZXNjcmlwdGlvbiwgZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpKTsKICAgICBy
ZXR1cm4gU3RlcFJhbmdlKHN0ZXBCYXNlLCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBzdGVwRGVz
Y3JpcHRpb24pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lTG9jYWxJ
bnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lTG9j
YWxJbnB1dFR5cGUuaAkocmV2aXNpb24gMTU1OTA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9E
YXRlVGltZUxvY2FsSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEwICszOCwxMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERhdGVUaW1lTG9jYWxJbnB1dFR5cGUgOiBw
dWJsaWMgQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUgewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPElucHV0VHlwZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQqKTsK
KyAgICBzdGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGU+IGNyZWF0ZShIVE1MSW5wdXRFbGVtZW50
Jik7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgRGF0ZVRpbWVMb2NhbElucHV0VHlwZShIVE1M
SW5wdXRFbGVtZW50KiBlbGVtZW50KSA6IEJhc2VEYXRlVGltZUxvY2FsSW5wdXRUeXBlKGVsZW1l
bnQpIHsgfQorICAgIGV4cGxpY2l0IERhdGVUaW1lTG9jYWxJbnB1dFR5cGUoSFRNTElucHV0RWxl
bWVudCYgZWxlbWVudCkgOiBCYXNlRGF0ZVRpbWVMb2NhbElucHV0VHlwZShlbGVtZW50KSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1
YWwgRGF0ZUNvbXBvbmVudHM6OlR5cGUgZGF0ZVR5cGUoKSBjb25zdCBPVkVSUklERTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvRW1haWxJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvRW1haWxJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAxNTU5MDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0VtYWlsSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTMsNyArNTMsNyBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlkRW1haWxBZGRyZXNzKGNvbnN0IFN0
CiAgICAgcmV0dXJuICFtYXRjaE9mZnNldCAmJiBtYXRjaExlbmd0aCA9PSBhZGRyZXNzTGVuZ3Ro
OwogfQogCi1QYXNzT3duUHRyPElucHV0VHlwZT4gRW1haWxJbnB1dFR5cGU6OmNyZWF0ZShIVE1M
SW5wdXRFbGVtZW50KiBlbGVtZW50KQorUGFzc093blB0cjxJbnB1dFR5cGU+IEVtYWlsSW5wdXRU
eXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkKIHsKICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IEVtYWlsSW5wdXRUeXBlKGVsZW1lbnQpKTsKIH0KQEAgLTczLDcgKzczLDcgQEAg
Ym9vbCBFbWFpbElucHV0VHlwZTo6dHlwZU1pc21hdGNoRm9yKGNvbgogewogICAgIGlmICh2YWx1
ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWVsZW1lbnQoKS0+
bXVsdGlwbGUoKSkKKyAgICBpZiAoIWVsZW1lbnQoKS5tdWx0aXBsZSgpKQogICAgICAgICByZXR1
cm4gIWlzVmFsaWRFbWFpbEFkZHJlc3ModmFsdWUpOwogICAgIFZlY3RvcjxTdHJpbmc+IGFkZHJl
c3NlczsKICAgICB2YWx1ZS5zcGxpdCgnLCcsIHRydWUsIGFkZHJlc3Nlcyk7CkBAIC04NiwxMiAr
ODYsMTIgQEAgYm9vbCBFbWFpbElucHV0VHlwZTo6dHlwZU1pc21hdGNoRm9yKGNvbgogCiBib29s
IEVtYWlsSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2goKSBjb25zdAogewotICAgIHJldHVybiB0eXBl
TWlzbWF0Y2hGb3IoZWxlbWVudCgpLT52YWx1ZSgpKTsKKyAgICByZXR1cm4gdHlwZU1pc21hdGNo
Rm9yKGVsZW1lbnQoKS52YWx1ZSgpKTsKIH0KIAogU3RyaW5nIEVtYWlsSW5wdXRUeXBlOjp0eXBl
TWlzbWF0Y2hUZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5tdWx0aXBsZSgp
ID8gdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hGb3JNdWx0aXBsZUVtYWlsVGV4dCgpIDog
dmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hGb3JFbWFpbFRleHQoKTsKKyAgICByZXR1cm4g
ZWxlbWVudCgpLm11bHRpcGxlKCkgPyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvck11
bHRpcGxlRW1haWxUZXh0KCkgOiB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvckVtYWls
VGV4dCgpOwogfQogCiBib29sIEVtYWlsSW5wdXRUeXBlOjppc0VtYWlsRmllbGQoKSBjb25zdApA
QCAtMTA3LDcgKzEwNyw3IEBAIGJvb2wgRW1haWxJbnB1dFR5cGU6OnN1cHBvcnRzU2VsZWN0aW9u
QVAKIFN0cmluZyBFbWFpbElucHV0VHlwZTo6c2FuaXRpemVWYWx1ZShjb25zdCBTdHJpbmcmIHBy
b3Bvc2VkVmFsdWUpIGNvbnN0CiB7CiAgICAgU3RyaW5nIG5vTGluZUJyZWFrVmFsdWUgPSBwcm9w
b3NlZFZhbHVlLnJlbW92ZUNoYXJhY3RlcnMoaXNIVE1MTGluZUJyZWFrKTsKLSAgICBpZiAoIWVs
ZW1lbnQoKS0+bXVsdGlwbGUoKSkKKyAgICBpZiAoIWVsZW1lbnQoKS5tdWx0aXBsZSgpKQogICAg
ICAgICByZXR1cm4gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKG5vTGluZUJyZWFr
VmFsdWUpOwogICAgIFZlY3RvcjxTdHJpbmc+IGFkZHJlc3NlczsKICAgICBub0xpbmVCcmVha1Zh
bHVlLnNwbGl0KCcsJywgdHJ1ZSwgYWRkcmVzc2VzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvRW1haWxJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0Vt
YWlsSW5wdXRUeXBlLmgJKHJldmlzaW9uIDE1NTkwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
RW1haWxJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDEwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRW1haWxJbnB1dFR5cGUgOiBwdWJsaWMgQmFzZVRleHRJ
bnB1dFR5cGUgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElucHV0VHlwZT4gY3Jl
YXRlKEhUTUxJbnB1dEVsZW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGU+
IGNyZWF0ZShIVE1MSW5wdXRFbGVtZW50Jik7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgRW1h
aWxJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkgOiBCYXNlVGV4dElucHV0VHlw
ZShlbGVtZW50KSB7IH0KKyAgICBleHBsaWNpdCBFbWFpbElucHV0VHlwZShIVE1MSW5wdXRFbGVt
ZW50JiBlbGVtZW50KSA6IEJhc2VUZXh0SW5wdXRUeXBlKGVsZW1lbnQpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2goKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHR5
cGVNaXNtYXRjaEZvcihjb25zdCBTdHJpbmcmKSBjb25zdCBPVkVSUklERTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMTU1OTA4KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMTIg
Kzg1LDEyIEBAIGNvbnN0IEF0b21pY1N0cmluZyYgVXBsb2FkQnV0dG9uRWxlbWVudDoKICAgICBy
ZXR1cm4gcHNldWRvSWQ7CiB9CiAKLVBhc3NPd25QdHI8SW5wdXRUeXBlPiBGaWxlSW5wdXRUeXBl
OjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKK1Bhc3NPd25QdHI8SW5wdXRUeXBl
PiBGaWxlSW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkKIHsKICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEZpbGVJbnB1dFR5cGUoZWxlbWVudCkpOwogfQogCi1GaWxl
SW5wdXRUeXBlOjpGaWxlSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCitGaWxl
SW5wdXRUeXBlOjpGaWxlSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpCiAgICAg
OiBCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZShlbGVtZW50KQogICAgICwgbV9maWxlTGlz
dChGaWxlTGlzdDo6Y3JlYXRlKCkpCiB7CkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBGaWxlSW5w
dXRUeXBlOjpyZXN0b3JlRm9ybUNvbnRyb2xTdAogCiBib29sIEZpbGVJbnB1dFR5cGU6OmFwcGVu
ZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYgZW5jb2RpbmcsIGJvb2wgbXVsdGlwYXJ0KSBjb25zdAog
ewotICAgIEZpbGVMaXN0KiBmaWxlTGlzdCA9IGVsZW1lbnQoKS0+ZmlsZXMoKTsKKyAgICBGaWxl
TGlzdCogZmlsZUxpc3QgPSBlbGVtZW50KCkuZmlsZXMoKTsKICAgICB1bnNpZ25lZCBudW1GaWxl
cyA9IGZpbGVMaXN0LT5sZW5ndGgoKTsKICAgICBpZiAoIW11bHRpcGFydCkgewogICAgICAgICAv
LyBTZW5kIG9ubHkgdGhlIGJhc2VuYW1lcy4KQEAgLTE1NSwzNSArMTU1LDM1IEBAIGJvb2wgRmls
ZUlucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRm9ybUQKICAgICAgICAgLy8gc3VibWlzc2lvbiBv
ZiBmaWxlIGlucHV0cywgYW5kIEZpcmVmb3ggZG9lc24ndCBhZGQgIm5hbWU9IiBxdWVyeQogICAg
ICAgICAvLyBwYXJhbWV0ZXIuCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1G
aWxlczsgKytpKQotICAgICAgICAgICAgZW5jb2RpbmcuYXBwZW5kRGF0YShlbGVtZW50KCktPm5h
bWUoKSwgZmlsZUxpc3QtPml0ZW0oaSktPm5hbWUoKSk7CisgICAgICAgICAgICBlbmNvZGluZy5h
cHBlbmREYXRhKGVsZW1lbnQoKS5uYW1lKCksIGZpbGVMaXN0LT5pdGVtKGkpLT5uYW1lKCkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBJZiBubyBmaWxlbmFtZSBhdCBh
bGwgaXMgZW50ZXJlZCwgcmV0dXJuIHN1Y2Nlc3NmdWwgYnV0IGVtcHR5LgogICAgIC8vIE51bGwg
d291bGQgYmUgbW9yZSBsb2dpY2FsLCBidXQgTmV0c2NhcGUgcG9zdHMgYW4gZW1wdHkgZmlsZS4g
QXJnaC4KICAgICBpZiAoIW51bUZpbGVzKSB7Ci0gICAgICAgIGVuY29kaW5nLmFwcGVuZEJsb2Io
ZWxlbWVudCgpLT5uYW1lKCksIEZpbGU6OmNyZWF0ZSgiIikpOworICAgICAgICBlbmNvZGluZy5h
cHBlbmRCbG9iKGVsZW1lbnQoKS5uYW1lKCksIEZpbGU6OmNyZWF0ZSgiIikpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRmls
ZXM7ICsraSkKLSAgICAgICAgZW5jb2RpbmcuYXBwZW5kQmxvYihlbGVtZW50KCktPm5hbWUoKSwg
ZmlsZUxpc3QtPml0ZW0oaSkpOworICAgICAgICBlbmNvZGluZy5hcHBlbmRCbG9iKGVsZW1lbnQo
KS5uYW1lKCksIGZpbGVMaXN0LT5pdGVtKGkpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9v
bCBGaWxlSW5wdXRUeXBlOjp2YWx1ZU1pc3NpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QK
IHsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5pc1JlcXVpcmVkKCkgJiYgdmFsdWUuaXNFbXB0eSgp
OworICAgIHJldHVybiBlbGVtZW50KCkuaXNSZXF1aXJlZCgpICYmIHZhbHVlLmlzRW1wdHkoKTsK
IH0KIAogU3RyaW5nIEZpbGVJbnB1dFR5cGU6OnZhbHVlTWlzc2luZ1RleHQoKSBjb25zdAogewot
ICAgIHJldHVybiBlbGVtZW50KCktPm11bHRpcGxlKCkgPyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVl
TWlzc2luZ0Zvck11bHRpcGxlRmlsZVRleHQoKSA6IHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNz
aW5nRm9yRmlsZVRleHQoKTsKKyAgICByZXR1cm4gZWxlbWVudCgpLm11bHRpcGxlKCkgPyB2YWxp
ZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0Zvck11bHRpcGxlRmlsZVRleHQoKSA6IHZhbGlkYXRp
b25NZXNzYWdlVmFsdWVNaXNzaW5nRm9yRmlsZVRleHQoKTsKIH0KIAogdm9pZCBGaWxlSW5wdXRU
eXBlOjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoZWxl
bWVudCgpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKKyAgICBpZiAoZWxlbWVudCgpLmlzRGlz
YWJsZWRGb3JtQ29udHJvbCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIVNjcmlwdENv
bnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKQpAQCAtMTkxLDIyICsxOTEsMjIgQEAg
dm9pZCBGaWxlSW5wdXRUeXBlOjpoYW5kbGVET01BY3RpdmF0ZUV2ZQogCiAgICAgaWYgKENocm9t
ZSogY2hyb21lID0gdGhpcy0+Y2hyb21lKCkpIHsKICAgICAgICAgRmlsZUNob29zZXJTZXR0aW5n
cyBzZXR0aW5nczsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBlbGVtZW50KCk7
CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZWxlbWVudCgpOwogI2lmIEVOQUJM
RShESVJFQ1RPUllfVVBMT0FEKQotICAgICAgICBzZXR0aW5ncy5hbGxvd3NEaXJlY3RvcnlVcGxv
YWQgPSBpbnB1dC0+ZmFzdEhhc0F0dHJpYnV0ZSh3ZWJraXRkaXJlY3RvcnlBdHRyKTsKLSAgICAg
ICAgc2V0dGluZ3MuYWxsb3dzTXVsdGlwbGVGaWxlcyA9IHNldHRpbmdzLmFsbG93c0RpcmVjdG9y
eVVwbG9hZCB8fCBpbnB1dC0+ZmFzdEhhc0F0dHJpYnV0ZShtdWx0aXBsZUF0dHIpOworICAgICAg
ICBzZXR0aW5ncy5hbGxvd3NEaXJlY3RvcnlVcGxvYWQgPSBpbnB1dC5mYXN0SGFzQXR0cmlidXRl
KHdlYmtpdGRpcmVjdG9yeUF0dHIpOworICAgICAgICBzZXR0aW5ncy5hbGxvd3NNdWx0aXBsZUZp
bGVzID0gc2V0dGluZ3MuYWxsb3dzRGlyZWN0b3J5VXBsb2FkIHx8IGlucHV0LmZhc3RIYXNBdHRy
aWJ1dGUobXVsdGlwbGVBdHRyKTsKICNlbHNlCi0gICAgICAgIHNldHRpbmdzLmFsbG93c011bHRp
cGxlRmlsZXMgPSBpbnB1dC0+ZmFzdEhhc0F0dHJpYnV0ZShtdWx0aXBsZUF0dHIpOworICAgICAg
ICBzZXR0aW5ncy5hbGxvd3NNdWx0aXBsZUZpbGVzID0gaW5wdXQuZmFzdEhhc0F0dHJpYnV0ZSht
dWx0aXBsZUF0dHIpOwogI2VuZGlmCi0gICAgICAgIHNldHRpbmdzLmFjY2VwdE1JTUVUeXBlcyA9
IGlucHV0LT5hY2NlcHRNSU1FVHlwZXMoKTsKLSAgICAgICAgc2V0dGluZ3MuYWNjZXB0RmlsZUV4
dGVuc2lvbnMgPSBpbnB1dC0+YWNjZXB0RmlsZUV4dGVuc2lvbnMoKTsKKyAgICAgICAgc2V0dGlu
Z3MuYWNjZXB0TUlNRVR5cGVzID0gaW5wdXQuYWNjZXB0TUlNRVR5cGVzKCk7CisgICAgICAgIHNl
dHRpbmdzLmFjY2VwdEZpbGVFeHRlbnNpb25zID0gaW5wdXQuYWNjZXB0RmlsZUV4dGVuc2lvbnMo
KTsKICAgICAgICAgc2V0dGluZ3Muc2VsZWN0ZWRGaWxlcyA9IG1fZmlsZUxpc3QtPnBhdGhzKCk7
CiAjaWYgRU5BQkxFKE1FRElBX0NBUFRVUkUpCi0gICAgICAgIHNldHRpbmdzLmNhcHR1cmUgPSBp
bnB1dC0+Y2FwdHVyZSgpOworICAgICAgICBzZXR0aW5ncy5jYXB0dXJlID0gaW5wdXQuY2FwdHVy
ZSgpOwogI2VuZGlmCiAKICAgICAgICAgYXBwbHlGaWxlQ2hvb3NlclNldHRpbmdzKHNldHRpbmdz
KTsKLSAgICAgICAgY2hyb21lLT5ydW5PcGVuUGFuZWwoaW5wdXQtPmRvY3VtZW50KCkuZnJhbWUo
KSwgbV9maWxlQ2hvb3Nlcik7CisgICAgICAgIGNocm9tZS0+cnVuT3BlblBhbmVsKGlucHV0LmRv
Y3VtZW50KCkuZnJhbWUoKSwgbV9maWxlQ2hvb3Nlcik7CiAgICAgfQogCiAgICAgZXZlbnQtPnNl
dERlZmF1bHRIYW5kbGVkKCk7CkBAIC0yMTQsOCArMjE0LDcgQEAgdm9pZCBGaWxlSW5wdXRUeXBl
OjpoYW5kbGVET01BY3RpdmF0ZUV2ZQogCiBSZW5kZXJPYmplY3QqIEZpbGVJbnB1dFR5cGU6OmNy
ZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hJiBhcmVuYSwgUmVuZGVyU3R5bGUmKSBjb25zdAogewot
ICAgIEFTU0VSVChlbGVtZW50KCkpOyAvLyBGSVhNRTogZWxlbWVudCgpIHNob3VsZCByZXR1cm4g
YSByZWZlcmVuY2UuCi0gICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlckZpbGVVcGxvYWRDb250
cm9sKCplbGVtZW50KCkpOworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbChlbGVtZW50KCkpOwogfQogCiBib29sIEZpbGVJbnB1dFR5cGU6OmNhblNldFN0cmlu
Z1ZhbHVlKCkgY29uc3QKQEAgLTI2OCw3ICsyNjcsNyBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6OnNl
dFZhbHVlKGNvbnN0IFN0cmluCiB7CiAgICAgbV9maWxlTGlzdC0+Y2xlYXIoKTsKICAgICBtX2lj
b24uY2xlYXIoKTsKLSAgICBlbGVtZW50KCktPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBl
bGVtZW50KCkuc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogfQogCiBQYXNzUmVmUHRyPEZpbGVMaXN0
PiBGaWxlSW5wdXRUeXBlOjpjcmVhdGVGaWxlTGlzdChjb25zdCBWZWN0b3I8RmlsZUNob29zZXJG
aWxlSW5mbz4mIGZpbGVzKSBjb25zdApAQCAtMjgwLDcgKzI3OSw3IEBAIFBhc3NSZWZQdHI8Rmls
ZUxpc3Q+IEZpbGVJbnB1dFR5cGU6OmNyZWEKICAgICAvLyBJZiBhIGRpcmVjdG9yeSBpcyBiZWlu
ZyBzZWxlY3RlZCwgdGhlIFVJIGFsbG93cyBhIGRpcmVjdG9yeSB0byBiZSBjaG9zZW4KICAgICAv
LyBhbmQgdGhlIHBhdGhzIHByb3ZpZGVkIGhlcmUgc2hhcmUgYSByb290IGRpcmVjdG9yeSBzb21l
d2hlcmUgdXAgdGhlIHRyZWU7CiAgICAgLy8gd2Ugd2FudCB0byBzdG9yZSBvbmx5IHRoZSByZWxh
dGl2ZSBwYXRocyBmcm9tIHRoYXQgcG9pbnQuCi0gICAgaWYgKHNpemUgJiYgZWxlbWVudCgpLT5m
YXN0SGFzQXR0cmlidXRlKHdlYmtpdGRpcmVjdG9yeUF0dHIpKSB7CisgICAgaWYgKHNpemUgJiYg
ZWxlbWVudCgpLmZhc3RIYXNBdHRyaWJ1dGUod2Via2l0ZGlyZWN0b3J5QXR0cikpIHsKICAgICAg
ICAgLy8gRmluZCB0aGUgY29tbW9uIHJvb3QgcGF0aC4KICAgICAgICAgU3RyaW5nIHJvb3RQYXRo
ID0gZGlyZWN0b3J5TmFtZShmaWxlc1swXS5wYXRoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDE7IGkgPCBzaXplOyBpKyspIHsKQEAgLTMxMywyNCArMzEyLDI0IEBAIGJvb2wgRmlsZUlucHV0
VHlwZTo6aXNGaWxlVXBsb2FkKCkgY29uc3QKIAogdm9pZCBGaWxlSW5wdXRUeXBlOjpjcmVhdGVT
aGFkb3dTdWJ0cmVlKCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpLT5zaGFkb3dSb290KCkpOwot
ICAgIGVsZW1lbnQoKS0+dXNlckFnZW50U2hhZG93Um9vdCgpLT5hcHBlbmRDaGlsZChlbGVtZW50
KCktPm11bHRpcGxlKCkgPyBVcGxvYWRCdXR0b25FbGVtZW50OjpjcmVhdGVGb3JNdWx0aXBsZShl
bGVtZW50KCktPmRvY3VtZW50KCkpOiBVcGxvYWRCdXR0b25FbGVtZW50OjpjcmVhdGUoZWxlbWVu
dCgpLT5kb2N1bWVudCgpKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgQVNTRVJUKGVsZW1lbnQo
KS5zaGFkb3dSb290KCkpOworICAgIGVsZW1lbnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCktPmFw
cGVuZENoaWxkKGVsZW1lbnQoKS5tdWx0aXBsZSgpID8gVXBsb2FkQnV0dG9uRWxlbWVudDo6Y3Jl
YXRlRm9yTXVsdGlwbGUoZWxlbWVudCgpLmRvY3VtZW50KCkpOiBVcGxvYWRCdXR0b25FbGVtZW50
OjpjcmVhdGUoZWxlbWVudCgpLmRvY3VtZW50KCkpLCBJR05PUkVfRVhDRVBUSU9OKTsKIH0KIAog
dm9pZCBGaWxlSW5wdXRUeXBlOjpkaXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQoKQogewotICAgIEFT
U0VSVChlbGVtZW50KCktPnNoYWRvd1Jvb3QoKSk7Ci0gICAgVXBsb2FkQnV0dG9uRWxlbWVudCog
YnV0dG9uID0gc3RhdGljX2Nhc3Q8VXBsb2FkQnV0dG9uRWxlbWVudCo+KGVsZW1lbnQoKS0+dXNl
ckFnZW50U2hhZG93Um9vdCgpLT5maXJzdENoaWxkKCkpOworICAgIEFTU0VSVChlbGVtZW50KCku
c2hhZG93Um9vdCgpKTsKKyAgICBVcGxvYWRCdXR0b25FbGVtZW50KiBidXR0b24gPSBzdGF0aWNf
Y2FzdDxVcGxvYWRCdXR0b25FbGVtZW50Kj4oZWxlbWVudCgpLnVzZXJBZ2VudFNoYWRvd1Jvb3Qo
KS0+Zmlyc3RDaGlsZCgpKTsKICAgICBpZiAoYnV0dG9uKQotICAgICAgICBidXR0b24tPnNldEJv
b2xlYW5BdHRyaWJ1dGUoZGlzYWJsZWRBdHRyLCBlbGVtZW50KCktPmlzRGlzYWJsZWRGb3JtQ29u
dHJvbCgpKTsKKyAgICAgICAgYnV0dG9uLT5zZXRCb29sZWFuQXR0cmlidXRlKGRpc2FibGVkQXR0
ciwgZWxlbWVudCgpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKTsKIH0KIAogdm9pZCBGaWxlSW5w
dXRUeXBlOjptdWx0aXBsZUF0dHJpYnV0ZUNoYW5nZWQoKQogewotICAgIEFTU0VSVChlbGVtZW50
KCktPnNoYWRvd1Jvb3QoKSk7Ci0gICAgVXBsb2FkQnV0dG9uRWxlbWVudCogYnV0dG9uID0gc3Rh
dGljX2Nhc3Q8VXBsb2FkQnV0dG9uRWxlbWVudCo+KGVsZW1lbnQoKS0+dXNlckFnZW50U2hhZG93
Um9vdCgpLT5maXJzdENoaWxkKCkpOworICAgIEFTU0VSVChlbGVtZW50KCkuc2hhZG93Um9vdCgp
KTsKKyAgICBVcGxvYWRCdXR0b25FbGVtZW50KiBidXR0b24gPSBzdGF0aWNfY2FzdDxVcGxvYWRC
dXR0b25FbGVtZW50Kj4oZWxlbWVudCgpLnVzZXJBZ2VudFNoYWRvd1Jvb3QoKS0+Zmlyc3RDaGls
ZCgpKTsKICAgICBpZiAoYnV0dG9uKQotICAgICAgICBidXR0b24tPnNldFZhbHVlKGVsZW1lbnQo
KS0+bXVsdGlwbGUoKSA/IGZpbGVCdXR0b25DaG9vc2VNdWx0aXBsZUZpbGVzTGFiZWwoKSA6IGZp
bGVCdXR0b25DaG9vc2VGaWxlTGFiZWwoKSk7CisgICAgICAgIGJ1dHRvbi0+c2V0VmFsdWUoZWxl
bWVudCgpLm11bHRpcGxlKCkgPyBmaWxlQnV0dG9uQ2hvb3NlTXVsdGlwbGVGaWxlc0xhYmVsKCkg
OiBmaWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKCkpOwogfQogCiB2b2lkIEZpbGVJbnB1dFR5cGU6
OnJlcXVlc3RJY29uKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykKQEAgLTM2Myw3ICszNjIs
NyBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6OnNldEZpbGVzKFBhc3NSZWZQdHI8CiAgICAgaWYgKCFm
aWxlcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlu
cHV0ID0gZWxlbWVudCgpOworICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1dCA9ICZl
bGVtZW50KCk7CiAKICAgICBib29sIHBhdGhzQ2hhbmdlZCA9IGZhbHNlOwogICAgIGlmIChmaWxl
cy0+bGVuZ3RoKCkgIT0gbV9maWxlTGlzdC0+bGVuZ3RoKCkpCkBAIC00MzAsOCArNDI5LDggQEAg
dm9pZCBGaWxlSW5wdXRUeXBlOjp1cGRhdGVSZW5kZXJpbmcoUGFzcwogICAgICAgICByZXR1cm47
CiAKICAgICBtX2ljb24gPSBpY29uOwotICAgIGlmIChlbGVtZW50KCktPnJlbmRlcmVyKCkpCi0g
ICAgICAgIGVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+cmVwYWludCgpOworICAgIGlmIChlbGVtZW50
KCkucmVuZGVyZXIoKSkKKyAgICAgICAgZWxlbWVudCgpLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsK
IH0KIAogYm9vbCBGaWxlSW5wdXRUeXBlOjpyZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IERyYWdE
YXRhKiBkcmFnRGF0YSkKQEAgLTQ0MSw3ICs0NDAsNyBAQCBib29sIEZpbGVJbnB1dFR5cGU6OnJl
Y2VpdmVEcm9wcGVkRmlsZXMoCiAgICAgaWYgKHBhdGhzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBlbGVtZW50KCk7Cisg
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSAmZWxlbWVudCgpOwogI2lmIEVOQUJMRShESVJF
Q1RPUllfVVBMT0FEKQogICAgIGlmIChpbnB1dC0+ZmFzdEhhc0F0dHJpYnV0ZSh3ZWJraXRkaXJl
Y3RvcnlBdHRyKSkgewogICAgICAgICByZWNlaXZlRHJvcEZvckRpcmVjdG9yeVVwbG9hZChwYXRo
cyk7CkBAIC00ODQsNyArNDgzLDcgQEAgU3RyaW5nIEZpbGVJbnB1dFR5cGU6OmRlZmF1bHRUb29s
VGlwKCkgYwogICAgIEZpbGVMaXN0KiBmaWxlTGlzdCA9IG1fZmlsZUxpc3QuZ2V0KCk7CiAgICAg
dW5zaWduZWQgbGlzdFNpemUgPSBmaWxlTGlzdC0+bGVuZ3RoKCk7CiAgICAgaWYgKCFsaXN0U2l6
ZSkgewotICAgICAgICBpZiAoZWxlbWVudCgpLT5tdWx0aXBsZSgpKQorICAgICAgICBpZiAoZWxl
bWVudCgpLm11bHRpcGxlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmlsZUJ1dHRvbk5vRmlsZXNT
ZWxlY3RlZExhYmVsKCk7CiAgICAgICAgIHJldHVybiBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRM
YWJlbCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5oCShyZXZp
c2lvbiAxNTU5MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDQsMTMgKzQ0LDEzIEBAIGNsYXNzIEZpbGVMaXN0OwogCiBjbGFzcyBG
aWxlSW5wdXRUeXBlIDogcHVibGljIEJhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlLCBwcml2
YXRlIEZpbGVDaG9vc2VyQ2xpZW50LCBwcml2YXRlIEZpbGVJY29uTG9hZGVyQ2xpZW50IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGU+IGNyZWF0ZShIVE1MSW5wdXRF
bGVtZW50Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlPiBjcmVhdGUoSFRNTElu
cHV0RWxlbWVudCYpOwogICAgIHZpcnR1YWwgfkZpbGVJbnB1dFR5cGUoKTsKIAogICAgIHN0YXRp
YyBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4gZmlsZXNGcm9tRm9ybUNvbnRyb2xTdGF0ZShj
b25zdCBGb3JtQ29udHJvbFN0YXRlJik7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgRmlsZUlu
cHV0VHlwZShIVE1MSW5wdXRFbGVtZW50Kik7CisgICAgZXhwbGljaXQgRmlsZUlucHV0VHlwZShI
VE1MSW5wdXRFbGVtZW50Jik7CiAKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9y
bUNvbnRyb2xUeXBlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBGb3JtQ29udHJvbFN0
YXRlIHNhdmVGb3JtQ29udHJvbFN0YXRlKCkgY29uc3QgT1ZFUlJJREU7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NTkwOCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzMyw3ICsxMzMsNyBAQCBIVE1MSW5wdXRFbGVtZW50OjpIVE1MSW5wdXRFbGVtZW50KGNvbnN0
CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICAsIG1faGFzVG91Y2hFdmVudEhhbmRsZXIo
ZmFsc2UpCiAjZW5kaWYKLSAgICAsIG1faW5wdXRUeXBlKElucHV0VHlwZTo6Y3JlYXRlVGV4dCh0
aGlzKSkKKyAgICAsIG1faW5wdXRUeXBlKElucHV0VHlwZTo6Y3JlYXRlVGV4dCgqdGhpcykpCiB7
CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoaW5wdXRUYWcpIHx8IGhhc1RhZ05hbWUoaXNpbmRleFRh
ZykpOwogICAgIHNldEhhc0N1c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygpOwpAQCAtNDU3LDcg
KzQ1Nyw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHIKIAogdm9p
ZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKCkKIHsKLSAgICBPd25QdHI8SW5wdXRUeXBl
PiBuZXdUeXBlID0gSW5wdXRUeXBlOjpjcmVhdGUodGhpcywgZmFzdEdldEF0dHJpYnV0ZSh0eXBl
QXR0cikpOworICAgIE93blB0cjxJbnB1dFR5cGU+IG5ld1R5cGUgPSBJbnB1dFR5cGU6OmNyZWF0
ZSgqdGhpcywgZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0cikpOwogICAgIGJvb2wgaGFkVHlwZSA9
IG1faGFzVHlwZTsKICAgICBtX2hhc1R5cGUgPSB0cnVlOwogICAgIGlmIChtX2lucHV0VHlwZS0+
Zm9ybUNvbnRyb2xUeXBlKCkgPT0gbmV3VHlwZS0+Zm9ybUNvbnRyb2xUeXBlKCkpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hpZGRlbklucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IaWRkZW5JbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAxNTU5MDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hpZGRlbklucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogCi1QYXNzT3duUHRyPElucHV0VHlwZT4gSGlkZGVuSW5wdXRUeXBlOjpjcmVh
dGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKK1Bhc3NPd25QdHI8SW5wdXRUeXBlPiBIaWRk
ZW5JbnB1dFR5cGU6OmNyZWF0ZShIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KQogewogICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgSGlkZGVuSW5wdXRUeXBlKGVsZW1lbnQpKTsKIH0KQEAgLTU5LDEy
ICs1OSwxMiBAQCBGb3JtQ29udHJvbFN0YXRlIEhpZGRlbklucHV0VHlwZTo6c2F2ZUZvCiAgICAg
Ly8gY29udHJvbHMgY3JlYXRlIGJ5IGNyZWF0ZUVsZW1lbnQoKSBvciBjbG9uZU5vZGUoKS4gSXQn
cyBvayBmb3IKICAgICAvLyBub3cgYmVjYXVzZSB3ZSByZXN0b3JlIHZhbHVlcyBvbmx5IHRvIGZv
cm0gY29udHJvbHMgY3JlYXRlZCBieQogICAgIC8vIHBhcnNpbmcuCi0gICAgcmV0dXJuIGVsZW1l
bnQoKS0+dmFsdWVBdHRyaWJ1dGVXYXNVcGRhdGVkQWZ0ZXJQYXJzaW5nKCkgPyBGb3JtQ29udHJv
bFN0YXRlKGVsZW1lbnQoKS0+dmFsdWUoKSkgOiBGb3JtQ29udHJvbFN0YXRlKCk7CisgICAgcmV0
dXJuIGVsZW1lbnQoKS52YWx1ZUF0dHJpYnV0ZVdhc1VwZGF0ZWRBZnRlclBhcnNpbmcoKSA/IEZv
cm1Db250cm9sU3RhdGUoZWxlbWVudCgpLnZhbHVlKCkpIDogRm9ybUNvbnRyb2xTdGF0ZSgpOwog
fQogCiB2b2lkIEhpZGRlbklucHV0VHlwZTo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUoY29uc3Qg
Rm9ybUNvbnRyb2xTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgZWxlbWVudCgpLT5zZXRBdHRyaWJ1dGUo
dmFsdWVBdHRyLCBzdGF0ZVswXSk7CisgICAgZWxlbWVudCgpLnNldEF0dHJpYnV0ZSh2YWx1ZUF0
dHIsIHN0YXRlWzBdKTsKIH0KIAogYm9vbCBIaWRkZW5JbnB1dFR5cGU6OnN1cHBvcnRzVmFsaWRh
dGlvbigpIGNvbnN0CkBAIC05NCw3ICs5NCw3IEBAIGJvb2wgSGlkZGVuSW5wdXRUeXBlOjpzdG9y
ZXNWYWx1ZVNlcGFyYXQKIAogdm9pZCBIaWRkZW5JbnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0
cmluZyYgc2FuaXRpemVkVmFsdWUsIGJvb2wsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IpCiB7Ci0g
ICAgZWxlbWVudCgpLT5zZXRBdHRyaWJ1dGUodmFsdWVBdHRyLCBzYW5pdGl6ZWRWYWx1ZSk7Cisg
ICAgZWxlbWVudCgpLnNldEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIHNhbml0aXplZFZhbHVlKTsKIH0K
IAogYm9vbCBIaWRkZW5JbnB1dFR5cGU6OmlzSGlkZGVuVHlwZSgpIGNvbnN0CkBAIC0xMDQsOCAr
MTA0LDggQEAgYm9vbCBIaWRkZW5JbnB1dFR5cGU6OmlzSGlkZGVuVHlwZSgpIGNvbgogCiBib29s
IEhpZGRlbklucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiBlbmNvZGluZywg
Ym9vbCBpc011bHRpcGFydEZvcm0pIGNvbnN0CiB7Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGVsZW1lbnQoKS0+bmFtZSgpLCAiX2NoYXJzZXRfIikpIHsKLSAgICAgICAgZW5jb2RpbmcuYXBw
ZW5kRGF0YShlbGVtZW50KCktPm5hbWUoKSwgU3RyaW5nKGVuY29kaW5nLmVuY29kaW5nKCkubmFt
ZSgpKSk7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVsZW1lbnQoKS5uYW1lKCksICJfY2hh
cnNldF8iKSkgeworICAgICAgICBlbmNvZGluZy5hcHBlbmREYXRhKGVsZW1lbnQoKS5uYW1lKCks
IFN0cmluZyhlbmNvZGluZy5lbmNvZGluZygpLm5hbWUoKSkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgcmV0dXJuIElucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoZW5jb2Rpbmcs
IGlzTXVsdGlwYXJ0Rm9ybSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hpZGRlbklucHV0
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSGlkZGVuSW5wdXRUeXBl
LmgJKHJldmlzaW9uIDE1NTkwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSGlkZGVuSW5wdXRU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEwICszNywxMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEhpZGRlbklucHV0VHlwZSA6IHB1YmxpYyBJbnB1dFR5cGUgewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElucHV0VHlwZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1l
bnQqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGU+IGNyZWF0ZShIVE1MSW5wdXRF
bGVtZW50Jik7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgSGlkZGVuSW5wdXRUeXBlKEhUTUxJ
bnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogSW5wdXRUeXBlKGVsZW1lbnQpIHsgfQorICAgIGV4cGxp
Y2l0IEhpZGRlbklucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KSA6IElucHV0VHlw
ZShlbGVtZW50KSB7IH0KICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRy
b2xUeXBlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBGb3JtQ29udHJvbFN0YXRlIHNh
dmVGb3JtQ29udHJvbFN0YXRlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHJl
c3RvcmVGb3JtQ29udHJvbFN0YXRlKGNvbnN0IEZvcm1Db250cm9sU3RhdGUmKSBPVkVSUklERTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAxNTU5
MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlSW5wdXRUeXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzksMTIgKzM5LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKIAotaW5saW5lIEltYWdlSW5wdXRUeXBlOjpJbWFnZUlucHV0VHlw
ZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQoraW5saW5lIEltYWdlSW5wdXRUeXBlOjpJbWFn
ZUlucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KQogICAgIDogQmFzZUJ1dHRvbklu
cHV0VHlwZShlbGVtZW50KQogewogfQogCi1QYXNzT3duUHRyPElucHV0VHlwZT4gSW1hZ2VJbnB1
dFR5cGU6OmNyZWF0ZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQorUGFzc093blB0cjxJbnB1
dFR5cGU+IEltYWdlSW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkK
IHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEltYWdlSW5wdXRUeXBlKGVsZW1lbnQpKTsKIH0K
QEAgLTYxLDkgKzYxLDkgQEAgYm9vbCBJbWFnZUlucHV0VHlwZTo6aXNGb3JtRGF0YUFwcGVuZGFi
bAogCiBib29sIEltYWdlSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmIGVu
Y29kaW5nLCBib29sKSBjb25zdAogewotICAgIGlmICghZWxlbWVudCgpLT5pc0FjdGl2YXRlZFN1
Ym1pdCgpKQorICAgIGlmICghZWxlbWVudCgpLmlzQWN0aXZhdGVkU3VibWl0KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBlbGVtZW50KCkt
Pm5hbWUoKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBlbGVtZW50KCkubmFtZSgp
OwogICAgIGlmIChuYW1lLmlzRW1wdHkoKSkgewogICAgICAgICBlbmNvZGluZy5hcHBlbmREYXRh
KCJ4IiwgbV9jbGlja0xvY2F0aW9uLngoKSk7CiAgICAgICAgIGVuY29kaW5nLmFwcGVuZERhdGEo
InkiLCBtX2NsaWNrTG9jYXRpb24ueSgpKTsKQEAgLTc1LDggKzc1LDggQEAgYm9vbCBJbWFnZUlu
cHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRm9ybQogICAgIGVuY29kaW5nLmFwcGVuZERhdGEobmFt
ZSArIGRvdFhTdHJpbmcsIG1fY2xpY2tMb2NhdGlvbi54KCkpOwogICAgIGVuY29kaW5nLmFwcGVu
ZERhdGEobmFtZSArIGRvdFlTdHJpbmcsIG1fY2xpY2tMb2NhdGlvbi55KCkpOwogCi0gICAgaWYg
KCFlbGVtZW50KCktPnZhbHVlKCkuaXNFbXB0eSgpKQotICAgICAgICBlbmNvZGluZy5hcHBlbmRE
YXRhKG5hbWUsIGVsZW1lbnQoKS0+dmFsdWUoKSk7CisgICAgaWYgKCFlbGVtZW50KCkudmFsdWUo
KS5pc0VtcHR5KCkpCisgICAgICAgIGVuY29kaW5nLmFwcGVuZERhdGEobmFtZSwgZWxlbWVudCgp
LnZhbHVlKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC04Nyw3ICs4Nyw3IEBAIGJvb2wg
SW1hZ2VJbnB1dFR5cGU6OnN1cHBvcnRzVmFsaWRhdGlvbigKIAogdm9pZCBJbWFnZUlucHV0VHlw
ZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmVudChFdmVudCogZXZlbnQpCiB7Ci0gICAgUmVmUHRyPEhU
TUxJbnB1dEVsZW1lbnQ+IGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCk7CisgICAgUmVmUHRyPEhU
TUxJbnB1dEVsZW1lbnQ+IGVsZW1lbnQgPSAmdGhpcy0+ZWxlbWVudCgpOwogICAgIGlmIChlbGVt
ZW50LT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSB8fCAhZWxlbWVudC0+Zm9ybSgpKQogICAgICAg
ICByZXR1cm47CiAgICAgZWxlbWVudC0+c2V0QWN0aXZhdGVkU3VibWl0KHRydWUpOwpAQCAtMTAz
LDE0ICsxMDMsMTQgQEAgdm9pZCBJbWFnZUlucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdgog
CiBSZW5kZXJPYmplY3QqIEltYWdlSW5wdXRUeXBlOjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVu
YSYgYXJlbmEsIFJlbmRlclN0eWxlJikgY29uc3QKIHsKLSAgICBSZW5kZXJJbWFnZSogaW1hZ2Ug
PSBuZXcgKGFyZW5hKSBSZW5kZXJJbWFnZShlbGVtZW50KCkpOworICAgIFJlbmRlckltYWdlKiBp
bWFnZSA9IG5ldyAoYXJlbmEpIFJlbmRlckltYWdlKCZlbGVtZW50KCkpOwogICAgIGltYWdlLT5z
ZXRJbWFnZVJlc291cmNlKFJlbmRlckltYWdlUmVzb3VyY2U6OmNyZWF0ZSgpKTsKICAgICByZXR1
cm4gaW1hZ2U7CiB9CiAKIHZvaWQgSW1hZ2VJbnB1dFR5cGU6OmFsdEF0dHJpYnV0ZUNoYW5nZWQo
KQogewotICAgIFJlbmRlckltYWdlKiBpbWFnZSA9IHRvUmVuZGVySW1hZ2UoZWxlbWVudCgpLT5y
ZW5kZXJlcigpKTsKKyAgICBSZW5kZXJJbWFnZSogaW1hZ2UgPSB0b1JlbmRlckltYWdlKGVsZW1l
bnQoKS5yZW5kZXJlcigpKTsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47CiAgICAg
aW1hZ2UtPnVwZGF0ZUFsdFRleHQoKTsKQEAgLTExOCwxOSArMTE4LDE5IEBAIHZvaWQgSW1hZ2VJ
bnB1dFR5cGU6OmFsdEF0dHJpYnV0ZUNoYW5nZWQKIAogdm9pZCBJbWFnZUlucHV0VHlwZTo6c3Jj
QXR0cmlidXRlQ2hhbmdlZCgpCiB7Ci0gICAgaWYgKCFlbGVtZW50KCktPnJlbmRlcmVyKCkpCisg
ICAgaWYgKCFlbGVtZW50KCkucmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGVsZW1l
bnQoKS0+aW1hZ2VMb2FkZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnRJZ25vcmluZ1ByZXZpb3VzRXJy
b3IoKTsKKyAgICBlbGVtZW50KCkuaW1hZ2VMb2FkZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnRJZ25v
cmluZ1ByZXZpb3VzRXJyb3IoKTsKIH0KIAogdm9pZCBJbWFnZUlucHV0VHlwZTo6YXR0YWNoKCkK
IHsKICAgICBCYXNlQnV0dG9uSW5wdXRUeXBlOjphdHRhY2goKTsKIAotICAgIEhUTUxJbWFnZUxv
YWRlciogaW1hZ2VMb2FkZXIgPSBlbGVtZW50KCktPmltYWdlTG9hZGVyKCk7CisgICAgSFRNTElt
YWdlTG9hZGVyKiBpbWFnZUxvYWRlciA9IGVsZW1lbnQoKS5pbWFnZUxvYWRlcigpOwogICAgIGlt
YWdlTG9hZGVyLT51cGRhdGVGcm9tRWxlbWVudCgpOwogCi0gICAgUmVuZGVySW1hZ2UqIHJlbmRl
cmVyID0gdG9SZW5kZXJJbWFnZShlbGVtZW50KCktPnJlbmRlcmVyKCkpOworICAgIFJlbmRlcklt
YWdlKiByZW5kZXJlciA9IHRvUmVuZGVySW1hZ2UoZWxlbWVudCgpLnJlbmRlcmVyKCkpOwogICAg
IGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTczLDcgKzE3Myw3IEBAIGJv
b2wgSW1hZ2VJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RIZWlnaHQKIAogdW5zaWduZWQgSW1hZ2VJ
bnB1dFR5cGU6OmhlaWdodCgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+
IGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCk7CisgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+
IGVsZW1lbnQgPSAmdGhpcy0+ZWxlbWVudCgpOwogCiAgICAgaWYgKCFlbGVtZW50LT5yZW5kZXJl
cigpKSB7CiAgICAgICAgIC8vIENoZWNrIHRoZSBhdHRyaWJ1dGUgZmlyc3QgZm9yIGFuIGV4cGxp
Y2l0IHBpeGVsIHZhbHVlLgpAQCAtMTk3LDcgKzE5Nyw3IEBAIHVuc2lnbmVkIEltYWdlSW5wdXRU
eXBlOjpoZWlnaHQoKSBjb25zdAogCiB1bnNpZ25lZCBJbWFnZUlucHV0VHlwZTo6d2lkdGgoKSBj
b25zdAogewotICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBlbGVtZW50ID0gdGhpcy0+ZWxl
bWVudCgpOworICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBlbGVtZW50ID0gJnRoaXMtPmVs
ZW1lbnQoKTsKIAogICAgIGlmICghZWxlbWVudC0+cmVuZGVyZXIoKSkgewogICAgICAgICAvLyBD
aGVjayB0aGUgYXR0cmlidXRlIGZpcnN0IGZvciBhbiBleHBsaWNpdCBwaXhlbCB2YWx1ZS4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlSW5wdXRUeXBlLmgJKHJldmlzaW9uIDE1NTkwOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDAsMTAgKzQwLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW1hZ2VJbnB1dFR5
cGUgOiBwdWJsaWMgQmFzZUJ1dHRvbklucHV0VHlwZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8SW5wdXRUeXBlPiBjcmVhdGUoSFRNTElucHV0RWxlbWVudCopOworICAgIHN0YXRp
YyBQYXNzT3duUHRyPElucHV0VHlwZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQmKTsKIAogcHJp
dmF0ZToKLSAgICBleHBsaWNpdCBJbWFnZUlucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50Kik7Cisg
ICAgZXhwbGljaXQgSW1hZ2VJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCYpOwogICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdCBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtRGF0YUFwcGVuZGFibGUoKSBjb25zdCBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCkgY29u
c3QgT1ZFUlJJREU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAx
NTU5MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg0LDcgKzg0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLXR5cGVkZWYgUGFzc093blB0cjxJ
bnB1dFR5cGU+ICgqSW5wdXRUeXBlRmFjdG9yeUZ1bmN0aW9uKShIVE1MSW5wdXRFbGVtZW50Kik7
Cit0eXBlZGVmIFBhc3NPd25QdHI8SW5wdXRUeXBlPiAoKklucHV0VHlwZUZhY3RvcnlGdW5jdGlv
bikoSFRNTElucHV0RWxlbWVudCYpOwogdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZywgSW5w
dXRUeXBlRmFjdG9yeUZ1bmN0aW9uLCBDYXNlRm9sZGluZ0hhc2g+IElucHV0VHlwZUZhY3RvcnlN
YXA7CiAKIHN0YXRpYyBQYXNzT3duUHRyPElucHV0VHlwZUZhY3RvcnlNYXA+IGNyZWF0ZUlucHV0
VHlwZUZhY3RvcnlNYXAoKQpAQCAtMTM2LDE2ICsxMzYsMTYgQEAgc3RhdGljIFBhc3NPd25QdHI8
SW5wdXRUeXBlRmFjdG9yeU1hcD4gYwogICAgIHJldHVybiBtYXAucmVsZWFzZSgpOwogfQogCi1Q
YXNzT3duUHRyPElucHV0VHlwZT4gSW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCog
ZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlTmFtZSkKK1Bhc3NPd25QdHI8SW5wdXRU
eXBlPiBJbnB1dFR5cGU6OmNyZWF0ZShIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50LCBjb25zdCBB
dG9taWNTdHJpbmcmIHR5cGVOYW1lKQogewogICAgIHN0YXRpYyBjb25zdCBJbnB1dFR5cGVGYWN0
b3J5TWFwKiBmYWN0b3J5TWFwID0gY3JlYXRlSW5wdXRUeXBlRmFjdG9yeU1hcCgpLmxlYWtQdHIo
KTsKLSAgICBQYXNzT3duUHRyPElucHV0VHlwZT4gKCpmYWN0b3J5KShIVE1MSW5wdXRFbGVtZW50
KikgPSB0eXBlTmFtZS5pc0VtcHR5KCkgPyAwIDogZmFjdG9yeU1hcC0+Z2V0KHR5cGVOYW1lKTsK
KyAgICBQYXNzT3duUHRyPElucHV0VHlwZT4gKCpmYWN0b3J5KShIVE1MSW5wdXRFbGVtZW50Jikg
PSB0eXBlTmFtZS5pc0VtcHR5KCkgPyAwIDogZmFjdG9yeU1hcC0+Z2V0KHR5cGVOYW1lKTsKICAg
ICBpZiAoIWZhY3RvcnkpCiAgICAgICAgIGZhY3RvcnkgPSBUZXh0SW5wdXRUeXBlOjpjcmVhdGU7
CiAgICAgcmV0dXJuIGZhY3RvcnkoZWxlbWVudCk7CiB9CiAKLVBhc3NPd25QdHI8SW5wdXRUeXBl
PiBJbnB1dFR5cGU6OmNyZWF0ZVRleHQoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKK1Bhc3NP
d25QdHI8SW5wdXRUeXBlPiBJbnB1dFR5cGU6OmNyZWF0ZVRleHQoSFRNTElucHV0RWxlbWVudCYg
ZWxlbWVudCkKIHsKICAgICByZXR1cm4gVGV4dElucHV0VHlwZTo6Y3JlYXRlKGVsZW1lbnQpOwog
fQpAQCAtMTU2LDcgKzE1Niw3IEBAIElucHV0VHlwZTo6fklucHV0VHlwZSgpCiAKIGJvb2wgSW5w
dXRUeXBlOjp0aGVtZVN1cHBvcnRzRGF0YUxpc3RVSShJbnB1dFR5cGUqIHR5cGUpCiB7Ci0gICAg
RG9jdW1lbnQmIGRvY3VtZW50ID0gdHlwZS0+ZWxlbWVudCgpLT5kb2N1bWVudCgpOworICAgIERv
Y3VtZW50JiBkb2N1bWVudCA9IHR5cGUtPmVsZW1lbnQoKS5kb2N1bWVudCgpOwogICAgIFJlZlB0
cjxSZW5kZXJUaGVtZT4gdGhlbWUgPSBkb2N1bWVudC5wYWdlKCkgPyBkb2N1bWVudC5wYWdlKCkt
PnRoZW1lKCkgOiBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCk7CiAgICAgcmV0dXJuIHRoZW1l
LT5zdXBwb3J0c0RhdGFMaXN0VUkodHlwZS0+Zm9ybUNvbnRyb2xUeXBlKCkpOwogfQpAQCAtMTgz
LDI3ICsxODMsMjcgQEAgYm9vbCBJbnB1dFR5cGU6OnNob3VsZFNhdmVBbmRSZXN0b3JlRm9ybQog
CiBGb3JtQ29udHJvbFN0YXRlIElucHV0VHlwZTo6c2F2ZUZvcm1Db250cm9sU3RhdGUoKSBjb25z
dAogewotICAgIFN0cmluZyBjdXJyZW50VmFsdWUgPSBlbGVtZW50KCktPnZhbHVlKCk7Ci0gICAg
aWYgKGN1cnJlbnRWYWx1ZSA9PSBlbGVtZW50KCktPmRlZmF1bHRWYWx1ZSgpKQorICAgIFN0cmlu
ZyBjdXJyZW50VmFsdWUgPSBlbGVtZW50KCkudmFsdWUoKTsKKyAgICBpZiAoY3VycmVudFZhbHVl
ID09IGVsZW1lbnQoKS5kZWZhdWx0VmFsdWUoKSkKICAgICAgICAgcmV0dXJuIEZvcm1Db250cm9s
U3RhdGUoKTsKICAgICByZXR1cm4gRm9ybUNvbnRyb2xTdGF0ZShjdXJyZW50VmFsdWUpOwogfQog
CiB2b2lkIElucHV0VHlwZTo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUoY29uc3QgRm9ybUNvbnRy
b2xTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgZWxlbWVudCgpLT5zZXRWYWx1ZShzdGF0ZVswXSk7Cisg
ICAgZWxlbWVudCgpLnNldFZhbHVlKHN0YXRlWzBdKTsKIH0KIAogYm9vbCBJbnB1dFR5cGU6Omlz
Rm9ybURhdGFBcHBlbmRhYmxlKCkgY29uc3QKIHsKICAgICAvLyBUaGVyZSBpcyBubyBmb3JtIGRh
dGEgdW5sZXNzIHRoZXJlJ3MgYSBuYW1lIGZvciBub24taW1hZ2UgdHlwZXMuCi0gICAgcmV0dXJu
ICFlbGVtZW50KCktPm5hbWUoKS5pc0VtcHR5KCk7CisgICAgcmV0dXJuICFlbGVtZW50KCkubmFt
ZSgpLmlzRW1wdHkoKTsKIH0KIAogYm9vbCBJbnB1dFR5cGU6OmFwcGVuZEZvcm1EYXRhKEZvcm1E
YXRhTGlzdCYgZW5jb2RpbmcsIGJvb2wpIGNvbnN0CiB7CiAgICAgLy8gQWx3YXlzIHN1Y2Nlc3Nm
dWwuCi0gICAgZW5jb2RpbmcuYXBwZW5kRGF0YShlbGVtZW50KCktPm5hbWUoKSwgZWxlbWVudCgp
LT52YWx1ZSgpKTsKKyAgICBlbmNvZGluZy5hcHBlbmREYXRhKGVsZW1lbnQoKS5uYW1lKCksIGVs
ZW1lbnQoKS52YWx1ZSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzA5LDcgKzMwOSw3
IEBAIGRvdWJsZSBJbnB1dFR5cGU6Om1heGltdW0oKSBjb25zdAogCiBib29sIElucHV0VHlwZTo6
c2l6ZVNob3VsZEluY2x1ZGVEZWNvcmF0aW9uKGludCwgaW50JiBwcmVmZXJyZWRTaXplKSBjb25z
dAogewotICAgIHByZWZlcnJlZFNpemUgPSBlbGVtZW50KCktPnNpemUoKTsKKyAgICBwcmVmZXJy
ZWRTaXplID0gZWxlbWVudCgpLnNpemUoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTM3
NCw3ICszNzQsNyBAQCBTdHJpbmcgSW5wdXRUeXBlOjp2YWx1ZU1pc3NpbmdUZXh0KCkgY29uCiAK
IFN0cmluZyBJbnB1dFR5cGU6OnZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3QKIHsKLSAgICBjb25z
dCBTdHJpbmcgdmFsdWUgPSBlbGVtZW50KCktPnZhbHVlKCk7CisgICAgU3RyaW5nIHZhbHVlID0g
ZWxlbWVudCgpLnZhbHVlKCk7CiAKICAgICAvLyBUaGUgb3JkZXIgb2YgdGhlIGZvbGxvd2luZyBj
aGVja3MgaXMgbWVhbmluZ2Z1bC4gZS5nLiBXZSdkIGxpa2UgdG8gc2hvdyB0aGUKICAgICAvLyBi
YWRJbnB1dCBtZXNzYWdlIGV2ZW4gaWYgdGhlIGNvbnRyb2wgaGFzIG90aGVyIHZhbGlkYXRpb24g
ZXJyb3JzLgpAQCAtMzkwLDggKzM5MCw4IEBAIFN0cmluZyBJbnB1dFR5cGU6OnZhbGlkYXRpb25N
ZXNzYWdlKCkgY28KICAgICBpZiAocGF0dGVybk1pc21hdGNoKHZhbHVlKSkKICAgICAgICAgcmV0
dXJuIHZhbGlkYXRpb25NZXNzYWdlUGF0dGVybk1pc21hdGNoVGV4dCgpOwogCi0gICAgaWYgKGVs
ZW1lbnQoKS0+dG9vTG9uZygpKQotICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUb29M
b25nVGV4dChudW1HcmFwaGVtZUNsdXN0ZXJzKHZhbHVlKSwgZWxlbWVudCgpLT5tYXhMZW5ndGgo
KSk7CisgICAgaWYgKGVsZW1lbnQoKS50b29Mb25nKCkpCisgICAgICAgIHJldHVybiB2YWxpZGF0
aW9uTWVzc2FnZVRvb0xvbmdUZXh0KG51bUdyYXBoZW1lQ2x1c3RlcnModmFsdWUpLCBlbGVtZW50
KCkubWF4TGVuZ3RoKCkpOwogCiAgICAgaWYgKCFpc1N0ZXBwYWJsZSgpKQogICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKQEAgLTQ2MSwxNyArNDYxLDE3IEBAIGJvb2wgSW5wdXRUeXBlOjpz
aG91bGRTdWJtaXRJbXBsaWNpdGx5KEUKIAogUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IElu
cHV0VHlwZTo6Zm9ybUZvclN1Ym1pc3Npb24oKSBjb25zdAogewotICAgIHJldHVybiBlbGVtZW50
KCktPmZvcm0oKTsKKyAgICByZXR1cm4gZWxlbWVudCgpLmZvcm0oKTsKIH0KIAogUmVuZGVyT2Jq
ZWN0KiBJbnB1dFR5cGU6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hJiwgUmVuZGVyU3R5bGUm
IHN0eWxlKSBjb25zdAogewotICAgIHJldHVybiBSZW5kZXJPYmplY3Q6OmNyZWF0ZU9iamVjdCgq
ZWxlbWVudCgpLCBzdHlsZSk7CisgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6Y3JlYXRlT2JqZWN0
KGVsZW1lbnQoKSwgc3R5bGUpOwogfQogCiB2b2lkIElucHV0VHlwZTo6Ymx1cigpCiB7Ci0gICAg
ZWxlbWVudCgpLT5kZWZhdWx0Qmx1cigpOworICAgIGVsZW1lbnQoKS5kZWZhdWx0Qmx1cigpOwog
fQogCiB2b2lkIElucHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSgpCkBAIC00ODAsNyArNDgw
LDcgQEAgdm9pZCBJbnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUoKQogCiB2b2lkIElucHV0
VHlwZTo6ZGVzdHJveVNoYWRvd1N1YnRyZWUoKQogewotICAgIFNoYWRvd1Jvb3QqIHJvb3QgPSBl
bGVtZW50KCktPnVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKKyAgICBTaGFkb3dSb290KiByb290ID0g
ZWxlbWVudCgpLnVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKICAgICBpZiAoIXJvb3QpCiAgICAgICAg
IHJldHVybjsKIApAQCAtNTEyLDE0ICs1MTIsMTQgQEAgU3RyaW5nIElucHV0VHlwZTo6c2VyaWFs
aXplKGNvbnN0IERlY2ltYQogCiB2b2lkIElucHV0VHlwZTo6ZGlzcGF0Y2hTaW11bGF0ZWRDbGlj
a0lmQWN0aXZlKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAogewotICAgIGlmIChlbGVtZW50
KCktPmFjdGl2ZSgpKQotICAgICAgICBlbGVtZW50KCktPmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2so
ZXZlbnQpOworICAgIGlmIChlbGVtZW50KCkuYWN0aXZlKCkpCisgICAgICAgIGVsZW1lbnQoKS5k
aXNwYXRjaFNpbXVsYXRlZENsaWNrKGV2ZW50KTsKICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKIH0KIAogQ2hyb21lKiBJbnB1dFR5cGU6OmNocm9tZSgpIGNvbnN0CiB7Ci0gICAgaWYg
KFBhZ2UqIHBhZ2UgPSBlbGVtZW50KCktPmRvY3VtZW50KCkucGFnZSgpKQorICAgIGlmIChQYWdl
KiBwYWdlID0gZWxlbWVudCgpLmRvY3VtZW50KCkucGFnZSgpKQogICAgICAgICByZXR1cm4gJnBh
Z2UtPmNocm9tZSgpOwogICAgIHJldHVybiAwOwogfQpAQCAtNTM2LDEyICs1MzYsMTIgQEAgYm9v
bCBJbnB1dFR5cGU6Omhhc0N1c3RvbUZvY3VzTG9naWMoKSBjbwogCiBib29sIElucHV0VHlwZTo6
aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZWxlbWVudCgpLT5pc1RleHRGb3JtQ29udHJvbEtleWJvYXJkRm9jdXNhYmxlKGV2ZW50
KTsKKyAgICByZXR1cm4gZWxlbWVudCgpLmlzVGV4dEZvcm1Db250cm9sS2V5Ym9hcmRGb2N1c2Fi
bGUoZXZlbnQpOwogfQogCiBib29sIElucHV0VHlwZTo6aXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+aXNUZXh0Rm9ybUNvbnRyb2xNb3VzZUZvY3VzYWJs
ZSgpOworICAgIHJldHVybiBlbGVtZW50KCkuaXNUZXh0Rm9ybUNvbnRyb2xNb3VzZUZvY3VzYWJs
ZSgpOwogfQogCiBib29sIElucHV0VHlwZTo6c2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdApA
QCAtNTU5LDcgKzU1OSw3IEBAIHZvaWQgSW5wdXRUeXBlOjpoYW5kbGVCbHVyRXZlbnQoKQogCiB2
b2lkIElucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9uKGJvb2wpCiB7Ci0gICAgZWxlbWVudCgpLT5m
b2N1cyhmYWxzZSk7CisgICAgZWxlbWVudCgpLmZvY3VzKGZhbHNlKTsKIH0KIAogdm9pZCBJbnB1
dFR5cGU6OmFkZFNlYXJjaFJlc3VsdCgpCkBAIC02NTYsMTcgKzY1NiwxNyBAQCBib29sIElucHV0
VHlwZTo6c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BCiAKIHZvaWQgSW5wdXRUeXBlOjpzZXRWYWx1
ZShjb25zdCBTdHJpbmcmIHNhbml0aXplZFZhbHVlLCBib29sIHZhbHVlQ2hhbmdlZCwgVGV4dEZp
ZWxkRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQogewotICAgIGVsZW1lbnQoKS0+c2V0VmFs
dWVJbnRlcm5hbChzYW5pdGl6ZWRWYWx1ZSwgZXZlbnRCZWhhdmlvcik7Ci0gICAgZWxlbWVudCgp
LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgZWxlbWVudCgpLnNldFZhbHVlSW50ZXJuYWwo
c2FuaXRpemVkVmFsdWUsIGV2ZW50QmVoYXZpb3IpOworICAgIGVsZW1lbnQoKS5zZXROZWVkc1N0
eWxlUmVjYWxjKCk7CiAgICAgaWYgKCF2YWx1ZUNoYW5nZWQpCiAgICAgICAgIHJldHVybjsKICAg
ICBzd2l0Y2ggKGV2ZW50QmVoYXZpb3IpIHsKICAgICBjYXNlIERpc3BhdGNoQ2hhbmdlRXZlbnQ6
Ci0gICAgICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7Cisg
ICAgICAgIGVsZW1lbnQoKS5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBEaXNwYXRjaElucHV0QW5kQ2hhbmdlRXZlbnQ6Ci0gICAgICAg
IGVsZW1lbnQoKS0+ZGlzcGF0Y2hGb3JtQ29udHJvbElucHV0RXZlbnQoKTsKLSAgICAgICAgZWxl
bWVudCgpLT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKKyAgICAgICAgZWxlbWVu
dCgpLmRpc3BhdGNoRm9ybUNvbnRyb2xJbnB1dEV2ZW50KCk7CisgICAgICAgIGVsZW1lbnQoKS5k
aXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBEaXNwYXRjaE5vRXZlbnQ6CiAgICAgICAgIGJyZWFrOwpAQCAtNjk0LDcgKzY5NCw3IEBAIFN0
cmluZyBJbnB1dFR5cGU6OmxvY2FsaXplVmFsdWUoY29uc3QgU3QKIAogU3RyaW5nIElucHV0VHlw
ZTo6dmlzaWJsZVZhbHVlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZWxlbWVudCgpLT52YWx1ZSgp
OworICAgIHJldHVybiBlbGVtZW50KCkudmFsdWUoKTsKIH0KIAogU3RyaW5nIElucHV0VHlwZTo6
c2FuaXRpemVWYWx1ZShjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUpIGNvbnN0CkBAIC05Njcs
NyArOTY3LDcgQEAgdm9pZCBJbnB1dFR5cGU6OmFwcGx5U3RlcChpbnQgY291bnQsIEFueQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY29uc3QgRGVjaW1hbCBjdXJyZW50ID0gcGFyc2VU
b051bWJlck9yTmFOKGVsZW1lbnQoKS0+dmFsdWUoKSk7CisgICAgY29uc3QgRGVjaW1hbCBjdXJy
ZW50ID0gcGFyc2VUb051bWJlck9yTmFOKGVsZW1lbnQoKS52YWx1ZSgpKTsKICAgICBpZiAoIWN1
cnJlbnQuaXNGaW5pdGUoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAg
ICAgICByZXR1cm47CkBAIC05ODYsNyArOTg2LDcgQEAgdm9pZCBJbnB1dFR5cGU6OmFwcGx5U3Rl
cChpbnQgY291bnQsIEFueQogICAgIGlmIChuZXdWYWx1ZSA8IHN0ZXBSYW5nZS5taW5pbXVtKCkp
CiAgICAgICAgIG5ld1ZhbHVlID0gc3RlcFJhbmdlLm1pbmltdW0oKTsKIAotICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgc3RlcFN0cmluZyA9IGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShzdGVw
QXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGVwU3RyaW5nID0gZWxlbWVudCgpLmZh
c3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpOwogICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2Uoc3Rl
cFN0cmluZywgImFueSIpKQogICAgICAgICBuZXdWYWx1ZSA9IHN0ZXBSYW5nZS5hbGlnblZhbHVl
Rm9yU3RlcChjdXJyZW50LCBuZXdWYWx1ZSk7CiAKQEAgLTk5OSw4ICs5OTksOCBAQCB2b2lkIElu
cHV0VHlwZTo6YXBwbHlTdGVwKGludCBjb3VudCwgQW55CiAKICAgICBzZXRWYWx1ZUFzRGVjaW1h
bChuZXdWYWx1ZSwgZXZlbnRCZWhhdmlvciwgZWMpOwogCi0gICAgaWYgKEFYT2JqZWN0Q2FjaGUq
IGNhY2hlID0gZWxlbWVudCgpLT5kb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKQot
ICAgICAgICBjYWNoZS0+cG9zdE5vdGlmaWNhdGlvbihlbGVtZW50KCksIEFYT2JqZWN0Q2FjaGU6
OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsKKyAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBl
bGVtZW50KCkuZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKKyAgICAgICAgY2Fj
aGUtPnBvc3ROb3RpZmljYXRpb24oJmVsZW1lbnQoKSwgQVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNo
YW5nZWQsIHRydWUpOwogfQogCiBib29sIElucHV0VHlwZTo6Z2V0QWxsb3dlZFZhbHVlU3RlcChE
ZWNpbWFsKiBzdGVwKSBjb25zdApAQCAtMTA4Niw3ICsxMDg2LDcgQEAgdm9pZCBJbnB1dFR5cGU6
OnN0ZXBVcEZyb21SZW5kZXJlcihpbnQgbgogICAgIGVsc2UKICAgICAgICAgc2lnbiA9IDA7CiAK
LSAgICBTdHJpbmcgY3VycmVudFN0cmluZ1ZhbHVlID0gZWxlbWVudCgpLT52YWx1ZSgpOworICAg
IFN0cmluZyBjdXJyZW50U3RyaW5nVmFsdWUgPSBlbGVtZW50KCkudmFsdWUoKTsKICAgICBEZWNp
bWFsIGN1cnJlbnQgPSBwYXJzZVRvTnVtYmVyT3JOYU4oY3VycmVudFN0cmluZ1ZhbHVlKTsKICAg
ICBpZiAoIWN1cnJlbnQuaXNGaW5pdGUoKSkgewogICAgICAgICBjdXJyZW50ID0gZGVmYXVsdFZh
bHVlRm9yU3RlcFVwKCk7CkBAIC0xMTAwLDcgKzExMDAsNyBAQCB2b2lkIElucHV0VHlwZTo6c3Rl
cFVwRnJvbVJlbmRlcmVyKGludCBuCiAgICAgaWYgKChzaWduID4gMCAmJiBjdXJyZW50IDwgc3Rl
cFJhbmdlLm1pbmltdW0oKSkgfHwgKHNpZ24gPCAwICYmIGN1cnJlbnQgPiBzdGVwUmFuZ2UubWF4
aW11bSgpKSkKICAgICAgICAgc2V0VmFsdWVBc0RlY2ltYWwoc2lnbiA+IDAgPyBzdGVwUmFuZ2Uu
bWluaW11bSgpIDogc3RlcFJhbmdlLm1heGltdW0oKSwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2
ZW50LCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKHN0ZXBNaXNt
YXRjaChlbGVtZW50KCktPnZhbHVlKCkpKSB7CisgICAgICAgIGlmIChzdGVwTWlzbWF0Y2goZWxl
bWVudCgpLnZhbHVlKCkpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIXN0ZXAuaXNaZXJvKCkpOwog
ICAgICAgICAgICAgY29uc3QgRGVjaW1hbCBiYXNlID0gc3RlcFJhbmdlLnN0ZXBCYXNlKCk7CiAg
ICAgICAgICAgICBEZWNpbWFsIG5ld1ZhbHVlOwpAQCAtMTEyOCw5ICsxMTI4LDkgQEAgdm9pZCBJ
bnB1dFR5cGU6OnN0ZXBVcEZyb21SZW5kZXJlcihpbnQgbgogCiB2b2lkIElucHV0VHlwZTo6b2Jz
ZXJ2ZUZlYXR1cmVJZlZpc2libGUoRmVhdHVyZU9ic2VydmVyOjpGZWF0dXJlIGZlYXR1cmUpIGNv
bnN0CiB7Ci0gICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnQoKS0+cmVuZGVyU3R5
bGUoKSkgeworICAgIGlmIChSZW5kZXJTdHlsZSogc3R5bGUgPSBlbGVtZW50KCkucmVuZGVyU3R5
bGUoKSkgewogICAgICAgICBpZiAoc3R5bGUtPnZpc2liaWxpdHkoKSAhPSBISURERU4pCi0gICAg
ICAgICAgICBGZWF0dXJlT2JzZXJ2ZXI6Om9ic2VydmUoJmVsZW1lbnQoKS0+ZG9jdW1lbnQoKSwg
ZmVhdHVyZSk7CisgICAgICAgICAgICBGZWF0dXJlT2JzZXJ2ZXI6Om9ic2VydmUoJmVsZW1lbnQo
KS5kb2N1bWVudCgpLCBmZWF0dXJlKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1
dFR5cGUuaAkocmV2aXNpb24gMTU1OTA4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtODIsOCArODIsOCBAQCBjbGFzcyBJbnB1dFR5cGUgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8SW5wdXRUeXBlPiBjcmVhdGUoSFRNTElucHV0RWxlbWVudCosIGNvbnN0IEF0b21pY1N0
cmluZyYpOwotICAgIHN0YXRpYyBQYXNzT3duUHRyPElucHV0VHlwZT4gY3JlYXRlVGV4dChIVE1M
SW5wdXRFbGVtZW50Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlPiBjcmVhdGUo
SFRNTElucHV0RWxlbWVudCYsIGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHN0YXRpYyBQYXNz
T3duUHRyPElucHV0VHlwZT4gY3JlYXRlVGV4dChIVE1MSW5wdXRFbGVtZW50Jik7CiAgICAgdmly
dHVhbCB+SW5wdXRUeXBlKCk7CiAKICAgICBzdGF0aWMgYm9vbCB0aGVtZVN1cHBvcnRzRGF0YUxp
c3RVSShJbnB1dFR5cGUqKTsKQEAgLTMxMiw4ICszMTIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
aXNwYXRjaFNpbXVsYXRlZENsaWNrSWZBY3RpdmUoS2V5Ym9hcmRFdmVudCopIGNvbnN0OwogCiBw
cm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1l
bnQpIDogbV9lbGVtZW50KGVsZW1lbnQpIHsgfQotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KKyAgICBleHBsaWNpdCBJbnB1dFR5cGUo
SFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkgOiBtX2VsZW1lbnQoZWxlbWVudCkgeyB9CisgICAg
SFRNTElucHV0RWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQog
ICAgIENocm9tZSogY2hyb21lKCkgY29uc3Q7CiAgICAgRGVjaW1hbCBwYXJzZVRvTnVtYmVyT3JO
YU4oY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgdm9pZCBvYnNlcnZlRmVhdHVyZUlmVmlzaWJs
ZShGZWF0dXJlT2JzZXJ2ZXI6OkZlYXR1cmUpIGNvbnN0OwpAQCAtMzIzLDcgKzMyMyw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBhcHBseVN0ZXAoaW50IGNvdW50LCBBbnlTdGVwSGFuZGxpbmcsIFRl
eHRGaWVsZEV2ZW50QmVoYXZpb3IsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIC8vIFJhdyBwb2lu
dGVyIGJlY2F1c2UgdGhlIEhUTUxJbnB1dEVsZW1lbnQgb2JqZWN0IG93bnMgdGhpcyBJbnB1dFR5
cGUgb2JqZWN0LgotICAgIEhUTUxJbnB1dEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICBIVE1MSW5w
dXRFbGVtZW50JiBtX2VsZW1lbnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL01vbnRoSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL01vbnRoSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMTU1OTA3KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9Nb250aElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIGNvbnN0IGludCBtb250aERlZmF1bHRTdGVwID0gMTsK
IHN0YXRpYyBjb25zdCBpbnQgbW9udGhEZWZhdWx0U3RlcEJhc2UgPSAwOwogc3RhdGljIGNvbnN0
IGludCBtb250aFN0ZXBTY2FsZUZhY3RvciA9IDE7CiAKLVBhc3NPd25QdHI8SW5wdXRUeXBlPiBN
b250aElucHV0VHlwZTo6Y3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCitQYXNzT3du
UHRyPElucHV0VHlwZT4gTW9udGhJbnB1dFR5cGU6OmNyZWF0ZShIVE1MSW5wdXRFbGVtZW50JiBl
bGVtZW50KQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgTW9udGhJbnB1dFR5cGUoZWxlbWVu
dCkpOwogfQpAQCAtNzIsNyArNzIsNyBAQCBEYXRlQ29tcG9uZW50czo6VHlwZSBNb250aElucHV0
VHlwZTo6ZGF0CiBkb3VibGUgTW9udGhJbnB1dFR5cGU6OnZhbHVlQXNEYXRlKCkgY29uc3QKIHsK
ICAgICBEYXRlQ29tcG9uZW50cyBkYXRlOwotICAgIGlmICghcGFyc2VUb0RhdGVDb21wb25lbnRz
KGVsZW1lbnQoKS0+dmFsdWUoKSwgJmRhdGUpKQorICAgIGlmICghcGFyc2VUb0RhdGVDb21wb25l
bnRzKGVsZW1lbnQoKS52YWx1ZSgpLCAmZGF0ZSkpCiAgICAgICAgIHJldHVybiBEYXRlQ29tcG9u
ZW50czo6aW52YWxpZE1pbGxpc2Vjb25kcygpOwogICAgIGRvdWJsZSBtc2VjID0gZGF0ZS5taWxs
aXNlY29uZHNTaW5jZUVwb2NoKCk7CiAgICAgQVNTRVJUKHN0ZDo6aXNmaW5pdGUobXNlYykpOwpA
QCAtMTA0LDEwICsxMDQsMTAgQEAgU3RlcFJhbmdlIE1vbnRoSW5wdXRUeXBlOjpjcmVhdGVTdGVw
UmFuZwogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RlcFJhbmdlOjpTdGVwRGVz
Y3JpcHRpb24sIHN0ZXBEZXNjcmlwdGlvbiwgKG1vbnRoRGVmYXVsdFN0ZXAsIG1vbnRoRGVmYXVs
dFN0ZXBCYXNlLCBtb250aFN0ZXBTY2FsZUZhY3RvciwgU3RlcFJhbmdlOjpQYXJzZWRTdGVwVmFs
dWVTaG91bGRCZUludGVnZXIpKTsKIAotICAgIGNvbnN0IERlY2ltYWwgc3RlcEJhc2UgPSBwYXJz
ZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgRGVjaW1hbDo6
ZnJvbURvdWJsZShtb250aERlZmF1bHRTdGVwQmFzZSkpOwotICAgIGNvbnN0IERlY2ltYWwgbWlu
aW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIp
LCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVDb21wb25lbnRzOjptaW5pbXVtTW9udGgoKSkpOwot
ICAgIGNvbnN0IERlY2ltYWwgbWF4aW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0
R2V0QXR0cmlidXRlKG1heEF0dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVDb21wb25lbnRz
OjptYXhpbXVtTW9udGgoKSkpOwotICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9IFN0ZXBSYW5nZTo6
cGFyc2VTdGVwKGFueVN0ZXBIYW5kbGluZywgc3RlcERlc2NyaXB0aW9uLCBlbGVtZW50KCktPmZh
c3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpKTsKKyAgICBjb25zdCBEZWNpbWFsIHN0ZXBCYXNlID0g
cGFyc2VUb051bWJlcihlbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgRGVjaW1h
bDo6ZnJvbURvdWJsZShtb250aERlZmF1bHRTdGVwQmFzZSkpOworICAgIGNvbnN0IERlY2ltYWwg
bWluaW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0
ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1Nb250aCgpKSk7
CisgICAgY29uc3QgRGVjaW1hbCBtYXhpbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuZmFz
dEdldEF0dHJpYnV0ZShtYXhBdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50
czo6bWF4aW11bU1vbnRoKCkpKTsKKyAgICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6
OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLmZh
c3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpKTsKICAgICByZXR1cm4gU3RlcFJhbmdlKHN0ZXBCYXNl
LCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBzdGVwRGVzY3JpcHRpb24pOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL01vbnRoSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9Nb250aElucHV0VHlwZS5oCShyZXZpc2lvbiAxNTU5MDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL01vbnRoSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEw
ICszOCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE1vbnRoSW5wdXRUeXBlIDog
cHVibGljIEJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGU+IGNyZWF0ZShIVE1MSW5wdXRFbGVtZW50Kik7
CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlPiBjcmVhdGUoSFRNTElucHV0RWxlbWVu
dCYpOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IE1vbnRoSW5wdXRUeXBlKEhUTUxJbnB1dEVs
ZW1lbnQqIGVsZW1lbnQpIDogQmFzZU1vbnRoSW5wdXRUeXBlKGVsZW1lbnQpIHsgfQorICAgIGV4
cGxpY2l0IE1vbnRoSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpIDogQmFzZU1v
bnRoSW5wdXRUeXBlKGVsZW1lbnQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKSBPVkVS
UklERTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkg
Y29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBEYXRlQ29tcG9uZW50czo6VHlwZSBkYXRlVHlw
ZSgpIGNvbnN0IE9WRVJSSURFOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9OdW1iZXJJbnB1
dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvTnVtYmVySW5wdXRU
eXBlLmNwcAkocmV2aXNpb24gMTU1OTA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9OdW1iZXJJ
bnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw4ICs1NSw3IEBAIHN0YXRpYyBjb25z
dCBpbnQgbnVtYmVyRGVmYXVsdFN0ZXAgPSAxOwogc3RhdGljIGNvbnN0IGludCBudW1iZXJEZWZh
dWx0U3RlcEJhc2UgPSAwOwogc3RhdGljIGNvbnN0IGludCBudW1iZXJTdGVwU2NhbGVGYWN0b3Ig
PSAxOwogCi1zdHJ1Y3QgUmVhbE51bWJlclJlbmRlclNpemUKLXsKK3N0cnVjdCBSZWFsTnVtYmVy
UmVuZGVyU2l6ZSB7CiAgICAgdW5zaWduZWQgc2l6ZUJlZm9yZURlY2ltYWxQb2ludDsKICAgICB1
bnNpZ25lZCBzaXplQWZ0ZURlY2ltYWxQb2ludDsKIApAQCAtOTUsNyArOTQsNyBAQCBzdGF0aWMg
UmVhbE51bWJlclJlbmRlclNpemUgY2FsY3VsYXRlUmVuCiAgICAgcmV0dXJuIFJlYWxOdW1iZXJS
ZW5kZXJTaXplKHNpemVPZlNpZ24gKyBzaXplT2ZaZXJvICwgbnVtYmVyT2ZaZXJvQWZ0ZXJEZWNp
bWFsUG9pbnQgKyBzaXplT2ZEaWdpdHMpOwogfQogCi1QYXNzT3duUHRyPElucHV0VHlwZT4gTnVt
YmVySW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKK1Bhc3NPd25Q
dHI8SW5wdXRUeXBlPiBOdW1iZXJJbnB1dFR5cGU6OmNyZWF0ZShIVE1MSW5wdXRFbGVtZW50JiBl
bGVtZW50KQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgTnVtYmVySW5wdXRUeXBlKGVsZW1l
bnQpKTsKIH0KQEAgLTExMywxNCArMTEyLDE0IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgTnVtYmVy
SW5wdXRUeXBlOjpmb3IKIAogdm9pZCBOdW1iZXJJbnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0
cmluZyYgc2FuaXRpemVkVmFsdWUsIGJvb2wgdmFsdWVDaGFuZ2VkLCBUZXh0RmllbGRFdmVudEJl
aGF2aW9yIGV2ZW50QmVoYXZpb3IpCiB7Ci0gICAgaWYgKCF2YWx1ZUNoYW5nZWQgJiYgc2FuaXRp
emVkVmFsdWUuaXNFbXB0eSgpICYmICFlbGVtZW50KCktPmlubmVyVGV4dFZhbHVlKCkuaXNFbXB0
eSgpKQorICAgIGlmICghdmFsdWVDaGFuZ2VkICYmIHNhbml0aXplZFZhbHVlLmlzRW1wdHkoKSAm
JiAhZWxlbWVudCgpLmlubmVyVGV4dFZhbHVlKCkuaXNFbXB0eSgpKQogICAgICAgICB1cGRhdGVJ
bm5lclRleHRWYWx1ZSgpOwogICAgIFRleHRGaWVsZElucHV0VHlwZTo6c2V0VmFsdWUoc2FuaXRp
emVkVmFsdWUsIHZhbHVlQ2hhbmdlZCwgZXZlbnRCZWhhdmlvcik7CiB9CiAKIGRvdWJsZSBOdW1i
ZXJJbnB1dFR5cGU6OnZhbHVlQXNEb3VibGUoKSBjb25zdAogewotICAgIHJldHVybiBwYXJzZVRv
RG91YmxlRm9yTnVtYmVyVHlwZShlbGVtZW50KCktPnZhbHVlKCkpOworICAgIHJldHVybiBwYXJz
ZVRvRG91YmxlRm9yTnVtYmVyVHlwZShlbGVtZW50KCkudmFsdWUoKSk7CiB9CiAKIHZvaWQgTnVt
YmVySW5wdXRUeXBlOjpzZXRWYWx1ZUFzRG91YmxlKGRvdWJsZSBuZXdWYWx1ZSwgVGV4dEZpZWxk
RXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKQEAg
LTEzNSw3ICsxMzQsNyBAQCB2b2lkIE51bWJlcklucHV0VHlwZTo6c2V0VmFsdWVBc0RvdWJsZShk
CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgZWxlbWVudCgpLT5zZXRWYWx1ZShzZXJpYWxpemVGb3JOdW1iZXJUeXBlKG5ld1ZhbHVl
KSwgZXZlbnRCZWhhdmlvcik7CisgICAgZWxlbWVudCgpLnNldFZhbHVlKHNlcmlhbGl6ZUZvck51
bWJlclR5cGUobmV3VmFsdWUpLCBldmVudEJlaGF2aW9yKTsKIH0KIAogdm9pZCBOdW1iZXJJbnB1
dFR5cGU6OnNldFZhbHVlQXNEZWNpbWFsKGNvbnN0IERlY2ltYWwmIG5ld1ZhbHVlLCBUZXh0Rmll
bGRFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdApA
QCAtMTUwLDcgKzE0OSw3IEBAIHZvaWQgTnVtYmVySW5wdXRUeXBlOjpzZXRWYWx1ZUFzRGVjaW1h
bCgKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBlbGVtZW50KCktPnNldFZhbHVlKHNlcmlhbGl6ZUZvck51bWJlclR5cGUobmV3VmFs
dWUpLCBldmVudEJlaGF2aW9yKTsKKyAgICBlbGVtZW50KCkuc2V0VmFsdWUoc2VyaWFsaXplRm9y
TnVtYmVyVHlwZShuZXdWYWx1ZSksIGV2ZW50QmVoYXZpb3IpOwogfQogCiBib29sIE51bWJlcklu
cHV0VHlwZTo6dHlwZU1pc21hdGNoRm9yKGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CkBAIC0x
NjAsMTkgKzE1OSwxOSBAQCBib29sIE51bWJlcklucHV0VHlwZTo6dHlwZU1pc21hdGNoRm9yKGNv
CiAKIGJvb2wgTnVtYmVySW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2goKSBjb25zdAogewotICAgIEFT
U0VSVCghdHlwZU1pc21hdGNoRm9yKGVsZW1lbnQoKS0+dmFsdWUoKSkpOworICAgIEFTU0VSVCgh
dHlwZU1pc21hdGNoRm9yKGVsZW1lbnQoKS52YWx1ZSgpKSk7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCiBTdGVwUmFuZ2UgTnVtYmVySW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UoQW55U3RlcEhh
bmRsaW5nIGFueVN0ZXBIYW5kbGluZykgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KGNvbnN0IFN0ZXBSYW5nZTo6U3RlcERlc2NyaXB0aW9uLCBzdGVwRGVzY3JpcHRpb24sIChudW1i
ZXJEZWZhdWx0U3RlcCwgbnVtYmVyRGVmYXVsdFN0ZXBCYXNlLCBudW1iZXJTdGVwU2NhbGVGYWN0
b3IpKTsKLSAgICBjb25zdCBEZWNpbWFsIHN0ZXBCYXNlID0gcGFyc2VUb0RlY2ltYWxGb3JOdW1i
ZXJUeXBlKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgbnVtYmVyRGVmYXVs
dFN0ZXBCYXNlKTsKKyAgICBjb25zdCBEZWNpbWFsIHN0ZXBCYXNlID0gcGFyc2VUb0RlY2ltYWxG
b3JOdW1iZXJUeXBlKGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCBudW1iZXJE
ZWZhdWx0U3RlcEJhc2UpOwogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIG51bWVyaWNfbGlt
aXRzPGRvdWJsZT46Om1heCBmb3IgbnVtYmVyIGlucHV0IHR5cGUuCiAgICAgY29uc3QgRGVjaW1h
bCBmbG9hdE1heCA9IERlY2ltYWw6OmZyb21Eb3VibGUobnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpt
YXgoKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBtaW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50
KCktPmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIC1mbG9hdE1heCk7Ci0gICAgY29uc3QgRGVj
aW1hbCBtYXhpbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUo
bWF4QXR0ciksIGZsb2F0TWF4KTsKLSAgICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6
OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLT5m
YXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKSk7CisgICAgY29uc3QgRGVjaW1hbCBtaW5pbXVtID0g
cGFyc2VUb051bWJlcihlbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgLWZsb2F0
TWF4KTsKKyAgICBjb25zdCBEZWNpbWFsIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQo
KS5mYXN0R2V0QXR0cmlidXRlKG1heEF0dHIpLCBmbG9hdE1heCk7CisgICAgY29uc3QgRGVjaW1h
bCBzdGVwID0gU3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCBzdGVwRGVzY3Jp
cHRpb24sIGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKSk7CiAgICAgcmV0dXJu
IFN0ZXBSYW5nZShzdGVwQmFzZSwgbWluaW11bSwgbWF4aW11bSwgc3RlcCwgc3RlcERlc2NyaXB0
aW9uKTsKIH0KIApAQCAtMTgwLDE1ICsxNzksMTUgQEAgYm9vbCBOdW1iZXJJbnB1dFR5cGU6OnNp
emVTaG91bGRJbmNsdWRlRAogewogICAgIHByZWZlcnJlZFNpemUgPSBkZWZhdWx0U2l6ZTsKIAot
ICAgIGNvbnN0IFN0cmluZyBzdGVwU3RyaW5nID0gZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRl
KHN0ZXBBdHRyKTsKKyAgICBjb25zdCBTdHJpbmcgc3RlcFN0cmluZyA9IGVsZW1lbnQoKS5mYXN0
R2V0QXR0cmlidXRlKHN0ZXBBdHRyKTsKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uoc3RlcFN0
cmluZywgImFueSIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBEZWNpbWFs
IG1pbmltdW0gPSBwYXJzZVRvRGVjaW1hbEZvck51bWJlclR5cGUoZWxlbWVudCgpLT5mYXN0R2V0
QXR0cmlidXRlKG1pbkF0dHIpKTsKKyAgICBjb25zdCBEZWNpbWFsIG1pbmltdW0gPSBwYXJzZVRv
RGVjaW1hbEZvck51bWJlclR5cGUoZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0cikp
OwogICAgIGlmICghbWluaW11bS5pc0Zpbml0ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBjb25zdCBEZWNpbWFsIG1heGltdW0gPSBwYXJzZVRvRGVjaW1hbEZvck51bWJlclR5cGUo
ZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1heEF0dHIpKTsKKyAgICBjb25zdCBEZWNpbWFs
IG1heGltdW0gPSBwYXJzZVRvRGVjaW1hbEZvck51bWJlclR5cGUoZWxlbWVudCgpLmZhc3RHZXRB
dHRyaWJ1dGUobWF4QXR0cikpOwogICAgIGlmICghbWF4aW11bS5pc0Zpbml0ZSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTIwNSw3ICsyMDQsNyBAQCBib29sIE51bWJlcklucHV0VHlw
ZTo6c2l6ZVNob3VsZEluY2x1ZGVECiBmbG9hdCBOdW1iZXJJbnB1dFR5cGU6OmRlY29yYXRpb25X
aWR0aCgpIGNvbnN0CiB7CiAgICAgZmxvYXQgd2lkdGggPSAwOwotICAgIEhUTUxFbGVtZW50KiBz
cGluQnV0dG9uID0gZWxlbWVudCgpLT5pbm5lclNwaW5CdXR0b25FbGVtZW50KCk7CisgICAgSFRN
TEVsZW1lbnQqIHNwaW5CdXR0b24gPSBlbGVtZW50KCkuaW5uZXJTcGluQnV0dG9uRWxlbWVudCgp
OwogICAgIGlmIChSZW5kZXJCb3gqIHNwaW5SZW5kZXJlciA9IHNwaW5CdXR0b24gPyBzcGluQnV0
dG9uLT5yZW5kZXJCb3goKSA6IDApIHsKICAgICAgICAgd2lkdGggKz0gc3BpblJlbmRlcmVyLT5i
b3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCk7CiAgICAgICAgIC8vIFNpbmNlIHRoZSB3aWR0
aCBvZiBzcGluUmVuZGVyZXIgaXMgbm90IGNhbGN1bGF0ZWQgeWV0LCBzcGluUmVuZGVyZXItPmxv
Z2ljYWxXaWR0aCgpIHJldHVybnMgMC4KQEAgLTI1MSwxMiArMjUwLDEyIEBAIFN0cmluZyBOdW1i
ZXJJbnB1dFR5cGU6OmxvY2FsaXplVmFsdWUoY28KICAgICAvLyBXZSBkb24ndCBsb2NhbGl6ZSBz
Y2llbnRpZmljIG5vdGF0aW9ucy4KICAgICBpZiAocHJvcG9zZWRWYWx1ZS5maW5kKGlzRSkgIT0g
bm90Rm91bmQpCiAgICAgICAgIHJldHVybiBwcm9wb3NlZFZhbHVlOwotICAgIHJldHVybiBlbGVt
ZW50KCktPmxvY2FsZSgpLmNvbnZlcnRUb0xvY2FsaXplZE51bWJlcihwcm9wb3NlZFZhbHVlKTsK
KyAgICByZXR1cm4gZWxlbWVudCgpLmxvY2FsZSgpLmNvbnZlcnRUb0xvY2FsaXplZE51bWJlcihw
cm9wb3NlZFZhbHVlKTsKIH0KIAogU3RyaW5nIE51bWJlcklucHV0VHlwZTo6dmlzaWJsZVZhbHVl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbG9jYWxpemVWYWx1ZShlbGVtZW50KCktPnZhbHVlKCkp
OworICAgIHJldHVybiBsb2NhbGl6ZVZhbHVlKGVsZW1lbnQoKS52YWx1ZSgpKTsKIH0KIAogU3Ry
aW5nIE51bWJlcklucHV0VHlwZTo6Y29udmVydEZyb21WaXNpYmxlVmFsdWUoY29uc3QgU3RyaW5n
JiB2aXNpYmxlVmFsdWUpIGNvbnN0CkBAIC0yNjYsNyArMjY1LDcgQEAgU3RyaW5nIE51bWJlcklu
cHV0VHlwZTo6Y29udmVydEZyb21WaXNpYgogICAgIC8vIFdlIGRvbid0IGxvY2FsaXplIHNjaWVu
dGlmaWMgbm90YXRpb25zLgogICAgIGlmICh2aXNpYmxlVmFsdWUuZmluZChpc0UpICE9IG5vdEZv
dW5kKQogICAgICAgICByZXR1cm4gdmlzaWJsZVZhbHVlOwotICAgIHJldHVybiBlbGVtZW50KCkt
PmxvY2FsZSgpLmNvbnZlcnRGcm9tTG9jYWxpemVkTnVtYmVyKHZpc2libGVWYWx1ZSk7CisgICAg
cmV0dXJuIGVsZW1lbnQoKS5sb2NhbGUoKS5jb252ZXJ0RnJvbUxvY2FsaXplZE51bWJlcih2aXNp
YmxlVmFsdWUpOwogfQogCiBTdHJpbmcgTnVtYmVySW5wdXRUeXBlOjpzYW5pdGl6ZVZhbHVlKGNv
bnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkgY29uc3QKQEAgLTI3OCw3ICsyNzcsNyBAQCBTdHJp
bmcgTnVtYmVySW5wdXRUeXBlOjpzYW5pdGl6ZVZhbHVlKGNvCiAKIGJvb2wgTnVtYmVySW5wdXRU
eXBlOjpoYXNCYWRJbnB1dCgpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIHN0YW5kYXJkVmFsdWUgPSBj
b252ZXJ0RnJvbVZpc2libGVWYWx1ZShlbGVtZW50KCktPmlubmVyVGV4dFZhbHVlKCkpOworICAg
IFN0cmluZyBzdGFuZGFyZFZhbHVlID0gY29udmVydEZyb21WaXNpYmxlVmFsdWUoZWxlbWVudCgp
LmlubmVyVGV4dFZhbHVlKCkpOwogICAgIHJldHVybiAhc3RhbmRhcmRWYWx1ZS5pc0VtcHR5KCkg
JiYgIXN0ZDo6aXNmaW5pdGUocGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoc3RhbmRhcmRWYWx1
ZSkpOwogfQogCkBAIC0zMDYsMTYgKzMwNSwxNiBAQCB2b2lkIE51bWJlcklucHV0VHlwZTo6bWlu
T3JNYXhBdHRyaWJ1dGVDCiB7CiAgICAgSW5wdXRUeXBlOjptaW5Pck1heEF0dHJpYnV0ZUNoYW5n
ZWQoKTsKIAotICAgIGlmIChlbGVtZW50KCktPnJlbmRlcmVyKCkpCi0gICAgICAgIGVsZW1lbnQo
KS0+cmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAg
aWYgKGVsZW1lbnQoKS5yZW5kZXJlcigpKQorICAgICAgICBlbGVtZW50KCkucmVuZGVyZXIoKS0+
c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiB9CiAKIHZvaWQgTnVtYmVySW5w
dXRUeXBlOjpzdGVwQXR0cmlidXRlQ2hhbmdlZCgpCiB7CiAgICAgSW5wdXRUeXBlOjpzdGVwQXR0
cmlidXRlQ2hhbmdlZCgpOwogCi0gICAgaWYgKGVsZW1lbnQoKS0+cmVuZGVyZXIoKSkKLSAgICAg
ICAgZWxlbWVudCgpLT5yZW5kZXJlcigpLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNh
bGMoKTsKKyAgICBpZiAoZWxlbWVudCgpLnJlbmRlcmVyKCkpCisgICAgICAgIGVsZW1lbnQoKS5y
ZW5kZXJlcigpLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9OdW1iZXJJbnB1
dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL051bWJlcklucHV0VHlw
ZS5oCShyZXZpc2lvbiAxNTU5MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL051bWJlcklucHV0
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsMTAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBOdW1iZXJJbnB1dFR5cGUgOiBwdWJsaWMgVGV4dEZpZWxkSW5wdXRUeXBl
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGU+IGNyZWF0ZShIVE1M
SW5wdXRFbGVtZW50Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlPiBjcmVhdGUo
SFRNTElucHV0RWxlbWVudCYpOwogCiBwcml2YXRlOgotICAgIE51bWJlcklucHV0VHlwZShIVE1M
SW5wdXRFbGVtZW50KiBlbGVtZW50KSA6IFRleHRGaWVsZElucHV0VHlwZShlbGVtZW50KSB7IH0K
KyAgICBOdW1iZXJJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkgOiBUZXh0Rmll
bGRJbnB1dFR5cGUoZWxlbWVudCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpIE9WRVJS
SURFOwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBj
b25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwg
Ym9vbCB2YWx1ZUNoYW5nZWQsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IpIE9WRVJSSURFOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9QYXNzd29yZElucHV0VHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9QYXNzd29yZElucHV0VHlwZS5jcHAJKHJldmlzaW9uIDE1
NTkwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvUGFzc3dvcmRJbnB1dFR5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFz
c093blB0cjxJbnB1dFR5cGU+IFBhc3N3b3JkSW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxl
bWVudCogZWxlbWVudCkKK1Bhc3NPd25QdHI8SW5wdXRUeXBlPiBQYXNzd29yZElucHV0VHlwZTo6
Y3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBQYXNzd29yZElucHV0VHlwZShlbGVtZW50KSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL1Bhc3N3b3JkSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9QYXNzd29yZElucHV0VHlwZS5oCShyZXZpc2lvbiAxNTU5MDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL1Bhc3N3b3JkSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEwICsz
NywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBhc3N3b3JkSW5wdXRUeXBlIDog
cHVibGljIEJhc2VUZXh0SW5wdXRUeXBlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0
cjxJbnB1dFR5cGU+IGNyZWF0ZShIVE1MSW5wdXRFbGVtZW50Kik7CisgICAgc3RhdGljIFBhc3NP
d25QdHI8SW5wdXRUeXBlPiBjcmVhdGUoSFRNTElucHV0RWxlbWVudCYpOwogCiBwcml2YXRlOgot
ICAgIFBhc3N3b3JkSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogQmFzZVRl
eHRJbnB1dFR5cGUoZWxlbWVudCkgeyB9CisgICAgUGFzc3dvcmRJbnB1dFR5cGUoSFRNTElucHV0
RWxlbWVudCYgZWxlbWVudCkgOiBCYXNlVGV4dElucHV0VHlwZShlbGVtZW50KSB7IH0KICAgICB2
aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFNhdmVBbmRSZXN0b3JlRm9ybUNvbnRyb2xTdGF0
ZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgRm9ybUNvbnRyb2xTdGF0ZSBzYXZlRm9y
bUNvbnRyb2xTdGF0ZSgpIGNvbnN0IE9WRVJSSURFOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9SYWRpb0lucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9S
YWRpb0lucHV0VHlwZS5jcHAJKHJldmlzaW9uIDE1NTkwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvUmFkaW9JbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotUGFzc093
blB0cjxJbnB1dFR5cGU+IFJhZGlvSW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCog
ZWxlbWVudCkKK1Bhc3NPd25QdHI8SW5wdXRUeXBlPiBSYWRpb0lucHV0VHlwZTo6Y3JlYXRlKEhU
TUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBSYWRp
b0lucHV0VHlwZShlbGVtZW50KSk7CiB9CkBAIC01MSw3ICs1MSw3IEBAIGNvbnN0IEF0b21pY1N0
cmluZyYgUmFkaW9JbnB1dFR5cGU6OmZvcm0KIAogYm9vbCBSYWRpb0lucHV0VHlwZTo6dmFsdWVN
aXNzaW5nKGNvbnN0IFN0cmluZyYpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+aXNJ
blJlcXVpcmVkUmFkaW9CdXR0b25Hcm91cCgpICYmICFlbGVtZW50KCktPmNoZWNrZWRSYWRpb0J1
dHRvbkZvckdyb3VwKCk7CisgICAgcmV0dXJuIGVsZW1lbnQoKS5pc0luUmVxdWlyZWRSYWRpb0J1
dHRvbkdyb3VwKCkgJiYgIWVsZW1lbnQoKS5jaGVja2VkUmFkaW9CdXR0b25Gb3JHcm91cCgpOwog
fQogCiBTdHJpbmcgUmFkaW9JbnB1dFR5cGU6OnZhbHVlTWlzc2luZ1RleHQoKSBjb25zdApAQCAt
NzgsMTMgKzc4LDEzIEBAIHZvaWQgUmFkaW9JbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudCgK
ICAgICAvLyBUZXN0ZWQgaW4gV2luSUUsIGFuZCBldmVuIGZvciBSVEwsIGxlZnQgc3RpbGwgbWVh
bnMgcHJldmlvdXMgcmFkaW8gYnV0dG9uIChhbmQgc28gbW92ZXMKICAgICAvLyB0byB0aGUgcmln
aHQpLiAgU2VlbXMgc3RyYW5nZSwgYnV0IHdlJ2xsIG1hdGNoIGl0LgogICAgIC8vIEhvd2V2ZXIs
IHdoZW4gdXNpbmcgU3BhdGlhbCBOYXZpZ2F0aW9uLCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gbmF2
aWdhdGUgd2l0aG91dCBjaGFuZ2luZyB0aGUgc2VsZWN0aW9uLgotICAgIGlmIChpc1NwYXRpYWxO
YXZpZ2F0aW9uRW5hYmxlZChlbGVtZW50KCktPmRvY3VtZW50KCkuZnJhbWUoKSkpCisgICAgaWYg
KGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGVsZW1lbnQoKS5kb2N1bWVudCgpLmZyYW1lKCkp
KQogICAgICAgICByZXR1cm47CiAgICAgYm9vbCBmb3J3YXJkID0gKGtleSA9PSAiRG93biIgfHwg
a2V5ID09ICJSaWdodCIpOwogCiAgICAgLy8gV2UgY2FuIG9ubHkgc3RheSB3aXRoaW4gdGhlIGZv
cm0ncyBjaGlsZHJlbiBpZiB0aGUgZm9ybSBoYXNuJ3QgYmVlbiBkZW1vdGVkIHRvIGEgbGVhZiBi
ZWNhdXNlCiAgICAgLy8gb2YgbWFsZm9ybWVkIEhUTUwuCi0gICAgTm9kZSogbm9kZSA9IGVsZW1l
bnQoKTsKKyAgICBOb2RlKiBub2RlID0gJmVsZW1lbnQoKTsKICAgICB3aGlsZSAoKG5vZGUgPSAo
Zm9yd2FyZCA/IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkgOiBOb2RlVHJhdmVyc2FsOjpwcmV2
aW91cyhub2RlKSkpKSB7CiAgICAgICAgIC8vIE9uY2Ugd2UgZW5jb3VudGVyIGEgZm9ybSBlbGVt
ZW50LCB3ZSBrbm93IHdlJ3JlIHRocm91Z2guCiAgICAgICAgIGlmIChpc0hUTUxGb3JtRWxlbWVu
dChub2RlKSkKQEAgLTkzLDEwICs5MywxMCBAQCB2b2lkIFJhZGlvSW5wdXRUeXBlOjpoYW5kbGVL
ZXlkb3duRXZlbnQoCiAgICAgICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1
dEVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7Ci0gICAgICAgIGlmIChpbnB1dEVs
ZW1lbnQtPmZvcm0oKSAhPSBlbGVtZW50KCktPmZvcm0oKSkKKyAgICAgICAgaWYgKGlucHV0RWxl
bWVudC0+Zm9ybSgpICE9IGVsZW1lbnQoKS5mb3JtKCkpCiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgaWYgKGlucHV0RWxlbWVudC0+aXNSYWRpb0J1dHRvbigpICYmIGlucHV0RWxlbWVudC0+
bmFtZSgpID09IGVsZW1lbnQoKS0+bmFtZSgpICYmIGlucHV0RWxlbWVudC0+aXNGb2N1c2FibGUo
KSkgewotICAgICAgICAgICAgZWxlbWVudCgpLT5kb2N1bWVudCgpLnNldEZvY3VzZWRFbGVtZW50
KGlucHV0RWxlbWVudCk7CisgICAgICAgIGlmIChpbnB1dEVsZW1lbnQtPmlzUmFkaW9CdXR0b24o
KSAmJiBpbnB1dEVsZW1lbnQtPm5hbWUoKSA9PSBlbGVtZW50KCkubmFtZSgpICYmIGlucHV0RWxl
bWVudC0+aXNGb2N1c2FibGUoKSkgeworICAgICAgICAgICAgZWxlbWVudCgpLmRvY3VtZW50KCku
c2V0Rm9jdXNlZEVsZW1lbnQoaW5wdXRFbGVtZW50KTsKICAgICAgICAgICAgIGlucHV0RWxlbWVu
dC0+ZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhldmVudCwgU2VuZE5vRXZlbnRzLCBEb05vdFNob3dQ
cmVzc2VkTG9vayk7CiAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFJhZGlvSW5wdXRUeXBl
OjpoYW5kbGVLZXl1cEV2ZW50KEtlCiAgICAgICAgIHJldHVybjsKICAgICAvLyBJZiBhbiB1bnNl
bGVjdGVkIHJhZGlvIGlzIHRhYmJlZCBpbnRvIChiZWNhdXNlIHRoZSBlbnRpcmUgZ3JvdXAgaGFz
IG5vdGhpbmcKICAgICAvLyBjaGVja2VkLCBvciBiZWNhdXNlIG9mIHNvbWUgZXhwbGljaXQgLmZv
Y3VzKCkgY2FsbCksIHRoZW4gYWxsb3cgc3BhY2UgdG8gY2hlY2sgaXQuCi0gICAgaWYgKGVsZW1l
bnQoKS0+Y2hlY2tlZCgpKQorICAgIGlmIChlbGVtZW50KCkuY2hlY2tlZCgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgZGlzcGF0Y2hTaW11bGF0ZWRDbGlja0lmQWN0aXZlKGV2ZW50KTsKIH0KQEAg
LTEyMiwyNyArMTIyLDI3IEBAIGJvb2wgUmFkaW9JbnB1dFR5cGU6OmlzS2V5Ym9hcmRGb2N1c2Fi
bGUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gV2hlbiB1c2luZyBTcGF0aWFsIE5h
dmlnYXRpb24sIGV2ZXJ5IHJhZGlvIGJ1dHRvbiBzaG91bGQgYmUgZm9jdXNhYmxlLgotICAgIGlm
IChpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChlbGVtZW50KCktPmRvY3VtZW50KCkuZnJhbWUo
KSkpCisgICAgaWYgKGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGVsZW1lbnQoKS5kb2N1bWVu
dCgpLmZyYW1lKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIE5ldmVyIGFsbG93
IGtleWJvYXJkIHRhYmJpbmcgdG8gbGVhdmUgeW91IGluIHRoZSBzYW1lIHJhZGlvIGdyb3VwLiAg
QWx3YXlzCiAgICAgLy8gc2tpcCBhbnkgb3RoZXIgZWxlbWVudHMgaW4gdGhlIGdyb3VwLgotICAg
IEVsZW1lbnQqIGN1cnJlbnRGb2N1c2VkTm9kZSA9IGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5mb2N1
c2VkRWxlbWVudCgpOworICAgIEVsZW1lbnQqIGN1cnJlbnRGb2N1c2VkTm9kZSA9IGVsZW1lbnQo
KS5kb2N1bWVudCgpLmZvY3VzZWRFbGVtZW50KCk7CiAgICAgaWYgKGN1cnJlbnRGb2N1c2VkTm9k
ZSAmJiBpc0hUTUxJbnB1dEVsZW1lbnQoY3VycmVudEZvY3VzZWROb2RlKSkgewogICAgICAgICBI
VE1MSW5wdXRFbGVtZW50KiBmb2N1c2VkSW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQoY3VycmVu
dEZvY3VzZWROb2RlKTsKLSAgICAgICAgaWYgKGZvY3VzZWRJbnB1dC0+aXNSYWRpb0J1dHRvbigp
ICYmIGZvY3VzZWRJbnB1dC0+Zm9ybSgpID09IGVsZW1lbnQoKS0+Zm9ybSgpICYmIGZvY3VzZWRJ
bnB1dC0+bmFtZSgpID09IGVsZW1lbnQoKS0+bmFtZSgpKQorICAgICAgICBpZiAoZm9jdXNlZElu
cHV0LT5pc1JhZGlvQnV0dG9uKCkgJiYgZm9jdXNlZElucHV0LT5mb3JtKCkgPT0gZWxlbWVudCgp
LmZvcm0oKSAmJiBmb2N1c2VkSW5wdXQtPm5hbWUoKSA9PSBlbGVtZW50KCkubmFtZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIEFsbG93IGtleWJvYXJkIGZv
Y3VzIGlmIHdlJ3JlIGNoZWNrZWQgb3IgaWYgbm90aGluZyBpbiB0aGUgZ3JvdXAgaXMgY2hlY2tl
ZC4KLSAgICByZXR1cm4gZWxlbWVudCgpLT5jaGVja2VkKCkgfHwgIWVsZW1lbnQoKS0+Y2hlY2tl
ZFJhZGlvQnV0dG9uRm9yR3JvdXAoKTsKKyAgICByZXR1cm4gZWxlbWVudCgpLmNoZWNrZWQoKSB8
fCAhZWxlbWVudCgpLmNoZWNrZWRSYWRpb0J1dHRvbkZvckdyb3VwKCk7CiB9CiAKIGJvb2wgUmFk
aW9JbnB1dFR5cGU6OnNob3VsZFNlbmRDaGFuZ2VFdmVudEFmdGVyQ2hlY2tlZENoYW5nZWQoKQog
ewogICAgIC8vIERvbid0IHNlbmQgYSBjaGFuZ2UgZXZlbnQgZm9yIGEgcmFkaW8gYnV0dG9uIHRo
YXQncyBnZXR0aW5nIHVuY2hlY2tlZC4KICAgICAvLyBUaGlzIHdhcyBkb25lIHRvIG1hdGNoIHRo
ZSBiZWhhdmlvciBvZiBvdGhlciBicm93c2Vycy4KLSAgICByZXR1cm4gZWxlbWVudCgpLT5jaGVj
a2VkKCk7CisgICAgcmV0dXJuIGVsZW1lbnQoKS5jaGVja2VkKCk7CiB9CiAKIFBhc3NPd25QdHI8
Q2xpY2tIYW5kbGluZ1N0YXRlPiBSYWRpb0lucHV0VHlwZTo6d2lsbERpc3BhdGNoQ2xpY2soKQpA
QCAtMTU2LDE3ICsxNTYsMTcgQEAgUGFzc093blB0cjxDbGlja0hhbmRsaW5nU3RhdGU+IFJhZGlv
SW5wdQogCiAgICAgT3duUHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4gc3RhdGUgPSBhZG9wdFB0cihu
ZXcgQ2xpY2tIYW5kbGluZ1N0YXRlKTsKIAotICAgIHN0YXRlLT5jaGVja2VkID0gZWxlbWVudCgp
LT5jaGVja2VkKCk7Ci0gICAgc3RhdGUtPmNoZWNrZWRSYWRpb0J1dHRvbiA9IGVsZW1lbnQoKS0+
Y2hlY2tlZFJhZGlvQnV0dG9uRm9yR3JvdXAoKTsKKyAgICBzdGF0ZS0+Y2hlY2tlZCA9IGVsZW1l
bnQoKS5jaGVja2VkKCk7CisgICAgc3RhdGUtPmNoZWNrZWRSYWRpb0J1dHRvbiA9IGVsZW1lbnQo
KS5jaGVja2VkUmFkaW9CdXR0b25Gb3JHcm91cCgpOwogCiAjaWYgUExBVEZPUk0oSU9TKQotICAg
IHN0YXRlLT5pbmRldGVybWluYXRlID0gZWxlbWVudCgpLT5pbmRldGVybWluYXRlKCk7CisgICAg
c3RhdGUtPmluZGV0ZXJtaW5hdGUgPSBlbGVtZW50KCkuaW5kZXRlcm1pbmF0ZSgpOwogCi0gICAg
aWYgKGVsZW1lbnQoKS0+aW5kZXRlcm1pbmF0ZSgpKQotICAgICAgICBlbGVtZW50KCktPnNldElu
ZGV0ZXJtaW5hdGUoZmFsc2UpOworICAgIGlmIChlbGVtZW50KCkuaW5kZXRlcm1pbmF0ZSgpKQor
ICAgICAgICBlbGVtZW50KCkuc2V0SW5kZXRlcm1pbmF0ZShmYWxzZSk7CiAjZW5kaWYKIAotICAg
IGVsZW1lbnQoKS0+c2V0Q2hlY2tlZCh0cnVlLCBEaXNwYXRjaENoYW5nZUV2ZW50KTsKKyAgICBl
bGVtZW50KCkuc2V0Q2hlY2tlZCh0cnVlLCBEaXNwYXRjaENoYW5nZUV2ZW50KTsKIAogICAgIHJl
dHVybiBzdGF0ZS5yZWxlYXNlKCk7CiB9CkBAIC0xNzksMTMgKzE3OSwxMyBAQCB2b2lkIFJhZGlv
SW5wdXRUeXBlOjpkaWREaXNwYXRjaENsaWNrKEV2CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQq
IGNoZWNrZWRSYWRpb0J1dHRvbiA9IHN0YXRlLmNoZWNrZWRSYWRpb0J1dHRvbi5nZXQoKTsKICAg
ICAgICAgaWYgKGNoZWNrZWRSYWRpb0J1dHRvbgogICAgICAgICAgICAgICAgICYmIGNoZWNrZWRS
YWRpb0J1dHRvbi0+aXNSYWRpb0J1dHRvbigpCi0gICAgICAgICAgICAgICAgJiYgY2hlY2tlZFJh
ZGlvQnV0dG9uLT5mb3JtKCkgPT0gZWxlbWVudCgpLT5mb3JtKCkKLSAgICAgICAgICAgICAgICAm
JiBjaGVja2VkUmFkaW9CdXR0b24tPm5hbWUoKSA9PSBlbGVtZW50KCktPm5hbWUoKSkgeworICAg
ICAgICAgICAgICAgICYmIGNoZWNrZWRSYWRpb0J1dHRvbi0+Zm9ybSgpID09IGVsZW1lbnQoKS5m
b3JtKCkKKyAgICAgICAgICAgICAgICAmJiBjaGVja2VkUmFkaW9CdXR0b24tPm5hbWUoKSA9PSBl
bGVtZW50KCkubmFtZSgpKSB7CiAgICAgICAgICAgICBjaGVja2VkUmFkaW9CdXR0b24tPnNldENo
ZWNrZWQodHJ1ZSk7CiAgICAgICAgIH0KIAogI2lmIFBMQVRGT1JNKElPUykgICAgICAgIAotICAg
ICAgICBlbGVtZW50KCktPnNldEluZGV0ZXJtaW5hdGUoc3RhdGUuaW5kZXRlcm1pbmF0ZSk7Cisg
ICAgICAgIGVsZW1lbnQoKS5zZXRJbmRldGVybWluYXRlKHN0YXRlLmluZGV0ZXJtaW5hdGUpOwog
I2VuZGlmCiAKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5oCShy
ZXZpc2lvbiAxNTU5MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDEwICszNywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIFJhZGlvSW5wdXRUeXBlIDogcHVibGljIEJhc2VDaGVja2FibGVJbnB1dFR5cGUgewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElucHV0VHlwZT4gY3JlYXRlKEhUTUxJbnB1
dEVsZW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGU+IGNyZWF0ZShIVE1M
SW5wdXRFbGVtZW50Jik7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgUmFkaW9JbnB1dFR5cGUo
SFRNTElucHV0RWxlbWVudCogZWxlbWVudCkgOiBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlKGVsZW1l
bnQpIHsgfQorICAgIGV4cGxpY2l0IFJhZGlvSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQmIGVs
ZW1lbnQpIDogQmFzZUNoZWNrYWJsZUlucHV0VHlwZShlbGVtZW50KSB7IH0KICAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3QgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCBib29sIHZhbHVlTWlzc2luZyhjb25zdCBTdHJpbmcmKSBjb25zdCBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZU1pc3NpbmdUZXh0KCkgY29uc3QgT1ZFUlJJREU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMTU1
OTA4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc4LDEyICs3OCwxMiBAQCBzdGF0aWMgRGVjaW1hbCBlbnN1cmVNYXhpbXVtKGNv
bnN0IERlY2ltCiAgICAgcmV0dXJuIHByb3Bvc2VkVmFsdWUgPj0gbWluaW11bSA/IHByb3Bvc2Vk
VmFsdWUgOiBzdGQ6Om1heChtaW5pbXVtLCBmYWxsYmFja1ZhbHVlKTsKIH0KIAotUGFzc093blB0
cjxJbnB1dFR5cGU+IFJhbmdlSW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCogZWxl
bWVudCkKK1Bhc3NPd25QdHI8SW5wdXRUeXBlPiBSYW5nZUlucHV0VHlwZTo6Y3JlYXRlKEhUTUxJ
bnB1dEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBSYW5nZUlu
cHV0VHlwZShlbGVtZW50KSk7CiB9CiAKLVJhbmdlSW5wdXRUeXBlOjpSYW5nZUlucHV0VHlwZShI
VE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQorUmFuZ2VJbnB1dFR5cGU6OlJhbmdlSW5wdXRUeXBl
KEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgOiBJbnB1dFR5cGUoZWxlbWVudCkKICNp
ZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKICAgICAsIG1fdGlja01hcmtWYWx1ZXNEaXJ0eSh0
cnVlKQpAQCAtMTA4LDEyICsxMDgsMTIgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBSYW5nZUlucHV0
VHlwZTo6Zm9ybQogCiBkb3VibGUgUmFuZ2VJbnB1dFR5cGU6OnZhbHVlQXNEb3VibGUoKSBjb25z
dAogewotICAgIHJldHVybiBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShlbGVtZW50KCktPnZh
bHVlKCkpOworICAgIHJldHVybiBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShlbGVtZW50KCku
dmFsdWUoKSk7CiB9CiAKIHZvaWQgUmFuZ2VJbnB1dFR5cGU6OnNldFZhbHVlQXNEZWNpbWFsKGNv
bnN0IERlY2ltYWwmIG5ld1ZhbHVlLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZp
b3IsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdAogewotICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUoc2Vy
aWFsaXplKG5ld1ZhbHVlKSwgZXZlbnRCZWhhdmlvcik7CisgICAgZWxlbWVudCgpLnNldFZhbHVl
KHNlcmlhbGl6ZShuZXdWYWx1ZSksIGV2ZW50QmVoYXZpb3IpOwogfQogCiBib29sIFJhbmdlSW5w
dXRUeXBlOjp0eXBlTWlzbWF0Y2hGb3IoY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKQEAgLTEz
MCwxNiArMTMwLDE2IEBAIFN0ZXBSYW5nZSBSYW5nZUlucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmcK
IHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0ZXBSYW5nZTo6U3RlcERlc2NyaXB0
aW9uLCBzdGVwRGVzY3JpcHRpb24sIChyYW5nZURlZmF1bHRTdGVwLCByYW5nZURlZmF1bHRTdGVw
QmFzZSwgcmFuZ2VTdGVwU2NhbGVGYWN0b3IpKTsKIAotICAgIGNvbnN0IERlY2ltYWwgbWluaW11
bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCBy
YW5nZURlZmF1bHRNaW5pbXVtKTsKLSAgICBjb25zdCBEZWNpbWFsIG1heGltdW0gPSBlbnN1cmVN
YXhpbXVtKHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1heEF0dHIp
LCByYW5nZURlZmF1bHRNYXhpbXVtKSwgbWluaW11bSwgcmFuZ2VEZWZhdWx0TWF4aW11bSk7Cisg
ICAgY29uc3QgRGVjaW1hbCBtaW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuZmFzdEdl
dEF0dHJpYnV0ZShtaW5BdHRyKSwgcmFuZ2VEZWZhdWx0TWluaW11bSk7CisgICAgY29uc3QgRGVj
aW1hbCBtYXhpbXVtID0gZW5zdXJlTWF4aW11bShwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5mYXN0
R2V0QXR0cmlidXRlKG1heEF0dHIpLCByYW5nZURlZmF1bHRNYXhpbXVtKSwgbWluaW11bSwgcmFu
Z2VEZWZhdWx0TWF4aW11bSk7CiAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHByZWNpc2lvblZh
bHVlID0gZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKHByZWNpc2lvbkF0dHIpOworICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgcHJlY2lzaW9uVmFsdWUgPSBlbGVtZW50KCkuZmFzdEdldEF0dHJp
YnV0ZShwcmVjaXNpb25BdHRyKTsKICAgICBpZiAoIXByZWNpc2lvblZhbHVlLmlzTnVsbCgpKSB7
CiAgICAgICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9IGVxdWFsSWdub3JpbmdDYXNlKHByZWNpc2lv
blZhbHVlLCAiZmxvYXQiKSA/IERlY2ltYWw6Om5hbigpIDogMTsKICAgICAgICAgcmV0dXJuIFN0
ZXBSYW5nZShtaW5pbXVtLCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBzdGVwRGVzY3JpcHRpb24p
OwogICAgIH0KIAotICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9IFN0ZXBSYW5nZTo6cGFyc2VTdGVw
KGFueVN0ZXBIYW5kbGluZywgc3RlcERlc2NyaXB0aW9uLCBlbGVtZW50KCktPmZhc3RHZXRBdHRy
aWJ1dGUoc3RlcEF0dHIpKTsKKyAgICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6OnBh
cnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLmZhc3RH
ZXRBdHRyaWJ1dGUoc3RlcEF0dHIpKTsKICAgICByZXR1cm4gU3RlcFJhbmdlKG1pbmltdW0sIG1p
bmltdW0sIG1heGltdW0sIHN0ZXAsIHN0ZXBEZXNjcmlwdGlvbik7CiB9CiAKQEAgLTE1MCwxNCAr
MTUwLDE0IEBAIGJvb2wgUmFuZ2VJbnB1dFR5cGU6OmlzU3RlcHBhYmxlKCkgY29uc3QKIAogdm9p
ZCBSYW5nZUlucHV0VHlwZTo6aGFuZGxlTW91c2VEb3duRXZlbnQoTW91c2VFdmVudCogZXZlbnQp
CiB7Ci0gICAgaWYgKGVsZW1lbnQoKS0+aXNEaXNhYmxlZE9yUmVhZE9ubHkoKSkKKyAgICBpZiAo
ZWxlbWVudCgpLmlzRGlzYWJsZWRPclJlYWRPbmx5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IE5vZGUqIHRhcmdldE5vZGUgPSBldmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOwogICAgIGlmIChl
dmVudC0+YnV0dG9uKCkgIT0gTGVmdEJ1dHRvbiB8fCAhdGFyZ2V0Tm9kZSkKICAgICAgICAgcmV0
dXJuOwotICAgIEFTU0VSVChlbGVtZW50KCktPnNoYWRvd1Jvb3QoKSk7Ci0gICAgaWYgKHRhcmdl
dE5vZGUgIT0gZWxlbWVudCgpICYmICF0YXJnZXROb2RlLT5pc0Rlc2NlbmRhbnRPZihlbGVtZW50
KCktPnVzZXJBZ2VudFNoYWRvd1Jvb3QoKSkpCisgICAgQVNTRVJUKGVsZW1lbnQoKS5zaGFkb3dS
b290KCkpOworICAgIGlmICh0YXJnZXROb2RlICE9ICZlbGVtZW50KCkgJiYgIXRhcmdldE5vZGUt
PmlzRGVzY2VuZGFudE9mKGVsZW1lbnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCkpKQogICAgICAg
ICByZXR1cm47CiAgICAgU2xpZGVyVGh1bWJFbGVtZW50KiB0aHVtYiA9IHNsaWRlclRodW1iRWxl
bWVudE9mKGVsZW1lbnQoKSk7CiAgICAgaWYgKHRhcmdldE5vZGUgPT0gdGh1bWIpCkBAIC0xNjks
NyArMTY5LDcgQEAgdm9pZCBSYW5nZUlucHV0VHlwZTo6aGFuZGxlTW91c2VEb3duRXZlbgogI2lm
IEVOQUJMRShUT1VDSF9TTElERVIpCiB2b2lkIFJhbmdlSW5wdXRUeXBlOjpoYW5kbGVUb3VjaEV2
ZW50KFRvdWNoRXZlbnQqIGV2ZW50KQogewotICAgIGlmIChlbGVtZW50KCktPmlzRGlzYWJsZWRP
clJlYWRPbmx5KCkpCisgICAgaWYgKGVsZW1lbnQoKS5pc0Rpc2FibGVkT3JSZWFkT25seSgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
dG91Y2hlbmRFdmVudCkgewpAQCAtMTk1LDEyICsxOTUsMTIgQEAgYm9vbCBSYW5nZUlucHV0VHlw
ZTo6aGFzVG91Y2hFdmVudEhhbmRsZQogCiB2b2lkIFJhbmdlSW5wdXRUeXBlOjpoYW5kbGVLZXlk
b3duRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKGVsZW1lbnQoKS0+aXNE
aXNhYmxlZE9yUmVhZE9ubHkoKSkKKyAgICBpZiAoZWxlbWVudCgpLmlzRGlzYWJsZWRPclJlYWRP
bmx5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IFN0cmluZyYga2V5ID0gZXZlbnQt
PmtleUlkZW50aWZpZXIoKTsKIAotICAgIGNvbnN0IERlY2ltYWwgY3VycmVudCA9IHBhcnNlVG9O
dW1iZXJPck5hTihlbGVtZW50KCktPnZhbHVlKCkpOworICAgIGNvbnN0IERlY2ltYWwgY3VycmVu
dCA9IHBhcnNlVG9OdW1iZXJPck5hTihlbGVtZW50KCkudmFsdWUoKSk7CiAgICAgQVNTRVJUKGN1
cnJlbnQuaXNGaW5pdGUoKSk7CiAKICAgICBTdGVwUmFuZ2Ugc3RlcFJhbmdlKGNyZWF0ZVN0ZXBS
YW5nZShSZWplY3RBbnkpKTsKQEAgLTIwOCwxMiArMjA4LDEyIEBAIHZvaWQgUmFuZ2VJbnB1dFR5
cGU6OmhhbmRsZUtleWRvd25FdmVudCgKIAogICAgIC8vIEZJWE1FOiBXZSBjYW4ndCB1c2Ugc3Rl
cFVwKCkgZm9yIHRoZSBzdGVwIHZhbHVlICJhbnkiLiBTbywgd2UgaW5jcmVhc2UKICAgICAvLyBv
ciBkZWNyZWFzZSB0aGUgdmFsdWUgYnkgMS8xMDAgb2YgdGhlIHZhbHVlIHJhbmdlLiBJcyBpdCBy
ZWFzb25hYmxlPwotICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9IGVxdWFsSWdub3JpbmdDYXNlKGVs
ZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShzdGVwQXR0ciksICJhbnkiKSA/IChzdGVwUmFuZ2Uu
bWF4aW11bSgpIC0gc3RlcFJhbmdlLm1pbmltdW0oKSkgLyAxMDAgOiBzdGVwUmFuZ2Uuc3RlcCgp
OworICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9IGVxdWFsSWdub3JpbmdDYXNlKGVsZW1lbnQoKS5m
YXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKSwgImFueSIpID8gKHN0ZXBSYW5nZS5tYXhpbXVtKCkg
LSBzdGVwUmFuZ2UubWluaW11bSgpKSAvIDEwMCA6IHN0ZXBSYW5nZS5zdGVwKCk7CiAgICAgY29u
c3QgRGVjaW1hbCBiaWdTdGVwID0gbWF4KChzdGVwUmFuZ2UubWF4aW11bSgpIC0gc3RlcFJhbmdl
Lm1pbmltdW0oKSkgLyAxMCwgc3RlcCk7CiAKICAgICBib29sIGlzVmVydGljYWwgPSBmYWxzZTsK
LSAgICBpZiAoZWxlbWVudCgpLT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIENvbnRyb2xQYXJ0IHBh
cnQgPSBlbGVtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKKyAgICBp
ZiAoZWxlbWVudCgpLnJlbmRlcmVyKCkpIHsKKyAgICAgICAgQ29udHJvbFBhcnQgcGFydCA9IGVs
ZW1lbnQoKS5yZW5kZXJlcigpLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCk7CiAgICAgICAgIGlzVmVy
dGljYWwgPSBwYXJ0ID09IFNsaWRlclZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1l
U2xpZGVyUGFydDsKICAgICB9CiAKQEAgLTI0NCw5ICsyNDQsOSBAQCB2b2lkIFJhbmdlSW5wdXRU
eXBlOjpoYW5kbGVLZXlkb3duRXZlbnQoCiAgICAgICAgIFRleHRGaWVsZEV2ZW50QmVoYXZpb3Ig
ZXZlbnRCZWhhdmlvciA9IERpc3BhdGNoQ2hhbmdlRXZlbnQ7CiAgICAgICAgIHNldFZhbHVlQXNE
ZWNpbWFsKG5ld1ZhbHVlLCBldmVudEJlaGF2aW9yLCBJR05PUkVfRVhDRVBUSU9OKTsKIAotICAg
ICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBlbGVtZW50KCktPmRvY3VtZW50KCkuZXhp
c3RpbmdBWE9iamVjdENhY2hlKCkpCi0gICAgICAgICAgICBjYWNoZS0+cG9zdE5vdGlmaWNhdGlv
bihlbGVtZW50KCksIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsKLSAgICAg
ICAgZWxlbWVudCgpLT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKKyAgICAgICAg
aWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZWxlbWVudCgpLmRvY3VtZW50KCkuZXhpc3RpbmdB
WE9iamVjdENhY2hlKCkpCisgICAgICAgICAgICBjYWNoZS0+cG9zdE5vdGlmaWNhdGlvbigmZWxl
bWVudCgpLCBBWE9iamVjdENhY2hlOjpBWFZhbHVlQ2hhbmdlZCwgdHJ1ZSk7CisgICAgICAgIGVs
ZW1lbnQoKS5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKICAgICB9CiAKICAgICBl
dmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKQEAgLTI1NCwyMCArMjU0LDIwIEBAIHZvaWQgUmFu
Z2VJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudCgKIAogdm9pZCBSYW5nZUlucHV0VHlwZTo6
Y3JlYXRlU2hhZG93U3VidHJlZSgpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKS0+c2hhZG93Um9v
dCgpKTsKKyAgICBBU1NFUlQoZWxlbWVudCgpLnNoYWRvd1Jvb3QoKSk7CiAKLSAgICBEb2N1bWVu
dCYgZG9jdW1lbnQgPSBlbGVtZW50KCktPmRvY3VtZW50KCk7CisgICAgRG9jdW1lbnQmIGRvY3Vt
ZW50ID0gZWxlbWVudCgpLmRvY3VtZW50KCk7CiAgICAgUmVmUHRyPEhUTUxEaXZFbGVtZW50PiB0
cmFjayA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwogICAgIHRyYWNrLT5zZXRQ
c2V1ZG8oQXRvbWljU3RyaW5nKCItd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFjayIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICB0cmFjay0+YXBwZW5kQ2hpbGQo
U2xpZGVyVGh1bWJFbGVtZW50OjpjcmVhdGUoJmRvY3VtZW50KSwgSUdOT1JFX0VYQ0VQVElPTik7
Ci0gICAgUmVmUHRyPEhUTUxFbGVtZW50PiBjb250YWluZXIgPSBTbGlkZXJDb250YWluZXJFbGVt
ZW50OjpjcmVhdGUoJmRvY3VtZW50KTsKKyAgICB0cmFjay0+YXBwZW5kQ2hpbGQoU2xpZGVyVGh1
bWJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICBSZWZQ
dHI8SFRNTEVsZW1lbnQ+IGNvbnRhaW5lciA9IFNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0
ZShkb2N1bWVudCk7CiAgICAgY29udGFpbmVyLT5hcHBlbmRDaGlsZCh0cmFjay5yZWxlYXNlKCks
IElHTk9SRV9FWENFUFRJT04pOwotICAgIGVsZW1lbnQoKS0+dXNlckFnZW50U2hhZG93Um9vdCgp
LT5hcHBlbmRDaGlsZChjb250YWluZXIucmVsZWFzZSgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAg
ICBlbGVtZW50KCkudXNlckFnZW50U2hhZG93Um9vdCgpLT5hcHBlbmRDaGlsZChjb250YWluZXIu
cmVsZWFzZSgpLCBJR05PUkVfRVhDRVBUSU9OKTsKIH0KIAogUmVuZGVyT2JqZWN0KiBSYW5nZUlu
cHV0VHlwZTo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEmIGFyZW5hLCBSZW5kZXJTdHlsZSYp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNsaWRlcihlbGVtZW50KCkp
OworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTbGlkZXIoJmVsZW1lbnQoKSk7CiB9CiAK
IERlY2ltYWwgUmFuZ2VJbnB1dFR5cGU6OnBhcnNlVG9OdW1iZXIoY29uc3QgU3RyaW5nJiBzcmMs
IGNvbnN0IERlY2ltYWwmIGRlZmF1bHRWYWx1ZSkgY29uc3QKQEAgLTI4Nyw3ICsyODcsNyBAQCB2
b2lkIFJhbmdlSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oYm9vCiB7CiAgICAgSW5wdXRUeXBl
OjphY2Nlc3NLZXlBY3Rpb24oc2VuZE1vdXNlRXZlbnRzKTsKIAotICAgIGVsZW1lbnQoKS0+ZGlz
cGF0Y2hTaW11bGF0ZWRDbGljaygwLCBzZW5kTW91c2VFdmVudHMgPyBTZW5kTW91c2VVcERvd25F
dmVudHMgOiBTZW5kTm9FdmVudHMpOworICAgIGVsZW1lbnQoKS5kaXNwYXRjaFNpbXVsYXRlZENs
aWNrKDAsIHNlbmRNb3VzZUV2ZW50cyA/IFNlbmRNb3VzZVVwRG93bkV2ZW50cyA6IFNlbmROb0V2
ZW50cyk7CiB9CiAKIHZvaWQgUmFuZ2VJbnB1dFR5cGU6Om1pbk9yTWF4QXR0cmlidXRlQ2hhbmdl
ZCgpCkBAIC0yOTUsOCArMjk1LDggQEAgdm9pZCBSYW5nZUlucHV0VHlwZTo6bWluT3JNYXhBdHRy
aWJ1dGVDaAogICAgIElucHV0VHlwZTo6bWluT3JNYXhBdHRyaWJ1dGVDaGFuZ2VkKCk7CiAKICAg
ICAvLyBTYW5pdGl6ZSB0aGUgdmFsdWUuCi0gICAgaWYgKGVsZW1lbnQoKS0+aGFzRGlydHlWYWx1
ZSgpKQotICAgICAgICBlbGVtZW50KCktPnNldFZhbHVlKGVsZW1lbnQoKS0+dmFsdWUoKSk7Cisg
ICAgaWYgKGVsZW1lbnQoKS5oYXNEaXJ0eVZhbHVlKCkpCisgICAgICAgIGVsZW1lbnQoKS5zZXRW
YWx1ZShlbGVtZW50KCkudmFsdWUoKSk7CiAKICAgICBzbGlkZXJUaHVtYkVsZW1lbnRPZihlbGVt
ZW50KCkpLT5zZXRQb3NpdGlvbkZyb21WYWx1ZSgpOwogfQpAQCAtMzUzLDcgKzM1Myw3IEBAIHZv
aWQgUmFuZ2VJbnB1dFR5cGU6OnVwZGF0ZVRpY2tNYXJrVmFsdWUKICAgICAgICAgcmV0dXJuOwog
ICAgIG1fdGlja01hcmtWYWx1ZXMuY2xlYXIoKTsKICAgICBtX3RpY2tNYXJrVmFsdWVzRGlydHkg
PSBmYWxzZTsKLSAgICBIVE1MRGF0YUxpc3RFbGVtZW50KiBkYXRhTGlzdCA9IGVsZW1lbnQoKS0+
ZGF0YUxpc3QoKTsKKyAgICBIVE1MRGF0YUxpc3RFbGVtZW50KiBkYXRhTGlzdCA9IGVsZW1lbnQo
KS5kYXRhTGlzdCgpOwogICAgIGlmICghZGF0YUxpc3QpCiAgICAgICAgIHJldHVybjsKICAgICBS
ZWZQdHI8SFRNTENvbGxlY3Rpb24+IG9wdGlvbnMgPSBkYXRhTGlzdC0+b3B0aW9ucygpOwpAQCAt
MzYyLDcgKzM2Miw3IEBAIHZvaWQgUmFuZ2VJbnB1dFR5cGU6OnVwZGF0ZVRpY2tNYXJrVmFsdWUK
ICAgICAgICAgTm9kZSogbm9kZSA9IG9wdGlvbnMtPml0ZW0oaSk7CiAgICAgICAgIEhUTUxPcHRp
b25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9IVE1MT3B0aW9uRWxlbWVudChub2RlKTsKICAg
ICAgICAgU3RyaW5nIG9wdGlvblZhbHVlID0gb3B0aW9uRWxlbWVudC0+dmFsdWUoKTsKLSAgICAg
ICAgaWYgKCFlbGVtZW50KCktPmlzVmFsaWRWYWx1ZShvcHRpb25WYWx1ZSkpCisgICAgICAgIGlm
ICghZWxlbWVudCgpLmlzVmFsaWRWYWx1ZShvcHRpb25WYWx1ZSkpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgbV90aWNrTWFya1ZhbHVlcy5hcHBlbmQocGFyc2VUb051bWJlcihvcHRp
b25WYWx1ZSwgRGVjaW1hbDo6bmFuKCkpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL1JhbmdlSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9S
YW5nZUlucHV0VHlwZS5oCShyZXZpc2lvbiAxNTU5MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L1JhbmdlSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEwICszOSwxMCBAQCBjbGFz
cyBTbGlkZXJUaHVtYkVsZW1lbnQ7CiAKIGNsYXNzIFJhbmdlSW5wdXRUeXBlIDogcHVibGljIElu
cHV0VHlwZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlPiBjcmVh
dGUoSFRNTElucHV0RWxlbWVudCopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPElucHV0VHlwZT4g
Y3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQmKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBSYW5n
ZUlucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50Kik7CisgICAgZXhwbGljaXQgUmFuZ2VJbnB1dFR5
cGUoSFRNTElucHV0RWxlbWVudCYpOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIGJvb2wgaXNSYW5nZUNvbnRyb2woKSBjb25zdCBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3QgT1ZF
UlJJREU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1Jlc2V0SW5wdXRUeXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1Jlc2V0SW5wdXRUeXBlLmNwcAkocmV2aXNp
b24gMTU1OTA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9SZXNldElucHV0VHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Q
YXNzT3duUHRyPElucHV0VHlwZT4gUmVzZXRJbnB1dFR5cGU6OmNyZWF0ZShIVE1MSW5wdXRFbGVt
ZW50KiBlbGVtZW50KQorUGFzc093blB0cjxJbnB1dFR5cGU+IFJlc2V0SW5wdXRUeXBlOjpjcmVh
dGUoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFJlc2V0SW5wdXRUeXBlKGVsZW1lbnQpKTsKIH0KQEAgLTU4LDkgKzU4LDkgQEAgYm9vbCBSZXNl
dElucHV0VHlwZTo6c3VwcG9ydHNWYWxpZGF0aW9uKAogCiB2b2lkIFJlc2V0SW5wdXRUeXBlOjpo
YW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoZWxlbWVudCgp
LT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSB8fCAhZWxlbWVudCgpLT5mb3JtKCkpCisgICAgaWYg
KGVsZW1lbnQoKS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSB8fCAhZWxlbWVudCgpLmZvcm0oKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIGVsZW1lbnQoKS0+Zm9ybSgpLT5yZXNldCgpOworICAgIGVs
ZW1lbnQoKS5mb3JtKCktPnJlc2V0KCk7CiAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvUmVzZXRJbnB1dFR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1Jlc2V0SW5wdXRUeXBlLmgJKHJldmlzaW9uIDE1
NTkwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvUmVzZXRJbnB1dFR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzcsMTAgKzM3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVz
ZXRJbnB1dFR5cGUgOiBwdWJsaWMgQmFzZUJ1dHRvbklucHV0VHlwZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlPiBjcmVhdGUoSFRNTElucHV0RWxlbWVudCopOwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPElucHV0VHlwZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQm
KTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBSZXNldElucHV0VHlwZShIVE1MSW5wdXRFbGVt
ZW50KiBlbGVtZW50KSA6IEJhc2VCdXR0b25JbnB1dFR5cGUoZWxlbWVudCkgeyB9CisgICAgZXhw
bGljaXQgUmVzZXRJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkgOiBCYXNlQnV0
dG9uSW5wdXRUeXBlKGVsZW1lbnQpIHsgfQogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5n
JiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNWYWxpZGF0aW9uKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRs
ZURPTUFjdGl2YXRlRXZlbnQoRXZlbnQqKSBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvU2VhcmNoSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL1NlYXJjaElucHV0VHlwZS5jcHAJKHJldmlzaW9uIDE1NTkwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
LWlubGluZSBTZWFyY2hJbnB1dFR5cGU6OlNlYXJjaElucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50
KiBlbGVtZW50KQoraW5saW5lIFNlYXJjaElucHV0VHlwZTo6U2VhcmNoSW5wdXRUeXBlKEhUTUxJ
bnB1dEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgOiBCYXNlVGV4dElucHV0VHlwZShlbGVtZW50KQog
ICAgICwgbV9yZXN1bHRzQnV0dG9uKDApCiAgICAgLCBtX2NhbmNlbEJ1dHRvbigwKQpAQCAtNTIs
NyArNTIsNyBAQCBpbmxpbmUgU2VhcmNoSW5wdXRUeXBlOjpTZWFyY2hJbnB1dFR5cGUoCiB7CiB9
CiAKLVBhc3NPd25QdHI8SW5wdXRUeXBlPiBTZWFyY2hJbnB1dFR5cGU6OmNyZWF0ZShIVE1MSW5w
dXRFbGVtZW50KiBlbGVtZW50KQorUGFzc093blB0cjxJbnB1dFR5cGU+IFNlYXJjaElucHV0VHlw
ZTo6Y3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBTZWFyY2hJbnB1dFR5cGUoZWxlbWVudCkpOwogfQpAQCAtNjUsMTQgKzY1LDEzIEBA
IHZvaWQgU2VhcmNoSW5wdXRUeXBlOjphdHRhY2goKQogCiB2b2lkIFNlYXJjaElucHV0VHlwZTo6
YWRkU2VhcmNoUmVzdWx0KCkKIHsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVs
ZW1lbnQoKS0+cmVuZGVyZXIoKSkKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVs
ZW1lbnQoKS5yZW5kZXJlcigpKQogICAgICAgICB0b1JlbmRlclNlYXJjaEZpZWxkKHJlbmRlcmVy
KS0+YWRkU2VhcmNoUmVzdWx0KCk7CiB9CiAKIFJlbmRlck9iamVjdCogU2VhcmNoSW5wdXRUeXBl
OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSYgYXJlbmEsIFJlbmRlclN0eWxlJikgY29uc3QK
IHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsgLy8gRklYTUU6IGVsZW1lbnQoKSBzaG91bGQgcmV0
dXJuIGEgcmVmZXJlbmNlLgotICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTZWFyY2hGaWVs
ZCgqZWxlbWVudCgpKTsKKyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU2VhcmNoRmllbGQo
ZWxlbWVudCgpKTsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBTZWFyY2hJbnB1dFR5cGU6OmZv
cm1Db250cm9sVHlwZSgpIGNvbnN0CkBAIC0xMDYsMTEgKzEwNSwxMSBAQCB2b2lkIFNlYXJjaElu
cHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlCiAgICAgQVNTRVJUKGNvbnRhaW5lcik7CiAgICAg
QVNTRVJUKHRleHRXcmFwcGVyKTsKIAotICAgIFJlZlB0cjxTZWFyY2hGaWVsZFJlc3VsdHNCdXR0
b25FbGVtZW50PiByZXN1bHRzQnV0dG9uID0gU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVu
dDo6Y3JlYXRlKCZlbGVtZW50KCktPmRvY3VtZW50KCkpOworICAgIFJlZlB0cjxTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25FbGVtZW50PiByZXN1bHRzQnV0dG9uID0gU2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uRWxlbWVudDo6Y3JlYXRlKCZlbGVtZW50KCkuZG9jdW1lbnQoKSk7CiAgICAgbV9yZXN1
bHRzQnV0dG9uID0gcmVzdWx0c0J1dHRvbi5nZXQoKTsKICAgICBjb250YWluZXItPmluc2VydEJl
Zm9yZShtX3Jlc3VsdHNCdXR0b24sIHRleHRXcmFwcGVyLCBJR05PUkVfRVhDRVBUSU9OKTsKIAot
ICAgIFJlZlB0cjxTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ+IGNhbmNlbEJ1dHRvbiA9
IFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudDo6Y3JlYXRlKCZlbGVtZW50KCktPmRvY3Vt
ZW50KCkpOworICAgIFJlZlB0cjxTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ+IGNhbmNl
bEJ1dHRvbiA9IFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudDo6Y3JlYXRlKCZlbGVtZW50
KCkuZG9jdW1lbnQoKSk7CiAgICAgbV9jYW5jZWxCdXR0b24gPSBjYW5jZWxCdXR0b24uZ2V0KCk7
CiAgICAgY29udGFpbmVyLT5pbnNlcnRCZWZvcmUobV9jYW5jZWxCdXR0b24sIHRleHRXcmFwcGVy
LT5uZXh0U2libGluZygpLCBJR05PUkVfRVhDRVBUSU9OKTsKIH0KQEAgLTEyNywxNCArMTI2LDE0
IEBAIEhUTUxFbGVtZW50KiBTZWFyY2hJbnB1dFR5cGU6OmNhbmNlbEJ1dHQKIAogdm9pZCBTZWFy
Y2hJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsK
LSAgICBpZiAoZWxlbWVudCgpLT5pc0Rpc2FibGVkT3JSZWFkT25seSgpKSB7CisgICAgaWYgKGVs
ZW1lbnQoKS5pc0Rpc2FibGVkT3JSZWFkT25seSgpKSB7CiAgICAgICAgIFRleHRGaWVsZElucHV0
VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KGV2ZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGNvbnN0IFN0cmluZyYga2V5ID0gZXZlbnQtPmtleUlkZW50aWZpZXIoKTsKICAgICBp
ZiAoa2V5ID09ICJVKzAwMUIiKSB7Ci0gICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBp
bnB1dCA9IGVsZW1lbnQoKTsKKyAgICAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0
ID0gJmVsZW1lbnQoKTsKICAgICAgICAgaW5wdXQtPnNldFZhbHVlRm9yVXNlcigiIik7CiAgICAg
ICAgIGlucHV0LT5vblNlYXJjaCgpOwogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKQEAgLTE1MiwxMiArMTUxLDEyIEBAIHZvaWQgU2VhcmNoSW5wdXRUeXBlOjpkZXN0cm95U2hh
ZG93U3VidHIKIAogdm9pZCBTZWFyY2hJbnB1dFR5cGU6OnN0YXJ0U2VhcmNoRXZlbnRUaW1lcigp
CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKS0+cmVuZGVyZXIoKSk7Ci0gICAgdW5zaWduZWQgbGVu
Z3RoID0gZWxlbWVudCgpLT5pbm5lclRleHRWYWx1ZSgpLmxlbmd0aCgpOworICAgIEFTU0VSVChl
bGVtZW50KCkucmVuZGVyZXIoKSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gZWxlbWVudCgpLmlu
bmVyVGV4dFZhbHVlKCkubGVuZ3RoKCk7CiAKICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgICBz
dG9wU2VhcmNoRXZlbnRUaW1lcigpOwotICAgICAgICBlbGVtZW50KCktPm9uU2VhcmNoKCk7Cisg
ICAgICAgIGVsZW1lbnQoKS5vblNlYXJjaCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0xNzMsMTggKzE3MiwxOCBAQCB2b2lkIFNlYXJjaElucHV0VHlwZTo6c3RvcFNlYXJjaEV2ZW50
VGltCiAKIHZvaWQgU2VhcmNoSW5wdXRUeXBlOjpzZWFyY2hFdmVudFRpbWVyRmlyZWQoVGltZXI8
U2VhcmNoSW5wdXRUeXBlPiopCiB7Ci0gICAgZWxlbWVudCgpLT5vblNlYXJjaCgpOworICAgIGVs
ZW1lbnQoKS5vblNlYXJjaCgpOwogfQogCiBib29sIFNlYXJjaElucHV0VHlwZTo6c2VhcmNoRXZl
bnRzU2hvdWxkQmVEaXNwYXRjaGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5o
YXNBdHRyaWJ1dGUoaW5jcmVtZW50YWxBdHRyKTsKKyAgICByZXR1cm4gZWxlbWVudCgpLmhhc0F0
dHJpYnV0ZShpbmNyZW1lbnRhbEF0dHIpOwogfQogCiB2b2lkIFNlYXJjaElucHV0VHlwZTo6ZGlk
U2V0VmFsdWVCeVVzZXJFZGl0KFZhbHVlQ2hhbmdlU3RhdGUgc3RhdGUpCiB7CiAgICAgaWYgKG1f
Y2FuY2VsQnV0dG9uKQotICAgICAgICB0b1JlbmRlclNlYXJjaEZpZWxkKGVsZW1lbnQoKS0+cmVu
ZGVyZXIoKSktPnVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkoKTsKKyAgICAgICAgdG9SZW5k
ZXJTZWFyY2hGaWVsZChlbGVtZW50KCkucmVuZGVyZXIoKSktPnVwZGF0ZUNhbmNlbEJ1dHRvblZp
c2liaWxpdHkoKTsKIAogICAgIC8vIElmIHRoZSBpbmNyZW1lbnRhbCBhdHRyaWJ1dGUgaXMgc2V0
LCB0aGVuIGRpc3BhdGNoIHRoZSBzZWFyY2ggZXZlbnQKICAgICBpZiAoc2VhcmNoRXZlbnRzU2hv
dWxkQmVEaXNwYXRjaGVkKCkpCkBAIC0xOTUsNyArMTk0LDcgQEAgdm9pZCBTZWFyY2hJbnB1dFR5
cGU6OmRpZFNldFZhbHVlQnlVc2VyRQogCiBib29sIFNlYXJjaElucHV0VHlwZTo6c2l6ZVNob3Vs
ZEluY2x1ZGVEZWNvcmF0aW9uKGludCwgaW50JiBwcmVmZXJyZWRTaXplKSBjb25zdAogewotICAg
IHByZWZlcnJlZFNpemUgPSBlbGVtZW50KCktPnNpemUoKTsKKyAgICBwcmVmZXJyZWRTaXplID0g
ZWxlbWVudCgpLnNpemUoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL1NlYXJjaElucHV0VHlwZS5oCShyZXZpc2lvbiAxNTU5MDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMiArNDEs
MTIgQEAgY2xhc3MgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDsKIAogY2xhc3MgU2Vh
cmNoSW5wdXRUeXBlIDogcHVibGljIEJhc2VUZXh0SW5wdXRUeXBlIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGU+IGNyZWF0ZShIVE1MSW5wdXRFbGVtZW50Kik7Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlPiBjcmVhdGUoSFRNTElucHV0RWxlbWVudCYp
OwogCiAgICAgdm9pZCBzdG9wU2VhcmNoRXZlbnRUaW1lcigpOwogCiBwcml2YXRlOgotICAgIGV4
cGxpY2l0IFNlYXJjaElucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50Kik7CisgICAgZXhwbGljaXQg
U2VhcmNoSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgYXR0
YWNoKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGFkZFNlYXJjaFJlc3VsdCgpIE9WRVJS
SURFOwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVu
YSYsIFJlbmRlclN0eWxlJikgY29uc3QgT1ZFUlJJREU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL1N1Ym1pdElucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9TdWJtaXRJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAxNTU5MDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL1N1Ym1pdElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPElucHV0VHlwZT4gU3VibWl0
SW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKK1Bhc3NPd25QdHI8
SW5wdXRUeXBlPiBTdWJtaXRJbnB1dFR5cGU6OmNyZWF0ZShIVE1MSW5wdXRFbGVtZW50JiBlbGVt
ZW50KQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgU3VibWl0SW5wdXRUeXBlKGVsZW1lbnQp
KTsKIH0KQEAgLTU0LDkgKzU0LDkgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBTdWJtaXRJbnB1dFR5
cGU6OmZvcgogCiBib29sIFN1Ym1pdElucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRm9ybURhdGFM
aXN0JiBlbmNvZGluZywgYm9vbCkgY29uc3QKIHsKLSAgICBpZiAoIWVsZW1lbnQoKS0+aXNBY3Rp
dmF0ZWRTdWJtaXQoKSkKKyAgICBpZiAoIWVsZW1lbnQoKS5pc0FjdGl2YXRlZFN1Ym1pdCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZW5jb2RpbmcuYXBwZW5kRGF0YShlbGVtZW50KCkt
Pm5hbWUoKSwgZWxlbWVudCgpLT52YWx1ZVdpdGhEZWZhdWx0KCkpOworICAgIGVuY29kaW5nLmFw
cGVuZERhdGEoZWxlbWVudCgpLm5hbWUoKSwgZWxlbWVudCgpLnZhbHVlV2l0aERlZmF1bHQoKSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTY3LDcgKzY3LDcgQEAgYm9vbCBTdWJtaXRJbnB1
dFR5cGU6OnN1cHBvcnRzUmVxdWlyZWQoKQogCiB2b2lkIFN1Ym1pdElucHV0VHlwZTo6aGFuZGxl
RE9NQWN0aXZhdGVFdmVudChFdmVudCogZXZlbnQpCiB7Ci0gICAgUmVmUHRyPEhUTUxJbnB1dEVs
ZW1lbnQ+IGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCk7CisgICAgUmVmUHRyPEhUTUxJbnB1dEVs
ZW1lbnQ+IGVsZW1lbnQgPSAmdGhpcy0+ZWxlbWVudCgpOwogICAgIGlmIChlbGVtZW50LT5pc0Rp
c2FibGVkRm9ybUNvbnRyb2woKSB8fCAhZWxlbWVudC0+Zm9ybSgpKQogICAgICAgICByZXR1cm47
CiAgICAgZWxlbWVudC0+c2V0QWN0aXZhdGVkU3VibWl0KHRydWUpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9TdWJtaXRJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL1N1Ym1pdElucHV0VHlwZS5oCShyZXZpc2lvbiAxNTU5MDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL1N1Ym1pdElucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcs
MTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTdWJtaXRJbnB1dFR5cGUgOiBwdWJs
aWMgQmFzZUJ1dHRvbklucHV0VHlwZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
SW5wdXRUeXBlPiBjcmVhdGUoSFRNTElucHV0RWxlbWVudCopOworICAgIHN0YXRpYyBQYXNzT3du
UHRyPElucHV0VHlwZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQmKTsKIAogcHJpdmF0ZToKLSAg
ICBleHBsaWNpdCBTdWJtaXRJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkgOiBC
YXNlQnV0dG9uSW5wdXRUeXBlKGVsZW1lbnQpIHsgfQorICAgIGV4cGxpY2l0IFN1Ym1pdElucHV0
VHlwZShIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KSA6IEJhc2VCdXR0b25JbnB1dFR5cGUoZWxl
bWVudCkgeyB9CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlw
ZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBhcHBlbmRGb3JtRGF0YShGb3Jt
RGF0YUxpc3QmLCBib29sKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNSZXF1aXJlZCgpIGNvbnN0IE9WRVJSSURFOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9U
ZWxlcGhvbmVJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
VGVsZXBob25lSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMTU1OTA3KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9UZWxlcGhvbmVJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxJbnB1dFR5cGU+IFRl
bGVwaG9uZUlucHV0VHlwZTo6Y3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCitQYXNz
T3duUHRyPElucHV0VHlwZT4gVGVsZXBob25lSW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxl
bWVudCYgZWxlbWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRlbGVwaG9uZUlucHV0
VHlwZShlbGVtZW50KSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1RlbGVwaG9uZUlu
cHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGVsZXBob25lSW5w
dXRUeXBlLmgJKHJldmlzaW9uIDE1NTkwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGVsZXBo
b25lSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEwICszNywxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFRlbGVwaG9uZUlucHV0VHlwZSA6IHB1YmxpYyBCYXNlVGV4
dElucHV0VHlwZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlPiBj
cmVhdGUoSFRNTElucHV0RWxlbWVudCopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPElucHV0VHlw
ZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQmKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBU
ZWxlcGhvbmVJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkgOiBCYXNlVGV4dElu
cHV0VHlwZShlbGVtZW50KSB7IH0KKyAgICBleHBsaWNpdCBUZWxlcGhvbmVJbnB1dFR5cGUoSFRN
TElucHV0RWxlbWVudCYgZWxlbWVudCkgOiBCYXNlVGV4dElucHV0VHlwZShlbGVtZW50KSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRlKCkgT1ZFUlJJREU7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAxNTU5
MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogCi1UZXh0RmllbGRJbnB1dFR5cGU6OlRleHRGaWVsZElucHV0
VHlwZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQorVGV4dEZpZWxkSW5wdXRUeXBlOjpUZXh0
RmllbGRJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkKICAgICA6IElucHV0VHlw
ZShlbGVtZW50KQogewogfQpAQCAtNzAsMTIgKzcwLDEyIEBAIFRleHRGaWVsZElucHV0VHlwZTo6
flRleHRGaWVsZElucHV0VHlwZSgKIAogYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OmlzS2V5Ym9h
cmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGVsZW1lbnQo
KS0+aXNUZXh0Rm9ybUNvbnRyb2xGb2N1c2FibGUoKTsKKyAgICByZXR1cm4gZWxlbWVudCgpLmlz
VGV4dEZvcm1Db250cm9sRm9jdXNhYmxlKCk7CiB9CiAKIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBl
Ojppc01vdXNlRm9jdXNhYmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5pc1Rl
eHRGb3JtQ29udHJvbEZvY3VzYWJsZSgpOworICAgIHJldHVybiBlbGVtZW50KCkuaXNUZXh0Rm9y
bUNvbnRyb2xGb2N1c2FibGUoKTsKIH0KIAogYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OmlzVGV4
dEZpZWxkKCkgY29uc3QKQEAgLTg1LDcgKzg1LDcgQEAgYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6
OmlzVGV4dEZpZWxkKCkgYwogCiBib29sIFRleHRGaWVsZElucHV0VHlwZTo6dmFsdWVNaXNzaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+aXNS
ZXF1aXJlZCgpICYmIHZhbHVlLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gZWxlbWVudCgpLmlzUmVx
dWlyZWQoKSAmJiB2YWx1ZS5pc0VtcHR5KCk7CiB9CiAKIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBl
OjpjYW5TZXRTdWdnZXN0ZWRWYWx1ZSgpCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgVGV4dEZpZWxk
SW5wdXRUeXBlOjpzZXRWYWx1ZShjb25zdCAKIHsKICAgICAvLyBHcmFiIHRoaXMgaW5wdXQgZWxl
bWVudCB0byBrZWVwIHJlZmVyZW5jZSBldmVuIGlmIEpTIGV2ZW50IGhhbmRsZXIKICAgICAvLyBj
aGFuZ2VzIGlucHV0IHR5cGUuCi0gICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0KGVs
ZW1lbnQoKSk7CisgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0ID0gJmVsZW1lbnQo
KTsKIAogICAgIC8vIFdlIGRvbid0IGFzayBJbnB1dFR5cGU6OnNldFZhbHVlIHRvIGRpc3BhdGNo
IGV2ZW50cyBiZWNhdXNlCiAgICAgLy8gVGV4dEZpZWxkSW5wdXRUeXBlIGRpc3BhdGNoZXMgZXZl
bnRzIGRpZmZlcmVudCB3YXkgZnJvbSBJbnB1dFR5cGUuCkBAIC0xNDIsMTcgKzE0MiwxNyBAQCB2
b2lkIFRleHRGaWVsZElucHV0VHlwZTo6c2V0VmFsdWUoY29uc3QgCiAKIHZvaWQgVGV4dEZpZWxk
SW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0g
ICAgaWYgKCFlbGVtZW50KCktPmZvY3VzZWQoKSkKKyAgICBpZiAoIWVsZW1lbnQoKS5mb2N1c2Vk
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBGcmFtZSogZnJhbWUgPSBlbGVtZW50KCktPmRvY3Vt
ZW50KCkuZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+ZWRpdG9yKCkuZG9UZXh0
RmllbGRDb21tYW5kRnJvbUV2ZW50KGVsZW1lbnQoKSwgZXZlbnQpKQorICAgIEZyYW1lKiBmcmFt
ZSA9IGVsZW1lbnQoKS5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSB8fCAhZnJh
bWUtPmVkaXRvcigpLmRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudCgmZWxlbWVudCgpLCBldmVu
dCkpCiAgICAgICAgIHJldHVybjsKICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0K
IAogdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudEZvclNwaW5CdXR0
b24oS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKGVsZW1lbnQoKS0+aXNEaXNhYmxl
ZE9yUmVhZE9ubHkoKSkKKyAgICBpZiAoZWxlbWVudCgpLmlzRGlzYWJsZWRPclJlYWRPbmx5KCkp
CiAgICAgICAgIHJldHVybjsKICAgICBjb25zdCBTdHJpbmcmIGtleSA9IGV2ZW50LT5rZXlJZGVu
dGlmaWVyKCk7CiAgICAgaWYgKGtleSA9PSAiVXAiKQpAQCAtMTcyLDggKzE3Miw4IEBAIHZvaWQg
VGV4dEZpZWxkSW5wdXRUeXBlOjpmb3J3YXJkRXZlbnQoRXYKICAgICAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAoZWxlbWVudCgpLT5yZW5kZXJlcigpICYmIChldmVudC0+aXNNb3Vz
ZUV2ZW50KCkgfHwgZXZlbnQtPmlzRHJhZ0V2ZW50KCkgfHwgZXZlbnQtPmhhc0ludGVyZmFjZShl
dmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yV2hlZWxFdmVudCkgfHwgZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkuYmx1ckV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmZv
Y3VzRXZlbnQpKSB7Ci0gICAgICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSogcmVuZGVy
VGV4dENvbnRyb2wgPSB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShlbGVtZW50KCktPnJl
bmRlcmVyKCkpOworICAgIGlmIChlbGVtZW50KCkucmVuZGVyZXIoKSAmJiAoZXZlbnQtPmlzTW91
c2VFdmVudCgpIHx8IGV2ZW50LT5pc0RyYWdFdmVudCgpIHx8IGV2ZW50LT5oYXNJbnRlcmZhY2Uo
ZXZlbnROYW1lcygpLmludGVyZmFjZUZvcldoZWVsRXZlbnQpIHx8IGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmJsdXJFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5m
b2N1c0V2ZW50KSkgeworICAgICAgICBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqIHJlbmRl
clRleHRDb250cm9sID0gdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoZWxlbWVudCgpLnJl
bmRlcmVyKCkpOwogICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmx1
ckV2ZW50KSB7CiAgICAgICAgICAgICBpZiAoUmVuZGVyQm94KiBpbm5lclRleHRSZW5kZXJlciA9
IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyQm94KCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
UmVuZGVyTGF5ZXIqIGlubmVyTGF5ZXIgPSBpbm5lclRleHRSZW5kZXJlci0+bGF5ZXIoKSkgewpA
QCAtMTg2LDE0ICsxODYsMTQgQEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmZvcndhcmRFdmVu
dChFdgogICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmZv
Y3VzRXZlbnQpCiAgICAgICAgICAgICByZW5kZXJUZXh0Q29udHJvbC0+Y2Fwc0xvY2tTdGF0ZU1h
eUhhdmVDaGFuZ2VkKCk7CiAKLSAgICAgICAgZWxlbWVudCgpLT5mb3J3YXJkRXZlbnQoZXZlbnQp
OworICAgICAgICBlbGVtZW50KCkuZm9yd2FyZEV2ZW50KGV2ZW50KTsKICAgICB9CiB9CiAKIHZv
aWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVCbHVyRXZlbnQoKQogewogICAgIElucHV0VHlw
ZTo6aGFuZGxlQmx1ckV2ZW50KCk7Ci0gICAgZWxlbWVudCgpLT5lbmRFZGl0aW5nKCk7CisgICAg
ZWxlbWVudCgpLmVuZEVkaXRpbmcoKTsKIH0KIAogYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNo
b3VsZFN1Ym1pdEltcGxpY2l0bHkoRXZlbnQqIGV2ZW50KQpAQCAtMjAzLDE0ICsyMDMsMTMgQEAg
Ym9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZFN1Ym1pdEltcAogCiBSZW5kZXJPYmplY3Qq
IFRleHRGaWVsZElucHV0VHlwZTo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEmIGFyZW5hLCBS
ZW5kZXJTdHlsZSYpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7IC8vIEZJWE1FOiBl
bGVtZW50KCkgc2hvdWxkIHJldHVybiBhIHJlZmVyZW5jZS4KLSAgICByZXR1cm4gbmV3IChhcmVu
YSkgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKCplbGVtZW50KCkpOworICAgIHJldHVybiBu
ZXcgKGFyZW5hKSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoZWxlbWVudCgpKTsKIH0KIAog
Ym9vbCBUZXh0RmllbGRJbnB1dFR5cGU6Om5lZWRzQ29udGFpbmVyKCkgY29uc3QKIHsKICNpZiBF
TkFCTEUoSU5QVVRfU1BFRUNIKQotICAgIHJldHVybiBlbGVtZW50KCktPmlzU3BlZWNoRW5hYmxl
ZCgpOworICAgIHJldHVybiBlbGVtZW50KCkuaXNTcGVlY2hFbmFibGVkKCk7CiAjZWxzZQogICAg
IHJldHVybiBmYWxzZTsKICNlbmRpZgpAQCAtMjE4LDMwICsyMTcsMzAgQEAgYm9vbCBUZXh0Rmll
bGRJbnB1dFR5cGU6Om5lZWRzQ29udGFpbmVyKAogCiBib29sIFRleHRGaWVsZElucHV0VHlwZTo6
c2hvdWxkSGF2ZVNwaW5CdXR0b24oKSBjb25zdAogewotICAgIERvY3VtZW50JiBkb2N1bWVudCA9
IGVsZW1lbnQoKS0+ZG9jdW1lbnQoKTsKKyAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBlbGVtZW50
KCkuZG9jdW1lbnQoKTsKICAgICBSZWZQdHI8UmVuZGVyVGhlbWU+IHRoZW1lID0gZG9jdW1lbnQu
cGFnZSgpID8gZG9jdW1lbnQucGFnZSgpLT50aGVtZSgpIDogUmVuZGVyVGhlbWU6OmRlZmF1bHRU
aGVtZSgpOwotICAgIHJldHVybiB0aGVtZS0+c2hvdWxkSGF2ZVNwaW5CdXR0b24oZWxlbWVudCgp
KTsKKyAgICByZXR1cm4gdGhlbWUtPnNob3VsZEhhdmVTcGluQnV0dG9uKCZlbGVtZW50KCkpOwog
fQogCiB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSgpCiB7Ci0g
ICAgQVNTRVJUKGVsZW1lbnQoKS0+c2hhZG93Um9vdCgpKTsKKyAgICBBU1NFUlQoZWxlbWVudCgp
LnNoYWRvd1Jvb3QoKSk7CiAKICAgICBBU1NFUlQoIW1faW5uZXJUZXh0KTsKICAgICBBU1NFUlQo
IW1faW5uZXJCbG9jayk7CiAgICAgQVNTRVJUKCFtX2lubmVyU3BpbkJ1dHRvbik7CiAKLSAgICBE
b2N1bWVudCYgZG9jdW1lbnQgPSBlbGVtZW50KCktPmRvY3VtZW50KCk7CisgICAgRG9jdW1lbnQm
IGRvY3VtZW50ID0gZWxlbWVudCgpLmRvY3VtZW50KCk7CiAgICAgYm9vbCBzaG91bGRIYXZlU3Bp
bkJ1dHRvbiA9IHRoaXMtPnNob3VsZEhhdmVTcGluQnV0dG9uKCk7CiAgICAgYm9vbCBjcmVhdGVz
Q29udGFpbmVyID0gc2hvdWxkSGF2ZVNwaW5CdXR0b24gfHwgbmVlZHNDb250YWluZXIoKTsKIAog
ICAgIG1faW5uZXJUZXh0ID0gVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpjcmVhdGUoJmRv
Y3VtZW50KTsKICAgICBpZiAoIWNyZWF0ZXNDb250YWluZXIpIHsKLSAgICAgICAgZWxlbWVudCgp
LT51c2VyQWdlbnRTaGFkb3dSb290KCktPmFwcGVuZENoaWxkKG1faW5uZXJUZXh0LCBJR05PUkVf
RVhDRVBUSU9OKTsKKyAgICAgICAgZWxlbWVudCgpLnVzZXJBZ2VudFNoYWRvd1Jvb3QoKS0+YXBw
ZW5kQ2hpbGQobV9pbm5lclRleHQsIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IGVsZW1lbnQoKS0+dXNlckFn
ZW50U2hhZG93Um9vdCgpOworICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBlbGVtZW50KCku
dXNlckFnZW50U2hhZG93Um9vdCgpOwogICAgIG1fY29udGFpbmVyID0gVGV4dENvbnRyb2xJbm5l
ckNvbnRhaW5lcjo6Y3JlYXRlKCZkb2N1bWVudCk7CiAgICAgbV9jb250YWluZXItPnNldFBzZXVk
byhBdG9taWNTdHJpbmcoIi13ZWJraXQtdGV4dGZpZWxkLWRlY29yYXRpb24tY29udGFpbmVyIiwg
QXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwogICAgIHNoYWRvd1Jvb3QtPmFw
cGVuZENoaWxkKG1fY29udGFpbmVyLCBJR05PUkVfRVhDRVBUSU9OKTsKQEAgLTI1Miw3ICsyNTEs
NyBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6Y3JlYXRlU2hhZG93U3ViCiAKICNpZiBFTkFC
TEUoSU5QVVRfU1BFRUNIKQogICAgIEFTU0VSVCghbV9zcGVlY2hCdXR0b24pOwotICAgIGlmIChl
bGVtZW50KCktPmlzU3BlZWNoRW5hYmxlZCgpKSB7CisgICAgaWYgKGVsZW1lbnQoKS5pc1NwZWVj
aEVuYWJsZWQoKSkgewogICAgICAgICBtX3NwZWVjaEJ1dHRvbiA9IElucHV0RmllbGRTcGVlY2hC
dXR0b25FbGVtZW50OjpjcmVhdGUoJmRvY3VtZW50KTsKICAgICAgICAgbV9jb250YWluZXItPmFw
cGVuZENoaWxkKG1fc3BlZWNoQnV0dG9uLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICB9CkBAIC0z
NzEsMTkgKzM3MCwxOSBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlQmVmb3JlVGV4
CiAgICAgLy8gV2UgdXNlIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dGV4dCgpIGluc3Rl
YWQgb2YgSW5wdXRFbGVtZW50Ojp2YWx1ZSgpCiAgICAgLy8gYmVjYXVzZSB0aGV5IGNhbiBiZSBt
aXNtYXRjaGVkIGJ5IHNhbml0aXplVmFsdWUoKSBpbgogICAgIC8vIEhUTUxJbnB1dEVsZW1lbnQ6
OnN1YnRyZWVIYXNDaGFuZ2VkKCkgaW4gc29tZSBjYXNlcy4KLSAgICB1bnNpZ25lZCBvbGRMZW5n
dGggPSBudW1HcmFwaGVtZUNsdXN0ZXJzKGVsZW1lbnQoKS0+aW5uZXJUZXh0VmFsdWUoKSk7Cisg
ICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gbnVtR3JhcGhlbWVDbHVzdGVycyhlbGVtZW50KCkuaW5u
ZXJUZXh0VmFsdWUoKSk7CiAKICAgICAvLyBzZWxlY3Rpb25MZW5ndGggcmVwcmVzZW50cyB0aGUg
c2VsZWN0aW9uIGxlbmd0aCBvZiB0aGlzIHRleHQgZmllbGQgdG8gYmUKICAgICAvLyByZW1vdmVk
IGJ5IHRoaXMgaW5zZXJ0aW9uLgogICAgIC8vIElmIHRoZSB0ZXh0IGZpZWxkIGhhcyBubyBmb2N1
cywgd2UgZG9uJ3QgbmVlZCB0byB0YWtlIGFjY291bnQgb2YgdGhlCiAgICAgLy8gc2VsZWN0aW9u
IGxlbmd0aC4gVGhlIHNlbGVjdGlvbiBpcyB0aGUgc291cmNlIG9mIHRleHQgZHJhZy1hbmQtZHJv
cCBpbgogICAgIC8vIHRoYXQgY2FzZSwgYW5kIG5vdGhpbmcgaW4gdGhlIHRleHQgZmllbGQgd2ls
bCBiZSByZW1vdmVkLgotICAgIHVuc2lnbmVkIHNlbGVjdGlvbkxlbmd0aCA9IGVsZW1lbnQoKS0+
Zm9jdXNlZCgpID8gbnVtR3JhcGhlbWVDbHVzdGVycyhwbGFpblRleHQoZWxlbWVudCgpLT5kb2N1
bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCkpKSA6IDA7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uTGVuZ3RoID0gZWxlbWVudCgp
LmZvY3VzZWQoKSA/IG51bUdyYXBoZW1lQ2x1c3RlcnMocGxhaW5UZXh0KGVsZW1lbnQoKS5kb2N1
bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCkpKSA6IDA7CiAgICAgQVNTRVJUKG9sZExlbmd0aCA+PSBzZWxlY3Rpb25MZW5ndGgp
OwogCiAgICAgLy8gU2VsZWN0ZWQgY2hhcmFjdGVycyB3aWxsIGJlIHJlbW92ZWQgYnkgdGhlIG5l
eHQgdGV4dCBldmVudC4KICAgICB1bnNpZ25lZCBiYXNlTGVuZ3RoID0gb2xkTGVuZ3RoIC0gc2Vs
ZWN0aW9uTGVuZ3RoOwotICAgIHVuc2lnbmVkIG1heExlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpc1RleHRUeXBlKCkgPyBlbGVtZW50KCktPm1heExlbmd0aCgpIDogSFRNTElucHV0RWxl
bWVudDo6bWF4aW11bUxlbmd0aCk7IC8vIG1heExlbmd0aCBjYW4gbmV2ZXIgYmUgbmVnYXRpdmUu
CisgICAgdW5zaWduZWQgbWF4TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlzVGV4dFR5
cGUoKSA/IGVsZW1lbnQoKS5tYXhMZW5ndGgoKSA6IEhUTUxJbnB1dEVsZW1lbnQ6Om1heGltdW1M
ZW5ndGgpOyAvLyBtYXhMZW5ndGggY2FuIG5ldmVyIGJlIG5lZ2F0aXZlLgogICAgIHVuc2lnbmVk
IGFwcGVuZGFibGVMZW5ndGggPSBtYXhMZW5ndGggPiBiYXNlTGVuZ3RoID8gbWF4TGVuZ3RoIC0g
YmFzZUxlbmd0aCA6IDA7CiAKICAgICAvLyBUcnVuY2F0ZSB0aGUgaW5zZXJ0ZWQgdGV4dCB0byBh
dm9pZCB2aW9sYXRpbmcgdGhlIG1heExlbmd0aCBhbmQgb3RoZXIgY29uc3RyYWludHMuCkBAIC00
MDgsNyArNDA3LDcgQEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OnVwZGF0ZVBsYWNlaG9sZAog
ewogICAgIGlmICghc3VwcG9ydHNQbGFjZWhvbGRlcigpKQogICAgICAgICByZXR1cm47Ci0gICAg
U3RyaW5nIHBsYWNlaG9sZGVyVGV4dCA9IGVsZW1lbnQoKS0+c3RyaXBwZWRQbGFjZWhvbGRlcigp
OworICAgIFN0cmluZyBwbGFjZWhvbGRlclRleHQgPSBlbGVtZW50KCkuc3RyaXBwZWRQbGFjZWhv
bGRlcigpOwogICAgIGlmIChwbGFjZWhvbGRlclRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlm
IChtX3BsYWNlaG9sZGVyKSB7CiAgICAgICAgICAgICBtX3BsYWNlaG9sZGVyLT5wYXJlbnROb2Rl
KCktPnJlbW92ZUNoaWxkKG1fcGxhY2Vob2xkZXIuZ2V0KCksIEFTU0VSVF9OT19FWENFUFRJT04p
OwpAQCAtNDE3LDkgKzQxNiw5IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjp1cGRhdGVQbGFj
ZWhvbGQKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIW1fcGxhY2Vob2xkZXIpIHsK
LSAgICAgICAgbV9wbGFjZWhvbGRlciA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZWxlbWVudCgp
LT5kb2N1bWVudCgpKTsKKyAgICAgICAgbV9wbGFjZWhvbGRlciA9IEhUTUxEaXZFbGVtZW50Ojpj
cmVhdGUoZWxlbWVudCgpLmRvY3VtZW50KCkpOwogICAgICAgICBtX3BsYWNlaG9sZGVyLT5zZXRQ
c2V1ZG8oQXRvbWljU3RyaW5nKCItd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgICAgICBlbGVtZW50KCktPnVzZXJBZ2Vu
dFNoYWRvd1Jvb3QoKS0+aW5zZXJ0QmVmb3JlKG1fcGxhY2Vob2xkZXIsIG1fY29udGFpbmVyID8g
bV9jb250YWluZXIuZ2V0KCkgOiBpbm5lclRleHRFbGVtZW50KCksIEFTU0VSVF9OT19FWENFUFRJ
T04pOworICAgICAgICBlbGVtZW50KCkudXNlckFnZW50U2hhZG93Um9vdCgpLT5pbnNlcnRCZWZv
cmUobV9wbGFjZWhvbGRlciwgbV9jb250YWluZXIgPyBtX2NvbnRhaW5lci5nZXQoKSA6IGlubmVy
VGV4dEVsZW1lbnQoKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgfQogICAgIG1fcGxhY2Vo
b2xkZXItPnNldElubmVyVGV4dChwbGFjZWhvbGRlclRleHQsIEFTU0VSVF9OT19FWENFUFRJT04p
OwogfQpAQCAtNDI3LDkgKzQyNiw5IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjp1cGRhdGVQ
bGFjZWhvbGQKIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YShGb3JtRGF0
YUxpc3QmIGxpc3QsIGJvb2wgbXVsdGlwYXJ0KSBjb25zdAogewogICAgIElucHV0VHlwZTo6YXBw
ZW5kRm9ybURhdGEobGlzdCwgbXVsdGlwYXJ0KTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGRp
cm5hbWVBdHRyVmFsdWUgPSBlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUoZGlybmFtZUF0dHIp
OworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZGlybmFtZUF0dHJWYWx1ZSA9IGVsZW1lbnQoKS5m
YXN0R2V0QXR0cmlidXRlKGRpcm5hbWVBdHRyKTsKICAgICBpZiAoIWRpcm5hbWVBdHRyVmFsdWUu
aXNOdWxsKCkpCi0gICAgICAgIGxpc3QuYXBwZW5kRGF0YShkaXJuYW1lQXR0clZhbHVlLCBlbGVt
ZW50KCktPmRpcmVjdGlvbkZvckZvcm1EYXRhKCkpOworICAgICAgICBsaXN0LmFwcGVuZERhdGEo
ZGlybmFtZUF0dHJWYWx1ZSwgZWxlbWVudCgpLmRpcmVjdGlvbkZvckZvcm1EYXRhKCkpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC00NDAsMzEgKzQzOSwzMSBAQCBTdHJpbmcgVGV4dEZpZWxk
SW5wdXRUeXBlOjpjb252ZXJ0RnJvbVZpCiAKIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpzdWJ0
cmVlSGFzQ2hhbmdlZCgpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKS0+cmVuZGVyZXIoKSk7Cisg
ICAgQVNTRVJUKGVsZW1lbnQoKS5yZW5kZXJlcigpKTsKIAotICAgIGJvb2wgd2FzQ2hhbmdlZCA9
IGVsZW1lbnQoKS0+d2FzQ2hhbmdlZFNpbmNlTGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsK
LSAgICBlbGVtZW50KCktPnNldENoYW5nZWRTaW5jZUxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50
KHRydWUpOworICAgIGJvb2wgd2FzQ2hhbmdlZCA9IGVsZW1lbnQoKS53YXNDaGFuZ2VkU2luY2VM
YXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOworICAgIGVsZW1lbnQoKS5zZXRDaGFuZ2VkU2lu
Y2VMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCh0cnVlKTsKIAogICAgIC8vIFdlIGRvbid0IG5l
ZWQgdG8gY2FsbCBzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKCkgZnVuY3Rpb24gaGVyZSBiZWNhdXNl
CiAgICAgLy8gSFRNTElucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQo
KSBoYXMgYWxyZWFkeSBjYWxsZWQKICAgICAvLyBzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKCkuCiAg
ICAgLy8gc2FuaXRpemVWYWx1ZSgpIGlzIG5lZWRlZCBiZWNhdXNlIElNRSBpbnB1dCBkb2Vzbid0
IGRpc3BhdGNoIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LgotICAgIGVsZW1lbnQoKS0+c2V0VmFs
dWVGcm9tUmVuZGVyZXIoc2FuaXRpemVWYWx1ZShjb252ZXJ0RnJvbVZpc2libGVWYWx1ZShlbGVt
ZW50KCktPmlubmVyVGV4dFZhbHVlKCkpKSk7Ci0gICAgZWxlbWVudCgpLT51cGRhdGVQbGFjZWhv
bGRlclZpc2liaWxpdHkoZmFsc2UpOworICAgIGVsZW1lbnQoKS5zZXRWYWx1ZUZyb21SZW5kZXJl
cihzYW5pdGl6ZVZhbHVlKGNvbnZlcnRGcm9tVmlzaWJsZVZhbHVlKGVsZW1lbnQoKS5pbm5lclRl
eHRWYWx1ZSgpKSkpOworICAgIGVsZW1lbnQoKS51cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHko
ZmFsc2UpOwogICAgIC8vIFJlY2FsYyBmb3IgOmludmFsaWQgY2hhbmdlLgotICAgIGVsZW1lbnQo
KS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGVsZW1lbnQoKS5zZXROZWVkc1N0eWxlUmVj
YWxjKCk7CiAKICAgICBkaWRTZXRWYWx1ZUJ5VXNlckVkaXQod2FzQ2hhbmdlZCA/IFZhbHVlQ2hh
bmdlU3RhdGVDaGFuZ2VkIDogVmFsdWVDaGFuZ2VTdGF0ZU5vbmUpOwogfQogCiB2b2lkIFRleHRG
aWVsZElucHV0VHlwZTo6ZGlkU2V0VmFsdWVCeVVzZXJFZGl0KFZhbHVlQ2hhbmdlU3RhdGUgc3Rh
dGUpCiB7Ci0gICAgaWYgKCFlbGVtZW50KCktPmZvY3VzZWQoKSkKKyAgICBpZiAoIWVsZW1lbnQo
KS5mb2N1c2VkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gZWxl
bWVudCgpLT5kb2N1bWVudCgpLmZyYW1lKCkpIHsKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gZWxl
bWVudCgpLmRvY3VtZW50KCkuZnJhbWUoKSkgewogICAgICAgICBpZiAoc3RhdGUgPT0gVmFsdWVD
aGFuZ2VTdGF0ZU5vbmUpCi0gICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCkudGV4dEZpZWxkRGlk
QmVnaW5FZGl0aW5nKGVsZW1lbnQoKSk7Ci0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS50ZXh0RGlk
Q2hhbmdlSW5UZXh0RmllbGQoZWxlbWVudCgpKTsKKyAgICAgICAgICAgIGZyYW1lLT5lZGl0b3Io
KS50ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoJmVsZW1lbnQoKSk7CisgICAgICAgIGZyYW1lLT5l
ZGl0b3IoKS50ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoJmVsZW1lbnQoKSk7CiAgICAgfQogfQog
CkBAIC00ODAsMzIgKzQ3OSwzMiBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6c3BpbkJ1dHRv
blN0ZXBVCiAKIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjp1cGRhdGVJbm5lclRleHRWYWx1ZSgp
CiB7Ci0gICAgaWYgKCFlbGVtZW50KCktPnN1Z2dlc3RlZFZhbHVlKCkuaXNOdWxsKCkpIHsKLSAg
ICAgICAgZWxlbWVudCgpLT5zZXRJbm5lclRleHRWYWx1ZShlbGVtZW50KCktPnN1Z2dlc3RlZFZh
bHVlKCkpOwotICAgICAgICBlbGVtZW50KCktPnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShm
YWxzZSk7Ci0gICAgfSBlbHNlIGlmICghZWxlbWVudCgpLT5mb3JtQ29udHJvbFZhbHVlTWF0Y2hl
c1JlbmRlcmVyKCkpIHsKKyAgICBpZiAoIWVsZW1lbnQoKS5zdWdnZXN0ZWRWYWx1ZSgpLmlzTnVs
bCgpKSB7CisgICAgICAgIGVsZW1lbnQoKS5zZXRJbm5lclRleHRWYWx1ZShlbGVtZW50KCkuc3Vn
Z2VzdGVkVmFsdWUoKSk7CisgICAgICAgIGVsZW1lbnQoKS51cGRhdGVQbGFjZWhvbGRlclZpc2li
aWxpdHkoZmFsc2UpOworICAgIH0gZWxzZSBpZiAoIWVsZW1lbnQoKS5mb3JtQ29udHJvbFZhbHVl
TWF0Y2hlc1JlbmRlcmVyKCkpIHsKICAgICAgICAgLy8gVXBkYXRlIHRoZSByZW5kZXJlciB2YWx1
ZSBpZiB0aGUgZm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcigpIGZsYWcgaXMgZmFsc2Uu
CiAgICAgICAgIC8vIEl0IHByb3RlY3RzIGFuIHVuYWNjZXB0YWJsZSByZW5kZXJlciB2YWx1ZSBm
cm9tIGJlaW5nIG92ZXJ3cml0dGVuIHdpdGggdGhlIERPTSB2YWx1ZS4KLSAgICAgICAgZWxlbWVu
dCgpLT5zZXRJbm5lclRleHRWYWx1ZSh2aXNpYmxlVmFsdWUoKSk7Ci0gICAgICAgIGVsZW1lbnQo
KS0+dXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGZhbHNlKTsKKyAgICAgICAgZWxlbWVudCgp
LnNldElubmVyVGV4dFZhbHVlKHZpc2libGVWYWx1ZSgpKTsKKyAgICAgICAgZWxlbWVudCgpLnVw
ZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7CiAgICAgfQogfQogCiB2b2lkIFRleHRG
aWVsZElucHV0VHlwZTo6Zm9jdXNBbmRTZWxlY3RTcGluQnV0dG9uT3duZXIoKQogewotICAgIFJl
ZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1dChlbGVtZW50KCkpOworICAgIFJlZlB0cjxIVE1M
SW5wdXRFbGVtZW50PiBpbnB1dCA9ICZlbGVtZW50KCk7CiAgICAgaW5wdXQtPmZvY3VzKCk7CiAg
ICAgaW5wdXQtPnNlbGVjdCgpOwogfQogCiBib29sIFRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxk
U3BpbkJ1dHRvblJlc3BvbmRUb01vdXNlRXZlbnRzKCkKIHsKLSAgICByZXR1cm4gIWVsZW1lbnQo
KS0+aXNEaXNhYmxlZE9yUmVhZE9ubHkoKTsKKyAgICByZXR1cm4gIWVsZW1lbnQoKS5pc0Rpc2Fi
bGVkT3JSZWFkT25seSgpOwogfQogCiBib29sIFRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkU3Bp
bkJ1dHRvblJlc3BvbmRUb1doZWVsRXZlbnRzKCkKIHsKLSAgICByZXR1cm4gc2hvdWxkU3BpbkJ1
dHRvblJlc3BvbmRUb01vdXNlRXZlbnRzKCkgJiYgZWxlbWVudCgpLT5mb2N1c2VkKCk7CisgICAg
cmV0dXJuIHNob3VsZFNwaW5CdXR0b25SZXNwb25kVG9Nb3VzZUV2ZW50cygpICYmIGVsZW1lbnQo
KS5mb2N1c2VkKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuaAkocmV2aXNpb24gMTU1OTA4KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNyArNDIsNyBAQCBjbGFzcyBGb3JtRGF0YUxpc3Q7IAogLy8gSXQgc3VwcG9ydHMgbm90IG9u
bHkgdGhlIHR5cGVzIGZvciBCYXNlVGV4dElucHV0VHlwZSBidXQgYWxzbyB0eXBlPW51bWJlci4K
IGNsYXNzIFRleHRGaWVsZElucHV0VHlwZSA6IHB1YmxpYyBJbnB1dFR5cGUsIHByb3RlY3RlZCBT
cGluQnV0dG9uRWxlbWVudDo6U3BpbkJ1dHRvbk93bmVyIHsKIHByb3RlY3RlZDoKLSAgICBleHBs
aWNpdCBUZXh0RmllbGRJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCopOworICAgIGV4cGxpY2l0
IFRleHRGaWVsZElucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50Jik7CiAgICAgdmlydHVhbCB+VGV4
dEZpZWxkSW5wdXRUeXBlKCk7CiAgICAgdmlydHVhbCBib29sIGNhblNldFN1Z2dlc3RlZFZhbHVl
KCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWRvd25FdmVudChLZXlib2Fy
ZEV2ZW50KikgT1ZFUlJJREU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRJbnB1dFR5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dElucHV0VHlwZS5j
cHAJKHJldmlzaW9uIDE1NTkwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dElucHV0VHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1QYXNzT3duUHRyPElucHV0VHlwZT4g
VGV4dElucHV0VHlwZTo6Y3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCitQYXNzT3du
UHRyPElucHV0VHlwZT4gVGV4dElucHV0VHlwZTo6Y3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQmIGVs
ZW1lbnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0SW5wdXRUeXBlKGVsZW1lbnQp
KTsKIH0KQEAgLTQ3LDcgKzQ3LDcgQEAgUGFzc093blB0cjxJbnB1dFR5cGU+IFRleHRJbnB1dFR5
cGU6OmNyZQogdm9pZCBUZXh0SW5wdXRUeXBlOjphdHRhY2goKQogewogICAgIFRleHRGaWVsZElu
cHV0VHlwZTo6YXR0YWNoKCk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlID0gZWxlbWVu
dCgpLT5mYXN0R2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHR5cGUgPSBlbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0cik7CiAgICAgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKHR5cGUsIElucHV0VHlwZU5hbWVzOjpkYXRldGltZSgpKSkKICAgICAg
ICAgb2JzZXJ2ZUZlYXR1cmVJZlZpc2libGUoRmVhdHVyZU9ic2VydmVyOjpJbnB1dFR5cGVEYXRl
VGltZUZhbGxiYWNrKTsKICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh0eXBlLCBJbnB1
dFR5cGVOYW1lczo6d2VlaygpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dElucHV0
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dElucHV0VHlwZS5o
CShyZXZpc2lvbiAxNTU5MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRJbnB1dFR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgVGV4dElucHV0VHlwZSA6IHB1YmxpYyBCYXNlVGV4dElucHV0VHlwZSB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlPiBjcmVhdGUoSFRNTElucHV0RWxl
bWVudCopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPElucHV0VHlwZT4gY3JlYXRlKEhUTUxJbnB1
dEVsZW1lbnQmKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBUZXh0SW5wdXRUeXBlKEhUTUxJ
bnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogQmFzZVRleHRJbnB1dFR5cGUoZWxlbWVudCkgeyB9Cisg
ICAgZXhwbGljaXQgVGV4dElucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KSA6IEJh
c2VUZXh0SW5wdXRUeXBlKGVsZW1lbnQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKSBP
VkVSUklERTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBl
KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJlc3BlY3RTcGVlY2hB
dHRyaWJ1dGUoKSBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0
VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9UaW1lSW5wdXRUeXBl
LmNwcAkocmV2aXNpb24gMTU1OTA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9UaW1lSW5wdXRU
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTIgKzQ5LDEyIEBAIHN0YXRpYyBjb25zdCBp
bnQgdGltZURlZmF1bHRTdGVwID0gNjA7CiBzdGF0aWMgY29uc3QgaW50IHRpbWVEZWZhdWx0U3Rl
cEJhc2UgPSAwOwogc3RhdGljIGNvbnN0IGludCB0aW1lU3RlcFNjYWxlRmFjdG9yID0gMTAwMDsK
IAotVGltZUlucHV0VHlwZTo6VGltZUlucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50KiAgZWxlbWVu
dCkKK1RpbWVJbnB1dFR5cGU6OlRpbWVJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCYgZWxlbWVu
dCkKICAgICA6IEJhc2VUaW1lSW5wdXRUeXBlKGVsZW1lbnQpCiB7CiB9CiAKLVBhc3NPd25QdHI8
SW5wdXRUeXBlPiBUaW1lSW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVu
dCkKK1Bhc3NPd25QdHI8SW5wdXRUeXBlPiBUaW1lSW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0
RWxlbWVudCYgZWxlbWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRpbWVJbnB1dFR5
cGUoZWxlbWVudCkpOwogfQpAQCAtOTEsMTAgKzkxLDEwIEBAIFN0ZXBSYW5nZSBUaW1lSW5wdXRU
eXBlOjpjcmVhdGVTdGVwUmFuZ2UKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0
ZXBSYW5nZTo6U3RlcERlc2NyaXB0aW9uLCBzdGVwRGVzY3JpcHRpb24sICh0aW1lRGVmYXVsdFN0
ZXAsIHRpbWVEZWZhdWx0U3RlcEJhc2UsIHRpbWVTdGVwU2NhbGVGYWN0b3IsIFN0ZXBSYW5nZTo6
U2NhbGVkU3RlcFZhbHVlU2hvdWxkQmVJbnRlZ2VyKSk7CiAKLSAgICBjb25zdCBEZWNpbWFsIHN0
ZXBCYXNlID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0
ciksIDApOwotICAgIGNvbnN0IERlY2ltYWwgbWluaW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVu
dCgpLT5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVD
b21wb25lbnRzOjptaW5pbXVtVGltZSgpKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBtYXhpbXVtID0g
cGFyc2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWF4QXR0ciksIERlY2lt
YWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1heGltdW1UaW1lKCkpKTsKLSAgICBjb25z
dCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0
ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKSk7Cisg
ICAgY29uc3QgRGVjaW1hbCBzdGVwQmFzZSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLmZhc3RH
ZXRBdHRyaWJ1dGUobWluQXR0ciksIDApOworICAgIGNvbnN0IERlY2ltYWwgbWluaW11bSA9IHBh
cnNlVG9OdW1iZXIoZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIERlY2ltYWw6
OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1UaW1lKCkpKTsKKyAgICBjb25zdCBE
ZWNpbWFsIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRl
KG1heEF0dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVDb21wb25lbnRzOjptYXhpbXVtVGlt
ZSgpKSk7CisgICAgY29uc3QgRGVjaW1hbCBzdGVwID0gU3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55
U3RlcEhhbmRsaW5nLCBzdGVwRGVzY3JpcHRpb24sIGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRl
KHN0ZXBBdHRyKSk7CiAgICAgcmV0dXJuIFN0ZXBSYW5nZShzdGVwQmFzZSwgbWluaW11bSwgbWF4
aW11bSwgc3RlcCwgc3RlcERlc2NyaXB0aW9uKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9UaW1lSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9U
aW1lSW5wdXRUeXBlLmgJKHJldmlzaW9uIDE1NTkwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
VGltZUlucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsMTAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBUaW1lSW5wdXRUeXBlIDogcHVibGljIEJhc2VDaG9vc2Vy
T25seURhdGVBbmRUaW1lSW5wdXRUeXBlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0
cjxJbnB1dFR5cGU+IGNyZWF0ZShIVE1MSW5wdXRFbGVtZW50Kik7CisgICAgc3RhdGljIFBhc3NP
d25QdHI8SW5wdXRUeXBlPiBjcmVhdGUoSFRNTElucHV0RWxlbWVudCYpOwogCiBwcml2YXRlOgot
ICAgIGV4cGxpY2l0IFRpbWVJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCopOworICAgIGV4cGxp
Y2l0IFRpbWVJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCYpOwogICAgIHZpcnR1YWwgdm9pZCBh
dHRhY2goKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNv
bnRyb2xUeXBlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBEYXRlQ29tcG9uZW50czo6
VHlwZSBkYXRlVHlwZSgpIGNvbnN0IE9WRVJSSURFOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9VUkxJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvVVJM
SW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMTU1OTA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9V
UkxJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxJbnB1dFR5cGU+IFVSTElucHV0VHlwZTo6Y3Jl
YXRlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCitQYXNzT3duUHRyPElucHV0VHlwZT4gVVJM
SW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkKIHsKICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IFVSTElucHV0VHlwZShlbGVtZW50KSk7CiB9CkBAIC02Miw3ICs2Miw3
IEBAIGJvb2wgVVJMSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2hGb3IoY29uc3QKIAogYm9vbCBVUkxJ
bnB1dFR5cGU6OnR5cGVNaXNtYXRjaCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHR5cGVNaXNtYXRj
aEZvcihlbGVtZW50KCktPnZhbHVlKCkpOworICAgIHJldHVybiB0eXBlTWlzbWF0Y2hGb3IoZWxl
bWVudCgpLnZhbHVlKCkpOwogfQogCiBTdHJpbmcgVVJMSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2hU
ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvVVJMSW5wdXRUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9VUkxJbnB1dFR5cGUuaAkocmV2aXNpb24g
MTU1OTA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9VUkxJbnB1dFR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzcsMTAgKzM3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVVJM
SW5wdXRUeXBlIDogcHVibGljIEJhc2VUZXh0SW5wdXRUeXBlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxJbnB1dFR5cGU+IGNyZWF0ZShIVE1MSW5wdXRFbGVtZW50Kik7CisgICAg
c3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlPiBjcmVhdGUoSFRNTElucHV0RWxlbWVudCYpOwog
CiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFVSTElucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50KiBl
bGVtZW50KSA6IEJhc2VUZXh0SW5wdXRUeXBlKGVsZW1lbnQpIHsgfQorICAgIGV4cGxpY2l0IFVS
TElucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KSA6IEJhc2VUZXh0SW5wdXRUeXBl
KGVsZW1lbnQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKSBPVkVSUklERTsKICAgICB2
aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBib29sIHR5cGVNaXNtYXRjaEZvcihjb25zdCBTdHJpbmcmKSBjb25z
dCBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvV2Vla0lucHV0VHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9XZWVrSW5wdXRUeXBlLmNwcAkocmV2
aXNpb24gMTU1OTA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9XZWVrSW5wdXRUeXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgY29uc3QgaW50IHdlZWtEZWZh
dWx0U3RlcEJhc2UgPSAtCiBzdGF0aWMgY29uc3QgaW50IHdlZWtEZWZhdWx0U3RlcCA9IDE7CiBz
dGF0aWMgY29uc3QgaW50IHdlZWtTdGVwU2NhbGVGYWN0b3IgPSA2MDQ4MDAwMDA7CiAKLVBhc3NP
d25QdHI8SW5wdXRUeXBlPiBXZWVrSW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCog
ZWxlbWVudCkKK1Bhc3NPd25QdHI8SW5wdXRUeXBlPiBXZWVrSW5wdXRUeXBlOjpjcmVhdGUoSFRN
TElucHV0RWxlbWVudCYgZWxlbWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdlZWtJ
bnB1dFR5cGUoZWxlbWVudCkpOwogfQpAQCAtNzAsMTAgKzcwLDEwIEBAIFN0ZXBSYW5nZSBXZWVr
SW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNv
bnN0IFN0ZXBSYW5nZTo6U3RlcERlc2NyaXB0aW9uLCBzdGVwRGVzY3JpcHRpb24sICh3ZWVrRGVm
YXVsdFN0ZXAsIHdlZWtEZWZhdWx0U3RlcEJhc2UsIHdlZWtTdGVwU2NhbGVGYWN0b3IsIFN0ZXBS
YW5nZTo6UGFyc2VkU3RlcFZhbHVlU2hvdWxkQmVJbnRlZ2VyKSk7CiAKLSAgICBjb25zdCBEZWNp
bWFsIHN0ZXBCYXNlID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUo
bWluQXR0ciksIHdlZWtEZWZhdWx0U3RlcEJhc2UpOwotICAgIGNvbnN0IERlY2ltYWwgbWluaW11
bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCBE
ZWNpbWFsOjpmcm9tRG91YmxlKERhdGVDb21wb25lbnRzOjptaW5pbXVtV2VlaygpKSk7Ci0gICAg
Y29uc3QgRGVjaW1hbCBtYXhpbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRB
dHRyaWJ1dGUobWF4QXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1h
eGltdW1XZWVrKCkpKTsKLSAgICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNl
U3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLT5mYXN0R2V0
QXR0cmlidXRlKHN0ZXBBdHRyKSk7CisgICAgY29uc3QgRGVjaW1hbCBzdGVwQmFzZSA9IHBhcnNl
VG9OdW1iZXIoZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIHdlZWtEZWZhdWx0
U3RlcEJhc2UpOworICAgIGNvbnN0IERlY2ltYWwgbWluaW11bSA9IHBhcnNlVG9OdW1iZXIoZWxl
bWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0
ZUNvbXBvbmVudHM6Om1pbmltdW1XZWVrKCkpKTsKKyAgICBjb25zdCBEZWNpbWFsIG1heGltdW0g
PSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRlKG1heEF0dHIpLCBEZWNp
bWFsOjpmcm9tRG91YmxlKERhdGVDb21wb25lbnRzOjptYXhpbXVtV2VlaygpKSk7CisgICAgY29u
c3QgRGVjaW1hbCBzdGVwID0gU3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCBz
dGVwRGVzY3JpcHRpb24sIGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKSk7CiAg
ICAgcmV0dXJuIFN0ZXBSYW5nZShzdGVwQmFzZSwgbWluaW11bSwgbWF4aW11bSwgc3RlcCwgc3Rl
cERlc2NyaXB0aW9uKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9XZWVrSW5wdXRU
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9XZWVrSW5wdXRUeXBlLmgJ
KHJldmlzaW9uIDE1NTkwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvV2Vla0lucHV0VHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBXZWVrSW5wdXRUeXBlIDogcHVibGljIEJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1l
SW5wdXRUeXBlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGU+IGNy
ZWF0ZShIVE1MSW5wdXRFbGVtZW50Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBl
PiBjcmVhdGUoSFRNTElucHV0RWxlbWVudCYpOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFdl
ZWtJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkgOiBCYXNlQ2hvb3Nlck9ubHlE
YXRlQW5kVGltZUlucHV0VHlwZShlbGVtZW50KSB7IH0KKyAgICBleHBsaWNpdCBXZWVrSW5wdXRU
eXBlKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpIDogQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRp
bWVJbnB1dFR5cGUoZWxlbWVudCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpIE9WRVJS
SURFOwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBj
b25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIERhdGVDb21wb25lbnRzOjpUeXBlIGRhdGVUeXBl
KCkgY29uc3QgT1ZFUlJJREU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlk
ZXJUaHVtYkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NTkwOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcyLDIwICs3MiwxOCBAQCBpbmxpbmUgc3RhdGljIGJvb2wgaGFzVmVydGljYWxBcHBlYXJh
bmNlCiAgICAgcmV0dXJuIHNsaWRlclN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGlj
YWxQYXJ0OwogfQogCi1TbGlkZXJUaHVtYkVsZW1lbnQqIHNsaWRlclRodW1iRWxlbWVudE9mKE5v
ZGUqIG5vZGUpCitTbGlkZXJUaHVtYkVsZW1lbnQqIHNsaWRlclRodW1iRWxlbWVudE9mKEhUTUxJ
bnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCkKIHsKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAgU2hh
ZG93Um9vdCogc2hhZG93ID0gbm9kZS0+dG9JbnB1dEVsZW1lbnQoKS0+dXNlckFnZW50U2hhZG93
Um9vdCgpOworICAgIFNoYWRvd1Jvb3QqIHNoYWRvdyA9IGlucHV0RWxlbWVudC51c2VyQWdlbnRT
aGFkb3dSb290KCk7CiAgICAgQVNTRVJUKHNoYWRvdyk7CiAgICAgTm9kZSogdGh1bWIgPSBzaGFk
b3ctPmZpcnN0Q2hpbGQoKS0+Zmlyc3RDaGlsZCgpLT5maXJzdENoaWxkKCk7CiAgICAgQVNTRVJU
KHRodW1iKTsKICAgICByZXR1cm4gdG9TbGlkZXJUaHVtYkVsZW1lbnQodGh1bWIpOwogfQogCi1I
VE1MRWxlbWVudCogc2xpZGVyVHJhY2tFbGVtZW50T2YoTm9kZSogbm9kZSkKK0hUTUxFbGVtZW50
KiBzbGlkZXJUcmFja0VsZW1lbnRPZihIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQpCiB7
Ci0gICAgQVNTRVJUKG5vZGUpOwotICAgIFNoYWRvd1Jvb3QqIHNoYWRvdyA9IG5vZGUtPnRvSW5w
dXRFbGVtZW50KCktPnVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKKyAgICBTaGFkb3dSb290KiBzaGFk
b3cgPSBpbnB1dEVsZW1lbnQudXNlckFnZW50U2hhZG93Um9vdCgpOwogICAgIEFTU0VSVChzaGFk
b3cpOwogICAgIE5vZGUqIHRyYWNrID0gc2hhZG93LT5maXJzdENoaWxkKCktPmZpcnN0Q2hpbGQo
KTsKICAgICBBU1NFUlQodHJhY2spOwpAQCAtMjA2LDggKzIwNCw4IEBAIHZvaWQgUmVuZGVyU2xp
ZGVyQ29udGFpbmVyOjpsYXlvdXQoKQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi1TbGlkZXJUaHVtYkVsZW1lbnQ6OlNsaWRlclRodW1iRWxlbWVudChEb2N1bWVudCog
ZG9jdW1lbnQpCi0gICAgOiBIVE1MRGl2RWxlbWVudChIVE1MTmFtZXM6OmRpdlRhZywgKmRvY3Vt
ZW50KQorU2xpZGVyVGh1bWJFbGVtZW50OjpTbGlkZXJUaHVtYkVsZW1lbnQoRG9jdW1lbnQmIGRv
Y3VtZW50KQorICAgIDogSFRNTERpdkVsZW1lbnQoSFRNTE5hbWVzOjpkaXZUYWcsIGRvY3VtZW50
KQogICAgICwgbV9pbkRyYWdNb2RlKGZhbHNlKQogewogICAgIHNldEhhc0N1c3RvbVN0eWxlUmVz
b2x2ZUNhbGxiYWNrcygpOwpAQCAtMjU4LDEwICsyNTYsMTIgQEAgdm9pZCBTbGlkZXJUaHVtYkVs
ZW1lbnQ6OmRyYWdGcm9tKGNvbnN0IAogCiB2b2lkIFNsaWRlclRodW1iRWxlbWVudDo6c2V0UG9z
aXRpb25Gcm9tUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIGFic29sdXRlUG9pbnQpCiB7Ci0gICAg
UmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0KGhvc3RJbnB1dCgpKTsKLSAgICBIVE1MRWxl
bWVudCogdHJhY2tFbGVtZW50ID0gc2xpZGVyVHJhY2tFbGVtZW50T2YoaW5wdXQuZ2V0KCkpOwor
ICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1dCA9IGhvc3RJbnB1dCgpOworICAgIGlm
ICghaW5wdXQgfHwgIWlucHV0LT5yZW5kZXJlcigpIHx8ICFyZW5kZXJCb3goKSkKKyAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKSB8fCAhcmVuZGVyQm94KCkgfHwg
IXRyYWNrRWxlbWVudC0+cmVuZGVyQm94KCkpCisgICAgSFRNTEVsZW1lbnQqIHRyYWNrRWxlbWVu
dCA9IHNsaWRlclRyYWNrRWxlbWVudE9mKCppbnB1dCk7CisgICAgaWYgKCF0cmFja0VsZW1lbnQt
PnJlbmRlckJveCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpbnB1dC0+c2V0VGV4dEFzT2ZM
YXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudChpbnB1dC0+dmFsdWUoKSk7CkBAIC00NDQsMTIgKzQ0
NCwxMiBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFNsaWRlclRodW1iRWxlbWVudDo6CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWlubGluZSBTbGlkZXJDb250YWluZXJF
bGVtZW50OjpTbGlkZXJDb250YWluZXJFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLSAgICA6
IEhUTUxEaXZFbGVtZW50KEhUTUxOYW1lczo6ZGl2VGFnLCAqZG9jdW1lbnQpCitpbmxpbmUgU2xp
ZGVyQ29udGFpbmVyRWxlbWVudDo6U2xpZGVyQ29udGFpbmVyRWxlbWVudChEb2N1bWVudCYgZG9j
dW1lbnQpCisgICAgOiBIVE1MRGl2RWxlbWVudChIVE1MTmFtZXM6OmRpdlRhZywgZG9jdW1lbnQp
CiB7CiB9CiAKLVBhc3NSZWZQdHI8U2xpZGVyQ29udGFpbmVyRWxlbWVudD4gU2xpZGVyQ29udGFp
bmVyRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkKK1Bhc3NSZWZQdHI8U2xpZGVy
Q29udGFpbmVyRWxlbWVudD4gU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50
JiBkb2N1bWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNsaWRlckNvbnRhaW5lckVs
ZW1lbnQoZG9jdW1lbnQpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Ns
aWRlclRodW1iRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L1NsaWRlclRodW1iRWxlbWVudC5oCShyZXZpc2lvbiAxNTU5MDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNyBAQCBjbGFzcyBGbG9hdFBvaW50OwogCiBjbGFzcyBTbGlkZXJUaHVtYkVsZW1l
bnQgRklOQUwgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQgewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNsaWRlclRodW1iRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U2xpZGVyVGh1bWJFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKIAog
ICAgIHZvaWQgc2V0UG9zaXRpb25Gcm9tVmFsdWUoKTsKIApAQCAtNjAsNyArNjAsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRQb3NpdGlvbkZyb21Qb2ludChjb25zdCBMYXlvdXRQb2ludCYpOwog
CiBwcml2YXRlOgotICAgIFNsaWRlclRodW1iRWxlbWVudChEb2N1bWVudCopOworICAgIFNsaWRl
clRodW1iRWxlbWVudChEb2N1bWVudCYpOwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVh
dGVSZW5kZXJlcihSZW5kZXJBcmVuYSYsIFJlbmRlclN0eWxlJik7CiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEVsZW1lbnQ+IGNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4o
KTsKICAgICB2aXJ0dWFsIGJvb2wgaXNEaXNhYmxlZEZvcm1Db250cm9sKCkgY29uc3QgT1ZFUlJJ
REU7CkBAIC03MywxNCArNzMsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIG1faW5EcmFnTW9kZTsK
IH07CiAKLWlubGluZSBQYXNzUmVmUHRyPFNsaWRlclRodW1iRWxlbWVudD4gU2xpZGVyVGh1bWJF
bGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50KQoraW5saW5lIFBhc3NSZWZQdHI8U2xp
ZGVyVGh1bWJFbGVtZW50PiBTbGlkZXJUaHVtYkVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9j
dW1lbnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTbGlkZXJUaHVtYkVsZW1lbnQoZG9j
dW1lbnQpKTsKIH0KIAogaW5saW5lIFBhc3NSZWZQdHI8RWxlbWVudD4gU2xpZGVyVGh1bWJFbGVt
ZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKCkKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlKCZkb2N1bWVudCgpKTsKKyAgICByZXR1cm4gY3JlYXRlKGRvY3VtZW50KCkp
OwogfQogCiBpbmxpbmUgU2xpZGVyVGh1bWJFbGVtZW50KiB0b1NsaWRlclRodW1iRWxlbWVudChO
b2RlKiBub2RlKQpAQCAtOTEsOCArOTEsOCBAQCBpbmxpbmUgU2xpZGVyVGh1bWJFbGVtZW50KiB0
b1NsaWRlclRodW1iCiAKIC8vIFRoaXMgYWx3YXlzIHJldHVybiBhIHZhbGlkIHBvaW50ZXIuCiAv
LyBBbiBhc3NlcnRpb24gZmFpbHMgaWYgdGhlIHNwZWNpZmllZCBub2RlIGlzIG5vdCBhIHJhbmdl
IGlucHV0LgotU2xpZGVyVGh1bWJFbGVtZW50KiBzbGlkZXJUaHVtYkVsZW1lbnRPZihOb2RlKik7
Ci1IVE1MRWxlbWVudCogc2xpZGVyVHJhY2tFbGVtZW50T2YoTm9kZSopOworU2xpZGVyVGh1bWJF
bGVtZW50KiBzbGlkZXJUaHVtYkVsZW1lbnRPZihIVE1MSW5wdXRFbGVtZW50Jik7CitIVE1MRWxl
bWVudCogc2xpZGVyVHJhY2tFbGVtZW50T2YoSFRNTElucHV0RWxlbWVudCYpOwogCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMDksMTAgKzEwOSwxMCBAQCBwcml2
YXRlOgogCiBjbGFzcyBTbGlkZXJDb250YWluZXJFbGVtZW50IEZJTkFMIDogcHVibGljIEhUTUxE
aXZFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTbGlkZXJDb250YWlu
ZXJFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTbGlk
ZXJDb250YWluZXJFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKIAogcHJpdmF0ZToKLSAgICBT
bGlkZXJDb250YWluZXJFbGVtZW50KERvY3VtZW50Kik7CisgICAgU2xpZGVyQ29udGFpbmVyRWxl
bWVudChEb2N1bWVudCYpOwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJl
cihSZW5kZXJBcmVuYSYsIFJlbmRlclN0eWxlJik7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAJKHJldmlzaW9uIDE1NTkwNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAs
NyArMTEwLDcgQEAgdm9pZCBSZW5kZXJTbGlkZXI6OmxheW91dCgpCiAgICAgU3RhY2tTdGF0czo6
TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVja1BvaW50OwogICAgIC8vIEZJWE1FOiBGaW5kIGEg
d2F5IHRvIGNhc2NhZGUgYXBwZWFyYW5jZS4KICAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9iLzYy
NTM1Ci0gICAgUmVuZGVyQm94KiB0aHVtYkJveCA9IHNsaWRlclRodW1iRWxlbWVudE9mKGVsZW1l
bnQoKSktPnJlbmRlckJveCgpOworICAgIFJlbmRlckJveCogdGh1bWJCb3ggPSBzbGlkZXJUaHVt
YkVsZW1lbnRPZigqdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQoKSkpLT5yZW5kZXJCb3goKTsK
ICAgICBpZiAodGh1bWJCb3ggJiYgdGh1bWJCb3gtPmlzU2xpZGVyVGh1bWIoKSkKICAgICAgICAg
c3RhdGljX2Nhc3Q8UmVuZGVyU2xpZGVyVGh1bWIqPih0aHVtYkJveCktPnVwZGF0ZUFwcGVhcmFu
Y2Uoc3R5bGUoKSk7CiAKQEAgLTExOSw3ICsxMTksNyBAQCB2b2lkIFJlbmRlclNsaWRlcjo6bGF5
b3V0KCkKIAogYm9vbCBSZW5kZXJTbGlkZXI6OmluRHJhZ01vZGUoKSBjb25zdAogewotICAgIHJl
dHVybiBzbGlkZXJUaHVtYkVsZW1lbnRPZihlbGVtZW50KCkpLT5hY3RpdmUoKTsKKyAgICByZXR1
cm4gc2xpZGVyVGh1bWJFbGVtZW50T2YoKnRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KCkpKS0+
YWN0aXZlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="233987"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>