<?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>217423</bug_id>
          
          <creation_ts>2020-10-07 01:44:47 -0700</creation_ts>
          <short_desc>Make it possible to send an arbitrary IPC message from JavaScript</short_desc>
          <delta_ts>2020-10-08 17:48:37 -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>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>tzagallo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1695478</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-07 01:44:47 -0700</bug_when>
    <thetext>Add a mechanism to send IPC directly from JavaScript for testing purposes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695479</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-07 01:47:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/65692515&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695480</commentid>
    <comment_count>2</comment_count>
      <attachid>410737</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-07 01:48:46 -0700</bug_when>
    <thetext>Created attachment 410737
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695590</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-07 10:51:18 -0700</bug_when>
    <thetext>I realize this is not up for review yet, but would you mind going into a bit more detail about what problem this is solving?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695609</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-07 11:29:21 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #3)
&gt; I realize this is not up for review yet, but would you mind going into a bit
&gt; more detail about what problem this is solving?

I&apos;d rather not go into details in bugzilla too much but you can see the associated radar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695768</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-07 18:11:58 -0700</bug_when>
    <thetext>&lt;rdar://problem/69969351&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695837</commentid>
    <comment_count>6</comment_count>
      <attachid>410825</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-08 03:06:31 -0700</bug_when>
    <thetext>Created attachment 410825
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695840</commentid>
    <comment_count>7</comment_count>
      <attachid>410826</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-08 03:49:04 -0700</bug_when>
    <thetext>Created attachment 410826
Fixed release builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695940</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-10-08 09:58:15 -0700</bug_when>
    <thetext>CompileC /Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/Objects-normal/x86_64/WebPage.o WebProcess/WebPage/WebPage.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler
    cd /Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/Source/WebKit
    export LANG=en_US.US-ASCII
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x c++ -arch x86_64 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -std=gnu++1z -stdlib=libc++ -gmodules -Wno-trigraphs -fno-exceptions -fno-rtti -fno-sanitize=vptr -fpascal-strings -O0 -fno-common -Werror -Wno-missing-field-initializers -Wmissing-prototypes -Wunreachable-code -Wnon-virtual-dtor -Wno-overloaded-virtual -Wno-exit-time-destructors -Wno-missing-braces -Wparentheses -Wswitch -Wunused-function -Wno-unused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wuninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wconstant-conversion 
-Wint-conversion -Wbool-conversion -Wenum-conversion -Wno-float-conversion -Wnon-literal-null-conversion -Wobjc-literal-conversion -Wsign-compare -Wno-shorten-64-to-32 -Wnewline-eof -Wno-c++11-extensions -DENABLE_EXPERIMENTAL_FEATURES -DHAVE_CORE_PREDICTION -DFRAMEWORK_NAME=WebKit -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -fasm-blocks -fstrict-aliasing -Wdeprecated-declarations -Winvalid-offsetof -mmacosx-version-min=10.14 -g -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -Wno-sign-conversion -Winfinite-recursion -Wmove -Wcomma -Wblock-capture-autoreleasing -Wstrict-prototypes -Wrange-loop-analysis -Wno-semicolon-before-method-body -iquote /Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/WebKit-generated-files.hmap -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/WebKit-own-target-headers.hmap -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/WebKit-all-target-headers.hmap -iquote /Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/WebKit-project-headers.hmap -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/Debug/include -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/Debug/usr/local/include -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/Debug/WebCore.framework/PrivateHeaders/ForwardingHeaders -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/Debug/DerivedSources/WebKit2 -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/Debug/usr/local/include/WebKitAdditions -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/local/include/WebKitAdditions -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/Debug/usr/local/include/webrtc -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/local/include/webrtc -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/Source/WebKit -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/DerivedSources-normal/x86_64 -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/DerivedSources/x86_64 -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/DerivedSources -Wall -Wextra -Wcast-qual -Wchar-subscripts -Wconditional-uninitialized -Wextra-tokens -Wformat-security -Winit-self -Wmissing-format-attribute -Wmissing-noreturn -Wno-unused-parameter -Wpacked -Wpointer-arith -Wredundant-decls -Wundef -Wwrite-strings -Wexit-time-destructors -Wglobal-constructors -Wtautological-compare -Wimplicit-fallthrough -Wvla -Wliteral-conversion -F/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/Debug -F/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/Source/WebKit/../../WebKitLibraries/WebKitPrivateFrameworkStubs/Mac/101400 -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/PrivateFrameworks -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/PrivateFrameworks -isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/System.framework/PrivateHeaders -include /Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/PrecompiledHeaders/WebKit2Prefix-awuiitavrzgbhueqydpoigkowpiq/WebKit2Prefix.h -MMD -MT dependencies -MF /Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/Objects-normal/x86_64/WebPage.d --serialize-dia
gnostics /Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/Objects-normal/x86_64/WebPage.dia -c /Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/Source/WebKit/WebProcess/WebPage/WebPage.cpp -o /Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/Objects-normal/x86_64/WebPage.o
/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/Source/WebKit/WebProcess/WebPage/WebPage.cpp:3790:28: error: use of undeclared identifier &apos;parameters&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695943</commentid>
    <comment_count>9</comment_count>
      <attachid>410857</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-08 10:07:17 -0700</bug_when>
    <thetext>Created attachment 410857
Fixed debug builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696054</commentid>
    <comment_count>10</comment_count>
      <attachid>410857</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-10-08 15:43:18 -0700</bug_when>
    <thetext>Comment on attachment 410857
Fixed debug builds

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

r=me

&gt; Source/WebKit/ChangeLog:13
&gt; +        It takes the destination process name (UI, GPU, or Networking), the destinatoin ID (e.g. WebPageProxy ID),

destination

&gt; Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp:131
&gt; +void JSIPC::finalize(JSObjectRef object)
&gt; +{
&gt; +    unwrap(object)-&gt;ref();
&gt; +}

No</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696088</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-08 17:48:37 -0700</bug_when>
    <thetext>Committed r268239: &lt;https://trac.webkit.org/changeset/268239&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410737</attachid>
            <date>2020-10-07 01:48:46 -0700</date>
            <delta_ts>2020-10-08 03:06:30 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>wip217423.patch</filename>
            <type>text/plain</type>
            <size>41213</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAppbmRleCBkYmE4MjJi
