<?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>122617</bug_id>
          
          <creation_ts>2013-10-10 13:09:22 -0700</creation_ts>
          <short_desc>transition void cti_op_* methods to JIT operations.</short_desc>
          <delta_ts>2013-10-15 11:32:15 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>122287</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>mark.lam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>938507</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-10 13:09:22 -0700</bug_when>
    <thetext>Transition these stubs to operations
    cti_handle_watchdog_timer
    cti_op_debug
    cti_op_pop_scope
    cti_op_profile_did_call
    cti_op_profile_will_call
    cti_op_put_by_index
    cti_op_put_getter_setter
    cti_op_tear_off_activation
    cti_op_tear_off_arguments
    cti_op_throw_static_error
    cti_optimize</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938815</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-11 08:58:22 -0700</bug_when>
    <thetext>I&apos;ll also transition cgi_op_push_name_scope and cti_push_with_scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939766</commentid>
    <comment_count>2</comment_count>
      <attachid>214213</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-14 18:00:23 -0700</bug_when>
    <thetext>Created attachment 214213
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939798</commentid>
    <comment_count>3</comment_count>
      <attachid>214213</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-14 19:18:33 -0700</bug_when>
    <thetext>Comment on attachment 214213
Patch

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

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:262
&gt; -    stubCall.addArgument(unmodifiedArgumentsRegister(VirtualRegister(arguments)).offset(), regT2);
&gt; -    stubCall.addArgument(activation, regT2);
&gt; -    stubCall.call();
&gt; +    emitGetVirtualRegister(arguments, regT0);

The code for unmodifiedArgumentsRegister says:
    inline VirtualRegister unmodifiedArgumentsRegister(VirtualRegister argumentsRegister) { return VirtualRegister(argumentsRegister.offset() + 1); }

Is it appropriate to replace &quot;stubCall.addArgument(unmodifiedArgumentsRegister(VirtualRegister(arguments)).offset(), regT2);&quot; with &quot;emitGetVirtualRegister(arguments, regT0);&quot;?

&gt; Source/JavaScriptCore/jit/JITOperations.h:239
&gt; -size_t JIT_OPERATION operationCompareLess(ExecState*, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2) WTF_INTERNAL;
&gt; -size_t JIT_OPERATION operationCompareLessEq(ExecState*, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2) WTF_INTERNAL;
&gt; -size_t JIT_OPERATION operationCompareGreater(ExecState*, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2) WTF_INTERNAL;
&gt; -size_t JIT_OPERATION operationCompareGreaterEq(ExecState*, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2) WTF_INTERNAL;
&gt; +size_t JIT_OPERATION operationCompareLess(ExecState*, EncodedJSValue, EncodedJSValue encodedOp2) WTF_INTERNAL;
&gt; +size_t JIT_OPERATION operationCompareLessEq(ExecState*, EncodedJSValue, EncodedJSValue encodedOp2) WTF_INTERNAL;
&gt; +size_t JIT_OPERATION operationCompareGreater(ExecState*, EncodedJSValue, EncodedJSValue encodedOp2) WTF_INTERNAL;
&gt; +size_t JIT_OPERATION operationCompareGreaterEq(ExecState*, EncodedJSValue, EncodedJSValue encodedOp2) WTF_INTERNAL;

Did you also intend to remove the encodedOp2 as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939977</commentid>
    <comment_count>4</comment_count>
      <attachid>214265</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-15 08:53:11 -0700</bug_when>
    <thetext>Created attachment 214265
With fixes Mark suggested</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939989</commentid>
    <comment_count>5</comment_count>
      <attachid>214265</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-10-15 09:21:44 -0700</bug_when>
    <thetext>Comment on attachment 214265
With fixes Mark suggested

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

&gt; Source/JavaScriptCore/jit/CCallHelpers.h:1096
&gt; +        poke(arg4, POKE_ARGUMENT_OFFSET);

Will this poke be valid when we&apos;re running on the C stack? Will each stack frame reserve space for these pokes?

&gt; Source/JavaScriptCore/jit/JITOpcodes32_64.cpp:1185
&gt; +    callOperation(operationProfileWillCall, regT1, regT0);

Wrong function = broken profiler. Did the profiler tests pass for this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940032</commentid>
    <comment_count>6</comment_count>
      <attachid>214280</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-15 11:05:50 -0700</bug_when>
    <thetext>Created attachment 214280
Updated patch.  Rebased and with fix.

(In reply to comment #5)
&gt; (From update of attachment 214265 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=214265&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/CCallHelpers.h:1096
&gt; &gt; +        poke(arg4, POKE_ARGUMENT_OFFSET);
&gt; 
&gt; Will this poke be valid when we&apos;re running on the C stack? Will each stack frame reserve space for these pokes?

This poke is valid way to pass additional arguments.  When we move JSC over to the C stack, we&apos;ll need to make sure there is space for calling out to C including any calls made by the immediate callee.  My thinking is that we make sure there is stack space for C calls beyond which JSC can use for stack frames.
 
&gt; &gt; Source/JavaScriptCore/jit/JITOpcodes32_64.cpp:1185
&gt; &gt; +    callOperation(operationProfileWillCall, regT1, regT0);
&gt; 
&gt; Wrong function = broken profiler. Did the profiler tests pass for this patch?

I made the change and ran the layout tests including the profiler tests with a 32 bit build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940054</commentid>
    <comment_count>7</comment_count>
      <attachid>214280</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-10-15 11:25:31 -0700</bug_when>
    <thetext>Comment on attachment 214280
Updated patch.  Rebased and with fix.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940056</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-15 11:32:15 -0700</bug_when>
    <thetext>Committed r157457: &lt;http://trac.webkit.org/changeset/157457&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214213</attachid>
            <date>2013-10-14 18:00:23 -0700</date>
            <delta_ts>2013-10-15 08:53:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>122617.patch</filename>
            <type>text/plain</type>
            <size>79399</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3NDM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBA
CisyMDEzLTEwLTE0ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIHRyYW5zaXRpb24gdm9pZCBjdGlfb3BfKiBtZXRob2RzIHRvIEpJVCBvcGVyYXRpb25zLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNjE3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29udmVydGVk
IHRoZSBmb2xsb3cgc3R1YnMgdG8gSklUIG9wZXJhdGlvbnM6CisgICAgICAgICAgICBjdGlfaGFu
ZGxlX3dhdGNoZG9nX3RpbWVyCisgICAgICAgICAgICBjdGlfb3BfZGVidWcKKyAgICAgICAgICAg
IGN0aV9vcF9wb3Bfc2NvcGUKKyAgICAgICAgICAgIGN0aV9vcF9wcm9maWxlX2RpZF9jYWxsCisg
ICAgICAgICAgICBjdGlfb3BfcHJvZmlsZV93aWxsX2NhbGwKKyAgICAgICAgICAgIGN0aV9vcF9w
dXRfYnlfaW5kZXgKKyAgICAgICAgICAgIGN0aV9vcF9wdXRfZ2V0dGVyX3NldHRlcgorICAgICAg
ICAgICAgY3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24KKyAgICAgICAgICAgIGN0aV9vcF90ZWFy
X29mZl9hcmd1bWVudHMKKyAgICAgICAgICAgIGN0aV9vcF90aHJvd19zdGF0aWNfZXJyb3IKKyAg
ICAgICAgICAgIGN0aV9vcHRpbWl6ZQorCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0NDYWxsSGVs
cGVycy5oOgorICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZSk6CisgICAgICAgIChKU0M6OkNDYWxsSGVscGVyczo6c2V0dXBUaHJlZVN0dWJBcmdz
R1BSKToKKyAgICAgICAgKEpTQzo6Q0NhbGxIZWxwZXJzOjpzZXR1cFN0dWJBcmd1bWVudHMpOgor
ICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OnNldHVwU3R1YkFyZ3VtZW50czEzNCk6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEVudGVyT3B0aW1pemF0
aW9uQ2hlY2spOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5l
cy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGppdC9K
SVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RlYXJfb2ZmX2FjdGl2
YXRpb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGVhcl9vZmZfYXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1c2hfd2l0aF9zY29wZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wb3Bfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHVzaF9uYW1lX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93X3N0YXRp
Y19lcnJvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wcm9maWxlX3dpbGxfY2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wcm9maWxlX2RpZF9jYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9sb29wX2hpbnQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHVzaF93aXRoX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3BvcF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXNoX25h
bWVfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3dfc3RhdGljX2Vycm9y
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYnVnKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3Byb2ZpbGVfd2lsbF9jYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3Byb2ZpbGVfZGlkX2NhbGwpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaW5kZXgpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXIpOgorICAgICAgICAqIGpp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9ieV9pbmRleCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3Nl
dHRlcik6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKiBqaXQvSklUU3R1
YnMuaDoKKwogMjAxMy0xMC0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIERGRyBQdXRCeUlkIElDIHNob3VsZCB1c2UgdGhlIENvbmN1cnJlbnRKSVRMb2NrZXIg
c2luY2UgaXQncyBub3cgZGVhbGluZyB3aXRoIElDJ3MgdGhhdCBnZXQgcmVhZCBieSB0aGUgY29t
cGlsZXIgdGhyZWFkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDE1NzQzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5MiwxNiArNjkyLDYgQEAgSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUlubAogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmQXJndW1lbnRzKEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBhcmd1bWVudHNDZWxsLCBKU0NlbGwqIGFjdGl2YXRpb25DZWxs
KQotewotICAgIEFTU0VSVChleGVjLT5jb2RlQmxvY2soKS0+dXNlc0FyZ3VtZW50cygpKTsKLSAg
ICBpZiAoYWN0aXZhdGlvbkNlbGwpIHsKLSAgICAgICAganNDYXN0PEFyZ3VtZW50cyo+KGFyZ3Vt
ZW50c0NlbGwpLT5kaWRUZWFyT2ZmQWN0aXZhdGlvbihleGVjLCBqc0Nhc3Q8SlNBY3RpdmF0aW9u
Kj4oYWN0aXZhdGlvbkNlbGwpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBqc0Nhc3Q8
QXJndW1lbnRzKj4oYXJndW1lbnRzQ2VsbCktPnRlYXJPZmYoZXhlYyk7Ci19Ci0KIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3VtZW50cygKICAgICBFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogYXJndW1lbnRzQ2VsbCwgSlNDZWxsKiBhY3RpdmF0aW9uQ2VsbCwg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTU3NDM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTkx
LDcgKzkxLDYgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdAogc2l6
ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbChFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBX
VEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0
RXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkNyZWF0ZUlubGluZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwgSW5saW5lQ2FsbEZyYW1lKikgV1RG
X0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZBcmd1bWVudHMo
RXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblRlYXJPZmZJbmxpbmVkQXJndW1lbnRzKEV4ZWNTdGF0ZSosIEpTQ2Vs
bCosIEpTQ2VsbCosIElubGluZUNhbGxGcmFtZSopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRzTGVuZ3RoKEV4ZWNTdGF0ZSos
IGludDMyX3QpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0SW5saW5lZEFyZ3VtZW50QnlWYWwoRXhlY1N0YXRlKiwgaW50MzJfdCwgSW5saW5l
Q2FsbEZyYW1lKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAxNTc0MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNiAr
MjEwLDE1IEBAIHB1YmxpYzoKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOwogICAgIH0K
IAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMykKKyAgICB7CisgICAgICAg
IHJlc2V0Q2FsbEFyZ3VtZW50cygpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7CisgICAg
ICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMp
OworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tUHRyIGFyZzMpCiAgICAg
ewogICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKQEAgLTM3Miw3ICszODEsMjcgQEAgcHVi
bGljOgogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7CiAgICAgfQogCi0gICAgQUxXQVlT
X0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIsIEdQUlJlZyBhcmczLCBHUFJSZWcgYXJnNCwgR1BSUmVnIGFyZzUpCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRy
IGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMywgVHJ1c3RlZEltbTMyIGFyZzQpCisgICAg
eworICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFy
ZzEpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7CisgICAgICAgIGFkZENhbGxBcmd1
bWVudChhcmczKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzQpOworICAgIH0KKworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFy
ZzEsIFRydXN0ZWRJbW1QdHIgYXJnMiwgR1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0KQorICAgIHsK
KyAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcx
KTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOworICAgICAgICBhZGRDYWxsQXJndW1l
bnQoYXJnMyk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKKyAgICB9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQ
UlJlZyBhcmcyLCBHUFJSZWcgYXJnMywgR1BSUmVnIGFyZzQsIEdQUlJlZyBhcmc1KQogICAgIHsK
ICAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CkBAIC0zODMsNiArNDEyLDE3IEBAIHB1YmxpYzoK
ICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzUpOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgR1BSUmVnIGFyZzQsIEdQUlJlZyBhcmc1KQorICAgIHsK
KyAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcx
KTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOworICAgICAgICBhZGRDYWxsQXJndW1l
bnQoYXJnMyk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKKyAgICAgICAgYWRkQ2Fs
bEFyZ3VtZW50KGFyZzUpOworICAgIH0KKyAgICAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVn
IGFyZzMsIEdQUlJlZyBhcmc0LCBUcnVzdGVkSW1tUHRyIGFyZzUpCiAgICAgewogICAgICAgICBy
ZXNldENhbGxBcmd1bWVudHMoKTsKQEAgLTQ2NCw2ICs1MDQsNjAgQEAgcHVibGljOgogICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgIHN3YXAoZGVzdEEsIGRlc3RCKTsKICAgICB9CisKKyAgICB0
ZW1wbGF0ZTxHUFJSZWcgZGVzdEEsIEdQUlJlZyBkZXN0QiwgR1BSUmVnIGRlc3RDPgorICAgIHZv
aWQgc2V0dXBUaHJlZVN0dWJBcmdzR1BSKEdQUlJlZyBzcmNBLCBHUFJSZWcgc3JjQiwgR1BSUmVn
IHNyY0MpCisgICAgeworICAgICAgICAvLyBJZiBuZWl0aGVyIG9mIHNyY0Ivc3JjQyBhcmUgaW4g
b3VyIHdheSwgdGhlbiB3ZSBjYW4gbW92ZSBzcmNBIGludG8gcGxhY2UuCisgICAgICAgIC8vIFRo
ZW4gd2UgY2FuIHVzZSBzZXR1cFR3b1N0dWJBcmdzIHRvIGZpeCBzcmNCL3NyY0MuCisgICAgICAg
IGlmIChzcmNCICE9IGRlc3RBICYmIHNyY0MgIT0gZGVzdEEpIHsKKyAgICAgICAgICAgIG1vdmUo
c3JjQSwgZGVzdEEpOworICAgICAgICAgICAgc2V0dXBUd29TdHViQXJnc0dQUjxkZXN0QiwgZGVz
dEM+KHNyY0IsIHNyY0MpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBJZiBuZWl0aGVyIG9mIHNyY0Evc3JjQyBhcmUgaW4gb3VyIHdheSwgdGhl
biB3ZSBjYW4gbW92ZSBzcmNCIGludG8gcGxhY2UuCisgICAgICAgIC8vIFRoZW4gd2UgY2FuIHVz
ZSBzZXR1cFR3b1N0dWJBcmdzIHRvIGZpeCBzcmNBL3NyY0MuCisgICAgICAgIGlmIChzcmNBICE9
IGRlc3RCICYmIHNyY0MgIT0gZGVzdEIpIHsKKyAgICAgICAgICAgIG1vdmUoc3JjQiwgZGVzdEIp
OworICAgICAgICAgICAgc2V0dXBUd29TdHViQXJnc0dQUjxkZXN0QSwgZGVzdEM+KHNyY0EsIHNy
Y0MpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBJZiBuZWl0aGVyIG9mIHNyY0Evc3JjQiBhcmUgaW4gb3VyIHdheSwgdGhlbiB3ZSBjYW4gbW92
ZSBzcmNDIGludG8gcGxhY2UuCisgICAgICAgIC8vIFRoZW4gd2UgY2FuIHVzZSBzZXR1cFR3b1N0
dWJBcmdzIHRvIGZpeCBzcmNBL3NyY0IuCisgICAgICAgIGlmIChzcmNBICE9IGRlc3RDICYmIHNy
Y0IgIT0gZGVzdEMpIHsKKyAgICAgICAgICAgIG1vdmUoc3JjQywgZGVzdEMpOworICAgICAgICAg
ICAgc2V0dXBUd29TdHViQXJnc0dQUjxkZXN0QSwgZGVzdEI+KHNyY0EsIHNyY0IpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBJZiB3ZSBnZXQg
aGVyZSwgd2UgaGF2ZW4ndCBiZWVuIGFibGUgdG8gbW92ZSBhbnkgb2Ygc3JjQS9zcmNCL3NyY0Mu
CisgICAgICAgIC8vIFNpbmNlIGFsbCB0aHJlZSBhcmUgYmxvY2tlZCwgdGhlbiBhbGwgdGhyZWUg
bXVzdCBhbHJlYWR5IGJlIGluIHRoZSBhcmd1bWVudCByZWdpc3Rlci4KKyAgICAgICAgLy8gQnV0
IGFyZSB0aGV5IGluIHRoZSByaWdodCBvbmVzPworICAgICAgICAKKyAgICAgICAgLy8gRmlyc3Qs
IGVuc3VyZSBzcmNBIGlzIGluIHBsYWNlLgorICAgICAgICBpZiAoc3JjQSAhPSBkZXN0QSkgewor
ICAgICAgICAgICAgc3dhcChzcmNBLCBkZXN0QSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIElmIHNyY0Egd2Fzbid0IGluIGFyZ3VtZW50R1BSMSwgb25lIG9mIHNyY0Ivc3JjQyBtdXN0
IGJlLgorICAgICAgICAgICAgQVNTRVJUKHNyY0IgPT0gZGVzdEEgfHwgc3JjQyA9PSBkZXN0QSk7
CisgICAgICAgICAgICAvLyBJZiBzcmNCIHdhcyBpbiBhcmd1bWVudEdQUjEgaXQgbm8gbG9uZ2Vy
IGlzIChkdWUgdG8gdGhlIHN3YXApLgorICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHNyY0MgbXVz
dCBoYXZlIGJlZW4uIE1hcmsgaGltIGFzIG1vdmVkLgorICAgICAgICAgICAgaWYgKHNyY0IgPT0g
ZGVzdEEpCisgICAgICAgICAgICAgICAgc3JjQiA9IHNyY0E7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgc3JjQyA9IHNyY0E7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIEVpdGhlciBzcmNCICYgc3JjQyBuZWVkIHN3YXBwaW5nLCBvciB3ZSdyZSBhbGwgZG9uZS4K
KyAgICAgICAgQVNTRVJUKChzcmNCID09IGRlc3RCIHx8IHNyY0MgPT0gZGVzdEMpCisgICAgICAg
ICAgICB8fCAoc3JjQiA9PSBkZXN0QyB8fCBzcmNDID09IGRlc3RCKSk7CisgICAgICAgIAorICAg
ICAgICBpZiAoc3JjQiAhPSBkZXN0QikKKyAgICAgICAgICAgIHN3YXAoZGVzdEIsIGRlc3RDKTsK
KyAgICB9CisKICNpZiBDUFUoWDg2XzY0KQogICAgIHRlbXBsYXRlPEZQUlJlZyBkZXN0QSwgRlBS
UmVnIGRlc3RCPgogICAgIHZvaWQgc2V0dXBUd29TdHViQXJnc0ZQUihGUFJSZWcgc3JjQSwgRlBS
UmVnIHNyY0IpCkBAIC01MTYsNTggKzYxMCwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBz
ZXR1cFR3b1N0dWJBcmdzR1BSPEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIyPihhcmcxLCBhcmcyKTsKICAgICB9CisKICAgICB2b2lkIHNldHVwU3R1YkFyZ3VtZW50
cyhHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKLSAgICAgICAg
Ly8gSWYgbmVpdGhlciBvZiBhcmcyL2FyZzMgYXJlIGluIG91ciB3YXksIHRoZW4gd2UgY2FuIG1v
dmUgYXJnMSBpbnRvIHBsYWNlLgotICAgICAgICAvLyBUaGVuIHdlIGNhbiB1c2Ugc2V0dXBUd29T
dHViQXJncyB0byBmaXggYXJnMi9hcmczLgotICAgICAgICBpZiAoYXJnMiAhPSBHUFJJbmZvOjph
cmd1bWVudEdQUjEgJiYgYXJnMyAhPSBHUFJJbmZvOjphcmd1bWVudEdQUjEpIHsKLSAgICAgICAg
ICAgIG1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgICAgIHNldHVw
VHdvU3R1YkFyZ3NHUFI8R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjM+KGFyZzIsIGFyZzMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gSWYgbmVpdGhlciBvZiBhcmcxL2FyZzMgYXJlIGluIG91ciB3YXksIHRoZW4gd2UgY2Fu
IG1vdmUgYXJnMiBpbnRvIHBsYWNlLgotICAgICAgICAvLyBUaGVuIHdlIGNhbiB1c2Ugc2V0dXBU
d29TdHViQXJncyB0byBmaXggYXJnMS9hcmczLgotICAgICAgICBpZiAoYXJnMSAhPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjIgJiYgYXJnMyAhPSBHUFJJbmZvOjphcmd1bWVudEdQUjIpIHsKLSAgICAg
ICAgICAgIG1vdmUoYXJnMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKLSAgICAgICAgICAgIHNl
dHVwVHdvU3R1YkFyZ3NHUFI8R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjM+KGFyZzEsIGFyZzMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gSWYgbmVpdGhlciBvZiBhcmcxL2FyZzIgYXJlIGluIG91ciB3YXksIHRoZW4gd2Ug
Y2FuIG1vdmUgYXJnMyBpbnRvIHBsYWNlLgotICAgICAgICAvLyBUaGVuIHdlIGNhbiB1c2Ugc2V0
dXBUd29TdHViQXJncyB0byBmaXggYXJnMS9hcmcyLgotICAgICAgICBpZiAoYXJnMSAhPSBHUFJJ
bmZvOjphcmd1bWVudEdQUjMgJiYgYXJnMiAhPSBHUFJJbmZvOjphcmd1bWVudEdQUjMpIHsKLSAg
ICAgICAgICAgIG1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKLSAgICAgICAgICAg
IHNldHVwVHdvU3R1YkFyZ3NHUFI8R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1
bWVudEdQUjI+KGFyZzEsIGFyZzIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHdlIGhhdmVuJ3QgYmVlbiBhYmxlIHRvIG1vdmUg
YW55IG9mIGFyZzEvYXJnMi9hcmczLgotICAgICAgICAvLyBTaW5jZSBhbGwgdGhyZWUgYXJlIGJs
b2NrZWQsIHRoZW4gYWxsIHRocmVlIG11c3QgYWxyZWFkeSBiZSBpbiB0aGUgYXJndW1lbnQgcmVn
aXN0ZXIuCi0gICAgICAgIC8vIEJ1dCBhcmUgdGhleSBpbiB0aGUgcmlnaHQgb25lcz8KLQotICAg
ICAgICAvLyBGaXJzdCwgZW5zdXJlIGFyZzEgaXMgaW4gcGxhY2UuCi0gICAgICAgIGlmIChhcmcx
ICE9IEdQUkluZm86OmFyZ3VtZW50R1BSMSkgewotICAgICAgICAgICAgc3dhcChhcmcxLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOwotCi0gICAgICAgICAgICAvLyBJZiBhcmcxIHdhc24ndCBpbiBh
cmd1bWVudEdQUjEsIG9uZSBvZiBhcmcyL2FyZzMgbXVzdCBiZS4KLSAgICAgICAgICAgIEFTU0VS
VChhcmcyID09IEdQUkluZm86OmFyZ3VtZW50R1BSMSB8fCBhcmczID09IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSk7Ci0gICAgICAgICAgICAvLyBJZiBhcmcyIHdhcyBpbiBhcmd1bWVudEdQUjEgaXQg
bm8gbG9uZ2VyIGlzIChkdWUgdG8gdGhlIHN3YXApLgotICAgICAgICAgICAgLy8gT3RoZXJ3aXNl
IGFyZzMgbXVzdCBoYXZlIGJlZW4uIE1hcmsgaGltIGFzIG1vdmVkLgotICAgICAgICAgICAgaWYg
KGFyZzIgPT0gR1BSSW5mbzo6YXJndW1lbnRHUFIxKQotICAgICAgICAgICAgICAgIGFyZzIgPSBh
cmcxOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFyZzMgPSBhcmcxOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gRWl0aGVyIGFyZzIgJiBhcmczIG5lZWQgc3dhcHBpbmcsIG9y
IHdlJ3JlIGFsbCBkb25lLgotICAgICAgICBBU1NFUlQoKGFyZzIgPT0gR1BSSW5mbzo6YXJndW1l
bnRHUFIyIHx8IGFyZzMgPT0gR1BSSW5mbzo6YXJndW1lbnRHUFIzKQotICAgICAgICAgICAgfHwg
KGFyZzIgPT0gR1BSSW5mbzo6YXJndW1lbnRHUFIzIHx8IGFyZzMgPT0gR1BSSW5mbzo6YXJndW1l
bnRHUFIyKSk7Ci0KLSAgICAgICAgaWYgKGFyZzIgIT0gR1BSSW5mbzo6YXJndW1lbnRHUFIyKQot
ICAgICAgICAgICAgc3dhcChHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMyk7CisgICAgICAgIHNldHVwVGhyZWVTdHViQXJnc0dQUjxHUFJJbmZvOjphcmd1bWVudEdQ
UjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzPihhcmcxLCBh
cmcyLCBhcmczKTsKICAgICB9CiAKKyAgICB2b2lkIHNldHVwU3R1YkFyZ3VtZW50czEzNChHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0KQorICAgIHsKKyAgICAgICAgc2V0dXBU
aHJlZVN0dWJBcmdzR1BSPEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIzLCBHUFJJbmZvOjphcmd1bWVudEdQUjQ+KGFyZzEsIGFyZzMsIGFyZzQpOworICAgIH0KICNp
ZiBDUFUoTUlQUykKICNkZWZpbmUgUE9LRV9BUkdVTUVOVF9PRkZTRVQgNAogI2Vsc2UKQEAgLTEw
MzksNiArMTA5MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBUcnVzdGVkSW1tUHRyIGFy
ZzIsIEdQUlJlZyBhcmczLCAgR1BSUmVnIGFyZzQpCisgICAgeworICAgICAgICBwb2tlKGFyZzQs
IFBPS0VfQVJHVU1FTlRfT0ZGU0VUKTsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEsIGFyZzIsIGFyZzMpOworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIFRydXN0ZWRJbW1QdHIgYXJn
MiwgVHJ1c3RlZEltbTMyIGFyZzMsIEdQUlJlZyBhcmc0KQogICAgIHsKICAgICAgICAgcG9rZShh
cmc0LCBQT0tFX0FSR1VNRU5UX09GRlNFVCk7CkBAIC0xMTkxLDYgKzEyNDksMTMgQEAgcHVibGlj
OgogICAgICAgICBtb3ZlKGFyZzMsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CiAgICAgICAgIG1v
dmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAg
ICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyLCBHUFJSZWcgYXJnMywgR1BSUmVnIGFy
ZzQpCisgICAgeworICAgICAgICBzZXR1cFN0dWJBcmd1bWVudHMxMzQoYXJnMSwgYXJnMywgYXJn
NCk7CisgICAgICAgIG1vdmUoYXJnMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICAgICAg
bW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICB9CiAjZW5kaWYKIAogICAgIHZvaWQgc2V0dXBSZXN1bHRzKEdQUlJlZyBkZXN0QSwgR1BS
UmVnIGRlc3RCKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTU3
NDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDQsMTEgKzEwNCwxMyBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hl
Y2soKQogICAgIGlmICghY2FuQmVPcHRpbWl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
SnVtcCBza2lwT3B0aW1pemUgPSBicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRp
b25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVz
cyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpOwotICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcHRpbWl6ZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQoVHJ1c3RlZEltbTMyKG1fYnl0ZWNvZGVPZmZzZXQpKTsKKyAgICBKdW1wTGlzdCBza2lw
T3B0aW1pemU7CisgICAgCisgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWdu
ZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50
cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNv
dW50ZXIoKSkpKTsKICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVPZmZzZXQpOwotICAgIHN0dWJDYWxs
LmNhbGwoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCBtX2J5dGVjb2Rl
T2Zmc2V0KTsKKyAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmV0
dXJuVmFsdWVSZWdpc3RlcikpOworICAgIGp1bXAocmV0dXJuVmFsdWVSZWdpc3Rlcik7CiAgICAg
c2tpcE9wdGltaXplLmxpbmsodGhpcyk7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkocmV2aXNpb24gMTU3NDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtODY3LDE1ICs4NjcsMjYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRp
b25fRUpJZGMsIGludCwgR1BSUmVnLCBjb25zdCBJZGVudGlmaWVyKik7CiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKLCBpbnQsIEdQ
UlJlZywgR1BSUmVnKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0pJVE9wZXJhdGlvbl9FUCwgaW50LCB2b2lkKik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRVosIGludDMyX3QpOwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VDQywg
UmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUosIFJlZ2lzdGVySUQpOwogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VKSiwgUmVnaXN0
ZXJJRCwgUmVnaXN0ZXJJRCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oU19KSVRPcGVyYXRpb25fRU9Kc3MsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0Up
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0
aW9uX0VDLCBSZWdpc3RlcklEKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0MsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VD
SUNDLCBSZWdpc3RlcklELCBjb25zdCBJZGVudGlmaWVyKiwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJ
RCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVy
YXRpb25fRUlkSlosIGNvbnN0IElkZW50aWZpZXIqLCBSZWdpc3RlcklELCBpbnQzMl90KTsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9F
SiwgUmVnaXN0ZXJJRCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oVl9KSVRPcGVyYXRpb25fRUpJZEpKLCBSZWdpc3RlcklELCBjb25zdCBJZGVudGlmaWVyKiwg
UmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSkpJLCBSZWdp
c3RlcklELCBSZWdpc3RlcklELCBTdHJpbmdJbXBsKik7CiAjZWxzZQogICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKSkksIFJlZ2lzdGVy
SUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFN0cmluZ0ltcGwqKTsKICNl
bmRpZgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3Bl
cmF0aW9uX0VKWkosIFJlZ2lzdGVySUQsIGludDMyX3QsIFJlZ2lzdGVySUQpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKWiwgUmVn
aXN0ZXJJRCwgaW50MzJfdCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oVl9KSVRPcGVyYXRpb25fRVosIGludDMyX3QpOwogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oSl9K
SVRPcGVyYXRpb25fRSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRp
b25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihWX0pJVE9wZXJhdGlvbl9FQ2IsIENv
ZGVCbG9jayopOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0
aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oWl9KSVRPcGVyYXRpb25fRSk7CkBAIC04ODcs
NiArODk4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSiwgaW50LCBHUFJSZWcsIEdQUlJlZywg
R1BSUmVnLCBHUFJSZWcpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFNfSklUT3BlcmF0aW9uX0VKLCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FSkosIFJl
Z2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VJZEpaLCBj
b25zdCBJZGVudGlmaWVyKiwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgaW50MzJfdCk7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUos
IFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKWiwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwg
aW50MzJfdCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9K
SVRPcGVyYXRpb25fRUpaSiwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgaW50MzJfdCwgUmVnaXN0
ZXJJRCwgUmVnaXN0ZXJJRCk7CiAjZW5kaWYKIAogICAgICAgICBKdW1wIGNoZWNrU3RydWN0dXJl
KFJlZ2lzdGVySUQgcmVnLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMTU3NDM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNCw2ICsz
MjQsMTIgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRp
b24sIGRzdCk7CiB9CiAKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpj
YWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgaW50MzJfdCBvcCkKK3sK
KyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKG9wKSk7CisgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKK30KKwogQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oU19KSVRP
cGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgUmVnaXN0ZXJJRCByZWdPcDEsIFJlZ2lzdGVySUQgcmVn
T3AyKQogewogICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShyZWdPcDEsIHJlZ09wMik7
CkBAIC0zNDgsNiArMzU0LDYwIEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
SklUOjoKICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24p
OwogfQogCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJh
dGlvbihWX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvbikKK3sKKyAgICBzZXR1cEFyZ3VtZW50c0V4
ZWNTdGF0ZSgpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvbik7Cit9CisKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxs
T3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VJZEpaIG9wZXJhdGlvbiwgY29uc3QgSWRlbnRpZmll
ciogaWRlbnRPcDEsIFJlZ2lzdGVySUQgcmVnT3AyLCBpbnQzMl90IG9wMykKK3sKKyAgICBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihpZGVudE9wMSksIHJlZ09wMiwg
VHJ1c3RlZEltbTMyKG9wMykpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKG9wZXJhdGlvbik7Cit9CisKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
SklUOjpjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgUmVnaXN0ZXJJ
RCByZWdPcCkKK3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUocmVnT3ApOworICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Cit9CisKK0FM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKFZfSklU
T3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgUmVnaXN0ZXJJRCByZWdPcCkKK3sKKyAgICBzZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUocmVnT3ApOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Cit9CisKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24s
IFJlZ2lzdGVySUQgcmVnT3AxLCBSZWdpc3RlcklEIHJlZ09wMikKK3sKKyAgICBzZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUocmVnT3AxLCByZWdPcDIpOworICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Cit9CisKK0FMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKSWRKSiBv
cGVyYXRpb24sIFJlZ2lzdGVySUQgcmVnT3AxLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudE9wMiwg
UmVnaXN0ZXJJRCByZWdPcDMsIFJlZ2lzdGVySUQgcmVnT3A0KQoreworICAgIHNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShyZWdPcDEsIFRydXN0ZWRJbW1QdHIoaWRlbnRPcDIpLCByZWdPcDMs
IHJlZ09wNCk7CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uKTsKK30KKworQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxP
cGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpaIG9wZXJhdGlvbiwgUmVnaXN0ZXJJRCByZWdPcDEs
IGludDMyX3Qgb3AyKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShyZWdPcDEs
IFRydXN0ZWRJbW0zMihvcDIpKTsKKyAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhvcGVyYXRpb24pOworfQorCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IEpJVDo6Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSlpKIG9wZXJhdGlvbiwgUmVnaXN0
ZXJJRCByZWdPcDEsIGludDMyX3Qgb3AyLCBSZWdpc3RlcklEIHJlZ09wMykKK3sKKyAgICBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUocmVnT3AxLCBUcnVzdGVkSW1tMzIob3AyKSwgcmVnT3Az
KTsKKyAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwor
fQorCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlv
bihWX0pJVE9wZXJhdGlvbl9FWiBvcGVyYXRpb24sIGludDMyX3Qgb3ApCit7CisgICAgc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihvcCkpOworICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Cit9CisKIEFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxi
YWNrT25FeGNlcHRpb24oSl9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb24pCiB7CiAgICAgc2V0dXBB
cmd1bWVudHNFeGVjU3RhdGUoKTsKQEAgLTQyNiwxMiArNDg2LDQxIEBAIEFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhvcGVyYXRpb24pOwogfQogCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0lDQyBvcGVyYXRpb24s
IFJlZ2lzdGVySUQgcmVnT3AxLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudE9wMiwgUmVnaXN0ZXJJ
RCByZWdPcDMsIFJlZ2lzdGVySUQgcmVnT3A0KQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShyZWdPcDEsIFRydXN0ZWRJbW1QdHIoaWRlbnRPcDIpLCByZWdPcDMsIHJlZ09wNCk7
CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKK30K
KworQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24o
Vl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBSZWdpc3RlcklEIHJlZ09wMVRhZywgUmVnaXN0
ZXJJRCByZWdPcDFQYXlsb2FkKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShy
ZWdPcDFQYXlsb2FkLCByZWdPcDFUYWcpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvbik7Cit9CisKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VJZEpaIG9wZXJhdGlvbiwg
Y29uc3QgSWRlbnRpZmllciogaWRlbnRPcDEsIFJlZ2lzdGVySUQgcmVnT3AyVGFnLCBSZWdpc3Rl
cklEIHJlZ09wMlBheWxvYWQsIGludDMyX3Qgb3AzKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBUcnVzdGVkSW1tUHRyKGlkZW50T3AxKSwg
cmVnT3AyUGF5bG9hZCwgcmVnT3AyVGFnLCBUcnVzdGVkSW1tMzIob3AzKSk7CisgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKK30KKwogQUxXQVlTX0lO
TElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRp
b25fRUpKSSBvcGVyYXRpb24sIFJlZ2lzdGVySUQgcmVnT3AxVGFnLCBSZWdpc3RlcklEIHJlZ09w
MVBheWxvYWQsIFJlZ2lzdGVySUQgcmVnT3AyVGFnLCBSZWdpc3RlcklEIHJlZ09wMlBheWxvYWQs
IFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFC
SV8zMkJJVF9EVU1NWV9BUkcgcmVnT3AxUGF5bG9hZCwgcmVnT3AxVGFnLCBTSDRfMzJCSVRfRFVN
TVlfQVJHIHJlZ09wMlBheWxvYWQsIHJlZ09wMlRhZywgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogfQogCitB
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihWX0pJ
VE9wZXJhdGlvbl9FSlogb3BlcmF0aW9uLCBSZWdpc3RlcklEIHJlZ09wMVRhZywgUmVnaXN0ZXJJ
RCByZWdPcDFQYXlsb2FkLCBpbnQzMl90IG9wMikKK3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgcmVnT3AxUGF5bG9hZCwgcmVnT3AxVGFnLCBU
cnVzdGVkSW1tMzIob3AyKSk7CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uKTsKK30KKworQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OmNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpaSiBvcGVyYXRpb24sIFJlZ2lzdGVy
SUQgcmVnT3AxVGFnLCBSZWdpc3RlcklEIHJlZ09wMVBheWxvYWQsIGludDMyX3Qgb3AyLCBSZWdp
c3RlcklEIHJlZ09wM1RhZywgUmVnaXN0ZXJJRCByZWdPcDNQYXlsb2FkKQoreworICAgIHNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyByZWdPcDFQYXlsb2Fk
LCByZWdPcDFUYWcsIFRydXN0ZWRJbW0zMihvcDIpLCByZWdPcDNQYXlsb2FkLCByZWdPcDNUYWcp
OworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Cit9
CiAjdW5kZWYgRUFCSV8zMkJJVF9EVU1NWV9BUkcKICN1bmRlZiBTSDRfMzJCSVRfRFVNTVlfQVJH
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAJKHJldmlzaW9uIDE1NzQzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTI5LDE0ICs5MjksMTMgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbmV4dF9wbmFtZShJbnN0cnVjdGlvbgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXNoX3dpdGhfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBK
SVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcHVzaF93aXRoX3Njb3BlKTsKLSAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAg
ICBzdHViQ2FsbC5jYWxsKCk7CisgICAgZW1pdExvYWQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1c2hX
aXRoU2NvcGUsIHJlZ1QxLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3BvcF9zY29w
ZShJbnN0cnVjdGlvbiopCiB7Ci0gICAgSklUU3R1YkNhbGwodGhpcywgY3RpX29wX3BvcF9zY29w
ZSkuY2FsbCgpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUG9wU2NvcGUpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTk2OCwxMSArOTY3LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RvX251bWJlcihJ
bnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXNoX25hbWVfc2NvcGUoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBj
dGlfb3BfcHVzaF9uYW1lX3Njb3BlKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVk
SW1tUHRyKCZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSkpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOworICAg
IGVtaXRMb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QxLCByZWdUMCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXNoTmFtZVNjb3BlLCAmbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIHJlZ1QxLCByZWdU
MCwgY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDQ3LDEyICsx
MDQzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhJbnN0cnVjdAogCiB2b2lk
IEpJVDo6ZW1pdF9vcF90aHJvd19zdGF0aWNfZXJyb3IoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICB1bnNpZ25lZCBtZXNzYWdlID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKLQotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF90aHJv
d19zdGF0aWNfZXJyb3IpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChtZXNzYWdlKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZElt
bTMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKLSAgICBzdHViQ2FsbC5jYWxs
KCk7CisgICAgZW1pdExvYWQobV9jb2RlQmxvY2stPmdldENvbnN0YW50KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpLCByZWdUMSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVGhyb3dTdGF0aWNFcnJvciwgcmVnVDEsIHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNjEsOSArMTA1Myw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2RlYnVnKEluc3RydWN0aW9uKiBjdXIKICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3Ry
dWN0aW9uKTsKICAgICBicmVha3BvaW50KCk7CiAjZWxzZQotICAgIEpJVFN0dWJDYWxsIHN0dWJD
YWxsKHRoaXMsIGN0aV9vcF9kZWJ1Zyk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKTsKICNlbmRpZgogfQogCkBAIC0xMTg1LDE2ICsxMTc1LDE0IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF90b190aGlzKEluc3RydWN0aW8KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJv
ZmlsZV93aWxsX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBK
SVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcHJvZmlsZV93aWxsX2NhbGwpOwotICAg
IHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwot
ICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBlbWl0TG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kLCByZWdUMSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHJv
ZmlsZVdpbGxDYWxsLCByZWdUMSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9m
aWxlX2RpZF9jYWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Byb2ZpbGVfZGlkX2NhbGwpOwotICAgIHN0
dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAg
IHN0dWJDYWxsLmNhbGwoKTsKKyAgICBlbWl0TG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLCByZWdUMSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHJvZmls
ZVdpbGxDYWxsLCByZWdUMSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJn
dW1lbnRzX2xlbmd0aChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxNTc0MzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDgsOSArMjQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGVhcl9vZmZfYWN0aXZhdGlv
bihJbgogewogICAgIGludCBhY3RpdmF0aW9uID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKICAgICBKdW1wIGFjdGl2YXRpb25Ob3RDcmVhdGVkID0gYnJhbmNoVGVzdDY0KFplcm8s
IGFkZHJlc3NGb3IoYWN0aXZhdGlvbikpOwotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMs
IGN0aV9vcF90ZWFyX29mZl9hY3RpdmF0aW9uKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChh
Y3RpdmF0aW9uLCByZWdUMik7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYWN0aXZhdGlvbiwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVGVhck9mZkFjdGl2YXRpb24sIHJlZ1QwKTsKICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZC5s
aW5rKHRoaXMpOwogfQogCkBAIC0yNjAsMTAgKzI1OSw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Rl
YXJfb2ZmX2FyZ3VtZW50cyhJbnMKICAgICBpbnQgYWN0aXZhdGlvbiA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7CiAKICAgICBKdW1wIGFyZ3NOb3RDcmVhdGVkID0gYnJhbmNoVGVz
dDY0KFplcm8sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAo
dW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpKS5v
ZmZzZXQoKSkpKTsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfdGVhcl9v
ZmZfYXJndW1lbnRzKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudCh1bm1vZGlmaWVkQXJndW1l
bnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cykpLm9mZnNldCgpLCByZWdUMik7
Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoYWN0aXZhdGlvbiwgcmVnVDIpOwotICAgIHN0dWJD
YWxsLmNhbGwoKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDAp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYWN0aXZhdGlvbiwgcmVnVDEpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uVGVhck9mZkFyZ3VtZW50cywgcmVnVDAsIHJlZ1QxKTsKICAg
ICBhcmdzTm90Q3JlYXRlZC5saW5rKHRoaXMpOwogfQogCkBAIC02MDAsMTQgKzU5OCwxMyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXh0X3BuYW1lKEluc3RydWN0aW9uCiAKIHZvaWQgSklUOjplbWl0
X29wX3B1c2hfd2l0aF9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXNoX3dpdGhfc2NvcGUpOwot
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXNoV2l0aFNjb3BlLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3BvcF9zY29wZShJbnN0cnVjdGlvbiopCiB7Ci0gICAgSklUU3R1YkNhbGwodGhpcywgY3Rp
X29wX3BvcF9zY29wZSkuY2FsbCgpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUG9wU2Nv
cGUpOwogfQogCiB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCkBAIC02NjMsMTEgKzY2
MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihJbnN0cnVjdGlvbioKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHVzaF9uYW1lX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3B1c2hfbmFtZV9z
Y29wZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cigmbV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKTsKLSAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdU
Mik7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpKTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXNoTmFtZVNjb3BlLCAmbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIHJlZ1QwLCBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2go
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTczNSwxMyArNzI5LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9v
cF90aHJvd19zdGF0aWNfZXJyb3IoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfdGhyb3dfc3RhdGljX2Vycm9y
KTsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5nZXRDb25zdGFudChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKS5pc051bWJlcigpKQotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkpKTsKLSAgICBlbHNlCi0gICAgICAgIHN0dWJD
YWxsLmFkZEFyZ3VtZW50KEltbTY0KEpTVmFsdWU6OmVuY29kZShtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKSk7Ci0gICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
KTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSkpLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd1N0YXRp
Y0Vycm9yLCByZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2RlYnVnKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC03NTAsOSArNzM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoSW5zdHJ1Y3Rpb24qIGN1
cgogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwogICAgIGJyZWFrcG9pbnQo
KTsKICNlbHNlCi0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2RlYnVnKTsK
LSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlYnVnLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICNlbmRp
ZgogfQogCkBAIC05MjUsMTYgKzkxMiwxNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY3JlYXRl
X3RoaXMoSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfd2lsbF9jYWxsKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwo
dGhpcywgY3RpX29wX3Byb2ZpbGVfd2lsbF9jYWxsKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMSk7Ci0gICAgc3R1YkNhbGwu
Y2FsbCgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHJvZmlsZVdp
bGxDYWxsLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfZGlkX2NhbGwo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKSVRTdHViQ2FsbCBzdHVi
Q2FsbCh0aGlzLCBjdGlfb3BfcHJvZmlsZV9kaWRfY2FsbCk7Ci0gICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDEpOwotICAgIHN0dWJD
YWxsLmNhbGwoKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblByb2Zp
bGVEaWRDYWxsLCByZWdUMCk7CiB9CiAKIApAQCAtMTE3NCwxMCArMTE1OSwxMSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KEluc3RydWN0CiAgICAgaWYgKGNhbkJlT3B0aW1pemVk
KCkgJiYgT3B0aW9uczo6ZW5hYmxlT1NSRW50cnlJbkxvb3BzKCkpIHsKICAgICAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOwogICAgICAgICAKLSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhp
cywgY3RpX29wdGltaXplKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZElt
bTMyKG1fYnl0ZWNvZGVPZmZzZXQpKTsKLSAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAgICAg
ICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgbV9ieXRlY29kZU9m
ZnNldCk7CisgICAgICAgIEp1bXAgbm9PcHRpbWl6ZWRFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVy
bywgcmV0dXJuVmFsdWVSZWdpc3Rlcik7CisgICAgICAgIGp1bXAocmV0dXJuVmFsdWVSZWdpc3Rl
cik7CisgICAgICAgIG5vT3B0aW1pemVkRW50cnkubGluayh0aGlzKTsKKwogICAgICAgICBlbWl0
SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfbG9vcF9oaW50KSk7CiAgICAg
fQogI2VuZGlmCkBAIC0xMTg1LDkgKzExNzEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9v
cF9oaW50KEluc3RydWN0CiAgICAgLy8gRW1pdCB0aGUgc2xvdyBwYXRoIG9mIHRoZSB3YXRjaGRv
ZyB0aW1lciBjaGVjazoKICAgICBpZiAobV92bS0+d2F0Y2hkb2cuaXNFbmFibGVkKCkpIHsKICAg
ICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotCi0gICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxs
KHRoaXMsIGN0aV9oYW5kbGVfd2F0Y2hkb2dfdGltZXIpOwotICAgICAgICBzdHViQ2FsbC5jYWxs
KCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlV2F0Y2hkb2dUaW1lcik7
CiAKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2xv
b3BfaGludCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU3NDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDE5IEBA
CiAjaW5jbHVkZSAiQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgorI2luY2x1ZGUgIkRGR0NvbXBpbGF0aW9uTW9k
ZS5oIgorI2luY2x1ZGUgIkRGR0RyaXZlci5oIgorI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCisj
aW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkdl
dHRlclNldHRlci5oIgogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUuaCIKICNpbmNsdWRl
ICJKSVRPcGVyYXRpb25XcmFwcGVycy5oIgorI2luY2x1ZGUgIkpJVFRvREZHRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIK
KyNpbmNsdWRlICJKU05hbWVTY29wZS5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJKU1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVj
dG9yLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKQEAg
LTc5Niw2ICs4MDMsMzcyIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TmUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFJlZ0V4cE9iamVjdDo6Y3JlYXRlKHZtLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdleHApKTsK
IH0KIAordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhbmRsZVdhdGNoZG9nVGltZXIoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAgaWYgKFVOTElLRUxZKHZtLndh
dGNoZG9nLmRpZEZpcmUoZXhlYykpKQorICAgICAgICB2bS50aHJvd0V4Y2VwdGlvbihleGVjLCBj
cmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKCZ2bSkpOworfQorCit2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVGhyb3dTdGF0aWNFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgaW50MzJfdCByZWZlcmVuY2VFcnJvckZsYWcpCit7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisKKyAgICBTdHJpbmcgbWVzc2FnZSA9IGVycm9yRGVzY3JpcHRpb25Gb3JW
YWx1ZShleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSktPnZhbHVlKGV4ZWMpOwor
ICAgIGlmIChyZWZlcmVuY2VFcnJvckZsYWcpCisgICAgICAgIHZtLnRocm93RXhjZXB0aW9uKGV4
ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsIG1lc3NhZ2UpKTsKKyAgICBlbHNlCisgICAg
ICAgIHZtLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdl
KSk7Cit9CisKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWJ1ZyhFeGVjU3RhdGUqIGV4
ZWMsIGludDMyX3QgZGVidWdIb29rSUQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICB2bS5pbnRl
cnByZXRlci0+ZGVidWcoZXhlYywgc3RhdGljX2Nhc3Q8RGVidWdIb29rSUQ+KGRlYnVnSG9va0lE
KSk7Cit9CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGJ5dGVjb2RlSW5kZXgpCit7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisKKyAgICAvLyBEZWZlciBHQyBzbyB0aGF0IGl0IGRvZXNuJ3QgcnVuIGJl
dHdlZW4gd2hlbiB3ZSBlbnRlciBpbnRvIHRoaXMgc2xvdyBwYXRoIGFuZAorICAgIC8vIHdoZW4g
d2UgZmlndXJlIG91dCB0aGUgc3RhdGUgb2Ygb3VyIGNvZGUgYmxvY2suIFRoaXMgcHJldmVudHMg
YSBudW1iZXIgb2YKKyAgICAvLyBhd2t3YXJkIHJlZW50cmFuY3kgc2NlbmFyaW9zLCBpbmNsdWRp
bmc6CisgICAgLy8KKyAgICAvLyAtIFRoZSBvcHRpbWl6ZWQgdmVyc2lvbiBvZiBvdXIgY29kZSBi
bG9jayBiZWluZyBqZXR0aXNvbmVkIGJ5IEdDIHJpZ2h0IGFmdGVyCisgICAgLy8gICB3ZSBjb25j
bHVkZWQgdGhhdCB3ZSB3YW50ZWQgdG8gdXNlIGl0LgorICAgIC8vCisgICAgLy8gLSBBbiBvcHRp
bWl6ZWQgdmVyc2lvbiBvZiBvdXIgY29kZSBibG9jayBiZWluZyBpbnN0YWxsZWQganVzdCBhcyB3
ZSBkZWNpZGVkCisgICAgLy8gICB0aGF0IGl0IHdhc24ndCByZWFkeSB5ZXQuCisgICAgLy8KKyAg
ICAvLyBUaGlzIHN0aWxsIGxlYXZlcyB0aGUgZm9sbG93aW5nOiBhbnl0aW1lIHdlIHJldHVybiBm
cm9tIGN0aV9vcHRpbWl6ZSwgd2UgbWF5CisgICAgLy8gR0MsIGFuZCB0aGUgR0MgbWF5IGVpdGhl
ciBqZXR0aXNvbiB0aGUgb3B0aW1pemVkIHZlcnNpb24gb2Ygb3VyIGNvZGUgYmxvY2ssCisgICAg
Ly8gb3IgaXQgbWF5IGluc3RhbGwgdGhlIG9wdGltaXplZCB2ZXJzaW9uIG9mIG91ciBjb2RlIGJs
b2NrIGV2ZW4gdGhvdWdoIHdlCisgICAgLy8gY29uY2x1ZGVkIHRoYXQgaXQgd2Fzbid0IHJlYWR5
IHlldC4KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBqZXR0aXNvbmluZyB3b24ndCBoYXBwZW4g
aWYgd2UgYWxyZWFkeSBpbml0aWF0ZWQgT1NSLCBiZWNhdXNlIGluCisgICAgLy8gdGhhdCBjYXNl
IHdlIHdvdWxkIGhhdmUgYWxyZWFkeSBwbGFudGVkIHRoZSBvcHRpbWl6ZWQgY29kZSBibG9jayBp
bnRvIHRoZSBKUworICAgIC8vIHN0YWNrLgorICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsK
KyAgICAKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworCisg
ICAgaWYgKGJ5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgLy8gSWYgd2UncmUgYXR0ZW1wdGluZyB0
byBPU1IgZnJvbSBhIGxvb3AsIGFzc3VtZSB0aGF0IHRoaXMgc2hvdWxkIGJlCisgICAgICAgIC8v
IHNlcGFyYXRlbHkgb3B0aW1pemVkLgorICAgICAgICBjb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlz
QmVJbmxpbmVkID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgKmNvZGVCbG9jaywgIjogRW50ZXJl
ZCBvcHRpbWl6ZSB3aXRoIGJ5dGVjb2RlSW5kZXggPSAiLCBieXRlY29kZUluZGV4LAorICAgICAg
ICAgICAgIiwgZXhlY3V0ZUNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmppdEV4ZWN1dGVDb3VudGVy
KCksCisgICAgICAgICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAiLCBjb2RlQmxv
Y2stPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCksCisgICAgICAgICAgICAiLCBleGl0Q291
bnRlciA9ICIpOworICAgICAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVu
dCgpKQorICAgICAgICAgICAgZGF0YUxvZyhjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPm9zckV4
aXRDb3VudGVyKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkYXRhTG9nKCJOL0EiKTsK
KyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICB9CisKKyAgICBpZiAoIWNvZGVCbG9jay0+Y2hl
Y2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKSkgeworICAgICAgICBjb2RlQmxvY2st
PnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NS
KCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDaG9vc2luZyBub3QgdG8gb3B0aW1pemUgIiwgKmNv
ZGVCbG9jaywgIiB5ZXQsIGJlY2F1c2UgdGhlIHRocmVzaG9sZCBoYXNuJ3QgYmVlbiByZWFjaGVk
LlxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBpZiAoY29kZUJsb2Nr
LT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkgeworICAgICAgICBjb2RlQmxvY2stPnVwZGF0ZUFs
bFByZWRpY3Rpb25zKCk7CisgICAgICAgIGNvZGVCbG9jay0+b3B0aW1pemVBZnRlcldhcm1VcCgp
OworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxv
ZygiQ2hvb3Npbmcgbm90IHRvIG9wdGltaXplICIsICpjb2RlQmxvY2ssICIgeWV0LCBiZWNhdXNl
IG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID09IHRydWUuXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgLy8gV2UgY2Fubm90IGJlIGluIHRoZSBwcm9jZXNzIG9mIGFzeW5jaHJv
bm91cyBjb21waWxhdGlvbiBhbmQgYWxzbyBoYXZlIGFuIG9wdGltaXplZAorICAgIC8vIHJlcGxh
Y2VtZW50LgorICAgIEFTU0VSVCgKKyAgICAgICAgIXZtLndvcmtsaXN0CisgICAgICAgIHx8ICEo
dm0ud29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUoREZHOjpDb21waWxhdGlvbktleShjb2RlQmxv
Y2ssIERGRzo6REZHTW9kZSkpICE9IERGRzo6V29ya2xpc3Q6Ok5vdEtub3duCisgICAgICAgICYm
IGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkpOworCisgICAgREZHOjpXb3Jr
bGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZTsKKyAgICBpZiAodm0ud29ya2xpc3QpIHsKKyAgICAg
ICAgLy8gVGhlIGNhbGwgdG8gREZHOjpXb3JrbGlzdDo6Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9y
Vk0oKSB3aWxsIGNvbXBsZXRlIGFsbCByZWFkeQorICAgICAgICAvLyAoaS5lLiBjb21waWxlZCkg
Y29kZSBibG9ja3MuIEJ1dCBpZiBpdCBjb21wbGV0ZXMgb3Vycywgd2UgYWxzbyBuZWVkIHRvIGtu
b3cKKyAgICAgICAgLy8gd2hhdCB0aGUgcmVzdWx0IHdhcyBzbyB0aGF0IHdlIGRvbid0IHBsb3cg
YWhlYWQgYW5kIGF0dGVtcHQgT1NSIG9yIGltbWVkaWF0ZQorICAgICAgICAvLyByZW9wdGltaXph
dGlvbi4gVGhpcyB3aWxsIGhhdmUgYWxyZWFkeSBhbHNvIHNldCB0aGUgYXBwcm9wcmlhdGUgSklU
IGV4ZWN1dGlvbgorICAgICAgICAvLyBjb3VudCB0aHJlc2hvbGQgZGVwZW5kaW5nIG9uIHdoYXQg
aGFwcGVuZWQsIHNvIGlmIHRoZSBjb21waWxhdGlvbiB3YXMgYW55dGhpbmcKKyAgICAgICAgLy8g
YnV0IHN1Y2Nlc3NmdWwgd2UganVzdCB3YW50IHRvIHJldHVybiBlYXJseS4gU2VlIHRoZSBjYXNl
IGZvciB3b3JrbGlzdFN0YXRlID09CisgICAgICAgIC8vIERGRzo6V29ya2xpc3Q6OkNvbXBpbGVk
LCBiZWxvdy4KKyAgICAgICAgCisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjb3VsZCBoYXZlIGFs
dGVybmF0aXZlbHkganVzdCBjYWxsZWQgV29ya2xpc3Q6OmNvbXBpbGF0aW9uU3RhdGUoKQorICAg
ICAgICAvLyBoZXJlLCBhbmQgaWYgaXQgcmV0dXJuZWQgQ29tcGlsZWQsIHdlIGNvdWxkIGhhdmUg
dGhlbiBjYWxsZWQKKyAgICAgICAgLy8gY29tcGxldGVBbmRTY2hlZHVsZU9TUigpIGJlbG93LiBC
dXQgdGhhdCB3b3VsZCBoYXZlIG1lYW50IHRoYXQgaXQgY291bGQgdGFrZQorICAgICAgICAvLyBs
b25nZXIgZm9yIGNvZGUgYmxvY2tzIHRvIGJlIGNvbXBsZXRlZDogdGhleSB3b3VsZCBvbmx5IGNv
bXBsZXRlIHdoZW4gKnRoZWlyKgorICAgICAgICAvLyBleGVjdXRpb24gY291bnQgdHJpZ2dlciBm
aXJlZDsgYnV0IHRoYXQgY291bGQgdGFrZSBhIHdoaWxlIHNpbmNlIHRoZSBmaXJpbmcgaXMKKyAg
ICAgICAgLy8gcmFjeS4gSXQgY291bGQgYWxzbyBtZWFuIHRoYXQgY29kZSBibG9ja3MgdGhhdCBu
ZXZlciBydW4gYWdhaW4gYWZ0ZXIgYmVpbmcKKyAgICAgICAgLy8gY29tcGlsZWQgd291bGQgc2l0
IG9uIHRoZSB3b3JrbGlzdCB1bnRpbCBuZXh0IEdDLiBUaGF0J3MgZmluZSwgYnV0IGl0J3MKKyAg
ICAgICAgLy8gcHJvYmFibHkgYSB3YXN0ZSBvZiBtZW1vcnkuIE91ciBnb2FsIGhlcmUgaXMgdG8g
Y29tcGxldGUgY29kZSBibG9ja3MgYXMgc29vbiBhcworICAgICAgICAvLyBwb3NzaWJsZSBpbiBv
cmRlciB0byBtaW5pbWl6ZSB0aGUgY2hhbmNlcyBvZiB1cyBleGVjdXRpbmcgYmFzZWxpbmUgY29k
ZSBhZnRlcgorICAgICAgICAvLyBvcHRpbWl6ZWQgY29kZSBpcyBhbHJlYWR5IGF2YWlsYWJsZS4K
KyAgICAgICAgd29ya2xpc3RTdGF0ZSA9IHZtLndvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxh
bnNGb3JWTSgKKyAgICAgICAgICAgIHZtLCBERkc6OkNvbXBpbGF0aW9uS2V5KGNvZGVCbG9jaywg
REZHOjpERkdNb2RlKSk7CisgICAgfSBlbHNlCisgICAgICAgIHdvcmtsaXN0U3RhdGUgPSBERkc6
OldvcmtsaXN0OjpOb3RLbm93bjsKKworICAgIGlmICh3b3JrbGlzdFN0YXRlID09IERGRzo6V29y
a2xpc3Q6OkNvbXBpbGluZykgeworICAgICAgICAvLyBXZSBjYW5ub3QgYmUgaW4gdGhlIHByb2Nl
c3Mgb2YgYXN5bmNocm9ub3VzIGNvbXBpbGF0aW9uIGFuZCBhbHNvIGhhdmUgYW4gb3B0aW1pemVk
CisgICAgICAgIC8vIHJlcGxhY2VtZW50LgorICAgICAgICBSRUxFQVNFX0FTU0VSVCghY29kZUJs
b2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKTsKKyAgICAgICAgY29kZUJsb2NrLT5zZXRP
cHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25E
ZWZlcnJlZCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICh3b3JrbGlzdFN0
YXRlID09IERGRzo6V29ya2xpc3Q6OkNvbXBpbGVkKSB7CisgICAgICAgIC8vIElmIHdlIGRvbid0
IGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGJ1dCB3ZSBkaWQganVzdCBnZXQgY29tcGls
ZWQsIHRoZW4KKyAgICAgICAgLy8gdGhlIGNvbXBpbGF0aW9uIGZhaWxlZCBvciB3YXMgaW52YWxp
ZGF0ZWQsIGluIHdoaWNoIGNhc2UgdGhlIGV4ZWN1dGlvbiBjb3VudAorICAgICAgICAvLyB0aHJl
c2hvbGRzIGhhdmUgYWxyZWFkeSBiZWVuIHNldCBhcHByb3ByaWF0ZWx5IGJ5CisgICAgICAgIC8v
IENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVz
dWx0KCkgYW5kIHdlIGhhdmUKKyAgICAgICAgLy8gbm90aGluZyBsZWZ0IHRvIGRvLgorICAgICAg
ICBpZiAoIWNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworICAgICAgICAg
ICAgY29kZUJsb2NrLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOworICAgICAgICAgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb2RlIGJsb2Nr
ICIsICpjb2RlQmxvY2ssICIgd2FzIGNvbXBpbGVkIGJ1dCBpdCBkb2Vzbid0IGhhdmUgYW4gb3B0
aW1pemVkIHJlcGxhY2VtZW50LlxuIik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
fQorICAgIH0gZWxzZSBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7
CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9n
KCJDb25zaWRlcmluZyBPU1IgIiwgKmNvZGVCbG9jaywgIiAtPiAiLCAqY29kZUJsb2NrLT5yZXBs
YWNlbWVudCgpLCAiLlxuIik7CisgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gb3B0aW1pemVkIHJl
cGxhY2VtZW50LCB0aGVuIGl0IG11c3QgYmUgdGhlIGNhc2UgdGhhdCB3ZSBlbnRlcmVkCisgICAg
ICAgIC8vIGN0aV9vcHRpbWl6ZSBmcm9tIGEgbG9vcC4gVGhhdCdzIGJlY2F1c2UgaWYgdGhlcmUn
cyBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQsCisgICAgICAgIC8vIHRoZW4gYWxsIGNhbGxzIHRv
IHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZWxpbmtlZCB0byB0aGUgcmVwbGFjZW1lbnQgYW5kIHNv
CisgICAgICAgIC8vIHRoZSBwcm9sb2d1ZSBPU1Igd2lsbCBuZXZlciBmaXJlLgorICAgICAgICAK
KyAgICAgICAgLy8gVGhpcyBpcyBhbiBpbnRlcmVzdGluZyB0aHJlc2hvbGQgY2hlY2suIENvbnNp
ZGVyIHRoYXQgYSBmdW5jdGlvbiBPU1IgZXhpdHMKKyAgICAgICAgLy8gaW4gdGhlIG1pZGRsZSBv
ZiBhIGxvb3AsIHdoaWxlIGhhdmluZyBhIHJlbGF0aXZlbHkgbG93IGV4aXQgY291bnQuIFRoZSBl
eGl0CisgICAgICAgIC8vIHdpbGwgcmVzZXQgdGhlIGV4ZWN1dGlvbiBjb3VudGVyIHRvIHNvbWUg
dGFyZ2V0IHRocmVzaG9sZCwgbWVhbmluZyB0aGF0IHRoaXMKKyAgICAgICAgLy8gY29kZSB3b24n
dCBiZSByZWFjaGVkIHVudGlsIHRoYXQgbG9vcCBoZWF0cyB1cCBmb3IgPj0xMDAwIGV4ZWN1dGlv
bnMuIEJ1dCB0aGVuCisgICAgICAgIC8vIHdlIGRvIGEgc2Vjb25kIGNoZWNrIGhlcmUsIHRvIHNl
ZSBpZiB3ZSBzaG91bGQgZWl0aGVyIHJlb3B0aW1pemUsIG9yIGp1c3QKKyAgICAgICAgLy8gYXR0
ZW1wdCBPU1IgZW50cnkuIEhlbmNlIGl0IG1pZ2h0IGV2ZW4gYmUgY29ycmVjdCBmb3IKKyAgICAg
ICAgLy8gc2hvdWxkUmVvcHRpbWl6ZUZyb21Mb29wTm93KCkgdG8gYWx3YXlzIHJldHVybiB0cnVl
LiBCdXQgd2UgbWFrZSBpdCBkbyBzb21lCisgICAgICAgIC8vIGFkZGl0aW9uYWwgY2hlY2tpbmcg
YW55d2F5LCB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiByZWNvbXBpbGF0aW9uIHRocmFzaGluZy4K
KyAgICAgICAgaWYgKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c2hvdWxkUmVvcHRpbWl6ZUZy
b21Mb29wTm93KCkpIHsKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAiVHJpZ2dlcmlu
ZyByZW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLAorICAgICAgICAgICAgICAgICAgICAi
KCIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIpIChpbiBsb29wKS5cbiIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKCk7CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghY29kZUJs
b2NrLT5zaG91bGRPcHRpbWl6ZU5vdygpKSB7CisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZU9TUigpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAg
ICAgIkRlbGF5aW5nIG9wdGltaXphdGlvbiBmb3IgIiwgKmNvZGVCbG9jaywKKyAgICAgICAgICAg
ICAgICAgICAgIiBiZWNhdXNlIG9mIGluc3VmZmljaWVudCBwcm9maWxpbmcuXG4iKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIlRyaWdnZXJpbmcg
b3B0aW1pemVkIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICJcbiIpOworCisgICAgICAg
IHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzOworICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleCkK
KyAgICAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gY29kZUJsb2NrLT5tX251bVZhcnM7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gMDsKKyAgICAgICAg
T3BlcmFuZHM8SlNWYWx1ZT4gbXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGludCBvcGVyYW5k
ID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBpZiAo
b3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkKKyAgICAgICAgICAgICAgICAmJiAhVmlydHVhbFJl
Z2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKQorICAgICAgICAgICAgICAgICYmIGNvZGVCbG9j
ay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUKKyAgICAgICAgICAgICAgICAmJiBjb2RlQmxv
Y2stPnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpIHsKKyAgICAgICAg
ICAgICAgICAvLyBVZ2guIElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRoZSAndGhpcycgYXJn
dW1lbnQgbWF5IGhvbGQgZ2FyYmFnZS4gSXQgd2lsbAorICAgICAgICAgICAgICAgIC8vIGFsc28g
bmV2ZXIgYmUgdXNlZC4gSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB3ZSBwdXQgaW50byB0aGUgdmFs
dWUgZm9yIHRoaXMsCisgICAgICAgICAgICAgICAgLy8gYnV0IGl0IGhhcyB0byBiZSBhbiBhY3R1
YWwgdmFsdWUgdGhhdCBjYW4gYmUgZ3Jva2tlZCBieSBzdWJzZXF1ZW50IERGRyBwYXNzZXMsCisg
ICAgICAgICAgICAgICAgLy8gc28gd2Ugc2FuaXRpemUgaXQgaGVyZSBieSB0dXJuaW5nIGl0IGlu
dG8gVW5kZWZpbmVkLgorICAgICAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBqc1Vu
ZGVmaW5lZCgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbXVzdEhhbmRs
ZVZhbHVlc1tpXSA9IGV4ZWMtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOworICAgICAg
ICB9CisKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gREZHOjpjb21waWxlKAor
ICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgREZHOjpE
RkdNb2RlLCBieXRlY29kZUluZGV4LAorICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlcywgSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpLAorICAgICAgICAgICAg
dm0uZW5zdXJlV29ya2xpc3QoKSk7CisgICAgICAgIAorICAgICAgICBpZiAocmVzdWx0ICE9IENv
bXBpbGF0aW9uU3VjY2Vzc2Z1bCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAK
KyAgICBDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1l
bnQoKTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG9wdGltaXplZENvZGVC
bG9jay0+aml0VHlwZSgpKSk7CisgICAgCisgICAgaWYgKHZvaWQqIGFkZHJlc3MgPSBERkc6OnBy
ZXBhcmVPU1JFbnRyeShleGVjLCBvcHRpbWl6ZWRDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKSB7
CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgICAgIGRhdGFM
b2coCisgICAgICAgICAgICAgICAgIlBlcmZvcm1pbmcgT1NSICIsICpjb2RlQmxvY2ssICIgLT4g
IiwgKm9wdGltaXplZENvZGVCbG9jaywgIiwgYWRkcmVzcyAiLAorICAgICAgICAgICAgICAgIFJh
d1BvaW50ZXIoT1VSX1JFVFVSTl9BRERSRVNTKSwgIiAtPiAiLCBSYXdQb2ludGVyKGFkZHJlc3Mp
LCAiLlxuIik7CisgICAgICAgIH0KKworICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplU29vbigp
OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KGFkZHJlc3MpOworICAgIH0KKwor
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAg
ICAgICAgICJPcHRpbWl6aW5nICIsICpjb2RlQmxvY2ssICIgLT4gIiwgKmNvZGVCbG9jay0+cmVw
bGFjZW1lbnQoKSwKKyAgICAgICAgICAgICIgc3VjY2VlZGVkLCBPU1IgZmFpbGVkLCBhZnRlciBh
IGRlbGF5IG9mICIsCisgICAgICAgICAgICBjb2RlQmxvY2stPm9wdGltaXphdGlvbkRlbGF5Q291
bnRlcigpLCAiLlxuIik7CisgICAgfQorCisgICAgLy8gQ291bnQgdGhlIE9TUiBmYWlsdXJlIGFz
IGEgc3BlY3VsYXRpb24gZmFpbHVyZS4gSWYgdGhpcyBoYXBwZW5zIGEgbG90LCB0aGVuCisgICAg
Ly8gcmVvcHRpbWl6ZS4KKyAgICBvcHRpbWl6ZWRDb2RlQmxvY2stPmNvdW50T1NSRXhpdCgpOwor
CisgICAgLy8gV2UgYXJlIGEgbG90IG1vcmUgY29uc2VydmF0aXZlIGFib3V0IHRyaWdnZXJpbmcg
cmVvcHRpbWl6YXRpb24gYWZ0ZXIgT1NSIGZhaWx1cmUgdGhhbgorICAgIC8vIGJlZm9yZSBpdC4g
SWYgd2UgZW50ZXIgdGhlIG9wdGltaXplX2Zyb21fbG9vcCB0cmlnZ2VyIHdpdGggYSBidWNrZXQg
ZnVsbCBvZiBmYWlsCisgICAgLy8gYWxyZWFkeSwgdGhlbiB3ZSByZWFsbHkgd291bGQgbGlrZSB0
byByZW9wdGltaXplIGltbWVkaWF0ZWx5LiBCdXQgdGhpcyBjYXNlIGNvdmVycworICAgIC8vIHNv
bWV0aGluZyBlbHNlOiB0aGVyZSB3ZXJlbid0IG1hbnkgKG9yIGFueSkgc3BlY3VsYXRpb24gZmFp
bHVyZXMgYmVmb3JlLCBidXQgd2UganVzdAorICAgIC8vIGZhaWxlZCB0byBlbnRlciB0aGUgc3Bl
Y3VsYXRpdmUgY29kZSBiZWNhdXNlIHNvbWUgdmFyaWFibGUgaGFkIHRoZSB3cm9uZyB2YWx1ZSBv
cgorICAgIC8vIGJlY2F1c2UgdGhlIE9TUiBjb2RlIGRlY2lkZWQgZm9yIGFueSBzcHVyaW91cyBy
ZWFzb24gdGhhdCBpdCBkaWQgbm90IHdhbnQgdG8gT1NSCisgICAgLy8gcmlnaHQgbm93LiBTbywg
d2Ugb25seSB0cmlnZ2VyIHJlb3B0aW1pemF0aW9uIG9ubHkgdXBvbiB0aGUgbW9yZSBjb25zZXJ2
YXRpdmUgKG5vbi1sb29wKQorICAgIC8vIHJlb3B0aW1pemF0aW9uIHRyaWdnZXIuCisgICAgaWYg
KG9wdGltaXplZENvZGVCbG9jay0+c2hvdWxkUmVvcHRpbWl6ZU5vdygpKSB7CisgICAgICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAg
ICAgICAgICAgIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAt
PiAiLAorICAgICAgICAgICAgICAgICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIgKGFmdGVy
IE9TUiBmYWlsKS5cbiIpOworICAgICAgICB9CisgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6
ZSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBPU1IgZmFpbGVkIHRoaXMg
dGltZSwgYnV0IGl0IG1pZ2h0IHN1Y2NlZWQgbmV4dCB0aW1lISBMZXQgdGhlIGNvZGUgcnVuIGEg
Yml0CisgICAgLy8gbG9uZ2VyIGFuZCB0aGVuIHRyeSBhZ2Fpbi4KKyAgICBjb2RlQmxvY2stPm9w
dGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJbmRleChFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRBcnJheVZhbHVlLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBKU1ZhbHVlIGFycmF5
VmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFycmF5VmFsdWUpOworICAgIEFTU0VSVChp
c0pTQXJyYXkoYXJyYXlWYWx1ZSkpOworICAgIGFzQXJyYXkoYXJyYXlWYWx1ZSktPnB1dERpcmVj
dEluZGV4KGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisK
KyNpZiBVU0UoSlNWQUxVRTY0KQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEdldHRl
clNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPYmplY3RWYWx1
ZSwgSWRlbnRpZmllciogaWRlbnRpZmllciwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEdldHRlclZh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU2V0dGVyVmFsdWUpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisKKyAgICBBU1NFUlQoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPYmplY3RWYWx1ZSkuaXNPYmpl
Y3QoKSk7CisgICAgSlNPYmplY3QqIGJhc2VPYmogPSBhc09iamVjdChKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9iamVjdFZhbHVlKSk7CisKKyAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0
dGVyU2V0dGVyOjpjcmVhdGUodm0pOworCisgICAgSlNWYWx1ZSBnZXR0ZXIgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZEdldHRlclZhbHVlKTsKKyAgICBKU1ZhbHVlIHNldHRlciA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkU2V0dGVyVmFsdWUpOworICAgIEFTU0VSVChnZXR0ZXIuaXNPYmplY3Qo
KSB8fCBnZXR0ZXIuaXNVbmRlZmluZWQoKSk7CisgICAgQVNTRVJUKHNldHRlci5pc09iamVjdCgp
IHx8IHNldHRlci5pc1VuZGVmaW5lZCgpKTsKKyAgICBBU1NFUlQoZ2V0dGVyLmlzT2JqZWN0KCkg
fHwgc2V0dGVyLmlzT2JqZWN0KCkpOworCisgICAgaWYgKCFnZXR0ZXIuaXNVbmRlZmluZWQoKSkK
KyAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcih2bSwgYXNPYmplY3QoZ2V0dGVyKSk7CisgICAg
aWYgKCFzZXR0ZXIuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcih2
bSwgYXNPYmplY3Qoc2V0dGVyKSk7CisgICAgYmFzZU9iai0+cHV0RGlyZWN0QWNjZXNzb3IoZXhl
YywgKmlkZW50aWZpZXIsIGFjY2Vzc29yLCBBY2Nlc3Nvcik7Cit9CisjZWxzZQordm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEdldHRlclNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2Vs
bCogb2JqZWN0LCBJZGVudGlmaWVyKiBpZGVudGlmaWVyLCBKU0NlbGwqIGdldHRlciwgSlNDZWxs
KiBzZXR0ZXIpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBBU1NFUlQob2JqZWN0ICYmIG9iamVj
dC0+aXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIGJhc2VPYmogPSBvYmplY3QtPmdldE9iamVj
dCgpOworCisgICAgR2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRl
KHZtKTsKKworICAgIEFTU0VSVCghZ2V0dGVyIHx8IGdldHRlci0+aXNPYmplY3QoKSk7CisgICAg
QVNTRVJUKCFzZXR0ZXIgfHwgc2V0dGVyLT5pc09iamVjdCgpKTsKKyAgICBBU1NFUlQoZ2V0dGVy
IHx8IHNldHRlcik7CisKKyAgICBpZiAoZ2V0dGVyKQorICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0
dGVyKHZtLCBnZXR0ZXItPmdldE9iamVjdCgpKTsKKyAgICBpZiAoc2V0dGVyKQorICAgICAgICBh
Y2Nlc3Nvci0+c2V0U2V0dGVyKHZtLCBzZXR0ZXItPmdldE9iamVjdCgpKTsKKyAgICBiYXNlT2Jq
LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCAqaWRlbnRpZmllciwgYWNjZXNzb3IsIEFjY2Vzc29y
KTsKK30KKyNlbmRpZgorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHVzaE5hbWVTY29w
ZShFeGVjU3RhdGUqIGV4ZWMsIElkZW50aWZpZXIqIGlkZW50aWZpZXIsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgaW50MzJfdCBhdHRpYnV0ZXMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAg
ICBKU05hbWVTY29wZSogc2NvcGUgPSBKU05hbWVTY29wZTo6Y3JlYXRlKGV4ZWMsICppZGVudGlm
aWVyLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgYXR0aWJ1dGVzKTsKKworICAgIGV4
ZWMtPnNldFNjb3BlKHNjb3BlKTsKK30KKwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
c2hXaXRoU2NvcGUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Cit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBKU09iamVjdCogbyA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpLnRvT2JqZWN0KGV4ZWMpOworICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZXhlYy0+c2V0U2NvcGUoSlNXaXRoU2NvcGU6OmNyZWF0ZShl
eGVjLCBvKSk7Cit9CisKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3BTY29wZShFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBleGVjLT5zZXRTY29wZShleGVj
LT5zY29wZSgpLT5uZXh0KCkpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHJv
ZmlsZURpZENhbGwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Cit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0g
dm0uZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgICAgIHByb2ZpbGVyLT5kaWRFeGVjdXRlKGV4ZWMs
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKwordm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblByb2ZpbGVXaWxsQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKworICAgIGlmIChMZWdhY3lQcm9maWxl
ciogcHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICAgICAgcHJvZmlsZXItPndp
bGxFeGVjdXRlKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKwogRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DaGVja0hhc0luc3RhbmNlKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkQmFzZVZhbCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKQEAgLTgzNyw2ICsx
MjEwLDI1IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBcmcKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZkFj
dGl2YXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGFjdGl2YXRpb25DZWxsKQoreworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOworCisgICAgQVNTRVJUKGV4ZWMtPmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29w
ZUNoYWluKCkpOworICAgIGpzQ2FzdDxKU0FjdGl2YXRpb24qPihhY3RpdmF0aW9uQ2VsbCktPnRl
YXJPZmYodm0pOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZkFyZ3Vt
ZW50cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYXJndW1lbnRzQ2VsbCwgSlNDZWxsKiBhY3Rp
dmF0aW9uQ2VsbCkKK3sKKyAgICBBU1NFUlQoZXhlYy0+Y29kZUJsb2NrKCktPnVzZXNBcmd1bWVu
dHMoKSk7CisgICAgaWYgKGFjdGl2YXRpb25DZWxsKSB7CisgICAgICAgIGpzQ2FzdDxBcmd1bWVu
dHMqPihhcmd1bWVudHNDZWxsKS0+ZGlkVGVhck9mZkFjdGl2YXRpb24oZXhlYywganNDYXN0PEpT
QWN0aXZhdGlvbio+KGFjdGl2YXRpb25DZWxsKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAganNDYXN0PEFyZ3VtZW50cyo+KGFyZ3VtZW50c0NlbGwpLT50ZWFyT2ZmKGV4ZWMpOworfQor
CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlbGV0ZUJ5SWQoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgY29uc3QgSWRlbnRpZmllciog
aWRlbnRpZmllcikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE1NzQzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OCw2ICs1OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIElkYzogY29uc3QgSWRlbnRpZmll
cioKICAgICBKOiBFbmNvZGVkSlNWYWx1ZQogICAgIEpjcDogY29uc3QgSlNWYWx1ZSoKKyAgICBK
c2E6IEpTQWN0aXZhdGlvbioKICAgICBKc3M6IEpTU3RyaW5nKgogICAgIE86IEpTT2JqZWN0Kgog
ICAgIFA6IHBvaW50ZXIgKGNoYXIqKQpAQCAtMTE4LDIwICsxMTksMjkgQEAgdHlwZWRlZiBzaXpl
X3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcgogdHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElP
TiAoKlNfSklUT3BlcmF0aW9uX0VPSnNzKShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTU3RyaW5n
Kik7CiB0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19KSVRPcGVyYXRpb25fSikoRW5j
b2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlv
bl9FKShFeGVjU3RhdGUqKTsKLXR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVy
YXRpb25fRU9aRCkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90LCBkb3VibGUpOwotdHlw
ZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FT1pKKShFeGVjU3RhdGUq
LCBKU09iamVjdCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgdm9pZCBKSVRf
T1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNiKShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqKTsK
IHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0
ZSosIEpTQ2VsbCopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlv
bl9FQ2IpKEV4ZWNTdGF0ZSosIENvZGVCbG9jayopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJ
T04gKCpWX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwog
dHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQ0ljZikoRXhlY1N0
YXRlKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJB
VElPTiAoKlZfSklUT3BlcmF0aW9uX0VDSUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBJZGVudGlm
aWVyKiwgSlNDZWxsKiwgSlNDZWxsKik7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZf
SklUT3BlcmF0aW9uX0VDQ0ljZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiwgSW5saW5l
Q2FsbEZyYW1lKik7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9u
X0VDSkopKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VDWikoRXhl
Y1N0YXRlKiwgSlNDZWxsKiwgaW50MzJfdCk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAo
KlZfSklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Cit0eXBl
ZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VJZEpaKShFeGVjU3RhdGUq
LCBJZGVudGlmaWVyKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOwordHlwZWRlZiB2b2lkIEpJ
VF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FSkNJKShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwordHlwZWRl
ZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FSklkSkopKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBJZGVudGlmaWVyKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUpKSSko
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKik7
CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VKSkopKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwog
dHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FSlBQKShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCosIHZvaWQqKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BF
UkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUpaSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgq
Vl9KSVRPcGVyYXRpb25fRUpaKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7
Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VPWkQpKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCwgZG91YmxlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BF
UkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRU9aSikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQz
Ml90LCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklU
T3BlcmF0aW9uX0VQWkopKEV4ZWNTdGF0ZSosIHZvaWQqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1
ZSk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX1cpKFdhdGNo
cG9pbnRTZXQqKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25f
RVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwogdHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgq
UF9KSVRPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJ
T04gKCpQX0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiB0eXBlZGVmIGNo
YXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FSlMpKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBzaXplX3QpOwpAQCAtMTQ2LDYgKzE1Niw3IEBAIHR5cGVkZWYgY2hhciogSklU
X09QRVJBVElPTiAoKlBfSklUT3BlcmEKIHR5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBf
SklUT3BlcmF0aW9uX0VTdFBTKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90
KTsKIHR5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VTdFNTKShF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBzaXplX3QsIHNpemVfdCk7CiB0eXBlZGVmIGNoYXIqIEpJ
VF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FU3RaKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUq
LCBpbnQzMl90KTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9u
X0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAo
KlBfSklUT3BlcmF0aW9uX0VaWikoRXhlY1N0YXRlKiwgaW50MzJfdCwgaW50MzJfdCk7CiB0eXBl
ZGVmIFN0cmluZ0ltcGwqIEpJVF9PUEVSQVRJT04gKCpJX0pJVE9wZXJhdGlvbl9FSnNzKShFeGVj
U3RhdGUqLCBKU1N0cmluZyopOwogdHlwZWRlZiBKU1N0cmluZyogSklUX09QRVJBVElPTiAoKkpz
c19KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwpAQCAtMjIyLDEwICsyMzMs
MTAgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbChFeAogY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVS
TkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KEV4ZWNT
dGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nv
bnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ax
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzc0VxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLXNp
emVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9J
TlRFUk5BTDsKLXNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMikgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29t
cGFyZUxlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDIpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBh
cmVMZXNzRXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDIpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBh
cmVHcmVhdGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21w
YXJlR3JlYXRlckVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25D
b252ZXJ0SlNWYWx1ZVRvQm9vbGVhbihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lO
VEVSTkFMOwogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUVxKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogI2lmIFVT
RShKU1ZBTFVFNjQpCkBAIC0yNDAsMTAgKzI1MSwyOCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5lCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKIEpTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0YXRlKiwgU3RydWN0dXJlKikg
V1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdS
ZWdleHAoRXhlY1N0YXRlKiwgdm9pZCopIFdURl9JTlRFUk5BTDsKLQordm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkhhbmRsZVdhdGNoZG9nVGltZXIoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFM
Owordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93U3RhdGljRXJyb3IoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25EZWJ1ZyhFeGVjU3RhdGUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Cisj
aWYgRU5BQkxFKERGR19KSVQpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9wdGltaXpl
KEV4ZWNTdGF0ZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKKyNlbmRpZgordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5SW5kZXgoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGlu
dDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEdldHRlclNldHRlcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSwgSWRlbnRpZmllciosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVS
TkFMOworI2Vsc2UKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIo
RXhlY1N0YXRlKiwgSlNDZWxsKiwgSWRlbnRpZmllciosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9J
TlRFUk5BTDsKKyNlbmRpZgordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1c2hOYW1lU2Nv
cGUoRXhlY1N0YXRlKiwgSWRlbnRpZmllciosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KSBXVEZf
SU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHVzaFdpdGhTY29wZShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblBvcFNjb3BlKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Qcm9maWxlRGlkQ2FsbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblByb2ZpbGVXaWxs
Q2FsbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DaGVja0hhc0luc3RhbmNlKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBiYXNlVmFsKSBXVEZfSU5URVJOQUw7CiBK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbihFeGVjU3RhdGUq
LCBpbnQzMl90IG9mZnNldCkgV1RGX0lOVEVSTkFMOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNyZWF0ZUFyZ3VtZW50cyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZkFjdGl2YXRpb24oRXhlY1N0YXRlKiwgSlNDZWxs
KikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZBcmd1
bWVudHMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWxldGVCeUlkKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGJhc2UsIGNvbnN0IElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7CiBKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0UE5hbWVzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25J
bnN0YW5jZU9mKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBwcm90
bykgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxNTc0MzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NywxMiArNTcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2luZGV4
KEluc3RydWN0aQogICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKICAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwog
ICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgCi0g
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3B1dF9ieV9pbmRleCk7Ci0gICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoYmFzZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1
c3RlZEltbTMyKHByb3BlcnR5KSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQodmFsdWUpOwot
ICAgIHN0dWJDYWxsLmNhbGwoKTsKKworICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7
CisgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QzLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRCeUluZGV4LCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcihJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtNzEsMTMgKzY5LDExIEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfc2V0dGVyKEluc3QKICAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIGludCBnZXR0ZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwogICAgIGludCBzZXR0ZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5v
cGVyYW5kOwotICAgIAotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXRf
Z2V0dGVyX3NldHRlcik7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoYmFzZSk7Ci0gICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
cHJvcGVydHkpKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoZ2V0dGVyKTsKLSAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChzZXR0ZXIpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsKKworICAgIGVt
aXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CisgICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwg
cmVnVDMpOworICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1Q0KTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDEsICZtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihwcm9wZXJ0eSksIHJlZ1QzLCByZWdUNCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2RlbF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9u
IDE1NzQzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODksMjEgKzQ4OSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjCiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pbmRl
eChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEpJVFN0dWJDYWxsIHN0
dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXRfYnlfaW5kZXgpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QyKTsKLSAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCkpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQsIHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kLCByZWdU
MSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRCeUluZGV4LCByZWdUMCwgY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfZ2V0dGVyX3NldHRlcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXRfZ2V0dGVyX3NldHRlcik7
Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgcmVnVDIpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoJm1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7Ci0g
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCwg
cmVnVDIpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvbls0XS51
Lm9wZXJhbmQsIHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kLCBy
ZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bNF0u
dS5vcGVyYW5kLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJT
ZXR0ZXIsIHJlZ1QwLCAmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCksIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE1NzQzNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgsMTgg
KzM2OCw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBUIHRocm93RXhjZXAKICNkZWZp
bmUgREVGSU5FX1NUVUJfRlVOQ1RJT04ocnR5cGUsIG9wKSBydHlwZSBKSVRfU1RVQiBjdGlfIyNv
cChTVFVCX0FSR1NfREVDTEFSQVRJT04pCiAjZW5kaWYKIAotREVGSU5FX1NUVUJfRlVOQ1RJT04o
dm9pZCwgaGFuZGxlX3dhdGNoZG9nX3RpbWVyKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFN
RShzdGFja0ZyYW1lKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2Fs
bEZyYW1lOwotICAgIFZNKiB2bSA9IHN0YWNrRnJhbWUudm07Ci0gICAgaWYgKFVOTElLRUxZKHZt
LT53YXRjaGRvZy5kaWRGaXJlKGNhbGxGcmFtZSkpKSB7Ci0gICAgICAgIHZtLT50aHJvd0V4Y2Vw
dGlvbihjYWxsRnJhbWUsIGNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24odm0pKTsK
LSAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotfQotCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5
X2lkX2dlbmVyaWMpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpA
QCAtNjU5LDI0MiArNjQ3LDYgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUs
IG9wXwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotI2lmIEVOQUJM
RShERkdfSklUKQotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCi17Ci0gICAg
U1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotICAgIAotICAgIC8vIERlZmVyIEdD
IHNvIHRoYXQgaXQgZG9lc24ndCBydW4gYmV0d2VlbiB3aGVuIHdlIGVudGVyIGludG8gdGhpcyBz
bG93IHBhdGggYW5kCi0gICAgLy8gd2hlbiB3ZSBmaWd1cmUgb3V0IHRoZSBzdGF0ZSBvZiBvdXIg
Y29kZSBibG9jay4gVGhpcyBwcmV2ZW50cyBhIG51bWJlciBvZgotICAgIC8vIGF3a3dhcmQgcmVl
bnRyYW5jeSBzY2VuYXJpb3MsIGluY2x1ZGluZzoKLSAgICAvLwotICAgIC8vIC0gVGhlIG9wdGlt
aXplZCB2ZXJzaW9uIG9mIG91ciBjb2RlIGJsb2NrIGJlaW5nIGpldHRpc29uZWQgYnkgR0Mgcmln
aHQgYWZ0ZXIKLSAgICAvLyAgIHdlIGNvbmNsdWRlZCB0aGF0IHdlIHdhbnRlZCB0byB1c2UgaXQu
Ci0gICAgLy8KLSAgICAvLyAtIEFuIG9wdGltaXplZCB2ZXJzaW9uIG9mIG91ciBjb2RlIGJsb2Nr
IGJlaW5nIGluc3RhbGxlZCBqdXN0IGFzIHdlIGRlY2lkZWQKLSAgICAvLyAgIHRoYXQgaXQgd2Fz
bid0IHJlYWR5IHlldC4KLSAgICAvLwotICAgIC8vIFRoaXMgc3RpbGwgbGVhdmVzIHRoZSBmb2xs
b3dpbmc6IGFueXRpbWUgd2UgcmV0dXJuIGZyb20gY3RpX29wdGltaXplLCB3ZSBtYXkKLSAgICAv
LyBHQywgYW5kIHRoZSBHQyBtYXkgZWl0aGVyIGpldHRpc29uIHRoZSBvcHRpbWl6ZWQgdmVyc2lv
biBvZiBvdXIgY29kZSBibG9jaywKLSAgICAvLyBvciBpdCBtYXkgaW5zdGFsbCB0aGUgb3B0aW1p
emVkIHZlcnNpb24gb2Ygb3VyIGNvZGUgYmxvY2sgZXZlbiB0aG91Z2ggd2UKLSAgICAvLyBjb25j
bHVkZWQgdGhhdCBpdCB3YXNuJ3QgcmVhZHkgeWV0LgotICAgIC8vCi0gICAgLy8gTm90ZSB0aGF0
IGpldHRpc29uaW5nIHdvbid0IGhhcHBlbiBpZiB3ZSBhbHJlYWR5IGluaXRpYXRlZCBPU1IsIGJl
Y2F1c2UgaW4KLSAgICAvLyB0aGF0IGNhc2Ugd2Ugd291bGQgaGF2ZSBhbHJlYWR5IHBsYW50ZWQg
dGhlIG9wdGltaXplZCBjb2RlIGJsb2NrIGludG8gdGhlIEpTCi0gICAgLy8gc3RhY2suCi0gICAg
RGVmZXJHQyBkZWZlckdDKHN0YWNrRnJhbWUudm0tPmhlYXApOwotICAgIAotICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+
dm0oKTsKLSAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gc3RhY2tGcmFtZS5hcmdzWzBdLmlu
dDMyKCk7Ci0KLSAgICBpZiAoYnl0ZWNvZGVJbmRleCkgewotICAgICAgICAvLyBJZiB3ZSdyZSBh
dHRlbXB0aW5nIHRvIE9TUiBmcm9tIGEgbG9vcCwgYXNzdW1lIHRoYXQgdGhpcyBzaG91bGQgYmUK
LSAgICAgICAgLy8gc2VwYXJhdGVseSBvcHRpbWl6ZWQuCi0gICAgICAgIGNvZGVCbG9jay0+bV9z
aG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkgewotICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgKmNvZGVC
bG9jaywgIjogRW50ZXJlZCBvcHRpbWl6ZSB3aXRoIGJ5dGVjb2RlSW5kZXggPSAiLCBieXRlY29k
ZUluZGV4LAotICAgICAgICAgICAgIiwgZXhlY3V0ZUNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmpp
dEV4ZWN1dGVDb3VudGVyKCksCi0gICAgICAgICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNvdW50
ZXIgPSAiLCBjb2RlQmxvY2stPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCksCi0gICAgICAg
ICAgICAiLCBleGl0Q291bnRlciA9ICIpOwotICAgICAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRp
bWl6ZWRSZXBsYWNlbWVudCgpKQotICAgICAgICAgICAgZGF0YUxvZyhjb2RlQmxvY2stPnJlcGxh
Y2VtZW50KCktPm9zckV4aXRDb3VudGVyKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBk
YXRhTG9nKCJOL0EiKTsKLSAgICAgICAgZGF0YUxvZygiXG4iKTsKLSAgICB9Ci0KLSAgICBpZiAo
IWNvZGVCbG9jay0+Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKSkgewotICAg
ICAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7Ci0gICAgICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCJDaG9vc2luZyBub3QgdG8g
b3B0aW1pemUgIiwgKmNvZGVCbG9jaywgIiB5ZXQsIGJlY2F1c2UgdGhlIHRocmVzaG9sZCBoYXNu
J3QgYmVlbiByZWFjaGVkLlxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKGNvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQpIHsKLSAgICAgICAgY29kZUJs
b2NrLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOwotICAgICAgICBjb2RlQmxvY2stPm9wdGltaXpl
QWZ0ZXJXYXJtVXAoKTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAg
ICAgICAgIGRhdGFMb2coIkNob29zaW5nIG5vdCB0byBvcHRpbWl6ZSAiLCAqY29kZUJsb2NrLCAi
IHlldCwgYmVjYXVzZSBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9PSB0cnVlLlxuIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgLy8gV2UgY2Fubm90IGJlIGluIHRoZSBwcm9j
ZXNzIG9mIGFzeW5jaHJvbm91cyBjb21waWxhdGlvbiBhbmQgYWxzbyBoYXZlIGFuIG9wdGltaXpl
ZAotICAgIC8vIHJlcGxhY2VtZW50LgotICAgIEFTU0VSVCgKLSAgICAgICAgIXZtLndvcmtsaXN0
Ci0gICAgICAgIHx8ICEodm0ud29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUoREZHOjpDb21waWxh
dGlvbktleShjb2RlQmxvY2ssIERGRzo6REZHTW9kZSkpICE9IERGRzo6V29ya2xpc3Q6Ok5vdEtu
b3duCi0gICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgp
KSk7Ci0gICAgCi0gICAgREZHOjpXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZTsKLSAgICBp
ZiAodm0ud29ya2xpc3QpIHsKLSAgICAgICAgLy8gVGhlIGNhbGwgdG8gREZHOjpXb3JrbGlzdDo6
Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oKSB3aWxsIGNvbXBsZXRlIGFsbCByZWFkeQotICAg
ICAgICAvLyAoaS5lLiBjb21waWxlZCkgY29kZSBibG9ja3MuIEJ1dCBpZiBpdCBjb21wbGV0ZXMg
b3Vycywgd2UgYWxzbyBuZWVkIHRvIGtub3cKLSAgICAgICAgLy8gd2hhdCB0aGUgcmVzdWx0IHdh
cyBzbyB0aGF0IHdlIGRvbid0IHBsb3cgYWhlYWQgYW5kIGF0dGVtcHQgT1NSIG9yIGltbWVkaWF0
ZQotICAgICAgICAvLyByZW9wdGltaXphdGlvbi4gVGhpcyB3aWxsIGhhdmUgYWxyZWFkeSBhbHNv
IHNldCB0aGUgYXBwcm9wcmlhdGUgSklUIGV4ZWN1dGlvbgotICAgICAgICAvLyBjb3VudCB0aHJl
c2hvbGQgZGVwZW5kaW5nIG9uIHdoYXQgaGFwcGVuZWQsIHNvIGlmIHRoZSBjb21waWxhdGlvbiB3
YXMgYW55dGhpbmcKLSAgICAgICAgLy8gYnV0IHN1Y2Nlc3NmdWwgd2UganVzdCB3YW50IHRvIHJl
dHVybiBlYXJseS4gU2VlIHRoZSBjYXNlIGZvciB3b3JrbGlzdFN0YXRlID09Ci0gICAgICAgIC8v
IERGRzo6V29ya2xpc3Q6OkNvbXBpbGVkLCBiZWxvdy4KLSAgICAgICAgCi0gICAgICAgIC8vIE5v
dGUgdGhhdCB3ZSBjb3VsZCBoYXZlIGFsdGVybmF0aXZlbHkganVzdCBjYWxsZWQgV29ya2xpc3Q6
OmNvbXBpbGF0aW9uU3RhdGUoKQotICAgICAgICAvLyBoZXJlLCBhbmQgaWYgaXQgcmV0dXJuZWQg
Q29tcGlsZWQsIHdlIGNvdWxkIGhhdmUgdGhlbiBjYWxsZWQKLSAgICAgICAgLy8gY29tcGxldGVB
bmRTY2hlZHVsZU9TUigpIGJlbG93LiBCdXQgdGhhdCB3b3VsZCBoYXZlIG1lYW50IHRoYXQgaXQg
Y291bGQgdGFrZQotICAgICAgICAvLyBsb25nZXIgZm9yIGNvZGUgYmxvY2tzIHRvIGJlIGNvbXBs
ZXRlZDogdGhleSB3b3VsZCBvbmx5IGNvbXBsZXRlIHdoZW4gKnRoZWlyKgotICAgICAgICAvLyBl
eGVjdXRpb24gY291bnQgdHJpZ2dlciBmaXJlZDsgYnV0IHRoYXQgY291bGQgdGFrZSBhIHdoaWxl
IHNpbmNlIHRoZSBmaXJpbmcgaXMKLSAgICAgICAgLy8gcmFjeS4gSXQgY291bGQgYWxzbyBtZWFu
IHRoYXQgY29kZSBibG9ja3MgdGhhdCBuZXZlciBydW4gYWdhaW4gYWZ0ZXIgYmVpbmcKLSAgICAg
ICAgLy8gY29tcGlsZWQgd291bGQgc2l0IG9uIHRoZSB3b3JrbGlzdCB1bnRpbCBuZXh0IEdDLiBU
aGF0J3MgZmluZSwgYnV0IGl0J3MKLSAgICAgICAgLy8gcHJvYmFibHkgYSB3YXN0ZSBvZiBtZW1v
cnkuIE91ciBnb2FsIGhlcmUgaXMgdG8gY29tcGxldGUgY29kZSBibG9ja3MgYXMgc29vbiBhcwot
ICAgICAgICAvLyBwb3NzaWJsZSBpbiBvcmRlciB0byBtaW5pbWl6ZSB0aGUgY2hhbmNlcyBvZiB1
cyBleGVjdXRpbmcgYmFzZWxpbmUgY29kZSBhZnRlcgotICAgICAgICAvLyBvcHRpbWl6ZWQgY29k
ZSBpcyBhbHJlYWR5IGF2YWlsYWJsZS4KLSAgICAgICAgCi0gICAgICAgIHdvcmtsaXN0U3RhdGUg
PSB2bS53b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oCi0gICAgICAgICAgICB2
bSwgREZHOjpDb21waWxhdGlvbktleShjb2RlQmxvY2ssIERGRzo6REZHTW9kZSkpOwotICAgIH0g
ZWxzZQotICAgICAgICB3b3JrbGlzdFN0YXRlID0gREZHOjpXb3JrbGlzdDo6Tm90S25vd247Ci0g
ICAgCi0gICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gREZHOjpXb3JrbGlzdDo6Q29tcGlsaW5nKSB7
Ci0gICAgICAgIC8vIFdlIGNhbm5vdCBiZSBpbiB0aGUgcHJvY2VzcyBvZiBhc3luY2hyb25vdXMg
Y29tcGlsYXRpb24gYW5kIGFsc28gaGF2ZSBhbiBvcHRpbWl6ZWQKLSAgICAgICAgLy8gcmVwbGFj
ZW1lbnQuCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjb2RlQmxvY2stPmhhc09wdGltaXplZFJl
cGxhY2VtZW50KCkpOwotICAgICAgICBjb2RlQmxvY2stPnNldE9wdGltaXphdGlvblRocmVzaG9s
ZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlvbkRlZmVycmVkKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBERkc6Oldvcmts
aXN0OjpDb21waWxlZCkgewotICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFuIG9wdGltaXpl
ZCByZXBsYWNlbWVudCBidXQgd2UgZGlkIGp1c3QgZ2V0IGNvbXBpbGVkLCB0aGVuCi0gICAgICAg
IC8vIHRoZSBjb21waWxhdGlvbiBmYWlsZWQgb3Igd2FzIGludmFsaWRhdGVkLCBpbiB3aGljaCBj
YXNlIHRoZSBleGVjdXRpb24gY291bnQKLSAgICAgICAgLy8gdGhyZXNob2xkcyBoYXZlIGFscmVh
ZHkgYmVlbiBzZXQgYXBwcm9wcmlhdGVseSBieQotICAgICAgICAvLyBDb2RlQmxvY2s6OnNldE9w
dGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCgpIGFuZCB3ZSBoYXZl
Ci0gICAgICAgIC8vIG5vdGhpbmcgbGVmdCB0byBkby4KLSAgICAgICAgaWYgKCFjb2RlQmxvY2st
Pmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKLSAgICAgICAgICAgIGNvZGVCbG9jay0+dXBk
YXRlQWxsUHJlZGljdGlvbnMoKTsKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NS
KCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiQ29kZSBibG9jayAiLCAqY29kZUJsb2NrLCAi
IHdhcyBjb21waWxlZCBidXQgaXQgZG9lc24ndCBoYXZlIGFuIG9wdGltaXplZCByZXBsYWNlbWVu
dC5cbiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChj
b2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKLSAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIE9TUiAi
LCAqY29kZUJsb2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIuXG4iKTsK
LSAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQsIHRoZW4gaXQg
bXVzdCBiZSB0aGUgY2FzZSB0aGF0IHdlIGVudGVyZWQKLSAgICAgICAgLy8gY3RpX29wdGltaXpl
IGZyb20gYSBsb29wLiBUaGF0J3MgYmVjYXVzZSBpZiB0aGVyZSdzIGFuIG9wdGltaXplZCByZXBs
YWNlbWVudCwKLSAgICAgICAgLy8gdGhlbiBhbGwgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiB3aWxs
IGJlIHJlbGlua2VkIHRvIHRoZSByZXBsYWNlbWVudCBhbmQgc28KLSAgICAgICAgLy8gdGhlIHBy
b2xvZ3VlIE9TUiB3aWxsIG5ldmVyIGZpcmUuCi0gICAgICAgIAotICAgICAgICAvLyBUaGlzIGlz
IGFuIGludGVyZXN0aW5nIHRocmVzaG9sZCBjaGVjay4gQ29uc2lkZXIgdGhhdCBhIGZ1bmN0aW9u
IE9TUiBleGl0cwotICAgICAgICAvLyBpbiB0aGUgbWlkZGxlIG9mIGEgbG9vcCwgd2hpbGUgaGF2
aW5nIGEgcmVsYXRpdmVseSBsb3cgZXhpdCBjb3VudC4gVGhlIGV4aXQKLSAgICAgICAgLy8gd2ls
bCByZXNldCB0aGUgZXhlY3V0aW9uIGNvdW50ZXIgdG8gc29tZSB0YXJnZXQgdGhyZXNob2xkLCBt
ZWFuaW5nIHRoYXQgdGhpcwotICAgICAgICAvLyBjb2RlIHdvbid0IGJlIHJlYWNoZWQgdW50aWwg
dGhhdCBsb29wIGhlYXRzIHVwIGZvciA+PTEwMDAgZXhlY3V0aW9ucy4gQnV0IHRoZW4KLSAgICAg
ICAgLy8gd2UgZG8gYSBzZWNvbmQgY2hlY2sgaGVyZSwgdG8gc2VlIGlmIHdlIHNob3VsZCBlaXRo
ZXIgcmVvcHRpbWl6ZSwgb3IganVzdAotICAgICAgICAvLyBhdHRlbXB0IE9TUiBlbnRyeS4gSGVu
Y2UgaXQgbWlnaHQgZXZlbiBiZSBjb3JyZWN0IGZvcgotICAgICAgICAvLyBzaG91bGRSZW9wdGlt
aXplRnJvbUxvb3BOb3coKSB0byBhbHdheXMgcmV0dXJuIHRydWUuIEJ1dCB3ZSBtYWtlIGl0IGRv
IHNvbWUKLSAgICAgICAgLy8gYWRkaXRpb25hbCBjaGVja2luZyBhbnl3YXksIHRvIHJlZHVjZSB0
aGUgYW1vdW50IG9mIHJlY29tcGlsYXRpb24gdGhyYXNoaW5nLgotICAgICAgICBpZiAoY29kZUJs
b2NrLT5yZXBsYWNlbWVudCgpLT5zaG91bGRSZW9wdGltaXplRnJvbUxvb3BOb3coKSkgewotICAg
ICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewotICAgICAgICAgICAgICAgIGRh
dGFMb2coCi0gICAgICAgICAgICAgICAgICAgICJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9m
ICIsICpjb2RlQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICIoIiwgKmNvZGVCbG9jay0+cmVw
bGFjZW1lbnQoKSwgIikgKGluIGxvb3ApLlxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBjb2RlQmxvY2stPnJlb3B0aW1pemUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghY29kZUJsb2NrLT5zaG91bGRPcHRpbWl6ZU5v
dygpKSB7Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7Ci0gICAgICAg
ICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICAgICAgICAgIkRlbGF5aW5nIG9wdGltaXph
dGlvbiBmb3IgIiwgKmNvZGVCbG9jaywKLSAgICAgICAgICAgICAgICAgICAgIiBiZWNhdXNlIG9m
IGluc3VmZmljaWVudCBwcm9maWxpbmcuXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIlRyaWdnZXJpbmcgb3B0aW1pemVkIGNvbXBp
bGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICJcbiIpOwotICAgICAgICAKLSAgICAgICAgdW5zaWdu
ZWQgbnVtVmFyc1dpdGhWYWx1ZXM7Ci0gICAgICAgIGlmIChieXRlY29kZUluZGV4KQotICAgICAg
ICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSBjb2RlQmxvY2stPm1fbnVtVmFyczsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSAwOwotICAgICAgICBPcGVyYW5k
czxKU1ZhbHVlPiBtdXN0SGFuZGxlVmFsdWVzKAotICAgICAgICAgICAgY29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVzKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpbnQg
b3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwotICAgICAgICAg
ICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpCi0gICAgICAgICAgICAgICAgJiYgIVZp
cnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCkKLSAgICAgICAgICAgICAgICAmJiBj
b2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlCi0gICAgICAgICAgICAgICAgJiYg
Y29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7Ci0g
ICAgICAgICAgICAgICAgLy8gVWdoLiBJZiB3ZSdyZSBpbiBhIGNvbnN0cnVjdG9yLCB0aGUgJ3Ro
aXMnIGFyZ3VtZW50IG1heSBob2xkIGdhcmJhZ2UuIEl0IHdpbGwKLSAgICAgICAgICAgICAgICAv
LyBhbHNvIG5ldmVyIGJlIHVzZWQuIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgd2UgcHV0IGludG8g
dGhlIHZhbHVlIGZvciB0aGlzLAotICAgICAgICAgICAgICAgIC8vIGJ1dCBpdCBoYXMgdG8gYmUg
YW4gYWN0dWFsIHZhbHVlIHRoYXQgY2FuIGJlIGdyb2trZWQgYnkgc3Vic2VxdWVudCBERkcgcGFz
c2VzLAotICAgICAgICAgICAgICAgIC8vIHNvIHdlIHNhbml0aXplIGl0IGhlcmUgYnkgdHVybmlu
ZyBpdCBpbnRvIFVuZGVmaW5lZC4KLSAgICAgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ld
ID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG11
c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1
ZSgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1
bHQgPSBERkc6OmNvbXBpbGUoCi0gICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNl
bWVudCgpLmdldCgpLCBERkc6OkRGR01vZGUsIGJ5dGVjb2RlSW5kZXgsCi0gICAgICAgICAgICBt
dXN0SGFuZGxlVmFsdWVzLCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3Jl
YXRlKCksCi0gICAgICAgICAgICB2bS5lbnN1cmVXb3JrbGlzdCgpKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChyZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAKLSAgICBDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IGNv
ZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0gICAgCi0gICAgaWYgKHZvaWQq
IGFkZHJlc3MgPSBERkc6OnByZXBhcmVPU1JFbnRyeShjYWxsRnJhbWUsIG9wdGltaXplZENvZGVC
bG9jaywgYnl0ZWNvZGVJbmRleCkpIHsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkgewotICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICAgICAiUGVyZm9ybWluZyBP
U1IgIiwgKmNvZGVCbG9jaywgIiAtPiAiLCAqb3B0aW1pemVkQ29kZUJsb2NrLCAiLCBhZGRyZXNz
ICIsCi0gICAgICAgICAgICAgICAgUmF3UG9pbnRlcigoU1RVQl9SRVRVUk5fQUREUkVTUykudmFs
dWUoKSksICIgLT4gIiwgUmF3UG9pbnRlcihhZGRyZXNzKSwgIi5cbiIpOwotICAgICAgICB9Ci0K
LSAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZVNvb24oKTsKLSAgICAgICAgU1RVQl9TRVRfUkVU
VVJOX0FERFJFU1MoYWRkcmVzcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKSB7Ci0gICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAi
T3B0aW1pemluZyAiLCAqY29kZUJsb2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50
KCksCi0gICAgICAgICAgICAiIHN1Y2NlZWRlZCwgT1NSIGZhaWxlZCwgYWZ0ZXIgYSBkZWxheSBv
ZiAiLAotICAgICAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSwg
Ii5cbiIpOwotICAgIH0KLQotICAgIC8vIENvdW50IHRoZSBPU1IgZmFpbHVyZSBhcyBhIHNwZWN1
bGF0aW9uIGZhaWx1cmUuIElmIHRoaXMgaGFwcGVucyBhIGxvdCwgdGhlbgotICAgIC8vIHJlb3B0
aW1pemUuCi0gICAgb3B0aW1pemVkQ29kZUJsb2NrLT5jb3VudE9TUkV4aXQoKTsKLSAgICAKLSAg
ICAvLyBXZSBhcmUgYSBsb3QgbW9yZSBjb25zZXJ2YXRpdmUgYWJvdXQgdHJpZ2dlcmluZyByZW9w
dGltaXphdGlvbiBhZnRlciBPU1IgZmFpbHVyZSB0aGFuCi0gICAgLy8gYmVmb3JlIGl0LiBJZiB3
ZSBlbnRlciB0aGUgb3B0aW1pemVfZnJvbV9sb29wIHRyaWdnZXIgd2l0aCBhIGJ1Y2tldCBmdWxs
IG9mIGZhaWwKLSAgICAvLyBhbHJlYWR5LCB0aGVuIHdlIHJlYWxseSB3b3VsZCBsaWtlIHRvIHJl
b3B0aW1pemUgaW1tZWRpYXRlbHkuIEJ1dCB0aGlzIGNhc2UgY292ZXJzCi0gICAgLy8gc29tZXRo
aW5nIGVsc2U6IHRoZXJlIHdlcmVuJ3QgbWFueSAob3IgYW55KSBzcGVjdWxhdGlvbiBmYWlsdXJl
cyBiZWZvcmUsIGJ1dCB3ZSBqdXN0Ci0gICAgLy8gZmFpbGVkIHRvIGVudGVyIHRoZSBzcGVjdWxh
dGl2ZSBjb2RlIGJlY2F1c2Ugc29tZSB2YXJpYWJsZSBoYWQgdGhlIHdyb25nIHZhbHVlIG9yCi0g
ICAgLy8gYmVjYXVzZSB0aGUgT1NSIGNvZGUgZGVjaWRlZCBmb3IgYW55IHNwdXJpb3VzIHJlYXNv
biB0aGF0IGl0IGRpZCBub3Qgd2FudCB0byBPU1IKLSAgICAvLyByaWdodCBub3cuIFNvLCB3ZSBv
bmx5IHRyaWdnZXIgcmVvcHRpbWl6YXRpb24gb25seSB1cG9uIHRoZSBtb3JlIGNvbnNlcnZhdGl2
ZSAobm9uLWxvb3ApCi0gICAgLy8gcmVvcHRpbWl6YXRpb24gdHJpZ2dlci4KLSAgICBpZiAob3B0
aW1pemVkQ29kZUJsb2NrLT5zaG91bGRSZW9wdGltaXplTm93KCkpIHsKLSAgICAgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSkgewotICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAg
ICAgICAiVHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIC0+ICIs
Ci0gICAgICAgICAgICAgICAgKmNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgIiAoYWZ0ZXIgT1NS
IGZhaWwpLlxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBPU1IgZmFpbGVkIHRoaXMgdGltZSwg
YnV0IGl0IG1pZ2h0IHN1Y2NlZWQgbmV4dCB0aW1lISBMZXQgdGhlIGNvZGUgcnVuIGEgYml0Ci0g
ICAgLy8gbG9uZ2VyIGFuZCB0aGVuIHRyeSBhZ2Fpbi4KLSAgICBjb2RlQmxvY2stPm9wdGltaXpl
QWZ0ZXJXYXJtVXAoKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQogREVGSU5FX1NU
VUJfRlVOQ1RJT04odm9pZCwgb3BfdGVhcl9vZmZfYWN0aXZhdGlvbikKIHsKICAgICBTVFVCX0lO
SVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CkBAIC05MTcsMjIgKzY2OSw2IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3RlYXJfb2ZmX2EKICAgICBhcmd1bWVudHMtPnRlYXJPZmYo
Y2FsbEZyYW1lKTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHJvZmlsZV93
aWxsX2NhbGwpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0g
ICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHN0YWNrRnJhbWUudm0tPmVuYWJsZWRQ
cm9maWxlcigpKQotICAgICAgICBwcm9maWxlci0+d2lsbEV4ZWN1dGUoc3RhY2tGcmFtZS5jYWxs
RnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkpOwotfQotCi1ERUZJTkVfU1RVQl9G
VU5DVElPTih2b2lkLCBvcF9wcm9maWxlX2RpZF9jYWxsKQotewotICAgIFNUVUJfSU5JVF9TVEFD
S19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIg
PSBzdGFja0ZyYW1lLnZtLT5lbmFibGVkUHJvZmlsZXIoKSkKLSAgICAgICAgcHJvZmlsZXItPmRp
ZEV4ZWN1dGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVl
KCkpOwotfQotCiBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbCgKICAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpCiB7CkBAIC0xMTQ3LDQ0ICs4ODMsNiBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTih2b2lkKiwgb3BfdGhyb3cpCiAgICAgcmV0dXJuIGhhbmRsZXIuY2FsbEZyYW1lOwog
fQogCi1ERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXNoX3dpdGhfc2NvcGUpCi17Ci0g
ICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgSlNPYmplY3QqIG8g
PSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpLnRvT2JqZWN0KHN0YWNrRnJhbWUuY2FsbEZy
YW1lKTsKLSAgICBDSEVDS19GT1JfRVhDRVBUSU9OX1ZPSUQoKTsKLSAgICBzdGFja0ZyYW1lLmNh
bGxGcmFtZS0+c2V0U2NvcGUoSlNXaXRoU2NvcGU6OmNyZWF0ZShzdGFja0ZyYW1lLmNhbGxGcmFt
ZSwgbykpOwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wb3Bfc2NvcGUpCi17
Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgc3RhY2tGcmFt
ZS5jYWxsRnJhbWUtPnNldFNjb3BlKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5zY29wZSgpLT5uZXh0
KCkpOwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXNoX25hbWVfc2NvcGUp
Ci17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgSlNOYW1l
U2NvcGUqIHNjb3BlID0gSlNOYW1lU2NvcGU6OmNyZWF0ZShzdGFja0ZyYW1lLmNhbGxGcmFtZSwg
c3RhY2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKSwgc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFs
dWUoKSwgc3RhY2tGcmFtZS5hcmdzWzJdLmludDMyKCkpOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBjYWxsRnJhbWUtPnNldFNjb3BlKHNj
b3BlKTsKLX0KLQotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X2luZGV4KQot
ewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgdW5zaWduZWQgcHJvcGVy
dHkgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uaW50MzIoKTsKLQotICAgIEpTVmFsdWUgYXJyYXlWYWx1
ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Ci0gICAgQVNTRVJUKGlzSlNBcnJheShh
cnJheVZhbHVlKSk7Ci0gICAgYXNBcnJheShhcnJheVZhbHVlKS0+cHV0RGlyZWN0SW5kZXgoY2Fs
bEZyYW1lLCBwcm9wZXJ0eSwgc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFsdWUoKSk7Ci19Ci0KIERF
RklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCBvcF9zd2l0Y2hfaW1tKQogewogICAgIFNUVUJfSU5J
VF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKQEAgLTEyNDIsMzEgKzk0MCw2IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQqLCBvcF9zd2l0Y2hfc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1ERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfZ2V0dGVyX3NldHRlcikKLXsKLSAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotCi0gICAgQVNTRVJUKHN0YWNrRnJhbWUu
YXJnc1swXS5qc1ZhbHVlKCkuaXNPYmplY3QoKSk7Ci0gICAgSlNPYmplY3QqIGJhc2VPYmogPSBh
c09iamVjdChzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpKTsKLQotICAgIFZNJiB2bSA9IGNh
bGxGcmFtZS0+dm0oKTsKLSAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVy
OjpjcmVhdGUodm0pOwotCi0gICAgSlNWYWx1ZSBnZXR0ZXIgPSBzdGFja0ZyYW1lLmFyZ3NbMl0u
anNWYWx1ZSgpOwotICAgIEpTVmFsdWUgc2V0dGVyID0gc3RhY2tGcmFtZS5hcmdzWzNdLmpzVmFs
dWUoKTsKLSAgICBBU1NFUlQoZ2V0dGVyLmlzT2JqZWN0KCkgfHwgZ2V0dGVyLmlzVW5kZWZpbmVk
KCkpOwotICAgIEFTU0VSVChzZXR0ZXIuaXNPYmplY3QoKSB8fCBzZXR0ZXIuaXNVbmRlZmluZWQo
KSk7Ci0gICAgQVNTRVJUKGdldHRlci5pc09iamVjdCgpIHx8IHNldHRlci5pc09iamVjdCgpKTsK
LQotICAgIGlmICghZ2V0dGVyLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIGFjY2Vzc29yLT5zZXRH
ZXR0ZXIodm0sIGFzT2JqZWN0KGdldHRlcikpOwotICAgIGlmICghc2V0dGVyLmlzVW5kZWZpbmVk
KCkpCi0gICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIodm0sIGFzT2JqZWN0KHNldHRlcikpOwot
ICAgIGJhc2VPYmotPnB1dERpcmVjdEFjY2Vzc29yKGNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdz
WzFdLmlkZW50aWZpZXIoKSwgYWNjZXNzb3IsIEFjY2Vzc29yKTsKLX0KLQogREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCwgb3BfdGhyb3dfc3RhdGljX2Vycm9yKQogewogICAgIFNUVUJfSU5JVF9T
VEFDS19GUkFNRShzdGFja0ZyYW1lKTsKQEAgLTEyODAsMTYgKzk1Myw2IEBAIERFRklORV9TVFVC
X0ZVTkNUSU9OKHZvaWQsIG9wX3Rocm93X3N0YXQKICAgICBWTV9USFJPV19FWENFUFRJT05fQVRf
RU5EKCk7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX2RlYnVnKQotewotICAg
IFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0KLSAgICBpbnQgZGVidWdIb29rSUQgPSBz
dGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKTsKLSAgICBzdGFja0ZyYW1lLnZtLT5pbnRlcnByZXRl
ci0+ZGVidWcoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVidWdIb29rSUQp
KTsKLX0KLQogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIHZtX3Rocm93KQogewogICAgIFNU
VUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUU3R1YnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmgJKHJldmlzaW9uIDE1NzQzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQzLDIzICszNDMsMTEgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZAogRW5jb2RlZEpTVmFsdWUgSklU
X1NUVUIgY3RpX29wX2dldF9ieV92YWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJO
QUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKFNU
VUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX1NU
VUIgY3RpX29wX2dldF9ieV92YWxfc3RyaW5nKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lO
VEVSTkFMOwotdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHVzaF9uYW1lX3Njb3BlKFNUVUJfQVJHU19E
RUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHVzaF93aXRo
X3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfU1RV
QiBjdGlfaGFuZGxlX3dhdGNoZG9nX3RpbWVyKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lO
VEVSTkFMOwotdm9pZCBKSVRfU1RVQiBjdGlfb3BfZGVidWcoU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9TVFVCIGN0aV9vcF9wb3Bfc2NvcGUoU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9TVFVCIGN0aV9vcF9wcm9maWxl
X2RpZF9jYWxsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRf
U1RVQiBjdGlfb3BfcHJvZmlsZV93aWxsX2NhbGwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZf
SU5URVJOQUw7Ci12b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfaW5kZXgoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfdmFs
KFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfU1RVQiBjdGlf
b3BfcHV0X2J5X3ZhbF9nZW5lcmljKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFM
Owotdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2dldHRlcl9zZXR0ZXIoU1RVQl9BUkdTX0RFQ0xB
UkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9hY3Rp
dmF0aW9uKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfU1RV
QiBjdGlfb3BfdGVhcl9vZmZfYXJndW1lbnRzKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lO
VEVSTkFMOwogdm9pZCBKSVRfU1RVQiBjdGlfb3BfdGhyb3dfc3RhdGljX2Vycm9yKFNUVUJfQVJH
U19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotI2lmIEVOQUJMRShERkdfSklUKQotdm9pZCBK
SVRfU1RVQiBjdGlfb3B0aW1pemUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7
Ci0jZW5kaWYKIHZvaWQqIEpJVF9TVFVCIGN0aV9vcF9zd2l0Y2hfY2hhcihTVFVCX0FSR1NfREVD
TEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIHZvaWQqIEpJVF9TVFVCIGN0aV9vcF9zd2l0Y2hfaW1t
KFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCogSklUX1NUVUIgY3Rp
X29wX3N3aXRjaF9zdHJpbmcoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214265</attachid>
            <date>2013-10-15 08:53:11 -0700</date>
            <delta_ts>2013-10-15 11:05:50 -0700</delta_ts>
            <desc>With fixes Mark suggested</desc>
            <filename>122617-2.patch</filename>
            <type>text/plain</type>
            <size>79410</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3NDM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBA
CisyMDEzLTEwLTE0ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIHRyYW5zaXRpb24gdm9pZCBjdGlfb3BfKiBtZXRob2RzIHRvIEpJVCBvcGVyYXRpb25zLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNjE3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29udmVydGVk
IHRoZSBmb2xsb3cgc3R1YnMgdG8gSklUIG9wZXJhdGlvbnM6CisgICAgICAgICAgICBjdGlfaGFu
ZGxlX3dhdGNoZG9nX3RpbWVyCisgICAgICAgICAgICBjdGlfb3BfZGVidWcKKyAgICAgICAgICAg
IGN0aV9vcF9wb3Bfc2NvcGUKKyAgICAgICAgICAgIGN0aV9vcF9wcm9maWxlX2RpZF9jYWxsCisg
ICAgICAgICAgICBjdGlfb3BfcHJvZmlsZV93aWxsX2NhbGwKKyAgICAgICAgICAgIGN0aV9vcF9w
dXRfYnlfaW5kZXgKKyAgICAgICAgICAgIGN0aV9vcF9wdXRfZ2V0dGVyX3NldHRlcgorICAgICAg
ICAgICAgY3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24KKyAgICAgICAgICAgIGN0aV9vcF90ZWFy
X29mZl9hcmd1bWVudHMKKyAgICAgICAgICAgIGN0aV9vcF90aHJvd19zdGF0aWNfZXJyb3IKKyAg
ICAgICAgICAgIGN0aV9vcHRpbWl6ZQorCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0NDYWxsSGVs
cGVycy5oOgorICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZSk6CisgICAgICAgIChKU0M6OkNDYWxsSGVscGVyczo6c2V0dXBUaHJlZVN0dWJBcmdz
R1BSKToKKyAgICAgICAgKEpTQzo6Q0NhbGxIZWxwZXJzOjpzZXR1cFN0dWJBcmd1bWVudHMpOgor
ICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OnNldHVwU3R1YkFyZ3VtZW50czEzNCk6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEVudGVyT3B0aW1pemF0
aW9uQ2hlY2spOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5l
cy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGppdC9K
SVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RlYXJfb2ZmX2FjdGl2
YXRpb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGVhcl9vZmZfYXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1c2hfd2l0aF9zY29wZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wb3Bfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHVzaF9uYW1lX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93X3N0YXRp
Y19lcnJvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wcm9maWxlX3dpbGxfY2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wcm9maWxlX2RpZF9jYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9sb29wX2hpbnQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHVzaF93aXRoX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3BvcF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXNoX25h
bWVfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3dfc3RhdGljX2Vycm9y
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYnVnKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3Byb2ZpbGVfd2lsbF9jYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3Byb2ZpbGVfZGlkX2NhbGwpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaW5kZXgpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXIpOgorICAgICAgICAqIGpp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9ieV9pbmRleCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3Nl
dHRlcik6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKiBqaXQvSklUU3R1
YnMuaDoKKwogMjAxMy0xMC0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIERGRyBQdXRCeUlkIElDIHNob3VsZCB1c2UgdGhlIENvbmN1cnJlbnRKSVRMb2NrZXIg
c2luY2UgaXQncyBub3cgZGVhbGluZyB3aXRoIElDJ3MgdGhhdCBnZXQgcmVhZCBieSB0aGUgY29t
cGlsZXIgdGhyZWFkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDE1NzQzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5MiwxNiArNjkyLDYgQEAgSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUlubAogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmQXJndW1lbnRzKEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBhcmd1bWVudHNDZWxsLCBKU0NlbGwqIGFjdGl2YXRpb25DZWxs
KQotewotICAgIEFTU0VSVChleGVjLT5jb2RlQmxvY2soKS0+dXNlc0FyZ3VtZW50cygpKTsKLSAg
ICBpZiAoYWN0aXZhdGlvbkNlbGwpIHsKLSAgICAgICAganNDYXN0PEFyZ3VtZW50cyo+KGFyZ3Vt
ZW50c0NlbGwpLT5kaWRUZWFyT2ZmQWN0aXZhdGlvbihleGVjLCBqc0Nhc3Q8SlNBY3RpdmF0aW9u
Kj4oYWN0aXZhdGlvbkNlbGwpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBqc0Nhc3Q8
QXJndW1lbnRzKj4oYXJndW1lbnRzQ2VsbCktPnRlYXJPZmYoZXhlYyk7Ci19Ci0KIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3VtZW50cygKICAgICBFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogYXJndW1lbnRzQ2VsbCwgSlNDZWxsKiBhY3RpdmF0aW9uQ2VsbCwg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTU3NDM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTkx
LDcgKzkxLDYgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdAogc2l6
ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbChFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBX
VEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0
RXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkNyZWF0ZUlubGluZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwgSW5saW5lQ2FsbEZyYW1lKikgV1RG
X0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZBcmd1bWVudHMo
RXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblRlYXJPZmZJbmxpbmVkQXJndW1lbnRzKEV4ZWNTdGF0ZSosIEpTQ2Vs
bCosIEpTQ2VsbCosIElubGluZUNhbGxGcmFtZSopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRzTGVuZ3RoKEV4ZWNTdGF0ZSos
IGludDMyX3QpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0SW5saW5lZEFyZ3VtZW50QnlWYWwoRXhlY1N0YXRlKiwgaW50MzJfdCwgSW5saW5l
Q2FsbEZyYW1lKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAxNTc0MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNiAr
MjEwLDE1IEBAIHB1YmxpYzoKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOwogICAgIH0K
IAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMykKKyAgICB7CisgICAgICAg
IHJlc2V0Q2FsbEFyZ3VtZW50cygpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7CisgICAg
ICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMp
OworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tUHRyIGFyZzMpCiAgICAg
ewogICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKQEAgLTM3Miw3ICszODEsMjcgQEAgcHVi
bGljOgogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7CiAgICAgfQogCi0gICAgQUxXQVlT
X0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIsIEdQUlJlZyBhcmczLCBHUFJSZWcgYXJnNCwgR1BSUmVnIGFyZzUpCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRy
IGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMywgVHJ1c3RlZEltbTMyIGFyZzQpCisgICAg
eworICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFy
ZzEpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7CisgICAgICAgIGFkZENhbGxBcmd1
bWVudChhcmczKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzQpOworICAgIH0KKworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFy
ZzEsIFRydXN0ZWRJbW1QdHIgYXJnMiwgR1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0KQorICAgIHsK
KyAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcx
KTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOworICAgICAgICBhZGRDYWxsQXJndW1l
bnQoYXJnMyk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKKyAgICB9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQ
UlJlZyBhcmcyLCBHUFJSZWcgYXJnMywgR1BSUmVnIGFyZzQsIEdQUlJlZyBhcmc1KQogICAgIHsK
ICAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CkBAIC0zODMsNiArNDEyLDE3IEBAIHB1YmxpYzoK
ICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzUpOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgR1BSUmVnIGFyZzQsIEdQUlJlZyBhcmc1KQorICAgIHsK
KyAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcx
KTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOworICAgICAgICBhZGRDYWxsQXJndW1l
bnQoYXJnMyk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKKyAgICAgICAgYWRkQ2Fs
bEFyZ3VtZW50KGFyZzUpOworICAgIH0KKyAgICAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVn
IGFyZzMsIEdQUlJlZyBhcmc0LCBUcnVzdGVkSW1tUHRyIGFyZzUpCiAgICAgewogICAgICAgICBy
ZXNldENhbGxBcmd1bWVudHMoKTsKQEAgLTQ2NCw2ICs1MDQsNjAgQEAgcHVibGljOgogICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgIHN3YXAoZGVzdEEsIGRlc3RCKTsKICAgICB9CisKKyAgICB0
ZW1wbGF0ZTxHUFJSZWcgZGVzdEEsIEdQUlJlZyBkZXN0QiwgR1BSUmVnIGRlc3RDPgorICAgIHZv
aWQgc2V0dXBUaHJlZVN0dWJBcmdzR1BSKEdQUlJlZyBzcmNBLCBHUFJSZWcgc3JjQiwgR1BSUmVn
IHNyY0MpCisgICAgeworICAgICAgICAvLyBJZiBuZWl0aGVyIG9mIHNyY0Ivc3JjQyBhcmUgaW4g
b3VyIHdheSwgdGhlbiB3ZSBjYW4gbW92ZSBzcmNBIGludG8gcGxhY2UuCisgICAgICAgIC8vIFRo
ZW4gd2UgY2FuIHVzZSBzZXR1cFR3b1N0dWJBcmdzIHRvIGZpeCBzcmNCL3NyY0MuCisgICAgICAg
IGlmIChzcmNCICE9IGRlc3RBICYmIHNyY0MgIT0gZGVzdEEpIHsKKyAgICAgICAgICAgIG1vdmUo
c3JjQSwgZGVzdEEpOworICAgICAgICAgICAgc2V0dXBUd29TdHViQXJnc0dQUjxkZXN0QiwgZGVz
dEM+KHNyY0IsIHNyY0MpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBJZiBuZWl0aGVyIG9mIHNyY0Evc3JjQyBhcmUgaW4gb3VyIHdheSwgdGhl
biB3ZSBjYW4gbW92ZSBzcmNCIGludG8gcGxhY2UuCisgICAgICAgIC8vIFRoZW4gd2UgY2FuIHVz
ZSBzZXR1cFR3b1N0dWJBcmdzIHRvIGZpeCBzcmNBL3NyY0MuCisgICAgICAgIGlmIChzcmNBICE9
IGRlc3RCICYmIHNyY0MgIT0gZGVzdEIpIHsKKyAgICAgICAgICAgIG1vdmUoc3JjQiwgZGVzdEIp
OworICAgICAgICAgICAgc2V0dXBUd29TdHViQXJnc0dQUjxkZXN0QSwgZGVzdEM+KHNyY0EsIHNy
Y0MpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBJZiBuZWl0aGVyIG9mIHNyY0Evc3JjQiBhcmUgaW4gb3VyIHdheSwgdGhlbiB3ZSBjYW4gbW92
ZSBzcmNDIGludG8gcGxhY2UuCisgICAgICAgIC8vIFRoZW4gd2UgY2FuIHVzZSBzZXR1cFR3b1N0
dWJBcmdzIHRvIGZpeCBzcmNBL3NyY0IuCisgICAgICAgIGlmIChzcmNBICE9IGRlc3RDICYmIHNy
Y0IgIT0gZGVzdEMpIHsKKyAgICAgICAgICAgIG1vdmUoc3JjQywgZGVzdEMpOworICAgICAgICAg
ICAgc2V0dXBUd29TdHViQXJnc0dQUjxkZXN0QSwgZGVzdEI+KHNyY0EsIHNyY0IpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBJZiB3ZSBnZXQg
aGVyZSwgd2UgaGF2ZW4ndCBiZWVuIGFibGUgdG8gbW92ZSBhbnkgb2Ygc3JjQS9zcmNCL3NyY0Mu
CisgICAgICAgIC8vIFNpbmNlIGFsbCB0aHJlZSBhcmUgYmxvY2tlZCwgdGhlbiBhbGwgdGhyZWUg
bXVzdCBhbHJlYWR5IGJlIGluIHRoZSBhcmd1bWVudCByZWdpc3Rlci4KKyAgICAgICAgLy8gQnV0
IGFyZSB0aGV5IGluIHRoZSByaWdodCBvbmVzPworICAgICAgICAKKyAgICAgICAgLy8gRmlyc3Qs
IGVuc3VyZSBzcmNBIGlzIGluIHBsYWNlLgorICAgICAgICBpZiAoc3JjQSAhPSBkZXN0QSkgewor
ICAgICAgICAgICAgc3dhcChzcmNBLCBkZXN0QSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIElmIHNyY0Egd2Fzbid0IGluIGFyZ3VtZW50R1BSMSwgb25lIG9mIHNyY0Ivc3JjQyBtdXN0
IGJlLgorICAgICAgICAgICAgQVNTRVJUKHNyY0IgPT0gZGVzdEEgfHwgc3JjQyA9PSBkZXN0QSk7
CisgICAgICAgICAgICAvLyBJZiBzcmNCIHdhcyBpbiBhcmd1bWVudEdQUjEgaXQgbm8gbG9uZ2Vy
IGlzIChkdWUgdG8gdGhlIHN3YXApLgorICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHNyY0MgbXVz
dCBoYXZlIGJlZW4uIE1hcmsgaGltIGFzIG1vdmVkLgorICAgICAgICAgICAgaWYgKHNyY0IgPT0g
ZGVzdEEpCisgICAgICAgICAgICAgICAgc3JjQiA9IHNyY0E7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgc3JjQyA9IHNyY0E7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIEVpdGhlciBzcmNCICYgc3JjQyBuZWVkIHN3YXBwaW5nLCBvciB3ZSdyZSBhbGwgZG9uZS4K
KyAgICAgICAgQVNTRVJUKChzcmNCID09IGRlc3RCIHx8IHNyY0MgPT0gZGVzdEMpCisgICAgICAg
ICAgICB8fCAoc3JjQiA9PSBkZXN0QyB8fCBzcmNDID09IGRlc3RCKSk7CisgICAgICAgIAorICAg
ICAgICBpZiAoc3JjQiAhPSBkZXN0QikKKyAgICAgICAgICAgIHN3YXAoZGVzdEIsIGRlc3RDKTsK
KyAgICB9CisKICNpZiBDUFUoWDg2XzY0KQogICAgIHRlbXBsYXRlPEZQUlJlZyBkZXN0QSwgRlBS
UmVnIGRlc3RCPgogICAgIHZvaWQgc2V0dXBUd29TdHViQXJnc0ZQUihGUFJSZWcgc3JjQSwgRlBS
UmVnIHNyY0IpCkBAIC01MTYsNTggKzYxMCwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBz
ZXR1cFR3b1N0dWJBcmdzR1BSPEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIyPihhcmcxLCBhcmcyKTsKICAgICB9CisKICAgICB2b2lkIHNldHVwU3R1YkFyZ3VtZW50
cyhHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKLSAgICAgICAg
Ly8gSWYgbmVpdGhlciBvZiBhcmcyL2FyZzMgYXJlIGluIG91ciB3YXksIHRoZW4gd2UgY2FuIG1v
dmUgYXJnMSBpbnRvIHBsYWNlLgotICAgICAgICAvLyBUaGVuIHdlIGNhbiB1c2Ugc2V0dXBUd29T
dHViQXJncyB0byBmaXggYXJnMi9hcmczLgotICAgICAgICBpZiAoYXJnMiAhPSBHUFJJbmZvOjph
cmd1bWVudEdQUjEgJiYgYXJnMyAhPSBHUFJJbmZvOjphcmd1bWVudEdQUjEpIHsKLSAgICAgICAg
ICAgIG1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgICAgIHNldHVw
VHdvU3R1YkFyZ3NHUFI8R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjM+KGFyZzIsIGFyZzMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gSWYgbmVpdGhlciBvZiBhcmcxL2FyZzMgYXJlIGluIG91ciB3YXksIHRoZW4gd2UgY2Fu
IG1vdmUgYXJnMiBpbnRvIHBsYWNlLgotICAgICAgICAvLyBUaGVuIHdlIGNhbiB1c2Ugc2V0dXBU
d29TdHViQXJncyB0byBmaXggYXJnMS9hcmczLgotICAgICAgICBpZiAoYXJnMSAhPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjIgJiYgYXJnMyAhPSBHUFJJbmZvOjphcmd1bWVudEdQUjIpIHsKLSAgICAg
ICAgICAgIG1vdmUoYXJnMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKLSAgICAgICAgICAgIHNl
dHVwVHdvU3R1YkFyZ3NHUFI8R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjM+KGFyZzEsIGFyZzMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gSWYgbmVpdGhlciBvZiBhcmcxL2FyZzIgYXJlIGluIG91ciB3YXksIHRoZW4gd2Ug
Y2FuIG1vdmUgYXJnMyBpbnRvIHBsYWNlLgotICAgICAgICAvLyBUaGVuIHdlIGNhbiB1c2Ugc2V0
dXBUd29TdHViQXJncyB0byBmaXggYXJnMS9hcmcyLgotICAgICAgICBpZiAoYXJnMSAhPSBHUFJJ
bmZvOjphcmd1bWVudEdQUjMgJiYgYXJnMiAhPSBHUFJJbmZvOjphcmd1bWVudEdQUjMpIHsKLSAg
ICAgICAgICAgIG1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKLSAgICAgICAgICAg
IHNldHVwVHdvU3R1YkFyZ3NHUFI8R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1
bWVudEdQUjI+KGFyZzEsIGFyZzIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHdlIGhhdmVuJ3QgYmVlbiBhYmxlIHRvIG1vdmUg
YW55IG9mIGFyZzEvYXJnMi9hcmczLgotICAgICAgICAvLyBTaW5jZSBhbGwgdGhyZWUgYXJlIGJs
b2NrZWQsIHRoZW4gYWxsIHRocmVlIG11c3QgYWxyZWFkeSBiZSBpbiB0aGUgYXJndW1lbnQgcmVn
aXN0ZXIuCi0gICAgICAgIC8vIEJ1dCBhcmUgdGhleSBpbiB0aGUgcmlnaHQgb25lcz8KLQotICAg
ICAgICAvLyBGaXJzdCwgZW5zdXJlIGFyZzEgaXMgaW4gcGxhY2UuCi0gICAgICAgIGlmIChhcmcx
ICE9IEdQUkluZm86OmFyZ3VtZW50R1BSMSkgewotICAgICAgICAgICAgc3dhcChhcmcxLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOwotCi0gICAgICAgICAgICAvLyBJZiBhcmcxIHdhc24ndCBpbiBh
cmd1bWVudEdQUjEsIG9uZSBvZiBhcmcyL2FyZzMgbXVzdCBiZS4KLSAgICAgICAgICAgIEFTU0VS
VChhcmcyID09IEdQUkluZm86OmFyZ3VtZW50R1BSMSB8fCBhcmczID09IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSk7Ci0gICAgICAgICAgICAvLyBJZiBhcmcyIHdhcyBpbiBhcmd1bWVudEdQUjEgaXQg
bm8gbG9uZ2VyIGlzIChkdWUgdG8gdGhlIHN3YXApLgotICAgICAgICAgICAgLy8gT3RoZXJ3aXNl
IGFyZzMgbXVzdCBoYXZlIGJlZW4uIE1hcmsgaGltIGFzIG1vdmVkLgotICAgICAgICAgICAgaWYg
KGFyZzIgPT0gR1BSSW5mbzo6YXJndW1lbnRHUFIxKQotICAgICAgICAgICAgICAgIGFyZzIgPSBh
cmcxOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFyZzMgPSBhcmcxOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gRWl0aGVyIGFyZzIgJiBhcmczIG5lZWQgc3dhcHBpbmcsIG9y
IHdlJ3JlIGFsbCBkb25lLgotICAgICAgICBBU1NFUlQoKGFyZzIgPT0gR1BSSW5mbzo6YXJndW1l
bnRHUFIyIHx8IGFyZzMgPT0gR1BSSW5mbzo6YXJndW1lbnRHUFIzKQotICAgICAgICAgICAgfHwg
KGFyZzIgPT0gR1BSSW5mbzo6YXJndW1lbnRHUFIzIHx8IGFyZzMgPT0gR1BSSW5mbzo6YXJndW1l
bnRHUFIyKSk7Ci0KLSAgICAgICAgaWYgKGFyZzIgIT0gR1BSSW5mbzo6YXJndW1lbnRHUFIyKQot
ICAgICAgICAgICAgc3dhcChHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMyk7CisgICAgICAgIHNldHVwVGhyZWVTdHViQXJnc0dQUjxHUFJJbmZvOjphcmd1bWVudEdQ
UjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzPihhcmcxLCBh
cmcyLCBhcmczKTsKICAgICB9CiAKKyAgICB2b2lkIHNldHVwU3R1YkFyZ3VtZW50czEzNChHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0KQorICAgIHsKKyAgICAgICAgc2V0dXBU
aHJlZVN0dWJBcmdzR1BSPEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIzLCBHUFJJbmZvOjphcmd1bWVudEdQUjQ+KGFyZzEsIGFyZzMsIGFyZzQpOworICAgIH0KICNp
ZiBDUFUoTUlQUykKICNkZWZpbmUgUE9LRV9BUkdVTUVOVF9PRkZTRVQgNAogI2Vsc2UKQEAgLTEw
MzksNiArMTA5MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBUcnVzdGVkSW1tUHRyIGFy
ZzIsIEdQUlJlZyBhcmczLCAgR1BSUmVnIGFyZzQpCisgICAgeworICAgICAgICBwb2tlKGFyZzQs
IFBPS0VfQVJHVU1FTlRfT0ZGU0VUKTsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEsIGFyZzIsIGFyZzMpOworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIFRydXN0ZWRJbW1QdHIgYXJn
MiwgVHJ1c3RlZEltbTMyIGFyZzMsIEdQUlJlZyBhcmc0KQogICAgIHsKICAgICAgICAgcG9rZShh
cmc0LCBQT0tFX0FSR1VNRU5UX09GRlNFVCk7CkBAIC0xMTkxLDYgKzEyNDksMTMgQEAgcHVibGlj
OgogICAgICAgICBtb3ZlKGFyZzMsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CiAgICAgICAgIG1v
dmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAg
ICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyLCBHUFJSZWcgYXJnMywgR1BSUmVnIGFy
ZzQpCisgICAgeworICAgICAgICBzZXR1cFN0dWJBcmd1bWVudHMxMzQoYXJnMSwgYXJnMywgYXJn
NCk7CisgICAgICAgIG1vdmUoYXJnMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICAgICAg
bW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICB9CiAjZW5kaWYKIAogICAgIHZvaWQgc2V0dXBSZXN1bHRzKEdQUlJlZyBkZXN0QSwgR1BS
UmVnIGRlc3RCKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTU3
NDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDQsMTEgKzEwNCwxMyBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hl
Y2soKQogICAgIGlmICghY2FuQmVPcHRpbWl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
SnVtcCBza2lwT3B0aW1pemUgPSBicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRp
b25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVz
cyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpOwotICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcHRpbWl6ZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQoVHJ1c3RlZEltbTMyKG1fYnl0ZWNvZGVPZmZzZXQpKTsKKyAgICBKdW1wTGlzdCBza2lw
T3B0aW1pemU7CisgICAgCisgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWdu
ZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50
cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNv
dW50ZXIoKSkpKTsKICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVPZmZzZXQpOwotICAgIHN0dWJDYWxs
LmNhbGwoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCBtX2J5dGVjb2Rl
T2Zmc2V0KTsKKyAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmV0
dXJuVmFsdWVSZWdpc3RlcikpOworICAgIGp1bXAocmV0dXJuVmFsdWVSZWdpc3Rlcik7CiAgICAg
c2tpcE9wdGltaXplLmxpbmsodGhpcyk7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkocmV2aXNpb24gMTU3NDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtODY3LDE1ICs4NjcsMjYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRp
b25fRUpJZGMsIGludCwgR1BSUmVnLCBjb25zdCBJZGVudGlmaWVyKik7CiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKLCBpbnQsIEdQ
UlJlZywgR1BSUmVnKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0pJVE9wZXJhdGlvbl9FUCwgaW50LCB2b2lkKik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRVosIGludDMyX3QpOwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VDQywg
UmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUosIFJlZ2lzdGVySUQpOwogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VKSiwgUmVnaXN0
ZXJJRCwgUmVnaXN0ZXJJRCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oU19KSVRPcGVyYXRpb25fRU9Kc3MsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0Up
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0
aW9uX0VDLCBSZWdpc3RlcklEKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0MsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VD
SUNDLCBSZWdpc3RlcklELCBjb25zdCBJZGVudGlmaWVyKiwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJ
RCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVy
YXRpb25fRUlkSlosIGNvbnN0IElkZW50aWZpZXIqLCBSZWdpc3RlcklELCBpbnQzMl90KTsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9F
SiwgUmVnaXN0ZXJJRCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oVl9KSVRPcGVyYXRpb25fRUpJZEpKLCBSZWdpc3RlcklELCBjb25zdCBJZGVudGlmaWVyKiwg
UmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSkpJLCBSZWdp
c3RlcklELCBSZWdpc3RlcklELCBTdHJpbmdJbXBsKik7CiAjZWxzZQogICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKSkksIFJlZ2lzdGVy
SUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFN0cmluZ0ltcGwqKTsKICNl
bmRpZgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3Bl
cmF0aW9uX0VKWkosIFJlZ2lzdGVySUQsIGludDMyX3QsIFJlZ2lzdGVySUQpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKWiwgUmVn
aXN0ZXJJRCwgaW50MzJfdCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oVl9KSVRPcGVyYXRpb25fRVosIGludDMyX3QpOwogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oSl9K
SVRPcGVyYXRpb25fRSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRp
b25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihWX0pJVE9wZXJhdGlvbl9FQ2IsIENv
ZGVCbG9jayopOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0
aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oWl9KSVRPcGVyYXRpb25fRSk7CkBAIC04ODcs
NiArODk4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSiwgaW50LCBHUFJSZWcsIEdQUlJlZywg
R1BSUmVnLCBHUFJSZWcpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFNfSklUT3BlcmF0aW9uX0VKLCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FSkosIFJl
Z2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VJZEpaLCBj
b25zdCBJZGVudGlmaWVyKiwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgaW50MzJfdCk7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUos
IFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKWiwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwg
aW50MzJfdCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9K
SVRPcGVyYXRpb25fRUpaSiwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgaW50MzJfdCwgUmVnaXN0
ZXJJRCwgUmVnaXN0ZXJJRCk7CiAjZW5kaWYKIAogICAgICAgICBKdW1wIGNoZWNrU3RydWN0dXJl
KFJlZ2lzdGVySUQgcmVnLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMTU3NDM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNCw2ICsz
MjQsMTIgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRp
b24sIGRzdCk7CiB9CiAKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpj
YWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgaW50MzJfdCBvcCkKK3sK
KyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKG9wKSk7CisgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKK30KKwogQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oU19KSVRP
cGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgUmVnaXN0ZXJJRCByZWdPcDEsIFJlZ2lzdGVySUQgcmVn
T3AyKQogewogICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShyZWdPcDEsIHJlZ09wMik7
CkBAIC0zNDgsNiArMzU0LDYwIEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
SklUOjoKICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24p
OwogfQogCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJh
dGlvbihWX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvbikKK3sKKyAgICBzZXR1cEFyZ3VtZW50c0V4
ZWNTdGF0ZSgpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvbik7Cit9CisKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxs
T3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VJZEpaIG9wZXJhdGlvbiwgY29uc3QgSWRlbnRpZmll
ciogaWRlbnRPcDEsIFJlZ2lzdGVySUQgcmVnT3AyLCBpbnQzMl90IG9wMykKK3sKKyAgICBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihpZGVudE9wMSksIHJlZ09wMiwg
VHJ1c3RlZEltbTMyKG9wMykpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKG9wZXJhdGlvbik7Cit9CisKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
SklUOjpjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgUmVnaXN0ZXJJ
RCByZWdPcCkKK3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUocmVnT3ApOworICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Cit9CisKK0FM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKFZfSklU
T3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgUmVnaXN0ZXJJRCByZWdPcCkKK3sKKyAgICBzZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUocmVnT3ApOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Cit9CisKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24s
IFJlZ2lzdGVySUQgcmVnT3AxLCBSZWdpc3RlcklEIHJlZ09wMikKK3sKKyAgICBzZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUocmVnT3AxLCByZWdPcDIpOworICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Cit9CisKK0FMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKSWRKSiBv
cGVyYXRpb24sIFJlZ2lzdGVySUQgcmVnT3AxLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudE9wMiwg
UmVnaXN0ZXJJRCByZWdPcDMsIFJlZ2lzdGVySUQgcmVnT3A0KQoreworICAgIHNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShyZWdPcDEsIFRydXN0ZWRJbW1QdHIoaWRlbnRPcDIpLCByZWdPcDMs
IHJlZ09wNCk7CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uKTsKK30KKworQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxP
cGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpaIG9wZXJhdGlvbiwgUmVnaXN0ZXJJRCByZWdPcDEs
IGludDMyX3Qgb3AyKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShyZWdPcDEs
IFRydXN0ZWRJbW0zMihvcDIpKTsKKyAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhvcGVyYXRpb24pOworfQorCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IEpJVDo6Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSlpKIG9wZXJhdGlvbiwgUmVnaXN0
ZXJJRCByZWdPcDEsIGludDMyX3Qgb3AyLCBSZWdpc3RlcklEIHJlZ09wMykKK3sKKyAgICBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUocmVnT3AxLCBUcnVzdGVkSW1tMzIob3AyKSwgcmVnT3Az
KTsKKyAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwor
fQorCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlv
bihWX0pJVE9wZXJhdGlvbl9FWiBvcGVyYXRpb24sIGludDMyX3Qgb3ApCit7CisgICAgc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihvcCkpOworICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Cit9CisKIEFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxi
YWNrT25FeGNlcHRpb24oSl9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb24pCiB7CiAgICAgc2V0dXBB
cmd1bWVudHNFeGVjU3RhdGUoKTsKQEAgLTQyNiwxMiArNDg2LDQxIEBAIEFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhvcGVyYXRpb24pOwogfQogCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0lDQyBvcGVyYXRpb24s
IFJlZ2lzdGVySUQgcmVnT3AxLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudE9wMiwgUmVnaXN0ZXJJ
RCByZWdPcDMsIFJlZ2lzdGVySUQgcmVnT3A0KQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShyZWdPcDEsIFRydXN0ZWRJbW1QdHIoaWRlbnRPcDIpLCByZWdPcDMsIHJlZ09wNCk7
CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKK30K
KworQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24o
Vl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBSZWdpc3RlcklEIHJlZ09wMVRhZywgUmVnaXN0
ZXJJRCByZWdPcDFQYXlsb2FkKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShy
ZWdPcDFQYXlsb2FkLCByZWdPcDFUYWcpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvbik7Cit9CisKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VJZEpaIG9wZXJhdGlvbiwg
Y29uc3QgSWRlbnRpZmllciogaWRlbnRPcDEsIFJlZ2lzdGVySUQgcmVnT3AyVGFnLCBSZWdpc3Rl
cklEIHJlZ09wMlBheWxvYWQsIGludDMyX3Qgb3AzKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBUcnVzdGVkSW1tUHRyKGlkZW50T3AxKSwg
cmVnT3AyUGF5bG9hZCwgcmVnT3AyVGFnLCBUcnVzdGVkSW1tMzIob3AzKSk7CisgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKK30KKwogQUxXQVlTX0lO
TElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRp
b25fRUpKSSBvcGVyYXRpb24sIFJlZ2lzdGVySUQgcmVnT3AxVGFnLCBSZWdpc3RlcklEIHJlZ09w
MVBheWxvYWQsIFJlZ2lzdGVySUQgcmVnT3AyVGFnLCBSZWdpc3RlcklEIHJlZ09wMlBheWxvYWQs
IFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFC
SV8zMkJJVF9EVU1NWV9BUkcgcmVnT3AxUGF5bG9hZCwgcmVnT3AxVGFnLCBTSDRfMzJCSVRfRFVN
TVlfQVJHIHJlZ09wMlBheWxvYWQsIHJlZ09wMlRhZywgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogfQogCitB
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihWX0pJ
VE9wZXJhdGlvbl9FSlogb3BlcmF0aW9uLCBSZWdpc3RlcklEIHJlZ09wMVRhZywgUmVnaXN0ZXJJ
RCByZWdPcDFQYXlsb2FkLCBpbnQzMl90IG9wMikKK3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgcmVnT3AxUGF5bG9hZCwgcmVnT3AxVGFnLCBU
cnVzdGVkSW1tMzIob3AyKSk7CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uKTsKK30KKworQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OmNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpaSiBvcGVyYXRpb24sIFJlZ2lzdGVy
SUQgcmVnT3AxVGFnLCBSZWdpc3RlcklEIHJlZ09wMVBheWxvYWQsIGludDMyX3Qgb3AyLCBSZWdp
c3RlcklEIHJlZ09wM1RhZywgUmVnaXN0ZXJJRCByZWdPcDNQYXlsb2FkKQoreworICAgIHNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyByZWdPcDFQYXlsb2Fk
LCByZWdPcDFUYWcsIFRydXN0ZWRJbW0zMihvcDIpLCByZWdPcDNQYXlsb2FkLCByZWdPcDNUYWcp
OworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Cit9
CiAjdW5kZWYgRUFCSV8zMkJJVF9EVU1NWV9BUkcKICN1bmRlZiBTSDRfMzJCSVRfRFVNTVlfQVJH
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAJKHJldmlzaW9uIDE1NzQzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTI5LDE0ICs5MjksMTMgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbmV4dF9wbmFtZShJbnN0cnVjdGlvbgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXNoX3dpdGhfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBK
SVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcHVzaF93aXRoX3Njb3BlKTsKLSAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAg
ICBzdHViQ2FsbC5jYWxsKCk7CisgICAgZW1pdExvYWQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1c2hX
aXRoU2NvcGUsIHJlZ1QxLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3BvcF9zY29w
ZShJbnN0cnVjdGlvbiopCiB7Ci0gICAgSklUU3R1YkNhbGwodGhpcywgY3RpX29wX3BvcF9zY29w
ZSkuY2FsbCgpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUG9wU2NvcGUpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTk2OCwxMSArOTY3LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RvX251bWJlcihJ
bnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXNoX25hbWVfc2NvcGUoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBj
dGlfb3BfcHVzaF9uYW1lX3Njb3BlKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVk
SW1tUHRyKCZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSkpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOworICAg
IGVtaXRMb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QxLCByZWdUMCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXNoTmFtZVNjb3BlLCAmbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIHJlZ1QxLCByZWdU
MCwgY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDQ3LDEyICsx
MDQzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhJbnN0cnVjdAogCiB2b2lk
IEpJVDo6ZW1pdF9vcF90aHJvd19zdGF0aWNfZXJyb3IoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICB1bnNpZ25lZCBtZXNzYWdlID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKLQotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF90aHJv
d19zdGF0aWNfZXJyb3IpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChtZXNzYWdlKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZElt
bTMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKLSAgICBzdHViQ2FsbC5jYWxs
KCk7CisgICAgZW1pdExvYWQobV9jb2RlQmxvY2stPmdldENvbnN0YW50KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpLCByZWdUMSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVGhyb3dTdGF0aWNFcnJvciwgcmVnVDEsIHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNjEsOSArMTA1Myw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2RlYnVnKEluc3RydWN0aW9uKiBjdXIKICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3Ry
dWN0aW9uKTsKICAgICBicmVha3BvaW50KCk7CiAjZWxzZQotICAgIEpJVFN0dWJDYWxsIHN0dWJD
YWxsKHRoaXMsIGN0aV9vcF9kZWJ1Zyk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKTsKICNlbmRpZgogfQogCkBAIC0xMTg1LDE2ICsxMTc1LDE0IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF90b190aGlzKEluc3RydWN0aW8KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJv
ZmlsZV93aWxsX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBK
SVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcHJvZmlsZV93aWxsX2NhbGwpOwotICAg
IHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwot
ICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBlbWl0TG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kLCByZWdUMSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHJv
ZmlsZVdpbGxDYWxsLCByZWdUMSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9m
aWxlX2RpZF9jYWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Byb2ZpbGVfZGlkX2NhbGwpOwotICAgIHN0
dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAg
IHN0dWJDYWxsLmNhbGwoKTsKKyAgICBlbWl0TG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLCByZWdUMSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHJvZmls
ZVdpbGxDYWxsLCByZWdUMSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJn
dW1lbnRzX2xlbmd0aChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxNTc0MzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDgsOSArMjQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGVhcl9vZmZfYWN0aXZhdGlv
bihJbgogewogICAgIGludCBhY3RpdmF0aW9uID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKICAgICBKdW1wIGFjdGl2YXRpb25Ob3RDcmVhdGVkID0gYnJhbmNoVGVzdDY0KFplcm8s
IGFkZHJlc3NGb3IoYWN0aXZhdGlvbikpOwotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMs
IGN0aV9vcF90ZWFyX29mZl9hY3RpdmF0aW9uKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChh
Y3RpdmF0aW9uLCByZWdUMik7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYWN0aXZhdGlvbiwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVGVhck9mZkFjdGl2YXRpb24sIHJlZ1QwKTsKICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZC5s
aW5rKHRoaXMpOwogfQogCkBAIC0yNjAsMTAgKzI1OSw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Rl
YXJfb2ZmX2FyZ3VtZW50cyhJbnMKICAgICBpbnQgYWN0aXZhdGlvbiA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7CiAKICAgICBKdW1wIGFyZ3NOb3RDcmVhdGVkID0gYnJhbmNoVGVz
dDY0KFplcm8sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAo
dW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpKS5v
ZmZzZXQoKSkpKTsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfdGVhcl9v
ZmZfYXJndW1lbnRzKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudCh1bm1vZGlmaWVkQXJndW1l
bnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cykpLm9mZnNldCgpLCByZWdUMik7
Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoYWN0aXZhdGlvbiwgcmVnVDIpOwotICAgIHN0dWJD
YWxsLmNhbGwoKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHVubW9kaWZpZWRBcmd1bWVu
dHNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzKSkub2Zmc2V0KCksIHJlZ1QwKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFjdGl2YXRpb24sIHJlZ1QxKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblRlYXJPZmZBcmd1bWVudHMsIHJlZ1QwLCByZWdUMSk7CiAgICAg
YXJnc05vdENyZWF0ZWQubGluayh0aGlzKTsKIH0KIApAQCAtNjAwLDE0ICs1OTgsMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmV4dF9wbmFtZShJbnN0cnVjdGlvbgogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXNoX3dpdGhfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcHVzaF93aXRoX3Njb3BlKTsKLSAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBy
ZWdUMik7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDApOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHVzaFdpdGhTY29wZSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wb3Bfc2NvcGUoSW5zdHJ1Y3Rpb24qKQogewotICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9v
cF9wb3Bfc2NvcGUpLmNhbGwoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblBvcFNjb3Bl
KTsKIH0KIAogdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZSB0eXBlKQpAQCAtNjYzLDExICs2NjAs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklU
OjplbWl0X29wX3B1c2hfbmFtZV9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXNoX25hbWVfc2Nv
cGUpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoJm1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSk7Ci0gICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDIp
OwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKSk7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDApOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHVzaE5hbWVTY29wZSwgJm1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCByZWdUMCwgY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MzUsMTMgKzcyOSw4IEBAIHZvaWQg
SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
dGhyb3dfc3RhdGljX2Vycm9yKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Rocm93X3N0YXRpY19lcnJvcik7
Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCkuaXNOdW1iZXIoKSkKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKSk7Ci0gICAgZWxzZQotICAgICAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChJbW02NChKU1ZhbHVlOjplbmNvZGUobV9jb2RlQmxvY2stPmdldENvbnN0
YW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSkpOwotICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7
Ci0gICAgc3R1YkNhbGwuY2FsbCgpOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCkpKSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dTdGF0aWNF
cnJvciwgcmVnVDAsIGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWJ1ZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NzUwLDkgKzczOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKEluc3RydWN0aW9uKiBjdXIK
ICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKICAgICBicmVha3BvaW50KCk7
CiAjZWxzZQotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9kZWJ1Zyk7Ci0g
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpKTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25EZWJ1ZywgY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAjZW5kaWYK
IH0KIApAQCAtOTI1LDE2ICs5MTIsMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NyZWF0ZV90
aGlzKEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3dpbGxfY2FsbChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRo
aXMsIGN0aV9vcF9wcm9maWxlX3dpbGxfY2FsbCk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDEpOwotICAgIHN0dWJDYWxsLmNh
bGwoKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblByb2ZpbGVXaWxs
Q2FsbCwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2RpZF9jYWxsKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgY3RpX29wX3Byb2ZpbGVfZGlkX2NhbGwpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdHViQ2Fs
bC5jYWxsKCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Qcm9maWxl
RGlkQ2FsbCwgcmVnVDApOwogfQogCiAKQEAgLTExNzQsMTAgKzExNTksMTEgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2xvb3BfaGludChJbnN0cnVjdAogICAgIGlmIChjYW5CZU9wdGltaXplZCgp
ICYmIE9wdGlvbnM6OmVuYWJsZU9TUkVudHJ5SW5Mb29wcygpKSB7CiAgICAgICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsKICAgICAgICAgCi0gICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMs
IGN0aV9vcHRpbWl6ZSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0z
MihtX2J5dGVjb2RlT2Zmc2V0KSk7Ci0gICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICAgICAg
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsIG1fYnl0ZWNvZGVPZmZz
ZXQpOworICAgICAgICBKdW1wIG5vT3B0aW1pemVkRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8s
IHJldHVyblZhbHVlUmVnaXN0ZXIpOworICAgICAgICBqdW1wKHJldHVyblZhbHVlUmVnaXN0ZXIp
OworICAgICAgICBub09wdGltaXplZEVudHJ5LmxpbmsodGhpcyk7CisKICAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2xvb3BfaGludCkpOwogICAgIH0K
ICNlbmRpZgpAQCAtMTE4NSw5ICsxMTcxLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3Bf
aGludChJbnN0cnVjdAogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBvZiB0aGUgd2F0Y2hkb2cg
dGltZXIgY2hlY2s6CiAgICAgaWYgKG1fdm0tPndhdGNoZG9nLmlzRW5hYmxlZCgpKSB7CiAgICAg
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLQotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0
aGlzLCBjdGlfaGFuZGxlX3dhdGNoZG9nX3RpbWVyKTsKLSAgICAgICAgc3R1YkNhbGwuY2FsbCgp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVdhdGNoZG9nVGltZXIpOwog
CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9sb29w
X2hpbnQpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1NzQzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxOSBAQAog
I2luY2x1ZGUgIkFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKKyNpbmNsdWRlICJERkdDb21waWxhdGlvbk1vZGUu
aCIKKyNpbmNsdWRlICJERkdEcml2ZXIuaCIKKyNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgorI2lu
Y2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJHZXR0
ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJIb3N0Q2FsbFJldHVyblZhbHVlLmgiCiAjaW5jbHVkZSAi
SklUT3BlcmF0aW9uV3JhcHBlcnMuaCIKKyNpbmNsdWRlICJKSVRUb0RGR0RlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjay5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCisj
aW5jbHVkZSAiSlNOYW1lU2NvcGUuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
LmgiCisjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCkBAIC03
OTYsNiArODAzLDM3MiBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShSZWdFeHBPYmplY3Q6OmNyZWF0ZSh2bSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnZXhwKSk7CiB9
CiAKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYW5kbGVXYXRjaGRvZ1RpbWVyKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKworICAgIGlmIChVTkxJS0VMWSh2bS53YXRj
aGRvZy5kaWRGaXJlKGV4ZWMpKSkKKyAgICAgICAgdm0udGhyb3dFeGNlcHRpb24oZXhlYywgY3Jl
YXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbigmdm0pKTsKK30KKwordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblRocm93U3RhdGljRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIGludDMyX3QgcmVmZXJlbmNlRXJyb3JGbGFnKQoreworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOworCisgICAgU3RyaW5nIG1lc3NhZ2UgPSBlcnJvckRlc2NyaXB0aW9uRm9yVmFs
dWUoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpLT52YWx1ZShleGVjKTsKKyAg
ICBpZiAocmVmZXJlbmNlRXJyb3JGbGFnKQorICAgICAgICB2bS50aHJvd0V4Y2VwdGlvbihleGVj
LCBjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCBtZXNzYWdlKSk7CisgICAgZWxzZQorICAgICAg
ICB2bS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgbWVzc2FnZSkp
OworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVidWcoRXhlY1N0YXRlKiBleGVj
LCBpbnQzMl90IGRlYnVnSG9va0lEKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAgdm0uaW50ZXJw
cmV0ZXItPmRlYnVnKGV4ZWMsIHN0YXRpY19jYXN0PERlYnVnSG9va0lEPihkZWJ1Z0hvb2tJRCkp
OworfQorCisjaWYgRU5BQkxFKERGR19KSVQpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBieXRlY29kZUluZGV4KQoreworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOworCisgICAgLy8gRGVmZXIgR0Mgc28gdGhhdCBpdCBkb2Vzbid0IHJ1biBiZXR3
ZWVuIHdoZW4gd2UgZW50ZXIgaW50byB0aGlzIHNsb3cgcGF0aCBhbmQKKyAgICAvLyB3aGVuIHdl
IGZpZ3VyZSBvdXQgdGhlIHN0YXRlIG9mIG91ciBjb2RlIGJsb2NrLiBUaGlzIHByZXZlbnRzIGEg
bnVtYmVyIG9mCisgICAgLy8gYXdrd2FyZCByZWVudHJhbmN5IHNjZW5hcmlvcywgaW5jbHVkaW5n
OgorICAgIC8vCisgICAgLy8gLSBUaGUgb3B0aW1pemVkIHZlcnNpb24gb2Ygb3VyIGNvZGUgYmxv
Y2sgYmVpbmcgamV0dGlzb25lZCBieSBHQyByaWdodCBhZnRlcgorICAgIC8vICAgd2UgY29uY2x1
ZGVkIHRoYXQgd2Ugd2FudGVkIHRvIHVzZSBpdC4KKyAgICAvLworICAgIC8vIC0gQW4gb3B0aW1p
emVkIHZlcnNpb24gb2Ygb3VyIGNvZGUgYmxvY2sgYmVpbmcgaW5zdGFsbGVkIGp1c3QgYXMgd2Ug
ZGVjaWRlZAorICAgIC8vICAgdGhhdCBpdCB3YXNuJ3QgcmVhZHkgeWV0LgorICAgIC8vCisgICAg
Ly8gVGhpcyBzdGlsbCBsZWF2ZXMgdGhlIGZvbGxvd2luZzogYW55dGltZSB3ZSByZXR1cm4gZnJv
bSBjdGlfb3B0aW1pemUsIHdlIG1heQorICAgIC8vIEdDLCBhbmQgdGhlIEdDIG1heSBlaXRoZXIg
amV0dGlzb24gdGhlIG9wdGltaXplZCB2ZXJzaW9uIG9mIG91ciBjb2RlIGJsb2NrLAorICAgIC8v
IG9yIGl0IG1heSBpbnN0YWxsIHRoZSBvcHRpbWl6ZWQgdmVyc2lvbiBvZiBvdXIgY29kZSBibG9j
ayBldmVuIHRob3VnaCB3ZQorICAgIC8vIGNvbmNsdWRlZCB0aGF0IGl0IHdhc24ndCByZWFkeSB5
ZXQuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgamV0dGlzb25pbmcgd29uJ3QgaGFwcGVuIGlm
IHdlIGFscmVhZHkgaW5pdGlhdGVkIE9TUiwgYmVjYXVzZSBpbgorICAgIC8vIHRoYXQgY2FzZSB3
ZSB3b3VsZCBoYXZlIGFscmVhZHkgcGxhbnRlZCB0aGUgb3B0aW1pemVkIGNvZGUgYmxvY2sgaW50
byB0aGUgSlMKKyAgICAvLyBzdGFjay4KKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Cisg
ICAgCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKworICAg
IGlmIChieXRlY29kZUluZGV4KSB7CisgICAgICAgIC8vIElmIHdlJ3JlIGF0dGVtcHRpbmcgdG8g
T1NSIGZyb20gYSBsb29wLCBhc3N1bWUgdGhhdCB0aGlzIHNob3VsZCBiZQorICAgICAgICAvLyBz
ZXBhcmF0ZWx5IG9wdGltaXplZC4KKyAgICAgICAgY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0Jl
SW5saW5lZCA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkp
IHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQg
b3B0aW1pemUgd2l0aCBieXRlY29kZUluZGV4ID0gIiwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAg
ICAgICIsIGV4ZWN1dGVDb3VudGVyID0gIiwgY29kZUJsb2NrLT5qaXRFeGVjdXRlQ291bnRlcigp
LAorICAgICAgICAgICAgIiwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gIiwgY29kZUJsb2Nr
LT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLAorICAgICAgICAgICAgIiwgZXhpdENvdW50
ZXIgPSAiKTsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQo
KSkKKyAgICAgICAgICAgIGRhdGFMb2coY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5vc3JFeGl0
Q291bnRlcigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGF0YUxvZygiTi9BIik7Cisg
ICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgfQorCisgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNr
SWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkpIHsKKyAgICAgICAgY29kZUJsb2NrLT51
cGRhdGVBbGxQcmVkaWN0aW9ucygpOworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KQorICAgICAgICAgICAgZGF0YUxvZygiQ2hvb3Npbmcgbm90IHRvIG9wdGltaXplICIsICpjb2Rl
QmxvY2ssICIgeWV0LCBiZWNhdXNlIHRoZSB0aHJlc2hvbGQgaGFzbid0IGJlZW4gcmVhY2hlZC5c
biIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgaWYgKGNvZGVCbG9jay0+
bV9zaG91bGRBbHdheXNCZUlubGluZWQpIHsKKyAgICAgICAgY29kZUJsb2NrLT51cGRhdGVBbGxQ
cmVkaWN0aW9ucygpOworICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsK
KyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2co
IkNob29zaW5nIG5vdCB0byBvcHRpbWl6ZSAiLCAqY29kZUJsb2NrLCAiIHlldCwgYmVjYXVzZSBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9PSB0cnVlLlxuIik7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIC8vIFdlIGNhbm5vdCBiZSBpbiB0aGUgcHJvY2VzcyBvZiBhc3luY2hyb25v
dXMgY29tcGlsYXRpb24gYW5kIGFsc28gaGF2ZSBhbiBvcHRpbWl6ZWQKKyAgICAvLyByZXBsYWNl
bWVudC4KKyAgICBBU1NFUlQoCisgICAgICAgICF2bS53b3JrbGlzdAorICAgICAgICB8fCAhKHZt
LndvcmtsaXN0LT5jb21waWxhdGlvblN0YXRlKERGRzo6Q29tcGlsYXRpb25LZXkoY29kZUJsb2Nr
LCBERkc6OkRGR01vZGUpKSAhPSBERkc6OldvcmtsaXN0OjpOb3RLbm93bgorICAgICAgICAmJiBj
b2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpKTsKKworICAgIERGRzo6V29ya2xp
c3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGU7CisgICAgaWYgKHZtLndvcmtsaXN0KSB7CisgICAgICAg
IC8vIFRoZSBjYWxsIHRvIERGRzo6V29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZN
KCkgd2lsbCBjb21wbGV0ZSBhbGwgcmVhZHkKKyAgICAgICAgLy8gKGkuZS4gY29tcGlsZWQpIGNv
ZGUgYmxvY2tzLiBCdXQgaWYgaXQgY29tcGxldGVzIG91cnMsIHdlIGFsc28gbmVlZCB0byBrbm93
CisgICAgICAgIC8vIHdoYXQgdGhlIHJlc3VsdCB3YXMgc28gdGhhdCB3ZSBkb24ndCBwbG93IGFo
ZWFkIGFuZCBhdHRlbXB0IE9TUiBvciBpbW1lZGlhdGUKKyAgICAgICAgLy8gcmVvcHRpbWl6YXRp
b24uIFRoaXMgd2lsbCBoYXZlIGFscmVhZHkgYWxzbyBzZXQgdGhlIGFwcHJvcHJpYXRlIEpJVCBl
eGVjdXRpb24KKyAgICAgICAgLy8gY291bnQgdGhyZXNob2xkIGRlcGVuZGluZyBvbiB3aGF0IGhh
cHBlbmVkLCBzbyBpZiB0aGUgY29tcGlsYXRpb24gd2FzIGFueXRoaW5nCisgICAgICAgIC8vIGJ1
dCBzdWNjZXNzZnVsIHdlIGp1c3Qgd2FudCB0byByZXR1cm4gZWFybHkuIFNlZSB0aGUgY2FzZSBm
b3Igd29ya2xpc3RTdGF0ZSA9PQorICAgICAgICAvLyBERkc6OldvcmtsaXN0OjpDb21waWxlZCwg
YmVsb3cuCisgICAgICAgIAorICAgICAgICAvLyBOb3RlIHRoYXQgd2UgY291bGQgaGF2ZSBhbHRl
cm5hdGl2ZWx5IGp1c3QgY2FsbGVkIFdvcmtsaXN0Ojpjb21waWxhdGlvblN0YXRlKCkKKyAgICAg
ICAgLy8gaGVyZSwgYW5kIGlmIGl0IHJldHVybmVkIENvbXBpbGVkLCB3ZSBjb3VsZCBoYXZlIHRo
ZW4gY2FsbGVkCisgICAgICAgIC8vIGNvbXBsZXRlQW5kU2NoZWR1bGVPU1IoKSBiZWxvdy4gQnV0
IHRoYXQgd291bGQgaGF2ZSBtZWFudCB0aGF0IGl0IGNvdWxkIHRha2UKKyAgICAgICAgLy8gbG9u
Z2VyIGZvciBjb2RlIGJsb2NrcyB0byBiZSBjb21wbGV0ZWQ6IHRoZXkgd291bGQgb25seSBjb21w
bGV0ZSB3aGVuICp0aGVpcioKKyAgICAgICAgLy8gZXhlY3V0aW9uIGNvdW50IHRyaWdnZXIgZmly
ZWQ7IGJ1dCB0aGF0IGNvdWxkIHRha2UgYSB3aGlsZSBzaW5jZSB0aGUgZmlyaW5nIGlzCisgICAg
ICAgIC8vIHJhY3kuIEl0IGNvdWxkIGFsc28gbWVhbiB0aGF0IGNvZGUgYmxvY2tzIHRoYXQgbmV2
ZXIgcnVuIGFnYWluIGFmdGVyIGJlaW5nCisgICAgICAgIC8vIGNvbXBpbGVkIHdvdWxkIHNpdCBv
biB0aGUgd29ya2xpc3QgdW50aWwgbmV4dCBHQy4gVGhhdCdzIGZpbmUsIGJ1dCBpdCdzCisgICAg
ICAgIC8vIHByb2JhYmx5IGEgd2FzdGUgb2YgbWVtb3J5LiBPdXIgZ29hbCBoZXJlIGlzIHRvIGNv
bXBsZXRlIGNvZGUgYmxvY2tzIGFzIHNvb24gYXMKKyAgICAgICAgLy8gcG9zc2libGUgaW4gb3Jk
ZXIgdG8gbWluaW1pemUgdGhlIGNoYW5jZXMgb2YgdXMgZXhlY3V0aW5nIGJhc2VsaW5lIGNvZGUg
YWZ0ZXIKKyAgICAgICAgLy8gb3B0aW1pemVkIGNvZGUgaXMgYWxyZWFkeSBhdmFpbGFibGUuCisg
ICAgICAgIHdvcmtsaXN0U3RhdGUgPSB2bS53b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5z
Rm9yVk0oCisgICAgICAgICAgICB2bSwgREZHOjpDb21waWxhdGlvbktleShjb2RlQmxvY2ssIERG
Rzo6REZHTW9kZSkpOworICAgIH0gZWxzZQorICAgICAgICB3b3JrbGlzdFN0YXRlID0gREZHOjpX
b3JrbGlzdDo6Tm90S25vd247CisKKyAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBERkc6Oldvcmts
aXN0OjpDb21waWxpbmcpIHsKKyAgICAgICAgLy8gV2UgY2Fubm90IGJlIGluIHRoZSBwcm9jZXNz
IG9mIGFzeW5jaHJvbm91cyBjb21waWxhdGlvbiBhbmQgYWxzbyBoYXZlIGFuIG9wdGltaXplZAor
ICAgICAgICAvLyByZXBsYWNlbWVudC4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWNvZGVCbG9j
ay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSk7CisgICAgICAgIGNvZGVCbG9jay0+c2V0T3B0
aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uRGVm
ZXJyZWQpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAod29ya2xpc3RTdGF0
ZSA9PSBERkc6OldvcmtsaXN0OjpDb21waWxlZCkgeworICAgICAgICAvLyBJZiB3ZSBkb24ndCBo
YXZlIGFuIG9wdGltaXplZCByZXBsYWNlbWVudCBidXQgd2UgZGlkIGp1c3QgZ2V0IGNvbXBpbGVk
LCB0aGVuCisgICAgICAgIC8vIHRoZSBjb21waWxhdGlvbiBmYWlsZWQgb3Igd2FzIGludmFsaWRh
dGVkLCBpbiB3aGljaCBjYXNlIHRoZSBleGVjdXRpb24gY291bnQKKyAgICAgICAgLy8gdGhyZXNo
b2xkcyBoYXZlIGFscmVhZHkgYmVlbiBzZXQgYXBwcm9wcmlhdGVseSBieQorICAgICAgICAvLyBD
b2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3Vs
dCgpIGFuZCB3ZSBoYXZlCisgICAgICAgIC8vIG5vdGhpbmcgbGVmdCB0byBkby4KKyAgICAgICAg
aWYgKCFjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKyAgICAgICAgICAg
IGNvZGVCbG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKKyAgICAgICAgICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29kZSBibG9jayAi
LCAqY29kZUJsb2NrLCAiIHdhcyBjb21waWxlZCBidXQgaXQgZG9lc24ndCBoYXZlIGFuIG9wdGlt
aXplZCByZXBsYWNlbWVudC5cbiIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewor
ICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygi
Q29uc2lkZXJpbmcgT1NSICIsICpjb2RlQmxvY2ssICIgLT4gIiwgKmNvZGVCbG9jay0+cmVwbGFj
ZW1lbnQoKSwgIi5cbiIpOworICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIG9wdGltaXplZCByZXBs
YWNlbWVudCwgdGhlbiBpdCBtdXN0IGJlIHRoZSBjYXNlIHRoYXQgd2UgZW50ZXJlZAorICAgICAg
ICAvLyBjdGlfb3B0aW1pemUgZnJvbSBhIGxvb3AuIFRoYXQncyBiZWNhdXNlIGlmIHRoZXJlJ3Mg
YW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LAorICAgICAgICAvLyB0aGVuIGFsbCBjYWxscyB0byB0
aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVsaW5rZWQgdG8gdGhlIHJlcGxhY2VtZW50IGFuZCBzbwor
ICAgICAgICAvLyB0aGUgcHJvbG9ndWUgT1NSIHdpbGwgbmV2ZXIgZmlyZS4KKyAgICAgICAgCisg
ICAgICAgIC8vIFRoaXMgaXMgYW4gaW50ZXJlc3RpbmcgdGhyZXNob2xkIGNoZWNrLiBDb25zaWRl
ciB0aGF0IGEgZnVuY3Rpb24gT1NSIGV4aXRzCisgICAgICAgIC8vIGluIHRoZSBtaWRkbGUgb2Yg
YSBsb29wLCB3aGlsZSBoYXZpbmcgYSByZWxhdGl2ZWx5IGxvdyBleGl0IGNvdW50LiBUaGUgZXhp
dAorICAgICAgICAvLyB3aWxsIHJlc2V0IHRoZSBleGVjdXRpb24gY291bnRlciB0byBzb21lIHRh
cmdldCB0aHJlc2hvbGQsIG1lYW5pbmcgdGhhdCB0aGlzCisgICAgICAgIC8vIGNvZGUgd29uJ3Qg
YmUgcmVhY2hlZCB1bnRpbCB0aGF0IGxvb3AgaGVhdHMgdXAgZm9yID49MTAwMCBleGVjdXRpb25z
LiBCdXQgdGhlbgorICAgICAgICAvLyB3ZSBkbyBhIHNlY29uZCBjaGVjayBoZXJlLCB0byBzZWUg
aWYgd2Ugc2hvdWxkIGVpdGhlciByZW9wdGltaXplLCBvciBqdXN0CisgICAgICAgIC8vIGF0dGVt
cHQgT1NSIGVudHJ5LiBIZW5jZSBpdCBtaWdodCBldmVuIGJlIGNvcnJlY3QgZm9yCisgICAgICAg
IC8vIHNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpIHRvIGFsd2F5cyByZXR1cm4gdHJ1ZS4g
QnV0IHdlIG1ha2UgaXQgZG8gc29tZQorICAgICAgICAvLyBhZGRpdGlvbmFsIGNoZWNraW5nIGFu
eXdheSwgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgcmVjb21waWxhdGlvbiB0aHJhc2hpbmcuCisg
ICAgICAgIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNob3VsZFJlb3B0aW1pemVGcm9t
TG9vcE5vdygpKSB7CisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7Cisg
ICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIlRyaWdnZXJpbmcg
cmVvcHRpbWl6YXRpb24gb2YgIiwgKmNvZGVCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgIigi
LCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiKSAoaW4gbG9vcCkuXG4iKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZSgpOworICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWNvZGVCbG9j
ay0+c2hvdWxkT3B0aW1pemVOb3coKSkgeworICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAg
ICJEZWxheWluZyBvcHRpbWl6YXRpb24gZm9yICIsICpjb2RlQmxvY2ssCisgICAgICAgICAgICAg
ICAgICAgICIgYmVjYXVzZSBvZiBpbnN1ZmZpY2llbnQgcHJvZmlsaW5nLlxuIik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChP
cHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJUcmlnZ2VyaW5nIG9w
dGltaXplZCBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKKworICAgICAgICB1
bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlczsKKyAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXgpCisg
ICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IGNvZGVCbG9jay0+bV9udW1WYXJzOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7CisgICAgICAgIE9w
ZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCksIG51bVZhcnNXaXRoVmFsdWVzKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
dXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9
IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgaWYgKG9w
ZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpCisgICAgICAgICAgICAgICAgJiYgIVZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCkKKyAgICAgICAgICAgICAgICAmJiBjb2RlQmxvY2st
PmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlCisgICAgICAgICAgICAgICAgJiYgY29kZUJsb2Nr
LT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7CisgICAgICAgICAg
ICAgICAgLy8gVWdoLiBJZiB3ZSdyZSBpbiBhIGNvbnN0cnVjdG9yLCB0aGUgJ3RoaXMnIGFyZ3Vt
ZW50IG1heSBob2xkIGdhcmJhZ2UuIEl0IHdpbGwKKyAgICAgICAgICAgICAgICAvLyBhbHNvIG5l
dmVyIGJlIHVzZWQuIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgd2UgcHV0IGludG8gdGhlIHZhbHVl
IGZvciB0aGlzLAorICAgICAgICAgICAgICAgIC8vIGJ1dCBpdCBoYXMgdG8gYmUgYW4gYWN0dWFs
IHZhbHVlIHRoYXQgY2FuIGJlIGdyb2trZWQgYnkgc3Vic2VxdWVudCBERkcgcGFzc2VzLAorICAg
ICAgICAgICAgICAgIC8vIHNvIHdlIHNhbml0aXplIGl0IGhlcmUgYnkgdHVybmluZyBpdCBpbnRv
IFVuZGVmaW5lZC4KKyAgICAgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0ganNVbmRl
ZmluZWQoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG11c3RIYW5kbGVW
YWx1ZXNbaV0gPSBleGVjLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKKyAgICAgICAg
fQorCisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IERGRzo6Y29tcGlsZSgKKyAg
ICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIERGRzo6REZH
TW9kZSwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXMsIEpJVFRv
REZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoKSwKKyAgICAgICAgICAgIHZt
LmVuc3VyZVdvcmtsaXN0KCkpOworICAgICAgICAKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBDb21w
aWxhdGlvblN1Y2Nlc3NmdWwpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisg
ICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnJlcGxhY2VtZW50
KCk7CisgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChvcHRpbWl6ZWRDb2RlQmxv
Y2stPmppdFR5cGUoKSkpOworICAgIAorICAgIGlmICh2b2lkKiBhZGRyZXNzID0gREZHOjpwcmVw
YXJlT1NSRW50cnkoZXhlYywgb3B0aW1pemVkQ29kZUJsb2NrLCBieXRlY29kZUluZGV4KSkgewor
ICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgICAgICBkYXRhTG9n
KAorICAgICAgICAgICAgICAgICJQZXJmb3JtaW5nIE9TUiAiLCAqY29kZUJsb2NrLCAiIC0+ICIs
ICpvcHRpbWl6ZWRDb2RlQmxvY2ssICIsIGFkZHJlc3MgIiwKKyAgICAgICAgICAgICAgICBSYXdQ
b2ludGVyKE9VUl9SRVRVUk5fQUREUkVTUyksICIgLT4gIiwgUmF3UG9pbnRlcihhZGRyZXNzKSwg
Ii5cbiIpOworICAgICAgICB9CisKKyAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZVNvb24oKTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihhZGRyZXNzKTsKKyAgICB9CisKKyAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAg
ICAgICAiT3B0aW1pemluZyAiLCAqY29kZUJsb2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJlcGxh
Y2VtZW50KCksCisgICAgICAgICAgICAiIHN1Y2NlZWRlZCwgT1NSIGZhaWxlZCwgYWZ0ZXIgYSBk
ZWxheSBvZiAiLAorICAgICAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6YXRpb25EZWxheUNvdW50
ZXIoKSwgIi5cbiIpOworICAgIH0KKworICAgIC8vIENvdW50IHRoZSBPU1IgZmFpbHVyZSBhcyBh
IHNwZWN1bGF0aW9uIGZhaWx1cmUuIElmIHRoaXMgaGFwcGVucyBhIGxvdCwgdGhlbgorICAgIC8v
IHJlb3B0aW1pemUuCisgICAgb3B0aW1pemVkQ29kZUJsb2NrLT5jb3VudE9TUkV4aXQoKTsKKwor
ICAgIC8vIFdlIGFyZSBhIGxvdCBtb3JlIGNvbnNlcnZhdGl2ZSBhYm91dCB0cmlnZ2VyaW5nIHJl
b3B0aW1pemF0aW9uIGFmdGVyIE9TUiBmYWlsdXJlIHRoYW4KKyAgICAvLyBiZWZvcmUgaXQuIElm
IHdlIGVudGVyIHRoZSBvcHRpbWl6ZV9mcm9tX2xvb3AgdHJpZ2dlciB3aXRoIGEgYnVja2V0IGZ1
bGwgb2YgZmFpbAorICAgIC8vIGFscmVhZHksIHRoZW4gd2UgcmVhbGx5IHdvdWxkIGxpa2UgdG8g
cmVvcHRpbWl6ZSBpbW1lZGlhdGVseS4gQnV0IHRoaXMgY2FzZSBjb3ZlcnMKKyAgICAvLyBzb21l
dGhpbmcgZWxzZTogdGhlcmUgd2VyZW4ndCBtYW55IChvciBhbnkpIHNwZWN1bGF0aW9uIGZhaWx1
cmVzIGJlZm9yZSwgYnV0IHdlIGp1c3QKKyAgICAvLyBmYWlsZWQgdG8gZW50ZXIgdGhlIHNwZWN1
bGF0aXZlIGNvZGUgYmVjYXVzZSBzb21lIHZhcmlhYmxlIGhhZCB0aGUgd3JvbmcgdmFsdWUgb3IK
KyAgICAvLyBiZWNhdXNlIHRoZSBPU1IgY29kZSBkZWNpZGVkIGZvciBhbnkgc3B1cmlvdXMgcmVh
c29uIHRoYXQgaXQgZGlkIG5vdCB3YW50IHRvIE9TUgorICAgIC8vIHJpZ2h0IG5vdy4gU28sIHdl
IG9ubHkgdHJpZ2dlciByZW9wdGltaXphdGlvbiBvbmx5IHVwb24gdGhlIG1vcmUgY29uc2VydmF0
aXZlIChub24tbG9vcCkKKyAgICAvLyByZW9wdGltaXphdGlvbiB0cmlnZ2VyLgorICAgIGlmIChv
cHRpbWl6ZWRDb2RlQmxvY2stPnNob3VsZFJlb3B0aW1pemVOb3coKSkgeworICAgICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAg
ICAgICAgICJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgLT4g
IiwKKyAgICAgICAgICAgICAgICAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiIChhZnRlciBP
U1IgZmFpbCkuXG4iKTsKKyAgICAgICAgfQorICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUo
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gT1NSIGZhaWxlZCB0aGlzIHRp
bWUsIGJ1dCBpdCBtaWdodCBzdWNjZWVkIG5leHQgdGltZSEgTGV0IHRoZSBjb2RlIHJ1biBhIGJp
dAorICAgIC8vIGxvbmdlciBhbmQgdGhlbiB0cnkgYWdhaW4uCisgICAgY29kZUJsb2NrLT5vcHRp
bWl6ZUFmdGVyV2FybVVwKCk7CisgICAgCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SW5kZXgoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQXJyYXlWYWx1ZSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAgSlNWYWx1ZSBhcnJheVZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcnJheVZhbHVlKTsKKyAgICBBU1NFUlQoaXNK
U0FycmF5KGFycmF5VmFsdWUpKTsKKyAgICBhc0FycmF5KGFycmF5VmFsdWUpLT5wdXREaXJlY3RJ
bmRleChleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworfQorCisj
aWYgVVNFKEpTVkFMVUU2NCkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRHZXR0ZXJT
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT2JqZWN0VmFsdWUs
IElkZW50aWZpZXIqIGlkZW50aWZpZXIsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRHZXR0ZXJWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFNldHRlclZhbHVlKQoreworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
CisgICAgQVNTRVJUKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT2JqZWN0VmFsdWUpLmlzT2JqZWN0
KCkpOworICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gYXNPYmplY3QoSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRPYmplY3RWYWx1ZSkpOworCisgICAgR2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9IEdldHRl
clNldHRlcjo6Y3JlYXRlKHZtKTsKKworICAgIEpTVmFsdWUgZ2V0dGVyID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRHZXR0ZXJWYWx1ZSk7CisgICAgSlNWYWx1ZSBzZXR0ZXIgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFNldHRlclZhbHVlKTsKKyAgICBBU1NFUlQoZ2V0dGVyLmlzT2JqZWN0KCkg
fHwgZ2V0dGVyLmlzVW5kZWZpbmVkKCkpOworICAgIEFTU0VSVChzZXR0ZXIuaXNPYmplY3QoKSB8
fCBzZXR0ZXIuaXNVbmRlZmluZWQoKSk7CisgICAgQVNTRVJUKGdldHRlci5pc09iamVjdCgpIHx8
IHNldHRlci5pc09iamVjdCgpKTsKKworICAgIGlmICghZ2V0dGVyLmlzVW5kZWZpbmVkKCkpCisg
ICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIodm0sIGFzT2JqZWN0KGdldHRlcikpOworICAgIGlm
ICghc2V0dGVyLmlzVW5kZWZpbmVkKCkpCisgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIodm0s
IGFzT2JqZWN0KHNldHRlcikpOworICAgIGJhc2VPYmotPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMs
ICppZGVudGlmaWVyLCBhY2Nlc3NvciwgQWNjZXNzb3IpOworfQorI2Vsc2UKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IG9iamVjdCwgSWRlbnRpZmllciogaWRlbnRpZmllciwgSlNDZWxsKiBnZXR0ZXIsIEpTQ2VsbCog
c2V0dGVyKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAgQVNTRVJUKG9iamVjdCAmJiBvYmplY3Qt
PmlzT2JqZWN0KCkpOworICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gb2JqZWN0LT5nZXRPYmplY3Qo
KTsKKworICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2
bSk7CisKKyAgICBBU1NFUlQoIWdldHRlciB8fCBnZXR0ZXItPmlzT2JqZWN0KCkpOworICAgIEFT
U0VSVCghc2V0dGVyIHx8IHNldHRlci0+aXNPYmplY3QoKSk7CisgICAgQVNTRVJUKGdldHRlciB8
fCBzZXR0ZXIpOworCisgICAgaWYgKGdldHRlcikKKyAgICAgICAgYWNjZXNzb3ItPnNldEdldHRl
cih2bSwgZ2V0dGVyLT5nZXRPYmplY3QoKSk7CisgICAgaWYgKHNldHRlcikKKyAgICAgICAgYWNj
ZXNzb3ItPnNldFNldHRlcih2bSwgc2V0dGVyLT5nZXRPYmplY3QoKSk7CisgICAgYmFzZU9iai0+
cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgKmlkZW50aWZpZXIsIGFjY2Vzc29yLCBBY2Nlc3Nvcik7
Cit9CisjZW5kaWYKKwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1c2hOYW1lU2NvcGUo
RXhlY1N0YXRlKiBleGVjLCBJZGVudGlmaWVyKiBpZGVudGlmaWVyLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIGludDMyX3QgYXR0aWJ1dGVzKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAg
SlNOYW1lU2NvcGUqIHNjb3BlID0gSlNOYW1lU2NvcGU6OmNyZWF0ZShleGVjLCAqaWRlbnRpZmll
ciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIGF0dGlidXRlcyk7CisKKyAgICBleGVj
LT5zZXRTY29wZShzY29wZSk7Cit9CisKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXNo
V2l0aFNjb3BlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworCisgICAgSlNPYmplY3QqIG8gPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKS50b09iamVjdChleGVjKTsKKyAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGV4ZWMtPnNldFNjb3BlKEpTV2l0aFNjb3BlOjpjcmVhdGUoZXhl
YywgbykpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUG9wU2NvcGUoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAgZXhlYy0+c2V0U2NvcGUoZXhlYy0+
c2NvcGUoKS0+bmV4dCgpKTsKK30KKwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblByb2Zp
bGVEaWRDYWxsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworCisgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHZt
LmVuYWJsZWRQcm9maWxlcigpKQorICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShleGVjLCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK3ZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Qcm9maWxlV2lsbENhbGwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBpZiAoTGVnYWN5UHJvZmlsZXIq
IHByb2ZpbGVyID0gdm0uZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgICAgIHByb2ZpbGVyLT53aWxs
RXhlY3V0ZShleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2hlY2tIYXNJbnN0YW5jZShFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2VWYWwpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkBAIC04MzcsNiArMTIx
MCwyNSBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQXJnCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZBY3Rp
dmF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBhY3RpdmF0aW9uQ2VsbCkKK3sKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKworICAgIEFTU0VSVChleGVjLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVD
aGFpbigpKTsKKyAgICBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4oYWN0aXZhdGlvbkNlbGwpLT50ZWFy
T2ZmKHZtKTsKK30KKwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZBcmd1bWVu
dHMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGFyZ3VtZW50c0NlbGwsIEpTQ2VsbCogYWN0aXZh
dGlvbkNlbGwpCit7CisgICAgQVNTRVJUKGV4ZWMtPmNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRz
KCkpOworICAgIGlmIChhY3RpdmF0aW9uQ2VsbCkgeworICAgICAgICBqc0Nhc3Q8QXJndW1lbnRz
Kj4oYXJndW1lbnRzQ2VsbCktPmRpZFRlYXJPZmZBY3RpdmF0aW9uKGV4ZWMsIGpzQ2FzdDxKU0Fj
dGl2YXRpb24qPihhY3RpdmF0aW9uQ2VsbCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGpzQ2FzdDxBcmd1bWVudHMqPihhcmd1bWVudHNDZWxsKS0+dGVhck9mZihleGVjKTsKK30KKwog
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWxldGVCeUlkKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50aWZpZXIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNTc0MzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
NTgsNiArNTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBJZGM6IGNvbnN0IElkZW50aWZpZXIq
CiAgICAgSjogRW5jb2RlZEpTVmFsdWUKICAgICBKY3A6IGNvbnN0IEpTVmFsdWUqCisgICAgSnNh
OiBKU0FjdGl2YXRpb24qCiAgICAgSnNzOiBKU1N0cmluZyoKICAgICBPOiBKU09iamVjdCoKICAg
ICBQOiBwb2ludGVyIChjaGFyKikKQEAgLTExOCwyMCArMTE5LDI5IEBAIHR5cGVkZWYgc2l6ZV90
IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXIKIHR5cGVkZWYgc2l6ZV90IEpJVF9PUEVSQVRJT04g
KCpTX0pJVE9wZXJhdGlvbl9FT0pzcykoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1N0cmluZyop
OwogdHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0opKEVuY29k
ZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25f
RSkoRXhlY1N0YXRlKik7Ci10eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0
aW9uX0VPWkQpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCwgZG91YmxlKTsKLXR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRU9aSikoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHZvaWQgSklUX09Q
RVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VDYikoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKik7CiB0
eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUq
LCBKU0NlbGwqKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25f
RUNiKShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9O
ICgqVl9KSVRPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKIHR5
cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNJY2YpKEV4ZWNTdGF0
ZSosIEpTQ2VsbCosIElubGluZUNhbGxGcmFtZSopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJ
T04gKCpWX0pJVE9wZXJhdGlvbl9FQ0lDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSWRlbnRpZmll
ciosIEpTQ2VsbCosIEpTQ2VsbCopOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJ
VE9wZXJhdGlvbl9FQ0NJY2YpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCosIElubGluZUNh
bGxGcmFtZSopOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9F
Q0pKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUp
OwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQ1opKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIGludDMyX3QpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpW
X0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwordHlwZWRl
ZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FSWRKWikoRXhlY1N0YXRlKiwg
SWRlbnRpZmllciosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKK3R5cGVkZWYgdm9pZCBKSVRf
T1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
KTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUpDSSkoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCosIFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYg
dm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUpJZEpKKShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgSWRlbnRpZmllciosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VKSkkpKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopOwog
dHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FSkpKKShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKIHR5
cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUpQUCkoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIHZvaWQqLCB2b2lkKik7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJB
VElPTiAoKlZfSklUT3BlcmF0aW9uX0VKWkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBp
bnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZf
SklUT3BlcmF0aW9uX0VKWikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOwor
dHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FT1pEKShFeGVjU3Rh
dGUqLCBKU09iamVjdCosIGludDMyX3QsIGRvdWJsZSk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJB
VElPTiAoKlZfSklUT3BlcmF0aW9uX0VPWkopKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJf
dCwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9w
ZXJhdGlvbl9FUFpKKShFeGVjU3RhdGUqLCB2b2lkKiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUp
OwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9XKShXYXRjaHBv
aW50U2V0Kik7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0Va
KShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBf
SklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9O
ICgqUF9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogdHlwZWRlZiBjaGFy
KiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRUpTKShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSwgc2l6ZV90KTsKQEAgLTE0Niw2ICsxNTYsNyBAQCB0eXBlZGVmIGNoYXIqIEpJVF9P
UEVSQVRJT04gKCpQX0pJVE9wZXJhCiB0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJ
VE9wZXJhdGlvbl9FU3RQUykoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCk7
CiB0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FU3RTUykoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKiwgc2l6ZV90LCBzaXplX3QpOwogdHlwZWRlZiBjaGFyKiBKSVRf
T1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRVN0WikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwg
aW50MzJfdCk7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9F
WikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQ
X0pJVE9wZXJhdGlvbl9FWlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIGludDMyX3QpOwogdHlwZWRl
ZiBTdHJpbmdJbXBsKiBKSVRfT1BFUkFUSU9OICgqSV9KSVRPcGVyYXRpb25fRUpzcykoRXhlY1N0
YXRlKiwgSlNTdHJpbmcqKTsKIHR5cGVkZWYgSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gKCpKc3Nf
SklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKQEAgLTIyMiwxMCArMjMzLDEw
IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXgKIGNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5B
TDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdChFeGVjU3Rh
dGUqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25z
dHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotc2l6ZV90IEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwotc2l6ZV90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1zaXpl
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5U
RVJOQUw7Ci1zaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDIpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBh
cmVMZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lO
VEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK3Np
emVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIHNpemVfdCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkNvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlKSBXVEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
RXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJO
QUw7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTI0MCwxMCArMjUxLDI4IEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmUKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFM
OwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld1JlZ2V4cChFeGVjU3RhdGUqLCB2b2lkKikgV1RGX0lOVEVSTkFMOwotCit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFuZGxlV2F0Y2hkb2dUaW1lcihFeGVjU3RhdGUqKSBX
VEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dTdGF0aWNFcnJv
cihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlYnVnKEV4ZWNTdGF0ZSosIGludDMyX3QpIFdURl9J
TlRFUk5BTDsKKyNpZiBFTkFCTEUoREZHX0pJVCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uT3B0aW1pemUoRXhlY1N0YXRlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworI2VuZGlmCit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJbmRleChFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOworI2lmIFVTRShKU1ZBTFVFNjQpCit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlLCBJZGVudGlmaWVyKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KSBXVEZfSU5URVJOQUw7CisjZWxzZQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEdl
dHRlclNldHRlcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBJZGVudGlmaWVyKiwgSlNDZWxsKiwgSlND
ZWxsKikgV1RGX0lOVEVSTkFMOworI2VuZGlmCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHVzaE5hbWVTY29wZShFeGVjU3RhdGUqLCBJZGVudGlmaWVyKiwgRW5jb2RlZEpTVmFsdWUsIGlu
dDMyX3QpIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXNoV2l0
aFNjb3BlKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUG9wU2NvcGUoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblByb2ZpbGVEaWRDYWxsKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHJvZmlsZVdpbGxDYWxsKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7
CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNoZWNrSGFzSW5zdGFuY2Uo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGJhc2VWYWwpIFdURl9J
TlRFUk5BTDsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9u
KEV4ZWNTdGF0ZSosIGludDMyX3Qgb2Zmc2V0KSBXVEZfSU5URVJOQUw7CiBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQXJndW1lbnRzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5B
TDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmQWN0aXZhdGlvbihFeGVjU3Rh
dGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VGVhck9mZkFyZ3VtZW50cyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJO
QUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlbGV0ZUJ5SWQoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgYmFzZSwgY29uc3QgSWRlbnRpZmllciopIFdURl9JTlRF
Uk5BTDsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRQTmFtZXMoRXhlY1N0YXRl
KiwgSlNPYmplY3QqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkluc3RhbmNlT2YoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIHByb3RvKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDE1NzQz
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEyICs1NywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfaW5kZXgoSW5zdHJ1Y3RpCiAgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwogICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7CiAgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKLSAgICAKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcHV0X2J5X2lu
ZGV4KTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChiYXNlKTsKLSAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChUcnVzdGVkSW1tMzIocHJvcGVydHkpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dCh2YWx1ZSk7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOworCisgICAgZW1pdExvYWQoYmFzZSwgcmVn
VDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dEJ5SW5kZXgsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJl
Z1QzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MSwxMyArNjksMTEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXIoSW5zdAogICAgIGludCBwcm9wZXJ0eSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgaW50IGdldHRlciA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgaW50IHNldHRlciA9IGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7Ci0gICAgCi0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywg
Y3RpX29wX3B1dF9nZXR0ZXJfc2V0dGVyKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChiYXNl
KTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKCZtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihwcm9wZXJ0eSkpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChnZXR0ZXIp
OwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHNldHRlcik7Ci0gICAgc3R1YkNhbGwuY2FsbCgp
OworCisgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKKyAgICBlbWl0TG9hZFBheWxv
YWQoZ2V0dGVyLCByZWdUMyk7CisgICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDQpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMSwgJm1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KSwgcmVnVDMsIHJlZ1Q0KTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZGVsX2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkocmV2aXNpb24gMTU3NDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4OSwyMSArNDg5LDE3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X2luZGV4KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3B1dF9ieV9pbmRleCk7Ci0gICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDIpOwot
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZCwgcmVnVDIpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQsIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEJ5SW5kZXgsIHJl
Z1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3B1dF9nZXR0
ZXJfc2V0dGVyKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kLCByZWdUMik7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZElt
bVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCkpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kLCByZWdUMik7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVudEluc3Ry
dWN0aW9uWzRdLnUub3BlcmFuZCwgcmVnVDIpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlclNldHRlciwgcmVnVDAsICZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTU3NDM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2OCwxOCArMzY4LDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIFQgdGhyb3dF
eGNlcAogI2RlZmluZSBERUZJTkVfU1RVQl9GVU5DVElPTihydHlwZSwgb3ApIHJ0eXBlIEpJVF9T
VFVCIGN0aV8jI29wKFNUVUJfQVJHU19ERUNMQVJBVElPTikKICNlbmRpZgogCi1ERUZJTkVfU1RV
Ql9GVU5DVElPTih2b2lkLCBoYW5kbGVfd2F0Y2hkb2dfdGltZXIpCi17Ci0gICAgU1RVQl9JTklU
X1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3Rh
Y2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgVk0qIHZtID0gc3RhY2tGcmFtZS52bTsKLSAgICBpZiAo
VU5MSUtFTFkodm0tPndhdGNoZG9nLmRpZEZpcmUoY2FsbEZyYW1lKSkpIHsKLSAgICAgICAgdm0t
PnRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2Vw
dGlvbih2bSkpOwotICAgICAgICBWTV9USFJPV19FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci19Ci0KIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVl
LCBvcF9nZXRfYnlfaWRfZ2VuZXJpYykKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3Rh
Y2tGcmFtZSk7CkBAIC02NTksMjQyICs2NDcsNiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNv
ZGVkSlNWYWx1ZSwgb3BfCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQog
Ci0jaWYgRU5BQkxFKERGR19KSVQpCi1ERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6
ZSkKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0gICAgCi0gICAg
Ly8gRGVmZXIgR0Mgc28gdGhhdCBpdCBkb2Vzbid0IHJ1biBiZXR3ZWVuIHdoZW4gd2UgZW50ZXIg
aW50byB0aGlzIHNsb3cgcGF0aCBhbmQKLSAgICAvLyB3aGVuIHdlIGZpZ3VyZSBvdXQgdGhlIHN0
YXRlIG9mIG91ciBjb2RlIGJsb2NrLiBUaGlzIHByZXZlbnRzIGEgbnVtYmVyIG9mCi0gICAgLy8g
YXdrd2FyZCByZWVudHJhbmN5IHNjZW5hcmlvcywgaW5jbHVkaW5nOgotICAgIC8vCi0gICAgLy8g
LSBUaGUgb3B0aW1pemVkIHZlcnNpb24gb2Ygb3VyIGNvZGUgYmxvY2sgYmVpbmcgamV0dGlzb25l
ZCBieSBHQyByaWdodCBhZnRlcgotICAgIC8vICAgd2UgY29uY2x1ZGVkIHRoYXQgd2Ugd2FudGVk
IHRvIHVzZSBpdC4KLSAgICAvLwotICAgIC8vIC0gQW4gb3B0aW1pemVkIHZlcnNpb24gb2Ygb3Vy
IGNvZGUgYmxvY2sgYmVpbmcgaW5zdGFsbGVkIGp1c3QgYXMgd2UgZGVjaWRlZAotICAgIC8vICAg
dGhhdCBpdCB3YXNuJ3QgcmVhZHkgeWV0LgotICAgIC8vCi0gICAgLy8gVGhpcyBzdGlsbCBsZWF2
ZXMgdGhlIGZvbGxvd2luZzogYW55dGltZSB3ZSByZXR1cm4gZnJvbSBjdGlfb3B0aW1pemUsIHdl
IG1heQotICAgIC8vIEdDLCBhbmQgdGhlIEdDIG1heSBlaXRoZXIgamV0dGlzb24gdGhlIG9wdGlt
aXplZCB2ZXJzaW9uIG9mIG91ciBjb2RlIGJsb2NrLAotICAgIC8vIG9yIGl0IG1heSBpbnN0YWxs
IHRoZSBvcHRpbWl6ZWQgdmVyc2lvbiBvZiBvdXIgY29kZSBibG9jayBldmVuIHRob3VnaCB3ZQot
ICAgIC8vIGNvbmNsdWRlZCB0aGF0IGl0IHdhc24ndCByZWFkeSB5ZXQuCi0gICAgLy8KLSAgICAv
LyBOb3RlIHRoYXQgamV0dGlzb25pbmcgd29uJ3QgaGFwcGVuIGlmIHdlIGFscmVhZHkgaW5pdGlh
dGVkIE9TUiwgYmVjYXVzZSBpbgotICAgIC8vIHRoYXQgY2FzZSB3ZSB3b3VsZCBoYXZlIGFscmVh
ZHkgcGxhbnRlZCB0aGUgb3B0aW1pemVkIGNvZGUgYmxvY2sgaW50byB0aGUgSlMKLSAgICAvLyBz
dGFjay4KLSAgICBEZWZlckdDIGRlZmVyR0Moc3RhY2tGcmFtZS52bS0+aGVhcCk7Ci0gICAgCi0g
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgVk0mIHZtID0g
Y2FsbEZyYW1lLT52bSgpOwotICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBzdGFja0ZyYW1l
LmFyZ3NbMF0uaW50MzIoKTsKLQotICAgIGlmIChieXRlY29kZUluZGV4KSB7Ci0gICAgICAgIC8v
IElmIHdlJ3JlIGF0dGVtcHRpbmcgdG8gT1NSIGZyb20gYSBsb29wLCBhc3N1bWUgdGhhdCB0aGlz
IHNob3VsZCBiZQotICAgICAgICAvLyBzZXBhcmF0ZWx5IG9wdGltaXplZC4KLSAgICAgICAgY29k
ZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgIH0KLSAgICAKLSAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7Ci0gICAgICAgIGRhdGFMb2coCi0gICAgICAg
ICAgICAqY29kZUJsb2NrLCAiOiBFbnRlcmVkIG9wdGltaXplIHdpdGggYnl0ZWNvZGVJbmRleCA9
ICIsIGJ5dGVjb2RlSW5kZXgsCi0gICAgICAgICAgICAiLCBleGVjdXRlQ291bnRlciA9ICIsIGNv
ZGVCbG9jay0+aml0RXhlY3V0ZUNvdW50ZXIoKSwKLSAgICAgICAgICAgICIsIG9wdGltaXphdGlv
bkRlbGF5Q291bnRlciA9ICIsIGNvZGVCbG9jay0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIo
KSwKLSAgICAgICAgICAgICIsIGV4aXRDb3VudGVyID0gIik7Ci0gICAgICAgIGlmIChjb2RlQmxv
Y2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpCi0gICAgICAgICAgICBkYXRhTG9nKGNvZGVC
bG9jay0+cmVwbGFjZW1lbnQoKS0+b3NyRXhpdENvdW50ZXIoKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGRhdGFMb2coIk4vQSIpOwotICAgICAgICBkYXRhTG9nKCJcbiIpOwotICAgIH0K
LQotICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hl
ZCgpKSB7Ci0gICAgICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKLSAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIkNob29z
aW5nIG5vdCB0byBvcHRpbWl6ZSAiLCAqY29kZUJsb2NrLCAiIHlldCwgYmVjYXVzZSB0aGUgdGhy
ZXNob2xkIGhhc24ndCBiZWVuIHJlYWNoZWQuXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICAKLSAgICBpZiAoY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkgewotICAg
ICAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7Ci0gICAgICAgIGNvZGVCbG9j
ay0+b3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKQotICAgICAgICAgICAgZGF0YUxvZygiQ2hvb3Npbmcgbm90IHRvIG9wdGltaXplICIsICpj
b2RlQmxvY2ssICIgeWV0LCBiZWNhdXNlIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID09IHRydWUu
XG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBXZSBjYW5ub3QgYmUg
aW4gdGhlIHByb2Nlc3Mgb2YgYXN5bmNocm9ub3VzIGNvbXBpbGF0aW9uIGFuZCBhbHNvIGhhdmUg
YW4gb3B0aW1pemVkCi0gICAgLy8gcmVwbGFjZW1lbnQuCi0gICAgQVNTRVJUKAotICAgICAgICAh
dm0ud29ya2xpc3QKLSAgICAgICAgfHwgISh2bS53b3JrbGlzdC0+Y29tcGlsYXRpb25TdGF0ZShE
Rkc6OkNvbXBpbGF0aW9uS2V5KGNvZGVCbG9jaywgREZHOjpERkdNb2RlKSkgIT0gREZHOjpXb3Jr
bGlzdDo6Tm90S25vd24KLSAgICAgICAgICAgICAmJiBjb2RlQmxvY2stPmhhc09wdGltaXplZFJl
cGxhY2VtZW50KCkpKTsKLSAgICAKLSAgICBERkc6OldvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0
YXRlOwotICAgIGlmICh2bS53b3JrbGlzdCkgewotICAgICAgICAvLyBUaGUgY2FsbCB0byBERkc6
OldvcmtsaXN0Ojpjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgpIHdpbGwgY29tcGxldGUgYWxs
IHJlYWR5Ci0gICAgICAgIC8vIChpLmUuIGNvbXBpbGVkKSBjb2RlIGJsb2Nrcy4gQnV0IGlmIGl0
IGNvbXBsZXRlcyBvdXJzLCB3ZSBhbHNvIG5lZWQgdG8ga25vdwotICAgICAgICAvLyB3aGF0IHRo
ZSByZXN1bHQgd2FzIHNvIHRoYXQgd2UgZG9uJ3QgcGxvdyBhaGVhZCBhbmQgYXR0ZW1wdCBPU1Ig
b3IgaW1tZWRpYXRlCi0gICAgICAgIC8vIHJlb3B0aW1pemF0aW9uLiBUaGlzIHdpbGwgaGF2ZSBh
bHJlYWR5IGFsc28gc2V0IHRoZSBhcHByb3ByaWF0ZSBKSVQgZXhlY3V0aW9uCi0gICAgICAgIC8v
IGNvdW50IHRocmVzaG9sZCBkZXBlbmRpbmcgb24gd2hhdCBoYXBwZW5lZCwgc28gaWYgdGhlIGNv
bXBpbGF0aW9uIHdhcyBhbnl0aGluZwotICAgICAgICAvLyBidXQgc3VjY2Vzc2Z1bCB3ZSBqdXN0
IHdhbnQgdG8gcmV0dXJuIGVhcmx5LiBTZWUgdGhlIGNhc2UgZm9yIHdvcmtsaXN0U3RhdGUgPT0K
LSAgICAgICAgLy8gREZHOjpXb3JrbGlzdDo6Q29tcGlsZWQsIGJlbG93LgotICAgICAgICAKLSAg
ICAgICAgLy8gTm90ZSB0aGF0IHdlIGNvdWxkIGhhdmUgYWx0ZXJuYXRpdmVseSBqdXN0IGNhbGxl
ZCBXb3JrbGlzdDo6Y29tcGlsYXRpb25TdGF0ZSgpCi0gICAgICAgIC8vIGhlcmUsIGFuZCBpZiBp
dCByZXR1cm5lZCBDb21waWxlZCwgd2UgY291bGQgaGF2ZSB0aGVuIGNhbGxlZAotICAgICAgICAv
LyBjb21wbGV0ZUFuZFNjaGVkdWxlT1NSKCkgYmVsb3cuIEJ1dCB0aGF0IHdvdWxkIGhhdmUgbWVh
bnQgdGhhdCBpdCBjb3VsZCB0YWtlCi0gICAgICAgIC8vIGxvbmdlciBmb3IgY29kZSBibG9ja3Mg
dG8gYmUgY29tcGxldGVkOiB0aGV5IHdvdWxkIG9ubHkgY29tcGxldGUgd2hlbiAqdGhlaXIqCi0g
ICAgICAgIC8vIGV4ZWN1dGlvbiBjb3VudCB0cmlnZ2VyIGZpcmVkOyBidXQgdGhhdCBjb3VsZCB0
YWtlIGEgd2hpbGUgc2luY2UgdGhlIGZpcmluZyBpcwotICAgICAgICAvLyByYWN5LiBJdCBjb3Vs
ZCBhbHNvIG1lYW4gdGhhdCBjb2RlIGJsb2NrcyB0aGF0IG5ldmVyIHJ1biBhZ2FpbiBhZnRlciBi
ZWluZwotICAgICAgICAvLyBjb21waWxlZCB3b3VsZCBzaXQgb24gdGhlIHdvcmtsaXN0IHVudGls
IG5leHQgR0MuIFRoYXQncyBmaW5lLCBidXQgaXQncwotICAgICAgICAvLyBwcm9iYWJseSBhIHdh
c3RlIG9mIG1lbW9yeS4gT3VyIGdvYWwgaGVyZSBpcyB0byBjb21wbGV0ZSBjb2RlIGJsb2NrcyBh
cyBzb29uIGFzCi0gICAgICAgIC8vIHBvc3NpYmxlIGluIG9yZGVyIHRvIG1pbmltaXplIHRoZSBj
aGFuY2VzIG9mIHVzIGV4ZWN1dGluZyBiYXNlbGluZSBjb2RlIGFmdGVyCi0gICAgICAgIC8vIG9w
dGltaXplZCBjb2RlIGlzIGFscmVhZHkgYXZhaWxhYmxlLgotICAgICAgICAKLSAgICAgICAgd29y
a2xpc3RTdGF0ZSA9IHZtLndvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgKLSAg
ICAgICAgICAgIHZtLCBERkc6OkNvbXBpbGF0aW9uS2V5KGNvZGVCbG9jaywgREZHOjpERkdNb2Rl
KSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHdvcmtsaXN0U3RhdGUgPSBERkc6OldvcmtsaXN0OjpO
b3RLbm93bjsKLSAgICAKLSAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBERkc6OldvcmtsaXN0OjpD
b21waWxpbmcpIHsKLSAgICAgICAgLy8gV2UgY2Fubm90IGJlIGluIHRoZSBwcm9jZXNzIG9mIGFz
eW5jaHJvbm91cyBjb21waWxhdGlvbiBhbmQgYWxzbyBoYXZlIGFuIG9wdGltaXplZAotICAgICAg
ICAvLyByZXBsYWNlbWVudC4KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWNvZGVCbG9jay0+aGFz
T3B0aW1pemVkUmVwbGFjZW1lbnQoKSk7Ci0gICAgICAgIGNvZGVCbG9jay0+c2V0T3B0aW1pemF0
aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uRGVmZXJyZWQp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmICh3b3JrbGlzdFN0YXRlID09
IERGRzo6V29ya2xpc3Q6OkNvbXBpbGVkKSB7Ci0gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUg
YW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGJ1dCB3ZSBkaWQganVzdCBnZXQgY29tcGlsZWQsIHRo
ZW4KLSAgICAgICAgLy8gdGhlIGNvbXBpbGF0aW9uIGZhaWxlZCBvciB3YXMgaW52YWxpZGF0ZWQs
IGluIHdoaWNoIGNhc2UgdGhlIGV4ZWN1dGlvbiBjb3VudAotICAgICAgICAvLyB0aHJlc2hvbGRz
IGhhdmUgYWxyZWFkeSBiZWVuIHNldCBhcHByb3ByaWF0ZWx5IGJ5Ci0gICAgICAgIC8vIENvZGVC
bG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KCkg
YW5kIHdlIGhhdmUKLSAgICAgICAgLy8gbm90aGluZyBsZWZ0IHRvIGRvLgotICAgICAgICBpZiAo
IWNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewotICAgICAgICAgICAgY29k
ZUJsb2NrLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOwotICAgICAgICAgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb2RlIGJsb2NrICIsICpj
b2RlQmxvY2ssICIgd2FzIGNvbXBpbGVkIGJ1dCBpdCBkb2Vzbid0IGhhdmUgYW4gb3B0aW1pemVk
IHJlcGxhY2VtZW50LlxuIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewotICAgICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lk
ZXJpbmcgT1NSICIsICpjb2RlQmxvY2ssICIgLT4gIiwgKmNvZGVCbG9jay0+cmVwbGFjZW1lbnQo
KSwgIi5cbiIpOwotICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIG9wdGltaXplZCByZXBsYWNlbWVu
dCwgdGhlbiBpdCBtdXN0IGJlIHRoZSBjYXNlIHRoYXQgd2UgZW50ZXJlZAotICAgICAgICAvLyBj
dGlfb3B0aW1pemUgZnJvbSBhIGxvb3AuIFRoYXQncyBiZWNhdXNlIGlmIHRoZXJlJ3MgYW4gb3B0
aW1pemVkIHJlcGxhY2VtZW50LAotICAgICAgICAvLyB0aGVuIGFsbCBjYWxscyB0byB0aGlzIGZ1
bmN0aW9uIHdpbGwgYmUgcmVsaW5rZWQgdG8gdGhlIHJlcGxhY2VtZW50IGFuZCBzbwotICAgICAg
ICAvLyB0aGUgcHJvbG9ndWUgT1NSIHdpbGwgbmV2ZXIgZmlyZS4KLSAgICAgICAgCi0gICAgICAg
IC8vIFRoaXMgaXMgYW4gaW50ZXJlc3RpbmcgdGhyZXNob2xkIGNoZWNrLiBDb25zaWRlciB0aGF0
IGEgZnVuY3Rpb24gT1NSIGV4aXRzCi0gICAgICAgIC8vIGluIHRoZSBtaWRkbGUgb2YgYSBsb29w
LCB3aGlsZSBoYXZpbmcgYSByZWxhdGl2ZWx5IGxvdyBleGl0IGNvdW50LiBUaGUgZXhpdAotICAg
ICAgICAvLyB3aWxsIHJlc2V0IHRoZSBleGVjdXRpb24gY291bnRlciB0byBzb21lIHRhcmdldCB0
aHJlc2hvbGQsIG1lYW5pbmcgdGhhdCB0aGlzCi0gICAgICAgIC8vIGNvZGUgd29uJ3QgYmUgcmVh
Y2hlZCB1bnRpbCB0aGF0IGxvb3AgaGVhdHMgdXAgZm9yID49MTAwMCBleGVjdXRpb25zLiBCdXQg
dGhlbgotICAgICAgICAvLyB3ZSBkbyBhIHNlY29uZCBjaGVjayBoZXJlLCB0byBzZWUgaWYgd2Ug
c2hvdWxkIGVpdGhlciByZW9wdGltaXplLCBvciBqdXN0Ci0gICAgICAgIC8vIGF0dGVtcHQgT1NS
IGVudHJ5LiBIZW5jZSBpdCBtaWdodCBldmVuIGJlIGNvcnJlY3QgZm9yCi0gICAgICAgIC8vIHNo
b3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpIHRvIGFsd2F5cyByZXR1cm4gdHJ1ZS4gQnV0IHdl
IG1ha2UgaXQgZG8gc29tZQotICAgICAgICAvLyBhZGRpdGlvbmFsIGNoZWNraW5nIGFueXdheSwg
dG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgcmVjb21waWxhdGlvbiB0aHJhc2hpbmcuCi0gICAgICAg
IGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5v
dygpKSB7Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7Ci0gICAgICAg
ICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICAgICAgICAgIlRyaWdnZXJpbmcgcmVvcHRp
bWl6YXRpb24gb2YgIiwgKmNvZGVCbG9jaywKLSAgICAgICAgICAgICAgICAgICAgIigiLCAqY29k
ZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiKSAoaW4gbG9vcCkuXG4iKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZSgpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFjb2RlQmxvY2stPnNob3Vs
ZE9wdGltaXplTm93KCkpIHsKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkp
IHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICAgICAiRGVsYXlp
bmcgb3B0aW1pemF0aW9uIGZvciAiLCAqY29kZUJsb2NrLAotICAgICAgICAgICAgICAgICAgICAi
IGJlY2F1c2Ugb2YgaW5zdWZmaWNpZW50IHByb2ZpbGluZy5cbiIpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyBvcHRp
bWl6ZWQgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIlxuIik7Ci0gICAgICAgIAotICAg
ICAgICB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlczsKLSAgICAgICAgaWYgKGJ5dGVjb2RlSW5k
ZXgpCi0gICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IGNvZGVCbG9jay0+bV9udW1WYXJz
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7Ci0gICAg
ICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5kbGVWYWx1ZXMoCi0gICAgICAgICAgICBjb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMpOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7
Ci0gICAgICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkKLSAgICAgICAgICAg
ICAgICAmJiAhVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKQotICAgICAgICAg
ICAgICAgICYmIGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUKLSAgICAgICAg
ICAgICAgICAmJiBjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDb25z
dHJ1Y3QpIHsKLSAgICAgICAgICAgICAgICAvLyBVZ2guIElmIHdlJ3JlIGluIGEgY29uc3RydWN0
b3IsIHRoZSAndGhpcycgYXJndW1lbnQgbWF5IGhvbGQgZ2FyYmFnZS4gSXQgd2lsbAotICAgICAg
ICAgICAgICAgIC8vIGFsc28gbmV2ZXIgYmUgdXNlZC4gSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB3
ZSBwdXQgaW50byB0aGUgdmFsdWUgZm9yIHRoaXMsCi0gICAgICAgICAgICAgICAgLy8gYnV0IGl0
IGhhcyB0byBiZSBhbiBhY3R1YWwgdmFsdWUgdGhhdCBjYW4gYmUgZ3Jva2tlZCBieSBzdWJzZXF1
ZW50IERGRyBwYXNzZXMsCi0gICAgICAgICAgICAgICAgLy8gc28gd2Ugc2FuaXRpemUgaXQgaGVy
ZSBieSB0dXJuaW5nIGl0IGludG8gVW5kZWZpbmVkLgotICAgICAgICAgICAgICAgIG11c3RIYW5k
bGVWYWx1ZXNbaV0gPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVy
YW5kKS5qc1ZhbHVlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIENvbXBpbGF0aW9u
UmVzdWx0IHJlc3VsdCA9IERGRzo6Y29tcGlsZSgKLSAgICAgICAgICAgIHZtLCBjb2RlQmxvY2st
Pm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIERGRzo6REZHTW9kZSwgYnl0ZWNvZGVJbmRleCwKLSAg
ICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXMsIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrOjpjcmVhdGUoKSwKLSAgICAgICAgICAgIHZtLmVuc3VyZVdvcmtsaXN0KCkpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIENvZGVCbG9jayogb3B0aW1pemVkQ29k
ZUJsb2NrID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwotICAgIEFTU0VSVChKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQob3B0aW1pemVkQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKLSAgICAKLSAg
ICBpZiAodm9pZCogYWRkcmVzcyA9IERGRzo6cHJlcGFyZU9TUkVudHJ5KGNhbGxGcmFtZSwgb3B0
aW1pemVkQ29kZUJsb2NrLCBieXRlY29kZUluZGV4KSkgewotICAgICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICJQ
ZXJmb3JtaW5nIE9TUiAiLCAqY29kZUJsb2NrLCAiIC0+ICIsICpvcHRpbWl6ZWRDb2RlQmxvY2ss
ICIsIGFkZHJlc3MgIiwKLSAgICAgICAgICAgICAgICBSYXdQb2ludGVyKChTVFVCX1JFVFVSTl9B
RERSRVNTKS52YWx1ZSgpKSwgIiAtPiAiLCBSYXdQb2ludGVyKGFkZHJlc3MpLCAiLlxuIik7Ci0g
ICAgICAgIH0KLQotICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplU29vbigpOwotICAgICAgICBT
VFVCX1NFVF9SRVRVUk5fQUREUkVTUyhhZGRyZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKLSAgICAgICAgZGF0YUxvZygKLSAg
ICAgICAgICAgICJPcHRpbWl6aW5nICIsICpjb2RlQmxvY2ssICIgLT4gIiwgKmNvZGVCbG9jay0+
cmVwbGFjZW1lbnQoKSwKLSAgICAgICAgICAgICIgc3VjY2VlZGVkLCBPU1IgZmFpbGVkLCBhZnRl
ciBhIGRlbGF5IG9mICIsCi0gICAgICAgICAgICBjb2RlQmxvY2stPm9wdGltaXphdGlvbkRlbGF5
Q291bnRlcigpLCAiLlxuIik7Ci0gICAgfQotCi0gICAgLy8gQ291bnQgdGhlIE9TUiBmYWlsdXJl
IGFzIGEgc3BlY3VsYXRpb24gZmFpbHVyZS4gSWYgdGhpcyBoYXBwZW5zIGEgbG90LCB0aGVuCi0g
ICAgLy8gcmVvcHRpbWl6ZS4KLSAgICBvcHRpbWl6ZWRDb2RlQmxvY2stPmNvdW50T1NSRXhpdCgp
OwotICAgIAotICAgIC8vIFdlIGFyZSBhIGxvdCBtb3JlIGNvbnNlcnZhdGl2ZSBhYm91dCB0cmln
Z2VyaW5nIHJlb3B0aW1pemF0aW9uIGFmdGVyIE9TUiBmYWlsdXJlIHRoYW4KLSAgICAvLyBiZWZv
cmUgaXQuIElmIHdlIGVudGVyIHRoZSBvcHRpbWl6ZV9mcm9tX2xvb3AgdHJpZ2dlciB3aXRoIGEg
YnVja2V0IGZ1bGwgb2YgZmFpbAotICAgIC8vIGFscmVhZHksIHRoZW4gd2UgcmVhbGx5IHdvdWxk
IGxpa2UgdG8gcmVvcHRpbWl6ZSBpbW1lZGlhdGVseS4gQnV0IHRoaXMgY2FzZSBjb3ZlcnMKLSAg
ICAvLyBzb21ldGhpbmcgZWxzZTogdGhlcmUgd2VyZW4ndCBtYW55IChvciBhbnkpIHNwZWN1bGF0
aW9uIGZhaWx1cmVzIGJlZm9yZSwgYnV0IHdlIGp1c3QKLSAgICAvLyBmYWlsZWQgdG8gZW50ZXIg
dGhlIHNwZWN1bGF0aXZlIGNvZGUgYmVjYXVzZSBzb21lIHZhcmlhYmxlIGhhZCB0aGUgd3Jvbmcg
dmFsdWUgb3IKLSAgICAvLyBiZWNhdXNlIHRoZSBPU1IgY29kZSBkZWNpZGVkIGZvciBhbnkgc3B1
cmlvdXMgcmVhc29uIHRoYXQgaXQgZGlkIG5vdCB3YW50IHRvIE9TUgotICAgIC8vIHJpZ2h0IG5v
dy4gU28sIHdlIG9ubHkgdHJpZ2dlciByZW9wdGltaXphdGlvbiBvbmx5IHVwb24gdGhlIG1vcmUg
Y29uc2VydmF0aXZlIChub24tbG9vcCkKLSAgICAvLyByZW9wdGltaXphdGlvbiB0cmlnZ2VyLgot
ICAgIGlmIChvcHRpbWl6ZWRDb2RlQmxvY2stPnNob3VsZFJlb3B0aW1pemVOb3coKSkgewotICAg
ICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKAot
ICAgICAgICAgICAgICAgICJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICIsICpjb2RlQmxv
Y2ssICIgLT4gIiwKLSAgICAgICAgICAgICAgICAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAi
IChhZnRlciBPU1IgZmFpbCkuXG4iKTsKLSAgICAgICAgfQotICAgICAgICBjb2RlQmxvY2stPnJl
b3B0aW1pemUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIE9TUiBmYWlsZWQg
dGhpcyB0aW1lLCBidXQgaXQgbWlnaHQgc3VjY2VlZCBuZXh0IHRpbWUhIExldCB0aGUgY29kZSBy
dW4gYSBiaXQKLSAgICAvLyBsb25nZXIgYW5kIHRoZW4gdHJ5IGFnYWluLgotICAgIGNvZGVCbG9j
ay0+b3B0aW1pemVBZnRlcldhcm1VcCgpOwotfQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQot
CiBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF90ZWFyX29mZl9hY3RpdmF0aW9uKQogewog
ICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKQEAgLTkxNywyMiArNjY5LDYg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfdGVhcl9vZmZfYQogICAgIGFyZ3VtZW50
cy0+dGVhck9mZihjYWxsRnJhbWUpOwogfQogCi1ERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBv
cF9wcm9maWxlX3dpbGxfY2FsbCkKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7Ci0KLSAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gc3RhY2tGcmFtZS52
bS0+ZW5hYmxlZFByb2ZpbGVyKCkpCi0gICAgICAgIHByb2ZpbGVyLT53aWxsRXhlY3V0ZShzdGFj
a0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKSk7Ci19Ci0KLURF
RklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3Byb2ZpbGVfZGlkX2NhbGwpCi17Ci0gICAgU1RV
Ql9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgaWYgKExlZ2FjeVByb2ZpbGVy
KiBwcm9maWxlciA9IHN0YWNrRnJhbWUudm0tPmVuYWJsZWRQcm9maWxlcigpKQotICAgICAgICBw
cm9maWxlci0+ZGlkRXhlY3V0ZShzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdz
WzBdLmpzVmFsdWUoKSk7Ci19Ci0KIHN0YXRpYyBKU1ZhbHVlIGdldEJ5VmFsKAogICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKQEAgLTExNDcsNDQgKzg4Myw2IEBAIERF
RklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCBvcF90aHJvdykKICAgICByZXR1cm4gaGFuZGxlci5j
YWxsRnJhbWU7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1c2hfd2l0aF9z
Y29wZSkKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0KLSAgICBK
U09iamVjdCogbyA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkudG9PYmplY3Qoc3RhY2tG
cmFtZS5jYWxsRnJhbWUpOwotICAgIENIRUNLX0ZPUl9FWENFUFRJT05fVk9JRCgpOwotICAgIHN0
YWNrRnJhbWUuY2FsbEZyYW1lLT5zZXRTY29wZShKU1dpdGhTY29wZTo6Y3JlYXRlKHN0YWNrRnJh
bWUuY2FsbEZyYW1lLCBvKSk7Ci19Ci0KLURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3Bv
cF9zY29wZSkKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0KLSAg
ICBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+c2V0U2NvcGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNj
b3BlKCktPm5leHQoKSk7Ci19Ci0KLURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1c2hf
bmFtZV9zY29wZSkKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0K
LSAgICBKU05hbWVTY29wZSogc2NvcGUgPSBKU05hbWVTY29wZTo6Y3JlYXRlKHN0YWNrRnJhbWUu
Y2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigpLCBzdGFja0ZyYW1lLmFy
Z3NbMV0uanNWYWx1ZSgpLCBzdGFja0ZyYW1lLmFyZ3NbMl0uaW50MzIoKSk7Ci0KLSAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAgIGNhbGxGcmFtZS0+
c2V0U2NvcGUoc2NvcGUpOwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRf
YnlfaW5kZXgpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0g
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICB1bnNp
Z25lZCBwcm9wZXJ0eSA9IHN0YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigpOwotCi0gICAgSlNWYWx1
ZSBhcnJheVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKLSAgICBBU1NFUlQo
aXNKU0FycmF5KGFycmF5VmFsdWUpKTsKLSAgICBhc0FycmF5KGFycmF5VmFsdWUpLT5wdXREaXJl
Y3RJbmRleChjYWxsRnJhbWUsIHByb3BlcnR5LCBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgp
KTsKLX0KLQogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIG9wX3N3aXRjaF9pbW0pCiB7CiAg
ICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpAQCAtMTI0MiwzMSArOTQwLDYg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIG9wX3N3aXRjaF9zdAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9nZXR0ZXJfc2V0
dGVyKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0KLSAgICBBU1NFUlQo
c3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKS5pc09iamVjdCgpKTsKLSAgICBKU09iamVjdCog
YmFzZU9iaiA9IGFzT2JqZWN0KHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkpOwotCi0gICAg
Vk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwotICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBH
ZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSk7Ci0KLSAgICBKU1ZhbHVlIGdldHRlciA9IHN0YWNrRnJh
bWUuYXJnc1syXS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBzZXR0ZXIgPSBzdGFja0ZyYW1lLmFy
Z3NbM10uanNWYWx1ZSgpOwotICAgIEFTU0VSVChnZXR0ZXIuaXNPYmplY3QoKSB8fCBnZXR0ZXIu
aXNVbmRlZmluZWQoKSk7Ci0gICAgQVNTRVJUKHNldHRlci5pc09iamVjdCgpIHx8IHNldHRlci5p
c1VuZGVmaW5lZCgpKTsKLSAgICBBU1NFUlQoZ2V0dGVyLmlzT2JqZWN0KCkgfHwgc2V0dGVyLmlz
T2JqZWN0KCkpOwotCi0gICAgaWYgKCFnZXR0ZXIuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgYWNj
ZXNzb3ItPnNldEdldHRlcih2bSwgYXNPYmplY3QoZ2V0dGVyKSk7Ci0gICAgaWYgKCFzZXR0ZXIu
aXNVbmRlZmluZWQoKSkKLSAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcih2bSwgYXNPYmplY3Qo
c2V0dGVyKSk7Ci0gICAgYmFzZU9iai0+cHV0RGlyZWN0QWNjZXNzb3IoY2FsbEZyYW1lLCBzdGFj
a0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpLCBhY2Nlc3NvciwgQWNjZXNzb3IpOwotfQotCiBE
RUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF90aHJvd19zdGF0aWNfZXJyb3IpCiB7CiAgICAg
U1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpAQCAtMTI4MCwxNiArOTUzLDYgQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfdGhyb3dfc3RhdAogICAgIFZNX1RIUk9XX0VY
Q0VQVElPTl9BVF9FTkQoKTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfZGVi
dWcpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLQotICAgIGludCBkZWJ1
Z0hvb2tJRCA9IHN0YWNrRnJhbWUuYXJnc1swXS5pbnQzMigpOwotICAgIHN0YWNrRnJhbWUudm0t
PmludGVycHJldGVyLT5kZWJ1ZyhjYWxsRnJhbWUsIHN0YXRpY19jYXN0PERlYnVnSG9va0lEPihk
ZWJ1Z0hvb2tJRCkpOwotfQotCiBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgdm1fdGhyb3cp
CiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTU3NDM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDMsMjMgKzM0
MywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkCiBFbmNvZGVk
SlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1NfREVDTEFSQVRJT04p
IFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFs
X2dlbmVyaWMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNW
YWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcoU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXNoX25hbWVfc2NvcGUo
U1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9TVFVCIGN0aV9v
cF9wdXNoX3dpdGhfc2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci12
b2lkIEpJVF9TVFVCIGN0aV9oYW5kbGVfd2F0Y2hkb2dfdGltZXIoU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9TVFVCIGN0aV9vcF9kZWJ1ZyhTVFVCX0FSR1Nf
REVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX1NUVUIgY3RpX29wX3BvcF9zY29w
ZShTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX1NUVUIgY3Rp
X29wX3Byb2ZpbGVfZGlkX2NhbGwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7
Ci12b2lkIEpJVF9TVFVCIGN0aV9vcF9wcm9maWxlX3dpbGxfY2FsbChTVFVCX0FSR1NfREVDTEFS
QVRJT04pIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pbmRleChT
VFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX1NUVUIgY3RpX29w
X3B1dF9ieV92YWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJ
VF9TVFVCIGN0aV9vcF9wdXRfYnlfdmFsX2dlbmVyaWMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBX
VEZfSU5URVJOQUw7Ci12b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfZ2V0dGVyX3NldHRlcihTVFVC
X0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX1NUVUIgY3RpX29wX3Rl
YXJfb2ZmX2FjdGl2YXRpb24oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2
b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9hcmd1bWVudHMoU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9TVFVCIGN0aV9vcF90aHJvd19zdGF0aWNfZXJy
b3IoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci0jaWYgRU5BQkxFKERGR19K
SVQpCi12b2lkIEpJVF9TVFVCIGN0aV9vcHRpbWl6ZShTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdU
Rl9JTlRFUk5BTDsKLSNlbmRpZgogdm9pZCogSklUX1NUVUIgY3RpX29wX3N3aXRjaF9jaGFyKFNU
VUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCogSklUX1NUVUIgY3RpX29w
X3N3aXRjaF9pbW0oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkKiBK
SVRfU1RVQiBjdGlfb3Bfc3dpdGNoX3N0cmluZyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9J
TlRFUk5BTDsK
</data>
<flag name="review"
          id="236801"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214280</attachid>
            <date>2013-10-15 11:05:50 -0700</date>
            <delta_ts>2013-10-15 11:25:31 -0700</delta_ts>
            <desc>Updated patch.  Rebased and with fix.</desc>
            <filename>122617-3.patch</filename>
            <type>text/plain</type>
            <size>79467</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3NDUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBA
CisyMDEzLTEwLTE0ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIHRyYW5zaXRpb24gdm9pZCBjdGlfb3BfKiBtZXRob2RzIHRvIEpJVCBvcGVyYXRpb25zLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNjE3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29udmVydGVk
IHRoZSBmb2xsb3cgc3R1YnMgdG8gSklUIG9wZXJhdGlvbnM6CisgICAgICAgICAgICBjdGlfaGFu
ZGxlX3dhdGNoZG9nX3RpbWVyCisgICAgICAgICAgICBjdGlfb3BfZGVidWcKKyAgICAgICAgICAg
IGN0aV9vcF9wb3Bfc2NvcGUKKyAgICAgICAgICAgIGN0aV9vcF9wcm9maWxlX2RpZF9jYWxsCisg
ICAgICAgICAgICBjdGlfb3BfcHJvZmlsZV93aWxsX2NhbGwKKyAgICAgICAgICAgIGN0aV9vcF9w
dXRfYnlfaW5kZXgKKyAgICAgICAgICAgIGN0aV9vcF9wdXRfZ2V0dGVyX3NldHRlcgorICAgICAg
ICAgICAgY3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24KKyAgICAgICAgICAgIGN0aV9vcF90ZWFy
X29mZl9hcmd1bWVudHMKKyAgICAgICAgICAgIGN0aV9vcF90aHJvd19zdGF0aWNfZXJyb3IKKyAg
ICAgICAgICAgIGN0aV9vcHRpbWl6ZQorCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0NDYWxsSGVs
cGVycy5oOgorICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZSk6CisgICAgICAgIChKU0M6OkNDYWxsSGVscGVyczo6c2V0dXBUaHJlZVN0dWJBcmdz
R1BSKToKKyAgICAgICAgKEpTQzo6Q0NhbGxIZWxwZXJzOjpzZXR1cFN0dWJBcmd1bWVudHMpOgor
ICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OnNldHVwU3R1YkFyZ3VtZW50czEzNCk6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEVudGVyT3B0aW1pemF0
aW9uQ2hlY2spOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5l
cy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGppdC9K
SVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RlYXJfb2ZmX2FjdGl2
YXRpb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGVhcl9vZmZfYXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1c2hfd2l0aF9zY29wZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wb3Bfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHVzaF9uYW1lX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93X3N0YXRp
Y19lcnJvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wcm9maWxlX3dpbGxfY2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wcm9maWxlX2RpZF9jYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9sb29wX2hpbnQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHVzaF93aXRoX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3BvcF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXNoX25h
bWVfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3dfc3RhdGljX2Vycm9y
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYnVnKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3Byb2ZpbGVfd2lsbF9jYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3Byb2ZpbGVfZGlkX2NhbGwpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaW5kZXgpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXIpOgorICAgICAgICAqIGpp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9ieV9pbmRleCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3Nl
dHRlcik6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKiBqaXQvSklUU3R1
YnMuaDoKKwogMjAxMy0xMC0xNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgVHJhbnNpdGlvbiAqc3dpdGNoKiBhbmQgKnNjb3BlKiBKSVRTdHVicyB0byBKSVQgb3Bl
cmF0aW9ucy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkocmV2aXNpb24gMTU3NDUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkyLDE2ICs2OTIsNiBAQCBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlSW5sCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZBcmd1bWVudHMoRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIGFyZ3VtZW50c0NlbGwsIEpTQ2VsbCogYWN0aXZhdGlvbkNlbGwpCi17
Ci0gICAgQVNTRVJUKGV4ZWMtPmNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkpOwotICAgIGlm
IChhY3RpdmF0aW9uQ2VsbCkgewotICAgICAgICBqc0Nhc3Q8QXJndW1lbnRzKj4oYXJndW1lbnRz
Q2VsbCktPmRpZFRlYXJPZmZBY3RpdmF0aW9uKGV4ZWMsIGpzQ2FzdDxKU0FjdGl2YXRpb24qPihh
Y3RpdmF0aW9uQ2VsbCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGpzQ2FzdDxBcmd1
bWVudHMqPihhcmd1bWVudHNDZWxsKS0+dGVhck9mZihleGVjKTsKLX0KLQogdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblRlYXJPZmZJbmxpbmVkQXJndW1lbnRzKAogICAgIEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBhcmd1bWVudHNDZWxsLCBKU0NlbGwqIGFjdGl2YXRpb25DZWxsLCBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNTc0NTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyAr
OTEsNiBAQCBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0CiBzaXplX3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9J
TlRFUk5BTDsKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyKSBXVEZfSU5URVJOQUw7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3Jl
YXRlSW5saW5lZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUqKSBXVEZfSU5U
RVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZkFyZ3VtZW50cyhFeGVj
U3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVGVhck9mZklubGluZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwgSlNDZWxsKiwg
SlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVudHNMZW5ndGgoRXhlY1N0YXRlKiwgaW50
MzJfdCkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25HZXRJbmxpbmVkQXJndW1lbnRCeVZhbChFeGVjU3RhdGUqLCBpbnQzMl90LCBJbmxpbmVDYWxs
RnJhbWUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDE1NzQ1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw2ICsyMTAs
MTUgQEAgcHVibGljOgogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7CiAgICAgfQogCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczKQorICAgIHsKKyAgICAgICAgcmVz
ZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICAgICAg
YWRkQ2FsbEFyZ3VtZW50KGFyZzIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7Cisg
ICAgfQorCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIFRydXN0ZWRJbW1QdHIgYXJnMykKICAgICB7CiAg
ICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwpAQCAtMzcyLDcgKzM4MSwyNyBAQCBwdWJsaWM6
CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMiwgR1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0LCBHUFJSZWcgYXJnNSkKKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIgYXJn
MSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczLCBUcnVzdGVkSW1tMzIgYXJnNCkKKyAgICB7Cisg
ICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7
CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50
KGFyZzMpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7CisgICAgfQorCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwg
VHJ1c3RlZEltbVB0ciBhcmcyLCBHUFJSZWcgYXJnMywgR1BSUmVnIGFyZzQpCisgICAgeworICAg
ICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEpOwor
ICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChh
cmczKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzQpOworICAgIH0KKworQUxXQVlTX0lO
TElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIsIEdQUlJlZyBhcmczLCBHUFJSZWcgYXJnNCwgR1BSUmVnIGFyZzUpCiAgICAgewogICAg
ICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTM4Myw2ICs0MTIsMTcgQEAgcHVibGljOgogICAg
ICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNSk7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIs
IFRydXN0ZWRJbW0zMiBhcmczLCBHUFJSZWcgYXJnNCwgR1BSUmVnIGFyZzUpCisgICAgeworICAg
ICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEpOwor
ICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChh
cmczKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzQpOworICAgICAgICBhZGRDYWxsQXJn
dW1lbnQoYXJnNSk7CisgICAgfQorICAgIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJn
MywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJbW1QdHIgYXJnNSkKICAgICB7CiAgICAgICAgIHJlc2V0
Q2FsbEFyZ3VtZW50cygpOwpAQCAtNDY0LDYgKzUwNCw2MCBAQCBwdWJsaWM6CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgc3dhcChkZXN0QSwgZGVzdEIpOwogICAgIH0KKworICAgIHRlbXBs
YXRlPEdQUlJlZyBkZXN0QSwgR1BSUmVnIGRlc3RCLCBHUFJSZWcgZGVzdEM+CisgICAgdm9pZCBz
ZXR1cFRocmVlU3R1YkFyZ3NHUFIoR1BSUmVnIHNyY0EsIEdQUlJlZyBzcmNCLCBHUFJSZWcgc3Jj
QykKKyAgICB7CisgICAgICAgIC8vIElmIG5laXRoZXIgb2Ygc3JjQi9zcmNDIGFyZSBpbiBvdXIg
d2F5LCB0aGVuIHdlIGNhbiBtb3ZlIHNyY0EgaW50byBwbGFjZS4KKyAgICAgICAgLy8gVGhlbiB3
ZSBjYW4gdXNlIHNldHVwVHdvU3R1YkFyZ3MgdG8gZml4IHNyY0Ivc3JjQy4KKyAgICAgICAgaWYg
KHNyY0IgIT0gZGVzdEEgJiYgc3JjQyAhPSBkZXN0QSkgeworICAgICAgICAgICAgbW92ZShzcmNB
LCBkZXN0QSk7CisgICAgICAgICAgICBzZXR1cFR3b1N0dWJBcmdzR1BSPGRlc3RCLCBkZXN0Qz4o
c3JjQiwgc3JjQyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIElmIG5laXRoZXIgb2Ygc3JjQS9zcmNDIGFyZSBpbiBvdXIgd2F5LCB0aGVuIHdl
IGNhbiBtb3ZlIHNyY0IgaW50byBwbGFjZS4KKyAgICAgICAgLy8gVGhlbiB3ZSBjYW4gdXNlIHNl
dHVwVHdvU3R1YkFyZ3MgdG8gZml4IHNyY0Evc3JjQy4KKyAgICAgICAgaWYgKHNyY0EgIT0gZGVz
dEIgJiYgc3JjQyAhPSBkZXN0QikgeworICAgICAgICAgICAgbW92ZShzcmNCLCBkZXN0Qik7Cisg
ICAgICAgICAgICBzZXR1cFR3b1N0dWJBcmdzR1BSPGRlc3RBLCBkZXN0Qz4oc3JjQSwgc3JjQyk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIElm
IG5laXRoZXIgb2Ygc3JjQS9zcmNCIGFyZSBpbiBvdXIgd2F5LCB0aGVuIHdlIGNhbiBtb3ZlIHNy
Y0MgaW50byBwbGFjZS4KKyAgICAgICAgLy8gVGhlbiB3ZSBjYW4gdXNlIHNldHVwVHdvU3R1YkFy
Z3MgdG8gZml4IHNyY0Evc3JjQi4KKyAgICAgICAgaWYgKHNyY0EgIT0gZGVzdEMgJiYgc3JjQiAh
PSBkZXN0QykgeworICAgICAgICAgICAgbW92ZShzcmNDLCBkZXN0Qyk7CisgICAgICAgICAgICBz
ZXR1cFR3b1N0dWJBcmdzR1BSPGRlc3RBLCBkZXN0Qj4oc3JjQSwgc3JjQik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIElmIHdlIGdldCBoZXJl
LCB3ZSBoYXZlbid0IGJlZW4gYWJsZSB0byBtb3ZlIGFueSBvZiBzcmNBL3NyY0Ivc3JjQy4KKyAg
ICAgICAgLy8gU2luY2UgYWxsIHRocmVlIGFyZSBibG9ja2VkLCB0aGVuIGFsbCB0aHJlZSBtdXN0
IGFscmVhZHkgYmUgaW4gdGhlIGFyZ3VtZW50IHJlZ2lzdGVyLgorICAgICAgICAvLyBCdXQgYXJl
IHRoZXkgaW4gdGhlIHJpZ2h0IG9uZXM/CisgICAgICAgIAorICAgICAgICAvLyBGaXJzdCwgZW5z
dXJlIHNyY0EgaXMgaW4gcGxhY2UuCisgICAgICAgIGlmIChzcmNBICE9IGRlc3RBKSB7CisgICAg
ICAgICAgICBzd2FwKHNyY0EsIGRlc3RBKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
SWYgc3JjQSB3YXNuJ3QgaW4gYXJndW1lbnRHUFIxLCBvbmUgb2Ygc3JjQi9zcmNDIG11c3QgYmUu
CisgICAgICAgICAgICBBU1NFUlQoc3JjQiA9PSBkZXN0QSB8fCBzcmNDID09IGRlc3RBKTsKKyAg
ICAgICAgICAgIC8vIElmIHNyY0Igd2FzIGluIGFyZ3VtZW50R1BSMSBpdCBubyBsb25nZXIgaXMg
KGR1ZSB0byB0aGUgc3dhcCkuCisgICAgICAgICAgICAvLyBPdGhlcndpc2Ugc3JjQyBtdXN0IGhh
dmUgYmVlbi4gTWFyayBoaW0gYXMgbW92ZWQuCisgICAgICAgICAgICBpZiAoc3JjQiA9PSBkZXN0
QSkKKyAgICAgICAgICAgICAgICBzcmNCID0gc3JjQTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBzcmNDID0gc3JjQTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
RWl0aGVyIHNyY0IgJiBzcmNDIG5lZWQgc3dhcHBpbmcsIG9yIHdlJ3JlIGFsbCBkb25lLgorICAg
ICAgICBBU1NFUlQoKHNyY0IgPT0gZGVzdEIgfHwgc3JjQyA9PSBkZXN0QykKKyAgICAgICAgICAg
IHx8IChzcmNCID09IGRlc3RDIHx8IHNyY0MgPT0gZGVzdEIpKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChzcmNCICE9IGRlc3RCKQorICAgICAgICAgICAgc3dhcChkZXN0QiwgZGVzdEMpOworICAg
IH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgdGVtcGxhdGU8RlBSUmVnIGRlc3RBLCBGUFJSZWcg
ZGVzdEI+CiAgICAgdm9pZCBzZXR1cFR3b1N0dWJBcmdzRlBSKEZQUlJlZyBzcmNBLCBGUFJSZWcg
c3JjQikKQEAgLTUxNiw1OCArNjEwLDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHNldHVw
VHdvU3R1YkFyZ3NHUFI8R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjI+KGFyZzEsIGFyZzIpOwogICAgIH0KKwogICAgIHZvaWQgc2V0dXBTdHViQXJndW1lbnRzKEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCiAgICAgewotICAgICAgICAvLyBJ
ZiBuZWl0aGVyIG9mIGFyZzIvYXJnMyBhcmUgaW4gb3VyIHdheSwgdGhlbiB3ZSBjYW4gbW92ZSBh
cmcxIGludG8gcGxhY2UuCi0gICAgICAgIC8vIFRoZW4gd2UgY2FuIHVzZSBzZXR1cFR3b1N0dWJB
cmdzIHRvIGZpeCBhcmcyL2FyZzMuCi0gICAgICAgIGlmIChhcmcyICE9IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSAmJiBhcmczICE9IEdQUkluZm86OmFyZ3VtZW50R1BSMSkgewotICAgICAgICAgICAg
bW92ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgICAgICAgICAgc2V0dXBUd29T
dHViQXJnc0dQUjxHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMz4o
YXJnMiwgYXJnMyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBJZiBuZWl0aGVyIG9mIGFyZzEvYXJnMyBhcmUgaW4gb3VyIHdheSwgdGhlbiB3ZSBjYW4gbW92
ZSBhcmcyIGludG8gcGxhY2UuCi0gICAgICAgIC8vIFRoZW4gd2UgY2FuIHVzZSBzZXR1cFR3b1N0
dWJBcmdzIHRvIGZpeCBhcmcxL2FyZzMuCi0gICAgICAgIGlmIChhcmcxICE9IEdQUkluZm86OmFy
Z3VtZW50R1BSMiAmJiBhcmczICE9IEdQUkluZm86OmFyZ3VtZW50R1BSMikgewotICAgICAgICAg
ICAgbW92ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOwotICAgICAgICAgICAgc2V0dXBU
d29TdHViQXJnc0dQUjxHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BS
Mz4oYXJnMSwgYXJnMyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBJZiBuZWl0aGVyIG9mIGFyZzEvYXJnMiBhcmUgaW4gb3VyIHdheSwgdGhlbiB3ZSBjYW4g
bW92ZSBhcmczIGludG8gcGxhY2UuCi0gICAgICAgIC8vIFRoZW4gd2UgY2FuIHVzZSBzZXR1cFR3
b1N0dWJBcmdzIHRvIGZpeCBhcmcxL2FyZzIuCi0gICAgICAgIGlmIChhcmcxICE9IEdQUkluZm86
OmFyZ3VtZW50R1BSMyAmJiBhcmcyICE9IEdQUkluZm86OmFyZ3VtZW50R1BSMykgewotICAgICAg
ICAgICAgbW92ZShhcmczLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwotICAgICAgICAgICAgc2V0
dXBUd29TdHViQXJnc0dQUjxHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50
R1BSMj4oYXJnMSwgYXJnMik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgd2UgaGF2ZW4ndCBiZWVuIGFibGUgdG8gbW92ZSBhbnkg
b2YgYXJnMS9hcmcyL2FyZzMuCi0gICAgICAgIC8vIFNpbmNlIGFsbCB0aHJlZSBhcmUgYmxvY2tl
ZCwgdGhlbiBhbGwgdGhyZWUgbXVzdCBhbHJlYWR5IGJlIGluIHRoZSBhcmd1bWVudCByZWdpc3Rl
ci4KLSAgICAgICAgLy8gQnV0IGFyZSB0aGV5IGluIHRoZSByaWdodCBvbmVzPwotCi0gICAgICAg
IC8vIEZpcnN0LCBlbnN1cmUgYXJnMSBpcyBpbiBwbGFjZS4KLSAgICAgICAgaWYgKGFyZzEgIT0g
R1BSSW5mbzo6YXJndW1lbnRHUFIxKSB7Ci0gICAgICAgICAgICBzd2FwKGFyZzEsIEdQUkluZm86
OmFyZ3VtZW50R1BSMSk7Ci0KLSAgICAgICAgICAgIC8vIElmIGFyZzEgd2Fzbid0IGluIGFyZ3Vt
ZW50R1BSMSwgb25lIG9mIGFyZzIvYXJnMyBtdXN0IGJlLgotICAgICAgICAgICAgQVNTRVJUKGFy
ZzIgPT0gR1BSSW5mbzo6YXJndW1lbnRHUFIxIHx8IGFyZzMgPT0gR1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKLSAgICAgICAgICAgIC8vIElmIGFyZzIgd2FzIGluIGFyZ3VtZW50R1BSMSBpdCBubyBs
b25nZXIgaXMgKGR1ZSB0byB0aGUgc3dhcCkuCi0gICAgICAgICAgICAvLyBPdGhlcndpc2UgYXJn
MyBtdXN0IGhhdmUgYmVlbi4gTWFyayBoaW0gYXMgbW92ZWQuCi0gICAgICAgICAgICBpZiAoYXJn
MiA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjEpCi0gICAgICAgICAgICAgICAgYXJnMiA9IGFyZzE7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYXJnMyA9IGFyZzE7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBFaXRoZXIgYXJnMiAmIGFyZzMgbmVlZCBzd2FwcGluZywgb3Igd2Un
cmUgYWxsIGRvbmUuCi0gICAgICAgIEFTU0VSVCgoYXJnMiA9PSBHUFJJbmZvOjphcmd1bWVudEdQ
UjIgfHwgYXJnMyA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjMpCi0gICAgICAgICAgICB8fCAoYXJn
MiA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjMgfHwgYXJnMyA9PSBHUFJJbmZvOjphcmd1bWVudEdQ
UjIpKTsKLQotICAgICAgICBpZiAoYXJnMiAhPSBHUFJJbmZvOjphcmd1bWVudEdQUjIpCi0gICAg
ICAgICAgICBzd2FwKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIz
KTsKKyAgICAgICAgc2V0dXBUaHJlZVN0dWJBcmdzR1BSPEdQUkluZm86OmFyZ3VtZW50R1BSMSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjM+KGFyZzEsIGFyZzIs
IGFyZzMpOwogICAgIH0KIAorICAgIHZvaWQgc2V0dXBTdHViQXJndW1lbnRzMTM0KEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMywgR1BSUmVnIGFyZzQpCisgICAgeworICAgICAgICBzZXR1cFRocmVl
U3R1YkFyZ3NHUFI8R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjMs
IEdQUkluZm86OmFyZ3VtZW50R1BSND4oYXJnMSwgYXJnMywgYXJnNCk7CisgICAgfQogI2lmIENQ
VShNSVBTKQogI2RlZmluZSBQT0tFX0FSR1VNRU5UX09GRlNFVCA0CiAjZWxzZQpAQCAtMTAzOSw2
ICsxMDkxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGFyZzEsIGFyZzIsIGFyZzMpOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIFRydXN0ZWRJbW1QdHIgYXJnMiwg
R1BSUmVnIGFyZzMsICBHUFJSZWcgYXJnNCkKKyAgICB7CisgICAgICAgIHBva2UoYXJnNCwgUE9L
RV9BUkdVTUVOVF9PRkZTRVQpOworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgYXJnMiwgYXJnMyk7CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyLCBU
cnVzdGVkSW1tMzIgYXJnMywgR1BSUmVnIGFyZzQpCiAgICAgewogICAgICAgICBwb2tlKGFyZzQs
IFBPS0VfQVJHVU1FTlRfT0ZGU0VUKTsKQEAgLTExOTEsNiArMTI0OSwxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIG1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKICAgICAgICAgbW92ZShH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICB9
CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQ
UlJlZyBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIsIEdQUlJlZyBhcmczLCBHUFJSZWcgYXJnNCkK
KyAgICB7CisgICAgICAgIHNldHVwU3R1YkFyZ3VtZW50czEzNChhcmcxLCBhcmczLCBhcmc0KTsK
KyAgICAgICAgbW92ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBtb3Zl
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAg
IH0KICNlbmRpZgogCiAgICAgdm9pZCBzZXR1cFJlc3VsdHMoR1BSUmVnIGRlc3RBLCBHUFJSZWcg
ZGVzdEIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxNTc0NTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNCwxMSArMTA0LDEzIEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygp
CiAgICAgaWYgKCFjYW5CZU9wdGltaXplZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKdW1w
IHNraXBPcHRpbWl6ZSA9IGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6
OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWJzb2x1dGVBZGRyZXNzKG1f
Y29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSk7Ci0gICAgSklUU3R1YkNh
bGwgc3R1YkNhbGwodGhpcywgY3RpX29wdGltaXplKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChUcnVzdGVkSW1tMzIobV9ieXRlY29kZU9mZnNldCkpOworICAgIEp1bXBMaXN0IHNraXBPcHRp
bWl6ZTsKKyAgICAKKyAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwg
VHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgp
KSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRl
cigpKSkpOwogICAgIEFTU0VSVCghbV9ieXRlY29kZU9mZnNldCk7Ci0gICAgc3R1YkNhbGwuY2Fs
bCgpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsIG1fYnl0ZWNvZGVPZmZz
ZXQpOworICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5W
YWx1ZVJlZ2lzdGVyKSk7CisgICAganVtcChyZXR1cm5WYWx1ZVJlZ2lzdGVyKTsKICAgICBza2lw
T3B0aW1pemUubGluayh0aGlzKTsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCShyZXZpc2lvbiAxNTc0NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC04NzAsMTYgKzg3MCwyNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
UGMsIGludCwgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FWiwgaW50LCBpbnQzMl90KTsKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FSlMsIEdQUlJl
Zywgc2l6ZV90KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQ
X0pJVE9wZXJhdGlvbl9FWiwgaW50MzJfdCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUNDLCBSZWdpc3RlcklELCBSZWdpc3RlcklE
KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJh
dGlvbl9FSiwgUmVnaXN0ZXJJRCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUpKLCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9F
T0pzcywgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRSk7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUMsIFJlZ2lzdGVySUQpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9u
X0VDQywgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUNJQ0MsIFJlZ2lzdGVySUQsIGNvbnN0
IElkZW50aWZpZXIqLCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSWRKWiwgY29uc3QgSWRl
bnRpZmllciosIFJlZ2lzdGVySUQsIGludDMyX3QpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKLCBSZWdpc3RlcklEKTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSklk
SkosIFJlZ2lzdGVySUQsIGNvbnN0IElkZW50aWZpZXIqLCBSZWdpc3RlcklELCBSZWdpc3RlcklE
KTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKSkksIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFN0
cmluZ0ltcGwqKTsKICNlbHNlCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oVl9KSVRPcGVyYXRpb25fRUpKSSwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0
ZXJJRCwgUmVnaXN0ZXJJRCwgU3RyaW5nSW1wbCopOwogI2VuZGlmCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpaSiwgUmVnaXN0ZXJJ
RCwgaW50MzJfdCwgUmVnaXN0ZXJJRCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpaLCBSZWdpc3RlcklELCBpbnQzMl90KTsKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9F
UGMsIEluc3RydWN0aW9uKik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oVl9KSVRPcGVyYXRpb25fRVosIGludDMyX3QpOwogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oSl9K
SVRPcGVyYXRpb25fRSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRp
b25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihWX0pJVE9wZXJhdGlvbl9FQ2IsIENv
ZGVCbG9jayopOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0
aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oWl9KSVRPcGVyYXRpb25fRSk7CkBAIC04OTIs
NiArOTAzLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VKUywgR1BSUmVnLCBHUFJSZWcsIHNpemVf
dCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVy
YXRpb25fRUosIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOwogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VKSiwgUmVnaXN0ZXJJRCwgUmVn
aXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUlkSlosIGNvbnN0IElkZW50aWZp
ZXIqLCBSZWdpc3RlcklELCBSZWdpc3RlcklELCBpbnQzMl90KTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSiwgUmVnaXN0ZXJJRCwg
UmVnaXN0ZXJJRCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Vl9KSVRPcGVyYXRpb25fRUpaLCBSZWdpc3RlcklELCBSZWdpc3RlcklELCBpbnQzMl90KTsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9F
SlpKLCBSZWdpc3RlcklELCBSZWdpc3RlcklELCBpbnQzMl90LCBSZWdpc3RlcklELCBSZWdpc3Rl
cklEKTsKICNlbmRpZgogCiAgICAgICAgIEp1bXAgY2hlY2tTdHJ1Y3R1cmUoUmVnaXN0ZXJJRCBy
ZWcsIFN0cnVjdHVyZSogc3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCShyZXZpc2lvbiAxNTc0NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDYgKzMzNiwxMiBAQCBBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgZHN0KTsKIH0K
IAorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24o
UF9KSVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBpbnQzMl90IG9wKQoreworICAgIHNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIob3ApKTsKKyAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworfQorCiBBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FSlMg
b3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgc2l6ZV90IGFyZzIpCiB7CiAgICAgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoYXJnMikpOwpAQCAtMzY2LDEyICsz
NzIsNjYgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiB9CiAKK0FMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKFZfSklUT3Bl
cmF0aW9uX0Ugb3BlcmF0aW9uKQoreworICAgIHNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7Cisg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKK30KKwor
QUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oVl9K
SVRPcGVyYXRpb25fRUlkSlogb3BlcmF0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudE9wMSwg
UmVnaXN0ZXJJRCByZWdPcDIsIGludDMyX3Qgb3AzKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGlkZW50T3AxKSwgcmVnT3AyLCBUcnVzdGVkSW1tMzIo
b3AzKSk7CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
KTsKK30KKworQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVy
YXRpb24oVl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBSZWdpc3RlcklEIHJlZ09wKQorewor
ICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShyZWdPcCk7CisgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKK30KKworQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUMg
b3BlcmF0aW9uLCBSZWdpc3RlcklEIHJlZ09wKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShyZWdPcCk7CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uKTsKK30KKworQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6
OmNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgUmVnaXN0ZXJJRCBy
ZWdPcDEsIFJlZ2lzdGVySUQgcmVnT3AyKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShyZWdPcDEsIHJlZ09wMik7CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uKTsKK30KKworQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBKSVQ6OmNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpJZEpKIG9wZXJhdGlvbiwgUmVn
aXN0ZXJJRCByZWdPcDEsIGNvbnN0IElkZW50aWZpZXIqIGlkZW50T3AyLCBSZWdpc3RlcklEIHJl
Z09wMywgUmVnaXN0ZXJJRCByZWdPcDQpCit7CisgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKHJlZ09wMSwgVHJ1c3RlZEltbVB0cihpZGVudE9wMiksIHJlZ09wMywgcmVnT3A0KTsKKyAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworfQorCitB
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihWX0pJ
VE9wZXJhdGlvbl9FSlogb3BlcmF0aW9uLCBSZWdpc3RlcklEIHJlZ09wMSwgaW50MzJfdCBvcDIp
Cit7CisgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKHJlZ09wMSwgVHJ1c3RlZEltbTMy
KG9wMikpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bik7Cit9CisKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3Bl
cmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKWkogb3BlcmF0aW9uLCBSZWdpc3RlcklEIHJlZ09wMSwg
aW50MzJfdCBvcDIsIFJlZ2lzdGVySUQgcmVnT3AzKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShyZWdPcDEsIFRydXN0ZWRJbW0zMihvcDIpLCByZWdPcDMpOworICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Cit9CisKIEFMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0
aW9uX0VQYyBvcGVyYXRpb24sIEluc3RydWN0aW9uKiBieXRlY29kZVBDKQogewogICAgIHNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGJ5dGVjb2RlUEMpKTsKICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogfQogCitBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihWX0pJVE9w
ZXJhdGlvbl9FWiBvcGVyYXRpb24sIGludDMyX3Qgb3ApCit7CisgICAgc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihvcCkpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Cit9CisKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNl
cHRpb24oSl9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb24pCiB7CiAgICAgc2V0dXBBcmd1bWVudHNF
eGVjU3RhdGUoKTsKQEAgLTQ1NiwxMiArNTE2LDQxIEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhvcGVyYXRpb24pOwogfQogCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJ
VDo6Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0lDQyBvcGVyYXRpb24sIFJlZ2lzdGVy
SUQgcmVnT3AxLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudE9wMiwgUmVnaXN0ZXJJRCByZWdPcDMs
IFJlZ2lzdGVySUQgcmVnT3A0KQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShy
ZWdPcDEsIFRydXN0ZWRJbW1QdHIoaWRlbnRPcDIpLCByZWdPcDMsIHJlZ09wNCk7CisgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKK30KKworQUxXQVlT
X0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oVl9KSVRPcGVy
YXRpb25fRUogb3BlcmF0aW9uLCBSZWdpc3RlcklEIHJlZ09wMVRhZywgUmVnaXN0ZXJJRCByZWdP
cDFQYXlsb2FkKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShyZWdPcDFQYXls
b2FkLCByZWdPcDFUYWcpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvbik7Cit9CisKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklU
OjpjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VJZEpaIG9wZXJhdGlvbiwgY29uc3QgSWRl
bnRpZmllciogaWRlbnRPcDEsIFJlZ2lzdGVySUQgcmVnT3AyVGFnLCBSZWdpc3RlcklEIHJlZ09w
MlBheWxvYWQsIGludDMyX3Qgb3AzKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBUcnVzdGVkSW1tUHRyKGlkZW50T3AxKSwgcmVnT3AyUGF5
bG9hZCwgcmVnT3AyVGFnLCBUcnVzdGVkSW1tMzIob3AzKSk7CisgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKK30KKwogQUxXQVlTX0lOTElORSBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpKSSBv
cGVyYXRpb24sIFJlZ2lzdGVySUQgcmVnT3AxVGFnLCBSZWdpc3RlcklEIHJlZ09wMVBheWxvYWQs
IFJlZ2lzdGVySUQgcmVnT3AyVGFnLCBSZWdpc3RlcklEIHJlZ09wMlBheWxvYWQsIFN0cmluZ0lt
cGwqIHVpZCkKIHsKICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9E
VU1NWV9BUkcgcmVnT3AxUGF5bG9hZCwgcmVnT3AxVGFnLCBTSDRfMzJCSVRfRFVNTVlfQVJHIHJl
Z09wMlBheWxvYWQsIHJlZ09wMlRhZywgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogfQogCitBTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlv
bl9FSlogb3BlcmF0aW9uLCBSZWdpc3RlcklEIHJlZ09wMVRhZywgUmVnaXN0ZXJJRCByZWdPcDFQ
YXlsb2FkLCBpbnQzMl90IG9wMikKK3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
RUFCSV8zMkJJVF9EVU1NWV9BUkcgcmVnT3AxUGF5bG9hZCwgcmVnT3AxVGFnLCBUcnVzdGVkSW1t
MzIob3AyKSk7CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uKTsKK30KKworQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxP
cGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpaSiBvcGVyYXRpb24sIFJlZ2lzdGVySUQgcmVnT3Ax
VGFnLCBSZWdpc3RlcklEIHJlZ09wMVBheWxvYWQsIGludDMyX3Qgb3AyLCBSZWdpc3RlcklEIHJl
Z09wM1RhZywgUmVnaXN0ZXJJRCByZWdPcDNQYXlsb2FkKQoreworICAgIHNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyByZWdPcDFQYXlsb2FkLCByZWdPcDFU
YWcsIFRydXN0ZWRJbW0zMihvcDIpLCByZWdPcDNQYXlsb2FkLCByZWdPcDNUYWcpOworICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Cit9CiAjdW5kZWYg
RUFCSV8zMkJJVF9EVU1NWV9BUkcKICN1bmRlZiBTSDRfMzJCSVRfRFVNTVlfQVJHCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlz
aW9uIDE1NzQ1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTI5LDE0ICs5MjksMTMgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbmV4dF9wbmFtZShJbnN0cnVjdGlvbgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXNoX3dpdGhf
c2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKSVRTdHViQ2Fs
bCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcHVzaF93aXRoX3Njb3BlKTsKLSAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICBzdHViQ2Fs
bC5jYWxsKCk7CisgICAgZW1pdExvYWQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwg
cmVnVDEsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1c2hXaXRoU2NvcGUs
IHJlZ1QxLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3BvcF9zY29wZShJbnN0cnVj
dGlvbiopCiB7Ci0gICAgSklUU3R1YkNhbGwodGhpcywgY3RpX29wX3BvcF9zY29wZSkuY2FsbCgp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUG9wU2NvcGUpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF90b19udW1iZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTk2
OCwxMSArOTY3LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RvX251bWJlcihJbnN0cnVjdAog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXNoX25hbWVfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcHVz
aF9uYW1lX3Njb3BlKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKCZt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkp
OwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKSk7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOworICAgIGVtaXRMb2Fk
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QxLCByZWdUMCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXNoTmFtZVNjb3BlLCAmbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIHJlZ1QxLCByZWdUMCwgY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNo
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDQxLDEyICsxMDM3LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1p
dF9vcF90aHJvd19zdGF0aWNfZXJyb3IoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICB1bnNpZ25lZCBtZXNzYWdlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKLQotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF90aHJvd19zdGF0aWNf
ZXJyb3IpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChtZXNzYWdlKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAg
ZW1pdExvYWQobV9jb2RlQmxvY2stPmdldENvbnN0YW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpLCByZWdUMSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhy
b3dTdGF0aWNFcnJvciwgcmVnVDEsIHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTEwNTUsOSArMTA0Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYnVn
KEluc3RydWN0aW9uKiBjdXIKICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsK
ICAgICBicmVha3BvaW50KCk7CiAjZWxzZQotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMs
IGN0aV9vcF9kZWJ1Zyk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KTsKICNlbmRpZgogfQogCkBAIC0xMTc5LDE2ICsxMTY5LDE0IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF90b190aGlzKEluc3RydWN0aW8KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV93aWxs
X2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKSVRTdHViQ2Fs
bCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcHJvZmlsZV93aWxsX2NhbGwpOwotICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgIHN0dWJD
YWxsLmNhbGwoKTsKKyAgICBlbWl0TG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCByZWdUMSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHJvZmlsZVdpbGxD
YWxsLCByZWdUMSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2RpZF9j
YWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSklUU3R1YkNhbGwg
c3R1YkNhbGwodGhpcywgY3RpX29wX3Byb2ZpbGVfZGlkX2NhbGwpOwotICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgIHN0dWJDYWxs
LmNhbGwoKTsKKyAgICBlbWl0TG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBy
ZWdUMSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHJvZmlsZURpZENhbGws
IHJlZ1QxLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudHNfbGVu
Z3RoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE1NzQ1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OCw5
ICsyNDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90ZWFyX29mZl9hY3RpdmF0aW9uKEluCiB7CiAg
ICAgaW50IGFjdGl2YXRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAg
IEp1bXAgYWN0aXZhdGlvbk5vdENyZWF0ZWQgPSBicmFuY2hUZXN0NjQoWmVybywgYWRkcmVzc0Zv
cihhY3RpdmF0aW9uKSk7Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Rl
YXJfb2ZmX2FjdGl2YXRpb24pOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGFjdGl2YXRpb24s
IHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihhY3RpdmF0aW9uLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UZWFyT2Zm
QWN0aXZhdGlvbiwgcmVnVDApOwogICAgIGFjdGl2YXRpb25Ob3RDcmVhdGVkLmxpbmsodGhpcyk7
CiB9CiAKQEAgLTI2MCwxMCArMjU5LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGVhcl9vZmZfYXJn
dW1lbnRzKElucwogICAgIGludCBhY3RpdmF0aW9uID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKIAogICAgIEp1bXAgYXJnc05vdENyZWF0ZWQgPSBicmFuY2hUZXN0NjQoWmVybywg
QWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqICh1bm1vZGlmaWVk
QXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cykpLm9mZnNldCgpKSkp
OwotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF90ZWFyX29mZl9hcmd1bWVu
dHMpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzKSkub2Zmc2V0KCksIHJlZ1QyKTsKLSAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChhY3RpdmF0aW9uLCByZWdUMik7Ci0gICAgc3R1YkNhbGwuY2FsbCgp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVy
KFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpKS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYWN0aXZhdGlvbiwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uVGVhck9mZkFyZ3VtZW50cywgcmVnVDAsIHJlZ1QxKTsKICAgICBhcmdzTm90Q3Jl
YXRlZC5saW5rKHRoaXMpOwogfQogCkBAIC02MDAsMTQgKzU5OCwxMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXh0X3BuYW1lKEluc3RydWN0aW9uCiAKIHZvaWQgSklUOjplbWl0X29wX3B1c2hfd2l0
aF9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEpJVFN0dWJD
YWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXNoX3dpdGhfc2NvcGUpOwotICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QyKTsKLSAg
ICBzdHViQ2FsbC5jYWxsKCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXNoV2l0aFNjb3BlLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3BvcF9zY29w
ZShJbnN0cnVjdGlvbiopCiB7Ci0gICAgSklUU3R1YkNhbGwodGhpcywgY3RpX29wX3BvcF9zY29w
ZSkuY2FsbCgpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUG9wU2NvcGUpOwogfQogCiB2
b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCkBAIC02NjMsMTEgKzY2MCw4IEBAIHZvaWQg
SklUOjplbWl0X29wX3RvX251bWJlcihJbnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHVzaF9uYW1lX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
SklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3B1c2hfbmFtZV9zY29wZSk7Ci0gICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKTsKLSAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMik7Ci0gICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpKTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXNoTmFtZVNjb3BlLCAmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcyOSwxMyArNzIzLDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX3N0cmluZyhJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvd19zdGF0
aWNfZXJyb3IoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKSVRTdHVi
Q2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfdGhyb3dfc3RhdGljX2Vycm9yKTsKLSAgICBpZiAo
IW1fY29kZUJsb2NrLT5nZXRDb25zdGFudChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KS5pc051bWJlcigpKQotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKSkpKTsKLSAgICBlbHNlCi0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KEltbTY0KEpTVmFsdWU6OmVuY29kZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
VHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKLSAgICBzdHVi
Q2FsbC5jYWxsKCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkpLCBy
ZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd1N0YXRpY0Vycm9yLCByZWdU
MCwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2RlYnVnKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03NDQsOSArNzMz
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoSW5zdHJ1Y3Rpb24qIGN1cgogICAgIFVOVVNF
RF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwogICAgIGJyZWFrcG9pbnQoKTsKICNlbHNlCi0g
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2RlYnVnKTsKLSAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCkpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRl
YnVnLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICNlbmRpZgogfQogCkBAIC05
MTksMTYgKzkwNiwxNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1
CiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfd2lsbF9jYWxsKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29w
X3Byb2ZpbGVfd2lsbF9jYWxsKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMSk7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwg
cmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHJvZmlsZVdpbGxDYWxsLCByZWdU
MCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfZGlkX2NhbGwoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBj
dGlfb3BfcHJvZmlsZV9kaWRfY2FsbCk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDEpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblByb2ZpbGVEaWRDYWxsLCBy
ZWdUMCk7CiB9CiAKIApAQCAtMTE2OCwxMCArMTE1MywxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbG9vcF9oaW50KEluc3RydWN0CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkgJiYgT3B0aW9u
czo6ZW5hYmxlT1NSRW50cnlJbkxvb3BzKCkpIHsKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OwogICAgICAgICAKLSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wdGlt
aXplKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKG1fYnl0ZWNv
ZGVPZmZzZXQpKTsKLSAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAgICAgICAKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgbV9ieXRlY29kZU9mZnNldCk7CisgICAg
ICAgIEp1bXAgbm9PcHRpbWl6ZWRFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFs
dWVSZWdpc3Rlcik7CisgICAgICAgIGp1bXAocmV0dXJuVmFsdWVSZWdpc3Rlcik7CisgICAgICAg
IG5vT3B0aW1pemVkRW50cnkubGluayh0aGlzKTsKKwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hv
dChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfbG9vcF9oaW50KSk7CiAgICAgfQogI2VuZGlmCkBA
IC0xMTc5LDkgKzExNjUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KEluc3Ry
dWN0CiAgICAgLy8gRW1pdCB0aGUgc2xvdyBwYXRoIG9mIHRoZSB3YXRjaGRvZyB0aW1lciBjaGVj
azoKICAgICBpZiAobV92bS0+d2F0Y2hkb2cuaXNFbmFibGVkKCkpIHsKICAgICAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOwotCi0gICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9o
YW5kbGVfd2F0Y2hkb2dfdGltZXIpOwotICAgICAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlV2F0Y2hkb2dUaW1lcik7CiAKICAgICAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2xvb3BfaGludCkpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAkocmV2aXNpb24gMTU3NDUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDE5IEBACiAjaW5jbHVkZSAi
QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkNv
bW1vblNsb3dQYXRocy5oIgorI2luY2x1ZGUgIkRGR0NvbXBpbGF0aW9uTW9kZS5oIgorI2luY2x1
ZGUgIkRGR0RyaXZlci5oIgorI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCisjaW5jbHVkZSAiREZH
V29ya2xpc3QuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5o
IgogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRp
b25XcmFwcGVycy5oIgorI2luY2x1ZGUgIkpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJK
U05hbWVTY29wZS5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKKyNpbmNs
dWRlICJKU1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKQEAgLTc5Niw2ICs4MDMs
MzcyIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmUKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKFJlZ0V4cE9iamVjdDo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdleHApKTsKIH0KIAordm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhbmRsZVdhdGNoZG9nVGltZXIoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAgaWYgKFVOTElLRUxZKHZtLndhdGNoZG9nLmRpZEZp
cmUoZXhlYykpKQorICAgICAgICB2bS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVUZXJtaW5h
dGVkRXhlY3V0aW9uRXhjZXB0aW9uKCZ2bSkpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVGhyb3dTdGF0aWNFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgaW50MzJfdCByZWZlcmVuY2VFcnJvckZsYWcpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisKKyAgICBTdHJpbmcgbWVzc2FnZSA9IGVycm9yRGVzY3JpcHRpb25Gb3JWYWx1ZShleGVjLCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSktPnZhbHVlKGV4ZWMpOworICAgIGlmIChyZWZl
cmVuY2VFcnJvckZsYWcpCisgICAgICAgIHZtLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVJl
ZmVyZW5jZUVycm9yKGV4ZWMsIG1lc3NhZ2UpKTsKKyAgICBlbHNlCisgICAgICAgIHZtLnRocm93
RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdlKSk7Cit9CisKK3Zv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWJ1ZyhFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3Qg
ZGVidWdIb29rSUQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICB2bS5pbnRlcnByZXRlci0+ZGVi
dWcoZXhlYywgc3RhdGljX2Nhc3Q8RGVidWdIb29rSUQ+KGRlYnVnSG9va0lEKSk7Cit9CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT3B0aW1pemUo
RXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGJ5dGVjb2RlSW5kZXgpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisKKyAgICAvLyBEZWZlciBHQyBzbyB0aGF0IGl0IGRvZXNuJ3QgcnVuIGJldHdlZW4gd2hlbiB3
ZSBlbnRlciBpbnRvIHRoaXMgc2xvdyBwYXRoIGFuZAorICAgIC8vIHdoZW4gd2UgZmlndXJlIG91
dCB0aGUgc3RhdGUgb2Ygb3VyIGNvZGUgYmxvY2suIFRoaXMgcHJldmVudHMgYSBudW1iZXIgb2YK
KyAgICAvLyBhd2t3YXJkIHJlZW50cmFuY3kgc2NlbmFyaW9zLCBpbmNsdWRpbmc6CisgICAgLy8K
KyAgICAvLyAtIFRoZSBvcHRpbWl6ZWQgdmVyc2lvbiBvZiBvdXIgY29kZSBibG9jayBiZWluZyBq
ZXR0aXNvbmVkIGJ5IEdDIHJpZ2h0IGFmdGVyCisgICAgLy8gICB3ZSBjb25jbHVkZWQgdGhhdCB3
ZSB3YW50ZWQgdG8gdXNlIGl0LgorICAgIC8vCisgICAgLy8gLSBBbiBvcHRpbWl6ZWQgdmVyc2lv
biBvZiBvdXIgY29kZSBibG9jayBiZWluZyBpbnN0YWxsZWQganVzdCBhcyB3ZSBkZWNpZGVkCisg
ICAgLy8gICB0aGF0IGl0IHdhc24ndCByZWFkeSB5ZXQuCisgICAgLy8KKyAgICAvLyBUaGlzIHN0
aWxsIGxlYXZlcyB0aGUgZm9sbG93aW5nOiBhbnl0aW1lIHdlIHJldHVybiBmcm9tIGN0aV9vcHRp
bWl6ZSwgd2UgbWF5CisgICAgLy8gR0MsIGFuZCB0aGUgR0MgbWF5IGVpdGhlciBqZXR0aXNvbiB0
aGUgb3B0aW1pemVkIHZlcnNpb24gb2Ygb3VyIGNvZGUgYmxvY2ssCisgICAgLy8gb3IgaXQgbWF5
IGluc3RhbGwgdGhlIG9wdGltaXplZCB2ZXJzaW9uIG9mIG91ciBjb2RlIGJsb2NrIGV2ZW4gdGhv
dWdoIHdlCisgICAgLy8gY29uY2x1ZGVkIHRoYXQgaXQgd2Fzbid0IHJlYWR5IHlldC4KKyAgICAv
LworICAgIC8vIE5vdGUgdGhhdCBqZXR0aXNvbmluZyB3b24ndCBoYXBwZW4gaWYgd2UgYWxyZWFk
eSBpbml0aWF0ZWQgT1NSLCBiZWNhdXNlIGluCisgICAgLy8gdGhhdCBjYXNlIHdlIHdvdWxkIGhh
dmUgYWxyZWFkeSBwbGFudGVkIHRoZSBvcHRpbWl6ZWQgY29kZSBibG9jayBpbnRvIHRoZSBKUwor
ICAgIC8vIHN0YWNrLgorICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAKKyAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworCisgICAgaWYgKGJ5dGVj
b2RlSW5kZXgpIHsKKyAgICAgICAgLy8gSWYgd2UncmUgYXR0ZW1wdGluZyB0byBPU1IgZnJvbSBh
IGxvb3AsIGFzc3VtZSB0aGF0IHRoaXMgc2hvdWxkIGJlCisgICAgICAgIC8vIHNlcGFyYXRlbHkg
b3B0aW1pemVkLgorICAgICAgICBjb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAg
ICBkYXRhTG9nKAorICAgICAgICAgICAgKmNvZGVCbG9jaywgIjogRW50ZXJlZCBvcHRpbWl6ZSB3
aXRoIGJ5dGVjb2RlSW5kZXggPSAiLCBieXRlY29kZUluZGV4LAorICAgICAgICAgICAgIiwgZXhl
Y3V0ZUNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmppdEV4ZWN1dGVDb3VudGVyKCksCisgICAgICAg
ICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPnJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKCksCisgICAgICAgICAgICAiLCBleGl0Q291bnRlciA9ICIpOwor
ICAgICAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKQorICAgICAg
ICAgICAgZGF0YUxvZyhjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPm9zckV4aXRDb3VudGVyKCkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBkYXRhTG9nKCJOL0EiKTsKKyAgICAgICAgZGF0
YUxvZygiXG4iKTsKKyAgICB9CisKKyAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZk9wdGltaXph
dGlvblRocmVzaG9sZFJlYWNoZWQoKSkgeworICAgICAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFBy
ZWRpY3Rpb25zKCk7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAg
ICAgICBkYXRhTG9nKCJDaG9vc2luZyBub3QgdG8gb3B0aW1pemUgIiwgKmNvZGVCbG9jaywgIiB5
ZXQsIGJlY2F1c2UgdGhlIHRocmVzaG9sZCBoYXNuJ3QgYmVlbiByZWFjaGVkLlxuIik7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5tX3Nob3VsZEFs
d2F5c0JlSW5saW5lZCkgeworICAgICAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFByZWRpY3Rpb25z
KCk7CisgICAgICAgIGNvZGVCbG9jay0+b3B0aW1pemVBZnRlcldhcm1VcCgpOworICAgICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiQ2hvb3Npbmcg
bm90IHRvIG9wdGltaXplICIsICpjb2RlQmxvY2ssICIgeWV0LCBiZWNhdXNlIG1fc2hvdWxkQWx3
YXlzQmVJbmxpbmVkID09IHRydWUuXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgLy8gV2UgY2Fubm90IGJlIGluIHRoZSBwcm9jZXNzIG9mIGFzeW5jaHJvbm91cyBjb21waWxh
dGlvbiBhbmQgYWxzbyBoYXZlIGFuIG9wdGltaXplZAorICAgIC8vIHJlcGxhY2VtZW50LgorICAg
IEFTU0VSVCgKKyAgICAgICAgIXZtLndvcmtsaXN0CisgICAgICAgIHx8ICEodm0ud29ya2xpc3Qt
PmNvbXBpbGF0aW9uU3RhdGUoREZHOjpDb21waWxhdGlvbktleShjb2RlQmxvY2ssIERGRzo6REZH
TW9kZSkpICE9IERGRzo6V29ya2xpc3Q6Ok5vdEtub3duCisgICAgICAgICYmIGNvZGVCbG9jay0+
aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkpOworCisgICAgREZHOjpXb3JrbGlzdDo6U3RhdGUg
d29ya2xpc3RTdGF0ZTsKKyAgICBpZiAodm0ud29ya2xpc3QpIHsKKyAgICAgICAgLy8gVGhlIGNh
bGwgdG8gREZHOjpXb3JrbGlzdDo6Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oKSB3aWxsIGNv
bXBsZXRlIGFsbCByZWFkeQorICAgICAgICAvLyAoaS5lLiBjb21waWxlZCkgY29kZSBibG9ja3Mu
IEJ1dCBpZiBpdCBjb21wbGV0ZXMgb3Vycywgd2UgYWxzbyBuZWVkIHRvIGtub3cKKyAgICAgICAg
Ly8gd2hhdCB0aGUgcmVzdWx0IHdhcyBzbyB0aGF0IHdlIGRvbid0IHBsb3cgYWhlYWQgYW5kIGF0
dGVtcHQgT1NSIG9yIGltbWVkaWF0ZQorICAgICAgICAvLyByZW9wdGltaXphdGlvbi4gVGhpcyB3
aWxsIGhhdmUgYWxyZWFkeSBhbHNvIHNldCB0aGUgYXBwcm9wcmlhdGUgSklUIGV4ZWN1dGlvbgor
ICAgICAgICAvLyBjb3VudCB0aHJlc2hvbGQgZGVwZW5kaW5nIG9uIHdoYXQgaGFwcGVuZWQsIHNv
IGlmIHRoZSBjb21waWxhdGlvbiB3YXMgYW55dGhpbmcKKyAgICAgICAgLy8gYnV0IHN1Y2Nlc3Nm
dWwgd2UganVzdCB3YW50IHRvIHJldHVybiBlYXJseS4gU2VlIHRoZSBjYXNlIGZvciB3b3JrbGlz
dFN0YXRlID09CisgICAgICAgIC8vIERGRzo6V29ya2xpc3Q6OkNvbXBpbGVkLCBiZWxvdy4KKyAg
ICAgICAgCisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjb3VsZCBoYXZlIGFsdGVybmF0aXZlbHkg
anVzdCBjYWxsZWQgV29ya2xpc3Q6OmNvbXBpbGF0aW9uU3RhdGUoKQorICAgICAgICAvLyBoZXJl
LCBhbmQgaWYgaXQgcmV0dXJuZWQgQ29tcGlsZWQsIHdlIGNvdWxkIGhhdmUgdGhlbiBjYWxsZWQK
KyAgICAgICAgLy8gY29tcGxldGVBbmRTY2hlZHVsZU9TUigpIGJlbG93LiBCdXQgdGhhdCB3b3Vs
ZCBoYXZlIG1lYW50IHRoYXQgaXQgY291bGQgdGFrZQorICAgICAgICAvLyBsb25nZXIgZm9yIGNv
ZGUgYmxvY2tzIHRvIGJlIGNvbXBsZXRlZDogdGhleSB3b3VsZCBvbmx5IGNvbXBsZXRlIHdoZW4g
KnRoZWlyKgorICAgICAgICAvLyBleGVjdXRpb24gY291bnQgdHJpZ2dlciBmaXJlZDsgYnV0IHRo
YXQgY291bGQgdGFrZSBhIHdoaWxlIHNpbmNlIHRoZSBmaXJpbmcgaXMKKyAgICAgICAgLy8gcmFj
eS4gSXQgY291bGQgYWxzbyBtZWFuIHRoYXQgY29kZSBibG9ja3MgdGhhdCBuZXZlciBydW4gYWdh
aW4gYWZ0ZXIgYmVpbmcKKyAgICAgICAgLy8gY29tcGlsZWQgd291bGQgc2l0IG9uIHRoZSB3b3Jr
bGlzdCB1bnRpbCBuZXh0IEdDLiBUaGF0J3MgZmluZSwgYnV0IGl0J3MKKyAgICAgICAgLy8gcHJv
YmFibHkgYSB3YXN0ZSBvZiBtZW1vcnkuIE91ciBnb2FsIGhlcmUgaXMgdG8gY29tcGxldGUgY29k
ZSBibG9ja3MgYXMgc29vbiBhcworICAgICAgICAvLyBwb3NzaWJsZSBpbiBvcmRlciB0byBtaW5p
bWl6ZSB0aGUgY2hhbmNlcyBvZiB1cyBleGVjdXRpbmcgYmFzZWxpbmUgY29kZSBhZnRlcgorICAg
ICAgICAvLyBvcHRpbWl6ZWQgY29kZSBpcyBhbHJlYWR5IGF2YWlsYWJsZS4KKyAgICAgICAgd29y
a2xpc3RTdGF0ZSA9IHZtLndvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgKKyAg
ICAgICAgICAgIHZtLCBERkc6OkNvbXBpbGF0aW9uS2V5KGNvZGVCbG9jaywgREZHOjpERkdNb2Rl
KSk7CisgICAgfSBlbHNlCisgICAgICAgIHdvcmtsaXN0U3RhdGUgPSBERkc6OldvcmtsaXN0OjpO
b3RLbm93bjsKKworICAgIGlmICh3b3JrbGlzdFN0YXRlID09IERGRzo6V29ya2xpc3Q6OkNvbXBp
bGluZykgeworICAgICAgICAvLyBXZSBjYW5ub3QgYmUgaW4gdGhlIHByb2Nlc3Mgb2YgYXN5bmNo
cm9ub3VzIGNvbXBpbGF0aW9uIGFuZCBhbHNvIGhhdmUgYW4gb3B0aW1pemVkCisgICAgICAgIC8v
IHJlcGxhY2VtZW50LgorICAgICAgICBSRUxFQVNFX0FTU0VSVCghY29kZUJsb2NrLT5oYXNPcHRp
bWl6ZWRSZXBsYWNlbWVudCgpKTsKKyAgICAgICAgY29kZUJsb2NrLT5zZXRPcHRpbWl6YXRpb25U
aHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25EZWZlcnJlZCk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICh3b3JrbGlzdFN0YXRlID09IERGRzo6
V29ya2xpc3Q6OkNvbXBpbGVkKSB7CisgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW4gb3B0
aW1pemVkIHJlcGxhY2VtZW50IGJ1dCB3ZSBkaWQganVzdCBnZXQgY29tcGlsZWQsIHRoZW4KKyAg
ICAgICAgLy8gdGhlIGNvbXBpbGF0aW9uIGZhaWxlZCBvciB3YXMgaW52YWxpZGF0ZWQsIGluIHdo
aWNoIGNhc2UgdGhlIGV4ZWN1dGlvbiBjb3VudAorICAgICAgICAvLyB0aHJlc2hvbGRzIGhhdmUg
YWxyZWFkeSBiZWVuIHNldCBhcHByb3ByaWF0ZWx5IGJ5CisgICAgICAgIC8vIENvZGVCbG9jazo6
c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KCkgYW5kIHdl
IGhhdmUKKyAgICAgICAgLy8gbm90aGluZyBsZWZ0IHRvIGRvLgorICAgICAgICBpZiAoIWNvZGVC
bG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworICAgICAgICAgICAgY29kZUJsb2Nr
LT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOworICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb2RlIGJsb2NrICIsICpjb2RlQmxv
Y2ssICIgd2FzIGNvbXBpbGVkIGJ1dCBpdCBkb2Vzbid0IGhhdmUgYW4gb3B0aW1pemVkIHJlcGxh
Y2VtZW50LlxuIik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisgICAgICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmlu
ZyBPU1IgIiwgKmNvZGVCbG9jaywgIiAtPiAiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAi
LlxuIik7CisgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LCB0
aGVuIGl0IG11c3QgYmUgdGhlIGNhc2UgdGhhdCB3ZSBlbnRlcmVkCisgICAgICAgIC8vIGN0aV9v
cHRpbWl6ZSBmcm9tIGEgbG9vcC4gVGhhdCdzIGJlY2F1c2UgaWYgdGhlcmUncyBhbiBvcHRpbWl6
ZWQgcmVwbGFjZW1lbnQsCisgICAgICAgIC8vIHRoZW4gYWxsIGNhbGxzIHRvIHRoaXMgZnVuY3Rp
b24gd2lsbCBiZSByZWxpbmtlZCB0byB0aGUgcmVwbGFjZW1lbnQgYW5kIHNvCisgICAgICAgIC8v
IHRoZSBwcm9sb2d1ZSBPU1Igd2lsbCBuZXZlciBmaXJlLgorICAgICAgICAKKyAgICAgICAgLy8g
VGhpcyBpcyBhbiBpbnRlcmVzdGluZyB0aHJlc2hvbGQgY2hlY2suIENvbnNpZGVyIHRoYXQgYSBm
dW5jdGlvbiBPU1IgZXhpdHMKKyAgICAgICAgLy8gaW4gdGhlIG1pZGRsZSBvZiBhIGxvb3AsIHdo
aWxlIGhhdmluZyBhIHJlbGF0aXZlbHkgbG93IGV4aXQgY291bnQuIFRoZSBleGl0CisgICAgICAg
IC8vIHdpbGwgcmVzZXQgdGhlIGV4ZWN1dGlvbiBjb3VudGVyIHRvIHNvbWUgdGFyZ2V0IHRocmVz
aG9sZCwgbWVhbmluZyB0aGF0IHRoaXMKKyAgICAgICAgLy8gY29kZSB3b24ndCBiZSByZWFjaGVk
IHVudGlsIHRoYXQgbG9vcCBoZWF0cyB1cCBmb3IgPj0xMDAwIGV4ZWN1dGlvbnMuIEJ1dCB0aGVu
CisgICAgICAgIC8vIHdlIGRvIGEgc2Vjb25kIGNoZWNrIGhlcmUsIHRvIHNlZSBpZiB3ZSBzaG91
bGQgZWl0aGVyIHJlb3B0aW1pemUsIG9yIGp1c3QKKyAgICAgICAgLy8gYXR0ZW1wdCBPU1IgZW50
cnkuIEhlbmNlIGl0IG1pZ2h0IGV2ZW4gYmUgY29ycmVjdCBmb3IKKyAgICAgICAgLy8gc2hvdWxk
UmVvcHRpbWl6ZUZyb21Mb29wTm93KCkgdG8gYWx3YXlzIHJldHVybiB0cnVlLiBCdXQgd2UgbWFr
ZSBpdCBkbyBzb21lCisgICAgICAgIC8vIGFkZGl0aW9uYWwgY2hlY2tpbmcgYW55d2F5LCB0byBy
ZWR1Y2UgdGhlIGFtb3VudCBvZiByZWNvbXBpbGF0aW9uIHRocmFzaGluZy4KKyAgICAgICAgaWYg
KGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c2hvdWxkUmVvcHRpbWl6ZUZyb21Mb29wTm93KCkp
IHsKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAiVHJpZ2dlcmluZyByZW9wdGltaXph
dGlvbiBvZiAiLCAqY29kZUJsb2NrLAorICAgICAgICAgICAgICAgICAgICAiKCIsICpjb2RlQmxv
Y2stPnJlcGxhY2VtZW50KCksICIpIChpbiBsb29wKS5cbiIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKCk7CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghY29kZUJsb2NrLT5zaG91bGRP
cHRpbWl6ZU5vdygpKSB7CisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7
CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIkRlbGF5aW5n
IG9wdGltaXphdGlvbiBmb3IgIiwgKmNvZGVCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgIiBi
ZWNhdXNlIG9mIGluc3VmZmljaWVudCBwcm9maWxpbmcuXG4iKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIlRyaWdnZXJpbmcgb3B0aW1pemVkIGNv
bXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICJcbiIpOworCisgICAgICAgIHVuc2lnbmVkIG51
bVZhcnNXaXRoVmFsdWVzOworICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAg
IG51bVZhcnNXaXRoVmFsdWVzID0gY29kZUJsb2NrLT5tX251bVZhcnM7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gMDsKKyAgICAgICAgT3BlcmFuZHM8SlNW
YWx1ZT4gbXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFy
c1dpdGhWYWx1ZXMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVW
YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRs
ZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBpZiAob3BlcmFuZElzQXJn
dW1lbnQob3BlcmFuZCkKKyAgICAgICAgICAgICAgICAmJiAhVmlydHVhbFJlZ2lzdGVyKG9wZXJh
bmQpLnRvQXJndW1lbnQoKQorICAgICAgICAgICAgICAgICYmIGNvZGVCbG9jay0+Y29kZVR5cGUo
KSA9PSBGdW5jdGlvbkNvZGUKKyAgICAgICAgICAgICAgICAmJiBjb2RlQmxvY2stPnNwZWNpYWxp
emF0aW9uS2luZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpIHsKKyAgICAgICAgICAgICAgICAvLyBV
Z2guIElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRoZSAndGhpcycgYXJndW1lbnQgbWF5IGhv
bGQgZ2FyYmFnZS4gSXQgd2lsbAorICAgICAgICAgICAgICAgIC8vIGFsc28gbmV2ZXIgYmUgdXNl
ZC4gSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB3ZSBwdXQgaW50byB0aGUgdmFsdWUgZm9yIHRoaXMs
CisgICAgICAgICAgICAgICAgLy8gYnV0IGl0IGhhcyB0byBiZSBhbiBhY3R1YWwgdmFsdWUgdGhh
dCBjYW4gYmUgZ3Jva2tlZCBieSBzdWJzZXF1ZW50IERGRyBwYXNzZXMsCisgICAgICAgICAgICAg
ICAgLy8gc28gd2Ugc2FuaXRpemUgaXQgaGVyZSBieSB0dXJuaW5nIGl0IGludG8gVW5kZWZpbmVk
LgorICAgICAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBqc1VuZGVmaW5lZCgpOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9
IGV4ZWMtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOworICAgICAgICB9CisKKyAgICAg
ICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gREZHOjpjb21waWxlKAorICAgICAgICAgICAg
dm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgREZHOjpERkdNb2RlLCBieXRl
Y29kZUluZGV4LAorICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlcywgSklUVG9ERkdEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpLAorICAgICAgICAgICAgdm0uZW5zdXJlV29y
a2xpc3QoKSk7CisgICAgICAgIAorICAgICAgICBpZiAocmVzdWx0ICE9IENvbXBpbGF0aW9uU3Vj
Y2Vzc2Z1bCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBDb2RlQmxv
Y2sqIG9wdGltaXplZENvZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKKyAgICBB
U1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG9wdGltaXplZENvZGVCbG9jay0+aml0VHlw
ZSgpKSk7CisgICAgCisgICAgaWYgKHZvaWQqIGFkZHJlc3MgPSBERkc6OnByZXBhcmVPU1JFbnRy
eShleGVjLCBvcHRpbWl6ZWRDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKSB7CisgICAgICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAg
ICAgICAgICAgIlBlcmZvcm1pbmcgT1NSICIsICpjb2RlQmxvY2ssICIgLT4gIiwgKm9wdGltaXpl
ZENvZGVCbG9jaywgIiwgYWRkcmVzcyAiLAorICAgICAgICAgICAgICAgIFJhd1BvaW50ZXIoT1VS
X1JFVFVSTl9BRERSRVNTKSwgIiAtPiAiLCBSYXdQb2ludGVyKGFkZHJlc3MpLCAiLlxuIik7Cisg
ICAgICAgIH0KKworICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplU29vbigpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KGFkZHJlc3MpOworICAgIH0KKworICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJPcHRp
bWl6aW5nICIsICpjb2RlQmxvY2ssICIgLT4gIiwgKmNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwK
KyAgICAgICAgICAgICIgc3VjY2VlZGVkLCBPU1IgZmFpbGVkLCBhZnRlciBhIGRlbGF5IG9mICIs
CisgICAgICAgICAgICBjb2RlQmxvY2stPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpLCAiLlxu
Iik7CisgICAgfQorCisgICAgLy8gQ291bnQgdGhlIE9TUiBmYWlsdXJlIGFzIGEgc3BlY3VsYXRp
b24gZmFpbHVyZS4gSWYgdGhpcyBoYXBwZW5zIGEgbG90LCB0aGVuCisgICAgLy8gcmVvcHRpbWl6
ZS4KKyAgICBvcHRpbWl6ZWRDb2RlQmxvY2stPmNvdW50T1NSRXhpdCgpOworCisgICAgLy8gV2Ug
YXJlIGEgbG90IG1vcmUgY29uc2VydmF0aXZlIGFib3V0IHRyaWdnZXJpbmcgcmVvcHRpbWl6YXRp
b24gYWZ0ZXIgT1NSIGZhaWx1cmUgdGhhbgorICAgIC8vIGJlZm9yZSBpdC4gSWYgd2UgZW50ZXIg
dGhlIG9wdGltaXplX2Zyb21fbG9vcCB0cmlnZ2VyIHdpdGggYSBidWNrZXQgZnVsbCBvZiBmYWls
CisgICAgLy8gYWxyZWFkeSwgdGhlbiB3ZSByZWFsbHkgd291bGQgbGlrZSB0byByZW9wdGltaXpl
IGltbWVkaWF0ZWx5LiBCdXQgdGhpcyBjYXNlIGNvdmVycworICAgIC8vIHNvbWV0aGluZyBlbHNl
OiB0aGVyZSB3ZXJlbid0IG1hbnkgKG9yIGFueSkgc3BlY3VsYXRpb24gZmFpbHVyZXMgYmVmb3Jl
LCBidXQgd2UganVzdAorICAgIC8vIGZhaWxlZCB0byBlbnRlciB0aGUgc3BlY3VsYXRpdmUgY29k
ZSBiZWNhdXNlIHNvbWUgdmFyaWFibGUgaGFkIHRoZSB3cm9uZyB2YWx1ZSBvcgorICAgIC8vIGJl
Y2F1c2UgdGhlIE9TUiBjb2RlIGRlY2lkZWQgZm9yIGFueSBzcHVyaW91cyByZWFzb24gdGhhdCBp
dCBkaWQgbm90IHdhbnQgdG8gT1NSCisgICAgLy8gcmlnaHQgbm93LiBTbywgd2Ugb25seSB0cmln
Z2VyIHJlb3B0aW1pemF0aW9uIG9ubHkgdXBvbiB0aGUgbW9yZSBjb25zZXJ2YXRpdmUgKG5vbi1s
b29wKQorICAgIC8vIHJlb3B0aW1pemF0aW9uIHRyaWdnZXIuCisgICAgaWYgKG9wdGltaXplZENv
ZGVCbG9jay0+c2hvdWxkUmVvcHRpbWl6ZU5vdygpKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgIlRy
aWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAtPiAiLAorICAgICAg
ICAgICAgICAgICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIgKGFmdGVyIE9TUiBmYWlsKS5c
biIpOworICAgICAgICB9CisgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZSgpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBPU1IgZmFpbGVkIHRoaXMgdGltZSwgYnV0IGl0
IG1pZ2h0IHN1Y2NlZWQgbmV4dCB0aW1lISBMZXQgdGhlIGNvZGUgcnVuIGEgYml0CisgICAgLy8g
bG9uZ2VyIGFuZCB0aGVuIHRyeSBhZ2Fpbi4KKyAgICBjb2RlQmxvY2stPm9wdGltaXplQWZ0ZXJX
YXJtVXAoKTsKKyAgICAKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCit2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJbmRleChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRBcnJheVZhbHVlLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBKU1ZhbHVlIGFycmF5VmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEFycmF5VmFsdWUpOworICAgIEFTU0VSVChpc0pTQXJyYXkoYXJy
YXlWYWx1ZSkpOworICAgIGFzQXJyYXkoYXJyYXlWYWx1ZSktPnB1dERpcmVjdEluZGV4KGV4ZWMs
IGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKKyNpZiBVU0UoSlNW
QUxVRTY0KQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEdldHRlclNldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPYmplY3RWYWx1ZSwgSWRlbnRpZmll
ciogaWRlbnRpZmllciwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEdldHRlclZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkU2V0dGVyVmFsdWUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBBU1NF
UlQoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPYmplY3RWYWx1ZSkuaXNPYmplY3QoKSk7CisgICAg
SlNPYmplY3QqIGJhc2VPYmogPSBhc09iamVjdChKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9iamVj
dFZhbHVlKSk7CisKKyAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpj
cmVhdGUodm0pOworCisgICAgSlNWYWx1ZSBnZXR0ZXIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZEdldHRlclZhbHVlKTsKKyAgICBKU1ZhbHVlIHNldHRlciA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkU2V0dGVyVmFsdWUpOworICAgIEFTU0VSVChnZXR0ZXIuaXNPYmplY3QoKSB8fCBnZXR0ZXIu
aXNVbmRlZmluZWQoKSk7CisgICAgQVNTRVJUKHNldHRlci5pc09iamVjdCgpIHx8IHNldHRlci5p
c1VuZGVmaW5lZCgpKTsKKyAgICBBU1NFUlQoZ2V0dGVyLmlzT2JqZWN0KCkgfHwgc2V0dGVyLmlz
T2JqZWN0KCkpOworCisgICAgaWYgKCFnZXR0ZXIuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgYWNj
ZXNzb3ItPnNldEdldHRlcih2bSwgYXNPYmplY3QoZ2V0dGVyKSk7CisgICAgaWYgKCFzZXR0ZXIu
aXNVbmRlZmluZWQoKSkKKyAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcih2bSwgYXNPYmplY3Qo
c2V0dGVyKSk7CisgICAgYmFzZU9iai0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgKmlkZW50aWZp
ZXIsIGFjY2Vzc29yLCBBY2Nlc3Nvcik7Cit9CisjZWxzZQordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEdldHRlclNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb2JqZWN0LCBJ
ZGVudGlmaWVyKiBpZGVudGlmaWVyLCBKU0NlbGwqIGdldHRlciwgSlNDZWxsKiBzZXR0ZXIpCit7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CisKKyAgICBBU1NFUlQob2JqZWN0ICYmIG9iamVjdC0+aXNPYmplY3Qo
KSk7CisgICAgSlNPYmplY3QqIGJhc2VPYmogPSBvYmplY3QtPmdldE9iamVjdCgpOworCisgICAg
R2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKHZtKTsKKworICAg
IEFTU0VSVCghZ2V0dGVyIHx8IGdldHRlci0+aXNPYmplY3QoKSk7CisgICAgQVNTRVJUKCFzZXR0
ZXIgfHwgc2V0dGVyLT5pc09iamVjdCgpKTsKKyAgICBBU1NFUlQoZ2V0dGVyIHx8IHNldHRlcik7
CisKKyAgICBpZiAoZ2V0dGVyKQorICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKHZtLCBnZXR0
ZXItPmdldE9iamVjdCgpKTsKKyAgICBpZiAoc2V0dGVyKQorICAgICAgICBhY2Nlc3Nvci0+c2V0
U2V0dGVyKHZtLCBzZXR0ZXItPmdldE9iamVjdCgpKTsKKyAgICBiYXNlT2JqLT5wdXREaXJlY3RB
Y2Nlc3NvcihleGVjLCAqaWRlbnRpZmllciwgYWNjZXNzb3IsIEFjY2Vzc29yKTsKK30KKyNlbmRp
ZgorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHVzaE5hbWVTY29wZShFeGVjU3RhdGUq
IGV4ZWMsIElkZW50aWZpZXIqIGlkZW50aWZpZXIsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgaW50MzJfdCBhdHRpYnV0ZXMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBKU05hbWVTY29w
ZSogc2NvcGUgPSBKU05hbWVTY29wZTo6Y3JlYXRlKGV4ZWMsICppZGVudGlmaWVyLCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgYXR0aWJ1dGVzKTsKKworICAgIGV4ZWMtPnNldFNjb3Bl
KHNjb3BlKTsKK30KKwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1c2hXaXRoU2NvcGUo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisKKyAgICBKU09iamVjdCogbyA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
LnRvT2JqZWN0KGV4ZWMpOworICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZXhlYy0+c2V0U2NvcGUoSlNXaXRoU2NvcGU6OmNyZWF0ZShleGVjLCBvKSk7Cit9
CisKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3BTY29wZShFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBleGVjLT5zZXRTY29wZShleGVjLT5zY29wZSgpLT5u
ZXh0KCkpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHJvZmlsZURpZENhbGwo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisKKyAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gdm0uZW5hYmxlZFBy
b2ZpbGVyKCkpCisgICAgICAgIHByb2ZpbGVyLT5kaWRFeGVjdXRlKGV4ZWMsIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpKTsKK30KKwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBy
b2ZpbGVXaWxsQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKworICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIg
PSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICAgICAgcHJvZmlsZXItPndpbGxFeGVjdXRlKGV4
ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKwogRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25DaGVja0hhc0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZh
bCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKQEAgLTgzNyw2ICsxMjEwLDI1IEBAIEpT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBcmcKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZkFjdGl2YXRpb24oRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIGFjdGl2YXRpb25DZWxsKQoreworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
CisgICAgQVNTRVJUKGV4ZWMtPmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkpOwor
ICAgIGpzQ2FzdDxKU0FjdGl2YXRpb24qPihhY3RpdmF0aW9uQ2VsbCktPnRlYXJPZmYodm0pOwor
fQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZkFyZ3VtZW50cyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogYXJndW1lbnRzQ2VsbCwgSlNDZWxsKiBhY3RpdmF0aW9uQ2VsbCkK
K3sKKyAgICBBU1NFUlQoZXhlYy0+Y29kZUJsb2NrKCktPnVzZXNBcmd1bWVudHMoKSk7CisgICAg
aWYgKGFjdGl2YXRpb25DZWxsKSB7CisgICAgICAgIGpzQ2FzdDxBcmd1bWVudHMqPihhcmd1bWVu
dHNDZWxsKS0+ZGlkVGVhck9mZkFjdGl2YXRpb24oZXhlYywganNDYXN0PEpTQWN0aXZhdGlvbio+
KGFjdGl2YXRpb25DZWxsKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAganNDYXN0PEFy
Z3VtZW50cyo+KGFyZ3VtZW50c0NlbGwpLT50ZWFyT2ZmKGV4ZWMpOworfQorCiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlbGV0ZUJ5SWQoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgY29uc3QgSWRlbnRpZmllciogaWRlbnRpZmllcikK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE1NzQ1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIElkYzogY29uc3QgSWRlbnRpZmllcioKICAgICBKOiBF
bmNvZGVkSlNWYWx1ZQogICAgIEpjcDogY29uc3QgSlNWYWx1ZSoKKyAgICBKc2E6IEpTQWN0aXZh
dGlvbioKICAgICBKc3M6IEpTU3RyaW5nKgogICAgIE86IEpTT2JqZWN0KgogICAgIFA6IHBvaW50
ZXIgKGNoYXIqKQpAQCAtMTIwLDIxICsxMjEsMzAgQEAgdHlwZWRlZiBzaXplX3QgSklUX09QRVJB
VElPTiAoKlNfSklUT3BlcgogdHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3Bl
cmF0aW9uX0VPSnNzKShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTU3RyaW5nKik7CiB0eXBlZGVm
IHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19KSVRPcGVyYXRpb25fSikoRW5jb2RlZEpTVmFsdWUp
OwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FKShFeGVjU3Rh
dGUqKTsKLXR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRU9aRCko
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90LCBkb3VibGUpOwotdHlwZWRlZiB2b2lkIEpJ
VF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FT1pKKShFeGVjU3RhdGUqLCBKU09iamVjdCos
IGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgq
Vl9KSVRPcGVyYXRpb25fRUNiKShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqKTsKIHR5cGVkZWYgdm9p
ZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCop
OwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQ2IpKEV4ZWNT
dGF0ZSosIENvZGVCbG9jayopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9w
ZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwogdHlwZWRlZiB2b2lk
IEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQ0ljZikoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgSW5saW5lQ2FsbEZyYW1lKik7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklU
T3BlcmF0aW9uX0VDSUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBJZGVudGlmaWVyKiwgSlNDZWxs
KiwgSlNDZWxsKik7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9u
X0VDQ0ljZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7
CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VDSkopKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVm
IHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VDWikoRXhlY1N0YXRlKiwgSlND
ZWxsKiwgaW50MzJfdCk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0
aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Cit0eXBlZGVmIHZvaWQgSklU
X09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VJZEpaKShFeGVjU3RhdGUqLCBJZGVudGlmaWVy
KiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04g
KCpWX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRl
ZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FSkNJKShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwordHlwZWRlZiB2b2lkIEpJVF9P
UEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FSklkSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBJZGVudGlmaWVyKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUpKSSkoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKik7CiB0eXBlZGVmIHZv
aWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VKSkopKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lk
IEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FSlBQKShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSwgdm9pZCosIHZvaWQqKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9K
SVRPcGVyYXRpb25fRUpaSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIEVu
Y29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRp
b25fRUpaKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7Cit0eXBlZGVmIHZv
aWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VPWkQpKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgaW50MzJfdCwgZG91YmxlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9K
SVRPcGVyYXRpb25fRU9aSikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90LCBFbmNvZGVk
SlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VQ
YykoRXhlY1N0YXRlKiwgSW5zdHJ1Y3Rpb24qKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9O
ICgqVl9KSVRPcGVyYXRpb25fRVBaSikoRXhlY1N0YXRlKiwgdm9pZCosIGludDMyX3QsIEVuY29k
ZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25f
VykoV2F0Y2hwb2ludFNldCopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9w
ZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIGNoYXIqIEpJVF9PUEVS
QVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgY2hhciogSklU
X09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIHR5
cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VKUykoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIHNpemVfdCk7CkBAIC0xNDksNiArMTU5LDcgQEAgdHlwZWRlZiBj
aGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYQogdHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFU
SU9OICgqUF9KSVRPcGVyYXRpb25fRVN0UFMpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHZvaWQq
LCBzaXplX3QpOwogdHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25f
RVN0U1MpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHNpemVfdCwgc2l6ZV90KTsKIHR5cGVkZWYg
Y2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VTdFopKEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSosIGludDMyX3QpOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRP
cGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwogdHlwZWRlZiBjaGFyKiBKSVRfT1BF
UkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRVpaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90
KTsKIHR5cGVkZWYgU3RyaW5nSW1wbCogSklUX09QRVJBVElPTiAoKklfSklUT3BlcmF0aW9uX0VK
c3MpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7CiB0eXBlZGVmIEpTU3RyaW5nKiBKSVRfT1BFUkFU
SU9OICgqSnNzX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CkBAIC0yMjUs
MTAgKzIzNiwxMCBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4CiBj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqKSBX
VEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1
Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLXNpemVfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLXNpemVf
dCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVS
TkFMOwotc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MikgV1RGX0lOVEVSTkFMOwotc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdy
ZWF0ZXJFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVM
ZXNzRXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5U
RVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK3Np
emVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiBzaXplX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0SlNWYWx1ZVRvQm9vbGVhbihFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ29tcGFyZUVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkg
V1RGX0lOVEVSTkFMOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0yNDMsMTAgKzI1NCwyOCBAQCBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5lCiBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdU
Rl9JTlRFUk5BTDsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHAoRXhlY1N0YXRlKiwgdm9pZCopIFdURl9JTlRFUk5B
TDsKLQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhbmRsZVdhdGNoZG9nVGltZXIoRXhl
Y1N0YXRlKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93
U3RhdGljRXJyb3IoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpIFdURl9JTlRF
Uk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWJ1ZyhFeGVjU3RhdGUqLCBpbnQz
Ml90KSBXVEZfSU5URVJOQUw7CisjaWYgRU5BQkxFKERGR19KSVQpCitjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk9wdGltaXplKEV4ZWNTdGF0ZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsK
KyNlbmRpZgordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SW5kZXgoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKKyNpZiBVU0UoSlNW
QUxVRTY0KQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEdldHRlclNldHRlcihFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSWRlbnRpZmllciosIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworI2Vsc2UKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRHZXR0ZXJTZXR0ZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSWRlbnRpZmllciosIEpT
Q2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKKyNlbmRpZgordm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1c2hOYW1lU2NvcGUoRXhlY1N0YXRlKiwgSWRlbnRpZmllciosIEVuY29kZWRK
U1ZhbHVlLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHVzaFdpdGhTY29wZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFM
Owordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBvcFNjb3BlKEV4ZWNTdGF0ZSopIFdURl9J
TlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qcm9maWxlRGlkQ2FsbChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblByb2ZpbGVXaWxsQ2FsbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RG
X0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DaGVja0hh
c0luc3RhbmNlKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBiYXNl
VmFsKSBXVEZfSU5URVJOQUw7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRl
QWN0aXZhdGlvbihFeGVjU3RhdGUqLCBpbnQzMl90IG9mZnNldCkgV1RGX0lOVEVSTkFMOwogSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFyZ3VtZW50cyhFeGVjU3RhdGUqKSBX
VEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZkFjdGl2YXRp
b24oRXhlY1N0YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblRlYXJPZmZBcmd1bWVudHMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikg
V1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWxl
dGVCeUlkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGJhc2UsIGNvbnN0IElkZW50aWZpZXIq
KSBXVEZfSU5URVJOQUw7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0UE5hbWVz
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25JbnN0YW5jZU9mKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBwcm90bykgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZp
c2lvbiAxNTc0NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMiArNTcsMTAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X2luZGV4KEluc3RydWN0aQogICAgIGludCBiYXNlID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7Ci0gICAgCi0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29w
X3B1dF9ieV9pbmRleCk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoYmFzZSk7Ci0gICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKHByb3BlcnR5KSk7Ci0gICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQodmFsdWUpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsKKworICAgIGVtaXRMb2Fk
KGJhc2UsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QzLCByZWdUMik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRCeUluZGV4LCByZWdUMSwgcmVnVDAsIHBy
b3BlcnR5LCByZWdUMywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVy
X3NldHRlcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzEsMTMgKzY5LDEx
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyKEluc3QKICAgICBpbnQgcHJv
cGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIGludCBnZXR0ZXIg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIGludCBzZXR0ZXIgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwotICAgIAotICAgIEpJVFN0dWJDYWxsIHN0dWJD
YWxsKHRoaXMsIGN0aV9vcF9wdXRfZ2V0dGVyX3NldHRlcik7Ci0gICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQoYmFzZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cigmbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQoZ2V0dGVyKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChzZXR0ZXIpOwotICAgIHN0dWJD
YWxsLmNhbGwoKTsKKworICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CisgICAgZW1p
dExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOworICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIs
IHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVn
VDEsICZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSksIHJlZ1QzLCByZWdUNCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE1NzQ1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODksMjEgKzQ4OSwx
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjCiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV9pbmRleChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXRfYnlfaW5kZXgpOwot
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQsIHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kLCByZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRC
eUluZGV4LCByZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDEpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcihJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9v
cF9wdXRfZ2V0dGVyX3NldHRlcik7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDIpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KFRydXN0ZWRJbW1QdHIoJm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZCwgcmVnVDIpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1
cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQsIHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5jYWxs
KCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QwLCAmbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCksIHJlZ1QxLCByZWdUMik7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9u
IDE1NzQ1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjgsMTggKzM2OCw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRp
YyBUIHRocm93RXhjZXAKICNkZWZpbmUgREVGSU5FX1NUVUJfRlVOQ1RJT04ocnR5cGUsIG9wKSBy
dHlwZSBKSVRfU1RVQiBjdGlfIyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04pCiAjZW5kaWYKIAot
REVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgaGFuZGxlX3dhdGNoZG9nX3RpbWVyKQotewotICAg
IFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAgIFZNKiB2bSA9IHN0YWNrRnJhbWUudm07
Ci0gICAgaWYgKFVOTElLRUxZKHZtLT53YXRjaGRvZy5kaWRGaXJlKGNhbGxGcmFtZSkpKSB7Ci0g
ICAgICAgIHZtLT50aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIGNyZWF0ZVRlcm1pbmF0ZWRFeGVj
dXRpb25FeGNlcHRpb24odm0pKTsKLSAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OX0FUX0VORCgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNv
ZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5X2lkX2dlbmVyaWMpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNL
X0ZSQU1FKHN0YWNrRnJhbWUpOwpAQCAtNjU5LDI0MiArNjQ3LDYgQEAgREVGSU5FX1NUVUJfRlVO
Q1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKIH0KIAotI2lmIEVOQUJMRShERkdfSklUKQotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3B0aW1pemUpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwot
ICAgIAotICAgIC8vIERlZmVyIEdDIHNvIHRoYXQgaXQgZG9lc24ndCBydW4gYmV0d2VlbiB3aGVu
IHdlIGVudGVyIGludG8gdGhpcyBzbG93IHBhdGggYW5kCi0gICAgLy8gd2hlbiB3ZSBmaWd1cmUg
b3V0IHRoZSBzdGF0ZSBvZiBvdXIgY29kZSBibG9jay4gVGhpcyBwcmV2ZW50cyBhIG51bWJlciBv
ZgotICAgIC8vIGF3a3dhcmQgcmVlbnRyYW5jeSBzY2VuYXJpb3MsIGluY2x1ZGluZzoKLSAgICAv
LwotICAgIC8vIC0gVGhlIG9wdGltaXplZCB2ZXJzaW9uIG9mIG91ciBjb2RlIGJsb2NrIGJlaW5n
IGpldHRpc29uZWQgYnkgR0MgcmlnaHQgYWZ0ZXIKLSAgICAvLyAgIHdlIGNvbmNsdWRlZCB0aGF0
IHdlIHdhbnRlZCB0byB1c2UgaXQuCi0gICAgLy8KLSAgICAvLyAtIEFuIG9wdGltaXplZCB2ZXJz
aW9uIG9mIG91ciBjb2RlIGJsb2NrIGJlaW5nIGluc3RhbGxlZCBqdXN0IGFzIHdlIGRlY2lkZWQK
LSAgICAvLyAgIHRoYXQgaXQgd2Fzbid0IHJlYWR5IHlldC4KLSAgICAvLwotICAgIC8vIFRoaXMg
c3RpbGwgbGVhdmVzIHRoZSBmb2xsb3dpbmc6IGFueXRpbWUgd2UgcmV0dXJuIGZyb20gY3RpX29w
dGltaXplLCB3ZSBtYXkKLSAgICAvLyBHQywgYW5kIHRoZSBHQyBtYXkgZWl0aGVyIGpldHRpc29u
IHRoZSBvcHRpbWl6ZWQgdmVyc2lvbiBvZiBvdXIgY29kZSBibG9jaywKLSAgICAvLyBvciBpdCBt
YXkgaW5zdGFsbCB0aGUgb3B0aW1pemVkIHZlcnNpb24gb2Ygb3VyIGNvZGUgYmxvY2sgZXZlbiB0
aG91Z2ggd2UKLSAgICAvLyBjb25jbHVkZWQgdGhhdCBpdCB3YXNuJ3QgcmVhZHkgeWV0LgotICAg
IC8vCi0gICAgLy8gTm90ZSB0aGF0IGpldHRpc29uaW5nIHdvbid0IGhhcHBlbiBpZiB3ZSBhbHJl
YWR5IGluaXRpYXRlZCBPU1IsIGJlY2F1c2UgaW4KLSAgICAvLyB0aGF0IGNhc2Ugd2Ugd291bGQg
aGF2ZSBhbHJlYWR5IHBsYW50ZWQgdGhlIG9wdGltaXplZCBjb2RlIGJsb2NrIGludG8gdGhlIEpT
Ci0gICAgLy8gc3RhY2suCi0gICAgRGVmZXJHQyBkZWZlckdDKHN0YWNrRnJhbWUudm0tPmhlYXAp
OwotICAgIAotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7
Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAg
IFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKLSAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0g
c3RhY2tGcmFtZS5hcmdzWzBdLmludDMyKCk7Ci0KLSAgICBpZiAoYnl0ZWNvZGVJbmRleCkgewot
ICAgICAgICAvLyBJZiB3ZSdyZSBhdHRlbXB0aW5nIHRvIE9TUiBmcm9tIGEgbG9vcCwgYXNzdW1l
IHRoYXQgdGhpcyBzaG91bGQgYmUKLSAgICAgICAgLy8gc2VwYXJhdGVseSBvcHRpbWl6ZWQuCi0g
ICAgICAgIGNvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICB9
Ci0gICAgCi0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewotICAgICAgICBkYXRhTG9n
KAotICAgICAgICAgICAgKmNvZGVCbG9jaywgIjogRW50ZXJlZCBvcHRpbWl6ZSB3aXRoIGJ5dGVj
b2RlSW5kZXggPSAiLCBieXRlY29kZUluZGV4LAotICAgICAgICAgICAgIiwgZXhlY3V0ZUNvdW50
ZXIgPSAiLCBjb2RlQmxvY2stPmppdEV4ZWN1dGVDb3VudGVyKCksCi0gICAgICAgICAgICAiLCBv
cHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPnJlb3B0aW1pemF0aW9uUmV0
cnlDb3VudGVyKCksCi0gICAgICAgICAgICAiLCBleGl0Q291bnRlciA9ICIpOwotICAgICAgICBp
ZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKQotICAgICAgICAgICAgZGF0
YUxvZyhjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPm9zckV4aXRDb3VudGVyKCkpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBkYXRhTG9nKCJOL0EiKTsKLSAgICAgICAgZGF0YUxvZygiXG4i
KTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZk9wdGltaXphdGlvblRocmVz
aG9sZFJlYWNoZWQoKSkgewotICAgICAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFByZWRpY3Rpb25z
KCk7Ci0gICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICBkYXRh
TG9nKCJDaG9vc2luZyBub3QgdG8gb3B0aW1pemUgIiwgKmNvZGVCbG9jaywgIiB5ZXQsIGJlY2F1
c2UgdGhlIHRocmVzaG9sZCBoYXNuJ3QgYmVlbiByZWFjaGVkLlxuIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGNvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGlu
ZWQpIHsKLSAgICAgICAgY29kZUJsb2NrLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOwotICAgICAg
ICBjb2RlQmxvY2stPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICAgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIkNob29zaW5nIG5vdCB0byBvcHRp
bWl6ZSAiLCAqY29kZUJsb2NrLCAiIHlldCwgYmVjYXVzZSBtX3Nob3VsZEFsd2F5c0JlSW5saW5l
ZCA9PSB0cnVlLlxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgLy8gV2Ug
Y2Fubm90IGJlIGluIHRoZSBwcm9jZXNzIG9mIGFzeW5jaHJvbm91cyBjb21waWxhdGlvbiBhbmQg
YWxzbyBoYXZlIGFuIG9wdGltaXplZAotICAgIC8vIHJlcGxhY2VtZW50LgotICAgIEFTU0VSVCgK
LSAgICAgICAgIXZtLndvcmtsaXN0Ci0gICAgICAgIHx8ICEodm0ud29ya2xpc3QtPmNvbXBpbGF0
aW9uU3RhdGUoREZHOjpDb21waWxhdGlvbktleShjb2RlQmxvY2ssIERGRzo6REZHTW9kZSkpICE9
IERGRzo6V29ya2xpc3Q6Ok5vdEtub3duCi0gICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5oYXNP
cHRpbWl6ZWRSZXBsYWNlbWVudCgpKSk7Ci0gICAgCi0gICAgREZHOjpXb3JrbGlzdDo6U3RhdGUg
d29ya2xpc3RTdGF0ZTsKLSAgICBpZiAodm0ud29ya2xpc3QpIHsKLSAgICAgICAgLy8gVGhlIGNh
bGwgdG8gREZHOjpXb3JrbGlzdDo6Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oKSB3aWxsIGNv
bXBsZXRlIGFsbCByZWFkeQotICAgICAgICAvLyAoaS5lLiBjb21waWxlZCkgY29kZSBibG9ja3Mu
IEJ1dCBpZiBpdCBjb21wbGV0ZXMgb3Vycywgd2UgYWxzbyBuZWVkIHRvIGtub3cKLSAgICAgICAg
Ly8gd2hhdCB0aGUgcmVzdWx0IHdhcyBzbyB0aGF0IHdlIGRvbid0IHBsb3cgYWhlYWQgYW5kIGF0
dGVtcHQgT1NSIG9yIGltbWVkaWF0ZQotICAgICAgICAvLyByZW9wdGltaXphdGlvbi4gVGhpcyB3
aWxsIGhhdmUgYWxyZWFkeSBhbHNvIHNldCB0aGUgYXBwcm9wcmlhdGUgSklUIGV4ZWN1dGlvbgot
ICAgICAgICAvLyBjb3VudCB0aHJlc2hvbGQgZGVwZW5kaW5nIG9uIHdoYXQgaGFwcGVuZWQsIHNv
IGlmIHRoZSBjb21waWxhdGlvbiB3YXMgYW55dGhpbmcKLSAgICAgICAgLy8gYnV0IHN1Y2Nlc3Nm
dWwgd2UganVzdCB3YW50IHRvIHJldHVybiBlYXJseS4gU2VlIHRoZSBjYXNlIGZvciB3b3JrbGlz
dFN0YXRlID09Ci0gICAgICAgIC8vIERGRzo6V29ya2xpc3Q6OkNvbXBpbGVkLCBiZWxvdy4KLSAg
ICAgICAgCi0gICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjb3VsZCBoYXZlIGFsdGVybmF0aXZlbHkg
anVzdCBjYWxsZWQgV29ya2xpc3Q6OmNvbXBpbGF0aW9uU3RhdGUoKQotICAgICAgICAvLyBoZXJl
LCBhbmQgaWYgaXQgcmV0dXJuZWQgQ29tcGlsZWQsIHdlIGNvdWxkIGhhdmUgdGhlbiBjYWxsZWQK
LSAgICAgICAgLy8gY29tcGxldGVBbmRTY2hlZHVsZU9TUigpIGJlbG93LiBCdXQgdGhhdCB3b3Vs
ZCBoYXZlIG1lYW50IHRoYXQgaXQgY291bGQgdGFrZQotICAgICAgICAvLyBsb25nZXIgZm9yIGNv
ZGUgYmxvY2tzIHRvIGJlIGNvbXBsZXRlZDogdGhleSB3b3VsZCBvbmx5IGNvbXBsZXRlIHdoZW4g
KnRoZWlyKgotICAgICAgICAvLyBleGVjdXRpb24gY291bnQgdHJpZ2dlciBmaXJlZDsgYnV0IHRo
YXQgY291bGQgdGFrZSBhIHdoaWxlIHNpbmNlIHRoZSBmaXJpbmcgaXMKLSAgICAgICAgLy8gcmFj
eS4gSXQgY291bGQgYWxzbyBtZWFuIHRoYXQgY29kZSBibG9ja3MgdGhhdCBuZXZlciBydW4gYWdh
aW4gYWZ0ZXIgYmVpbmcKLSAgICAgICAgLy8gY29tcGlsZWQgd291bGQgc2l0IG9uIHRoZSB3b3Jr
bGlzdCB1bnRpbCBuZXh0IEdDLiBUaGF0J3MgZmluZSwgYnV0IGl0J3MKLSAgICAgICAgLy8gcHJv
YmFibHkgYSB3YXN0ZSBvZiBtZW1vcnkuIE91ciBnb2FsIGhlcmUgaXMgdG8gY29tcGxldGUgY29k
ZSBibG9ja3MgYXMgc29vbiBhcwotICAgICAgICAvLyBwb3NzaWJsZSBpbiBvcmRlciB0byBtaW5p
bWl6ZSB0aGUgY2hhbmNlcyBvZiB1cyBleGVjdXRpbmcgYmFzZWxpbmUgY29kZSBhZnRlcgotICAg
ICAgICAvLyBvcHRpbWl6ZWQgY29kZSBpcyBhbHJlYWR5IGF2YWlsYWJsZS4KLSAgICAgICAgCi0g
ICAgICAgIHdvcmtsaXN0U3RhdGUgPSB2bS53b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5z
Rm9yVk0oCi0gICAgICAgICAgICB2bSwgREZHOjpDb21waWxhdGlvbktleShjb2RlQmxvY2ssIERG
Rzo6REZHTW9kZSkpOwotICAgIH0gZWxzZQotICAgICAgICB3b3JrbGlzdFN0YXRlID0gREZHOjpX
b3JrbGlzdDo6Tm90S25vd247Ci0gICAgCi0gICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gREZHOjpX
b3JrbGlzdDo6Q29tcGlsaW5nKSB7Ci0gICAgICAgIC8vIFdlIGNhbm5vdCBiZSBpbiB0aGUgcHJv
Y2VzcyBvZiBhc3luY2hyb25vdXMgY29tcGlsYXRpb24gYW5kIGFsc28gaGF2ZSBhbiBvcHRpbWl6
ZWQKLSAgICAgICAgLy8gcmVwbGFjZW1lbnQuCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjb2Rl
QmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpOwotICAgICAgICBjb2RlQmxvY2stPnNl
dE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlv
bkRlZmVycmVkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAod29ya2xp
c3RTdGF0ZSA9PSBERkc6OldvcmtsaXN0OjpDb21waWxlZCkgewotICAgICAgICAvLyBJZiB3ZSBk
b24ndCBoYXZlIGFuIG9wdGltaXplZCByZXBsYWNlbWVudCBidXQgd2UgZGlkIGp1c3QgZ2V0IGNv
bXBpbGVkLCB0aGVuCi0gICAgICAgIC8vIHRoZSBjb21waWxhdGlvbiBmYWlsZWQgb3Igd2FzIGlu
dmFsaWRhdGVkLCBpbiB3aGljaCBjYXNlIHRoZSBleGVjdXRpb24gY291bnQKLSAgICAgICAgLy8g
dGhyZXNob2xkcyBoYXZlIGFscmVhZHkgYmVlbiBzZXQgYXBwcm9wcmlhdGVseSBieQotICAgICAg
ICAvLyBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlv
blJlc3VsdCgpIGFuZCB3ZSBoYXZlCi0gICAgICAgIC8vIG5vdGhpbmcgbGVmdCB0byBkby4KLSAg
ICAgICAgaWYgKCFjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKLSAgICAg
ICAgICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKLSAgICAgICAgICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiQ29kZSBi
bG9jayAiLCAqY29kZUJsb2NrLCAiIHdhcyBjb21waWxlZCBidXQgaXQgZG9lc24ndCBoYXZlIGFu
IG9wdGltaXplZCByZXBsYWNlbWVudC5cbiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkp
IHsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgIGRhdGFM
b2coIkNvbnNpZGVyaW5nIE9TUiAiLCAqY29kZUJsb2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJl
cGxhY2VtZW50KCksICIuXG4iKTsKLSAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvcHRpbWl6ZWQg
cmVwbGFjZW1lbnQsIHRoZW4gaXQgbXVzdCBiZSB0aGUgY2FzZSB0aGF0IHdlIGVudGVyZWQKLSAg
ICAgICAgLy8gY3RpX29wdGltaXplIGZyb20gYSBsb29wLiBUaGF0J3MgYmVjYXVzZSBpZiB0aGVy
ZSdzIGFuIG9wdGltaXplZCByZXBsYWNlbWVudCwKLSAgICAgICAgLy8gdGhlbiBhbGwgY2FsbHMg
dG8gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbGlua2VkIHRvIHRoZSByZXBsYWNlbWVudCBhbmQg
c28KLSAgICAgICAgLy8gdGhlIHByb2xvZ3VlIE9TUiB3aWxsIG5ldmVyIGZpcmUuCi0gICAgICAg
IAotICAgICAgICAvLyBUaGlzIGlzIGFuIGludGVyZXN0aW5nIHRocmVzaG9sZCBjaGVjay4gQ29u
c2lkZXIgdGhhdCBhIGZ1bmN0aW9uIE9TUiBleGl0cwotICAgICAgICAvLyBpbiB0aGUgbWlkZGxl
IG9mIGEgbG9vcCwgd2hpbGUgaGF2aW5nIGEgcmVsYXRpdmVseSBsb3cgZXhpdCBjb3VudC4gVGhl
IGV4aXQKLSAgICAgICAgLy8gd2lsbCByZXNldCB0aGUgZXhlY3V0aW9uIGNvdW50ZXIgdG8gc29t
ZSB0YXJnZXQgdGhyZXNob2xkLCBtZWFuaW5nIHRoYXQgdGhpcwotICAgICAgICAvLyBjb2RlIHdv
bid0IGJlIHJlYWNoZWQgdW50aWwgdGhhdCBsb29wIGhlYXRzIHVwIGZvciA+PTEwMDAgZXhlY3V0
aW9ucy4gQnV0IHRoZW4KLSAgICAgICAgLy8gd2UgZG8gYSBzZWNvbmQgY2hlY2sgaGVyZSwgdG8g
c2VlIGlmIHdlIHNob3VsZCBlaXRoZXIgcmVvcHRpbWl6ZSwgb3IganVzdAotICAgICAgICAvLyBh
dHRlbXB0IE9TUiBlbnRyeS4gSGVuY2UgaXQgbWlnaHQgZXZlbiBiZSBjb3JyZWN0IGZvcgotICAg
ICAgICAvLyBzaG91bGRSZW9wdGltaXplRnJvbUxvb3BOb3coKSB0byBhbHdheXMgcmV0dXJuIHRy
dWUuIEJ1dCB3ZSBtYWtlIGl0IGRvIHNvbWUKLSAgICAgICAgLy8gYWRkaXRpb25hbCBjaGVja2lu
ZyBhbnl3YXksIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIHJlY29tcGlsYXRpb24gdGhyYXNoaW5n
LgotICAgICAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zaG91bGRSZW9wdGltaXpl
RnJvbUxvb3BOb3coKSkgewotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkg
ewotICAgICAgICAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAgICAgICAgICJUcmlnZ2Vy
aW5nIHJlb3B0aW1pemF0aW9uIG9mICIsICpjb2RlQmxvY2ssCi0gICAgICAgICAgICAgICAgICAg
ICIoIiwgKmNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgIikgKGluIGxvb3ApLlxuIik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghY29kZUJs
b2NrLT5zaG91bGRPcHRpbWl6ZU5vdygpKSB7Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZU9TUigpKSB7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICAgICAg
ICAgIkRlbGF5aW5nIG9wdGltaXphdGlvbiBmb3IgIiwgKmNvZGVCbG9jaywKLSAgICAgICAgICAg
ICAgICAgICAgIiBiZWNhdXNlIG9mIGluc3VmZmljaWVudCBwcm9maWxpbmcuXG4iKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIlRyaWdn
ZXJpbmcgb3B0aW1pemVkIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICJcbiIpOwotICAg
ICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXM7Ci0gICAgICAgIGlmIChi
eXRlY29kZUluZGV4KQotICAgICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSBjb2RlQmxvY2st
Pm1fbnVtVmFyczsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMg
PSAwOwotICAgICAgICBPcGVyYW5kczxKU1ZhbHVlPiBtdXN0SGFuZGxlVmFsdWVzKAotICAgICAg
ICAgICAgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVzKTsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZv
ckluZGV4KGkpOwotICAgICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpCi0g
ICAgICAgICAgICAgICAgJiYgIVZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCkK
LSAgICAgICAgICAgICAgICAmJiBjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2Rl
Ci0gICAgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBD
b2RlRm9yQ29uc3RydWN0KSB7Ci0gICAgICAgICAgICAgICAgLy8gVWdoLiBJZiB3ZSdyZSBpbiBh
IGNvbnN0cnVjdG9yLCB0aGUgJ3RoaXMnIGFyZ3VtZW50IG1heSBob2xkIGdhcmJhZ2UuIEl0IHdp
bGwKLSAgICAgICAgICAgICAgICAvLyBhbHNvIG5ldmVyIGJlIHVzZWQuIEl0IGRvZXNuJ3QgbWF0
dGVyIHdoYXQgd2UgcHV0IGludG8gdGhlIHZhbHVlIGZvciB0aGlzLAotICAgICAgICAgICAgICAg
IC8vIGJ1dCBpdCBoYXMgdG8gYmUgYW4gYWN0dWFsIHZhbHVlIHRoYXQgY2FuIGJlIGdyb2trZWQg
Ynkgc3Vic2VxdWVudCBERkcgcGFzc2VzLAotICAgICAgICAgICAgICAgIC8vIHNvIHdlIHNhbml0
aXplIGl0IGhlcmUgYnkgdHVybmluZyBpdCBpbnRvIFVuZGVmaW5lZC4KLSAgICAgICAgICAgICAg
ICBtdXN0SGFuZGxlVmFsdWVzW2ldID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBD
b21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBERkc6OmNvbXBpbGUoCi0gICAgICAgICAgICB2bSwg
Y29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBERkc6OkRGR01vZGUsIGJ5dGVjb2Rl
SW5kZXgsCi0gICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzLCBKSVRUb0RGR0RlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCksCi0gICAgICAgICAgICB2bS5lbnN1cmVXb3JrbGlz
dCgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChyZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNz
ZnVsKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBDb2RlQmxvY2sqIG9w
dGltaXplZENvZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKLSAgICBBU1NFUlQo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpKSk7
Ci0gICAgCi0gICAgaWYgKHZvaWQqIGFkZHJlc3MgPSBERkc6OnByZXBhcmVPU1JFbnRyeShjYWxs
RnJhbWUsIG9wdGltaXplZENvZGVCbG9jaywgYnl0ZWNvZGVJbmRleCkpIHsKLSAgICAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewotICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAg
ICAgICAgICAiUGVyZm9ybWluZyBPU1IgIiwgKmNvZGVCbG9jaywgIiAtPiAiLCAqb3B0aW1pemVk
Q29kZUJsb2NrLCAiLCBhZGRyZXNzICIsCi0gICAgICAgICAgICAgICAgUmF3UG9pbnRlcigoU1RV
Ql9SRVRVUk5fQUREUkVTUykudmFsdWUoKSksICIgLT4gIiwgUmF3UG9pbnRlcihhZGRyZXNzKSwg
Ii5cbiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZVNvb24oKTsK
LSAgICAgICAgU1RVQl9TRVRfUkVUVVJOX0FERFJFU1MoYWRkcmVzcyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7Ci0gICAgICAgIGRh
dGFMb2coCi0gICAgICAgICAgICAiT3B0aW1pemluZyAiLCAqY29kZUJsb2NrLCAiIC0+ICIsICpj
b2RlQmxvY2stPnJlcGxhY2VtZW50KCksCi0gICAgICAgICAgICAiIHN1Y2NlZWRlZCwgT1NSIGZh
aWxlZCwgYWZ0ZXIgYSBkZWxheSBvZiAiLAotICAgICAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6
YXRpb25EZWxheUNvdW50ZXIoKSwgIi5cbiIpOwotICAgIH0KLQotICAgIC8vIENvdW50IHRoZSBP
U1IgZmFpbHVyZSBhcyBhIHNwZWN1bGF0aW9uIGZhaWx1cmUuIElmIHRoaXMgaGFwcGVucyBhIGxv
dCwgdGhlbgotICAgIC8vIHJlb3B0aW1pemUuCi0gICAgb3B0aW1pemVkQ29kZUJsb2NrLT5jb3Vu
dE9TUkV4aXQoKTsKLSAgICAKLSAgICAvLyBXZSBhcmUgYSBsb3QgbW9yZSBjb25zZXJ2YXRpdmUg
YWJvdXQgdHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBhZnRlciBPU1IgZmFpbHVyZSB0aGFuCi0g
ICAgLy8gYmVmb3JlIGl0LiBJZiB3ZSBlbnRlciB0aGUgb3B0aW1pemVfZnJvbV9sb29wIHRyaWdn
ZXIgd2l0aCBhIGJ1Y2tldCBmdWxsIG9mIGZhaWwKLSAgICAvLyBhbHJlYWR5LCB0aGVuIHdlIHJl
YWxseSB3b3VsZCBsaWtlIHRvIHJlb3B0aW1pemUgaW1tZWRpYXRlbHkuIEJ1dCB0aGlzIGNhc2Ug
Y292ZXJzCi0gICAgLy8gc29tZXRoaW5nIGVsc2U6IHRoZXJlIHdlcmVuJ3QgbWFueSAob3IgYW55
KSBzcGVjdWxhdGlvbiBmYWlsdXJlcyBiZWZvcmUsIGJ1dCB3ZSBqdXN0Ci0gICAgLy8gZmFpbGVk
IHRvIGVudGVyIHRoZSBzcGVjdWxhdGl2ZSBjb2RlIGJlY2F1c2Ugc29tZSB2YXJpYWJsZSBoYWQg
dGhlIHdyb25nIHZhbHVlIG9yCi0gICAgLy8gYmVjYXVzZSB0aGUgT1NSIGNvZGUgZGVjaWRlZCBm
b3IgYW55IHNwdXJpb3VzIHJlYXNvbiB0aGF0IGl0IGRpZCBub3Qgd2FudCB0byBPU1IKLSAgICAv
LyByaWdodCBub3cuIFNvLCB3ZSBvbmx5IHRyaWdnZXIgcmVvcHRpbWl6YXRpb24gb25seSB1cG9u
IHRoZSBtb3JlIGNvbnNlcnZhdGl2ZSAobm9uLWxvb3ApCi0gICAgLy8gcmVvcHRpbWl6YXRpb24g
dHJpZ2dlci4KLSAgICBpZiAob3B0aW1pemVkQ29kZUJsb2NrLT5zaG91bGRSZW9wdGltaXplTm93
KCkpIHsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewotICAgICAgICAgICAg
ZGF0YUxvZygKLSAgICAgICAgICAgICAgICAiVHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBvZiAi
LCAqY29kZUJsb2NrLCAiIC0+ICIsCi0gICAgICAgICAgICAgICAgKmNvZGVCbG9jay0+cmVwbGFj
ZW1lbnQoKSwgIiAoYWZ0ZXIgT1NSIGZhaWwpLlxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgY29k
ZUJsb2NrLT5yZW9wdGltaXplKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBP
U1IgZmFpbGVkIHRoaXMgdGltZSwgYnV0IGl0IG1pZ2h0IHN1Y2NlZWQgbmV4dCB0aW1lISBMZXQg
dGhlIGNvZGUgcnVuIGEgYml0Ci0gICAgLy8gbG9uZ2VyIGFuZCB0aGVuIHRyeSBhZ2Fpbi4KLSAg
ICBjb2RlQmxvY2stPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKLQogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfdGVhcl9vZmZfYWN0aXZh
dGlvbikKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CkBAIC05MTcs
MjIgKzY2OSw2IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3RlYXJfb2ZmX2EKICAg
ICBhcmd1bWVudHMtPnRlYXJPZmYoY2FsbEZyYW1lKTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJ
T04odm9pZCwgb3BfcHJvZmlsZV93aWxsX2NhbGwpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZS
QU1FKHN0YWNrRnJhbWUpOwotCi0gICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHN0
YWNrRnJhbWUudm0tPmVuYWJsZWRQcm9maWxlcigpKQotICAgICAgICBwcm9maWxlci0+d2lsbEV4
ZWN1dGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkp
OwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wcm9maWxlX2RpZF9jYWxsKQot
ewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIGlmIChMZWdh
Y3lQcm9maWxlciogcHJvZmlsZXIgPSBzdGFja0ZyYW1lLnZtLT5lbmFibGVkUHJvZmlsZXIoKSkK
LSAgICAgICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNr
RnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkpOwotfQotCiBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbCgK
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vi
c2NyaXB0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7CkBAIC0xMTQ3LDY5ICs4
ODMsNiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgb3BfdGhyb3cpCiAgICAgcmV0dXJu
IGhhbmRsZXIuY2FsbEZyYW1lOwogfQogCi1ERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9w
dXNoX3dpdGhfc2NvcGUpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUp
OwotCi0gICAgSlNPYmplY3QqIG8gPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpLnRvT2Jq
ZWN0KHN0YWNrRnJhbWUuY2FsbEZyYW1lKTsKLSAgICBDSEVDS19GT1JfRVhDRVBUSU9OX1ZPSUQo
KTsKLSAgICBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+c2V0U2NvcGUoSlNXaXRoU2NvcGU6OmNyZWF0
ZShzdGFja0ZyYW1lLmNhbGxGcmFtZSwgbykpOwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTih2
b2lkLCBvcF9wb3Bfc2NvcGUpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJh
bWUpOwotCi0gICAgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNldFNjb3BlKHN0YWNrRnJhbWUuY2Fs
bEZyYW1lLT5zY29wZSgpLT5uZXh0KCkpOwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTih2b2lk
LCBvcF9wdXNoX25hbWVfc2NvcGUpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNr
RnJhbWUpOwotCi0gICAgSlNOYW1lU2NvcGUqIHNjb3BlID0gSlNOYW1lU2NvcGU6OmNyZWF0ZShz
dGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKSwgc3Rh
Y2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKSwgc3RhY2tGcmFtZS5hcmdzWzJdLmludDMyKCkpOwot
Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBj
YWxsRnJhbWUtPnNldFNjb3BlKHNjb3BlKTsKLX0KLQotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3BfcHV0X2J5X2luZGV4KQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0Zy
YW1lKTsKLQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7
Ci0gICAgdW5zaWduZWQgcHJvcGVydHkgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uaW50MzIoKTsKLQot
ICAgIEpTVmFsdWUgYXJyYXlWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Ci0g
ICAgQVNTRVJUKGlzSlNBcnJheShhcnJheVZhbHVlKSk7Ci0gICAgYXNBcnJheShhcnJheVZhbHVl
KS0+cHV0RGlyZWN0SW5kZXgoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgc3RhY2tGcmFtZS5hcmdzWzJd
LmpzVmFsdWUoKSk7Ci19Ci0KLURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9nZXR0
ZXJfc2V0dGVyKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQot
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0KLSAgICBB
U1NFUlQoc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKS5pc09iamVjdCgpKTsKLSAgICBKU09i
amVjdCogYmFzZU9iaiA9IGFzT2JqZWN0KHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkpOwot
Ci0gICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwotICAgIEdldHRlclNldHRlciogYWNjZXNz
b3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSk7Ci0KLSAgICBKU1ZhbHVlIGdldHRlciA9IHN0
YWNrRnJhbWUuYXJnc1syXS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBzZXR0ZXIgPSBzdGFja0Zy
YW1lLmFyZ3NbM10uanNWYWx1ZSgpOwotICAgIEFTU0VSVChnZXR0ZXIuaXNPYmplY3QoKSB8fCBn
ZXR0ZXIuaXNVbmRlZmluZWQoKSk7Ci0gICAgQVNTRVJUKHNldHRlci5pc09iamVjdCgpIHx8IHNl
dHRlci5pc1VuZGVmaW5lZCgpKTsKLSAgICBBU1NFUlQoZ2V0dGVyLmlzT2JqZWN0KCkgfHwgc2V0
dGVyLmlzT2JqZWN0KCkpOwotCi0gICAgaWYgKCFnZXR0ZXIuaXNVbmRlZmluZWQoKSkKLSAgICAg
ICAgYWNjZXNzb3ItPnNldEdldHRlcih2bSwgYXNPYmplY3QoZ2V0dGVyKSk7Ci0gICAgaWYgKCFz
ZXR0ZXIuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcih2bSwgYXNP
YmplY3Qoc2V0dGVyKSk7Ci0gICAgYmFzZU9iai0+cHV0RGlyZWN0QWNjZXNzb3IoY2FsbEZyYW1l
LCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpLCBhY2Nlc3NvciwgQWNjZXNzb3IpOwot
fQotCiBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF90aHJvd19zdGF0aWNfZXJyb3IpCiB7
CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpAQCAtMTIyMywxNiArODk2
LDYgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfdGhyb3dfc3RhdAogICAgIFZNX1RI
Uk9XX0VYQ0VQVElPTl9BVF9FTkQoKTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwg
b3BfZGVidWcpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0g
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLQotICAgIGlu
dCBkZWJ1Z0hvb2tJRCA9IHN0YWNrRnJhbWUuYXJnc1swXS5pbnQzMigpOwotICAgIHN0YWNrRnJh
bWUudm0tPmludGVycHJldGVyLT5kZWJ1ZyhjYWxsRnJhbWUsIHN0YXRpY19jYXN0PERlYnVnSG9v
a0lEPihkZWJ1Z0hvb2tJRCkpOwotfQotCiBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgdm1f
dGhyb3cpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTU3NDUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDMs
MjMgKzM0MywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkCiBF
bmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1NfREVDTEFS
QVRJT04pIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRf
YnlfdmFsX2dlbmVyaWMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiBFbmNv
ZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXNoX25hbWVf
c2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9TVFVC
IGN0aV9vcF9wdXNoX3dpdGhfc2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJO
QUw7Ci12b2lkIEpJVF9TVFVCIGN0aV9oYW5kbGVfd2F0Y2hkb2dfdGltZXIoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9TVFVCIGN0aV9vcF9kZWJ1ZyhTVFVC
X0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX1NUVUIgY3RpX29wX3Bv
cF9zY29wZShTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX1NU
VUIgY3RpX29wX3Byb2ZpbGVfZGlkX2NhbGwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5U
RVJOQUw7Ci12b2lkIEpJVF9TVFVCIGN0aV9vcF9wcm9maWxlX3dpbGxfY2FsbChTVFVCX0FSR1Nf
REVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV9p
bmRleChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX1NUVUIg
Y3RpX29wX3B1dF9ieV92YWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2
b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfdmFsX2dlbmVyaWMoU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfZ2V0dGVyX3NldHRl
cihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX1NUVUIgY3Rp
X29wX3RlYXJfb2ZmX2FjdGl2YXRpb24oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJO
QUw7CiB2b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9hcmd1bWVudHMoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9TVFVCIGN0aV9vcF90aHJvd19zdGF0
aWNfZXJyb3IoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci0jaWYgRU5BQkxF
KERGR19KSVQpCi12b2lkIEpJVF9TVFVCIGN0aV9vcHRpbWl6ZShTVFVCX0FSR1NfREVDTEFSQVRJ
T04pIFdURl9JTlRFUk5BTDsKLSNlbmRpZgogdm9pZCogSklUX1NUVUIgY3RpX29wX3Rocm93KFNU
VUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCogSklUX1NUVUIgY3RpX3Zt
X3Rocm93KFNUVUJfQVJHU19ERUNMQVJBVElPTikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5U
RVJOQUw7CiAK
</data>
<flag name="review"
          id="236815"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>