M2VhNmEuLjFmM2ZhNGVmZjQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCaWdJbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QmlnSW50LmNwcApAQCAtMzA0OSw2ICszMDQ5LDI5IEBAIEpTVmFsdWUgSlNCaWdJbnQ6OmFzVWlu
dE4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0X3QgbiwgaW50MzJfdCBiaWdJ
CiB9CiAjZW5kaWYKIAorT3B0aW9uYWw8dWludDY0X3Q+IEpTQmlnSW50Ojp0b1VpbnQ2NEhlYXAo
SlNCaWdJbnQqIGJpZ0ludCkKK3sKKyAgICBhdXRvIGxlbmd0aCA9IGJpZ0ludC0+bGVuZ3RoKCk7
CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChiaWdJbnQtPnNp
Z24oKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHN0YXRpY19hc3NlcnQo
c2l6ZW9mKHVpbnQ2NF90KSA9PSBzaXplb2YoRGlnaXQpIHx8IHNpemVvZih1aW50NjRfdCkgPT0g
c2l6ZW9mKERpZ2l0KSAqIDIsICJEaWdpdCBtdXN0IGJlIGVpdGhlciAzMi1iaXQgb3IgNjQtYml0
Iik7CisgICAgaWYgKHNpemVvZih1aW50NjRfdCkgPT0gc2l6ZW9mKERpZ2l0KSkgeworICAgICAg
ICBpZiAobGVuZ3RoID4gMSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
ICAgIHJldHVybiBiaWdJbnQtPmRpZ2l0KDApOworICAgIH0KKworICAgIGlmIChsZW5ndGggPiAy
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHVpbnQ2NF90IHJlc3VsdCA9IGJp
Z0ludC0+ZGlnaXQoMCk7CisgICAgaWYgKGxlbmd0aCA9PSAxKQorICAgICAgICByZXN1bHQgKz0g
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJpZ0ludC0+ZGlnaXQoMCkpIDw8IDMyOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGNvbXB1dGVIYXNo
KEpTQmlnSW50OjpEaWdpdCogZGlnaXRzLCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgc2lnbikKIHsK
ICAgICBIYXNoZXIgaGFzaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCaWdJbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50
LmgKaW5kZXggMTQ0ZGM0YjdjMDVhLi41ZWM0ZTBlNDYyYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCaWdJbnQuaApAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIEpTQmlnSW50KiB0cnlDcmVhdGVGcm9tKFZNJiwgaW50MzJfdCB2YWx1ZSk7CiAgICAgc3Rh
dGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiwgdWludDMyX3QgdmFsdWUp
OwogICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCosIGludDY0
X3QgdmFsdWUpOwotICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShKU0dsb2JhbE9iamVj
dCosIHVpbnQ2NF90IHZhbHVlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNCaWdJ
bnQqIGNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqLCB1aW50NjRfdCB2YWx1ZSk7CiAgICAgc3Rh
dGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiwgYm9vbCB2YWx1ZSk7CiAg
ICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiwgZG91YmxlIHZh
bHVlKTsKIApAQCAtNDIyLDYgKzQyMiwyMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTVmFsdWUg
YXNVaW50TihKU0dsb2JhbE9iamVjdCosIHVpbnQ2NF90IG51bWJlck9mQml0cywgaW50MzJfdCBi
aWdJbnRBc0ludDMyKTsKICNlbmRpZgogCisgICAgc3RhdGljIE9wdGlvbmFsPHVpbnQ2NF90PiB0
b1VpbnQ2NChKU1ZhbHVlIGJpZ0ludCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiaWdJbnQuaXNC
aWdJbnQoKSk7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBpZiAoYmlnSW50LmlzQmlnSW50
MzIoKSkgeworICAgICAgICAgICAgYXV0byB2YWx1ZSA9IGJpZ0ludC5iaWdJbnQzMkFzSW50MzIo
KTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgfQorI2VuZGlm
CisgICAgICAgIHJldHVybiB0b1VpbnQ2NEhlYXAoanNDYXN0PEpTQmlnSW50Kj4oYmlnSW50KSk7
CisgICAgfQorCiAgICAgRGlnaXQgZGlnaXQodW5zaWduZWQpOwogICAgIHZvaWQgc2V0RGlnaXQo
dW5zaWduZWQsIERpZ2l0KTsgLy8gVXNlIG9ubHkgd2hlbiBpbml0aWFsaXppbmcuCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgSlNCaWdJbnQqIHJpZ2h0VHJpbShKU0dsb2JhbE9iamVjdCopOwpAQCAt
NTc2LDYgKzU5MCw4IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludElt
cGw+CiAgICAgc3RhdGljIEltcGxSZXN1bHQgdHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byhK
U0dsb2JhbE9iamVjdCosIGludDMyX3QsIEJpZ0ludEltcGwsIGJvb2wgcmVzdWx0U2lnbik7CiAK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgT3B0aW9uYWw8dWludDY0X3Q+IHRvVWludDY0
SGVhcChKU0JpZ0ludCopOworCiAgICAgaW5saW5lIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZEYXRh
KCkKICAgICB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNCaWdJbnQsIG1fZGF0
YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaXNpdGVkTGlua1N0b3Jl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rU3RvcmUuY3BwCmluZGV4
IDY1MzlmY2ViOWMxMS4uNmE1YWMyNjA0NzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9WaXNpdGVkTGlua1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9WaXNpdGVkTGlua1N0b3JlLmNwcApAQCAtMTAyLDEyICsxMDIsMTQgQEAgdm9pZCBWaXNpdGVk
TGlua1N0b3JlOjpyZW1vdmVBbGwoKQogCiB2b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZpc2l0
ZWRMaW5rSGFzaEZyb21QYWdlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZVByb3h5SUQsIFNo
YXJlZFN0cmluZ0hhc2ggbGlua0hhc2gpCiB7CisgICAgZnByaW50ZihzdGRlcnIsICJWaXNpdGVk
TGlua1N0b3JlOjphZGRWaXNpdGVkTGlua0hhc2hGcm9tUGFnZT0lbGx1ICV1bFxuIiwgcGFnZVBy
b3h5SUQudG9VSW50NjQoKSwgbGlua0hhc2gpOworICAgIC8qCiAgICAgaWYgKGF1dG8qIHdlYlBh
Z2VQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6d2ViUGFnZShwYWdlUHJveHlJRCkpIHsKICAgICAg
ICAgaWYgKCF3ZWJQYWdlUHJveHktPmFkZHNWaXNpdGVkTGlua3MoKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBhZGRWaXNpdGVkTGlua0hhc2gobGlua0hhc2gpOworICAgIGFk
ZFZpc2l0ZWRMaW5rSGFzaChsaW5rSGFzaCk7Ki8KIH0KIAogdm9pZCBWaXNpdGVkTGlua1N0b3Jl
OjpzZW5kU3RvcmVIYW5kbGVUb1Byb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWRl
MDg2YTA0NDA1Li5kZmIwYzkxMzAzMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQxMiw2ICsxNDEyLDcgQEAKIAkJOUIwMkUwQ0Iy
MzVFQjk1MzAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwMkUwQzkyMzVFQjYyRDAw
NDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlCMDJFMENDMjM1RUI5NTcwMDQwNDRC
MiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwMkUwQ0EyMzVFQjg4NDAwNDA0NEIyIC8qIF9XS1RleHRN
YW5pcHVsYXRpb25JdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJOUIwMkUwRDcyMzVGQzk0RjAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRp
b25Ub2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OUIwMkUwQ0QyMzVFQjk2NzAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTlCMDMzRTcz
MjUyNThBODkwMDUwMTA3MSAvKiBXZWJQYWdlSVBDSW50ZXJmYWNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDMzRTcyMjUyNTgwRjMwMDUwMTA3
MSAvKiBXZWJQYWdlSVBDSW50ZXJmYWNlLmNwcCAqLzsgfTsKIAkJOUIxMjI5Q0QyM0ZGMjVGMjAw
OENBNzUxIC8qIFJlbW90ZUF1ZGlvRGVzdGluYXRpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjEyMjlDQjIzRkYyNUYyMDA4Q0E3NTEg
LyogUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIuaCAqLzsgfTsKIAkJOUIxMjI5Q0UyM0ZG
MjVGMjAwOENBNzUxIC8qIFJlbW90ZUF1ZGlvRGVzdGluYXRpb25NYW5hZ2VyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMTIyOUNDMjNGRjI1RjIw
MDhDQTc1MSAvKiBSZW1vdGVBdWRpb0Rlc3RpbmF0aW9uTWFuYWdlci5jcHAgKi87IH07CiAJCTlC
MTIyOUQyMjNGRjJCQ0MwMDhDQTc1MSAvKiBSZW1vdGVBdWRpb0Rlc3RpbmF0aW9uSWRlbnRpZmll
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIxMjI5
RDAyM0ZGMkE1RTAwOENBNzUxIC8qIFJlbW90ZUF1ZGlvRGVzdGluYXRpb25JZGVudGlmaWVyLmgg
Ki87IH07CkBAIC00NDc3LDYgKzQ0NzgsOCBAQAogCQk5QjAyRTBDRDIzNUVCOTY3MDA0MDQ0QjIg
LyogX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1RleHRNYW5p
cHVsYXRpb25Ub2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAyRTBDRTIz
NUVCQjE0MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5QjAyRTBEMDIzNUVCQ0NBMDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW0ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBfV0tUZXh0TWFuaXB1bGF0aW9uSXRl
bS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwMzNFNzEyNTI1ODBGMzAwNTAx
MDcxIC8qIFdlYlBhZ2VJUENJbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZUlQQ0lu
dGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjAzM0U3MjI1MjU4MEYz
MDA1MDEwNzEgLyogV2ViUGFnZUlQQ0ludGVyZmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
ZWJQYWdlSVBDSW50ZXJmYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIx
MjI5Q0IyM0ZGMjVGMjAwOENBNzUxIC8qIFJlbW90ZUF1ZGlvRGVzdGluYXRpb25NYW5hZ2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbW90ZUF1ZGlvRGVzdGluYXRpb25NYW5hZ2VyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMTIyOUNDMjNGRjI1RjIwMDhDQTc1MSAvKiBSZW1vdGVB
dWRpb0Rlc3RpbmF0aW9uTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVBdWRp
b0Rlc3RpbmF0aW9uTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlC
MTIyOUNGMjNGRjI4MTQwMDhDQTc1MSAvKiBSZW1vdGVBdWRpb0Rlc3RpbmF0aW9uTWFuYWdlci5t
ZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVBdWRpb0Rlc3RpbmF0aW9uTWFuYWdlci5tZXNzYWdlcy5p
bjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg4ODIsNiArODg4NSw4IEBACiAJCQkJ
QzBDRTcyNTgxMjQ3RTREQTAwQkMwRUM0IC8qIFdlYlBhZ2UubWVzc2FnZXMuaW4gKi8sCiAJCQkJ
QkM3QjYyMTQxMkE0MjE5QTAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cFByb3h5LmNwcCAqLywKIAkJ
CQlCQzdCNjIxMzEyQTQyMTlBMDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwUHJveHkuaCAqLywKKwkJ
CQk5QjAzM0U3MTI1MjU4MEYzMDA1MDEwNzEgLyogV2ViUGFnZUlQQ0ludGVyZmFjZS5oICovLAor
CQkJCTlCMDMzRTcyMjUyNTgwRjMwMDUwMTA3MSAvKiBXZWJQYWdlSVBDSW50ZXJmYWNlLmNwcCAq
LywKIAkJCQkyRDVDOUQwMzE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuY3BwICov
LAogCQkJCTJENUM5RDA0MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5oICovLAog
CQkJCUJDQTBFRjdFMTIzMzFFNzgwMDdEM0NGQiAvKiBXZWJVbmRvU3RlcC5jcHAgKi8sCkBAIC0x
Mjk4OSw2ICsxMjk5NCw3IEBACiAJCQkJMkQ4NTA4QzYyMTJFMzNFRDAwMEVGNDZDIC8qIFVuaWZp
ZWRTb3VyY2U5Ny5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDg1MDhEODIxMkUzM0VEMDAwRUY0
NkMgLyogVW5pZmllZFNvdXJjZTk4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEODUwOEM1MjEy
RTMzRUQwMDBFRjQ2QyAvKiBVbmlmaWVkU291cmNlOTkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
OUIwMzNFNzMyNTI1OEE4OTAwNTAxMDcxIC8qIFdlYlBhZ2VJUENJbnRlcmZhY2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMkQ4NTA4RDIyMTJFMzNFRDAwMEVGNDZDIC8qIFVuaWZpZWRTb3VyY2Ux
MDAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM4QTFGQzAyM0E1NTFCRjAwRDIzNzRGIC8qIFVz
ZXJJbnRlcmZhY2VJZGlvbS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNENDkxQjBEMUU3MzJFNEQw
MDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCmluZGV4IDFiOWEzYTlh
Y2Q1My4uOWQzYzBiMThlYzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKQEAg
LTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VHcm91cFByb3h5LmgiCisjaW5jbHVk
ZSAiV2ViUGFnZUlQQ0ludGVyZmFjZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sTWVz
c2FnZXMuaCIKQEAgLTE3NDMsNiArMTc0NCwxMCBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChET01XcmFwcGVyV29ybGQmCiAg
ICAgaWYgKCF3ZWJQYWdlKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBGSVhNRTogQWRkIGlm
IEVOQUJMRSh+KQorICAgIGlmICh3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICB3ZWJQYWdlLT5p
cGNJbnRlcmZhY2UoKS5kaWRDbGVhcldpbmRvd09iamVjdEluTWFpbldvcmxkKCptX2ZyYW1lLT5j
b3JlRnJhbWUoKSwgd29ybGQpOworCiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2FkZXJD
bGllbnQoKS5kaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lKCp3ZWJQYWdlLCBtX2ZyYW1lLCB3
b3JsZCk7CiAKICAgICBXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5KiBhdXRvbWF0aW9uU2Vzc2lv
blByb3h5ID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYXV0b21hdGlvblNlc3Npb25Qcm94eSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAx
MjljYTY2Y2U0Y2YuLjFmYmRiYTA0OWZmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTEwNyw2ICsxMDcsNyBAQAogI2luY2x1ZGUgIldlYk9w
ZW5QYW5lbFJlc3VsdExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUNyZWF0aW9uUGFyYW1l
dGVycy5oIgogI2luY2x1ZGUgIldlYlBhZ2VHcm91cFByb3h5LmgiCisjaW5jbHVkZSAiV2ViUGFn
ZUlQQ0ludGVyZmFjZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZU92
ZXJsYXkuaCIKQEAgLTUzNyw2ICs1MzgsNyBAQCBXZWJQYWdlOjpXZWJQYWdlKFBhZ2VJZGVudGlm
aWVyIHBhZ2VJRCwgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiAgICAg
cGFnZUNvbmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyID0gV2ViU3RvcmFnZU5h
bWVzcGFjZVByb3ZpZGVyOjpnZXRPckNyZWF0ZSgqbV9wYWdlR3JvdXApOwogICAgIHBhZ2VDb25m
aWd1cmF0aW9uLnVzZXJDb250ZW50UHJvdmlkZXIgPSBtX3VzZXJDb250ZW50Q29udHJvbGxlci5w
dHIoKTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi52aXNpdGVkTGlua1N0b3JlID0gVmlzaXRlZExp
bmtUYWJsZUNvbnRyb2xsZXI6OmdldE9yQ3JlYXRlKHBhcmFtZXRlcnMudmlzaXRlZExpbmtUYWJs
ZUlEKTsKKyAgICBtX3Zpc2l0ZWRMaW5rVGFibGVJRCA9IHBhcmFtZXRlcnMudmlzaXRlZExpbmtU
YWJsZUlEOwogCiAjaWYgRU5BQkxFKEFQUExFX1BBWSkKICAgICBwYWdlQ29uZmlndXJhdGlvbi5w
YXltZW50Q29vcmRpbmF0b3JDbGllbnQgPSBuZXcgV2ViUGF5bWVudENvb3JkaW5hdG9yKCp0aGlz
KTsKQEAgLTcxNzcsNiArNzE3OSwxNCBAQCB2b2lkIFdlYlBhZ2U6OnN5bmNocm9uaXplQ09SU0Rp
c2FibGluZ1BhdHRlcm5zV2l0aE5ldHdvcmtQcm9jZXNzKCkKICAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlNldENPUlNEaXNhYmxp
bmdQYXR0ZXJucyhtX2lkZW50aWZpZXIsIG1fY29yc0Rpc2FibGluZ1BhdHRlcm5zKSwgMCk7CiB9
CiAKKy8vIEZJWE1FOiBBZGQgaWYgRU5BQkxFKH4pCitXZWJQYWdlSVBDSW50ZXJmYWNlJiBXZWJQ
YWdlOjppcGNJbnRlcmZhY2UoKQoreworICAgIGlmICghbV9pcGNJbnRlcmZhY2UpCisgICAgICAg
IG1faXBjSW50ZXJmYWNlID0gV2ViUGFnZUlQQ0ludGVyZmFjZTo6Y3JlYXRlKCp0aGlzLCBtZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCgpKTsKKyAgICByZXR1cm4gKm1faXBjSW50ZXJmYWNlOwor
fQorCiBib29sIFdlYlBhZ2U6OnNob3VsZFVzZVJlbW90ZVJlbmRlcmluZ0ZvcihSZW5kZXJpbmdQ
dXJwb3NlIHB1cnBvc2UpCiB7CiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IGY5MTA2NmQ3YmJhOC4uZGJmYTM4
Y2M0YzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBA
IC0yNjcsNiArMjY3LDcgQEAgY2xhc3MgV2ViTW91c2VFdmVudDsKIGNsYXNzIFdlYk5vdGlmaWNh
dGlvbkNsaWVudDsKIGNsYXNzIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOwogY2xhc3MgV2Vi
UGFnZUdyb3VwUHJveHk7CitjbGFzcyBXZWJQYWdlSVBDSW50ZXJmYWNlOwogY2xhc3MgV2ViUGFn
ZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI7CiBjbGFzcyBXZWJQYWdlT3ZlcmxheTsKIGNsYXNz
IFdlYlBheW1lbnRDb29yZGluYXRvcjsKQEAgLTEzMzIsNiArMTMzMyw5IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgdXBkYXRlQ09SU0Rpc2FibGluZ1BhdHRlcm5zKFZlY3RvcjxTdHJpbmc+JiYpOwog
CisgICAgV2ViUGFnZUlQQ0ludGVyZmFjZSYgaXBjSW50ZXJmYWNlKCk7CisgICAgdWludDY0X3Qg
dmlzaXRlZExpbmtUYWJsZUlEKCkgY29uc3QgeyByZXR1cm4gbV92aXNpdGVkTGlua1RhYmxlSUQ7
IH0KKwogICAgIHZvaWQgZ2V0UHJvY2Vzc0Rpc3BsYXlOYW1lKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoU3RyaW5nJiYpPiYmKTsKIAogICAgIFdlYkNvcmU6OkFsbG93c0NvbnRlbnRKYXZhU2NyaXB0
IGFsbG93c0NvbnRlbnRKYXZhU2NyaXB0RnJvbU1vc3RSZWNlbnROYXZpZ2F0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9hbGxvd3NDb250ZW50SmF2YVNjcmlwdEZyb21Nb3N0UmVjZW50TmF2aWdhdGlv
bjsgfQpAQCAtMjE2NCw2ICsyMTY4LDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NhblVzZUNy
ZWRlbnRpYWxTdG9yYWdlIHsgdHJ1ZSB9OwogCiAgICAgVmVjdG9yPFN0cmluZz4gbV9jb3JzRGlz
YWJsaW5nUGF0dGVybnM7CisKKyAgICAvLyBGSVhNRTogQWRkIGlmIEVOQUJMRSh+KQorICAgIFJl
ZlB0cjxXZWJQYWdlSVBDSW50ZXJmYWNlPiBtX2lwY0ludGVyZmFjZTsKKyAgICB1aW50NjRfdCBt
X3Zpc2l0ZWRMaW5rVGFibGVJRDsKIH07CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJUENJbnRl
cmZhY2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUlQQ0lu
dGVyZmFjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iOTQx
ZDZiMzUyYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlSVBDSW50ZXJmYWNlLmNwcApAQCAtMCwwICsxLDY1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlSVBDSW50ZXJmYWNlLmgi
CisKKy8vIEZJWE1FOiBBZGQgaWYgRU5BQkxFKH4pCisKKyNpbmNsdWRlICJFbmNvZGVyLmgiCisj
aW5jbHVkZSAiRnJhbWVJbmZvRGF0YS5oIgorI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9u
LmgiCisjaW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVk
ZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vz
cy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29tbW9uVk0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RP
TVdyYXBwZXJXb3JsZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElD
YXN0Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQnVpbHRpbk5hbWVzLmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNCaWdJbnQuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0NsYXNzUmVmLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTT2JqZWN0Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL09wYXF1ZUpTU3RyaW5nLmg+CisKKyNpbmNsdWRlICJWaXNp
dGVkTGlua1N0b3JlTWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEpT
VUlQcm9jZXNzIDogcHVibGljIFJlZkNvdW50ZWQ8SlNVSVByb2Nlc3M+LCBwcml2YXRlIFdlYkNv
cmU6OkZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxK
U1VJUHJvY2Vzcz4gY3JlYXRlKFdlYlBhZ2VJUENJbnRlcmZhY2UmIGlwY0ludGVyZmFjZSwgV2Vi
Q29yZTo6RnJhbWUmIGZyYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
SlNVSVByb2Nlc3MoaXBjSW50ZXJmYWNlLCBmcmFtZSkpOworICAgIH0KKworICAgIHN0YXRpYyBK
U0NsYXNzUmVmIHdyYXBwZXJDbGFzcygpOworCitwcml2YXRlOgorICAgIEpTVUlQcm9jZXNzKFdl
YlBhZ2VJUENJbnRlcmZhY2UmIGlwY0ludGVyZmFjZSwgV2ViQ29yZTo6RnJhbWUmIGZyYW1lKQor
ICAgICAgICA6IEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlcigmZnJhbWUpCisgICAgICAgICwgbV9p
bnRlcmZhY2UoaXBjSW50ZXJmYWNlKQorICAgIHsgfQorCisgICAgc3RhdGljIEpTVUlQcm9jZXNz
KiB1bndyYXAoSlNPYmplY3RSZWYpOworICAgIHN0YXRpYyBKU1VJUHJvY2VzcyogdG9JbXBsKEpT
Q29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShKU0Nv
bnRleHRSZWYsIEpTT2JqZWN0UmVmKTsKKyAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU09iamVj
dFJlZik7CisgICAgc3RhdGljIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9u
cygpOworICAgIHN0YXRpYyBjb25zdCBKU1N0YXRpY1ZhbHVlKiBzdGF0aWNWYWx1ZXMoKTsKKwor
ICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHNlbmRNZXNzYWdlKEpTQ29udGV4dFJlZiwgSlNPYmplY3RS
ZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHN0YXRp
YyBKU1ZhbHVlUmVmIHNlbmRTeW5jTWVzc2FnZShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICBzdGF0aWMgSlNW
YWx1ZVJlZiBlbmNvZGVBcmd1bWVudHMoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisKKyAgICBzdGF0aWMgSlNWYWx1
ZVJlZiB2aXNpdGVkTGlua1N0b3JlSUQoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNTdHJp
bmdSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgd2Vi
UGFnZVByb3h5SUQoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNTdHJpbmdSZWYsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgZnJhbWVJZGVudGlmaWVy
KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pOworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHJldHJpZXZlSUQoSlNDb250ZXh0UmVmLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIGNvbnN0IFdURjo6
RnVuY3Rpb248dWludDY0X3QoSlNVSVByb2Nlc3MmKT4mKTsKKworICAgIHN0YXRpYyBKU1ZhbHVl
UmVmIG1lc3NhZ2VzKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pOworCisgICAgUmVmPFdlYlBhZ2VJUENJbnRlcmZhY2U+IG1faW50
ZXJmYWNlOworfTsKKworSlNDbGFzc1JlZiBKU1VJUHJvY2Vzczo6d3JhcHBlckNsYXNzKCkKK3sK
KyAgICBzdGF0aWMgSlNDbGFzc1JlZiBqc0NsYXNzOworICAgIGlmICghanNDbGFzcykgeworICAg
ICAgICBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1w
dHk7CisgICAgICAgIGRlZmluaXRpb24uY2xhc3NOYW1lID0gIlVJUHJvY2VzcyI7CisgICAgICAg
IGRlZmluaXRpb24ucGFyZW50Q2xhc3MgPSAwOworICAgICAgICBkZWZpbml0aW9uLnN0YXRpY1Zh
bHVlcyA9IHN0YXRpY1ZhbHVlcygpOworICAgICAgICBkZWZpbml0aW9uLnN0YXRpY0Z1bmN0aW9u
cyA9IHN0YXRpY0Z1bmN0aW9ucygpOworICAgICAgICBkZWZpbml0aW9uLmluaXRpYWxpemUgPSBp
bml0aWFsaXplOworICAgICAgICBkZWZpbml0aW9uLmZpbmFsaXplID0gZmluYWxpemU7CisgICAg
ICAgIGpzQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKTsKKyAgICB9CisgICAgcmV0
dXJuIGpzQ2xhc3M7Cit9CisKK2lubGluZSBKU1VJUHJvY2VzcyogSlNVSVByb2Nlc3M6OnVud3Jh
cChKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTVUlQcm9j
ZXNzKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworfQorCitKU1VJUHJvY2VzcyogSlNV
SVByb2Nlc3M6OnRvSW1wbChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkK
K3sKKyAgICBpZiAoIWNvbnRleHQgfHwgIXZhbHVlIHx8ICFKU1ZhbHVlSXNPYmplY3RPZkNsYXNz
KGNvbnRleHQsIHZhbHVlLCB3cmFwcGVyQ2xhc3MoKSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiB1bndyYXAoSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHZhbHVlLCAwKSk7
Cit9CisKK3ZvaWQgSlNVSVByb2Nlc3M6OmluaXRpYWxpemUoSlNDb250ZXh0UmVmLCBKU09iamVj
dFJlZiBvYmplY3QpCit7CisgICAgdW53cmFwKG9iamVjdCktPnJlZigpOworfQorCit2b2lkIEpT
VUlQcm9jZXNzOjpmaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgdW53cmFwKG9i
amVjdCktPnJlZigpOworfQorCitjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBKU1VJUHJvY2Vzczo6
c3RhdGljRnVuY3Rpb25zKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNGdW5jdGlvbiBm
dW5jdGlvbnNbXSA9IHsKKyAgICAgICAgeyAic2VuZE1lc3NhZ2UiLCBzZW5kTWVzc2FnZSwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB9LAorICAgICAgICB7ICJzZW5kU3luY01lc3NhZ2UiLCBzZW5kU3luY01lc3NhZ2UsIGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fSwKKyAgICAgICAgeyAiZW5jb2RlQXJndW1lbnRzIiwgZW5jb2RlQXJndW1lbnRzLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0s
CisgICAgICAgIHsgMCwgMCwgMCB9CisgICAgfTsKKyAgICByZXR1cm4gZnVuY3Rpb25zOworfQor
Citjb25zdCBKU1N0YXRpY1ZhbHVlKiBKU1VJUHJvY2Vzczo6c3RhdGljVmFsdWVzKCkKK3sKKyAg
ICBzdGF0aWMgY29uc3QgSlNTdGF0aWNWYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICAgICAgeyAidmlz
aXRlZExpbmtTdG9yZUlEIiwgdmlzaXRlZExpbmtTdG9yZUlELCAwLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAg
IHsgIndlYlBhZ2VQcm94eUlEIiwgd2ViUGFnZVByb3h5SUQsIDAsIGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKKyAgICAgICAg
eyAiZnJhbWVJZGVudGlmaWVyIiwgZnJhbWVJZGVudGlmaWVyLCAwLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAg
IHsgIm1lc3NhZ2VzIiwgbWVzc2FnZXMsIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKKyAgICAgICAgeyAwLCAwLCAwLCAw
IH0KKyAgICB9OworICAgIHJldHVybiB2YWx1ZXM7Cit9CisKK3N0YXRpYyBPcHRpb25hbDx1aW50
NjRfdD4gY29udmVydFRvVWludDY0KEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKQoreworICAgIGlmIChq
c1ZhbHVlLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgZG91YmxlIHZhbHVlID0ganNWYWx1ZS5hc051
bWJlcigpOworICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHRydW5jKHZhbHVlKSAhPSB2YWx1ZSkK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB2YWx1ZTsK
KyAgICB9CisgICAgaWYgKGpzVmFsdWUuaXNCaWdJbnQoKSkKKyAgICAgICAgcmV0dXJuIEpTQzo6
SlNCaWdJbnQ6OnRvVWludDY0KGpzVmFsdWUpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9
CisKK3N0YXRpYyBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBwcm9jZXNzVGFyZ2V0RnJvbUFyZ3Vt
ZW50KEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZVJlZiB2YWx1ZVJl
ZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgYXV0byBuYW1lID0gdG9KUyhnbG9i
YWxPYmplY3QsIHZhbHVlUmVmKS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOworICAgIGlmIChz
Y29wZS5leGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAobmFt
ZSA9PSAiVUkiKQorICAgICAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKTsKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAgaWYgKG5h
bWUgPT0gIkdQVSIpCisgICAgICAgIHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5z
dXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7CisjZW5kaWYKKyAgICBpZiAo
bmFtZSA9PSAiTmV0d29ya2luZyIpCisgICAgICAgIHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworCisg
ICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
IlRhcmdldCBwcm9jZXNzIG11c3QgYmUgVUksIEdQVSwgb3IgTmV0d29ya2luZyJfcykpOworICAg
IHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgT3B0aW9uYWw8dWludDY0X3Q+IGRlc3RpbmF0
aW9uSURGcm9tQXJndW1lbnQoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlUmVmIHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgYXV0byBqc1Zh
bHVlID0gdG9KUyhnbG9iYWxPYmplY3QsIHZhbHVlUmVmKTsKKyAgICBhdXRvIHJlc3VsdCA9IGNv
bnZlcnRUb1VpbnQ2NChqc1ZhbHVlKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgKmV4Y2Vw
dGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgImRlc3RpbmF0
aW9uSUQgbXVzdCBiZSBhbiBpbnRlZ2VyIl9zKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
c3RhdGljIE9wdGlvbmFsPHVpbnQ2NF90PiBtZXNzYWdlSURGcm9tQXJndW1lbnQoSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlUmVmIHZhbHVlUmVmLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit7CisgICAgYXV0byBqc1ZhbHVlID0gdG9KUyhnbG9iYWxPYmplY3QsIHZh
bHVlUmVmKTsKKyAgICBhdXRvIHJlc3VsdCA9IGNvbnZlcnRUb1VpbnQ2NChqc1ZhbHVlKTsKKyAg
ICBpZiAoIXJlc3VsdCkKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgIm1lc3NhZ2VJRCBtdXN0IGJlIGFuIGludGVnZXIiX3MpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgYm9vbCBlbmNvZGVNZXNzYWdlQm9keShJ
UEM6OkVuY29kZXImIGVuY29kZXIsIEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZh
bHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgYXV0byB0eXBlID0gSlNWYWx1
ZUdldFR5cGVkQXJyYXlUeXBlKGNvbnRleHQsIHZhbHVlUmVmLCBleGNlcHRpb24pOworICAgIGlm
ICh0eXBlID09IGtKU1R5cGVkQXJyYXlUeXBlTm9uZSkgeworICAgICAgICAqZXhjZXB0aW9uID0g
dG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0KSwgIlRoZSBmb3VydGggYXJn
dWVtZW50IG11c3QgYmUgYSBUeXBlZEFycmF5IG9yIEFycmF5QnVmZmVyIl9zKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBhdXRvIG9iamVjdCA9IEpTVmFsdWVUb09iamVj
dChjb250ZXh0LCB2YWx1ZVJlZiwgZXhjZXB0aW9uKTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgdm9pZCogYnVmZmVyOworICAgIGlmICh0eXBlID09IGtK
U1R5cGVkQXJyYXlUeXBlQXJyYXlCdWZmZXIpCisgICAgICAgIGJ1ZmZlciA9IEpTT2JqZWN0R2V0
QXJyYXlCdWZmZXJCeXRlc1B0cihjb250ZXh0LCBvYmplY3QsIGV4Y2VwdGlvbik7CisgICAgZWxz
ZQorICAgICAgICBidWZmZXIgPSBKU09iamVjdEdldFR5cGVkQXJyYXlCeXRlc1B0cihjb250ZXh0
LCBvYmplY3QsIGV4Y2VwdGlvbik7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHNpemVfdCBidWZmZXJTaXplOworICAgIGlmICh0eXBlID09IGtKU1R5cGVk
QXJyYXlUeXBlQXJyYXlCdWZmZXIpCisgICAgICAgIGJ1ZmZlclNpemUgPSBKU09iamVjdEdldEFy
cmF5QnVmZmVyQnl0ZUxlbmd0aChjb250ZXh0LCBvYmplY3QsIGV4Y2VwdGlvbik7CisgICAgZWxz
ZQorICAgICAgICBidWZmZXJTaXplID0gSlNPYmplY3RHZXRUeXBlZEFycmF5Qnl0ZUxlbmd0aChj
b250ZXh0LCBvYmplY3QsIGV4Y2VwdGlvbik7CisgICAgaWYgKCFidWZmZXJTaXplKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXIpLCBidWZmZXJTaXplLCAxKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworSlNWYWx1ZVJlZiBKU1VJUHJvY2Vzczo6c2VuZE1lc3NhZ2Uo
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29u
dGV4dCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxPYmplY3QtPnZtKCkpOwor
ICAgIGF1dG8qIGltcGwgPSB0b0ltcGwoY29udGV4dCwgdGhpc09iamVjdCk7CisgICAgaWYgKCFp
bXBsKSB7CisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0
b0pTKGNvbnRleHQpLCAiV3JvbmcgdHlwZSJfcykpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorICAgIGF1dG8gaXBjSW50ZXJmYWNlID0gaW1w
bC0+bV9pbnRlcmZhY2UuY29weVJlZigpOworCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAzKSB7
CisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGNv
bnRleHQpLCAiTXVzdCBzcGVjaWZ5IHRoZSB0YXJnZXQgcHJvY2VzcywgZGVzaW5hdGlvbiBJRCwg
YW5kIG1lc3NhZ2UgSUQgYXMgdGhlIGZpcnN0IHRocmVlIGFyZ3VtZW50cyJfcykpOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorCisgICAgYXV0
byBjb25uZWN0aW9uID0gcHJvY2Vzc1RhcmdldEZyb21Bcmd1bWVudChnbG9iYWxPYmplY3QsIGFy
Z3VtZW50c1swXSwgZXhjZXB0aW9uKTsKKyAgICBpZiAoIWNvbm5lY3Rpb24pCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIGF1dG8gZGVzdGluYXRp
b25JRCA9IGRlc3RpbmF0aW9uSURGcm9tQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNb
MV0sIGV4Y2VwdGlvbik7CisgICAgaWYgKCFkZXN0aW5hdGlvbklEKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBhdXRvIG1lc3NhZ2VJRCA9IG1l
c3NhZ2VJREZyb21Bcmd1bWVudChnbG9iYWxPYmplY3QsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9u
KTsKKyAgICBpZiAoIW1lc3NhZ2VJRCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworCisgICAgYXV0byBlbmNvZGVyID0gbWFrZVVuaXF1ZTxJUEM6OkVuY29k
ZXI+KHN0YXRpY19jYXN0PElQQzo6TWVzc2FnZU5hbWU+KHN0YXRpY19jYXN0PHVpbnQ2NF90Pigq
bWVzc2FnZUlEKSksICpkZXN0aW5hdGlvbklEKTsKKworICAgIGlmIChhcmd1bWVudENvdW50ID4g
MykgeworICAgICAgICBpZiAoIWVuY29kZU1lc3NhZ2VCb2R5KCplbmNvZGVyLCBjb250ZXh0LCBh
cmd1bWVudHNbM10sIGV4Y2VwdGlvbikpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CisgICAgfQorCisgICAgLy8gRklYTUU6IEFkZCB0aGUgc3VwcG9y
dCBmb3Igc3BlY2lmeWluZyBJUEMgb3B0aW9ucy4KKworICAgIGNvbm5lY3Rpb24tPnNlbmRNZXNz
YWdlKFdURk1vdmUoZW5jb2RlciksIHsgfSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7Cit9CisKK0pTVmFsdWVSZWYgSlNVSVByb2Nlc3M6OnNlbmRTeW5jTWVz
c2FnZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9K
Uyhjb250ZXh0KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iamVjdC0+dm0o
KSk7CisgICAgYXV0byogaW1wbCA9IHRvSW1wbChjb250ZXh0LCB0aGlzT2JqZWN0KTsKKyAgICBp
ZiAoIWltcGwpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVy
cm9yKHRvSlMoY29udGV4dCksICJXcm9uZyB0eXBlIl9zKSk7CisgICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisgICAgYXV0byBpcGNJbnRlcmZhY2Ug
PSBpbXBsLT5tX2ludGVyZmFjZS5jb3B5UmVmKCk7CisKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8
IDQpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRv
SlMoY29udGV4dCksICJNdXN0IHNwZWNpZnkgdGhlIHRhcmdldCBwcm9jZXNzLCBkZXNpbmF0aW9u
IElELCBtZXNzYWdlIElELCBhbmQgdGltZW91dCBhcyB0aGUgZmlyc3QgZm91ciBhcmd1bWVudHMi
X3MpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAg
IH0KKworICAgIGF1dG8gY29ubmVjdGlvbiA9IHByb2Nlc3NUYXJnZXRGcm9tQXJndW1lbnQoZ2xv
YmFsT2JqZWN0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgaWYgKCFjb25uZWN0aW9u
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBh
dXRvIGRlc3RpbmF0aW9uSUQgPSBkZXN0aW5hdGlvbklERnJvbUFyZ3VtZW50KGdsb2JhbE9iamVj
dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pOworICAgIGlmICghZGVzdGluYXRpb25JRCkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgYXV0byBt
ZXNzYWdlSUQgPSBtZXNzYWdlSURGcm9tQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNb
Ml0sIGV4Y2VwdGlvbik7CisgICAgaWYgKCFtZXNzYWdlSUQpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIFNlY29uZHMgdGltZW91dDsKKyAgICB7
CisgICAgICAgIGF1dG8ganNWYWx1ZSA9IHRvSlMoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbM10p
OworICAgICAgICBpZiAoIWpzVmFsdWUuaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgKmV4Y2Vw
dGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgInRpbWVvdXQg
bXVzdCBiZSBhIG51bWJlciJfcykpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIHRpbWVvdXQgPSBTZWNvbmRzIHsg
anNWYWx1ZS5hc051bWJlcigpIH07CisgICAgfQorICAgIAorICAgIC8vIEZJWE1FOiBTdXBwb3J0
IHRoZSBvcHRpb25zLgorCisgICAgdWludDY0X3Qgc3luY1JlcXVlc3RJRCA9IDA7CisgICAgYXV0
byBlbmNvZGVyID0gY29ubmVjdGlvbi0+Y3JlYXRlU3luY01lc3NhZ2VFbmNvZGVyKHN0YXRpY19j
YXN0PElQQzo6TWVzc2FnZU5hbWU+KHN0YXRpY19jYXN0PHVpbnQ2NF90PigqbWVzc2FnZUlEKSks
ICpkZXN0aW5hdGlvbklELCBzeW5jUmVxdWVzdElEKTsKKworICAgIGlmIChhcmd1bWVudENvdW50
ID4gNCkgeworICAgICAgICBpZiAoIWVuY29kZU1lc3NhZ2VCb2R5KCplbmNvZGVyLCBjb250ZXh0
LCBhcmd1bWVudHNbNF0sIGV4Y2VwdGlvbikpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorCisgICAgYXV0byByZXBseURlY29kZXIgPSBj
b25uZWN0aW9uLT5zZW5kU3luY01lc3NhZ2Uoc3luY1JlcXVlc3RJRCwgV1RGTW92ZShlbmNvZGVy
KSwgdGltZW91dCwgeyB9KTsKKyAgICAvLyBGSVhNRTogRGVjb2RlIHRoZSByZXBseS4KKworICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgUmVjdFR5cGU+IGJvb2wgZW5jb2RlUmVjdFR5cGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVy
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNPYmplY3QqIGpzT2Jq
ZWN0KQoreworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8ganNY
ID0ganNPYmplY3QtPmdldChnbG9iYWxPYmplY3QsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgIngiX3MpKTsKKyAgICBpZiAoIWpzWC5pc051bWJlcigpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgYXV0byBqc1kgPSBqc09iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAieSJfcykpOworICAgIGlmICghanNZLmlzTnVtYmVy
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIGpzV2lkdGggPSBqc09iamVjdC0+
Z2V0KGdsb2JhbE9iamVjdCwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAid2lkdGgi
X3MpKTsKKyAgICBpZiAoIWpzV2lkdGguaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGF1dG8ganNIZWlnaHQgPSBqc09iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaGVpZ2h0Il9zKSk7CisgICAgaWYgKCFqc0hlaWdo
dC5pc051bWJlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZW5jb2RlciA8PCBSZWN0
VHlwZShqc1guYXNOdW1iZXIoKSwganNZLmFzTnVtYmVyKCksIGpzV2lkdGguYXNOdW1iZXIoKSwg
anNIZWlnaHQuYXNOdW1iZXIoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEludGVncmFsVHlwZT4gYm9vbCBlbmNvZGVJbnRlZ3JhbFR5cGUoSVBDOjpFbmNvZGVy
JiBlbmNvZGVyLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkKK3sKKyAgICBpZiAoanNWYWx1ZS5pc0Jp
Z0ludCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IG5lZ2F0aXZlIEJpZ0ludC4KKyAg
ICAgICAgYXV0byByZXN1bHQgPSBKU0M6OkpTQmlnSW50Ojp0b1VpbnQ2NChqc1ZhbHVlKTsKKyAg
ICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8SW50ZWdyYWxUeXBlPigqcmVzdWx0KTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIGlmICghanNWYWx1ZS5pc051bWJlcigpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgZG91YmxlIHZhbHVlID0ganNWYWx1ZS5hc051bWJlcigpOworICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8SW50ZWdyYWxUeXBlPih2YWx1ZSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3N0cnVjdCBWZWN0b3JFbmNvZGVIZWxwZXIgeworICAgIFdURjo6RnVuY3Rp
b248dm9pZChJUEM6OkVuY29kZXImKT4gZW5jb2RlRnVuY3Rpb247CisKKyAgICB2b2lkIGVuY29k
ZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBlbmNvZGVGdW5j
dGlvbihlbmNvZGVyKTsKKyAgICB9Cit9OworCitKU1ZhbHVlUmVmIEpTVUlQcm9jZXNzOjplbmNv
ZGVBcmd1bWVudHMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGF1dG8gd3JhcHBlZCA9IG1h
a2VSZWZQdHIodG9JbXBsKGNvbnRleHQsIHRoaXNPYmplY3QpKTsKKyAgICBpZiAoIXdyYXBwZWQp
IHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMo
Y29udGV4dCksICJXcm9uZyB0eXBlIl9zKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisKKyAgICBJUEM6OkVuY29kZXIgZW5jb2RlcihzdGF0
aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPigwKSwgMCk7CisgICAgYXV0byBzdGFydGluZ0J1ZmZl
clNpemUgPSBlbmNvZGVyLmJ1ZmZlclNpemUoKTsKKworICAgIGF1dG8gdHlwZVN0cmluZyA9IEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0eXBlIik7CisgICAgYXV0byB2YWx1ZVN0cmlu
ZyA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ2YWx1ZSIpOworICAgIFdURjo6RnVu
Y3Rpb248Ym9vbChJUEM6OkVuY29kZXImLCBKU1ZhbHVlUmVmIGpzQXJndW1lbnQpPiBlbmNvZGVB
cmd1bWVudCA9IFsmXShJUEM6OkVuY29kZXImIGVuY29kZXIsIEpTVmFsdWVSZWYganNBcmd1bWVu
dCkgeworICAgICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOworICAgICAg
ICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7CisKKyAgICAgICAgYXV0byBvYmplY3RSZWYgPSBKU1ZhbHVlVG9PYmplY3Qo
Y29udGV4dCwganNBcmd1bWVudCwgZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKCFvYmplY3RSZWYp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGF1dG8gdHlwZSA9IEpT
VmFsdWVHZXRUeXBlZEFycmF5VHlwZShjb250ZXh0LCBvYmplY3RSZWYsIGV4Y2VwdGlvbik7IHR5
cGUgIT0ga0pTVHlwZWRBcnJheVR5cGVOb25lKSB7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBr
SlNUeXBlZEFycmF5VHlwZUFycmF5QnVmZmVyKSB7CisgICAgICAgICAgICAgICAgdm9pZCogYnVm
ZmVyID0gSlNPYmplY3RHZXRBcnJheUJ1ZmZlckJ5dGVzUHRyKGNvbnRleHQsIG9iamVjdFJlZiwg
ZXhjZXB0aW9uKTsKKyAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGF1dG8gYnVmZmVyU2l6ZSA9IEpT
T2JqZWN0R2V0QXJyYXlCdWZmZXJCeXRlTGVuZ3RoKGNvbnRleHQsIG9iamVjdFJlZiwgZXhjZXB0
aW9uKTsKKyAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlclNpemUpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXIpLCBidWZmZXJT
aXplLCAxKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHZvaWQqIGJ1ZmZlciA9IEpTT2JqZWN0R2V0VHlwZWRBcnJheUJ5dGVzUHRyKGNv
bnRleHQsIG9iamVjdFJlZiwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIGlmICghYnVmZmVyKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8gYnVmZmVyU2l6
ZSA9IEpTT2JqZWN0R2V0VHlwZWRBcnJheUJ5dGVMZW5ndGgoY29udGV4dCwgb2JqZWN0UmVmLCBl
eGNlcHRpb24pOworICAgICAgICAgICAgaWYgKCFidWZmZXJTaXplKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlciksIGJ1ZmZlclNpemUsIDEp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRShnbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICBh
dXRvKiBqc09iamVjdCA9IHRvSlMoZ2xvYmFsT2JqZWN0LCBvYmplY3RSZWYpLmdldE9iamVjdCgp
OworICAgICAgICBpZiAoSlNWYWx1ZUlzQXJyYXkoY29udGV4dCwgb2JqZWN0UmVmKSkgeworICAg
ICAgICAgICAgYXV0byBqc0xlbmd0aCA9IGpzT2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJsZW5ndGgiX3MpKTsKKyAgICAgICAgICAgIGlm
IChzY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBpZiAoIWpzTGVuZ3RoLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICAqZXhj
ZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0KSwgIkFycmF5
IGxlbmd0aCBpcyBub3QgYSBudW1iZXIiX3MpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzaXplX3QgbGVuZ3RoID0ganNMZW5ndGgu
YXNOdW1iZXIoKTsKKyAgICAgICAgICAgIFZlY3RvcjxWZWN0b3JFbmNvZGVIZWxwZXI+IHRlbXBv
cmFyeTsKKyAgICAgICAgICAgIGJvb2wgZmFpbGVkID0gZmFsc2U7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBhdXRv
IGl0ZW1SZWYgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBvYmplY3RSZWYs
IGksIGV4Y2VwdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKCFpdGVtUmVmKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgdGVtcG9yYXJ5LmFwcGVu
ZChWZWN0b3JFbmNvZGVIZWxwZXIgeyBbJiwgdmFsdWVSZWYgPSBpdGVtUmVmXShJUEM6OkVuY29k
ZXImIGVuY29kZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZhaWxlZCB8fCAhZW5jb2Rl
QXJndW1lbnQoZW5jb2RlciwgdmFsdWVSZWYpKQorICAgICAgICAgICAgICAgICAgICAgICAgZmFp
bGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IH0pOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZW5jb2RlciA8PCB0ZW1wb3Jhcnk7CisgICAgICAgICAgICByZXR1cm4gIWZhaWxlZDsK
KyAgICAgICAgfQorCisgICAgICAgIGF1dG8gdHlwZVJlZiA9IEpTT2JqZWN0R2V0UHJvcGVydHko
Y29udGV4dCwgb2JqZWN0UmVmLCB0eXBlU3RyaW5nLCBleGNlcHRpb24pOworICAgICAgICBpZiAo
IXR5cGVSZWYpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0byBqc1R5
cGUgPSB0b0pTKGdsb2JhbE9iamVjdCwgdHlwZVJlZik7CisgICAgICAgIGF1dG8gdHlwZSA9IGpz
VHlwZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOworICAgICAgICBpZiAoc2NvcGUuZXhjZXB0
aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKHR5cGUgPT0g
IkludFJlY3QiKSB7CisgICAgICAgICAgICBpZiAoIWVuY29kZVJlY3RUeXBlPFdlYkNvcmU6Oklu
dFJlY3Q+KGVuY29kZXIsIGdsb2JhbE9iamVjdCwganNPYmplY3QpKSB7CisgICAgICAgICAgICAg
ICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMoY29udGV4dCks
ICJGYWlsZWQgdG8gY29udmVydCBJbnRSZWN0Il9zKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0gZWxzZSBpZiAodHlwZSA9PSAiRmxvYXRSZWN0IikgeworICAgICAgICAgICAgaWYgKCFlbmNv
ZGVSZWN0VHlwZTxXZWJDb3JlOjpGbG9hdFJlY3Q+KGVuY29kZXIsIGdsb2JhbE9iamVjdCwganNP
YmplY3QpKSB7CisgICAgICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRl
VHlwZUVycm9yKHRvSlMoY29udGV4dCksICJGYWlsZWQgdG8gY29udmVydCBGbG9hdFJlY3QiX3Mp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09ICJGcmFtZUluZm9E
YXRhIikgeworICAgICAgICAgICAgYXV0byBjb3JlRnJhbWUgPSBtYWtlUmVmUHRyKHdyYXBwZWQt
PmZyYW1lKCkpOworICAgICAgICAgICAgYXV0byB3ZWJGcmFtZSA9IG1ha2VSZWZQdHIoY29yZUZy
YW1lID8gV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoKmNvcmVGcmFtZSkgOiBudWxscHRyKTsKKyAg
ICAgICAgICAgIGlmICghd2ViRnJhbWUpIHsKKyAgICAgICAgICAgICAgICAqZXhjZXB0aW9uID0g
dG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0KSwgIkZhaWxlZCB0byBnZXQg
dGhlIGZyYW1lIl9zKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZW5jb2RlciA8PCB3ZWJGcmFtZS0+aW5mbygpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHZhbHVlUmVmID0gSlNP
YmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3RSZWYsIHZhbHVlU3RyaW5nLCBleGNlcHRp
b24pOworICAgICAgICBpZiAoIXZhbHVlUmVmKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIGF1dG8ganNWYWx1ZSA9IHRvSlMoZ2xvYmFsT2JqZWN0LCB2YWx1ZVJlZik7Cisg
ICAgICAgIE9wdGlvbmFsPGJvb2w+IGludGVncmFsUmVzdWx0OworICAgICAgICBpZiAodHlwZSA9
PSAiU3RyaW5nIikgeworICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkgeworICAgICAgICAgICAgICAgIGVuY29kZXIgPDwgU3RyaW5nIHsgfTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gc3RyaW5n
ID0ganNWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOworICAgICAgICAgICAgaWYgKHNj
b3BlLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGVuY29kZXIgPDwgc3RyaW5nOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0gZWxzZSBpZiAodHlwZSA9PSAiUkdCQSIpIHsKKyAgICAgICAgICAgIGlmICghanNWYWx1ZS5p
c051bWJlcigpKSB7CisgICAgICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3Jl
YXRlVHlwZUVycm9yKHRvSlMoY29udGV4dCksICJSR0JBIHZhbHVlIHNob3VsZCBiZSBhIG51bWJl
ciJfcykpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHVpbnQzMl90IHJnYmEgPSBqc1ZhbHVlLmFzTnVtYmVyKCk7CisgICAgICAgICAg
ICBlbmNvZGVyIDw8IFdlYkNvcmU6OkNvbG9yIHsgV2ViQ29yZTo6YXNTUkdCQShXZWJDb3JlOjpQ
YWNrZWQ6OlJHQkEocmdiYSkpIH07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fSBlbHNlIGlmICh0eXBlID09ICJib29sIikKKyAgICAgICAgICAgIGludGVncmFsUmVzdWx0ID0g
ZW5jb2RlSW50ZWdyYWxUeXBlPGJvb2w+KGVuY29kZXIsIGpzVmFsdWUpOworICAgICAgICBlbHNl
IGlmICh0eXBlID09ICJpbnQ4X3QiKQorICAgICAgICAgICAgaW50ZWdyYWxSZXN1bHQgPSBlbmNv
ZGVJbnRlZ3JhbFR5cGU8aW50OF90PihlbmNvZGVyLCBqc1ZhbHVlKTsKKyAgICAgICAgZWxzZSBp
ZiAodHlwZSA9PSAiaW50MTZfdCIpCisgICAgICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVuY29k
ZUludGVncmFsVHlwZTxpbnQxNl90PihlbmNvZGVyLCBqc1ZhbHVlKTsKKyAgICAgICAgZWxzZSBp
ZiAodHlwZSA9PSAiaW50MzJfdCIpCisgICAgICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVuY29k
ZUludGVncmFsVHlwZTxpbnQzMl90PihlbmNvZGVyLCBqc1ZhbHVlKTsKKyAgICAgICAgZWxzZSBp
ZiAodHlwZSA9PSAiaW50NjRfdCIpCisgICAgICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVuY29k
ZUludGVncmFsVHlwZTxpbnQ2NF90PihlbmNvZGVyLCBqc1ZhbHVlKTsKKyAgICAgICAgZWxzZSBp
ZiAodHlwZSA9PSAidWludDhfdCIpCisgICAgICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVuY29k
ZUludGVncmFsVHlwZTx1aW50OF90PihlbmNvZGVyLCBqc1ZhbHVlKTsKKyAgICAgICAgZWxzZSBp
ZiAodHlwZSA9PSAidWludDE2X3QiKQorICAgICAgICAgICAgaW50ZWdyYWxSZXN1bHQgPSBlbmNv
ZGVJbnRlZ3JhbFR5cGU8dWludDE2X3Q+KGVuY29kZXIsIGpzVmFsdWUpOworICAgICAgICBlbHNl
IGlmICh0eXBlID09ICJ1aW50MzJfdCIpCisgICAgICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVu
Y29kZUludGVncmFsVHlwZTx1aW50MzJfdD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgICAgIGVs
c2UgaWYgKHR5cGUgPT0gInVpbnQ2NF90IikKKyAgICAgICAgICAgIGludGVncmFsUmVzdWx0ID0g
ZW5jb2RlSW50ZWdyYWxUeXBlPHVpbnQ2NF90PihlbmNvZGVyLCBqc1ZhbHVlKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJy
b3IodG9KUyhjb250ZXh0KSwgIkJhZCB0eXBlIG5hbWUiX3MpKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW50ZWdyYWxSZXN1bHQgJiYgISppbnRl
Z3JhbFJlc3VsdCkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRl
VHlwZUVycm9yKHRvSlMoY29udGV4dCksICJGYWlsZWQgdG8gY29udmVydCBpbnRlZ3JhbCB0eXBl
Il9zKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJn
dW1lbnRDb3VudDsgKytpKSB7CisgICAgICAgIGlmICghZW5jb2RlQXJndW1lbnQoZW5jb2Rlciwg
YXJndW1lbnRzW2ldKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKKyAgICB9CisKKyAgICBKU1N0cmluZ1JlbGVhc2UodmFsdWVTdHJpbmcpOworICAg
IEpTU3RyaW5nUmVsZWFzZSh0eXBlU3RyaW5nKTsKKworICAgIHNpemVfdCBlbmNvZGVkU2l6ZSA9
IGVuY29kZXIuYnVmZmVyU2l6ZSgpIC0gc3RhcnRpbmdCdWZmZXJTaXplOworICAgIGF1dG8gdHlw
ZWRBcnJheSA9IEpTT2JqZWN0TWFrZVR5cGVkQXJyYXkoY29udGV4dCwga0pTVHlwZWRBcnJheVR5
cGVVaW50OEFycmF5LCBlbmNvZGVkU2l6ZSwgZXhjZXB0aW9uKTsKKyAgICBpZiAoIXR5cGVkQXJy
YXkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAg
IHZvaWQqIGJ1ZmZlciA9IEpTT2JqZWN0R2V0VHlwZWRBcnJheUJ5dGVzUHRyKGNvbnRleHQsIHR5
cGVkQXJyYXksIGV4Y2VwdGlvbik7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICBtZW1jcHkoYnVmZmVyLCBlbmNvZGVy
LmJ1ZmZlcigpICsgc3RhcnRpbmdCdWZmZXJTaXplLCBlbmNvZGVkU2l6ZSk7CisKKyAgICByZXR1
cm4gdHlwZWRBcnJheTsKK30KKworSlNWYWx1ZVJlZiBKU1VJUHJvY2Vzczo6dmlzaXRlZExpbmtT
dG9yZUlEKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0
cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIHJldHVybiByZXRyaWV2ZUlE
KGNvbnRleHQsIHRoaXNPYmplY3QsIGV4Y2VwdGlvbiwgW10oSlNVSVByb2Nlc3MmIHdyYXBwZWQp
IHsKKyAgICAgICAgYXV0byB3ZWJQYWdlID0gbWFrZVJlZigqd3JhcHBlZC5tX2ludGVyZmFjZS0+
bV93ZWJQYWdlKTsKKyAgICAgICAgcmV0dXJuIHdlYlBhZ2UtPnZpc2l0ZWRMaW5rVGFibGVJRCgp
OworICAgIH0pOworfQorCitKU1ZhbHVlUmVmIEpTVUlQcm9jZXNzOjp3ZWJQYWdlUHJveHlJRChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYs
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4gcmV0cmlldmVJRChjb250ZXh0
LCB0aGlzT2JqZWN0LCBleGNlcHRpb24sIFtdKEpTVUlQcm9jZXNzJiB3cmFwcGVkKSB7CisgICAg
ICAgIHJldHVybiB3cmFwcGVkLm1faW50ZXJmYWNlLT5tX3dlYlBhZ2VEZXN0aW5hdGlvbklEOwor
ICAgIH0pOworfQorCitKU1ZhbHVlUmVmIEpTVUlQcm9jZXNzOjpmcmFtZUlkZW50aWZpZXIoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgcmV0dXJuIHJldHJpZXZlSUQoY29udGV4dCwg
dGhpc09iamVjdCwgZXhjZXB0aW9uLCBbXShKU1VJUHJvY2VzcyYgd3JhcHBlZCkgeworICAgICAg
ICByZXR1cm4gV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoKndyYXBwZWQuZnJhbWUoKSktPmZyYW1l
SUQoKS50b1VJbnQ2NCgpOworICAgIH0pOworfQorCitKU1ZhbHVlUmVmIEpTVUlQcm9jZXNzOjpy
ZXRyaWV2ZUlEKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24sIGNvbnN0IFdURjo6RnVuY3Rpb248dWludDY0X3QoSlNVSVBy
b2Nlc3MmKT4mIGNhbGxiYWNrKQoreworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29u
dGV4dCk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpKU0xv
Y2tIb2xkZXIgbG9jayh2bSk7CisKKyAgICBSZWZQdHI8SlNVSVByb2Nlc3M+IHdyYXBwZWQgPSB0
b0ltcGwoY29udGV4dCwgdGhpc09iamVjdCk7CisgICAgaWYgKCF3cmFwcGVkKSB7CisgICAgICAg
ICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGNvbnRleHQpLCAi
V3JvbmcgdHlwZSJfcykpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CisgICAgfQorCisgICAgYXV0byBpZCA9IGNhbGxiYWNrKCp3cmFwcGVkKTsKKyAgICBK
U0M6OkpTQ2VsbCoganNWYWx1ZSA9IEpTQzo6SlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2Jq
ZWN0LCBpZCk7CisgICAgcmV0dXJuIHRvUmVmKHZtLCBqc1ZhbHVlKTsKK30KKworSlNWYWx1ZVJl
ZiBKU1VJUHJvY2Vzczo6bWVzc2FnZXMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
YXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKKyAgICBhdXRvJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKworICAgIGF1
dG8qIGltcGwgPSB0b0ltcGwoY29udGV4dCwgdGhpc09iamVjdCk7CisgICAgaWYgKCFpbXBsKSB7
CisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGNv
bnRleHQpLCAiV3JvbmcgdHlwZSJfcykpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CisgICAgfQorCisgICAgSlNDOjpKU09iamVjdCogbWVzc2FnZXNPYmpl
Y3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2Jq
ZWN0UHJvdG90eXBlKCkpOworICAgIGF1dG8gbmFtZUlkZW50ID0gSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAibmFtZSIpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSVBDOjpNZXNzYWdlTmFtZTo6TGFzdCk7ICsraSkgeworICAgICAg
ICBhdXRvKiBtZXNzYWdlTmFtZSA9IGRlc2NyaXB0aW9uKHN0YXRpY19jYXN0PElQQzo6TWVzc2Fn
ZU5hbWU+KGkpKTsKKworICAgICAgICBKU0M6OkpTT2JqZWN0KiBkaWN0aW9uYXJ5ID0gY29uc3Ry
dWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlw
ZSgpKTsKKyAgICAgICAgZGljdGlvbmFyeS0+cHV0RGlyZWN0KHZtLCBuYW1lSWRlbnQsIEpTQzo6
SlNWYWx1ZShpKSk7CisKKyAgICAgICAgLy8gRklYTUU6IEFkZCBhcmd1bWVudCBuYW1lcy4KKwor
ICAgICAgICBtZXNzYWdlc09iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIG1lc3NhZ2VOYW1lKSwgZGljdGlvbmFyeSk7CisgICAgfQorCisgICAgcmV0
dXJuIHRvUmVmKHZtLCBtZXNzYWdlc09iamVjdCk7Cit9CisKK1JlZjxXZWJQYWdlSVBDSW50ZXJm
YWNlPiBXZWJQYWdlSVBDSW50ZXJmYWNlOjpjcmVhdGUoV2ViUGFnZSYgd2ViUGFnZSwgdWludDY0
X3QgZGVzdGluYXRpb25JRCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQYWdlSVBD
SW50ZXJmYWNlKHdlYlBhZ2UsIGRlc3RpbmF0aW9uSUQpKTsKK30KKworV2ViUGFnZUlQQ0ludGVy
ZmFjZTo6V2ViUGFnZUlQQ0ludGVyZmFjZShXZWJQYWdlJiB3ZWJQYWdlLCB1aW50NjRfdCBkZXN0
aW5hdGlvbklEKQorICAgIDogbV93ZWJQYWdlKG1ha2VXZWFrUHRyKHdlYlBhZ2UpKQorICAgICwg
bV93ZWJQYWdlRGVzdGluYXRpb25JRChkZXN0aW5hdGlvbklEKQoreworfQorCitXZWJQYWdlSVBD
SW50ZXJmYWNlOjp+V2ViUGFnZUlQQ0ludGVyZmFjZSgpID0gZGVmYXVsdDsKKwordm9pZCBXZWJQ
YWdlSVBDSW50ZXJmYWNlOjpkaWRDbGVhcldpbmRvd09iamVjdEluTWFpbldvcmxkKFdlYkNvcmU6
OkZyYW1lJiBmcmFtZSwgV2ViQ29yZTo6RE9NV3JhcHBlcldvcmxkJiB3b3JsZCkKK3sKKyAgICBh
dXRvIHdlYlBhZ2UgPSBtYWtlUmVmUHRyKG1fd2ViUGFnZS5nZXQoKSk7CisgICAgQVNTRVJUKHdl
YlBhZ2UpOworCisgICAgYXV0byYgdm0gPSBXZWJDb3JlOjpjb21tb25WTSgpOworICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBmcmFtZS5zY3JpcHQoKS5nbG9iYWxP
YmplY3Qod29ybGQpOworCisgICAgYXV0byBzZW5kZXIgPSBKU1VJUHJvY2Vzczo6Y3JlYXRlKCp0
aGlzLCBmcmFtZSk7CisgICAgSlNPYmplY3RSZWYgd3JhcHBlck9iamVjdCA9IEpTT2JqZWN0TWFr
ZSh0b0dsb2JhbFJlZihnbG9iYWxPYmplY3QpLCBKU1VJUHJvY2Vzczo6d3JhcHBlckNsYXNzKCks
IHNlbmRlci5wdHIoKSk7CisgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIklQQyIpLCB0b0pTKGdsb2JhbE9iamVjdCwgd3JhcHBl
ck9iamVjdCkpOworCisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlSVBDSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlSVBDSW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi42YjZkYWIzYTQxYmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSVBDSW50ZXJmYWNlLmgKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCisvLyBGSVhNRTogQWRkIGlmIEVOQUJMRSh+KQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTVdyYXBwZXJXb3JsZDsKK2NsYXNzIEZy
YW1lOworCit9OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgSlNJUEM7CitjbGFzcyBX
ZWJQYWdlOworY2xhc3MgSlNVSVByb2Nlc3M7CisKK2NsYXNzIFdlYlBhZ2VJUENJbnRlcmZhY2Ug
OiBwdWJsaWMgUmVmQ291bnRlZDxXZWJQYWdlSVBDSW50ZXJmYWNlPiB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxXZWJQYWdlSVBDSW50ZXJmYWNlPiBjcmVhdGUoV2ViUGFnZSYsIHVpbnQ2NF90
IGRlc3RpbmF0aW9uSUQpOworCisgICAgfldlYlBhZ2VJUENJbnRlcmZhY2UoKTsKKworICAgIHZv
aWQgZGlkQ2xlYXJXaW5kb3dPYmplY3RJbk1haW5Xb3JsZChXZWJDb3JlOjpGcmFtZSYsIFdlYkNv
cmU6OkRPTVdyYXBwZXJXb3JsZCYpOworCitwcml2YXRlOgorICAgIFdlYlBhZ2VJUENJbnRlcmZh
Y2UoV2ViUGFnZSYsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQpOworCisgICAgV2Vha1B0cjxXZWJQ
YWdlPiBtX3dlYlBhZ2U7CisgICAgdWludDY0X3QgbV93ZWJQYWdlRGVzdGluYXRpb25JRDsKKwor
ICAgIGZyaWVuZCBjbGFzcyBKU1VJUHJvY2VzczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410825</attachid>
            <date>2020-10-08 03:06:31 -0700</date>
            <delta_ts>2020-10-08 03:56:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217423-20201008030631.patch</filename>
            <type>text/plain</type>
            <size>52499</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjY4MTY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDIwLTEwLTA4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAg
IE1ha2UgaXQgcG9zc2libGUgdG8gc2VuZCBhbiBhcmJpdHJhcnkgSVBDIG1lc3NhZ2UgZnJvbSBK
YXZhU2NyaXB0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTc0MjMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY5OTY5MzUxPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgaGVscGVyIGZ1bmN0
aW9uIHRvIGdldCB1aW50NjRfdCBvdXQgb2YgQmlnSW50LgorCisgICAgICAgICogcnVudGltZS9K
U0JpZ0ludC5jcHA6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0b1VpbnQ2NEhlYXApOiBBZGRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50Lmg6CisgICAgICAgIChKU0M6OkpTQmlnSW50
Ojp0b1VpbnQ2NCk6IEFkZGVkLgorCiAyMDIwLTEwLTA3ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5r
aXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAgICBbSlNDXSBSZXZlcnQgU3RyaW5nLnByb3RvdHlw
ZS5pdGVtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3Bw
CShyZXZpc2lvbiAyNjgxNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jp
Z0ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNDksNiArMzA0OSwyOSBAQCBKU1ZhbHVlIEpT
QmlnSW50Ojphc1VpbnROKEpTR2xvYmFsT2JqZWN0CiB9CiAjZW5kaWYKIAorT3B0aW9uYWw8dWlu
dDY0X3Q+IEpTQmlnSW50Ojp0b1VpbnQ2NEhlYXAoSlNCaWdJbnQqIGJpZ0ludCkKK3sKKyAgICBh
dXRvIGxlbmd0aCA9IGJpZ0ludC0+bGVuZ3RoKCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAg
IHJldHVybiAwOworICAgIGlmIChiaWdJbnQtPnNpZ24oKSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90KSA9PSBzaXplb2Yo
RGlnaXQpIHx8IHNpemVvZih1aW50NjRfdCkgPT0gc2l6ZW9mKERpZ2l0KSAqIDIsICJEaWdpdCBt
dXN0IGJlIGVpdGhlciAzMi1iaXQgb3IgNjQtYml0Iik7CisgICAgaWYgKHNpemVvZih1aW50NjRf
dCkgPT0gc2l6ZW9mKERpZ2l0KSkgeworICAgICAgICBpZiAobGVuZ3RoID4gMSkKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBiaWdJbnQtPmRpZ2l0KDAp
OworICAgIH0KKworICAgIGlmIChsZW5ndGggPiAyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIHVpbnQ2NF90IHJlc3VsdCA9IGJpZ0ludC0+ZGlnaXQoMCk7CisgICAgaWYgKGxl
bmd0aCA9PSAxKQorICAgICAgICByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJpZ0lu
dC0+ZGlnaXQoMCkpIDw8IDMyOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIHVuc2lnbmVkIGNvbXB1dGVIYXNoKEpTQmlnSW50OjpEaWdpdCogZGlnaXRzLCB1
bnNpZ25lZCBsZW5ndGgsIGJvb2wgc2lnbikKIHsKICAgICBIYXNoZXIgaGFzaGVyOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCShyZXZpc2lvbiAyNjgxNjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNCaWdJbnQqIHRyeUNy
ZWF0ZUZyb20oVk0mLCBpbnQzMl90IHZhbHVlKTsKICAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0
ZUZyb20oSlNHbG9iYWxPYmplY3QqLCB1aW50MzJfdCB2YWx1ZSk7CiAgICAgc3RhdGljIEpTQmln
SW50KiBjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiwgaW50NjRfdCB2YWx1ZSk7Ci0gICAgc3Rh
dGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiwgdWludDY0X3QgdmFsdWUp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShKU0ds
b2JhbE9iamVjdCosIHVpbnQ2NF90IHZhbHVlKTsKICAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0
ZUZyb20oSlNHbG9iYWxPYmplY3QqLCBib29sIHZhbHVlKTsKICAgICBzdGF0aWMgSlNCaWdJbnQq
IGNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqLCBkb3VibGUgdmFsdWUpOwogCkBAIC00MjIsNiAr
NDIyLDIwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNWYWx1ZSBhc1VpbnROKEpTR2xvYmFsT2Jq
ZWN0KiwgdWludDY0X3QgbnVtYmVyT2ZCaXRzLCBpbnQzMl90IGJpZ0ludEFzSW50MzIpOwogI2Vu
ZGlmCiAKKyAgICBzdGF0aWMgT3B0aW9uYWw8dWludDY0X3Q+IHRvVWludDY0KEpTVmFsdWUgYmln
SW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJpZ0ludC5pc0JpZ0ludCgpKTsKKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgICAgIGlmIChiaWdJbnQuaXNCaWdJbnQzMigpKSB7CisgICAgICAgICAg
ICBhdXRvIHZhbHVlID0gYmlnSW50LmJpZ0ludDMyQXNJbnQzMigpOworICAgICAgICAgICAgaWYg
KHZhbHVlIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHRv
VWludDY0SGVhcChqc0Nhc3Q8SlNCaWdJbnQqPihiaWdJbnQpKTsKKyAgICB9CisKICAgICBEaWdp
dCBkaWdpdCh1bnNpZ25lZCk7CiAgICAgdm9pZCBzZXREaWdpdCh1bnNpZ25lZCwgRGlnaXQpOyAv
LyBVc2Ugb25seSB3aGVuIGluaXRpYWxpemluZy4KICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0Jp
Z0ludCogcmlnaHRUcmltKEpTR2xvYmFsT2JqZWN0Kik7CkBAIC01NzYsNiArNTkwLDggQEAgcHJp
dmF0ZToKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KICAgICBzdGF0aWMgSW1w
bFJlc3VsdCB0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKEpTR2xvYmFsT2JqZWN0KiwgaW50
MzJfdCwgQmlnSW50SW1wbCwgYm9vbCByZXN1bHRTaWduKTsKIAorICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBPcHRpb25hbDx1aW50NjRfdD4gdG9VaW50NjRIZWFwKEpTQmlnSW50Kik7CisK
ICAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBvZmZzZXRPZkRhdGEoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0JpZ0ludCwgbV9kYXRhKTsKSW5kZXg6IFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lv
biAyNjgxNjUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE5IEBACisyMDIwLTEwLTA4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIE1ha2UgaXQgcG9zc2libGUgdG8gc2VuZCBhbiBhcmJpdHJhcnkgSVBDIG1lc3Nh
Z2UgZnJvbSBKYXZhU2NyaXB0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTc0MjMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY5OTY5MzUxPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgY29t
cGlsZSB0aW1lIGZsYWcgKEVOQUJMRV9JUENfVEVTVElOR19BUEkpIGFuZCBhIHJ1bnRpbWUgZmxh
ZyAoSVBDVGVzdGluZ0FQSUVuYWJsZWQpCisgICAgICAgIGZvciB0aGUgSmF2YVNjcmlwdCBBUEkg
dG8gdGVzdCBJUEMuCisKKyAgICAgICAgKiBTY3JpcHRzL0dlbmVyYXRlUHJlZmVyZW5jZXMucmI6
CisgICAgICAgIChQcmVmZXJlbmNlOjpuYW1lTG93ZXIpOiBLZWVwIElQQyB1cHBlcmNhc2UuCisg
ICAgICAgICogU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0ludGVybmFsLnlhbWw6
IEFkZGVkIElQQ1Rlc3RpbmdBUElFbmFibGVkLgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybUVuYWJs
ZS5oOiBBZGRlZCBFTkFCTEVfSVBDX1RFU1RJTkdfQVBJLgorCiAyMDIwLTEwLTA3ICBLZWl0aCBS
b2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgcG9zdC1wcm9jZXNz
aW5nIHJ1bGVzIGZvciBoZWFkZXJzIHRvIG5vdCB1bm5lY2Vzc2FyaWx5IGNoYW5nZSB0aW1lc3Rh
bXBzCkluZGV4OiBTb3VyY2UvV1RGL1NjcmlwdHMvR2VuZXJhdGVQcmVmZXJlbmNlcy5yYgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL1NjcmlwdHMvR2VuZXJhdGVQcmVmZXJlbmNlcy5yYgkocmV2
aXNpb24gMjY4MTY1KQorKysgU291cmNlL1dURi9TY3JpcHRzL0dlbmVyYXRlUHJlZmVyZW5jZXMu
cmIJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCBjbGFzcyBQcmVmZXJlbmNlCiAg
ICAgICBAZ2V0dGVyCiAgICAgZWxzaWYgQG5hbWUuc3RhcnRfd2l0aD8oIlZQIikKICAgICAgIEBu
YW1lWzAuLjFdLmRvd25jYXNlICsgQG5hbWVbMi4uQG5hbWUubGVuZ3RoXQotICAgIGVsc2lmIEBu
YW1lLnN0YXJ0X3dpdGg/KCJDU1MiLCAiWFNTIiwgIkZUUCIsICJET00iLCAiRE5TIiwgIlBERiIs
ICJJQ0UiKQorICAgIGVsc2lmIEBuYW1lLnN0YXJ0X3dpdGg/KCJDU1MiLCAiRE9NIiwgIkROUyIs
ICJGVFAiLCAiSUNFIiwgIklQQyIsICJQREYiLCAiWFNTIikKICAgICAgIEBuYW1lWzAuLjJdLmRv
d25jYXNlICsgQG5hbWVbMy4uQG5hbWUubGVuZ3RoXQogICAgIGVsc2lmIEBuYW1lLnN0YXJ0X3dp
dGg/KCJIVFRQIikKICAgICAgIEBuYW1lWzAuLjNdLmRvd25jYXNlICsgQG5hbWVbNC4uQG5hbWUu
bGVuZ3RoXQpJbmRleDogU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVu
Y2VzSW50ZXJuYWwueWFtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVy
ZW5jZXMvV2ViUHJlZmVyZW5jZXNJbnRlcm5hbC55YW1sCShyZXZpc2lvbiAyNjgxNjUpCisrKyBT
b3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNJbnRlcm5hbC55YW1s
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNiArMjc5LDE3IEBAIElDRUNhbmRpZGF0ZUZpbHRlcmlu
Z0VuYWJsZWQ6CiAgICAgV2ViS2l0OgogICAgICAgZGVmYXVsdDogdHJ1ZQogCitJUENUZXN0aW5n
QVBJRW5hYmxlZDoKKyAgdHlwZTogYm9vbAorICBodW1hblJlYWRhYmxlTmFtZTogIklQQyBUZXN0
aW5nIEFQSSIKKyAgaHVtYW5SZWFkYWJsZURlc2NyaXB0aW9uOiAiRW5hYmxlIElQQyBUZXN0aW5n
IEFQSSBmb3IgSmF2YVNjcmlwdCIKKyAgd2ViY29yZUJpbmRpbmc6IG5vbmUKKyAgY29uZGl0aW9u
OiBFTkFCTEUoSVBDX1RFU1RJTkdfQVBJKQorICBleHBvc2VkOiBbIFdlYktpdCBdCisgIGRlZmF1
bHRWYWx1ZToKKyAgICBXZWJLaXQ6CisgICAgICBkZWZhdWx0OiBmYWxzZQorCiBJbnB1dFR5cGVD
b2xvckVuYWJsZWQ6CiAgIHR5cGU6IGJvb2wKICAgaHVtYW5SZWFkYWJsZU5hbWU6ICJDb2xvciBJ
bnB1dHMiCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgJKHJldmlzaW9uIDI2ODE2NSkKKysr
IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw2
ICszMTUsMTMgQEAKICNkZWZpbmUgRU5BQkxFX0lOUFVUX1RZUEVfV0VFSyAwCiAjZW5kaWYKIAor
I2lmICFkZWZpbmVkKEVOQUJMRV9JUENfVEVTVElOR19BUEkpCisvKiBFbmFibGUgSVBDIHRlc3Rp
bmcgb24gYWxsIEFTQU4gYnVpbGRzIGFuZCBkZWJ1ZyBidWlsZHMuICovCisjaWYgQVNBTl9FTkFC
TEVEIHx8ICFkZWZpbmVkKE5ERUJVRykKKyNkZWZpbmUgRU5BQkxFX0lQQ19URVNUSU5HX0FQSSAx
CisjZW5kaWYKKyNlbmRpZgorCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfREFURSkgfHwgRU5BQkxF
KElOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkgfHwgRU5BQkxFKElOUFVUX1RZUEVfTU9OVEgpIHx8
IEVOQUJMRShJTlBVVF9UWVBFX1RJTUUpIHx8IEVOQUJMRShJTlBVVF9UWVBFX1dFRUspCiAjaWYg
IWRlZmluZWQoRU5BQkxFX0RBVEVfQU5EX1RJTUVfSU5QVVRfVFlQRVMpCiAjZGVmaW5lIEVOQUJM
RV9EQVRFX0FORF9USU1FX0lOUFVUX1RZUEVTIDEKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjgx
NjUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDc4IEBACisyMDIwLTEwLTA4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisg
ICAgICAgIE1ha2UgaXQgcG9zc2libGUgdG8gc2VuZCBhbiBhcmJpdHJhcnkgSVBDIG1lc3NhZ2Ug
ZnJvbSBKYXZhU2NyaXB0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTc0MjMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY5OTY5MzUxPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50
cm9kdWNlcyB0aGUgSmF2YVNjcmlwdCBBUEkgKHdpbmRvdy5JUEMpIHRvIHNlbmQgSVBDIG91dCBv
ZiBXZWJDb250ZW50IHByb2Nlc3MuCisgICAgICAgIFRoZSBmZWF0dXJlIGlzIGNvbXBpbGVkIGlu
IHVuZGVyIEFTQU4gYW5kIERlYnVnIGJ1aWxkcyBhbmQgY2FuIGJlIGVuYWJsZWQgYXQgcnVudGlt
ZS4KKworICAgICAgICB3aW5kb3cuSVBDIGhhcyB0d28gbWV0aG9kczogc2VuZE1lc3NhZ2UgYW5k
IHNlbmRTeW5jTWVzc2FnZSB3aGljaCBzZW5kcyBhbiBhc3luYyBhbmQgc3luYyBJUEMgcmVzcGVj
dGl2ZWx5LgorICAgICAgICBJdCB0YWtlcyB0aGUgZGVzdGluYXRpb24gcHJvY2VzcyBuYW1lIChV
SSwgR1BVLCBvciBOZXR3b3JraW5nKSwgdGhlIGRlc3RpbmF0b2luIElEIChlLmcuIFdlYlBhZ2VQ
cm94eSBJRCksCisgICAgICAgIG1lc3NhZ2UgSUQsIHRpbWVvdXQgZm9yIHNlbmRTeW5jTWVzc2Fn
ZSwgYW5kIG9wdGlvbmFsbHkgSVBDIG1lc3NhZ2UgYXJndW1lbnRzLiBUaGUgbWVzc2FnZSBhcmd1
bWVudHMgY2FuIGJlCisgICAgICAgIHBhc3NlZCBpbiBhcyBhIFR5cGVkQXJyYXkgb3IgQXJyYXlC
dWZmZXIsIG9yIGEgSmF2YVNjcmlwdCBhcnJheSB0aGF0IHJlY3Vyc2l2ZWx5IGRlc2NyaWJlcyBl
bmNvZGVkIG9iamVjdHMuCisKKyAgICAgICAgRWFjaCBvYmplY3QgY2FuIGJlIGVpdGhlciBhIFR5
cGVkQXJyYXkgb3IgQXJyYXlCdWZmZXIsIHdoaWNoIHdpbGwgYmUgdHJlYXRlZCBhcyBlbmNvZGVk
IG1lc3NhZ2UsIGFuIGFycmF5CisgICAgICAgIHdoaWNoIHdpbGwgYmUgZW5jb2RlZCBhcyBhIFZl
Y3RvciB3aXRoIGVhY2ggaXRlbSB3aXRoaW4gdGhlIGFycmF5IGVuY29kZWQgcmVjdXJzaXZlbHks
IG9yIGEgZGljdGlvbmFyeSB3aGljaAorICAgICAgICBkZXNjcmliZXMgYSBzcGVjaWZpYyB0eXBl
LgorCisgICAgICAgIFdoZW4gYSBzcGVjaWZpYyB0eXBlIGlzIGRlc2NyaWJlZCB2aWEgYSBkaWN0
aW9uYXJ5LCAidmFsdWUiIGlzIGVuY29lZCBiYXNlZCBvbiAidHlwZSIgYXMgZm9sbG93czoKKyAg
ICAgICAgIC0gV2hlbiAidHlwZSIgaXMgIlN0cmluZyIsICJ2YWx1ZSIgaXMgZW5jb2RlZCBhcyBh
IFdURjo6U3RyaW5nLCB0cmVhdGluZyBudWxsIG9yIHVuZGVmaW5lZCBhcyBhIG51bGwgc3RyaW5n
LgorICAgICAgICAgLSBXaGVuICJ0eXBlIiBpcyAiYm9vbCIsICJpbnQ4X3QiLCAiaW50MTZfdCIs
ICJpbnQzMl90IiwgImludDY0X3QiLCAidWludDhfdCIsICJ1aW50MTZfdCIsICJ1aW50MzJfdCIs
CisgICAgICAgICAgIG9yICJ1aW50NjRfdCIsICJ2YWx1ZSIgKHdoaWNoIGNhbiBiZSBCaWdJbnQg
b3IgYSBudW1iZXIpIGlzIGVuY29kZWQgYXMgdGhlIHJlc3BlY3RpdmUgQysrIHR5cGUuCisgICAg
ICAgICAtIFdoZW4gInR5cGUiIGlzICJSR0JBIiwgInZhbHVlIiBpcyB1c2VkIGFzIFBhY2tlZENv
bG9yOjpSR0JBIHRvIGNvbnN0cnVjdCBXZWJDb3JlOjpDb2xvciB0byBiZSBlbmNvZGVkLgorICAg
ICAgICAgLSBXaGVuICJ0eXBlIiBpcyAiSW50UmVjdCIgb3IgIkZsb2F0UmVjdCIsICJ4IiwgInki
LCAid2lkdGgiLCBhbmQgImhlaWdodCIgYXJlIHRyZWF0ZWQgYXMgcmVzcGVjdGl2ZSB2YWx1ZXMK
KyAgICAgICAgICAgb2YgSW50UmVjdCBvciBGbG9hdFJlY3QgQysrIG9iamVjdHMsIGFuZCB0aGUg
Y29uc3RydWN0ZWQgKlJlY3QgaXMgZW5jb2RlZC4gCisgICAgICAgICAtIFdoZW4gInR5cGUiIGlz
ICJGcmFtZUluZm9EYXRhIiwgdGhlIGNvbnRleHQgb2JqZWN0J3MgV2ViRnJhbWUncyBGcmFtZUlu
Zm9EYXRhIGlzIGVuY29kZWQuCisKKyAgICAgICAgVGhlIGxpc3Qgb2YgSVBDIG1lc3NhZ2VzIGFy
ZSBleHBvc2VkIG9uIHdpbmRvdy5JUEMubWVzc2FnZXMsIGFuZCBWaXNpdGVkTGlua1N0b3JlIElE
LCBXZWJQYWdlUHJveHkgSUQsCisgICAgICAgIGFuZCBmcmFtZSBpZGVudGlmaWVycyBhcmUgYWxz
byBleHBvc2VkIGFzIHN0YXRpYyB2YXJpYWJsZXMgb24gd2luZG93LklQQy4KKworICAgICAgICAq
IFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hE
aWRDbGVhcldpbmRvd09iamVjdEluV29ybGQpOiBJbmplY3QgdGhlIEFQSSBpZiBlbmFibGVkLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjpjcmVhdGUpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OndlYkZyYW1lKTogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjpKU0lQQyk6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6d3JhcHBlckNsYXNzKTogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjp1bndyYXApOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OnRvV3JhcHBlZCk6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6aW5pdGlhbGl6ZSk6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6ZmluYWxpemUpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OnN0YXRpY0Z1bmN0
aW9ucyk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6c3Rh
dGljVmFsdWVzKTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmNvbnZl
cnRUb1VpbnQ2NCk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpwcm9j
ZXNzVGFyZ2V0RnJvbUFyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3Rp
bmdBUEk6OmRlc3RpbmF0aW9uSURGcm9tQXJndW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6SVBDVGVzdGluZ0FQSTo6bWVzc2FnZUlERnJvbUFyZ3VtZW50KTogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmVuY29kZVR5cGVkQXJyYXkpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6Y3JlYXRlVHlwZUVycm9yKTogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmVuY29kZVJlY3RUeXBlKTogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmVuY29kZUludGVncmFsVHlwZSk6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpWZWN0b3JFbmNvZGVIZWxwZXI6OmVuY29k
ZSBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjplbmNvZGVB
cmd1bWVudCk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6
c2VuZE1lc3NhZ2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJ
UEM6OnNlbmRTeW5jTWVzc2FnZSk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5n
QVBJOjpKU0lQQzo6dmlzaXRlZExpbmtTdG9yZUlEKTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjp3ZWJQYWdlUHJveHlJRCk6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6ZnJhbWVJZGVudGlmaWVyKTogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjpyZXRyaWV2ZUlEKTogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjptZXNzYWdlcyk6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjppbmplY3QpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6bV9saW1pdHNOYXZpZ2F0aW9uc1RvQXBwQm91
bmREb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmlwY1Rlc3RpbmdBUElFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6d2ViUGFnZVByb3h5SUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjp2aXNpdGVkTGlua1RhYmxlSUQgY29uc3QpOgorCiAyMDIwLTEwLTA3ICBLZWl0aCBSb2xs
aW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgcG9zdC1wcm9jZXNzaW5n
IHJ1bGVzIGZvciBoZWFkZXJzIHRvIG5vdCB1bm5lY2Vzc2FyaWx5IGNoYW5nZSB0aW1lc3RhbXBz
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvU291cmNlcy50eHQJKHJldmlzaW9uIDI2ODE2NSkKKysrIFNvdXJjZS9XZWJLaXQvU291
cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTY1Miw2ICs2NTIsNyBAQCBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoCiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWEuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAogV2ViUHJvY2Vz
cy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAorV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3Rp
bmdBUEkuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZUJhbm5lci5jcHAKIFdlYlByb2Nlc3Mv
V2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY4MTY1KQorKysgU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNDUxMyw2ICs0NTEzLDggQEAKIAkJOUIwMkUwQ0QyMzVFQjk2NzAwNDA0NEIyIC8qIF9X
S1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tUZXh0TWFuaXB1bGF0
aW9uVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwMkUwQ0UyMzVFQkIx
NDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOUIwMkUwRDAyMzVFQkNDQTAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25J
dGVtLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0ubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDMzRTcxMjUyNTgwRjMwMDUwMTA3MSAv
KiBJUENUZXN0aW5nQVBJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElQQ1Rlc3RpbmdBUEkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwMzNFNzIyNTI1ODBGMzAwNTAxMDcxIC8qIElQQ1Rl
c3RpbmdBUEkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSVBDVGVzdGluZ0FQSS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMTIyOUNCMjNGRjI1RjIwMDhDQTc1MSAvKiBSZW1v
dGVBdWRpb0Rlc3RpbmF0aW9uTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVBdWRpb0Rl
c3RpbmF0aW9uTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjEyMjlD
QzIzRkYyNUYyMDA4Q0E3NTEgLyogUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjEyMjlDRjIzRkYyODE0MDA4Q0E3NTEgLyogUmVt
b3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlQXVkaW9E
ZXN0aW5hdGlvbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC04OTIzLDYgKzg5MjUsOCBAQAogCQkJCTFBQTU3NUZEMTQ5NkI2RjMwMEE0RUUwNiAvKiBF
dmVudERpc3BhdGNoZXIubWVzc2FnZXMuaW4gKi8sCiAJCQkJMUE5MEMxRjMxMjY0RkQ3MTAwM0U0
NEQ0IC8qIEZpbmRDb250cm9sbGVyLmNwcCAqLywKIAkJCQkxQTkwQzFGMjEyNjRGRDcxMDAzRTQ0
RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLywKKwkJCQk5QjAzM0U3MjI1MjU4MEYzMDA1MDEwNzEg
LyogSVBDVGVzdGluZ0FQSS5jcHAgKi8sCisJCQkJOUIwMzNFNzEyNTI1ODBGMzAwNTAxMDcxIC8q
IElQQ1Rlc3RpbmdBUEkuaCAqLywKIAkJCQk3QzM4NzQzMzE3MkY1NjE1MDAxQkQ4OEEgLyogUGFn
ZUJhbm5lci5jcHAgKi8sCiAJCQkJN0NGNDdGRjkxNzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VCYW5u
ZXIuaCAqLywKIAkJCQkyRDgxOUI5OTE4NjI3NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9t
ZXRyeUNvbGxlY3Rvci5jcHAgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5j
cHAJKHJldmlzaW9uIDI2ODE2NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJGaW5kQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZvcm1EYXRh
UmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiRnJhbWVJbmZvRGF0YS5oIgorI2luY2x1ZGUgIklQQ1Rl
c3RpbmdBUEkuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgogI2luY2x1ZGUgIkluamVj
dGVkQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVO
YXZpZ2F0aW9uQWN0aW9uLmgiCkBAIC0xNzQzLDYgKzE3NDQsMTEgQEAgdm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDbAogICAgIGlmICghd2ViUGFnZSkKICAgICAgICAgcmV0
dXJuOwogCisjaWYgRU5BQkxFKElQQ19URVNUSU5HX0FQSSkKKyAgICBpZiAod29ybGQuaXNOb3Jt
YWwoKSAmJiB3ZWJQYWdlLT5pcGNUZXN0aW5nQVBJRW5hYmxlZCgpKQorICAgICAgICBJUENUZXN0
aW5nQVBJOjppbmplY3QoKndlYlBhZ2UsIG1fZnJhbWUuZ2V0KCksIHdvcmxkKTsKKyNlbmRpZgor
CiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQoKS5kaWRDbGVhcldpbmRv
d09iamVjdEZvckZyYW1lKCp3ZWJQYWdlLCBtX2ZyYW1lLCB3b3JsZCk7CiAKICAgICBXZWJBdXRv
bWF0aW9uU2Vzc2lvblByb3h5KiBhdXRvbWF0aW9uU2Vzc2lvblByb3h5ID0gV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuYXV0b21hdGlvblNlc3Npb25Qcm94eSgpOwpJbmRleDogU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSVBDVGVzdGluZ0FQSS5oIgorCisjaWYgRU5BQkxFKElQ
Q19URVNUSU5HX0FQSSkKKworI2luY2x1ZGUgIkVuY29kZXIuaCIKKyNpbmNsdWRlICJGcmFtZUlu
Zm9EYXRhLmgiCisjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJN
ZXNzYWdlTmFtZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJGcmFtZS5oIgor
I2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0J1aWx0
aW5OYW1lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmlnSW50Lmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNDbGFzc1JlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTTG9jay5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0Lmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHQuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcGFxdWVKU1N0cmluZy5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRE9NV3JhcHBlcldvcmxkLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2NyaXB0Q29udHJvbGxlci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworbmFtZXNwYWNlIElQQ1Rlc3RpbmdBUEkgeworCitjbGFzcyBKU0lQ
QyA6IHB1YmxpYyBSZWZDb3VudGVkPEpTSVBDPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxK
U0lQQz4gY3JlYXRlKFdlYlBhZ2UmIHdlYlBhZ2UsIFdlYkZyYW1lJiB3ZWJGcmFtZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEpTSVBDKHdlYlBhZ2UsIHdlYkZyYW1lKSk7
CisgICAgfQorCisgICAgc3RhdGljIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCk7CisKKyAgICBX
ZWJGcmFtZSogd2ViRnJhbWUoKSB7IHJldHVybiBtX3dlYkZyYW1lLmdldCgpOyB9CisKK3ByaXZh
dGU6CisgICAgSlNJUEMoV2ViUGFnZSYgd2ViUGFnZSwgV2ViRnJhbWUmIHdlYkZyYW1lKQorICAg
ICAgICA6IG1fd2ViUGFnZShtYWtlV2Vha1B0cih3ZWJQYWdlKSkKKyAgICAgICAgLCBtX3dlYkZy
YW1lKG1ha2VXZWFrUHRyKHdlYkZyYW1lKSkKKyAgICB7IH0KKworICAgIHN0YXRpYyBKU0lQQyog
dW53cmFwKEpTT2JqZWN0UmVmKTsKKyAgICBzdGF0aWMgSlNJUEMqIHRvV3JhcHBlZChKU0NvbnRl
eHRSZWYsIEpTVmFsdWVSZWYpOworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoSlNDb250ZXh0
UmVmLCBKU09iamVjdFJlZik7CisgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNPYmplY3RSZWYp
OworICAgIHN0YXRpYyBjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMoKTsK
KyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNWYWx1ZSogc3RhdGljVmFsdWVzKCk7CisKKyAgICBz
dGF0aWMgSlNWYWx1ZVJlZiBzZW5kTWVzc2FnZShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICBzdGF0aWMgSlNW
YWx1ZVJlZiBzZW5kU3luY01lc3NhZ2UoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisKKyAgICBzdGF0aWMgSlNWYWx1
ZVJlZiB2aXNpdGVkTGlua1N0b3JlSUQoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNTdHJp
bmdSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgd2Vi
UGFnZVByb3h5SUQoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNTdHJpbmdSZWYsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgZnJhbWVJZGVudGlmaWVy
KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pOworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHJldHJpZXZlSUQoSlNDb250ZXh0UmVmLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIGNvbnN0IFdURjo6
RnVuY3Rpb248dWludDY0X3QoSlNJUEMmKT4mKTsKKworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIG1l
c3NhZ2VzKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pOworCisgICAgV2Vha1B0cjxXZWJQYWdlPiBtX3dlYlBhZ2U7CisgICAgV2Vh
a1B0cjxXZWJGcmFtZT4gbV93ZWJGcmFtZTsKK307CisKK0pTQ2xhc3NSZWYgSlNJUEM6OndyYXBw
ZXJDbGFzcygpCit7CisgICAgc3RhdGljIEpTQ2xhc3NSZWYganNDbGFzczsKKyAgICBpZiAoIWpz
Q2xhc3MpIHsKKyAgICAgICAgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IGtKU0NsYXNz
RGVmaW5pdGlvbkVtcHR5OworICAgICAgICBkZWZpbml0aW9uLmNsYXNzTmFtZSA9ICJVSVByb2Nl
c3MiOworICAgICAgICBkZWZpbml0aW9uLnBhcmVudENsYXNzID0gMDsKKyAgICAgICAgZGVmaW5p
dGlvbi5zdGF0aWNWYWx1ZXMgPSBzdGF0aWNWYWx1ZXMoKTsKKyAgICAgICAgZGVmaW5pdGlvbi5z
dGF0aWNGdW5jdGlvbnMgPSBzdGF0aWNGdW5jdGlvbnMoKTsKKyAgICAgICAgZGVmaW5pdGlvbi5p
bml0aWFsaXplID0gaW5pdGlhbGl6ZTsKKyAgICAgICAgZGVmaW5pdGlvbi5maW5hbGl6ZSA9IGZp
bmFsaXplOworICAgICAgICBqc0NsYXNzID0gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7Cisg
ICAgfQorICAgIHJldHVybiBqc0NsYXNzOworfQorCitpbmxpbmUgSlNJUEMqIEpTSVBDOjp1bndy
YXAoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0lQQyo+
KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKK30KKworSlNJUEMqIEpTSVBDOjp0b1dyYXBw
ZWQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgaWYgKCFj
b250ZXh0IHx8ICF2YWx1ZSB8fCAhSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjb250ZXh0LCB2YWx1
ZSwgd3JhcHBlckNsYXNzKCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
dW53cmFwKEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwgMCkpOworfQorCit2b2lkIEpT
SVBDOjppbml0aWFsaXplKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAg
IHVud3JhcChvYmplY3QpLT5yZWYoKTsKK30KKwordm9pZCBKU0lQQzo6ZmluYWxpemUoSlNPYmpl
Y3RSZWYgb2JqZWN0KQoreworICAgIHVud3JhcChvYmplY3QpLT5yZWYoKTsKK30KKworY29uc3Qg
SlNTdGF0aWNGdW5jdGlvbiogSlNJUEM6OnN0YXRpY0Z1bmN0aW9ucygpCit7CisgICAgc3RhdGlj
IGNvbnN0IEpTU3RhdGljRnVuY3Rpb24gZnVuY3Rpb25zW10gPSB7CisgICAgICAgIHsgInNlbmRN
ZXNzYWdlIiwgc2VuZE1lc3NhZ2UsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKKyAgICAgICAgeyAic2VuZFN5bmNNZXNzYWdl
Iiwgc2VuZFN5bmNNZXNzYWdlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgMCwgMCwgMCB9CisgICAgfTsK
KyAgICByZXR1cm4gZnVuY3Rpb25zOworfQorCitjb25zdCBKU1N0YXRpY1ZhbHVlKiBKU0lQQzo6
c3RhdGljVmFsdWVzKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNWYWx1ZSB2YWx1ZXNb
XSA9IHsKKyAgICAgICAgeyAidmlzaXRlZExpbmtTdG9yZUlEIiwgdmlzaXRlZExpbmtTdG9yZUlE
LCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgIndlYlBhZ2VQcm94eUlEIiwgd2ViUGFnZVByb3h5SUQs
IDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfSwKKyAgICAgICAgeyAiZnJhbWVJZGVudGlmaWVyIiwgZnJhbWVJZGVudGlmaWVy
LCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgIm1lc3NhZ2VzIiwgbWVzc2FnZXMsIDAsIGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwK
KyAgICAgICAgeyAwLCAwLCAwLCAwIH0KKyAgICB9OworICAgIHJldHVybiB2YWx1ZXM7Cit9CisK
K3N0YXRpYyBPcHRpb25hbDx1aW50NjRfdD4gY29udmVydFRvVWludDY0KEpTQzo6SlNWYWx1ZSBq
c1ZhbHVlKQoreworICAgIGlmIChqc1ZhbHVlLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgZG91Ymxl
IHZhbHVlID0ganNWYWx1ZS5hc051bWJlcigpOworICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHRy
dW5jKHZhbHVlKSAhPSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisgICAgaWYgKGpzVmFsdWUuaXNCaWdJbnQoKSkK
KyAgICAgICAgcmV0dXJuIEpTQzo6SlNCaWdJbnQ6OnRvVWludDY0KGpzVmFsdWUpOworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBw
cm9jZXNzVGFyZ2V0RnJvbUFyZ3VtZW50KEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZVJlZiB2YWx1ZVJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAg
YXV0byBuYW1lID0gdG9KUyhnbG9iYWxPYmplY3QsIHZhbHVlUmVmKS50b1dURlN0cmluZyhnbG9i
YWxPYmplY3QpOworICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBpZiAobmFtZSA9PSAiVUkiKQorICAgICAgICByZXR1cm4gV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKTsKKyNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCisgICAgaWYgKG5hbWUgPT0gIkdQVSIpCisgICAgICAgIHJldHVybiAmV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9u
KCk7CisjZW5kaWYKKyAgICBpZiAobmFtZSA9PSAiTmV0d29ya2luZyIpCisgICAgICAgIHJldHVy
biAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
KCkuY29ubmVjdGlvbigpOworCisgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgIlRhcmdldCBwcm9jZXNzIG11c3QgYmUgVUksIEdQVSwgb3Ig
TmV0d29ya2luZyJfcykpOworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgT3B0aW9u
YWw8dWludDY0X3Q+IGRlc3RpbmF0aW9uSURGcm9tQXJndW1lbnQoSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlUmVmIHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCit7CisgICAgYXV0byBqc1ZhbHVlID0gdG9KUyhnbG9iYWxPYmplY3QsIHZhbHVlUmVmKTsK
KyAgICBhdXRvIHJlc3VsdCA9IGNvbnZlcnRUb1VpbnQ2NChqc1ZhbHVlKTsKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKGds
b2JhbE9iamVjdCwgImRlc3RpbmF0aW9uSUQgbXVzdCBiZSBhbiBpbnRlZ2VyIl9zKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIE9wdGlvbmFsPHVpbnQ2NF90PiBtZXNzYWdlSURG
cm9tQXJndW1lbnQoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlUmVm
IHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgYXV0byBqc1ZhbHVlID0g
dG9KUyhnbG9iYWxPYmplY3QsIHZhbHVlUmVmKTsKKyAgICBhdXRvIHJlc3VsdCA9IGNvbnZlcnRU
b1VpbnQ2NChqc1ZhbHVlKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgKmV4Y2VwdGlvbiA9
IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgIm1lc3NhZ2VJRCBtdXN0
IGJlIGFuIGludGVnZXIiX3MpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgYm9v
bCBlbmNvZGVUeXBlZEFycmF5KElQQzo6RW5jb2RlciYgZW5jb2RlciwgSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgdmFsdWVSZWYsIEpTVHlwZWRBcnJheVR5cGUgdHlwZSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFTU0VSVCh0eXBlICE9IGtKU1R5cGVkQXJyYXlUeXBl
Tm9uZSk7CisKKyAgICBhdXRvIG9iamVjdFJlZiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2
YWx1ZVJlZiwgZXhjZXB0aW9uKTsKKyAgICBpZiAoIW9iamVjdFJlZikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgdm9pZCogYnVmZmVyOworICAgIGlmICh0eXBlID09IGtKU1R5cGVkQXJy
YXlUeXBlQXJyYXlCdWZmZXIpCisgICAgICAgIGJ1ZmZlciA9IEpTT2JqZWN0R2V0QXJyYXlCdWZm
ZXJCeXRlc1B0cihjb250ZXh0LCBvYmplY3RSZWYsIGV4Y2VwdGlvbik7CisgICAgZWxzZQorICAg
ICAgICBidWZmZXIgPSBKU09iamVjdEdldFR5cGVkQXJyYXlCeXRlc1B0cihjb250ZXh0LCBvYmpl
Y3RSZWYsIGV4Y2VwdGlvbik7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHNpemVfdCBidWZmZXJTaXplOworICAgIGlmICh0eXBlID09IGtKU1R5cGVkQXJy
YXlUeXBlQXJyYXlCdWZmZXIpCisgICAgICAgIGJ1ZmZlclNpemUgPSBKU09iamVjdEdldEFycmF5
QnVmZmVyQnl0ZUxlbmd0aChjb250ZXh0LCBvYmplY3RSZWYsIGV4Y2VwdGlvbik7CisgICAgZWxz
ZQorICAgICAgICBidWZmZXJTaXplID0gSlNPYmplY3RHZXRUeXBlZEFycmF5Qnl0ZUxlbmd0aChj
b250ZXh0LCBvYmplY3RSZWYsIGV4Y2VwdGlvbik7CisgICAgaWYgKCFidWZmZXJTaXplKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXIpLCBidWZmZXJTaXplLCAxKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgY3JlYXRlVHlwZUVycm9y
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9jayh0b0pTKGNvbnRleHQpLT52bSgpKTsKKyAgICByZXR1cm4gdG9S
ZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0KSwgbWVzc2FnZSkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBSZWN0VHlwZT4gYm9vbCBlbmNvZGVSZWN0VHlwZShJUEM6OkVuY29k
ZXImIGVuY29kZXIsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU09i
amVjdCoganNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBqc1ggPSBqc09iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAieCJfcykpOworICAgIGlmICghanNYLmlzTnVtYmVyKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIGpzWSA9IGpzT2JqZWN0LT5nZXQoZ2xvYmFsT2Jq
ZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ5Il9zKSk7CisgICAgaWYgKCFq
c1kuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8ganNXaWR0aCA9
IGpzT2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJ3aWR0aCJfcykpOworICAgIGlmICghanNXaWR0aC5pc051bWJlcigpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgYXV0byBqc0hlaWdodCA9IGpzT2JqZWN0LT5nZXQoZ2xvYmFsT2Jq
ZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJoZWlnaHQiX3MpKTsKKyAgICBp
ZiAoIWpzSGVpZ2h0LmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBlbmNv
ZGVyIDw8IFJlY3RUeXBlKGpzWC5hc051bWJlcigpLCBqc1kuYXNOdW1iZXIoKSwganNXaWR0aC5h
c051bWJlcigpLCBqc0hlaWdodC5hc051bWJlcigpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgSW50ZWdyYWxUeXBlPiBib29sIGVuY29kZUludGVncmFsVHlwZShJ
UEM6OkVuY29kZXImIGVuY29kZXIsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKQoreworICAgIGlmIChq
c1ZhbHVlLmlzQmlnSW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbmVnYXRpdmUg
QmlnSW50LgorICAgICAgICBhdXRvIHJlc3VsdCA9IEpTQzo6SlNCaWdJbnQ6OnRvVWludDY0KGpz
VmFsdWUpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxJbnRlZ3JhbFR5cGU+KCpyZXN1bHQpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFqc1ZhbHVlLmlzTnVtYmVyKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb3VibGUgdmFsdWUgPSBqc1ZhbHVlLmFzTnVt
YmVyKCk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxJbnRlZ3JhbFR5cGU+KHZhbHVlKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworZW51bSBjbGFzcyBBcnJheU1vZGUgeyBUdXBsZSwgVmVj
dG9yIH07CitzdGF0aWMgYm9vbCBlbmNvZGVBcmd1bWVudChJUEM6OkVuY29kZXImLCBKU0lQQyYs
IEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBBcnJheU1v
ZGUgPSBBcnJheU1vZGU6OlR1cGxlKTsKKworc3RydWN0IFZlY3RvckVuY29kZUhlbHBlciB7Cisg
ICAgUmVmPEpTSVBDPiBqc0lQQzsKKyAgICBKU0NvbnRleHRSZWYgY29udGV4dDsKKyAgICBKU1Zh
bHVlUmVmIHZhbHVlUmVmOworICAgIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbjsKKyAgICBib29sJiBz
dWNjZXNzOworCisgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBzdWNjZXNzID0gZW5jb2RlQXJndW1lbnQoZW5jb2RlciwganNJUEMuZ2V0KCksIGNvbnRleHQs
IHZhbHVlUmVmLCBleGNlcHRpb24sIEFycmF5TW9kZTo6VmVjdG9yKTsKKyAgICB9Cit9OworCitz
dGF0aWMgYm9vbCBlbmNvZGVBcmd1bWVudChJUEM6OkVuY29kZXImIGVuY29kZXIsIEpTSVBDJiBq
c0lQQywgSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWVSZWYsIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbiwgQXJyYXlNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBhdXRvIG9iamVjdFJl
ZiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZVJlZiwgZXhjZXB0aW9uKTsKKyAgICBp
ZiAoIW9iamVjdFJlZikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGF1dG8gdHlw
ZSA9IEpTVmFsdWVHZXRUeXBlZEFycmF5VHlwZShjb250ZXh0LCBvYmplY3RSZWYsIGV4Y2VwdGlv
bik7IHR5cGUgIT0ga0pTVHlwZWRBcnJheVR5cGVOb25lKQorICAgICAgICByZXR1cm4gZW5jb2Rl
VHlwZWRBcnJheShlbmNvZGVyLCBjb250ZXh0LCBvYmplY3RSZWYsIHR5cGUsIGV4Y2VwdGlvbik7
CisKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOworICAgIGF1dG8mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7
CisgICAgYXV0byoganNPYmplY3QgPSB0b0pTKGdsb2JhbE9iamVjdCwgb2JqZWN0UmVmKS5nZXRP
YmplY3QoKTsKKyAgICBBU1NFUlQoanNPYmplY3QpOworICAgIGlmIChKU1ZhbHVlSXNBcnJheShj
b250ZXh0LCBvYmplY3RSZWYpKSB7CisgICAgICAgIGF1dG8ganNMZW5ndGggPSBqc09iamVjdC0+
Z2V0KGdsb2JhbE9iamVjdCwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibGVuZ3Ro
Il9zKSk7CisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKCFqc0xlbmd0aC5pc051bWJlcigpKSB7CisgICAgICAgICAg
ICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJBcnJheSBsZW5ndGggaXMg
bm90IGEgbnVtYmVyIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBhdXRvIGxlbmd0aCA9IGpzTGVuZ3RoLmFzTnVtYmVyKCk7CisKKyAgICAgICAgVmVj
dG9yPFZlY3RvckVuY29kZUhlbHBlcj4gdmVjdG9yOworICAgICAgICBib29sIHN1Y2Nlc3MgPSB0
cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIGF1dG8gaXRlbVJlZiA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRl
eHQsIG9iamVjdFJlZiwgaSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIGlmICghaXRlbVJlZikK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB2ZWN0b3IuYXBwZW5k
KFZlY3RvckVuY29kZUhlbHBlciB7IGpzSVBDLCBjb250ZXh0LCBpdGVtUmVmLCBleGNlcHRpb24s
IHN1Y2Nlc3MgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFycmF5TW9kZSA9PSBBcnJheU1v
ZGU6OlR1cGxlKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiB2ZWN0b3IpCisgICAg
ICAgICAgICAgICAgaXRlbS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgZW5jb2RlciA8PCB2ZWN0b3I7CisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgIH0K
KworICAgIGF1dG8ganNUeXBlID0ganNPYmplY3QtPmdldChnbG9iYWxPYmplY3QsIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInR5cGUiX3MpKTsKKyAgICBpZiAoc2NvcGUuZXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gdHlwZSA9IGpzVHlwZS50
b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOworICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHR5cGUgPT0gIkludFJlY3QiKSB7CisgICAg
ICAgIGlmICghZW5jb2RlUmVjdFR5cGU8V2ViQ29yZTo6SW50UmVjdD4oZW5jb2RlciwgZ2xvYmFs
T2JqZWN0LCBqc09iamVjdCkpIHsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBl
RXJyb3IoY29udGV4dCwgIkZhaWxlZCB0byBjb252ZXJ0IEludFJlY3QiX3MpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGlmICh0eXBlID09ICJGbG9hdFJlY3QiKSB7CisgICAgICAgIGlmICghZW5jb2RlUmVj
dFR5cGU8V2ViQ29yZTo6RmxvYXRSZWN0PihlbmNvZGVyLCBnbG9iYWxPYmplY3QsIGpzT2JqZWN0
KSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAi
RmFpbGVkIHRvIGNvbnZlcnQgRmxvYXRSZWN0Il9zKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodHlw
ZSA9PSAiRnJhbWVJbmZvRGF0YSIpIHsKKyAgICAgICAgYXV0byB3ZWJGcmFtZSA9IG1ha2VSZWZQ
dHIoanNJUEMud2ViRnJhbWUoKSk7CisgICAgICAgIGlmICghd2ViRnJhbWUpIHsKKyAgICAgICAg
ICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIkZhaWxlZCB0byBnZXQg
dGhlIGZyYW1lIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBlbmNvZGVyIDw8IHdlYkZyYW1lLT5pbmZvKCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGF1dG8ganNWYWx1ZSA9IGpzT2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ2YWx1ZSJfcykpOworICAgIGlmIChzY29w
ZS5leGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHR5cGUgPT0g
IlN0cmluZyIpIHsKKyAgICAgICAgaWYgKGpzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewor
ICAgICAgICAgICAgZW5jb2RlciA8PCBTdHJpbmcgeyB9OworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgYXV0byBzdHJpbmcgPSBqc1ZhbHVlLnRvV1RGU3RyaW5n
KGdsb2JhbE9iamVjdCk7CisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZW5jb2RlciA8PCBzdHJpbmc7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh0eXBlID09ICJSR0JBIikgeworICAgICAgICBp
ZiAoIWpzVmFsdWUuaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0
ZVR5cGVFcnJvcihjb250ZXh0LCAiUkdCQSB2YWx1ZSBzaG91bGQgYmUgYSBudW1iZXIiX3MpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHVpbnQzMl90IHJn
YmEgPSBqc1ZhbHVlLmFzTnVtYmVyKCk7CisgICAgICAgIGVuY29kZXIgPDwgV2ViQ29yZTo6Q29s
b3IgeyBXZWJDb3JlOjphc1NSR0JBKFdlYkNvcmU6OlBhY2tlZENvbG9yOjpSR0JBKHJnYmEpKSB9
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGludGVncmFsUmVzdWx0
OworICAgIGlmICh0eXBlID09ICJib29sIikKKyAgICAgICAgaW50ZWdyYWxSZXN1bHQgPSBlbmNv
ZGVJbnRlZ3JhbFR5cGU8Ym9vbD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgZWxzZSBpZiAodHlw
ZSA9PSAiaW50OF90IikKKyAgICAgICAgaW50ZWdyYWxSZXN1bHQgPSBlbmNvZGVJbnRlZ3JhbFR5
cGU8aW50OF90PihlbmNvZGVyLCBqc1ZhbHVlKTsKKyAgICBlbHNlIGlmICh0eXBlID09ICJpbnQx
Nl90IikKKyAgICAgICAgaW50ZWdyYWxSZXN1bHQgPSBlbmNvZGVJbnRlZ3JhbFR5cGU8aW50MTZf
dD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgZWxzZSBpZiAodHlwZSA9PSAiaW50MzJfdCIpCisg
ICAgICAgIGludGVncmFsUmVzdWx0ID0gZW5jb2RlSW50ZWdyYWxUeXBlPGludDMyX3Q+KGVuY29k
ZXIsIGpzVmFsdWUpOworICAgIGVsc2UgaWYgKHR5cGUgPT0gImludDY0X3QiKQorICAgICAgICBp
bnRlZ3JhbFJlc3VsdCA9IGVuY29kZUludGVncmFsVHlwZTxpbnQ2NF90PihlbmNvZGVyLCBqc1Zh
bHVlKTsKKyAgICBlbHNlIGlmICh0eXBlID09ICJ1aW50OF90IikKKyAgICAgICAgaW50ZWdyYWxS
ZXN1bHQgPSBlbmNvZGVJbnRlZ3JhbFR5cGU8dWludDhfdD4oZW5jb2RlciwganNWYWx1ZSk7Cisg
ICAgZWxzZSBpZiAodHlwZSA9PSAidWludDE2X3QiKQorICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9
IGVuY29kZUludGVncmFsVHlwZTx1aW50MTZfdD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgZWxz
ZSBpZiAodHlwZSA9PSAidWludDMyX3QiKQorICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVuY29k
ZUludGVncmFsVHlwZTx1aW50MzJfdD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgZWxzZSBpZiAo
dHlwZSA9PSAidWludDY0X3QiKQorICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVuY29kZUludGVn
cmFsVHlwZTx1aW50NjRfdD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgZWxzZSB7CisgICAgICAg
ICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIkJhZCB0eXBlIG5hbWUiX3Mp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghaW50ZWdyYWxSZXN1bHQp
IHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiRmFpbGVk
IHRvIGVuY29kZSBhbiBpbnRlZ2VyIl9zKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQzo6c2VuZE1lc3NhZ2UoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4
dCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxPYmplY3QtPnZtKCkpOworICAg
IGF1dG8ganNJUEMgPSBtYWtlUmVmUHRyKHRvV3JhcHBlZChjb250ZXh0LCB0aGlzT2JqZWN0KSk7
CisgICAgaWYgKCFqc0lQQykgeworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVh
dGVUeXBlRXJyb3IodG9KUyhjb250ZXh0KSwgIldyb25nIHR5cGUiX3MpKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIGlmIChhcmd1
bWVudENvdW50IDwgMykgeworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVU
eXBlRXJyb3IodG9KUyhjb250ZXh0KSwgIk11c3Qgc3BlY2lmeSB0aGUgdGFyZ2V0IHByb2Nlc3Ms
IGRlc2luYXRpb24gSUQsIGFuZCBtZXNzYWdlIElEIGFzIHRoZSBmaXJzdCB0aHJlZSBhcmd1bWVu
dHMiX3MpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwor
ICAgIH0KKworICAgIGF1dG8gY29ubmVjdGlvbiA9IHByb2Nlc3NUYXJnZXRGcm9tQXJndW1lbnQo
Z2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgaWYgKCFjb25uZWN0
aW9uKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAg
ICBhdXRvIGRlc3RpbmF0aW9uSUQgPSBkZXN0aW5hdGlvbklERnJvbUFyZ3VtZW50KGdsb2JhbE9i
amVjdCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pOworICAgIGlmICghZGVzdGluYXRpb25JRCkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgYXV0
byBtZXNzYWdlSUQgPSBtZXNzYWdlSURGcm9tQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCBhcmd1bWVu
dHNbMl0sIGV4Y2VwdGlvbik7CisgICAgaWYgKCFtZXNzYWdlSUQpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIGF1dG8gZW5jb2RlciA9IG1ha2VV
bmlxdWU8SVBDOjpFbmNvZGVyPihzdGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPihzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oKm1lc3NhZ2VJRCkpLCAqZGVzdGluYXRpb25JRCk7CisKKyAgICBpZiAo
YXJndW1lbnRDb3VudCA+IDMpIHsKKyAgICAgICAgaWYgKCFlbmNvZGVBcmd1bWVudCgqZW5jb2Rl
ciwgKmpzSVBDLCBjb250ZXh0LCBhcmd1bWVudHNbM10sIGV4Y2VwdGlvbikpCisgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorCisgICAgLy8g
RklYTUU6IEFkZCB0aGUgc3VwcG9ydCBmb3Igc3BlY2lmeWluZyBJUEMgb3B0aW9ucy4KKworICAg
IGNvbm5lY3Rpb24tPnNlbmRNZXNzYWdlKFdURk1vdmUoZW5jb2RlciksIHsgfSk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK0pTVmFsdWVSZWYgSlNJ
UEM6OnNlbmRTeW5jTWVzc2FnZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgYXV0byogZ2xv
YmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGds
b2JhbE9iamVjdC0+dm0oKSk7CisgICAgYXV0byBqc0lQQyA9IG1ha2VSZWZQdHIodG9XcmFwcGVk
KGNvbnRleHQsIHRoaXNPYmplY3QpKTsKKyAgICBpZiAoIWpzSVBDKSB7CisgICAgICAgICpleGNl
cHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGNvbnRleHQpLCAiV3Jvbmcg
dHlwZSJfcykpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CisgICAgfQorCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCA0KSB7CisgICAgICAgICpleGNlcHRp
b24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGNvbnRleHQpLCAiTXVzdCBzcGVj
aWZ5IHRoZSB0YXJnZXQgcHJvY2VzcywgZGVzaW5hdGlvbiBJRCwgbWVzc2FnZSBJRCwgYW5kIHRp
bWVvdXQgYXMgdGhlIGZpcnN0IGZvdXIgYXJndW1lbnRzIl9zKSk7CisgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisKKyAgICBhdXRvIGNvbm5lY3Rp
b24gPSBwcm9jZXNzVGFyZ2V0RnJvbUFyZ3VtZW50KGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzBd
LCBleGNlcHRpb24pOworICAgIGlmICghY29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgYXV0byBkZXN0aW5hdGlvbklEID0gZGVz
dGluYXRpb25JREZyb21Bcmd1bWVudChnbG9iYWxPYmplY3QsIGFyZ3VtZW50c1sxXSwgZXhjZXB0
aW9uKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uSUQpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIGF1dG8gbWVzc2FnZUlEID0gbWVzc2FnZUlERnJv
bUFyZ3VtZW50KGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pOworICAgIGlm
ICghbWVzc2FnZUlEKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CisKKyAgICBTZWNvbmRzIHRpbWVvdXQ7CisgICAgeworICAgICAgICBhdXRvIGpzVmFsdWUg
PSB0b0pTKGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzNdKTsKKyAgICAgICAgaWYgKCFqc1ZhbHVl
LmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0
ZVR5cGVFcnJvcihnbG9iYWxPYmplY3QsICJ0aW1lb3V0IG11c3QgYmUgYSBudW1iZXIiX3MpKTsK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAg
ICAgfQorICAgICAgICB0aW1lb3V0ID0gU2Vjb25kcyB7IGpzVmFsdWUuYXNOdW1iZXIoKSB9Owor
ICAgIH0KKyAgICAKKyAgICAvLyBGSVhNRTogU3VwcG9ydCB0aGUgb3B0aW9ucy4KKworICAgIHVp
bnQ2NF90IHN5bmNSZXF1ZXN0SUQgPSAwOworICAgIGF1dG8gZW5jb2RlciA9IGNvbm5lY3Rpb24t
PmNyZWF0ZVN5bmNNZXNzYWdlRW5jb2RlcihzdGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPihz
dGF0aWNfY2FzdDx1aW50NjRfdD4oKm1lc3NhZ2VJRCkpLCAqZGVzdGluYXRpb25JRCwgc3luY1Jl
cXVlc3RJRCk7CisKKyAgICBpZiAoYXJndW1lbnRDb3VudCA+IDQpIHsKKyAgICAgICAgaWYgKCFl
bmNvZGVBcmd1bWVudCgqZW5jb2RlciwgKmpzSVBDLCBjb250ZXh0LCBhcmd1bWVudHNbNF0sIGV4
Y2VwdGlvbikpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CisgICAgfQorCisgICAgYXV0byByZXBseURlY29kZXIgPSBjb25uZWN0aW9uLT5zZW5kU3lu
Y01lc3NhZ2Uoc3luY1JlcXVlc3RJRCwgV1RGTW92ZShlbmNvZGVyKSwgdGltZW91dCwgeyB9KTsK
KyAgICAvLyBGSVhNRTogRGVjb2RlIHRoZSByZXBseS4KKworICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQzo6dmlzaXRlZExpbmtT
dG9yZUlEKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0
cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIHJldHVybiByZXRyaWV2ZUlE
KGNvbnRleHQsIHRoaXNPYmplY3QsIGV4Y2VwdGlvbiwgW10oSlNJUEMmIHdyYXBwZWQpIHsKKyAg
ICAgICAgYXV0byB3ZWJQYWdlID0gbWFrZVJlZigqd3JhcHBlZC5tX3dlYlBhZ2UpOworICAgICAg
ICByZXR1cm4gd2ViUGFnZS0+dmlzaXRlZExpbmtUYWJsZUlEKCk7CisgICAgfSk7Cit9CisKK0pT
VmFsdWVSZWYgSlNJUEM6OndlYlBhZ2VQcm94eUlEKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQor
eworICAgIHJldHVybiByZXRyaWV2ZUlEKGNvbnRleHQsIHRoaXNPYmplY3QsIGV4Y2VwdGlvbiwg
W10oSlNJUEMmIHdyYXBwZWQpIHsKKyAgICAgICAgcmV0dXJuIHdyYXBwZWQubV93ZWJQYWdlLT53
ZWJQYWdlUHJveHlJRCgpOworICAgIH0pOworfQorCitKU1ZhbHVlUmVmIEpTSVBDOjpmcmFtZUlk
ZW50aWZpZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpT
U3RyaW5nUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgcmV0dXJuIHJldHJpZXZl
SUQoY29udGV4dCwgdGhpc09iamVjdCwgZXhjZXB0aW9uLCBbXShKU0lQQyYgd3JhcHBlZCkgewor
ICAgICAgICByZXR1cm4gd3JhcHBlZC5tX3dlYkZyYW1lLT5mcmFtZUlEKCkudG9VSW50NjQoKTsK
KyAgICB9KTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQzo6cmV0cmlldmVJRChKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBj
b25zdCBXVEY6OkZ1bmN0aW9uPHVpbnQ2NF90KEpTSVBDJik+JiBjYWxsYmFjaykKK3sKKyAgICBh
dXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOworICAgIGF1dG8mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworCisgICAgUmVm
UHRyPEpTSVBDPiB3cmFwcGVkID0gdG9XcmFwcGVkKGNvbnRleHQsIHRoaXNPYmplY3QpOworICAg
IGlmICghd3JhcHBlZCkgeworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVU
eXBlRXJyb3IodG9KUyhjb250ZXh0KSwgIldyb25nIHR5cGUiX3MpKTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIGF1dG8gaWQgPSBj
YWxsYmFjaygqd3JhcHBlZCk7CisgICAgSlNDOjpKU0NlbGwqIGpzVmFsdWUgPSBKU0M6OkpTQmln
SW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgaWQpOworICAgIHJldHVybiB0b1JlZih2bSwg
anNWYWx1ZSk7Cit9CisKK0pTVmFsdWVSZWYgSlNJUEM6Om1lc3NhZ2VzKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7Cisg
ICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayh2bSk7CisKKyAgICBhdXRvKiBpbXBsID0gdG9XcmFwcGVkKGNvbnRleHQsIHRoaXNPYmpl
Y3QpOworICAgIGlmICghaW1wbCkgeworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpj
cmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0KSwgIldyb25nIHR5cGUiX3MpKTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIEpTQzo6
SlNPYmplY3QqIG1lc3NhZ2VzT2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICBhdXRvIG5hbWVJZGVu
dCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElQQzo6TWVzc2FnZU5hbWU6
Okxhc3QpOyArK2kpIHsKKyAgICAgICAgYXV0byogbWVzc2FnZU5hbWUgPSBkZXNjcmlwdGlvbihz
dGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPihpKSk7CisKKyAgICAgICAgSlNDOjpKU09iamVj
dCogZGljdGlvbmFyeSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgICAgIGRpY3Rpb25hcnktPnB1dERpcmVj
dCh2bSwgbmFtZUlkZW50LCBKU0M6OkpTVmFsdWUoaSkpOworCisgICAgICAgIC8vIEZJWE1FOiBB
ZGQgYXJndW1lbnQgbmFtZXMuCisKKyAgICAgICAgbWVzc2FnZXNPYmplY3QtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBtZXNzYWdlTmFtZSksIGRpY3Rpb25h
cnkpOworICAgIH0KKworICAgIHJldHVybiB0b1JlZih2bSwgbWVzc2FnZXNPYmplY3QpOworfQor
Cit2b2lkIGluamVjdChXZWJQYWdlJiB3ZWJQYWdlLCBXZWJGcmFtZSYgd2ViRnJhbWUsIFdlYkNv
cmU6OkRPTVdyYXBwZXJXb3JsZCYgd29ybGQpCit7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0g
d2ViRnJhbWUuY29yZUZyYW1lKCktPnNjcmlwdCgpLmdsb2JhbE9iamVjdCh3b3JsZCk7CisKKyAg
ICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAg
YXV0byB3cmFwcGVkID0gSlNJUEM6OmNyZWF0ZSh3ZWJQYWdlLCB3ZWJGcmFtZSk7CisgICAgSlNP
YmplY3RSZWYgd3JhcHBlck9iamVjdCA9IEpTT2JqZWN0TWFrZSh0b0dsb2JhbFJlZihnbG9iYWxP
YmplY3QpLCBKU0lQQzo6d3JhcHBlckNsYXNzKCksIHdyYXBwZWQucHRyKCkpOworICAgIGdsb2Jh
bE9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJJ
UEMiKSwgdG9KUyhnbG9iYWxPYmplY3QsIHdyYXBwZXJPYmplY3QpKTsKKworICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIElQQ1Rlc3RpbmdBUEkKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKElQQ19URVNUSU5HX0FQSSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBET01X
cmFwcGVyV29ybGQ7CitjbGFzcyBGcmFtZTsKKworfTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYkZyYW1lOworY2xhc3MgV2ViUGFnZTsKKworbmFtZXNwYWNlIElQQ1Rlc3RpbmdB
UEkgeworCit2b2lkIGluamVjdChXZWJQYWdlJiwgV2ViRnJhbWUmLCBXZWJDb3JlOjpET01XcmFw
cGVyV29ybGQmKTsKKworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmgJKHJldmlzaW9u
IDI2ODE2NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgY2xhc3MgV2ViUGFnZTsKIHN0cnVjdCBG
cmFtZUluZm9EYXRhOwogc3RydWN0IFdlYnNpdGVQb2xpY2llc0RhdGE7CiAKLWNsYXNzIFdlYkZy
YW1lIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6QnVuZGxlRnJh
bWU+IHsKK2NsYXNzIFdlYkZyYW1lIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVj
dDo6VHlwZTo6QnVuZGxlRnJhbWU+LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8V2ViRnJhbWU+IHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFdlYkZyYW1lPiBjcmVhdGUoKSB7IHJldHVybiBhZG9w
dFJlZigqbmV3IFdlYkZyYW1lKTsgfQogICAgIHN0YXRpYyBSZWY8V2ViRnJhbWU+IGNyZWF0ZVN1
YmZyYW1lKFdlYlBhZ2UqLCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgV2ViQ29yZTo6SFRNTEZy
YW1lT3duZXJFbGVtZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjY4MTY1KQorKysgU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0MCw2ICs1NDAs
NyBAQCBXZWJQYWdlOjpXZWJQYWdlKFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgCiAgICAgcGFnZUNv
bmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyID0gV2ViU3RvcmFnZU5hbWVzcGFj
ZVByb3ZpZGVyOjpnZXRPckNyZWF0ZSgqbV9wYWdlR3JvdXApOwogICAgIHBhZ2VDb25maWd1cmF0
aW9uLnVzZXJDb250ZW50UHJvdmlkZXIgPSBtX3VzZXJDb250ZW50Q29udHJvbGxlci5wdHIoKTsK
ICAgICBwYWdlQ29uZmlndXJhdGlvbi52aXNpdGVkTGlua1N0b3JlID0gVmlzaXRlZExpbmtUYWJs
ZUNvbnRyb2xsZXI6OmdldE9yQ3JlYXRlKHBhcmFtZXRlcnMudmlzaXRlZExpbmtUYWJsZUlEKTsK
KyAgICBtX3Zpc2l0ZWRMaW5rVGFibGVJRCA9IHBhcmFtZXRlcnMudmlzaXRlZExpbmtUYWJsZUlE
OwogCiAjaWYgRU5BQkxFKEFQUExFX1BBWSkKICAgICBwYWdlQ29uZmlndXJhdGlvbi5wYXltZW50
Q29vcmRpbmF0b3JDbGllbnQgPSBuZXcgV2ViUGF5bWVudENvb3JkaW5hdG9yKCp0aGlzKTsKQEAg
LTM3ODQsNiArMzc4NSwxMCBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0
IFdlCiAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxSZW1vdGVNZWRpYVBs
YXllck1hbmFnZXI+KCktPnVwZGF0ZVByZWZlcmVuY2VzKHNldHRpbmdzKTsKICAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5zZXRVc2VHUFVQcm9jZXNzRm9yTWVkaWEoc2V0dGluZ3MudXNlR1BV
UHJvY2Vzc0Zvck1lZGlhRW5hYmxlZCgpKTsKICNlbmRpZgorCisjaWYgRU5BQkxFKElQQ19URVNU
SU5HX0FQSSkKKyAgICBtX2lwY1Rlc3RpbmdBUElFbmFibGVkID0gc3RvcmUuZ2V0Qm9vbFZhbHVl
Rm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjppcGNUZXN0aW5nQVBJRW5hYmxlZEtleSgpKTsKKyNl
bmRpZgogfQogCiAjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQpJbmRleDogU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gMjY4MTY1KQorKysgU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzM5LDYgKzEzMzksMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVDT1JTRGlzYWJs
aW5nUGF0dGVybnMoVmVjdG9yPFN0cmluZz4mJik7CiAKKyNpZiBFTkFCTEUoSVBDX1RFU1RJTkdf
QVBJKQorICAgIGJvb2wgaXBjVGVzdGluZ0FQSUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lw
Y1Rlc3RpbmdBUElFbmFibGVkOyB9CisgICAgdWludDY0X3Qgd2ViUGFnZVByb3h5SUQoKSBjb25z
dCB7IHJldHVybiBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpOyB9CisgICAgdWludDY0X3Qg
dmlzaXRlZExpbmtUYWJsZUlEKCkgY29uc3QgeyByZXR1cm4gbV92aXNpdGVkTGlua1RhYmxlSUQ7
IH0KKyNlbmRpZgorCiAgICAgdm9pZCBnZXRQcm9jZXNzRGlzcGxheU5hbWUoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChTdHJpbmcmJik+JiYpOwogCiAgICAgV2ViQ29yZTo6QWxsb3dzQ29udGVudEph
dmFTY3JpcHQgYWxsb3dzQ29udGVudEphdmFTY3JpcHRGcm9tTW9zdFJlY2VudE5hdmlnYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2FsbG93c0NvbnRlbnRKYXZhU2NyaXB0RnJvbU1vc3RSZWNlbnRO
YXZpZ2F0aW9uOyB9CkBAIC0yMTcxLDYgKzIxNzcsMTEgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
Y2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UgeyB0cnVlIH07CiAKICAgICBWZWN0b3I8U3RyaW5nPiBt
X2NvcnNEaXNhYmxpbmdQYXR0ZXJuczsKKworI2lmIEVOQUJMRShJUENfVEVTVElOR19BUEkpCisg
ICAgYm9vbCBtX2lwY1Rlc3RpbmdBUElFbmFibGVkIHsgZmFsc2UgfTsKKyAgICB1aW50NjRfdCBt
X3Zpc2l0ZWRMaW5rVGFibGVJRDsKKyNlbmRpZgogfTsKIAogI2lmICFQTEFURk9STShJT1NfRkFN
SUxZKQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjY4MTc1KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMjAtMTAtMDggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgTWFrZSBpdCBwb3NzaWJsZSB0byBzZW5kIGFuIGFyYml0cmFyeSBJUEMg
bWVzc2FnZSBmcm9tIEphdmFTY3JpcHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNzQyMworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjk5NjkzNTE+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lQQ1Rlc3RpbmdBUEkubW06IEFk
ZGVkLgorICAgICAgICAoLVtJUENUZXN0aW5nQVBJRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2Ny
aXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRs
ZXI6XSk6CisgICAgICAgIChURVNUKToKKwogMjAyMC0xMC0wNyAgQWRpdHlhIEtlZXJ0aGkgIDxh
a2VlcnRoaUBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjY4MTIzKTogWyBpT1Mg
XSA0IFRlc3RXZWJLaXRBUEkuV2ViS2l0TGVnYWN5IGZhaWx1cmVzOiBGaWxlIG5hbWUgdW5hdmFp
bGFibGUuIFVua25vd24gQysrIGV4Y2VwdGlvbiB0aHJvd24gaW4gdGhlIHRlc3QgYm9keS4KSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjgxNjUpCisrKyBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtODQ2LDYgKzg0Niw3IEBACiAJCTlCNEY4RkE3MTU5RDUyREQwMDJEOUY5NCAv
KiBIVE1MQ29sbGVjdGlvbk5hbWVkSXRlbS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNEY4RkE2MTU5RDUyQ0EwMDJEOUY5NCAvKiBI
VE1MQ29sbGVjdGlvbk5hbWVkSXRlbS5odG1sICovOyB9OwogCQk5QjU5RjEyQTIwMzQwODZGMDA5
RTYzRDUgLyogbXNvLWxpc3QtY29tcGF0LW1vZGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjU5RjEyOTIwMzQwODU0MDA5RTYzRDUg
LyogbXNvLWxpc3QtY29tcGF0LW1vZGUuaHRtbCAqLzsgfTsKIAkJOUI2MjYzMEMxRjhDMjVDODAw
N0VFMjlCIC8qIGNvcHktdXJsLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUI2MjYzMEIxRjhDMjUxMDAwN0VFMjlCIC8qIGNvcHktdXJs
Lmh0bWwgKi87IH07CisJCTlCNkQ5RkY5MjUyRUZERTUwMEE1MTY0MCAvKiBJUENUZXN0aW5nQVBJ
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI2RDlG
RjgyNTJFRkRFNTAwQTUxNjQwIC8qIElQQ1Rlc3RpbmdBUEkubW0gKi87IH07CiAJCTlCN0EzN0M0
MUY4QUVCQTUwMDRBQTIyOCAvKiBDb3B5VVJMLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUI3QTM3QzIxRjhBRUJBNTAwNEFBMjI4IC8qIENvcHlVUkwu
bW0gKi87IH07CiAJCTlCN0Q3NDBGMUY4Mzc4NzcwMDA2QzQzMiAvKiBwYXN0ZS1ydGZkLmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI3
RDc0MEUxRjgzNzdFNjAwMDZDNDMyIC8qIHBhc3RlLXJ0ZmQuaHRtbCAqLzsgfTsKIAkJOUI5MzMy
Q0UyMzIwQzc0NTAwMkQ1MEU4IC8qIGNvY29hLXdyaXRlci1tYXJrdXAtd2l0aC1saXN0cy5odG1s
IGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlC
OTMzMkNEMjMyMEM3M0UwMDJENTBFOCAvKiBjb2NvYS13cml0ZXItbWFya3VwLXdpdGgtbGlzdHMu
aHRtbCAqLzsgfTsKQEAgLTI0NTYsNiArMjQ1Nyw3IEBACiAJCTlCNEY4RkE2MTU5RDUyQ0EwMDJE
OUY5NCAvKiBIVE1MQ29sbGVjdGlvbk5hbWVkSXRlbS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1s
OyBwYXRoID0gSFRNTENvbGxlY3Rpb25OYW1lZEl0ZW0uaHRtbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUI1OUYxMjkyMDM0MDg1NDAwOUU2M0Q1IC8qIG1zby1saXN0LWNvbXBhdC1t
b2RlLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0Lmh0bWw7IHBhdGggPSAibXNvLWxpc3QtY29tcGF0LW1vZGUuaHRtbCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCNjI2MzBCMUY4QzI1MTAwMDdFRTI5QiAvKiBjb3B5LXVy
bC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5odG1sOyBwYXRoID0gImNvcHktdXJsLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5QjZEOUZGODI1MkVGREU1MDBBNTE2NDAgLyogSVBDVGVzdGluZ0FQSS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IElQQ1Rlc3RpbmdBUEkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlCNzkxNjRGMUJEODlEMEQwMEQ1MEI4RiAvKiBGaXJzdFJlc3BvbmRlclNjcm9s
bGluZ1Bvc2l0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
Rmlyc3RSZXNwb25kZXJTY3JvbGxpbmdQb3NpdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOUI3QTM3QzIxRjhBRUJBNTAwNEFBMjI4IC8qIENvcHlVUkwubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBDb3B5VVJMLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
QjdENzQwRTFGODM3N0U2MDAwNkM0MzIgLyogcGFzdGUtcnRmZC5odG1sICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gInBh
c3RlLXJ0ZmQuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMjY3LDYgKzMy
NjksNyBAQAogCQkJCUNFRDczRDM1MjQ2RjIwNEMwMERBRTMyNyAvKiBJbnNlcnRUZXh0QWx0ZXJu
YXRpdmVzLm1tICovLAogCQkJCTJEQjAyMzJFMUU0RTg3MTgwMDcwNzEyMyAvKiBJbnRlcmFjdGlv
bkRlYWRsb2NrQWZ0ZXJDcmFzaC5tbSAqLywKIAkJCQkyRDExNkUxMjIzRTBDQjM5MDAyMDg5MDAg
LyogaU9TTW91c2VTdXBwb3J0Lm1tICovLAorCQkJCTlCNkQ5RkY4MjUyRUZERTUwMEE1MTY0MCAv
KiBJUENUZXN0aW5nQVBJLm1tICovLAogCQkJCTVDNjlCREQ0MUY4MkE3RUIwMDBGNEY0QiAvKiBK
YXZhU2NyaXB0RHVyaW5nTmF2aWdhdGlvbi5tbSAqLywKIAkJCQk1QzAxNjBDMDIxQTEzMjMyMDA3
N0ZBMzIgLyogSklURW5hYmxlZC5tbSAqLywKIAkJCQlDMjVDQ0EwNTFFNTEzODBCMDAyNkNCOEEg
LyogTGluZUJyZWFraW5nLm1tICovLApAQCAtNTIyMiw2ICs1MjI1LDcgQEAKIAkJCQk3QTkwOUE4
MjFEODc3NDgwMDA3RTEwRjggLyogSW50UmVjdFRlc3RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTdBOTA5QTgzMUQ4Nzc0ODAwMDdFMTBGOCAvKiBJbnRTaXplVGVzdHMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMkQxMTZFMTMyM0UwQ0IzQTAwMjA4OTAwIC8qIGlPU01vdXNlU3VwcG9ydC5tbSBp
biBTb3VyY2VzICovLAorCQkJCTlCNkQ5RkY5MjUyRUZERTUwMEE1MTY0MCAvKiBJUENUZXN0aW5n
QVBJLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMwQkY4OTMxREQ1OTlCRDAwQjAwMzI4IC8qIElz
TmF2aWdhdGlvbkFjdGlvblRydXN0ZWQubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRDVGRjQ5RjIx
NjJFOTQzMDA0QkQ4NkYgLyogSVNPQm94LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNjlCREQ1
MUY4MkE3RUYwMDBGNEY0QiAvKiBKYXZhU2NyaXB0RHVyaW5nTmF2aWdhdGlvbi5tbSBpbiBTb3Vy
Y2VzICovLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JUENU
ZXN0aW5nQVBJLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSVBDVGVzdGluZ0FQSS5tbQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lQQ1Rlc3RpbmdBUEkubW0JKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaW1w
b3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0ICJVdGlsaXRpZXMuaCIKKyNpbXBvcnQgPFdl
YktpdC9XS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1By
ZWZlcmVuY2VzUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlldy5oPgorI2ltcG9y
dCA8V2ViS2l0L19XS0ludGVybmFsRGVidWdGZWF0dXJlLmg+CisjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CisKK3N0YXRpYyBib29sIGRvbmUgPSBmYWxzZTsKK3N0YXRpYyBSZXRhaW5QdHI8TlNT
dHJpbmc+IGFsZXJ0TWVzc2FnZTsKKworQGludGVyZmFjZSBJUENUZXN0aW5nQVBJRGVsZWdhdGUg
OiBOU09iamVjdCA8V0tVSURlbGVnYXRlPgorQGVuZAorICAgIAorQGltcGxlbWVudGF0aW9uIElQ
Q1Rlc3RpbmdBUElEZWxlZ2F0ZQorCistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZp
ZXcgcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdl
IGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgYWxlcnRNZXNzYWdlID0g
bWVzc2FnZTsKKyAgICBkb25lID0gdHJ1ZTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcigpOworfQor
CitAZW5kCisKK1RFU1QoSVBDVGVzdGluZ0FQSSwgSXNEaXNhYmxlZEJ5RGVmYXVsdCkKK3sKKyAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworCisgICAgYXV0byBkZWxlZ2F0ZSA9
IGFkb3B0TlMoW1tJUENUZXN0aW5nQVBJRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBbd2Vi
VmlldyBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIGRvbmUgPSBmYWxzZTsK
KyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRt
bD48c2NyaXB0PmFsZXJ0KHR5cGVvZihJUEMpKTs8L3NjcmlwdD4iXTsKKyAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAgIEVYUEVDVF9TVFJFUShbYWxlcnRNZXNzYWdlIFVU
RjhTdHJpbmddLCAidW5kZWZpbmVkIik7Cit9CisKK1RFU1QoSVBDVGVzdGluZ0FQSSwgQ2FuU2Vu
ZEFsZXJ0KQoreworICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1
cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsK
KyAgICBmb3IgKF9XS0ludGVybmFsRGVidWdGZWF0dXJlICpmZWF0dXJlIGluIFtXS1ByZWZlcmVu
Y2VzIF9pbnRlcm5hbERlYnVnRmVhdHVyZXNdKSB7CisgICAgICAgIGlmIChbZmVhdHVyZS5rZXkg
aXNFcXVhbFRvU3RyaW5nOkAiSVBDVGVzdGluZ0FQSUVuYWJsZWQiXSkgeworICAgICAgICAgICAg
W1tjb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBfc2V0RW5hYmxlZDpZRVMgZm9ySW50ZXJuYWxE
ZWJ1Z0ZlYXR1cmU6ZmVhdHVyZV07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKyAgICBSZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgMzAwLCAzMDAp
IGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworCisgICAgYXV0byBkZWxlZ2F0
ZSA9IGFkb3B0TlMoW1tJUENUZXN0aW5nQVBJRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBb
d2ViVmlldyBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIGRvbmUgPSBmYWxz
ZTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8IURPQ1RZUEUg
aHRtbD48c2NyaXB0PklQQy5zZW5kU3luY01lc3NhZ2UoJ1VJJywgSVBDLndlYlBhZ2VQcm94eUlE
LCBJUEMubWVzc2FnZXMuV2ViUGFnZVByb3h5X1J1bkphdmFTY3JpcHRBbGVydC5uYW1lLCAxMDAs
IgorICAgICAgICAiW3t0eXBlOiAndWludDY0X3QnLCB2YWx1ZTogSVBDLmZyYW1lSWRlbnRpZmll
cn0sIHt0eXBlOiAnRnJhbWVJbmZvRGF0YSd9LCB7J3R5cGUnOiAnU3RyaW5nJywgJ3ZhbHVlJzog
J2hpJ31dKTs8L3NjcmlwdD4iXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUp
OworCisgICAgRVhQRUNUX1NUUkVRKFthbGVydE1lc3NhZ2UgVVRGOFN0cmluZ10sICJoaSIpOwor
fQo=
</data>
<flag name="commit-queue"
          id="426883"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410826</attachid>
            <date>2020-10-08 03:49:04 -0700</date>
            <delta_ts>2020-10-08 10:07:15 -0700</delta_ts>
            <desc>Fixed release builds</desc>
            <filename>bug-217423-20201008034904.patch</filename>
            <type>text/plain</type>
            <size>52074</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjY4MTY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDIwLTEwLTA4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAg
IE1ha2UgaXQgcG9zc2libGUgdG8gc2VuZCBhbiBhcmJpdHJhcnkgSVBDIG1lc3NhZ2UgZnJvbSBK
YXZhU2NyaXB0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTc0MjMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY5OTY5MzUxPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgaGVscGVyIGZ1bmN0
aW9uIHRvIGdldCB1aW50NjRfdCBvdXQgb2YgQmlnSW50LgorCisgICAgICAgICogcnVudGltZS9K
U0JpZ0ludC5jcHA6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0b1VpbnQ2NEhlYXApOiBBZGRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50Lmg6CisgICAgICAgIChKU0M6OkpTQmlnSW50
Ojp0b1VpbnQ2NCk6IEFkZGVkLgorCiAyMDIwLTEwLTA3ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5r
aXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAgICBbSlNDXSBSZXZlcnQgU3RyaW5nLnByb3RvdHlw
ZS5pdGVtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3Bw
CShyZXZpc2lvbiAyNjgxNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jp
Z0ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNDksNiArMzA0OSwyOSBAQCBKU1ZhbHVlIEpT
QmlnSW50Ojphc1VpbnROKEpTR2xvYmFsT2JqZWN0CiB9CiAjZW5kaWYKIAorT3B0aW9uYWw8dWlu
dDY0X3Q+IEpTQmlnSW50Ojp0b1VpbnQ2NEhlYXAoSlNCaWdJbnQqIGJpZ0ludCkKK3sKKyAgICBh
dXRvIGxlbmd0aCA9IGJpZ0ludC0+bGVuZ3RoKCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAg
IHJldHVybiAwOworICAgIGlmIChiaWdJbnQtPnNpZ24oKSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90KSA9PSBzaXplb2Yo
RGlnaXQpIHx8IHNpemVvZih1aW50NjRfdCkgPT0gc2l6ZW9mKERpZ2l0KSAqIDIsICJEaWdpdCBt
dXN0IGJlIGVpdGhlciAzMi1iaXQgb3IgNjQtYml0Iik7CisgICAgaWYgKHNpemVvZih1aW50NjRf
dCkgPT0gc2l6ZW9mKERpZ2l0KSkgeworICAgICAgICBpZiAobGVuZ3RoID4gMSkKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBiaWdJbnQtPmRpZ2l0KDAp
OworICAgIH0KKworICAgIGlmIChsZW5ndGggPiAyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIHVpbnQ2NF90IHJlc3VsdCA9IGJpZ0ludC0+ZGlnaXQoMCk7CisgICAgaWYgKGxl
bmd0aCA9PSAxKQorICAgICAgICByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJpZ0lu
dC0+ZGlnaXQoMCkpIDw8IDMyOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIHVuc2lnbmVkIGNvbXB1dGVIYXNoKEpTQmlnSW50OjpEaWdpdCogZGlnaXRzLCB1
bnNpZ25lZCBsZW5ndGgsIGJvb2wgc2lnbikKIHsKICAgICBIYXNoZXIgaGFzaGVyOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCShyZXZpc2lvbiAyNjgxNjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNCaWdJbnQqIHRyeUNy
ZWF0ZUZyb20oVk0mLCBpbnQzMl90IHZhbHVlKTsKICAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0
ZUZyb20oSlNHbG9iYWxPYmplY3QqLCB1aW50MzJfdCB2YWx1ZSk7CiAgICAgc3RhdGljIEpTQmln
SW50KiBjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiwgaW50NjRfdCB2YWx1ZSk7Ci0gICAgc3Rh
dGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiwgdWludDY0X3QgdmFsdWUp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShKU0ds
b2JhbE9iamVjdCosIHVpbnQ2NF90IHZhbHVlKTsKICAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0
ZUZyb20oSlNHbG9iYWxPYmplY3QqLCBib29sIHZhbHVlKTsKICAgICBzdGF0aWMgSlNCaWdJbnQq
IGNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqLCBkb3VibGUgdmFsdWUpOwogCkBAIC00MjIsNiAr
NDIyLDIwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNWYWx1ZSBhc1VpbnROKEpTR2xvYmFsT2Jq
ZWN0KiwgdWludDY0X3QgbnVtYmVyT2ZCaXRzLCBpbnQzMl90IGJpZ0ludEFzSW50MzIpOwogI2Vu
ZGlmCiAKKyAgICBzdGF0aWMgT3B0aW9uYWw8dWludDY0X3Q+IHRvVWludDY0KEpTVmFsdWUgYmln
SW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJpZ0ludC5pc0JpZ0ludCgpKTsKKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgICAgIGlmIChiaWdJbnQuaXNCaWdJbnQzMigpKSB7CisgICAgICAgICAg
ICBhdXRvIHZhbHVlID0gYmlnSW50LmJpZ0ludDMyQXNJbnQzMigpOworICAgICAgICAgICAgaWYg
KHZhbHVlIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHRv
VWludDY0SGVhcChqc0Nhc3Q8SlNCaWdJbnQqPihiaWdJbnQpKTsKKyAgICB9CisKICAgICBEaWdp
dCBkaWdpdCh1bnNpZ25lZCk7CiAgICAgdm9pZCBzZXREaWdpdCh1bnNpZ25lZCwgRGlnaXQpOyAv
LyBVc2Ugb25seSB3aGVuIGluaXRpYWxpemluZy4KICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0Jp
Z0ludCogcmlnaHRUcmltKEpTR2xvYmFsT2JqZWN0Kik7CkBAIC01NzYsNiArNTkwLDggQEAgcHJp
dmF0ZToKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KICAgICBzdGF0aWMgSW1w
bFJlc3VsdCB0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKEpTR2xvYmFsT2JqZWN0KiwgaW50
MzJfdCwgQmlnSW50SW1wbCwgYm9vbCByZXN1bHRTaWduKTsKIAorICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBPcHRpb25hbDx1aW50NjRfdD4gdG9VaW50NjRIZWFwKEpTQmlnSW50Kik7CisK
ICAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBvZmZzZXRPZkRhdGEoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0JpZ0ludCwgbV9kYXRhKTsKSW5kZXg6IFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lv
biAyNjgxNjUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE5IEBACisyMDIwLTEwLTA4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIE1ha2UgaXQgcG9zc2libGUgdG8gc2VuZCBhbiBhcmJpdHJhcnkgSVBDIG1lc3Nh
Z2UgZnJvbSBKYXZhU2NyaXB0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTc0MjMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY5OTY5MzUxPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgY29t
cGlsZSB0aW1lIGZsYWcgKEVOQUJMRV9JUENfVEVTVElOR19BUEkpIGFuZCBhIHJ1bnRpbWUgZmxh
ZyAoSVBDVGVzdGluZ0FQSUVuYWJsZWQpCisgICAgICAgIGZvciB0aGUgSmF2YVNjcmlwdCBBUEkg
dG8gdGVzdCBJUEMuCisKKyAgICAgICAgKiBTY3JpcHRzL0dlbmVyYXRlUHJlZmVyZW5jZXMucmI6
CisgICAgICAgIChQcmVmZXJlbmNlOjpuYW1lTG93ZXIpOiBLZWVwIElQQyB1cHBlcmNhc2UuCisg
ICAgICAgICogU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0ludGVybmFsLnlhbWw6
IEFkZGVkIElQQ1Rlc3RpbmdBUElFbmFibGVkLgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybUVuYWJs
ZS5oOiBBZGRlZCBFTkFCTEVfSVBDX1RFU1RJTkdfQVBJLgorCiAyMDIwLTEwLTA3ICBLZWl0aCBS
b2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgcG9zdC1wcm9jZXNz
aW5nIHJ1bGVzIGZvciBoZWFkZXJzIHRvIG5vdCB1bm5lY2Vzc2FyaWx5IGNoYW5nZSB0aW1lc3Rh
bXBzCkluZGV4OiBTb3VyY2UvV1RGL1NjcmlwdHMvR2VuZXJhdGVQcmVmZXJlbmNlcy5yYgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL1NjcmlwdHMvR2VuZXJhdGVQcmVmZXJlbmNlcy5yYgkocmV2
aXNpb24gMjY4MTY1KQorKysgU291cmNlL1dURi9TY3JpcHRzL0dlbmVyYXRlUHJlZmVyZW5jZXMu
cmIJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCBjbGFzcyBQcmVmZXJlbmNlCiAg
ICAgICBAZ2V0dGVyCiAgICAgZWxzaWYgQG5hbWUuc3RhcnRfd2l0aD8oIlZQIikKICAgICAgIEBu
YW1lWzAuLjFdLmRvd25jYXNlICsgQG5hbWVbMi4uQG5hbWUubGVuZ3RoXQotICAgIGVsc2lmIEBu
YW1lLnN0YXJ0X3dpdGg/KCJDU1MiLCAiWFNTIiwgIkZUUCIsICJET00iLCAiRE5TIiwgIlBERiIs
ICJJQ0UiKQorICAgIGVsc2lmIEBuYW1lLnN0YXJ0X3dpdGg/KCJDU1MiLCAiRE9NIiwgIkROUyIs
ICJGVFAiLCAiSUNFIiwgIklQQyIsICJQREYiLCAiWFNTIikKICAgICAgIEBuYW1lWzAuLjJdLmRv
d25jYXNlICsgQG5hbWVbMy4uQG5hbWUubGVuZ3RoXQogICAgIGVsc2lmIEBuYW1lLnN0YXJ0X3dp
dGg/KCJIVFRQIikKICAgICAgIEBuYW1lWzAuLjNdLmRvd25jYXNlICsgQG5hbWVbNC4uQG5hbWUu
bGVuZ3RoXQpJbmRleDogU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVu
Y2VzSW50ZXJuYWwueWFtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVy
ZW5jZXMvV2ViUHJlZmVyZW5jZXNJbnRlcm5hbC55YW1sCShyZXZpc2lvbiAyNjgxNjUpCisrKyBT
b3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNJbnRlcm5hbC55YW1s
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNiArMjc5LDE3IEBAIElDRUNhbmRpZGF0ZUZpbHRlcmlu
Z0VuYWJsZWQ6CiAgICAgV2ViS2l0OgogICAgICAgZGVmYXVsdDogdHJ1ZQogCitJUENUZXN0aW5n
QVBJRW5hYmxlZDoKKyAgdHlwZTogYm9vbAorICBodW1hblJlYWRhYmxlTmFtZTogIklQQyBUZXN0
aW5nIEFQSSIKKyAgaHVtYW5SZWFkYWJsZURlc2NyaXB0aW9uOiAiRW5hYmxlIElQQyBUZXN0aW5n
IEFQSSBmb3IgSmF2YVNjcmlwdCIKKyAgd2ViY29yZUJpbmRpbmc6IG5vbmUKKyAgY29uZGl0aW9u
OiBFTkFCTEUoSVBDX1RFU1RJTkdfQVBJKQorICBleHBvc2VkOiBbIFdlYktpdCBdCisgIGRlZmF1
bHRWYWx1ZToKKyAgICBXZWJLaXQ6CisgICAgICBkZWZhdWx0OiBmYWxzZQorCiBJbnB1dFR5cGVD
b2xvckVuYWJsZWQ6CiAgIHR5cGU6IGJvb2wKICAgaHVtYW5SZWFkYWJsZU5hbWU6ICJDb2xvciBJ
bnB1dHMiCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgJKHJldmlzaW9uIDI2ODE2NSkKKysr
IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw2
ICszMTUsMTMgQEAKICNkZWZpbmUgRU5BQkxFX0lOUFVUX1RZUEVfV0VFSyAwCiAjZW5kaWYKIAor
I2lmICFkZWZpbmVkKEVOQUJMRV9JUENfVEVTVElOR19BUEkpCisvKiBFbmFibGUgSVBDIHRlc3Rp
bmcgb24gYWxsIEFTQU4gYnVpbGRzIGFuZCBkZWJ1ZyBidWlsZHMuICovCisjaWYgQVNBTl9FTkFC
TEVEIHx8ICFkZWZpbmVkKE5ERUJVRykKKyNkZWZpbmUgRU5BQkxFX0lQQ19URVNUSU5HX0FQSSAx
CisjZW5kaWYKKyNlbmRpZgorCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfREFURSkgfHwgRU5BQkxF
KElOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkgfHwgRU5BQkxFKElOUFVUX1RZUEVfTU9OVEgpIHx8
IEVOQUJMRShJTlBVVF9UWVBFX1RJTUUpIHx8IEVOQUJMRShJTlBVVF9UWVBFX1dFRUspCiAjaWYg
IWRlZmluZWQoRU5BQkxFX0RBVEVfQU5EX1RJTUVfSU5QVVRfVFlQRVMpCiAjZGVmaW5lIEVOQUJM
RV9EQVRFX0FORF9USU1FX0lOUFVUX1RZUEVTIDEKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjgx
NjUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDc4IEBACisyMDIwLTEwLTA4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisg
ICAgICAgIE1ha2UgaXQgcG9zc2libGUgdG8gc2VuZCBhbiBhcmJpdHJhcnkgSVBDIG1lc3NhZ2Ug
ZnJvbSBKYXZhU2NyaXB0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTc0MjMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY5OTY5MzUxPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50
cm9kdWNlcyB0aGUgSmF2YVNjcmlwdCBBUEkgKHdpbmRvdy5JUEMpIHRvIHNlbmQgSVBDIG91dCBv
ZiBXZWJDb250ZW50IHByb2Nlc3MuCisgICAgICAgIFRoZSBmZWF0dXJlIGlzIGNvbXBpbGVkIGlu
IHVuZGVyIEFTQU4gYW5kIERlYnVnIGJ1aWxkcyBhbmQgY2FuIGJlIGVuYWJsZWQgYXQgcnVudGlt
ZS4KKworICAgICAgICB3aW5kb3cuSVBDIGhhcyB0d28gbWV0aG9kczogc2VuZE1lc3NhZ2UgYW5k
IHNlbmRTeW5jTWVzc2FnZSB3aGljaCBzZW5kcyBhbiBhc3luYyBhbmQgc3luYyBJUEMgcmVzcGVj
dGl2ZWx5LgorICAgICAgICBJdCB0YWtlcyB0aGUgZGVzdGluYXRpb24gcHJvY2VzcyBuYW1lIChV
SSwgR1BVLCBvciBOZXR3b3JraW5nKSwgdGhlIGRlc3RpbmF0b2luIElEIChlLmcuIFdlYlBhZ2VQ
cm94eSBJRCksCisgICAgICAgIG1lc3NhZ2UgSUQsIHRpbWVvdXQgZm9yIHNlbmRTeW5jTWVzc2Fn
ZSwgYW5kIG9wdGlvbmFsbHkgSVBDIG1lc3NhZ2UgYXJndW1lbnRzLiBUaGUgbWVzc2FnZSBhcmd1
bWVudHMgY2FuIGJlCisgICAgICAgIHBhc3NlZCBpbiBhcyBhIFR5cGVkQXJyYXkgb3IgQXJyYXlC
dWZmZXIsIG9yIGEgSmF2YVNjcmlwdCBhcnJheSB0aGF0IHJlY3Vyc2l2ZWx5IGRlc2NyaWJlcyBl
bmNvZGVkIG9iamVjdHMuCisKKyAgICAgICAgRWFjaCBvYmplY3QgY2FuIGJlIGVpdGhlciBhIFR5
cGVkQXJyYXkgb3IgQXJyYXlCdWZmZXIsIHdoaWNoIHdpbGwgYmUgdHJlYXRlZCBhcyBlbmNvZGVk
IG1lc3NhZ2UsIGFuIGFycmF5CisgICAgICAgIHdoaWNoIHdpbGwgYmUgZW5jb2RlZCBhcyBhIFZl
Y3RvciB3aXRoIGVhY2ggaXRlbSB3aXRoaW4gdGhlIGFycmF5IGVuY29kZWQgcmVjdXJzaXZlbHks
IG9yIGEgZGljdGlvbmFyeSB3aGljaAorICAgICAgICBkZXNjcmliZXMgYSBzcGVjaWZpYyB0eXBl
LgorCisgICAgICAgIFdoZW4gYSBzcGVjaWZpYyB0eXBlIGlzIGRlc2NyaWJlZCB2aWEgYSBkaWN0
aW9uYXJ5LCAidmFsdWUiIGlzIGVuY29lZCBiYXNlZCBvbiAidHlwZSIgYXMgZm9sbG93czoKKyAg
ICAgICAgIC0gV2hlbiAidHlwZSIgaXMgIlN0cmluZyIsICJ2YWx1ZSIgaXMgZW5jb2RlZCBhcyBh
IFdURjo6U3RyaW5nLCB0cmVhdGluZyBudWxsIG9yIHVuZGVmaW5lZCBhcyBhIG51bGwgc3RyaW5n
LgorICAgICAgICAgLSBXaGVuICJ0eXBlIiBpcyAiYm9vbCIsICJpbnQ4X3QiLCAiaW50MTZfdCIs
ICJpbnQzMl90IiwgImludDY0X3QiLCAidWludDhfdCIsICJ1aW50MTZfdCIsICJ1aW50MzJfdCIs
CisgICAgICAgICAgIG9yICJ1aW50NjRfdCIsICJ2YWx1ZSIgKHdoaWNoIGNhbiBiZSBCaWdJbnQg
b3IgYSBudW1iZXIpIGlzIGVuY29kZWQgYXMgdGhlIHJlc3BlY3RpdmUgQysrIHR5cGUuCisgICAg
ICAgICAtIFdoZW4gInR5cGUiIGlzICJSR0JBIiwgInZhbHVlIiBpcyB1c2VkIGFzIFBhY2tlZENv
bG9yOjpSR0JBIHRvIGNvbnN0cnVjdCBXZWJDb3JlOjpDb2xvciB0byBiZSBlbmNvZGVkLgorICAg
ICAgICAgLSBXaGVuICJ0eXBlIiBpcyAiSW50UmVjdCIgb3IgIkZsb2F0UmVjdCIsICJ4IiwgInki
LCAid2lkdGgiLCBhbmQgImhlaWdodCIgYXJlIHRyZWF0ZWQgYXMgcmVzcGVjdGl2ZSB2YWx1ZXMK
KyAgICAgICAgICAgb2YgSW50UmVjdCBvciBGbG9hdFJlY3QgQysrIG9iamVjdHMsIGFuZCB0aGUg
Y29uc3RydWN0ZWQgKlJlY3QgaXMgZW5jb2RlZC4gCisgICAgICAgICAtIFdoZW4gInR5cGUiIGlz
ICJGcmFtZUluZm9EYXRhIiwgdGhlIGNvbnRleHQgb2JqZWN0J3MgV2ViRnJhbWUncyBGcmFtZUlu
Zm9EYXRhIGlzIGVuY29kZWQuCisKKyAgICAgICAgVGhlIGxpc3Qgb2YgSVBDIG1lc3NhZ2VzIGFy
ZSBleHBvc2VkIG9uIHdpbmRvdy5JUEMubWVzc2FnZXMsIGFuZCBWaXNpdGVkTGlua1N0b3JlIElE
LCBXZWJQYWdlUHJveHkgSUQsCisgICAgICAgIGFuZCBmcmFtZSBpZGVudGlmaWVycyBhcmUgYWxz
byBleHBvc2VkIGFzIHN0YXRpYyB2YXJpYWJsZXMgb24gd2luZG93LklQQy4KKworICAgICAgICAq
IFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hE
aWRDbGVhcldpbmRvd09iamVjdEluV29ybGQpOiBJbmplY3QgdGhlIEFQSSBpZiBlbmFibGVkLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjpjcmVhdGUpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OndlYkZyYW1lKTogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjpKU0lQQyk6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6d3JhcHBlckNsYXNzKTogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjp1bndyYXApOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OnRvV3JhcHBlZCk6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6aW5pdGlhbGl6ZSk6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6ZmluYWxpemUpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OnN0YXRpY0Z1bmN0
aW9ucyk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6c3Rh
dGljVmFsdWVzKTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmNvbnZl
cnRUb1VpbnQ2NCk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpwcm9j
ZXNzVGFyZ2V0RnJvbUFyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3Rp
bmdBUEk6OmRlc3RpbmF0aW9uSURGcm9tQXJndW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6SVBDVGVzdGluZ0FQSTo6bWVzc2FnZUlERnJvbUFyZ3VtZW50KTogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmVuY29kZVR5cGVkQXJyYXkpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6Y3JlYXRlVHlwZUVycm9yKTogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmVuY29kZVJlY3RUeXBlKTogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmVuY29kZUludGVncmFsVHlwZSk6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpWZWN0b3JFbmNvZGVIZWxwZXI6OmVuY29k
ZSBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjplbmNvZGVB
cmd1bWVudCk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6
c2VuZE1lc3NhZ2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJ
UEM6OnNlbmRTeW5jTWVzc2FnZSk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5n
QVBJOjpKU0lQQzo6dmlzaXRlZExpbmtTdG9yZUlEKTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjp3ZWJQYWdlUHJveHlJRCk6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6ZnJhbWVJZGVudGlmaWVyKTogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjpyZXRyaWV2ZUlEKTogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjptZXNzYWdlcyk6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjppbmplY3QpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6bV9saW1pdHNOYXZpZ2F0aW9uc1RvQXBwQm91
bmREb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmlwY1Rlc3RpbmdBUElFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6d2ViUGFnZVByb3h5SUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjp2aXNpdGVkTGlua1RhYmxlSUQgY29uc3QpOgorCiAyMDIwLTEwLTA3ICBLZWl0aCBSb2xs
aW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgcG9zdC1wcm9jZXNzaW5n
IHJ1bGVzIGZvciBoZWFkZXJzIHRvIG5vdCB1bm5lY2Vzc2FyaWx5IGNoYW5nZSB0aW1lc3RhbXBz
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvU291cmNlcy50eHQJKHJldmlzaW9uIDI2ODE2NSkKKysrIFNvdXJjZS9XZWJLaXQvU291
cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTY1Miw2ICs2NTIsNyBAQCBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoCiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWEuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAogV2ViUHJvY2Vz
cy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAorV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3Rp
bmdBUEkuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZUJhbm5lci5jcHAKIFdlYlByb2Nlc3Mv
V2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY4MTY1KQorKysgU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNDUxMyw2ICs0NTEzLDggQEAKIAkJOUIwMkUwQ0QyMzVFQjk2NzAwNDA0NEIyIC8qIF9X
S1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tUZXh0TWFuaXB1bGF0
aW9uVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwMkUwQ0UyMzVFQkIx
NDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOUIwMkUwRDAyMzVFQkNDQTAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25J
dGVtLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0ubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDMzRTcxMjUyNTgwRjMwMDUwMTA3MSAv
KiBJUENUZXN0aW5nQVBJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElQQ1Rlc3RpbmdBUEkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwMzNFNzIyNTI1ODBGMzAwNTAxMDcxIC8qIElQQ1Rl
c3RpbmdBUEkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSVBDVGVzdGluZ0FQSS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMTIyOUNCMjNGRjI1RjIwMDhDQTc1MSAvKiBSZW1v
dGVBdWRpb0Rlc3RpbmF0aW9uTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVBdWRpb0Rl
c3RpbmF0aW9uTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjEyMjlD
QzIzRkYyNUYyMDA4Q0E3NTEgLyogUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjEyMjlDRjIzRkYyODE0MDA4Q0E3NTEgLyogUmVt
b3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlQXVkaW9E
ZXN0aW5hdGlvbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC04OTIzLDYgKzg5MjUsOCBAQAogCQkJCTFBQTU3NUZEMTQ5NkI2RjMwMEE0RUUwNiAvKiBF
dmVudERpc3BhdGNoZXIubWVzc2FnZXMuaW4gKi8sCiAJCQkJMUE5MEMxRjMxMjY0RkQ3MTAwM0U0
NEQ0IC8qIEZpbmRDb250cm9sbGVyLmNwcCAqLywKIAkJCQkxQTkwQzFGMjEyNjRGRDcxMDAzRTQ0
RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLywKKwkJCQk5QjAzM0U3MjI1MjU4MEYzMDA1MDEwNzEg
LyogSVBDVGVzdGluZ0FQSS5jcHAgKi8sCisJCQkJOUIwMzNFNzEyNTI1ODBGMzAwNTAxMDcxIC8q
IElQQ1Rlc3RpbmdBUEkuaCAqLywKIAkJCQk3QzM4NzQzMzE3MkY1NjE1MDAxQkQ4OEEgLyogUGFn
ZUJhbm5lci5jcHAgKi8sCiAJCQkJN0NGNDdGRjkxNzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VCYW5u
ZXIuaCAqLywKIAkJCQkyRDgxOUI5OTE4NjI3NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9t
ZXRyeUNvbGxlY3Rvci5jcHAgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5j
cHAJKHJldmlzaW9uIDI2ODE2NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJGaW5kQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZvcm1EYXRh
UmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiRnJhbWVJbmZvRGF0YS5oIgorI2luY2x1ZGUgIklQQ1Rl
c3RpbmdBUEkuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgogI2luY2x1ZGUgIkluamVj
dGVkQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVO
YXZpZ2F0aW9uQWN0aW9uLmgiCkBAIC0xNzQzLDYgKzE3NDQsMTEgQEAgdm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDbAogICAgIGlmICghd2ViUGFnZSkKICAgICAgICAgcmV0
dXJuOwogCisjaWYgRU5BQkxFKElQQ19URVNUSU5HX0FQSSkKKyAgICBpZiAod29ybGQuaXNOb3Jt
YWwoKSAmJiB3ZWJQYWdlLT5pcGNUZXN0aW5nQVBJRW5hYmxlZCgpKQorICAgICAgICBJUENUZXN0
aW5nQVBJOjppbmplY3QoKndlYlBhZ2UsIG1fZnJhbWUuZ2V0KCksIHdvcmxkKTsKKyNlbmRpZgor
CiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQoKS5kaWRDbGVhcldpbmRv
d09iamVjdEZvckZyYW1lKCp3ZWJQYWdlLCBtX2ZyYW1lLCB3b3JsZCk7CiAKICAgICBXZWJBdXRv
bWF0aW9uU2Vzc2lvblByb3h5KiBhdXRvbWF0aW9uU2Vzc2lvblByb3h5ID0gV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuYXV0b21hdGlvblNlc3Npb25Qcm94eSgpOwpJbmRleDogU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSVBDVGVzdGluZ0FQSS5oIgorCisjaWYgRU5BQkxFKElQ
Q19URVNUSU5HX0FQSSkKKworI2luY2x1ZGUgIkVuY29kZXIuaCIKKyNpbmNsdWRlICJGcmFtZUlu
Zm9EYXRhLmgiCisjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJN
ZXNzYWdlTmFtZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJGcmFtZS5oIgor
I2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0J1aWx0
aW5OYW1lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmlnSW50Lmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNDbGFzc1JlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTTG9jay5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0Lmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHQuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcGFxdWVKU1N0cmluZy5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRE9NV3JhcHBlcldvcmxkLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2NyaXB0Q29udHJvbGxlci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworbmFtZXNwYWNlIElQQ1Rlc3RpbmdBUEkgeworCitjbGFzcyBKU0lQ
QyA6IHB1YmxpYyBSZWZDb3VudGVkPEpTSVBDPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxK
U0lQQz4gY3JlYXRlKFdlYlBhZ2UmIHdlYlBhZ2UsIFdlYkZyYW1lJiB3ZWJGcmFtZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEpTSVBDKHdlYlBhZ2UsIHdlYkZyYW1lKSk7
CisgICAgfQorCisgICAgc3RhdGljIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCk7CisKKyAgICBX
ZWJGcmFtZSogd2ViRnJhbWUoKSB7IHJldHVybiBtX3dlYkZyYW1lLmdldCgpOyB9CisKK3ByaXZh
dGU6CisgICAgSlNJUEMoV2ViUGFnZSYgd2ViUGFnZSwgV2ViRnJhbWUmIHdlYkZyYW1lKQorICAg
ICAgICA6IG1fd2ViUGFnZShtYWtlV2Vha1B0cih3ZWJQYWdlKSkKKyAgICAgICAgLCBtX3dlYkZy
YW1lKG1ha2VXZWFrUHRyKHdlYkZyYW1lKSkKKyAgICB7IH0KKworICAgIHN0YXRpYyBKU0lQQyog
dW53cmFwKEpTT2JqZWN0UmVmKTsKKyAgICBzdGF0aWMgSlNJUEMqIHRvV3JhcHBlZChKU0NvbnRl
eHRSZWYsIEpTVmFsdWVSZWYpOworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoSlNDb250ZXh0
UmVmLCBKU09iamVjdFJlZik7CisgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNPYmplY3RSZWYp
OworICAgIHN0YXRpYyBjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMoKTsK
KyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNWYWx1ZSogc3RhdGljVmFsdWVzKCk7CisKKyAgICBz
dGF0aWMgSlNWYWx1ZVJlZiBzZW5kTWVzc2FnZShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICBzdGF0aWMgSlNW
YWx1ZVJlZiBzZW5kU3luY01lc3NhZ2UoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisKKyAgICBzdGF0aWMgSlNWYWx1
ZVJlZiB2aXNpdGVkTGlua1N0b3JlSUQoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNTdHJp
bmdSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgd2Vi
UGFnZVByb3h5SUQoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNTdHJpbmdSZWYsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgZnJhbWVJZGVudGlmaWVy
KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pOworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHJldHJpZXZlSUQoSlNDb250ZXh0UmVmLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIGNvbnN0IFdURjo6
RnVuY3Rpb248dWludDY0X3QoSlNJUEMmKT4mKTsKKworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIG1l
c3NhZ2VzKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pOworCisgICAgV2Vha1B0cjxXZWJQYWdlPiBtX3dlYlBhZ2U7CisgICAgV2Vh
a1B0cjxXZWJGcmFtZT4gbV93ZWJGcmFtZTsKK307CisKK0pTQ2xhc3NSZWYgSlNJUEM6OndyYXBw
ZXJDbGFzcygpCit7CisgICAgc3RhdGljIEpTQ2xhc3NSZWYganNDbGFzczsKKyAgICBpZiAoIWpz
Q2xhc3MpIHsKKyAgICAgICAgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IGtKU0NsYXNz
RGVmaW5pdGlvbkVtcHR5OworICAgICAgICBkZWZpbml0aW9uLmNsYXNzTmFtZSA9ICJVSVByb2Nl
c3MiOworICAgICAgICBkZWZpbml0aW9uLnBhcmVudENsYXNzID0gMDsKKyAgICAgICAgZGVmaW5p
dGlvbi5zdGF0aWNWYWx1ZXMgPSBzdGF0aWNWYWx1ZXMoKTsKKyAgICAgICAgZGVmaW5pdGlvbi5z
dGF0aWNGdW5jdGlvbnMgPSBzdGF0aWNGdW5jdGlvbnMoKTsKKyAgICAgICAgZGVmaW5pdGlvbi5p
bml0aWFsaXplID0gaW5pdGlhbGl6ZTsKKyAgICAgICAgZGVmaW5pdGlvbi5maW5hbGl6ZSA9IGZp
bmFsaXplOworICAgICAgICBqc0NsYXNzID0gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7Cisg
ICAgfQorICAgIHJldHVybiBqc0NsYXNzOworfQorCitpbmxpbmUgSlNJUEMqIEpTSVBDOjp1bndy
YXAoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0lQQyo+
KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKK30KKworSlNJUEMqIEpTSVBDOjp0b1dyYXBw
ZWQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgaWYgKCFj
b250ZXh0IHx8ICF2YWx1ZSB8fCAhSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjb250ZXh0LCB2YWx1
ZSwgd3JhcHBlckNsYXNzKCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
dW53cmFwKEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwgMCkpOworfQorCit2b2lkIEpT
SVBDOjppbml0aWFsaXplKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAg
IHVud3JhcChvYmplY3QpLT5yZWYoKTsKK30KKwordm9pZCBKU0lQQzo6ZmluYWxpemUoSlNPYmpl
Y3RSZWYgb2JqZWN0KQoreworICAgIHVud3JhcChvYmplY3QpLT5yZWYoKTsKK30KKworY29uc3Qg
SlNTdGF0aWNGdW5jdGlvbiogSlNJUEM6OnN0YXRpY0Z1bmN0aW9ucygpCit7CisgICAgc3RhdGlj
IGNvbnN0IEpTU3RhdGljRnVuY3Rpb24gZnVuY3Rpb25zW10gPSB7CisgICAgICAgIHsgInNlbmRN
ZXNzYWdlIiwgc2VuZE1lc3NhZ2UsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKKyAgICAgICAgeyAic2VuZFN5bmNNZXNzYWdl
Iiwgc2VuZFN5bmNNZXNzYWdlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgMCwgMCwgMCB9CisgICAgfTsK
KyAgICByZXR1cm4gZnVuY3Rpb25zOworfQorCitjb25zdCBKU1N0YXRpY1ZhbHVlKiBKU0lQQzo6
c3RhdGljVmFsdWVzKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNWYWx1ZSB2YWx1ZXNb
XSA9IHsKKyAgICAgICAgeyAidmlzaXRlZExpbmtTdG9yZUlEIiwgdmlzaXRlZExpbmtTdG9yZUlE
LCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgIndlYlBhZ2VQcm94eUlEIiwgd2ViUGFnZVByb3h5SUQs
IDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfSwKKyAgICAgICAgeyAiZnJhbWVJZGVudGlmaWVyIiwgZnJhbWVJZGVudGlmaWVy
LCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgIm1lc3NhZ2VzIiwgbWVzc2FnZXMsIDAsIGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwK
KyAgICAgICAgeyAwLCAwLCAwLCAwIH0KKyAgICB9OworICAgIHJldHVybiB2YWx1ZXM7Cit9CisK
K3N0YXRpYyBPcHRpb25hbDx1aW50NjRfdD4gY29udmVydFRvVWludDY0KEpTQzo6SlNWYWx1ZSBq
c1ZhbHVlKQoreworICAgIGlmIChqc1ZhbHVlLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgZG91Ymxl
IHZhbHVlID0ganNWYWx1ZS5hc051bWJlcigpOworICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHRy
dW5jKHZhbHVlKSAhPSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisgICAgaWYgKGpzVmFsdWUuaXNCaWdJbnQoKSkK
KyAgICAgICAgcmV0dXJuIEpTQzo6SlNCaWdJbnQ6OnRvVWludDY0KGpzVmFsdWUpOworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBw
cm9jZXNzVGFyZ2V0RnJvbUFyZ3VtZW50KEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZVJlZiB2YWx1ZVJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAg
YXV0byBuYW1lID0gdG9KUyhnbG9iYWxPYmplY3QsIHZhbHVlUmVmKS50b1dURlN0cmluZyhnbG9i
YWxPYmplY3QpOworICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBpZiAobmFtZSA9PSAiVUkiKQorICAgICAgICByZXR1cm4gV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKTsKKyNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCisgICAgaWYgKG5hbWUgPT0gIkdQVSIpCisgICAgICAgIHJldHVybiAmV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9u
KCk7CisjZW5kaWYKKyAgICBpZiAobmFtZSA9PSAiTmV0d29ya2luZyIpCisgICAgICAgIHJldHVy
biAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
KCkuY29ubmVjdGlvbigpOworCisgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgIlRhcmdldCBwcm9jZXNzIG11c3QgYmUgVUksIEdQVSwgb3Ig
TmV0d29ya2luZyJfcykpOworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgT3B0aW9u
YWw8dWludDY0X3Q+IGRlc3RpbmF0aW9uSURGcm9tQXJndW1lbnQoSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlUmVmIHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCit7CisgICAgYXV0byBqc1ZhbHVlID0gdG9KUyhnbG9iYWxPYmplY3QsIHZhbHVlUmVmKTsK
KyAgICBhdXRvIHJlc3VsdCA9IGNvbnZlcnRUb1VpbnQ2NChqc1ZhbHVlKTsKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKGds
b2JhbE9iamVjdCwgImRlc3RpbmF0aW9uSUQgbXVzdCBiZSBhbiBpbnRlZ2VyIl9zKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIE9wdGlvbmFsPHVpbnQ2NF90PiBtZXNzYWdlSURG
cm9tQXJndW1lbnQoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlUmVm
IHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgYXV0byBqc1ZhbHVlID0g
dG9KUyhnbG9iYWxPYmplY3QsIHZhbHVlUmVmKTsKKyAgICBhdXRvIHJlc3VsdCA9IGNvbnZlcnRU
b1VpbnQ2NChqc1ZhbHVlKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgKmV4Y2VwdGlvbiA9
IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgIm1lc3NhZ2VJRCBtdXN0
IGJlIGFuIGludGVnZXIiX3MpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgYm9v
bCBlbmNvZGVUeXBlZEFycmF5KElQQzo6RW5jb2RlciYgZW5jb2RlciwgSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgdmFsdWVSZWYsIEpTVHlwZWRBcnJheVR5cGUgdHlwZSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFTU0VSVCh0eXBlICE9IGtKU1R5cGVkQXJyYXlUeXBl
Tm9uZSk7CisKKyAgICBhdXRvIG9iamVjdFJlZiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2
YWx1ZVJlZiwgZXhjZXB0aW9uKTsKKyAgICBpZiAoIW9iamVjdFJlZikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgdm9pZCogYnVmZmVyOworICAgIGlmICh0eXBlID09IGtKU1R5cGVkQXJy
YXlUeXBlQXJyYXlCdWZmZXIpCisgICAgICAgIGJ1ZmZlciA9IEpTT2JqZWN0R2V0QXJyYXlCdWZm
ZXJCeXRlc1B0cihjb250ZXh0LCBvYmplY3RSZWYsIGV4Y2VwdGlvbik7CisgICAgZWxzZQorICAg
ICAgICBidWZmZXIgPSBKU09iamVjdEdldFR5cGVkQXJyYXlCeXRlc1B0cihjb250ZXh0LCBvYmpl
Y3RSZWYsIGV4Y2VwdGlvbik7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHNpemVfdCBidWZmZXJTaXplOworICAgIGlmICh0eXBlID09IGtKU1R5cGVkQXJy
YXlUeXBlQXJyYXlCdWZmZXIpCisgICAgICAgIGJ1ZmZlclNpemUgPSBKU09iamVjdEdldEFycmF5
QnVmZmVyQnl0ZUxlbmd0aChjb250ZXh0LCBvYmplY3RSZWYsIGV4Y2VwdGlvbik7CisgICAgZWxz
ZQorICAgICAgICBidWZmZXJTaXplID0gSlNPYmplY3RHZXRUeXBlZEFycmF5Qnl0ZUxlbmd0aChj
b250ZXh0LCBvYmplY3RSZWYsIGV4Y2VwdGlvbik7CisgICAgaWYgKCFidWZmZXJTaXplKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXIpLCBidWZmZXJTaXplLCAxKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgY3JlYXRlVHlwZUVycm9y
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9jayh0b0pTKGNvbnRleHQpLT52bSgpKTsKKyAgICByZXR1cm4gdG9S
ZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0KSwgbWVzc2FnZSkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBSZWN0VHlwZT4gYm9vbCBlbmNvZGVSZWN0VHlwZShJUEM6OkVuY29k
ZXImIGVuY29kZXIsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU09i
amVjdCoganNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBqc1ggPSBqc09iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAieCJfcykpOworICAgIGlmICghanNYLmlzTnVtYmVyKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIGpzWSA9IGpzT2JqZWN0LT5nZXQoZ2xvYmFsT2Jq
ZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ5Il9zKSk7CisgICAgaWYgKCFq
c1kuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8ganNXaWR0aCA9
IGpzT2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJ3aWR0aCJfcykpOworICAgIGlmICghanNXaWR0aC5pc051bWJlcigpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgYXV0byBqc0hlaWdodCA9IGpzT2JqZWN0LT5nZXQoZ2xvYmFsT2Jq
ZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJoZWlnaHQiX3MpKTsKKyAgICBp
ZiAoIWpzSGVpZ2h0LmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBlbmNv
ZGVyIDw8IFJlY3RUeXBlKGpzWC5hc051bWJlcigpLCBqc1kuYXNOdW1iZXIoKSwganNXaWR0aC5h
c051bWJlcigpLCBqc0hlaWdodC5hc051bWJlcigpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgSW50ZWdyYWxUeXBlPiBib29sIGVuY29kZUludGVncmFsVHlwZShJ
UEM6OkVuY29kZXImIGVuY29kZXIsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKQoreworICAgIGlmIChq
c1ZhbHVlLmlzQmlnSW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbmVnYXRpdmUg
QmlnSW50LgorICAgICAgICBhdXRvIHJlc3VsdCA9IEpTQzo6SlNCaWdJbnQ6OnRvVWludDY0KGpz
VmFsdWUpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxJbnRlZ3JhbFR5cGU+KCpyZXN1bHQpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFqc1ZhbHVlLmlzTnVtYmVyKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb3VibGUgdmFsdWUgPSBqc1ZhbHVlLmFzTnVt
YmVyKCk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxJbnRlZ3JhbFR5cGU+KHZhbHVlKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworZW51bSBjbGFzcyBBcnJheU1vZGUgeyBUdXBsZSwgVmVj
dG9yIH07CitzdGF0aWMgYm9vbCBlbmNvZGVBcmd1bWVudChJUEM6OkVuY29kZXImLCBKU0lQQyYs
IEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBBcnJheU1v
ZGUgPSBBcnJheU1vZGU6OlR1cGxlKTsKKworc3RydWN0IFZlY3RvckVuY29kZUhlbHBlciB7Cisg
ICAgUmVmPEpTSVBDPiBqc0lQQzsKKyAgICBKU0NvbnRleHRSZWYgY29udGV4dDsKKyAgICBKU1Zh
bHVlUmVmIHZhbHVlUmVmOworICAgIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbjsKKyAgICBib29sJiBz
dWNjZXNzOworCisgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBzdWNjZXNzID0gZW5jb2RlQXJndW1lbnQoZW5jb2RlciwganNJUEMuZ2V0KCksIGNvbnRleHQs
IHZhbHVlUmVmLCBleGNlcHRpb24sIEFycmF5TW9kZTo6VmVjdG9yKTsKKyAgICB9Cit9OworCitz
dGF0aWMgYm9vbCBlbmNvZGVBcmd1bWVudChJUEM6OkVuY29kZXImIGVuY29kZXIsIEpTSVBDJiBq
c0lQQywgSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWVSZWYsIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbiwgQXJyYXlNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBhdXRvIG9iamVjdFJl
ZiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZVJlZiwgZXhjZXB0aW9uKTsKKyAgICBp
ZiAoIW9iamVjdFJlZikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGF1dG8gdHlw
ZSA9IEpTVmFsdWVHZXRUeXBlZEFycmF5VHlwZShjb250ZXh0LCBvYmplY3RSZWYsIGV4Y2VwdGlv
bik7IHR5cGUgIT0ga0pTVHlwZWRBcnJheVR5cGVOb25lKQorICAgICAgICByZXR1cm4gZW5jb2Rl
VHlwZWRBcnJheShlbmNvZGVyLCBjb250ZXh0LCBvYmplY3RSZWYsIHR5cGUsIGV4Y2VwdGlvbik7
CisKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOworICAgIGF1dG8mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7
CisgICAgYXV0byoganNPYmplY3QgPSB0b0pTKGdsb2JhbE9iamVjdCwgb2JqZWN0UmVmKS5nZXRP
YmplY3QoKTsKKyAgICBBU1NFUlQoanNPYmplY3QpOworICAgIGlmIChKU1ZhbHVlSXNBcnJheShj
b250ZXh0LCBvYmplY3RSZWYpKSB7CisgICAgICAgIGF1dG8ganNMZW5ndGggPSBqc09iamVjdC0+
Z2V0KGdsb2JhbE9iamVjdCwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibGVuZ3Ro
Il9zKSk7CisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKCFqc0xlbmd0aC5pc051bWJlcigpKSB7CisgICAgICAgICAg
ICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJBcnJheSBsZW5ndGggaXMg
bm90IGEgbnVtYmVyIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBhdXRvIGxlbmd0aCA9IGpzTGVuZ3RoLmFzTnVtYmVyKCk7CisKKyAgICAgICAgVmVj
dG9yPFZlY3RvckVuY29kZUhlbHBlcj4gdmVjdG9yOworICAgICAgICBib29sIHN1Y2Nlc3MgPSB0
cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIGF1dG8gaXRlbVJlZiA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRl
eHQsIG9iamVjdFJlZiwgaSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIGlmICghaXRlbVJlZikK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB2ZWN0b3IuYXBwZW5k
KFZlY3RvckVuY29kZUhlbHBlciB7IGpzSVBDLCBjb250ZXh0LCBpdGVtUmVmLCBleGNlcHRpb24s
IHN1Y2Nlc3MgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFycmF5TW9kZSA9PSBBcnJheU1v
ZGU6OlR1cGxlKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiB2ZWN0b3IpCisgICAg
ICAgICAgICAgICAgaXRlbS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgZW5jb2RlciA8PCB2ZWN0b3I7CisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgIH0K
KworICAgIGF1dG8ganNUeXBlID0ganNPYmplY3QtPmdldChnbG9iYWxPYmplY3QsIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInR5cGUiX3MpKTsKKyAgICBpZiAoc2NvcGUuZXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gdHlwZSA9IGpzVHlwZS50
b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOworICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHR5cGUgPT0gIkludFJlY3QiKSB7CisgICAg
ICAgIGlmICghZW5jb2RlUmVjdFR5cGU8V2ViQ29yZTo6SW50UmVjdD4oZW5jb2RlciwgZ2xvYmFs
T2JqZWN0LCBqc09iamVjdCkpIHsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBl
RXJyb3IoY29udGV4dCwgIkZhaWxlZCB0byBjb252ZXJ0IEludFJlY3QiX3MpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGlmICh0eXBlID09ICJGbG9hdFJlY3QiKSB7CisgICAgICAgIGlmICghZW5jb2RlUmVj
dFR5cGU8V2ViQ29yZTo6RmxvYXRSZWN0PihlbmNvZGVyLCBnbG9iYWxPYmplY3QsIGpzT2JqZWN0
KSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAi
RmFpbGVkIHRvIGNvbnZlcnQgRmxvYXRSZWN0Il9zKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodHlw
ZSA9PSAiRnJhbWVJbmZvRGF0YSIpIHsKKyAgICAgICAgYXV0byB3ZWJGcmFtZSA9IG1ha2VSZWZQ
dHIoanNJUEMud2ViRnJhbWUoKSk7CisgICAgICAgIGlmICghd2ViRnJhbWUpIHsKKyAgICAgICAg
ICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIkZhaWxlZCB0byBnZXQg
dGhlIGZyYW1lIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBlbmNvZGVyIDw8IHdlYkZyYW1lLT5pbmZvKCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGF1dG8ganNWYWx1ZSA9IGpzT2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ2YWx1ZSJfcykpOworICAgIGlmIChzY29w
ZS5leGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHR5cGUgPT0g
IlN0cmluZyIpIHsKKyAgICAgICAgaWYgKGpzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewor
ICAgICAgICAgICAgZW5jb2RlciA8PCBTdHJpbmcgeyB9OworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgYXV0byBzdHJpbmcgPSBqc1ZhbHVlLnRvV1RGU3RyaW5n
KGdsb2JhbE9iamVjdCk7CisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZW5jb2RlciA8PCBzdHJpbmc7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh0eXBlID09ICJSR0JBIikgeworICAgICAgICBp
ZiAoIWpzVmFsdWUuaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0
ZVR5cGVFcnJvcihjb250ZXh0LCAiUkdCQSB2YWx1ZSBzaG91bGQgYmUgYSBudW1iZXIiX3MpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHVpbnQzMl90IHJn
YmEgPSBqc1ZhbHVlLmFzTnVtYmVyKCk7CisgICAgICAgIGVuY29kZXIgPDwgV2ViQ29yZTo6Q29s
b3IgeyBXZWJDb3JlOjphc1NSR0JBKFdlYkNvcmU6OlBhY2tlZENvbG9yOjpSR0JBKHJnYmEpKSB9
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGludGVncmFsUmVzdWx0
OworICAgIGlmICh0eXBlID09ICJib29sIikKKyAgICAgICAgaW50ZWdyYWxSZXN1bHQgPSBlbmNv
ZGVJbnRlZ3JhbFR5cGU8Ym9vbD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgZWxzZSBpZiAodHlw
ZSA9PSAiaW50OF90IikKKyAgICAgICAgaW50ZWdyYWxSZXN1bHQgPSBlbmNvZGVJbnRlZ3JhbFR5
cGU8aW50OF90PihlbmNvZGVyLCBqc1ZhbHVlKTsKKyAgICBlbHNlIGlmICh0eXBlID09ICJpbnQx
Nl90IikKKyAgICAgICAgaW50ZWdyYWxSZXN1bHQgPSBlbmNvZGVJbnRlZ3JhbFR5cGU8aW50MTZf
dD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgZWxzZSBpZiAodHlwZSA9PSAiaW50MzJfdCIpCisg
ICAgICAgIGludGVncmFsUmVzdWx0ID0gZW5jb2RlSW50ZWdyYWxUeXBlPGludDMyX3Q+KGVuY29k
ZXIsIGpzVmFsdWUpOworICAgIGVsc2UgaWYgKHR5cGUgPT0gImludDY0X3QiKQorICAgICAgICBp
bnRlZ3JhbFJlc3VsdCA9IGVuY29kZUludGVncmFsVHlwZTxpbnQ2NF90PihlbmNvZGVyLCBqc1Zh
bHVlKTsKKyAgICBlbHNlIGlmICh0eXBlID09ICJ1aW50OF90IikKKyAgICAgICAgaW50ZWdyYWxS
ZXN1bHQgPSBlbmNvZGVJbnRlZ3JhbFR5cGU8dWludDhfdD4oZW5jb2RlciwganNWYWx1ZSk7Cisg
ICAgZWxzZSBpZiAodHlwZSA9PSAidWludDE2X3QiKQorICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9
IGVuY29kZUludGVncmFsVHlwZTx1aW50MTZfdD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgZWxz
ZSBpZiAodHlwZSA9PSAidWludDMyX3QiKQorICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVuY29k
ZUludGVncmFsVHlwZTx1aW50MzJfdD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgZWxzZSBpZiAo
dHlwZSA9PSAidWludDY0X3QiKQorICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVuY29kZUludGVn
cmFsVHlwZTx1aW50NjRfdD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgZWxzZSB7CisgICAgICAg
ICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIkJhZCB0eXBlIG5hbWUiX3Mp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghaW50ZWdyYWxSZXN1bHQp
IHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiRmFpbGVk
IHRvIGVuY29kZSBhbiBpbnRlZ2VyIl9zKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQzo6c2VuZE1lc3NhZ2UoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4
dCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxPYmplY3QtPnZtKCkpOworICAg
IGF1dG8ganNJUEMgPSBtYWtlUmVmUHRyKHRvV3JhcHBlZChjb250ZXh0LCB0aGlzT2JqZWN0KSk7
CisgICAgaWYgKCFqc0lQQykgeworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVh
dGVUeXBlRXJyb3IodG9KUyhjb250ZXh0KSwgIldyb25nIHR5cGUiX3MpKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIGlmIChhcmd1
bWVudENvdW50IDwgMykgeworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVU
eXBlRXJyb3IodG9KUyhjb250ZXh0KSwgIk11c3Qgc3BlY2lmeSB0aGUgdGFyZ2V0IHByb2Nlc3Ms
IGRlc2luYXRpb24gSUQsIGFuZCBtZXNzYWdlIElEIGFzIHRoZSBmaXJzdCB0aHJlZSBhcmd1bWVu
dHMiX3MpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwor
ICAgIH0KKworICAgIGF1dG8gY29ubmVjdGlvbiA9IHByb2Nlc3NUYXJnZXRGcm9tQXJndW1lbnQo
Z2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgaWYgKCFjb25uZWN0
aW9uKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAg
ICBhdXRvIGRlc3RpbmF0aW9uSUQgPSBkZXN0aW5hdGlvbklERnJvbUFyZ3VtZW50KGdsb2JhbE9i
amVjdCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pOworICAgIGlmICghZGVzdGluYXRpb25JRCkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgYXV0
byBtZXNzYWdlSUQgPSBtZXNzYWdlSURGcm9tQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCBhcmd1bWVu
dHNbMl0sIGV4Y2VwdGlvbik7CisgICAgaWYgKCFtZXNzYWdlSUQpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIGF1dG8gZW5jb2RlciA9IG1ha2VV
bmlxdWU8SVBDOjpFbmNvZGVyPihzdGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPihzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oKm1lc3NhZ2VJRCkpLCAqZGVzdGluYXRpb25JRCk7CisKKyAgICBpZiAo
YXJndW1lbnRDb3VudCA+IDMpIHsKKyAgICAgICAgaWYgKCFlbmNvZGVBcmd1bWVudCgqZW5jb2Rl
ciwgKmpzSVBDLCBjb250ZXh0LCBhcmd1bWVudHNbM10sIGV4Y2VwdGlvbikpCisgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorCisgICAgLy8g
RklYTUU6IEFkZCB0aGUgc3VwcG9ydCBmb3Igc3BlY2lmeWluZyBJUEMgb3B0aW9ucy4KKworICAg
IGNvbm5lY3Rpb24tPnNlbmRNZXNzYWdlKFdURk1vdmUoZW5jb2RlciksIHsgfSk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK0pTVmFsdWVSZWYgSlNJ
UEM6OnNlbmRTeW5jTWVzc2FnZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgYXV0byogZ2xv
YmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGds
b2JhbE9iamVjdC0+dm0oKSk7CisgICAgYXV0byBqc0lQQyA9IG1ha2VSZWZQdHIodG9XcmFwcGVk
KGNvbnRleHQsIHRoaXNPYmplY3QpKTsKKyAgICBpZiAoIWpzSVBDKSB7CisgICAgICAgICpleGNl
cHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGNvbnRleHQpLCAiV3Jvbmcg
dHlwZSJfcykpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CisgICAgfQorCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCA0KSB7CisgICAgICAgICpleGNlcHRp
b24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGNvbnRleHQpLCAiTXVzdCBzcGVj
aWZ5IHRoZSB0YXJnZXQgcHJvY2VzcywgZGVzaW5hdGlvbiBJRCwgbWVzc2FnZSBJRCwgYW5kIHRp
bWVvdXQgYXMgdGhlIGZpcnN0IGZvdXIgYXJndW1lbnRzIl9zKSk7CisgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisKKyAgICBhdXRvIGNvbm5lY3Rp
b24gPSBwcm9jZXNzVGFyZ2V0RnJvbUFyZ3VtZW50KGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzBd
LCBleGNlcHRpb24pOworICAgIGlmICghY29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgYXV0byBkZXN0aW5hdGlvbklEID0gZGVz
dGluYXRpb25JREZyb21Bcmd1bWVudChnbG9iYWxPYmplY3QsIGFyZ3VtZW50c1sxXSwgZXhjZXB0
aW9uKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uSUQpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIGF1dG8gbWVzc2FnZUlEID0gbWVzc2FnZUlERnJv
bUFyZ3VtZW50KGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pOworICAgIGlm
ICghbWVzc2FnZUlEKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CisKKyAgICBTZWNvbmRzIHRpbWVvdXQ7CisgICAgeworICAgICAgICBhdXRvIGpzVmFsdWUg
PSB0b0pTKGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzNdKTsKKyAgICAgICAgaWYgKCFqc1ZhbHVl
LmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0
ZVR5cGVFcnJvcihnbG9iYWxPYmplY3QsICJ0aW1lb3V0IG11c3QgYmUgYSBudW1iZXIiX3MpKTsK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAg
ICAgfQorICAgICAgICB0aW1lb3V0ID0gU2Vjb25kcyB7IGpzVmFsdWUuYXNOdW1iZXIoKSB9Owor
ICAgIH0KKyAgICAKKyAgICAvLyBGSVhNRTogU3VwcG9ydCB0aGUgb3B0aW9ucy4KKworICAgIHVp
bnQ2NF90IHN5bmNSZXF1ZXN0SUQgPSAwOworICAgIGF1dG8gZW5jb2RlciA9IGNvbm5lY3Rpb24t
PmNyZWF0ZVN5bmNNZXNzYWdlRW5jb2RlcihzdGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPihz
dGF0aWNfY2FzdDx1aW50NjRfdD4oKm1lc3NhZ2VJRCkpLCAqZGVzdGluYXRpb25JRCwgc3luY1Jl
cXVlc3RJRCk7CisKKyAgICBpZiAoYXJndW1lbnRDb3VudCA+IDQpIHsKKyAgICAgICAgaWYgKCFl
bmNvZGVBcmd1bWVudCgqZW5jb2RlciwgKmpzSVBDLCBjb250ZXh0LCBhcmd1bWVudHNbNF0sIGV4
Y2VwdGlvbikpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CisgICAgfQorCisgICAgYXV0byByZXBseURlY29kZXIgPSBjb25uZWN0aW9uLT5zZW5kU3lu
Y01lc3NhZ2Uoc3luY1JlcXVlc3RJRCwgV1RGTW92ZShlbmNvZGVyKSwgdGltZW91dCwgeyB9KTsK
KyAgICAvLyBGSVhNRTogRGVjb2RlIHRoZSByZXBseS4KKworICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQzo6dmlzaXRlZExpbmtT
dG9yZUlEKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0
cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIHJldHVybiByZXRyaWV2ZUlE
KGNvbnRleHQsIHRoaXNPYmplY3QsIGV4Y2VwdGlvbiwgW10oSlNJUEMmIHdyYXBwZWQpIHsKKyAg
ICAgICAgYXV0byB3ZWJQYWdlID0gbWFrZVJlZigqd3JhcHBlZC5tX3dlYlBhZ2UpOworICAgICAg
ICByZXR1cm4gd2ViUGFnZS0+dmlzaXRlZExpbmtUYWJsZUlEKCk7CisgICAgfSk7Cit9CisKK0pT
VmFsdWVSZWYgSlNJUEM6OndlYlBhZ2VQcm94eUlEKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQor
eworICAgIHJldHVybiByZXRyaWV2ZUlEKGNvbnRleHQsIHRoaXNPYmplY3QsIGV4Y2VwdGlvbiwg
W10oSlNJUEMmIHdyYXBwZWQpIHsKKyAgICAgICAgcmV0dXJuIHdyYXBwZWQubV93ZWJQYWdlLT53
ZWJQYWdlUHJveHlJRCgpOworICAgIH0pOworfQorCitKU1ZhbHVlUmVmIEpTSVBDOjpmcmFtZUlk
ZW50aWZpZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpT
U3RyaW5nUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgcmV0dXJuIHJldHJpZXZl
SUQoY29udGV4dCwgdGhpc09iamVjdCwgZXhjZXB0aW9uLCBbXShKU0lQQyYgd3JhcHBlZCkgewor
ICAgICAgICByZXR1cm4gd3JhcHBlZC5tX3dlYkZyYW1lLT5mcmFtZUlEKCkudG9VSW50NjQoKTsK
KyAgICB9KTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQzo6cmV0cmlldmVJRChKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBj
b25zdCBXVEY6OkZ1bmN0aW9uPHVpbnQ2NF90KEpTSVBDJik+JiBjYWxsYmFjaykKK3sKKyAgICBh
dXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOworICAgIGF1dG8mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworCisgICAgUmVm
UHRyPEpTSVBDPiB3cmFwcGVkID0gdG9XcmFwcGVkKGNvbnRleHQsIHRoaXNPYmplY3QpOworICAg
IGlmICghd3JhcHBlZCkgeworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVU
eXBlRXJyb3IodG9KUyhjb250ZXh0KSwgIldyb25nIHR5cGUiX3MpKTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIGF1dG8gaWQgPSBj
YWxsYmFjaygqd3JhcHBlZCk7CisgICAgSlNDOjpKU0NlbGwqIGpzVmFsdWUgPSBKU0M6OkpTQmln
SW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgaWQpOworICAgIHJldHVybiB0b1JlZih2bSwg
anNWYWx1ZSk7Cit9CisKK0pTVmFsdWVSZWYgSlNJUEM6Om1lc3NhZ2VzKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7Cisg
ICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayh2bSk7CisKKyAgICBhdXRvKiBpbXBsID0gdG9XcmFwcGVkKGNvbnRleHQsIHRoaXNPYmpl
Y3QpOworICAgIGlmICghaW1wbCkgeworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpj
cmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0KSwgIldyb25nIHR5cGUiX3MpKTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIEpTQzo6
SlNPYmplY3QqIG1lc3NhZ2VzT2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICBhdXRvIG5hbWVJZGVu
dCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElQQzo6TWVzc2FnZU5hbWU6
Okxhc3QpOyArK2kpIHsKKyAgICAgICAgYXV0byogbWVzc2FnZU5hbWUgPSBkZXNjcmlwdGlvbihz
dGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPihpKSk7CisKKyAgICAgICAgSlNDOjpKU09iamVj
dCogZGljdGlvbmFyeSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgICAgIGRpY3Rpb25hcnktPnB1dERpcmVj
dCh2bSwgbmFtZUlkZW50LCBKU0M6OkpTVmFsdWUoaSkpOworCisgICAgICAgIC8vIEZJWE1FOiBB
ZGQgYXJndW1lbnQgbmFtZXMuCisKKyAgICAgICAgbWVzc2FnZXNPYmplY3QtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBtZXNzYWdlTmFtZSksIGRpY3Rpb25h
cnkpOworICAgIH0KKworICAgIHJldHVybiB0b1JlZih2bSwgbWVzc2FnZXNPYmplY3QpOworfQor
Cit2b2lkIGluamVjdChXZWJQYWdlJiB3ZWJQYWdlLCBXZWJGcmFtZSYgd2ViRnJhbWUsIFdlYkNv
cmU6OkRPTVdyYXBwZXJXb3JsZCYgd29ybGQpCit7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0g
d2ViRnJhbWUuY29yZUZyYW1lKCktPnNjcmlwdCgpLmdsb2JhbE9iamVjdCh3b3JsZCk7CisKKyAg
ICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAg
YXV0byB3cmFwcGVkID0gSlNJUEM6OmNyZWF0ZSh3ZWJQYWdlLCB3ZWJGcmFtZSk7CisgICAgSlNP
YmplY3RSZWYgd3JhcHBlck9iamVjdCA9IEpTT2JqZWN0TWFrZSh0b0dsb2JhbFJlZihnbG9iYWxP
YmplY3QpLCBKU0lQQzo6d3JhcHBlckNsYXNzKCksIHdyYXBwZWQucHRyKCkpOworICAgIGdsb2Jh
bE9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJJ
UEMiKSwgdG9KUyhnbG9iYWxPYmplY3QsIHdyYXBwZXJPYmplY3QpKTsKKworICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIElQQ1Rlc3RpbmdBUEkKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKElQQ19URVNUSU5HX0FQSSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBET01X
cmFwcGVyV29ybGQ7CitjbGFzcyBGcmFtZTsKKworfTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYkZyYW1lOworY2xhc3MgV2ViUGFnZTsKKworbmFtZXNwYWNlIElQQ1Rlc3RpbmdB
UEkgeworCit2b2lkIGluamVjdChXZWJQYWdlJiwgV2ViRnJhbWUmLCBXZWJDb3JlOjpET01XcmFw
cGVyV29ybGQmKTsKKworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmgJKHJldmlzaW9u
IDI2ODE2NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgY2xhc3MgV2ViUGFnZTsKIHN0cnVjdCBG
cmFtZUluZm9EYXRhOwogc3RydWN0IFdlYnNpdGVQb2xpY2llc0RhdGE7CiAKLWNsYXNzIFdlYkZy
YW1lIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6QnVuZGxlRnJh
bWU+IHsKK2NsYXNzIFdlYkZyYW1lIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVj
dDo6VHlwZTo6QnVuZGxlRnJhbWU+LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8V2ViRnJhbWU+IHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFdlYkZyYW1lPiBjcmVhdGUoKSB7IHJldHVybiBhZG9w
dFJlZigqbmV3IFdlYkZyYW1lKTsgfQogICAgIHN0YXRpYyBSZWY8V2ViRnJhbWU+IGNyZWF0ZVN1
YmZyYW1lKFdlYlBhZ2UqLCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgV2ViQ29yZTo6SFRNTEZy
YW1lT3duZXJFbGVtZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjY4MTY1KQorKysgU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3ODQsNiArMzc4
NCwxMSBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlCiAgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI+
KCktPnVwZGF0ZVByZWZlcmVuY2VzKHNldHRpbmdzKTsKICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5zZXRVc2VHUFVQcm9jZXNzRm9yTWVkaWEoc2V0dGluZ3MudXNlR1BVUHJvY2Vzc0Zvck1l
ZGlhRW5hYmxlZCgpKTsKICNlbmRpZgorCisjaWYgRU5BQkxFKElQQ19URVNUSU5HX0FQSSkKKyAg
ICBtX2lwY1Rlc3RpbmdBUElFbmFibGVkID0gc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlBy
ZWZlcmVuY2VzS2V5OjppcGNUZXN0aW5nQVBJRW5hYmxlZEtleSgpKTsKKyAgICBtX3Zpc2l0ZWRM
aW5rVGFibGVJRCA9IHBhcmFtZXRlcnMudmlzaXRlZExpbmtUYWJsZUlEOworI2VuZGlmCiB9CiAK
ICNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiAyNjgxNjUpCisrKyBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMzksNiAr
MTMzOSwxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZUNPUlNEaXNhYmxpbmdQYXR0ZXJu
cyhWZWN0b3I8U3RyaW5nPiYmKTsKIAorI2lmIEVOQUJMRShJUENfVEVTVElOR19BUEkpCisgICAg
Ym9vbCBpcGNUZXN0aW5nQVBJRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXBjVGVzdGluZ0FQ
SUVuYWJsZWQ7IH0KKyAgICB1aW50NjRfdCB3ZWJQYWdlUHJveHlJRCgpIGNvbnN0IHsgcmV0dXJu
IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCk7IH0KKyAgICB1aW50NjRfdCB2aXNpdGVkTGlu
a1RhYmxlSUQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0ZWRMaW5rVGFibGVJRDsgfQorI2VuZGlm
CisKICAgICB2b2lkIGdldFByb2Nlc3NEaXNwbGF5TmFtZShDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFN0cmluZyYmKT4mJik7CiAKICAgICBXZWJDb3JlOjpBbGxvd3NDb250ZW50SmF2YVNjcmlwdCBh
bGxvd3NDb250ZW50SmF2YVNjcmlwdEZyb21Nb3N0UmVjZW50TmF2aWdhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fYWxsb3dzQ29udGVudEphdmFTY3JpcHRGcm9tTW9zdFJlY2VudE5hdmlnYXRpb247
IH0KQEAgLTIxNzEsNiArMjE3NywxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jYW5Vc2VDcmVk
ZW50aWFsU3RvcmFnZSB7IHRydWUgfTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IG1fY29yc0Rpc2Fi
bGluZ1BhdHRlcm5zOworCisjaWYgRU5BQkxFKElQQ19URVNUSU5HX0FQSSkKKyAgICBib29sIG1f
aXBjVGVzdGluZ0FQSUVuYWJsZWQgeyBmYWxzZSB9OworICAgIHVpbnQ2NF90IG1fdmlzaXRlZExp
bmtUYWJsZUlEOworI2VuZGlmCiB9OwogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCkluZGV4
OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyNjgxNzUpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NiBAQAorMjAyMC0xMC0wOCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAg
ICAgICBNYWtlIGl0IHBvc3NpYmxlIHRvIHNlbmQgYW4gYXJiaXRyYXJ5IElQQyBtZXNzYWdlIGZy
b20gSmF2YVNjcmlwdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE3NDIzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82OTk2OTM1MT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSVBDVGVzdGluZ0FQSS5tbTogQWRkZWQuCisgICAg
ICAgICgtW0lQQ1Rlc3RpbmdBUElEZWxlZ2F0ZSB3ZWJWaWV3OnJ1bkphdmFTY3JpcHRBbGVydFBh
bmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAg
ICAgICAgKFRFU1QpOgorCiAyMDIwLTEwLTA3ICBBZGl0eWEgS2VlcnRoaSAgPGFrZWVydGhpQGFw
cGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyNjgxMjMpOiBbIGlPUyBdIDQgVGVzdFdl
YktpdEFQSS5XZWJLaXRMZWdhY3kgZmFpbHVyZXM6IEZpbGUgbmFtZSB1bmF2YWlsYWJsZS4gVW5r
bm93biBDKysgZXhjZXB0aW9uIHRocm93biBpbiB0aGUgdGVzdCBib2R5LgpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2ODE2NSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC04NDYsNiArODQ2LDcgQEAKIAkJOUI0RjhGQTcxNTlENTJERDAwMkQ5Rjk0IC8qIEhUTUxDb2xs
ZWN0aW9uTmFtZWRJdGVtLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOUI0RjhGQTYxNTlENTJDQTAwMkQ5Rjk0IC8qIEhUTUxDb2xsZWN0
aW9uTmFtZWRJdGVtLmh0bWwgKi87IH07CiAJCTlCNTlGMTJBMjAzNDA4NkYwMDlFNjNENSAvKiBt
c28tbGlzdC1jb21wYXQtbW9kZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNTlGMTI5MjAzNDA4NTQwMDlFNjNENSAvKiBtc28tbGlz
dC1jb21wYXQtbW9kZS5odG1sICovOyB9OwogCQk5QjYyNjMwQzFGOEMyNUM4MDA3RUUyOUIgLyog
Y29weS11cmwuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5QjYyNjMwQjFGOEMyNTEwMDA3RUUyOUIgLyogY29weS11cmwuaHRtbCAqLzsg
fTsKKwkJOUI2RDlGRjkyNTJFRkRFNTAwQTUxNjQwIC8qIElQQ1Rlc3RpbmdBUEkubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjZEOUZGODI1MkVGREU1
MDBBNTE2NDAgLyogSVBDVGVzdGluZ0FQSS5tbSAqLzsgfTsKIAkJOUI3QTM3QzQxRjhBRUJBNTAw
NEFBMjI4IC8qIENvcHlVUkwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5QjdBMzdDMjFGOEFFQkE1MDA0QUEyMjggLyogQ29weVVSTC5tbSAqLzsgfTsK
IAkJOUI3RDc0MEYxRjgzNzg3NzAwMDZDNDMyIC8qIHBhc3RlLXJ0ZmQuaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjdENzQwRTFGODM3
N0U2MDAwNkM0MzIgLyogcGFzdGUtcnRmZC5odG1sICovOyB9OwogCQk5QjkzMzJDRTIzMjBDNzQ1
MDAyRDUwRTggLyogY29jb2Etd3JpdGVyLW1hcmt1cC13aXRoLWxpc3RzLmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI5MzMyQ0QyMzIw
QzczRTAwMkQ1MEU4IC8qIGNvY29hLXdyaXRlci1tYXJrdXAtd2l0aC1saXN0cy5odG1sICovOyB9
OwpAQCAtMjQ1Niw2ICsyNDU3LDcgQEAKIAkJOUI0RjhGQTYxNTlENTJDQTAwMkQ5Rjk0IC8qIEhU
TUxDb2xsZWN0aW9uTmFtZWRJdGVtLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBI
VE1MQ29sbGVjdGlvbk5hbWVkSXRlbS5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QjU5RjEyOTIwMzQwODU0MDA5RTYzRDUgLyogbXNvLWxpc3QtY29tcGF0LW1vZGUuaHRtbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRt
bDsgcGF0aCA9ICJtc28tbGlzdC1jb21wYXQtbW9kZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUI2MjYzMEIxRjhDMjUxMDAwN0VFMjlCIC8qIGNvcHktdXJsLmh0bWwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7
IHBhdGggPSAiY29weS11cmwuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlC
NkQ5RkY4MjUyRUZERTUwMEE1MTY0MCAvKiBJUENUZXN0aW5nQVBJLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gSVBDVGVzdGluZ0FQSS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OUI3OTE2NEYxQkQ4OUQwRDAwRDUwQjhGIC8qIEZpcnN0UmVzcG9uZGVyU2Nyb2xsaW5nUG9zaXRp
b24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGaXJzdFJlc3Bv
bmRlclNjcm9sbGluZ1Bvc2l0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
QjdBMzdDMjFGOEFFQkE1MDA0QUEyMjggLyogQ29weVVSTC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IENvcHlVUkwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCN0Q3NDBFMUY4
Mzc3RTYwMDA2QzQzMiAvKiBwYXN0ZS1ydGZkLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAicGFzdGUtcnRmZC5o
dG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMyNjcsNiArMzI2OSw3IEBACiAJ
CQkJQ0VENzNEMzUyNDZGMjA0QzAwREFFMzI3IC8qIEluc2VydFRleHRBbHRlcm5hdGl2ZXMubW0g
Ki8sCiAJCQkJMkRCMDIzMkUxRTRFODcxODAwNzA3MTIzIC8qIEludGVyYWN0aW9uRGVhZGxvY2tB
ZnRlckNyYXNoLm1tICovLAogCQkJCTJEMTE2RTEyMjNFMENCMzkwMDIwODkwMCAvKiBpT1NNb3Vz
ZVN1cHBvcnQubW0gKi8sCisJCQkJOUI2RDlGRjgyNTJFRkRFNTAwQTUxNjQwIC8qIElQQ1Rlc3Rp
bmdBUEkubW0gKi8sCiAJCQkJNUM2OUJERDQxRjgyQTdFQjAwMEY0RjRCIC8qIEphdmFTY3JpcHRE
dXJpbmdOYXZpZ2F0aW9uLm1tICovLAogCQkJCTVDMDE2MEMwMjFBMTMyMzIwMDc3RkEzMiAvKiBK
SVRFbmFibGVkLm1tICovLAogCQkJCUMyNUNDQTA1MUU1MTM4MEIwMDI2Q0I4QSAvKiBMaW5lQnJl
YWtpbmcubW0gKi8sCkBAIC01MjIyLDYgKzUyMjUsNyBAQAogCQkJCTdBOTA5QTgyMUQ4Nzc0ODAw
MDdFMTBGOCAvKiBJbnRSZWN0VGVzdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0E5MDlBODMx
RDg3NzQ4MDAwN0UxMEY4IC8qIEludFNpemVUZXN0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQky
RDExNkUxMzIzRTBDQjNBMDAyMDg5MDAgLyogaU9TTW91c2VTdXBwb3J0Lm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJOUI2RDlGRjkyNTJFRkRFNTAwQTUxNjQwIC8qIElQQ1Rlc3RpbmdBUEkubW0gaW4g
U291cmNlcyAqLywKIAkJCQk1QzBCRjg5MzFERDU5OUJEMDBCMDAzMjggLyogSXNOYXZpZ2F0aW9u
QWN0aW9uVHJ1c3RlZC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNENUZGNDlGMjE2MkU5NDMwMDRC
RDg2RiAvKiBJU09Cb3guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM2OUJERDUxRjgyQTdFRjAw
MEY0RjRCIC8qIEphdmFTY3JpcHREdXJpbmdOYXZpZ2F0aW9uLm1tIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lQQ1Rlc3RpbmdBUEku
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
UENUZXN0aW5nQVBJLm1tCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSVBDVGVzdGluZ0FQSS5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisKKyNpbXBvcnQgIlRlc3RX
S1dlYlZpZXcuaCIKKyNpbXBvcnQgIlV0aWxpdGllcy5oIgorI2ltcG9ydCA8V2ViS2l0L1dLTmF2
aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNQ
cml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Lmg+CisjaW1wb3J0IDxXZWJLaXQv
X1dLSW50ZXJuYWxEZWJ1Z0ZlYXR1cmUuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKwor
c3RhdGljIGJvb2wgZG9uZSA9IGZhbHNlOworc3RhdGljIFJldGFpblB0cjxOU1N0cmluZz4gYWxl
cnRNZXNzYWdlOworCitAaW50ZXJmYWNlIElQQ1Rlc3RpbmdBUElEZWxlZ2F0ZSA6IE5TT2JqZWN0
IDxXS1VJRGVsZWdhdGU+CitAZW5kCisgICAgCitAaW1wbGVtZW50YXRpb24gSVBDVGVzdGluZ0FQ
SURlbGVnYXRlCisKKy0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBydW5KYXZh
U2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgaW5pdGlhdGVk
QnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiko
dm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBhbGVydE1lc3NhZ2UgPSBtZXNzYWdlOwor
ICAgIGRvbmUgPSB0cnVlOworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cit9CisKK0BlbmQKKwor
VEVTVChJUENUZXN0aW5nQVBJLCBJc0Rpc2FibGVkQnlEZWZhdWx0KQoreworICAgIGF1dG8gd2Vi
VmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFr
ZVJlY3QoMCwgMCwgNDAwLCA0MDApXSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhb
W0lQQ1Rlc3RpbmdBUElEZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNldFVJ
RGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJW
aWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPjxzY3JpcHQ+
YWxlcnQodHlwZW9mKElQQykpOzwvc2NyaXB0PiJdOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZG9uZSk7CisgICAgRVhQRUNUX1NUUkVRKFthbGVydE1lc3NhZ2UgVVRGOFN0cmluZ10s
ICJ1bmRlZmluZWQiKTsKK30KKworI2lmIEVOQUJMRShJUENfVEVTVElOR19BUEkpCisKK1RFU1Qo
SVBDVGVzdGluZ0FQSSwgQ2FuU2VuZEFsZXJ0KQoreworICAgIFJldGFpblB0cjxXS1dlYlZpZXdD
b25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBmb3IgKF9XS0ludGVybmFsRGVidWdGZWF0dXJlICpm
ZWF0dXJlIGluIFtXS1ByZWZlcmVuY2VzIF9pbnRlcm5hbERlYnVnRmVhdHVyZXNdKSB7CisgICAg
ICAgIGlmIChbZmVhdHVyZS5rZXkgaXNFcXVhbFRvU3RyaW5nOkAiSVBDVGVzdGluZ0FQSUVuYWJs
ZWQiXSkgeworICAgICAgICAgICAgW1tjb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBfc2V0RW5h
YmxlZDpZRVMgZm9ySW50ZXJuYWxEZWJ1Z0ZlYXR1cmU6ZmVhdHVyZV07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBSZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4gd2Vi
VmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFr
ZVJlY3QoMCwgMCwgMzAwLCAzMDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0p
OworCisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tJUENUZXN0aW5nQVBJRGVsZWdhdGUg
YWxsb2NdIGluaXRdKTsKKyAgICBbd2ViVmlldyBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgp
XTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhU
TUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRtbD48c2NyaXB0PklQQy5zZW5kU3luY01lc3NhZ2UoJ1VJ
JywgSVBDLndlYlBhZ2VQcm94eUlELCBJUEMubWVzc2FnZXMuV2ViUGFnZVByb3h5X1J1bkphdmFT
Y3JpcHRBbGVydC5uYW1lLCAxMDAsIgorICAgICAgICAiW3t0eXBlOiAndWludDY0X3QnLCB2YWx1
ZTogSVBDLmZyYW1lSWRlbnRpZmllcn0sIHt0eXBlOiAnRnJhbWVJbmZvRGF0YSd9LCB7J3R5cGUn
OiAnU3RyaW5nJywgJ3ZhbHVlJzogJ2hpJ31dKTs8L3NjcmlwdD4iXTsKKyAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgRVhQRUNUX1NUUkVRKFthbGVydE1lc3NhZ2Ug
VVRGOFN0cmluZ10sICJoaSIpOworfQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410857</attachid>
            <date>2020-10-08 10:07:17 -0700</date>
            <delta_ts>2020-10-08 15:43:18 -0700</delta_ts>
            <desc>Fixed debug builds</desc>
            <filename>bug-217423-20201008100716.patch</filename>
            <type>text/plain</type>
            <size>52391</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjY4MTY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDIwLTEwLTA4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAg
IE1ha2UgaXQgcG9zc2libGUgdG8gc2VuZCBhbiBhcmJpdHJhcnkgSVBDIG1lc3NhZ2UgZnJvbSBK
YXZhU2NyaXB0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTc0MjMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY5OTY5MzUxPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgaGVscGVyIGZ1bmN0
aW9uIHRvIGdldCB1aW50NjRfdCBvdXQgb2YgQmlnSW50LgorCisgICAgICAgICogcnVudGltZS9K
U0JpZ0ludC5jcHA6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0b1VpbnQ2NEhlYXApOiBBZGRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50Lmg6CisgICAgICAgIChKU0M6OkpTQmlnSW50
Ojp0b1VpbnQ2NCk6IEFkZGVkLgorCiAyMDIwLTEwLTA3ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5r
aXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAgICBbSlNDXSBSZXZlcnQgU3RyaW5nLnByb3RvdHlw
ZS5pdGVtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3Bw
CShyZXZpc2lvbiAyNjgxNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jp
Z0ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNDksNiArMzA0OSwyOSBAQCBKU1ZhbHVlIEpT
QmlnSW50Ojphc1VpbnROKEpTR2xvYmFsT2JqZWN0CiB9CiAjZW5kaWYKIAorT3B0aW9uYWw8dWlu
dDY0X3Q+IEpTQmlnSW50Ojp0b1VpbnQ2NEhlYXAoSlNCaWdJbnQqIGJpZ0ludCkKK3sKKyAgICBh
dXRvIGxlbmd0aCA9IGJpZ0ludC0+bGVuZ3RoKCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAg
IHJldHVybiAwOworICAgIGlmIChiaWdJbnQtPnNpZ24oKSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90KSA9PSBzaXplb2Yo
RGlnaXQpIHx8IHNpemVvZih1aW50NjRfdCkgPT0gc2l6ZW9mKERpZ2l0KSAqIDIsICJEaWdpdCBt
dXN0IGJlIGVpdGhlciAzMi1iaXQgb3IgNjQtYml0Iik7CisgICAgaWYgKHNpemVvZih1aW50NjRf
dCkgPT0gc2l6ZW9mKERpZ2l0KSkgeworICAgICAgICBpZiAobGVuZ3RoID4gMSkKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBiaWdJbnQtPmRpZ2l0KDAp
OworICAgIH0KKworICAgIGlmIChsZW5ndGggPiAyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIHVpbnQ2NF90IHJlc3VsdCA9IGJpZ0ludC0+ZGlnaXQoMCk7CisgICAgaWYgKGxl
bmd0aCA9PSAxKQorICAgICAgICByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJpZ0lu
dC0+ZGlnaXQoMCkpIDw8IDMyOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIHVuc2lnbmVkIGNvbXB1dGVIYXNoKEpTQmlnSW50OjpEaWdpdCogZGlnaXRzLCB1
bnNpZ25lZCBsZW5ndGgsIGJvb2wgc2lnbikKIHsKICAgICBIYXNoZXIgaGFzaGVyOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCShyZXZpc2lvbiAyNjgxNjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNCaWdJbnQqIHRyeUNy
ZWF0ZUZyb20oVk0mLCBpbnQzMl90IHZhbHVlKTsKICAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0
ZUZyb20oSlNHbG9iYWxPYmplY3QqLCB1aW50MzJfdCB2YWx1ZSk7CiAgICAgc3RhdGljIEpTQmln
SW50KiBjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiwgaW50NjRfdCB2YWx1ZSk7Ci0gICAgc3Rh
dGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiwgdWludDY0X3QgdmFsdWUp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShKU0ds
b2JhbE9iamVjdCosIHVpbnQ2NF90IHZhbHVlKTsKICAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0
ZUZyb20oSlNHbG9iYWxPYmplY3QqLCBib29sIHZhbHVlKTsKICAgICBzdGF0aWMgSlNCaWdJbnQq
IGNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqLCBkb3VibGUgdmFsdWUpOwogCkBAIC00MjIsNiAr
NDIyLDIwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNWYWx1ZSBhc1VpbnROKEpTR2xvYmFsT2Jq
ZWN0KiwgdWludDY0X3QgbnVtYmVyT2ZCaXRzLCBpbnQzMl90IGJpZ0ludEFzSW50MzIpOwogI2Vu
ZGlmCiAKKyAgICBzdGF0aWMgT3B0aW9uYWw8dWludDY0X3Q+IHRvVWludDY0KEpTVmFsdWUgYmln
SW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJpZ0ludC5pc0JpZ0ludCgpKTsKKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgICAgIGlmIChiaWdJbnQuaXNCaWdJbnQzMigpKSB7CisgICAgICAgICAg
ICBhdXRvIHZhbHVlID0gYmlnSW50LmJpZ0ludDMyQXNJbnQzMigpOworICAgICAgICAgICAgaWYg
KHZhbHVlIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHRv
VWludDY0SGVhcChqc0Nhc3Q8SlNCaWdJbnQqPihiaWdJbnQpKTsKKyAgICB9CisKICAgICBEaWdp
dCBkaWdpdCh1bnNpZ25lZCk7CiAgICAgdm9pZCBzZXREaWdpdCh1bnNpZ25lZCwgRGlnaXQpOyAv
LyBVc2Ugb25seSB3aGVuIGluaXRpYWxpemluZy4KICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0Jp
Z0ludCogcmlnaHRUcmltKEpTR2xvYmFsT2JqZWN0Kik7CkBAIC01NzYsNiArNTkwLDggQEAgcHJp
dmF0ZToKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KICAgICBzdGF0aWMgSW1w
bFJlc3VsdCB0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKEpTR2xvYmFsT2JqZWN0KiwgaW50
MzJfdCwgQmlnSW50SW1wbCwgYm9vbCByZXN1bHRTaWduKTsKIAorICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBPcHRpb25hbDx1aW50NjRfdD4gdG9VaW50NjRIZWFwKEpTQmlnSW50Kik7CisK
ICAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBvZmZzZXRPZkRhdGEoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0JpZ0ludCwgbV9kYXRhKTsKSW5kZXg6IFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lv
biAyNjgxNjUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE5IEBACisyMDIwLTEwLTA4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIE1ha2UgaXQgcG9zc2libGUgdG8gc2VuZCBhbiBhcmJpdHJhcnkgSVBDIG1lc3Nh
Z2UgZnJvbSBKYXZhU2NyaXB0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTc0MjMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY5OTY5MzUxPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgY29t
cGlsZSB0aW1lIGZsYWcgKEVOQUJMRV9JUENfVEVTVElOR19BUEkpIGFuZCBhIHJ1bnRpbWUgZmxh
ZyAoSVBDVGVzdGluZ0FQSUVuYWJsZWQpCisgICAgICAgIGZvciB0aGUgSmF2YVNjcmlwdCBBUEkg
dG8gdGVzdCBJUEMuCisKKyAgICAgICAgKiBTY3JpcHRzL0dlbmVyYXRlUHJlZmVyZW5jZXMucmI6
CisgICAgICAgIChQcmVmZXJlbmNlOjpuYW1lTG93ZXIpOiBLZWVwIElQQyB1cHBlcmNhc2UuCisg
ICAgICAgICogU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0ludGVybmFsLnlhbWw6
IEFkZGVkIElQQ1Rlc3RpbmdBUElFbmFibGVkLgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybUVuYWJs
ZS5oOiBBZGRlZCBFTkFCTEVfSVBDX1RFU1RJTkdfQVBJLgorCiAyMDIwLTEwLTA3ICBLZWl0aCBS
b2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgcG9zdC1wcm9jZXNz
aW5nIHJ1bGVzIGZvciBoZWFkZXJzIHRvIG5vdCB1bm5lY2Vzc2FyaWx5IGNoYW5nZSB0aW1lc3Rh
bXBzCkluZGV4OiBTb3VyY2UvV1RGL1NjcmlwdHMvR2VuZXJhdGVQcmVmZXJlbmNlcy5yYgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL1NjcmlwdHMvR2VuZXJhdGVQcmVmZXJlbmNlcy5yYgkocmV2
aXNpb24gMjY4MTY1KQorKysgU291cmNlL1dURi9TY3JpcHRzL0dlbmVyYXRlUHJlZmVyZW5jZXMu
cmIJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCBjbGFzcyBQcmVmZXJlbmNlCiAg
ICAgICBAZ2V0dGVyCiAgICAgZWxzaWYgQG5hbWUuc3RhcnRfd2l0aD8oIlZQIikKICAgICAgIEBu
YW1lWzAuLjFdLmRvd25jYXNlICsgQG5hbWVbMi4uQG5hbWUubGVuZ3RoXQotICAgIGVsc2lmIEBu
YW1lLnN0YXJ0X3dpdGg/KCJDU1MiLCAiWFNTIiwgIkZUUCIsICJET00iLCAiRE5TIiwgIlBERiIs
ICJJQ0UiKQorICAgIGVsc2lmIEBuYW1lLnN0YXJ0X3dpdGg/KCJDU1MiLCAiRE9NIiwgIkROUyIs
ICJGVFAiLCAiSUNFIiwgIklQQyIsICJQREYiLCAiWFNTIikKICAgICAgIEBuYW1lWzAuLjJdLmRv
d25jYXNlICsgQG5hbWVbMy4uQG5hbWUubGVuZ3RoXQogICAgIGVsc2lmIEBuYW1lLnN0YXJ0X3dp
dGg/KCJIVFRQIikKICAgICAgIEBuYW1lWzAuLjNdLmRvd25jYXNlICsgQG5hbWVbNC4uQG5hbWUu
bGVuZ3RoXQpJbmRleDogU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVu
Y2VzSW50ZXJuYWwueWFtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVy
ZW5jZXMvV2ViUHJlZmVyZW5jZXNJbnRlcm5hbC55YW1sCShyZXZpc2lvbiAyNjgxNjUpCisrKyBT
b3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNJbnRlcm5hbC55YW1s
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNiArMjc5LDE3IEBAIElDRUNhbmRpZGF0ZUZpbHRlcmlu
Z0VuYWJsZWQ6CiAgICAgV2ViS2l0OgogICAgICAgZGVmYXVsdDogdHJ1ZQogCitJUENUZXN0aW5n
QVBJRW5hYmxlZDoKKyAgdHlwZTogYm9vbAorICBodW1hblJlYWRhYmxlTmFtZTogIklQQyBUZXN0
aW5nIEFQSSIKKyAgaHVtYW5SZWFkYWJsZURlc2NyaXB0aW9uOiAiRW5hYmxlIElQQyBUZXN0aW5n
IEFQSSBmb3IgSmF2YVNjcmlwdCIKKyAgd2ViY29yZUJpbmRpbmc6IG5vbmUKKyAgY29uZGl0aW9u
OiBFTkFCTEUoSVBDX1RFU1RJTkdfQVBJKQorICBleHBvc2VkOiBbIFdlYktpdCBdCisgIGRlZmF1
bHRWYWx1ZToKKyAgICBXZWJLaXQ6CisgICAgICBkZWZhdWx0OiBmYWxzZQorCiBJbnB1dFR5cGVD
b2xvckVuYWJsZWQ6CiAgIHR5cGU6IGJvb2wKICAgaHVtYW5SZWFkYWJsZU5hbWU6ICJDb2xvciBJ
bnB1dHMiCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgJKHJldmlzaW9uIDI2ODE2NSkKKysr
IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw2
ICszMTUsMTMgQEAKICNkZWZpbmUgRU5BQkxFX0lOUFVUX1RZUEVfV0VFSyAwCiAjZW5kaWYKIAor
I2lmICFkZWZpbmVkKEVOQUJMRV9JUENfVEVTVElOR19BUEkpCisvKiBFbmFibGUgSVBDIHRlc3Rp
bmcgb24gYWxsIEFTQU4gYnVpbGRzIGFuZCBkZWJ1ZyBidWlsZHMuICovCisjaWYgQVNBTl9FTkFC
TEVEIHx8ICFkZWZpbmVkKE5ERUJVRykKKyNkZWZpbmUgRU5BQkxFX0lQQ19URVNUSU5HX0FQSSAx
CisjZW5kaWYKKyNlbmRpZgorCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfREFURSkgfHwgRU5BQkxF
KElOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkgfHwgRU5BQkxFKElOUFVUX1RZUEVfTU9OVEgpIHx8
IEVOQUJMRShJTlBVVF9UWVBFX1RJTUUpIHx8IEVOQUJMRShJTlBVVF9UWVBFX1dFRUspCiAjaWYg
IWRlZmluZWQoRU5BQkxFX0RBVEVfQU5EX1RJTUVfSU5QVVRfVFlQRVMpCiAjZGVmaW5lIEVOQUJM
RV9EQVRFX0FORF9USU1FX0lOUFVUX1RZUEVTIDEKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjgx
NjUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDc4IEBACisyMDIwLTEwLTA4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisg
ICAgICAgIE1ha2UgaXQgcG9zc2libGUgdG8gc2VuZCBhbiBhcmJpdHJhcnkgSVBDIG1lc3NhZ2Ug
ZnJvbSBKYXZhU2NyaXB0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTc0MjMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY5OTY5MzUxPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50
cm9kdWNlcyB0aGUgSmF2YVNjcmlwdCBBUEkgKHdpbmRvdy5JUEMpIHRvIHNlbmQgSVBDIG91dCBv
ZiBXZWJDb250ZW50IHByb2Nlc3MuCisgICAgICAgIFRoZSBmZWF0dXJlIGlzIGNvbXBpbGVkIGlu
IHVuZGVyIEFTQU4gYW5kIERlYnVnIGJ1aWxkcyBhbmQgY2FuIGJlIGVuYWJsZWQgYXQgcnVudGlt
ZS4KKworICAgICAgICB3aW5kb3cuSVBDIGhhcyB0d28gbWV0aG9kczogc2VuZE1lc3NhZ2UgYW5k
IHNlbmRTeW5jTWVzc2FnZSB3aGljaCBzZW5kcyBhbiBhc3luYyBhbmQgc3luYyBJUEMgcmVzcGVj
dGl2ZWx5LgorICAgICAgICBJdCB0YWtlcyB0aGUgZGVzdGluYXRpb24gcHJvY2VzcyBuYW1lIChV
SSwgR1BVLCBvciBOZXR3b3JraW5nKSwgdGhlIGRlc3RpbmF0b2luIElEIChlLmcuIFdlYlBhZ2VQ
cm94eSBJRCksCisgICAgICAgIG1lc3NhZ2UgSUQsIHRpbWVvdXQgZm9yIHNlbmRTeW5jTWVzc2Fn
ZSwgYW5kIG9wdGlvbmFsbHkgSVBDIG1lc3NhZ2UgYXJndW1lbnRzLiBUaGUgbWVzc2FnZSBhcmd1
bWVudHMgY2FuIGJlCisgICAgICAgIHBhc3NlZCBpbiBhcyBhIFR5cGVkQXJyYXkgb3IgQXJyYXlC
dWZmZXIsIG9yIGEgSmF2YVNjcmlwdCBhcnJheSB0aGF0IHJlY3Vyc2l2ZWx5IGRlc2NyaWJlcyBl
bmNvZGVkIG9iamVjdHMuCisKKyAgICAgICAgRWFjaCBvYmplY3QgY2FuIGJlIGVpdGhlciBhIFR5
cGVkQXJyYXkgb3IgQXJyYXlCdWZmZXIsIHdoaWNoIHdpbGwgYmUgdHJlYXRlZCBhcyBlbmNvZGVk
IG1lc3NhZ2UsIGFuIGFycmF5CisgICAgICAgIHdoaWNoIHdpbGwgYmUgZW5jb2RlZCBhcyBhIFZl
Y3RvciB3aXRoIGVhY2ggaXRlbSB3aXRoaW4gdGhlIGFycmF5IGVuY29kZWQgcmVjdXJzaXZlbHks
IG9yIGEgZGljdGlvbmFyeSB3aGljaAorICAgICAgICBkZXNjcmliZXMgYSBzcGVjaWZpYyB0eXBl
LgorCisgICAgICAgIFdoZW4gYSBzcGVjaWZpYyB0eXBlIGlzIGRlc2NyaWJlZCB2aWEgYSBkaWN0
aW9uYXJ5LCAidmFsdWUiIGlzIGVuY29lZCBiYXNlZCBvbiAidHlwZSIgYXMgZm9sbG93czoKKyAg
ICAgICAgIC0gV2hlbiAidHlwZSIgaXMgIlN0cmluZyIsICJ2YWx1ZSIgaXMgZW5jb2RlZCBhcyBh
IFdURjo6U3RyaW5nLCB0cmVhdGluZyBudWxsIG9yIHVuZGVmaW5lZCBhcyBhIG51bGwgc3RyaW5n
LgorICAgICAgICAgLSBXaGVuICJ0eXBlIiBpcyAiYm9vbCIsICJpbnQ4X3QiLCAiaW50MTZfdCIs
ICJpbnQzMl90IiwgImludDY0X3QiLCAidWludDhfdCIsICJ1aW50MTZfdCIsICJ1aW50MzJfdCIs
CisgICAgICAgICAgIG9yICJ1aW50NjRfdCIsICJ2YWx1ZSIgKHdoaWNoIGNhbiBiZSBCaWdJbnQg
b3IgYSBudW1iZXIpIGlzIGVuY29kZWQgYXMgdGhlIHJlc3BlY3RpdmUgQysrIHR5cGUuCisgICAg
ICAgICAtIFdoZW4gInR5cGUiIGlzICJSR0JBIiwgInZhbHVlIiBpcyB1c2VkIGFzIFBhY2tlZENv
bG9yOjpSR0JBIHRvIGNvbnN0cnVjdCBXZWJDb3JlOjpDb2xvciB0byBiZSBlbmNvZGVkLgorICAg
ICAgICAgLSBXaGVuICJ0eXBlIiBpcyAiSW50UmVjdCIgb3IgIkZsb2F0UmVjdCIsICJ4IiwgInki
LCAid2lkdGgiLCBhbmQgImhlaWdodCIgYXJlIHRyZWF0ZWQgYXMgcmVzcGVjdGl2ZSB2YWx1ZXMK
KyAgICAgICAgICAgb2YgSW50UmVjdCBvciBGbG9hdFJlY3QgQysrIG9iamVjdHMsIGFuZCB0aGUg
Y29uc3RydWN0ZWQgKlJlY3QgaXMgZW5jb2RlZC4gCisgICAgICAgICAtIFdoZW4gInR5cGUiIGlz
ICJGcmFtZUluZm9EYXRhIiwgdGhlIGNvbnRleHQgb2JqZWN0J3MgV2ViRnJhbWUncyBGcmFtZUlu
Zm9EYXRhIGlzIGVuY29kZWQuCisKKyAgICAgICAgVGhlIGxpc3Qgb2YgSVBDIG1lc3NhZ2VzIGFy
ZSBleHBvc2VkIG9uIHdpbmRvdy5JUEMubWVzc2FnZXMsIGFuZCBWaXNpdGVkTGlua1N0b3JlIElE
LCBXZWJQYWdlUHJveHkgSUQsCisgICAgICAgIGFuZCBmcmFtZSBpZGVudGlmaWVycyBhcmUgYWxz
byBleHBvc2VkIGFzIHN0YXRpYyB2YXJpYWJsZXMgb24gd2luZG93LklQQy4KKworICAgICAgICAq
IFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hE
aWRDbGVhcldpbmRvd09iamVjdEluV29ybGQpOiBJbmplY3QgdGhlIEFQSSBpZiBlbmFibGVkLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjpjcmVhdGUpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OndlYkZyYW1lKTogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjpKU0lQQyk6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6d3JhcHBlckNsYXNzKTogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjp1bndyYXApOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OnRvV3JhcHBlZCk6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6aW5pdGlhbGl6ZSk6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6ZmluYWxpemUpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OnN0YXRpY0Z1bmN0
aW9ucyk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6c3Rh
dGljVmFsdWVzKTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmNvbnZl
cnRUb1VpbnQ2NCk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpwcm9j
ZXNzVGFyZ2V0RnJvbUFyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3Rp
bmdBUEk6OmRlc3RpbmF0aW9uSURGcm9tQXJndW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6SVBDVGVzdGluZ0FQSTo6bWVzc2FnZUlERnJvbUFyZ3VtZW50KTogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmVuY29kZVR5cGVkQXJyYXkpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6Y3JlYXRlVHlwZUVycm9yKTogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmVuY29kZVJlY3RUeXBlKTogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmVuY29kZUludGVncmFsVHlwZSk6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpWZWN0b3JFbmNvZGVIZWxwZXI6OmVuY29k
ZSBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjplbmNvZGVB
cmd1bWVudCk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6
c2VuZE1lc3NhZ2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJ
UEM6OnNlbmRTeW5jTWVzc2FnZSk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5n
QVBJOjpKU0lQQzo6dmlzaXRlZExpbmtTdG9yZUlEKTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjp3ZWJQYWdlUHJveHlJRCk6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6ZnJhbWVJZGVudGlmaWVyKTogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjpyZXRyaWV2ZUlEKTogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjptZXNzYWdlcyk6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjppbmplY3QpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6bV9saW1pdHNOYXZpZ2F0aW9uc1RvQXBwQm91
bmREb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmlwY1Rlc3RpbmdBUElFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6d2ViUGFnZVByb3h5SUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjp2aXNpdGVkTGlua1RhYmxlSUQgY29uc3QpOgorCiAyMDIwLTEwLTA3ICBLZWl0aCBSb2xs
aW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgcG9zdC1wcm9jZXNzaW5n
IHJ1bGVzIGZvciBoZWFkZXJzIHRvIG5vdCB1bm5lY2Vzc2FyaWx5IGNoYW5nZSB0aW1lc3RhbXBz
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvU291cmNlcy50eHQJKHJldmlzaW9uIDI2ODE2NSkKKysrIFNvdXJjZS9XZWJLaXQvU291
cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTY1Miw2ICs2NTIsNyBAQCBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoCiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWEuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAogV2ViUHJvY2Vz
cy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAorV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3Rp
bmdBUEkuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZUJhbm5lci5jcHAKIFdlYlByb2Nlc3Mv
V2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY4MTY1KQorKysgU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNDUxMyw2ICs0NTEzLDggQEAKIAkJOUIwMkUwQ0QyMzVFQjk2NzAwNDA0NEIyIC8qIF9X
S1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tUZXh0TWFuaXB1bGF0
aW9uVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwMkUwQ0UyMzVFQkIx
NDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOUIwMkUwRDAyMzVFQkNDQTAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25J
dGVtLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0ubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDMzRTcxMjUyNTgwRjMwMDUwMTA3MSAv
KiBJUENUZXN0aW5nQVBJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElQQ1Rlc3RpbmdBUEkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwMzNFNzIyNTI1ODBGMzAwNTAxMDcxIC8qIElQQ1Rl
c3RpbmdBUEkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSVBDVGVzdGluZ0FQSS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMTIyOUNCMjNGRjI1RjIwMDhDQTc1MSAvKiBSZW1v
dGVBdWRpb0Rlc3RpbmF0aW9uTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVBdWRpb0Rl
c3RpbmF0aW9uTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjEyMjlD
QzIzRkYyNUYyMDA4Q0E3NTEgLyogUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjEyMjlDRjIzRkYyODE0MDA4Q0E3NTEgLyogUmVt
b3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlQXVkaW9E
ZXN0aW5hdGlvbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC04OTIzLDYgKzg5MjUsOCBAQAogCQkJCTFBQTU3NUZEMTQ5NkI2RjMwMEE0RUUwNiAvKiBF
dmVudERpc3BhdGNoZXIubWVzc2FnZXMuaW4gKi8sCiAJCQkJMUE5MEMxRjMxMjY0RkQ3MTAwM0U0
NEQ0IC8qIEZpbmRDb250cm9sbGVyLmNwcCAqLywKIAkJCQkxQTkwQzFGMjEyNjRGRDcxMDAzRTQ0
RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLywKKwkJCQk5QjAzM0U3MjI1MjU4MEYzMDA1MDEwNzEg
LyogSVBDVGVzdGluZ0FQSS5jcHAgKi8sCisJCQkJOUIwMzNFNzEyNTI1ODBGMzAwNTAxMDcxIC8q
IElQQ1Rlc3RpbmdBUEkuaCAqLywKIAkJCQk3QzM4NzQzMzE3MkY1NjE1MDAxQkQ4OEEgLyogUGFn
ZUJhbm5lci5jcHAgKi8sCiAJCQkJN0NGNDdGRjkxNzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VCYW5u
ZXIuaCAqLywKIAkJCQkyRDgxOUI5OTE4NjI3NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9t
ZXRyeUNvbGxlY3Rvci5jcHAgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5j
cHAJKHJldmlzaW9uIDI2ODE2NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJGaW5kQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZvcm1EYXRh
UmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiRnJhbWVJbmZvRGF0YS5oIgorI2luY2x1ZGUgIklQQ1Rl
c3RpbmdBUEkuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgogI2luY2x1ZGUgIkluamVj
dGVkQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVO
YXZpZ2F0aW9uQWN0aW9uLmgiCkBAIC0xNzQzLDYgKzE3NDQsMTEgQEAgdm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDbAogICAgIGlmICghd2ViUGFnZSkKICAgICAgICAgcmV0
dXJuOwogCisjaWYgRU5BQkxFKElQQ19URVNUSU5HX0FQSSkKKyAgICBpZiAod29ybGQuaXNOb3Jt
YWwoKSAmJiB3ZWJQYWdlLT5pcGNUZXN0aW5nQVBJRW5hYmxlZCgpKQorICAgICAgICBJUENUZXN0
aW5nQVBJOjppbmplY3QoKndlYlBhZ2UsIG1fZnJhbWUuZ2V0KCksIHdvcmxkKTsKKyNlbmRpZgor
CiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQoKS5kaWRDbGVhcldpbmRv
d09iamVjdEZvckZyYW1lKCp3ZWJQYWdlLCBtX2ZyYW1lLCB3b3JsZCk7CiAKICAgICBXZWJBdXRv
bWF0aW9uU2Vzc2lvblByb3h5KiBhdXRvbWF0aW9uU2Vzc2lvblByb3h5ID0gV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuYXV0b21hdGlvblNlc3Npb25Qcm94eSgpOwpJbmRleDogU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSVBDVGVzdGluZ0FQSS5oIgorCisjaWYgRU5BQkxFKElQ
Q19URVNUSU5HX0FQSSkKKworI2luY2x1ZGUgIkVuY29kZXIuaCIKKyNpbmNsdWRlICJGcmFtZUlu
Zm9EYXRhLmgiCisjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJN
ZXNzYWdlTmFtZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJGcmFtZS5oIgor
I2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0J1aWx0
aW5OYW1lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmlnSW50Lmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNDbGFzc1JlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTTG9jay5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0Lmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHQuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcGFxdWVKU1N0cmluZy5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRE9NV3JhcHBlcldvcmxkLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2NyaXB0Q29udHJvbGxlci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworbmFtZXNwYWNlIElQQ1Rlc3RpbmdBUEkgeworCitjbGFzcyBKU0lQ
QyA6IHB1YmxpYyBSZWZDb3VudGVkPEpTSVBDPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxK
U0lQQz4gY3JlYXRlKFdlYlBhZ2UmIHdlYlBhZ2UsIFdlYkZyYW1lJiB3ZWJGcmFtZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEpTSVBDKHdlYlBhZ2UsIHdlYkZyYW1lKSk7
CisgICAgfQorCisgICAgc3RhdGljIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCk7CisKKyAgICBX
ZWJGcmFtZSogd2ViRnJhbWUoKSB7IHJldHVybiBtX3dlYkZyYW1lLmdldCgpOyB9CisKK3ByaXZh
dGU6CisgICAgSlNJUEMoV2ViUGFnZSYgd2ViUGFnZSwgV2ViRnJhbWUmIHdlYkZyYW1lKQorICAg
ICAgICA6IG1fd2ViUGFnZShtYWtlV2Vha1B0cih3ZWJQYWdlKSkKKyAgICAgICAgLCBtX3dlYkZy
YW1lKG1ha2VXZWFrUHRyKHdlYkZyYW1lKSkKKyAgICB7IH0KKworICAgIHN0YXRpYyBKU0lQQyog
dW53cmFwKEpTT2JqZWN0UmVmKTsKKyAgICBzdGF0aWMgSlNJUEMqIHRvV3JhcHBlZChKU0NvbnRl
eHRSZWYsIEpTVmFsdWVSZWYpOworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoSlNDb250ZXh0
UmVmLCBKU09iamVjdFJlZik7CisgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNPYmplY3RSZWYp
OworICAgIHN0YXRpYyBjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMoKTsK
KyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNWYWx1ZSogc3RhdGljVmFsdWVzKCk7CisKKyAgICBz
dGF0aWMgSlNWYWx1ZVJlZiBzZW5kTWVzc2FnZShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICBzdGF0aWMgSlNW
YWx1ZVJlZiBzZW5kU3luY01lc3NhZ2UoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisKKyAgICBzdGF0aWMgSlNWYWx1
ZVJlZiB2aXNpdGVkTGlua1N0b3JlSUQoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNTdHJp
bmdSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgd2Vi
UGFnZVByb3h5SUQoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNTdHJpbmdSZWYsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgZnJhbWVJZGVudGlmaWVy
KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pOworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHJldHJpZXZlSUQoSlNDb250ZXh0UmVmLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIGNvbnN0IFdURjo6
RnVuY3Rpb248dWludDY0X3QoSlNJUEMmKT4mKTsKKworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIG1l
c3NhZ2VzKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pOworCisgICAgV2Vha1B0cjxXZWJQYWdlPiBtX3dlYlBhZ2U7CisgICAgV2Vh
a1B0cjxXZWJGcmFtZT4gbV93ZWJGcmFtZTsKK307CisKK0pTQ2xhc3NSZWYgSlNJUEM6OndyYXBw
ZXJDbGFzcygpCit7CisgICAgc3RhdGljIEpTQ2xhc3NSZWYganNDbGFzczsKKyAgICBpZiAoIWpz
Q2xhc3MpIHsKKyAgICAgICAgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IGtKU0NsYXNz
RGVmaW5pdGlvbkVtcHR5OworICAgICAgICBkZWZpbml0aW9uLmNsYXNzTmFtZSA9ICJVSVByb2Nl
c3MiOworICAgICAgICBkZWZpbml0aW9uLnBhcmVudENsYXNzID0gMDsKKyAgICAgICAgZGVmaW5p
dGlvbi5zdGF0aWNWYWx1ZXMgPSBzdGF0aWNWYWx1ZXMoKTsKKyAgICAgICAgZGVmaW5pdGlvbi5z
dGF0aWNGdW5jdGlvbnMgPSBzdGF0aWNGdW5jdGlvbnMoKTsKKyAgICAgICAgZGVmaW5pdGlvbi5p
bml0aWFsaXplID0gaW5pdGlhbGl6ZTsKKyAgICAgICAgZGVmaW5pdGlvbi5maW5hbGl6ZSA9IGZp
bmFsaXplOworICAgICAgICBqc0NsYXNzID0gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7Cisg
ICAgfQorICAgIHJldHVybiBqc0NsYXNzOworfQorCitpbmxpbmUgSlNJUEMqIEpTSVBDOjp1bndy
YXAoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0lQQyo+
KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKK30KKworSlNJUEMqIEpTSVBDOjp0b1dyYXBw
ZWQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgaWYgKCFj
b250ZXh0IHx8ICF2YWx1ZSB8fCAhSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjb250ZXh0LCB2YWx1
ZSwgd3JhcHBlckNsYXNzKCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
dW53cmFwKEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwgMCkpOworfQorCit2b2lkIEpT
SVBDOjppbml0aWFsaXplKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAg
IHVud3JhcChvYmplY3QpLT5yZWYoKTsKK30KKwordm9pZCBKU0lQQzo6ZmluYWxpemUoSlNPYmpl
Y3RSZWYgb2JqZWN0KQoreworICAgIHVud3JhcChvYmplY3QpLT5yZWYoKTsKK30KKworY29uc3Qg
SlNTdGF0aWNGdW5jdGlvbiogSlNJUEM6OnN0YXRpY0Z1bmN0aW9ucygpCit7CisgICAgc3RhdGlj
IGNvbnN0IEpTU3RhdGljRnVuY3Rpb24gZnVuY3Rpb25zW10gPSB7CisgICAgICAgIHsgInNlbmRN
ZXNzYWdlIiwgc2VuZE1lc3NhZ2UsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKKyAgICAgICAgeyAic2VuZFN5bmNNZXNzYWdl
Iiwgc2VuZFN5bmNNZXNzYWdlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgMCwgMCwgMCB9CisgICAgfTsK
KyAgICByZXR1cm4gZnVuY3Rpb25zOworfQorCitjb25zdCBKU1N0YXRpY1ZhbHVlKiBKU0lQQzo6
c3RhdGljVmFsdWVzKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNWYWx1ZSB2YWx1ZXNb
XSA9IHsKKyAgICAgICAgeyAidmlzaXRlZExpbmtTdG9yZUlEIiwgdmlzaXRlZExpbmtTdG9yZUlE
LCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgIndlYlBhZ2VQcm94eUlEIiwgd2ViUGFnZVByb3h5SUQs
IDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfSwKKyAgICAgICAgeyAiZnJhbWVJZGVudGlmaWVyIiwgZnJhbWVJZGVudGlmaWVy
LCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgIm1lc3NhZ2VzIiwgbWVzc2FnZXMsIDAsIGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwK
KyAgICAgICAgeyAwLCAwLCAwLCAwIH0KKyAgICB9OworICAgIHJldHVybiB2YWx1ZXM7Cit9CisK
K3N0YXRpYyBPcHRpb25hbDx1aW50NjRfdD4gY29udmVydFRvVWludDY0KEpTQzo6SlNWYWx1ZSBq
c1ZhbHVlKQoreworICAgIGlmIChqc1ZhbHVlLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgZG91Ymxl
IHZhbHVlID0ganNWYWx1ZS5hc051bWJlcigpOworICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHRy
dW5jKHZhbHVlKSAhPSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisgICAgaWYgKGpzVmFsdWUuaXNCaWdJbnQoKSkK
KyAgICAgICAgcmV0dXJuIEpTQzo6SlNCaWdJbnQ6OnRvVWludDY0KGpzVmFsdWUpOworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBw
cm9jZXNzVGFyZ2V0RnJvbUFyZ3VtZW50KEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZVJlZiB2YWx1ZVJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAg
YXV0byBuYW1lID0gdG9KUyhnbG9iYWxPYmplY3QsIHZhbHVlUmVmKS50b1dURlN0cmluZyhnbG9i
YWxPYmplY3QpOworICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBpZiAobmFtZSA9PSAiVUkiKQorICAgICAgICByZXR1cm4gV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKTsKKyNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCisgICAgaWYgKG5hbWUgPT0gIkdQVSIpCisgICAgICAgIHJldHVybiAmV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9u
KCk7CisjZW5kaWYKKyAgICBpZiAobmFtZSA9PSAiTmV0d29ya2luZyIpCisgICAgICAgIHJldHVy
biAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
KCkuY29ubmVjdGlvbigpOworCisgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgIlRhcmdldCBwcm9jZXNzIG11c3QgYmUgVUksIEdQVSwgb3Ig
TmV0d29ya2luZyJfcykpOworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgT3B0aW9u
YWw8dWludDY0X3Q+IGRlc3RpbmF0aW9uSURGcm9tQXJndW1lbnQoSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlUmVmIHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCit7CisgICAgYXV0byBqc1ZhbHVlID0gdG9KUyhnbG9iYWxPYmplY3QsIHZhbHVlUmVmKTsK
KyAgICBhdXRvIHJlc3VsdCA9IGNvbnZlcnRUb1VpbnQ2NChqc1ZhbHVlKTsKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKGds
b2JhbE9iamVjdCwgImRlc3RpbmF0aW9uSUQgbXVzdCBiZSBhbiBpbnRlZ2VyIl9zKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIE9wdGlvbmFsPHVpbnQ2NF90PiBtZXNzYWdlSURG
cm9tQXJndW1lbnQoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlUmVm
IHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgYXV0byBqc1ZhbHVlID0g
dG9KUyhnbG9iYWxPYmplY3QsIHZhbHVlUmVmKTsKKyAgICBhdXRvIHJlc3VsdCA9IGNvbnZlcnRU
b1VpbnQ2NChqc1ZhbHVlKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgKmV4Y2VwdGlvbiA9
IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgIm1lc3NhZ2VJRCBtdXN0
IGJlIGFuIGludGVnZXIiX3MpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgYm9v
bCBlbmNvZGVUeXBlZEFycmF5KElQQzo6RW5jb2RlciYgZW5jb2RlciwgSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgdmFsdWVSZWYsIEpTVHlwZWRBcnJheVR5cGUgdHlwZSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFTU0VSVCh0eXBlICE9IGtKU1R5cGVkQXJyYXlUeXBl
Tm9uZSk7CisKKyAgICBhdXRvIG9iamVjdFJlZiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2
YWx1ZVJlZiwgZXhjZXB0aW9uKTsKKyAgICBpZiAoIW9iamVjdFJlZikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgdm9pZCogYnVmZmVyOworICAgIGlmICh0eXBlID09IGtKU1R5cGVkQXJy
YXlUeXBlQXJyYXlCdWZmZXIpCisgICAgICAgIGJ1ZmZlciA9IEpTT2JqZWN0R2V0QXJyYXlCdWZm
ZXJCeXRlc1B0cihjb250ZXh0LCBvYmplY3RSZWYsIGV4Y2VwdGlvbik7CisgICAgZWxzZQorICAg
ICAgICBidWZmZXIgPSBKU09iamVjdEdldFR5cGVkQXJyYXlCeXRlc1B0cihjb250ZXh0LCBvYmpl
Y3RSZWYsIGV4Y2VwdGlvbik7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHNpemVfdCBidWZmZXJTaXplOworICAgIGlmICh0eXBlID09IGtKU1R5cGVkQXJy
YXlUeXBlQXJyYXlCdWZmZXIpCisgICAgICAgIGJ1ZmZlclNpemUgPSBKU09iamVjdEdldEFycmF5
QnVmZmVyQnl0ZUxlbmd0aChjb250ZXh0LCBvYmplY3RSZWYsIGV4Y2VwdGlvbik7CisgICAgZWxz
ZQorICAgICAgICBidWZmZXJTaXplID0gSlNPYmplY3RHZXRUeXBlZEFycmF5Qnl0ZUxlbmd0aChj
b250ZXh0LCBvYmplY3RSZWYsIGV4Y2VwdGlvbik7CisgICAgaWYgKCFidWZmZXJTaXplKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXIpLCBidWZmZXJTaXplLCAxKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgY3JlYXRlVHlwZUVycm9y
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9jayh0b0pTKGNvbnRleHQpLT52bSgpKTsKKyAgICByZXR1cm4gdG9S
ZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0KSwgbWVzc2FnZSkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBSZWN0VHlwZT4gYm9vbCBlbmNvZGVSZWN0VHlwZShJUEM6OkVuY29k
ZXImIGVuY29kZXIsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU09i
amVjdCoganNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBqc1ggPSBqc09iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAieCJfcykpOworICAgIGlmICghanNYLmlzTnVtYmVyKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIGpzWSA9IGpzT2JqZWN0LT5nZXQoZ2xvYmFsT2Jq
ZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ5Il9zKSk7CisgICAgaWYgKCFq
c1kuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8ganNXaWR0aCA9
IGpzT2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJ3aWR0aCJfcykpOworICAgIGlmICghanNXaWR0aC5pc051bWJlcigpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgYXV0byBqc0hlaWdodCA9IGpzT2JqZWN0LT5nZXQoZ2xvYmFsT2Jq
ZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJoZWlnaHQiX3MpKTsKKyAgICBp
ZiAoIWpzSGVpZ2h0LmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBlbmNv
ZGVyIDw8IFJlY3RUeXBlKGpzWC5hc051bWJlcigpLCBqc1kuYXNOdW1iZXIoKSwganNXaWR0aC5h
c051bWJlcigpLCBqc0hlaWdodC5hc051bWJlcigpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgSW50ZWdyYWxUeXBlPiBib29sIGVuY29kZUludGVncmFsVHlwZShJ
UEM6OkVuY29kZXImIGVuY29kZXIsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKQoreworICAgIGlmIChq
c1ZhbHVlLmlzQmlnSW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbmVnYXRpdmUg
QmlnSW50LgorICAgICAgICBhdXRvIHJlc3VsdCA9IEpTQzo6SlNCaWdJbnQ6OnRvVWludDY0KGpz
VmFsdWUpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxJbnRlZ3JhbFR5cGU+KCpyZXN1bHQpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFqc1ZhbHVlLmlzTnVtYmVyKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb3VibGUgdmFsdWUgPSBqc1ZhbHVlLmFzTnVt
YmVyKCk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxJbnRlZ3JhbFR5cGU+KHZhbHVlKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworZW51bSBjbGFzcyBBcnJheU1vZGUgeyBUdXBsZSwgVmVj
dG9yIH07CitzdGF0aWMgYm9vbCBlbmNvZGVBcmd1bWVudChJUEM6OkVuY29kZXImLCBKU0lQQyYs
IEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBBcnJheU1v
ZGUgPSBBcnJheU1vZGU6OlR1cGxlKTsKKworc3RydWN0IFZlY3RvckVuY29kZUhlbHBlciB7Cisg
ICAgUmVmPEpTSVBDPiBqc0lQQzsKKyAgICBKU0NvbnRleHRSZWYgY29udGV4dDsKKyAgICBKU1Zh
bHVlUmVmIHZhbHVlUmVmOworICAgIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbjsKKyAgICBib29sJiBz
dWNjZXNzOworCisgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBzdWNjZXNzID0gZW5jb2RlQXJndW1lbnQoZW5jb2RlciwganNJUEMuZ2V0KCksIGNvbnRleHQs
IHZhbHVlUmVmLCBleGNlcHRpb24sIEFycmF5TW9kZTo6VmVjdG9yKTsKKyAgICB9Cit9OworCitz
dGF0aWMgYm9vbCBlbmNvZGVBcmd1bWVudChJUEM6OkVuY29kZXImIGVuY29kZXIsIEpTSVBDJiBq
c0lQQywgSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWVSZWYsIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbiwgQXJyYXlNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBhdXRvIG9iamVjdFJl
ZiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZVJlZiwgZXhjZXB0aW9uKTsKKyAgICBp
ZiAoIW9iamVjdFJlZikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGF1dG8gdHlw
ZSA9IEpTVmFsdWVHZXRUeXBlZEFycmF5VHlwZShjb250ZXh0LCBvYmplY3RSZWYsIGV4Y2VwdGlv
bik7IHR5cGUgIT0ga0pTVHlwZWRBcnJheVR5cGVOb25lKQorICAgICAgICByZXR1cm4gZW5jb2Rl
VHlwZWRBcnJheShlbmNvZGVyLCBjb250ZXh0LCBvYmplY3RSZWYsIHR5cGUsIGV4Y2VwdGlvbik7
CisKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOworICAgIGF1dG8mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7
CisgICAgYXV0byoganNPYmplY3QgPSB0b0pTKGdsb2JhbE9iamVjdCwgb2JqZWN0UmVmKS5nZXRP
YmplY3QoKTsKKyAgICBBU1NFUlQoanNPYmplY3QpOworICAgIGlmIChKU1ZhbHVlSXNBcnJheShj
b250ZXh0LCBvYmplY3RSZWYpKSB7CisgICAgICAgIGF1dG8ganNMZW5ndGggPSBqc09iamVjdC0+
Z2V0KGdsb2JhbE9iamVjdCwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibGVuZ3Ro
Il9zKSk7CisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKCFqc0xlbmd0aC5pc051bWJlcigpKSB7CisgICAgICAgICAg
ICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJBcnJheSBsZW5ndGggaXMg
bm90IGEgbnVtYmVyIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBhdXRvIGxlbmd0aCA9IGpzTGVuZ3RoLmFzTnVtYmVyKCk7CisKKyAgICAgICAgVmVj
dG9yPFZlY3RvckVuY29kZUhlbHBlcj4gdmVjdG9yOworICAgICAgICBib29sIHN1Y2Nlc3MgPSB0
cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIGF1dG8gaXRlbVJlZiA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRl
eHQsIG9iamVjdFJlZiwgaSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIGlmICghaXRlbVJlZikK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB2ZWN0b3IuYXBwZW5k
KFZlY3RvckVuY29kZUhlbHBlciB7IGpzSVBDLCBjb250ZXh0LCBpdGVtUmVmLCBleGNlcHRpb24s
IHN1Y2Nlc3MgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFycmF5TW9kZSA9PSBBcnJheU1v
ZGU6OlR1cGxlKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiB2ZWN0b3IpCisgICAg
ICAgICAgICAgICAgaXRlbS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgZW5jb2RlciA8PCB2ZWN0b3I7CisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgIH0K
KworICAgIGF1dG8ganNUeXBlID0ganNPYmplY3QtPmdldChnbG9iYWxPYmplY3QsIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInR5cGUiX3MpKTsKKyAgICBpZiAoc2NvcGUuZXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gdHlwZSA9IGpzVHlwZS50
b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOworICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHR5cGUgPT0gIkludFJlY3QiKSB7CisgICAg
ICAgIGlmICghZW5jb2RlUmVjdFR5cGU8V2ViQ29yZTo6SW50UmVjdD4oZW5jb2RlciwgZ2xvYmFs
T2JqZWN0LCBqc09iamVjdCkpIHsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBl
RXJyb3IoY29udGV4dCwgIkZhaWxlZCB0byBjb252ZXJ0IEludFJlY3QiX3MpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGlmICh0eXBlID09ICJGbG9hdFJlY3QiKSB7CisgICAgICAgIGlmICghZW5jb2RlUmVj
dFR5cGU8V2ViQ29yZTo6RmxvYXRSZWN0PihlbmNvZGVyLCBnbG9iYWxPYmplY3QsIGpzT2JqZWN0
KSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAi
RmFpbGVkIHRvIGNvbnZlcnQgRmxvYXRSZWN0Il9zKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodHlw
ZSA9PSAiRnJhbWVJbmZvRGF0YSIpIHsKKyAgICAgICAgYXV0byB3ZWJGcmFtZSA9IG1ha2VSZWZQ
dHIoanNJUEMud2ViRnJhbWUoKSk7CisgICAgICAgIGlmICghd2ViRnJhbWUpIHsKKyAgICAgICAg
ICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIkZhaWxlZCB0byBnZXQg
dGhlIGZyYW1lIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBlbmNvZGVyIDw8IHdlYkZyYW1lLT5pbmZvKCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGF1dG8ganNWYWx1ZSA9IGpzT2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ2YWx1ZSJfcykpOworICAgIGlmIChzY29w
ZS5leGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHR5cGUgPT0g
IlN0cmluZyIpIHsKKyAgICAgICAgaWYgKGpzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewor
ICAgICAgICAgICAgZW5jb2RlciA8PCBTdHJpbmcgeyB9OworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgYXV0byBzdHJpbmcgPSBqc1ZhbHVlLnRvV1RGU3RyaW5n
KGdsb2JhbE9iamVjdCk7CisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZW5jb2RlciA8PCBzdHJpbmc7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh0eXBlID09ICJSR0JBIikgeworICAgICAgICBp
ZiAoIWpzVmFsdWUuaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0
ZVR5cGVFcnJvcihjb250ZXh0LCAiUkdCQSB2YWx1ZSBzaG91bGQgYmUgYSBudW1iZXIiX3MpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHVpbnQzMl90IHJn
YmEgPSBqc1ZhbHVlLmFzTnVtYmVyKCk7CisgICAgICAgIGVuY29kZXIgPDwgV2ViQ29yZTo6Q29s
b3IgeyBXZWJDb3JlOjphc1NSR0JBKFdlYkNvcmU6OlBhY2tlZENvbG9yOjpSR0JBKHJnYmEpKSB9
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGludGVncmFsUmVzdWx0
OworICAgIGlmICh0eXBlID09ICJib29sIikKKyAgICAgICAgaW50ZWdyYWxSZXN1bHQgPSBlbmNv
ZGVJbnRlZ3JhbFR5cGU8Ym9vbD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgZWxzZSBpZiAodHlw
ZSA9PSAiaW50OF90IikKKyAgICAgICAgaW50ZWdyYWxSZXN1bHQgPSBlbmNvZGVJbnRlZ3JhbFR5
cGU8aW50OF90PihlbmNvZGVyLCBqc1ZhbHVlKTsKKyAgICBlbHNlIGlmICh0eXBlID09ICJpbnQx
Nl90IikKKyAgICAgICAgaW50ZWdyYWxSZXN1bHQgPSBlbmNvZGVJbnRlZ3JhbFR5cGU8aW50MTZf
dD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgZWxzZSBpZiAodHlwZSA9PSAiaW50MzJfdCIpCisg
ICAgICAgIGludGVncmFsUmVzdWx0ID0gZW5jb2RlSW50ZWdyYWxUeXBlPGludDMyX3Q+KGVuY29k
ZXIsIGpzVmFsdWUpOworICAgIGVsc2UgaWYgKHR5cGUgPT0gImludDY0X3QiKQorICAgICAgICBp
bnRlZ3JhbFJlc3VsdCA9IGVuY29kZUludGVncmFsVHlwZTxpbnQ2NF90PihlbmNvZGVyLCBqc1Zh
bHVlKTsKKyAgICBlbHNlIGlmICh0eXBlID09ICJ1aW50OF90IikKKyAgICAgICAgaW50ZWdyYWxS
ZXN1bHQgPSBlbmNvZGVJbnRlZ3JhbFR5cGU8dWludDhfdD4oZW5jb2RlciwganNWYWx1ZSk7Cisg
ICAgZWxzZSBpZiAodHlwZSA9PSAidWludDE2X3QiKQorICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9
IGVuY29kZUludGVncmFsVHlwZTx1aW50MTZfdD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgZWxz
ZSBpZiAodHlwZSA9PSAidWludDMyX3QiKQorICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVuY29k
ZUludGVncmFsVHlwZTx1aW50MzJfdD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgZWxzZSBpZiAo
dHlwZSA9PSAidWludDY0X3QiKQorICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVuY29kZUludGVn
cmFsVHlwZTx1aW50NjRfdD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgZWxzZSB7CisgICAgICAg
ICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIkJhZCB0eXBlIG5hbWUiX3Mp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghaW50ZWdyYWxSZXN1bHQp
IHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiRmFpbGVk
IHRvIGVuY29kZSBhbiBpbnRlZ2VyIl9zKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQzo6c2VuZE1lc3NhZ2UoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4
dCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxPYmplY3QtPnZtKCkpOworICAg
IGF1dG8ganNJUEMgPSBtYWtlUmVmUHRyKHRvV3JhcHBlZChjb250ZXh0LCB0aGlzT2JqZWN0KSk7
CisgICAgaWYgKCFqc0lQQykgeworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVh
dGVUeXBlRXJyb3IodG9KUyhjb250ZXh0KSwgIldyb25nIHR5cGUiX3MpKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIGlmIChhcmd1
bWVudENvdW50IDwgMykgeworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVU
eXBlRXJyb3IodG9KUyhjb250ZXh0KSwgIk11c3Qgc3BlY2lmeSB0aGUgdGFyZ2V0IHByb2Nlc3Ms
IGRlc2luYXRpb24gSUQsIGFuZCBtZXNzYWdlIElEIGFzIHRoZSBmaXJzdCB0aHJlZSBhcmd1bWVu
dHMiX3MpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwor
ICAgIH0KKworICAgIGF1dG8gY29ubmVjdGlvbiA9IHByb2Nlc3NUYXJnZXRGcm9tQXJndW1lbnQo
Z2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgaWYgKCFjb25uZWN0
aW9uKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAg
ICBhdXRvIGRlc3RpbmF0aW9uSUQgPSBkZXN0aW5hdGlvbklERnJvbUFyZ3VtZW50KGdsb2JhbE9i
amVjdCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pOworICAgIGlmICghZGVzdGluYXRpb25JRCkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgYXV0
byBtZXNzYWdlSUQgPSBtZXNzYWdlSURGcm9tQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCBhcmd1bWVu
dHNbMl0sIGV4Y2VwdGlvbik7CisgICAgaWYgKCFtZXNzYWdlSUQpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIGF1dG8gZW5jb2RlciA9IG1ha2VV
bmlxdWU8SVBDOjpFbmNvZGVyPihzdGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPihzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oKm1lc3NhZ2VJRCkpLCAqZGVzdGluYXRpb25JRCk7CisKKyAgICBpZiAo
YXJndW1lbnRDb3VudCA+IDMpIHsKKyAgICAgICAgaWYgKCFlbmNvZGVBcmd1bWVudCgqZW5jb2Rl
ciwgKmpzSVBDLCBjb250ZXh0LCBhcmd1bWVudHNbM10sIGV4Y2VwdGlvbikpCisgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorCisgICAgLy8g
RklYTUU6IEFkZCB0aGUgc3VwcG9ydCBmb3Igc3BlY2lmeWluZyBJUEMgb3B0aW9ucy4KKworICAg
IGNvbm5lY3Rpb24tPnNlbmRNZXNzYWdlKFdURk1vdmUoZW5jb2RlciksIHsgfSk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK0pTVmFsdWVSZWYgSlNJ
UEM6OnNlbmRTeW5jTWVzc2FnZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgYXV0byogZ2xv
YmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGds
b2JhbE9iamVjdC0+dm0oKSk7CisgICAgYXV0byBqc0lQQyA9IG1ha2VSZWZQdHIodG9XcmFwcGVk
KGNvbnRleHQsIHRoaXNPYmplY3QpKTsKKyAgICBpZiAoIWpzSVBDKSB7CisgICAgICAgICpleGNl
cHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGNvbnRleHQpLCAiV3Jvbmcg
dHlwZSJfcykpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CisgICAgfQorCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCA0KSB7CisgICAgICAgICpleGNlcHRp
b24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGNvbnRleHQpLCAiTXVzdCBzcGVj
aWZ5IHRoZSB0YXJnZXQgcHJvY2VzcywgZGVzaW5hdGlvbiBJRCwgbWVzc2FnZSBJRCwgYW5kIHRp
bWVvdXQgYXMgdGhlIGZpcnN0IGZvdXIgYXJndW1lbnRzIl9zKSk7CisgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisKKyAgICBhdXRvIGNvbm5lY3Rp
b24gPSBwcm9jZXNzVGFyZ2V0RnJvbUFyZ3VtZW50KGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzBd
LCBleGNlcHRpb24pOworICAgIGlmICghY29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgYXV0byBkZXN0aW5hdGlvbklEID0gZGVz
dGluYXRpb25JREZyb21Bcmd1bWVudChnbG9iYWxPYmplY3QsIGFyZ3VtZW50c1sxXSwgZXhjZXB0
aW9uKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uSUQpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIGF1dG8gbWVzc2FnZUlEID0gbWVzc2FnZUlERnJv
bUFyZ3VtZW50KGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pOworICAgIGlm
ICghbWVzc2FnZUlEKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CisKKyAgICBTZWNvbmRzIHRpbWVvdXQ7CisgICAgeworICAgICAgICBhdXRvIGpzVmFsdWUg
PSB0b0pTKGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzNdKTsKKyAgICAgICAgaWYgKCFqc1ZhbHVl
LmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0
ZVR5cGVFcnJvcihnbG9iYWxPYmplY3QsICJ0aW1lb3V0IG11c3QgYmUgYSBudW1iZXIiX3MpKTsK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAg
ICAgfQorICAgICAgICB0aW1lb3V0ID0gU2Vjb25kcyB7IGpzVmFsdWUuYXNOdW1iZXIoKSB9Owor
ICAgIH0KKyAgICAKKyAgICAvLyBGSVhNRTogU3VwcG9ydCB0aGUgb3B0aW9ucy4KKworICAgIHVp
bnQ2NF90IHN5bmNSZXF1ZXN0SUQgPSAwOworICAgIGF1dG8gZW5jb2RlciA9IGNvbm5lY3Rpb24t
PmNyZWF0ZVN5bmNNZXNzYWdlRW5jb2RlcihzdGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPihz
dGF0aWNfY2FzdDx1aW50NjRfdD4oKm1lc3NhZ2VJRCkpLCAqZGVzdGluYXRpb25JRCwgc3luY1Jl
cXVlc3RJRCk7CisKKyAgICBpZiAoYXJndW1lbnRDb3VudCA+IDQpIHsKKyAgICAgICAgaWYgKCFl
bmNvZGVBcmd1bWVudCgqZW5jb2RlciwgKmpzSVBDLCBjb250ZXh0LCBhcmd1bWVudHNbNF0sIGV4
Y2VwdGlvbikpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CisgICAgfQorCisgICAgYXV0byByZXBseURlY29kZXIgPSBjb25uZWN0aW9uLT5zZW5kU3lu
Y01lc3NhZ2Uoc3luY1JlcXVlc3RJRCwgV1RGTW92ZShlbmNvZGVyKSwgdGltZW91dCwgeyB9KTsK
KyAgICAvLyBGSVhNRTogRGVjb2RlIHRoZSByZXBseS4KKworICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQzo6dmlzaXRlZExpbmtT
dG9yZUlEKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0
cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIHJldHVybiByZXRyaWV2ZUlE
KGNvbnRleHQsIHRoaXNPYmplY3QsIGV4Y2VwdGlvbiwgW10oSlNJUEMmIHdyYXBwZWQpIHsKKyAg
ICAgICAgYXV0byB3ZWJQYWdlID0gbWFrZVJlZigqd3JhcHBlZC5tX3dlYlBhZ2UpOworICAgICAg
ICByZXR1cm4gd2ViUGFnZS0+dmlzaXRlZExpbmtUYWJsZUlEKCk7CisgICAgfSk7Cit9CisKK0pT
VmFsdWVSZWYgSlNJUEM6OndlYlBhZ2VQcm94eUlEKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQor
eworICAgIHJldHVybiByZXRyaWV2ZUlEKGNvbnRleHQsIHRoaXNPYmplY3QsIGV4Y2VwdGlvbiwg
W10oSlNJUEMmIHdyYXBwZWQpIHsKKyAgICAgICAgcmV0dXJuIHdyYXBwZWQubV93ZWJQYWdlLT53
ZWJQYWdlUHJveHlJRCgpOworICAgIH0pOworfQorCitKU1ZhbHVlUmVmIEpTSVBDOjpmcmFtZUlk
ZW50aWZpZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpT
U3RyaW5nUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgcmV0dXJuIHJldHJpZXZl
SUQoY29udGV4dCwgdGhpc09iamVjdCwgZXhjZXB0aW9uLCBbXShKU0lQQyYgd3JhcHBlZCkgewor
ICAgICAgICByZXR1cm4gd3JhcHBlZC5tX3dlYkZyYW1lLT5mcmFtZUlEKCkudG9VSW50NjQoKTsK
KyAgICB9KTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQzo6cmV0cmlldmVJRChKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBj
b25zdCBXVEY6OkZ1bmN0aW9uPHVpbnQ2NF90KEpTSVBDJik+JiBjYWxsYmFjaykKK3sKKyAgICBh
dXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOworICAgIGF1dG8mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworCisgICAgUmVm
UHRyPEpTSVBDPiB3cmFwcGVkID0gdG9XcmFwcGVkKGNvbnRleHQsIHRoaXNPYmplY3QpOworICAg
IGlmICghd3JhcHBlZCkgeworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVU
eXBlRXJyb3IodG9KUyhjb250ZXh0KSwgIldyb25nIHR5cGUiX3MpKTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIGF1dG8gaWQgPSBj
YWxsYmFjaygqd3JhcHBlZCk7CisgICAgSlNDOjpKU0NlbGwqIGpzVmFsdWUgPSBKU0M6OkpTQmln
SW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgaWQpOworICAgIHJldHVybiB0b1JlZih2bSwg
anNWYWx1ZSk7Cit9CisKK0pTVmFsdWVSZWYgSlNJUEM6Om1lc3NhZ2VzKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7Cisg
ICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayh2bSk7CisKKyAgICBhdXRvKiBpbXBsID0gdG9XcmFwcGVkKGNvbnRleHQsIHRoaXNPYmpl
Y3QpOworICAgIGlmICghaW1wbCkgeworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpj
cmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0KSwgIldyb25nIHR5cGUiX3MpKTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIEpTQzo6
SlNPYmplY3QqIG1lc3NhZ2VzT2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICBhdXRvIG5hbWVJZGVu
dCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElQQzo6TWVzc2FnZU5hbWU6
Okxhc3QpOyArK2kpIHsKKyAgICAgICAgYXV0byogbWVzc2FnZU5hbWUgPSBkZXNjcmlwdGlvbihz
dGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPihpKSk7CisKKyAgICAgICAgSlNDOjpKU09iamVj
dCogZGljdGlvbmFyeSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgICAgIGRpY3Rpb25hcnktPnB1dERpcmVj
dCh2bSwgbmFtZUlkZW50LCBKU0M6OkpTVmFsdWUoaSkpOworCisgICAgICAgIC8vIEZJWE1FOiBB
ZGQgYXJndW1lbnQgbmFtZXMuCisKKyAgICAgICAgbWVzc2FnZXNPYmplY3QtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBtZXNzYWdlTmFtZSksIGRpY3Rpb25h
cnkpOworICAgIH0KKworICAgIHJldHVybiB0b1JlZih2bSwgbWVzc2FnZXNPYmplY3QpOworfQor
Cit2b2lkIGluamVjdChXZWJQYWdlJiB3ZWJQYWdlLCBXZWJGcmFtZSYgd2ViRnJhbWUsIFdlYkNv
cmU6OkRPTVdyYXBwZXJXb3JsZCYgd29ybGQpCit7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0g
d2ViRnJhbWUuY29yZUZyYW1lKCktPnNjcmlwdCgpLmdsb2JhbE9iamVjdCh3b3JsZCk7CisKKyAg
ICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAg
YXV0byB3cmFwcGVkID0gSlNJUEM6OmNyZWF0ZSh3ZWJQYWdlLCB3ZWJGcmFtZSk7CisgICAgSlNP
YmplY3RSZWYgd3JhcHBlck9iamVjdCA9IEpTT2JqZWN0TWFrZSh0b0dsb2JhbFJlZihnbG9iYWxP
YmplY3QpLCBKU0lQQzo6d3JhcHBlckNsYXNzKCksIHdyYXBwZWQucHRyKCkpOworICAgIGdsb2Jh
bE9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJJ
UEMiKSwgdG9KUyhnbG9iYWxPYmplY3QsIHdyYXBwZXJPYmplY3QpKTsKKworICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIElQQ1Rlc3RpbmdBUEkKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKElQQ19URVNUSU5HX0FQSSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBET01X
cmFwcGVyV29ybGQ7CitjbGFzcyBGcmFtZTsKKworfTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYkZyYW1lOworY2xhc3MgV2ViUGFnZTsKKworbmFtZXNwYWNlIElQQ1Rlc3RpbmdB
UEkgeworCit2b2lkIGluamVjdChXZWJQYWdlJiwgV2ViRnJhbWUmLCBXZWJDb3JlOjpET01XcmFw
cGVyV29ybGQmKTsKKworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmgJKHJldmlzaW9u
IDI2ODE2NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgY2xhc3MgV2ViUGFnZTsKIHN0cnVjdCBG
cmFtZUluZm9EYXRhOwogc3RydWN0IFdlYnNpdGVQb2xpY2llc0RhdGE7CiAKLWNsYXNzIFdlYkZy
YW1lIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6QnVuZGxlRnJh
bWU+IHsKK2NsYXNzIFdlYkZyYW1lIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVj
dDo6VHlwZTo6QnVuZGxlRnJhbWU+LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8V2ViRnJhbWU+IHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFdlYkZyYW1lPiBjcmVhdGUoKSB7IHJldHVybiBhZG9w
dFJlZigqbmV3IFdlYkZyYW1lKTsgfQogICAgIHN0YXRpYyBSZWY8V2ViRnJhbWU+IGNyZWF0ZVN1
YmZyYW1lKFdlYlBhZ2UqLCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgV2ViQ29yZTo6SFRNTEZy
YW1lT3duZXJFbGVtZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjY4MTY1KQorKysgU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4OSw2ICs3ODks
MTAgQEAgV2ViUGFnZTo6V2ViUGFnZShQYWdlSWRlbnRpZmllciBwYWdlSUQsIAogICAgICAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLnVwZGF0
ZVBhcmFtZXRlcnMocGFyYW1ldGVycyk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShJUENfVEVTVElO
R19BUEkpCisgICAgbV92aXNpdGVkTGlua1RhYmxlSUQgPSBwYXJhbWV0ZXJzLnZpc2l0ZWRMaW5r
VGFibGVJRDsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFZQOSkKICAgICBpZiAocGFyYW1ldGVycy5z
aG91bGRFbmFibGVWUDlEZWNvZGVyKQogICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5l
bmFibGVWUDlEZWNvZGVyKCk7CkBAIC0zNzg0LDYgKzM3ODgsMTAgQEAgdm9pZCBXZWJQYWdlOjp1
cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZQogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1
cHBsZW1lbnQ8UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyPigpLT51cGRhdGVQcmVmZXJlbmNlcyhz
ZXR0aW5ncyk7CiAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc2V0VXNlR1BVUHJvY2Vzc0Zv
ck1lZGlhKHNldHRpbmdzLnVzZUdQVVByb2Nlc3NGb3JNZWRpYUVuYWJsZWQoKSk7CiAjZW5kaWYK
KworI2lmIEVOQUJMRShJUENfVEVTVElOR19BUEkpCisgICAgbV9pcGNUZXN0aW5nQVBJRW5hYmxl
ZCA9IHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6aXBjVGVzdGlu
Z0FQSUVuYWJsZWRLZXkoKSk7CisjZW5kaWYKIH0KIAogI2lmIEVOQUJMRShEQVRBX0RFVEVDVElP
TikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJl
dmlzaW9uIDI2ODE2NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTMzOSw2ICsxMzM5LDEyIEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgdXBkYXRlQ09SU0Rpc2FibGluZ1BhdHRlcm5zKFZlY3RvcjxTdHJpbmc+JiYpOwogCisj
aWYgRU5BQkxFKElQQ19URVNUSU5HX0FQSSkKKyAgICBib29sIGlwY1Rlc3RpbmdBUElFbmFibGVk
KCkgY29uc3QgeyByZXR1cm4gbV9pcGNUZXN0aW5nQVBJRW5hYmxlZDsgfQorICAgIHVpbnQ2NF90
IHdlYlBhZ2VQcm94eUlEKCkgY29uc3QgeyByZXR1cm4gbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9u
SUQoKTsgfQorICAgIHVpbnQ2NF90IHZpc2l0ZWRMaW5rVGFibGVJRCgpIGNvbnN0IHsgcmV0dXJu
IG1fdmlzaXRlZExpbmtUYWJsZUlEOyB9CisjZW5kaWYKKwogICAgIHZvaWQgZ2V0UHJvY2Vzc0Rp
c3BsYXlOYW1lKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKIAogICAgIFdl
YkNvcmU6OkFsbG93c0NvbnRlbnRKYXZhU2NyaXB0IGFsbG93c0NvbnRlbnRKYXZhU2NyaXB0RnJv
bU1vc3RSZWNlbnROYXZpZ2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd3NDb250ZW50SmF2
YVNjcmlwdEZyb21Nb3N0UmVjZW50TmF2aWdhdGlvbjsgfQpAQCAtMjE3MSw2ICsyMTc3LDExIEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2NhblVzZUNyZWRlbnRpYWxTdG9yYWdlIHsgdHJ1ZSB9Owog
CiAgICAgVmVjdG9yPFN0cmluZz4gbV9jb3JzRGlzYWJsaW5nUGF0dGVybnM7CisKKyNpZiBFTkFC
TEUoSVBDX1RFU1RJTkdfQVBJKQorICAgIGJvb2wgbV9pcGNUZXN0aW5nQVBJRW5hYmxlZCB7IGZh
bHNlIH07CisgICAgdWludDY0X3QgbV92aXNpdGVkTGlua1RhYmxlSUQ7CisjZW5kaWYKIH07CiAK
ICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2ODE3NSkKKysrIFRvb2xzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDIwLTEwLTA4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1ha2UgaXQgcG9zc2libGUgdG8g
c2VuZCBhbiBhcmJpdHJhcnkgSVBDIG1lc3NhZ2UgZnJvbSBKYXZhU2NyaXB0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc0MjMKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY5OTY5MzUxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JUENUZXN0aW5nQVBJLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bSVBDVGVzdGluZ0FQSURlbGVn
YXRlIHdlYlZpZXc6cnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTppbml0aWF0ZWRC
eUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoVEVTVCk6CisKIDIwMjAtMTAt
MDcgIEFkaXR5YSBLZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JF
U1NJT04ocjI2ODEyMyk6IFsgaU9TIF0gNCBUZXN0V2ViS2l0QVBJLldlYktpdExlZ2FjeSBmYWls
dXJlczogRmlsZSBuYW1lIHVuYXZhaWxhYmxlLiBVbmtub3duIEMrKyBleGNlcHRpb24gdGhyb3du
IGluIHRoZSB0ZXN0IGJvZHkuCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjY4MTY1KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg0Niw2ICs4NDYsNyBAQAogCQk5QjRG
OEZBNzE1OUQ1MkREMDAyRDlGOTQgLyogSFRNTENvbGxlY3Rpb25OYW1lZEl0ZW0uaHRtbCBpbiBD
b3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjRGOEZB
NjE1OUQ1MkNBMDAyRDlGOTQgLyogSFRNTENvbGxlY3Rpb25OYW1lZEl0ZW0uaHRtbCAqLzsgfTsK
IAkJOUI1OUYxMkEyMDM0MDg2RjAwOUU2M0Q1IC8qIG1zby1saXN0LWNvbXBhdC1tb2RlLmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI1
OUYxMjkyMDM0MDg1NDAwOUU2M0Q1IC8qIG1zby1saXN0LWNvbXBhdC1tb2RlLmh0bWwgKi87IH07
CiAJCTlCNjI2MzBDMUY4QzI1QzgwMDdFRTI5QiAvKiBjb3B5LXVybC5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNjI2MzBCMUY4QzI1
MTAwMDdFRTI5QiAvKiBjb3B5LXVybC5odG1sICovOyB9OworCQk5QjZEOUZGOTI1MkVGREU1MDBB
NTE2NDAgLyogSVBDVGVzdGluZ0FQSS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDlCNkQ5RkY4MjUyRUZERTUwMEE1MTY0MCAvKiBJUENUZXN0aW5nQVBJ
Lm1tICovOyB9OwogCQk5QjdBMzdDNDFGOEFFQkE1MDA0QUEyMjggLyogQ29weVVSTC5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCN0EzN0MyMUY4QUVC
QTUwMDRBQTIyOCAvKiBDb3B5VVJMLm1tICovOyB9OwogCQk5QjdENzQwRjFGODM3ODc3MDAwNkM0
MzIgLyogcGFzdGUtcnRmZC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDlCN0Q3NDBFMUY4Mzc3RTYwMDA2QzQzMiAvKiBwYXN0ZS1ydGZk
Lmh0bWwgKi87IH07CiAJCTlCOTMzMkNFMjMyMEM3NDUwMDJENTBFOCAvKiBjb2NvYS13cml0ZXIt
bWFya3VwLXdpdGgtbGlzdHMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5QjkzMzJDRDIzMjBDNzNFMDAyRDUwRTggLyogY29jb2Etd3Jp
dGVyLW1hcmt1cC13aXRoLWxpc3RzLmh0bWwgKi87IH07CkBAIC0yNDU2LDYgKzI0NTcsNyBAQAog
CQk5QjRGOEZBNjE1OUQ1MkNBMDAyRDlGOTQgLyogSFRNTENvbGxlY3Rpb25OYW1lZEl0ZW0uaHRt
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IEhUTUxDb2xsZWN0aW9uTmFtZWRJdGVtLmh0
bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCNTlGMTI5MjAzNDA4NTQwMDlFNjNE
NSAvKiBtc28tbGlzdC1jb21wYXQtbW9kZS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gIm1zby1saXN0LWNvbXBh
dC1tb2RlLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjYyNjMwQjFGOEMy
NTEwMDA3RUUyOUIgLyogY29weS11cmwuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJjb3B5LXVybC5odG1sIjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUI2RDlGRjgyNTJFRkRFNTAwQTUxNjQwIC8q
IElQQ1Rlc3RpbmdBUEkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJUENUZXN0aW5nQVBJLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Qjc5MTY0RjFCRDg5RDBEMDBENTBCOEYg
LyogRmlyc3RSZXNwb25kZXJTY3JvbGxpbmdQb3NpdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZpcnN0UmVzcG9uZGVyU2Nyb2xsaW5nUG9zaXRpb24ubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCN0EzN0MyMUY4QUVCQTUwMDRBQTIyOCAv
KiBDb3B5VVJMLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29weVVSTC5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUI3RDc0MEUxRjgzNzdFNjAwMDZDNDMyIC8qIHBhc3RlLXJ0
ZmQuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuaHRtbDsgcGF0aCA9ICJwYXN0ZS1ydGZkLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMzI2Nyw2ICszMjY5LDcgQEAKIAkJCQlDRUQ3M0QzNTI0NkYyMDRDMDBEQUUz
MjcgLyogSW5zZXJ0VGV4dEFsdGVybmF0aXZlcy5tbSAqLywKIAkJCQkyREIwMjMyRTFFNEU4NzE4
MDA3MDcxMjMgLyogSW50ZXJhY3Rpb25EZWFkbG9ja0FmdGVyQ3Jhc2gubW0gKi8sCiAJCQkJMkQx
MTZFMTIyM0UwQ0IzOTAwMjA4OTAwIC8qIGlPU01vdXNlU3VwcG9ydC5tbSAqLywKKwkJCQk5QjZE
OUZGODI1MkVGREU1MDBBNTE2NDAgLyogSVBDVGVzdGluZ0FQSS5tbSAqLywKIAkJCQk1QzY5QkRE
NDFGODJBN0VCMDAwRjRGNEIgLyogSmF2YVNjcmlwdER1cmluZ05hdmlnYXRpb24ubW0gKi8sCiAJ
CQkJNUMwMTYwQzAyMUExMzIzMjAwNzdGQTMyIC8qIEpJVEVuYWJsZWQubW0gKi8sCiAJCQkJQzI1
Q0NBMDUxRTUxMzgwQjAwMjZDQjhBIC8qIExpbmVCcmVha2luZy5tbSAqLywKQEAgLTUyMjIsNiAr
NTIyNSw3IEBACiAJCQkJN0E5MDlBODIxRDg3NzQ4MDAwN0UxMEY4IC8qIEludFJlY3RUZXN0cy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3QTkwOUE4MzFEODc3NDgwMDA3RTEwRjggLyogSW50U2l6
ZVRlc3RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEMTE2RTEzMjNFMENCM0EwMDIwODkwMCAv
KiBpT1NNb3VzZVN1cHBvcnQubW0gaW4gU291cmNlcyAqLywKKwkJCQk5QjZEOUZGOTI1MkVGREU1
MDBBNTE2NDAgLyogSVBDVGVzdGluZ0FQSS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDMEJGODkz
MURENTk5QkQwMEIwMDMyOCAvKiBJc05hdmlnYXRpb25BY3Rpb25UcnVzdGVkLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQ0Q1RkY0OUYyMTYyRTk0MzAwNEJEODZGIC8qIElTT0JveC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1QzY5QkRENTFGODJBN0VGMDAwRjRGNEIgLyogSmF2YVNjcmlwdER1cmlu
Z05hdmlnYXRpb24ubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSVBDVGVzdGluZ0FQSS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lQQ1Rlc3RpbmdBUEkubW0JKG5vbmV4aXN0
ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JUENUZXN0aW5n
QVBJLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0ICJjb25maWcuaCIKKworI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgorI2ltcG9ydCAiVXRp
bGl0aWVzLmgiCisjaW1wb3J0IDxXZWJLaXQvV0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlLmg+
CisjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktp
dC9XS1dlYlZpZXcuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tJbnRlcm5hbERlYnVnRmVhdHVyZS5o
PgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitzdGF0aWMgYm9vbCBkb25lID0gZmFsc2U7
CitzdGF0aWMgUmV0YWluUHRyPE5TU3RyaW5nPiBhbGVydE1lc3NhZ2U7CisKK0BpbnRlcmZhY2Ug
SVBDVGVzdGluZ0FQSURlbGVnYXRlIDogTlNPYmplY3QgPFdLVUlEZWxlZ2F0ZT4KK0BlbmQKKyAg
ICAKK0BpbXBsZW1lbnRhdGlvbiBJUENUZXN0aW5nQVBJRGVsZWdhdGUKKworLSAodm9pZCl3ZWJW
aWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3Nh
Z2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZy
YW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgor
eworICAgIGFsZXJ0TWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgZG9uZSA9IHRydWU7CisgICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKK30KKworQGVuZAorCitURVNUKElQQ1Rlc3RpbmdBUEksIElzRGlz
YWJsZWRCeURlZmF1bHQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsK
KworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbSVBDVGVzdGluZ0FQSURlbGVnYXRlIGFs
bG9jXSBpbml0XSk7CisgICAgW3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07
CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1M
U3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+PHNjcmlwdD5hbGVydCh0eXBlb2YoSVBDKSk7PC9zY3Jp
cHQ+Il07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKyAgICBFWFBFQ1Rf
U1RSRVEoW2FsZXJ0TWVzc2FnZSBVVEY4U3RyaW5nXSwgInVuZGVmaW5lZCIpOworfQorCisjaWYg
RU5BQkxFKElQQ19URVNUSU5HX0FQSSkKKworVEVTVChJUENUZXN0aW5nQVBJLCBDYW5TZW5kQWxl
cnQpCit7CisgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRp
b24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAg
IGZvciAoX1dLSW50ZXJuYWxEZWJ1Z0ZlYXR1cmUgKmZlYXR1cmUgaW4gW1dLUHJlZmVyZW5jZXMg
X2ludGVybmFsRGVidWdGZWF0dXJlc10pIHsKKyAgICAgICAgaWYgKFtmZWF0dXJlLmtleSBpc0Vx
dWFsVG9TdHJpbmc6QCJJUENUZXN0aW5nQVBJRW5hYmxlZCJdKSB7CisgICAgICAgICAgICBbW2Nv
bmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdIF9zZXRFbmFibGVkOllFUyBmb3JJbnRlcm5hbERlYnVn
RmVhdHVyZTpmZWF0dXJlXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIFJldGFpblB0cjxUZXN0V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCAzMDAsIDMwMCkgY29u
ZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0g
YWRvcHROUyhbW0lQQ1Rlc3RpbmdBUElEZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIFt3ZWJW
aWV3IHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgZG9uZSA9IGZhbHNlOwor
ICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1s
PjxzY3JpcHQ+SVBDLnNlbmRTeW5jTWVzc2FnZSgnVUknLCBJUEMud2ViUGFnZVByb3h5SUQsIElQ
Qy5tZXNzYWdlcy5XZWJQYWdlUHJveHlfUnVuSmF2YVNjcmlwdEFsZXJ0Lm5hbWUsIDEwMCwiCisg
ICAgICAgICJbe3R5cGU6ICd1aW50NjRfdCcsIHZhbHVlOiBJUEMuZnJhbWVJZGVudGlmaWVyfSwg
e3R5cGU6ICdGcmFtZUluZm9EYXRhJ30sIHsndHlwZSc6ICdTdHJpbmcnLCAndmFsdWUnOiAnaGkn
fV0pOzwvc2NyaXB0PiJdOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisK
KyAgICBFWFBFQ1RfU1RSRVEoW2FsZXJ0TWVzc2FnZSBVVEY4U3RyaW5nXSwgImhpIik7Cit9CisK
KyNlbmRpZgo=
</data>
<flag name="review"
          id="426919"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>