<?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>21319</bug_id>
          
          <creation_ts>2008-10-02 16:04:01 -0700</creation_ts>
          <short_desc>Avoid restoring the caller&apos;s &apos;r&apos; value in op_ret</short_desc>
          <delta_ts>2008-10-17 02:06:54 -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>20812</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron Zwarich (cpst)">zwarich</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mjs</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>93812</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-10-02 16:04:01 -0700</bug_when>
    <thetext>Currently, op_ret restores the caller&apos;s &apos;r&apos; value. This can be removed if we directly get &apos;r&apos; from %edi in each of the CTI helper functions. There will be a few hiccups with exceptions, but this shouldn&apos;t be too hard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94090</commentid>
    <comment_count>1</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-10-04 11:13:07 -0700</bug_when>
    <thetext>I am unassigning this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95299</commentid>
    <comment_count>2</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-10-14 09:23:58 -0700</bug_when>
    <thetext>Rather than directly getting r from edi, I changed the CTI functions to expect it to be passed in as a parameter, which given the &quot;fastcall&quot; calling convention ends up passing in edx.

This avoids the memory writes of the call frame in op_call and op_ret, and likely also some meory reads in various CTI functions. The CTI arg slot for the call frame is now only used on entry and while an exception is in flight.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95301</commentid>
    <comment_count>3</comment_count>
      <attachid>24342</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-10-14 09:43:27 -0700</bug_when>
    <thetext>Created attachment 24342
avoid memory writes of callFrame as much as possible</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95302</commentid>
    <comment_count>4</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-10-14 09:46:32 -0700</bug_when>
    <thetext>I will do some additional performance testing of this patch (just to be sure) and then review it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95304</commentid>
    <comment_count>5</comment_count>
      <attachid>24342</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-14 09:54:48 -0700</bug_when>
    <thetext>Comment on attachment 24342
avoid memory writes of callFrame as much as possible

Great change! Not only faster, but cleaner code too.

-    &quot;call &quot; SYMBOL_STRING(_ZN3JSC7Machine12cti_vm_throwEPPv) &quot;\n&quot;
+    &quot;movl 0x38(%esp), %edx&quot; &quot;\n&quot;
+    &quot;call &quot; SYMBOL_STRING(_ZN3JSC7Machine12cti_vm_throwEPPvPNS_9ExecStateE) &quot;\n&quot;

+            mov edi, [esp + 0x38];

I&apos;d like the see a comment like this one:

    &quot;movl 0x38(%esp), %edi&quot; &quot;\n&quot; // Ox38 = 0x0E * 4, 0x0E = CTI_ARGS_callFrame (see assertion above)

on those lines of code.

It would make this patch smaller and easier to review if the emitCTICall() change was done first.

+    m_jit.movl_mr(8 + sizeof(void*), X86::ecx, X86::edx);

+    m_jit.movl_mr(8 + sizeof(void*), X86::ecx, X86::edx);

I don&apos;t understand the meaning of the magic number 8 here.

+        m_jit.cmpl_i32r(reinterpret_cast&lt;intptr_t&gt; (jsNull()), X86::edx);

Strange space after &quot;&gt;&quot; on this line of code.

-        doSetReturnAddressVMThrowTrampoline(&amp;CTI_RETURN_ADDRESS); \
+        ARG_setCallFrame(callFrame); \
+        doSetReturnAddressVMThrowTrampoline(&amp;CTI_RETURN_ADDRESS);      \

Unexpected change in whitespace here.

+void Machine::cti_op_put_by_id_generic(void** args, CallFrame* callFrame)

Maybe we should use a type other than void** such as CTIArgs* so we don&apos;t have to do all the typecasting in the ARG_ macros.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95305</commentid>
    <comment_count>6</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-10-14 10:06:04 -0700</bug_when>
    <thetext>We discussed using a type other than void** for the args parameter - if it were a class pointer that knew how to do the right kinds of lookup, it could allow getting rid of the macros entirely. That seems best done in a separate change.

The emitCTICall() change could in theory be done separately but is only a tiny part of this change, so doesn&apos;t seem worth it.

I applied all your other suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95719</commentid>
    <comment_count>7</comment_count>
      <attachid>24455</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-10-17 02:04:12 -0700</bug_when>
    <thetext>Created attachment 24455
take the low road

Since we can&apos;t rely on the fastcall calling convention after all, take another approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95720</commentid>
    <comment_count>8</comment_count>
      <attachid>24455</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-10-17 02:06:39 -0700</bug_when>
    <thetext>Comment on attachment 24455
take the low road

r=me (with ChangeLog of course)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24342</attachid>
            <date>2008-10-14 09:43:27 -0700</date>
            <delta_ts>2008-10-17 02:04:12 -0700</delta_ts>
            <desc>avoid memory writes of callFrame as much as possible</desc>
            <filename>keep-callFrame-in-register.patch.txt</filename>
            <type>text/plain</type>
            <size>71500</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM3NTg2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMzIEBACisyMDA4LTEw
LTE0ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICAtIEF2b2lkIHdyaXRpbmcg
dGhlIENUSSBhcmdzIGNhbGxGcmFtZSBzbG90IGluIG9wX3JldCBhbmQgb3BfY2FsbAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzMTkKKyAgICAgICAg
CisgICAgICAgIH4xJSBvdmVyYWxsIHNwZWVkdXAgb24gdjggYmVuY2htYXJrCisKKyAgICAgICAg
VGhlIG1ham9yIGNoYW5nZSBpcyB0byBtYWtlIGV2ZXJ5IENUSSBmdW5jdGlvbiB0YWtlIGFuIGFk
ZGl0aW9uYWwKKyAgICAgICAgQ2FsbEZyYW1lKiBwYXJhbWV0ZXIgKHdoaWNoIHRoYW5rcyB0byB0
aGUgZmFzdGNhbGwgY2FsbGluZworICAgICAgICBjb252ZW50aW9uIGdldHMgcGFzc2VkIGluIGVk
eCkuCisgICAgICAgIAorICAgICAgICAqIFZNL0NUSS5jcHA6CisgICAgICAgIChKU0M6Oik6Cisg
ICAgICAgIChKU0M6OkNUSTo6ZW1pdENUSUNhbGwpOiBIZWxwZXIgZnVuY3Rpb24gdG8gaGFuZGxl
IHRoZSBzZXR1cCBmb3IgQ1RJIGNhbGxzLgorICAgICAgICAoSlNDOjpDVEk6OmVtaXRDYWxsKTog
VXNlIGFib3ZlIHdoZW4gcG9zc2libGUuCisgICAgICAgIChKU0M6OkNUSTo6Y29tcGlsZU9wQ2Fs
bCk6IE5vIG1vcmUgbmVlZCB0byB3cml0ZSBjYWxsIGZyYW1lIHRvIENUSSBhcmcgYXJlYS4KKyAg
ICAgICAgKEpTQzo6Q1RJOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKTogRG9uJ3QgYm90aGVyIHRv
IHdyaXRlIGNhbCBmcmFtZSB0byBDVEkKKyAgICAgICAgYXJnIGFyZWEgaW4gb3BfcmV0LgorICAg
ICAgICAoSlNDOjpDVEk6OnByaXZhdGVDb21waWxlUHV0QnlJZFJlcGxhY2UpOiBMb2FkIHZhbHVl
IHRvIGJlIHB1dDsgbm8gbG9uZ2VyCisgICAgICAgIGNvbWVzIGZvciBmcmVlIGluIGVkeCBzaW5j
ZSB3ZSBub3cgdXNlIHRoYXQgdG8gcGFzcyB0aGUgY2FsbCBmcmFtZSB0byBDVEkKKyAgICAgICAg
ZnVuY3MuCisgICAgICAgIChKU0M6OkNUSTo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlv
bik6IGRpdHRvCisgICAgICAgIChKU0M6OkNUSTo6cGF0Y2hHZXRCeUlkU2VsZik6IGZpeCBhIHR5
cG8gKG5vdCByZWFsbHkgcmVsYXRlZCB0byB0aGUgcGF0Y2gpCisgICAgICAgICogVk0vQ1RJLmg6
IHJlbW92ZSBBUkdfY2FsbEZyYW1lLCBhbmQgZml4IGZ1bmN0aW9uIHBvaW50ZXIgdHlwZWRlZnMK
KyAgICAgICAgKiBWTS9NYWNoaW5lLmNwcDoKKyAgICAgICAgKFZNX0NIRUNLX0VYQ0VQVElPTl9B
VF9FTkQpOiBzdG9yZSB0aGUgY2FsbCBmcmFtZSBpbiB0aGUgQ1RJIGFyZyBhcmVhCisgICAgICAg
IGJlZm9yZSB0aHJvd2luZywgc28gaXQgY2FuIGJlIHJlYWQgbGF0ZXIuCisgICAgICAgIChKU0M6
Ok1hY2hpbmU6OmN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pOiBEb24ndCBib3RoZXIgdG8gd3Jp
dGUgdGhlCisgICAgICAgIG5hdGl2ZSBjYWxsIGZyYW1lIHRvIHRoZSBDVEkgYXJnIGFyZWEuCisg
ICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9yZWdpc3Rlcl9maWxlX2NoZWNrKTogTW92ZSB3cml0
aW5nIG9mIGNhbGwgZnJhbWUgdG8gcmlnaHQKKyAgICAgICAgYmVmb3JlIHRocm93aW5nLgorICAg
ICAgICAKKyAgICAgICAgVGhlIHJlc3Qgb2YgdGhlIGNoYW5nZXMgYXJlIGp1c3Qgc3RyYWlnaHRm
b3J3YXJkIGFkanVzdG1lbnRzIHRvIHVzZSB0aGUgbmV3IENhbGxGcmFtZSBwYXJhbWV0ZXIuCisg
ICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9jb252ZXJ0X3RoaXMpOgorICAgICAgICAoSlND
OjpNYWNoaW5lOjpjdGlfb3BfZW5kKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX2Fk
ZCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9wcmVfaW5jKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZTo6Y3RpX3RpbWVvdXRfY2hlY2spOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpj
dGlfb3BfbG9vcF9pZl9sZXNzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX2xvb3Bf
aWZfbGVzc2VxKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX25ld19vYmplY3QpOgor
ICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6
TWFjaGluZTo6Y3RpX29wX3B1dF9ieV9pZF9zZWNvbmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
OjpjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlf
b3BfcHV0X2J5X2lkX2ZhaWwpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfZ2V0X2J5
X2lkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX2dldF9ieV9pZF9zZWNvbmQpOgor
ICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMpOgorICAgICAg
ICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfZ2V0X2J5X2lkX2ZhaWwpOgorICAgICAgICAoSlNDOjpN
YWNoaW5lOjpjdGlfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9v
cF9kZWxfYnlfaWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfbXVsKToKKyAgICAg
ICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX25ld19mdW5jKToKKyAgICAgICAgKEpTQzo6TWFjaGlu
ZTo6Y3RpX29wX2NhbGxfSlNGdW5jdGlvbik6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV92
bV9jb21waWxlKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX3B1c2hfYWN0aXZhdGlv
bik6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9jcmVhdGVfYXJndW1lbnRzKToKKyAg
ICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24pOgorICAgICAg
ICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfdGVhcl9vZmZfYXJndW1lbnRzKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZTo6Y3RpX29wX3JldF9wcm9maWxlcik6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6
OmN0aV9vcF9yZXRfc2NvcGVDaGFpbik6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9u
ZXdfYXJyYXkpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfcmVzb2x2ZSk6CisgICAg
ICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9jb25zdHJ1Y3RfSlNDb25zdHJ1Y3QpOgorICAgICAg
ICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KToKKyAgICAg
ICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpNYWNo
aW5lOjpjdGlfb3BfcmVzb2x2ZV9mdW5jKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29w
X3N1Yik6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9wdXRfYnlfdmFsKToKKyAgICAg
ICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX3B1dF9ieV92YWxfYXJyYXkpOgorICAgICAgICAoSlND
OjpNYWNoaW5lOjpjdGlfb3BfbGVzc2VxKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29w
X2xvb3BfaWZfdHJ1ZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9uZWdhdGUpOgor
ICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfcmVzb2x2ZV9iYXNlKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZTo6Y3RpX29wX3Jlc29sdmVfc2tpcCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6
OmN0aV9vcF9yZXNvbHZlX2dsb2JhbCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9k
aXYpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfcHJlX2RlYyk6CisgICAgICAgIChK
U0M6Ok1hY2hpbmU6OmN0aV9vcF9qbGVzcyk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9v
cF9ub3QpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfanRydWUpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lOjpjdGlfb3BfcG9zdF9pbmMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpj
dGlfb3BfZXEpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfbHNoaWZ0KToKKyAgICAg
ICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX2JpdGFuZCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6
OmN0aV9vcF9yc2hpZnQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfYml0bm90KToK
KyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX3Jlc29sdmVfd2l0aF9iYXNlKToKKyAgICAg
ICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX25ld19mdW5jX2V4cCk6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmU6OmN0aV9vcF9tb2QpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfbGVzcyk6
CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9uZXEpOgorICAgICAgICAoSlNDOjpNYWNo
aW5lOjpjdGlfb3BfcG9zdF9kZWMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfdXJz
aGlmdCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9iaXR4b3IpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lOjpjdGlfb3BfbmV3X3JlZ2V4cCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6
OmN0aV9vcF9iaXRvcik6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9jYWxsX2V2YWwp
OgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpN
YWNoaW5lOjpjdGlfb3BfZ2V0X3BuYW1lcyk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9v
cF9uZXh0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX3B1c2hfc2NvcGUp
OgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfcG9wX3Njb3BlKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZTo6Y3RpX29wX3R5cGVvZik6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9v
cF9pc191bmRlZmluZWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfaXNfYm9vbGVh
bik6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9pc19udW1iZXIpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lOjpjdGlfb3BfaXNfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6
Y3RpX29wX2lzX29iamVjdCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9pc19mdW5j
dGlvbik6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9zdHJpY3RlcSk6CisgICAgICAg
IChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9uc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
OjpjdGlfb3BfdG9fanNudW1iZXIpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfaW4p
OgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfcHVzaF9uZXdfc2NvcGUpOgorICAgICAg
ICAoSlNDOjpNYWNoaW5lOjpjdGlfb3Bfam1wX3Njb3Blcyk6CisgICAgICAgIChKU0M6Ok1hY2hp
bmU6OmN0aV9vcF9wdXRfYnlfaW5kZXgpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3Bf
c3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9zd2l0Y2hfY2hhcik6
CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9zd2l0Y2hfc3RyaW5nKToKKyAgICAgICAg
KEpTQzo6TWFjaGluZTo6Y3RpX29wX2RlbF9ieV92YWwpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
OjpjdGlfb3BfcHV0X2dldHRlcik6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9wdXRf
c2V0dGVyKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX25ld19lcnJvcik6CisgICAg
ICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9kZWJ1Zyk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6
OmN0aV92bV90aHJvdyk6CisgICAgICAgICogVk0vTWFjaGluZS5oOgorCiAyMDA4LTEwLTE0ICBB
bGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KSW5kZXg6IFZNL0NUSS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ1RJLmNw
cAkocmV2aXNpb24gMzc1ODEpCisrKyBWTS9DVEkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDks
NyArMTA5LDggQEAgYXNtKAogIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1w
b2xpbmUpICJcbiIKIFNZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUpICI6IiAiXG4i
CiAgICAgIm1vdmwgJWVzcCwgJWVjeCIgIlxuIgotICAgICJjYWxsICIgU1lNQk9MX1NUUklORyhf
Wk4zSlNDN01hY2hpbmUxMmN0aV92bV90aHJvd0VQUHYpICJcbiIKKyAgICAibW92bCAweDM4KCVl
c3ApLCAlZWR4IiAiXG4iCisgICAgImNhbGwgIiBTWU1CT0xfU1RSSU5HKF9aTjNKU0M3TWFjaGlu
ZTEyY3RpX3ZtX3Rocm93RVBQdlBOU185RXhlY1N0YXRlRSkgIlxuIgogICAgICJhZGRsICQweDI0
LCAlZXNwIiAiXG4iCiAgICAgInBvcGwgJWVkaSIgIlxuIgogICAgICJwb3BsICVlc2kiICJcbiIK
QEAgLTE0MSw2ICsxNDIsNyBAQCBleHRlcm4gIkMiIHsKICAgICB7CiAgICAgICAgIF9fYXNtIHsK
ICAgICAgICAgICAgIG1vdiBlY3gsIGVzcDsKKyAgICAgICAgICAgIG1vdiBlZGksIFtlc3AgKyAw
eDM4XTsKICAgICAgICAgICAgIGNhbGwgSlNDOjpNYWNoaW5lOjpjdGlfdm1fdGhyb3c7CiAgICAg
ICAgICAgICBhZGQgZXNwLCAweDI0OwogICAgICAgICAgICAgcG9wIGVkaTsKQEAgLTI5NSw5ICsy
OTcsMTcgQEAgdm9pZCBDVEk6OnByaW50T3Bjb2RlT3BlcmFuZFR5cGVzKHVuc2lnbgogCiAjZW5k
aWYKIAorQUxXQVlTX0lOTElORSBYODZBc3NlbWJsZXI6OkptcFNyYyBDVEk6OmVtaXRDVElDYWxs
KCkKK3sKKyAgICBtX2ppdC5lbWl0UmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgbV9q
aXQubW92bF9ycihYODY6OmVkaSwgWDg2OjplZHgpOworICAgIHJldHVybiBtX2ppdC5lbWl0Q2Fs
bCgpOworfQorCiBBTFdBWVNfSU5MSU5FIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIENUSTo6ZW1pdENh
bGwodW5zaWduZWQgb3Bjb2RlSW5kZXgsIFg4Njo6UmVnaXN0ZXJJRCByKQogewogICAgIG1faml0
LmVtaXRSZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICBtX2ppdC5tb3ZsX3JyKFg4Njo6
ZWRpLCBYODY6OmVkeCk7CiAgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgY2FsbCA9IG1faml0LmVt
aXRDYWxsKHIpOwogICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgb3Bjb2RlSW5k
ZXgpKTsKIApAQCAtMzA5LDggKzMxOSw3IEBAIEFMV0FZU19JTkxJTkUgWDg2QXNzZW1ibGVyOjpK
bXBTcmMgQ1RJOjoKICNpZiBFTkFCTEUoU0FNUExJTkdfVE9PTCkKICAgICBtX2ppdC5tb3ZsX2kz
Mm0oMSwgJmluQ2FsbGVkQ29kZSk7CiAjZW5kaWYKLSAgICBtX2ppdC5lbWl0UmVzdG9yZUFyZ3Vt
ZW50UmVmZXJlbmNlKCk7Ci0gICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgY2FsbCA9IG1faml0LmVt
aXRDYWxsKCk7CisgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgY2FsbCA9IGVtaXRDVElDYWxsKCk7
CiAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBoZWxwZXIsIG9wY29kZUluZGV4
KSk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1RPT0wpCiAgICAgbV9qaXQubW92bF9pMzJtKDAsICZp
bkNhbGxlZENvZGUpOwpAQCAtMzI0LDggKzMzMyw3IEBAIEFMV0FZU19JTkxJTkUgWDg2QXNzZW1i
bGVyOjpKbXBTcmMgQ1RJOjoKICNpZiBFTkFCTEUoU0FNUExJTkdfVE9PTCkKICAgICBtX2ppdC5t
b3ZsX2kzMm0oMSwgJmluQ2FsbGVkQ29kZSk7CiAjZW5kaWYKLSAgICBtX2ppdC5lbWl0UmVzdG9y
ZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgY2FsbCA9IG1f
aml0LmVtaXRDYWxsKCk7CisgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgY2FsbCA9IGVtaXRDVElD
YWxsKCk7CiAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBoZWxwZXIsIG9wY29k
ZUluZGV4KSk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1RPT0wpCiAgICAgbV9qaXQubW92bF9pMzJt
KDAsICZpbkNhbGxlZENvZGUpOwpAQCAtMzM5LDggKzM0Nyw3IEBAIEFMV0FZU19JTkxJTkUgWDg2
QXNzZW1ibGVyOjpKbXBTcmMgQ1RJOjoKICNpZiBFTkFCTEUoU0FNUExJTkdfVE9PTCkKICAgICBt
X2ppdC5tb3ZsX2kzMm0oMSwgJmluQ2FsbGVkQ29kZSk7CiAjZW5kaWYKLSAgICBtX2ppdC5lbWl0
UmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgY2Fs
bCA9IG1faml0LmVtaXRDYWxsKCk7CisgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgY2FsbCA9IGVt
aXRDVElDYWxsKCk7CiAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBoZWxwZXIs
IG9wY29kZUluZGV4KSk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1RPT0wpCiAgICAgbV9qaXQubW92
bF9pMzJtKDAsICZpbkNhbGxlZENvZGUpOwpAQCAtMzU0LDggKzM2MSw3IEBAIEFMV0FZU19JTkxJ
TkUgWDg2QXNzZW1ibGVyOjpKbXBTcmMgQ1RJOjoKICNpZiBFTkFCTEUoU0FNUExJTkdfVE9PTCkK
ICAgICBtX2ppdC5tb3ZsX2kzMm0oMSwgJmluQ2FsbGVkQ29kZSk7CiAjZW5kaWYKLSAgICBtX2pp
dC5lbWl0UmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgWDg2QXNzZW1ibGVyOjpKbXBT
cmMgY2FsbCA9IG1faml0LmVtaXRDYWxsKCk7CisgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgY2Fs
bCA9IGVtaXRDVElDYWxsKCk7CiAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBo
ZWxwZXIsIG9wY29kZUluZGV4KSk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1RPT0wpCiAgICAgbV9q
aXQubW92bF9pMzJtKDAsICZpbkNhbGxlZENvZGUpOwpAQCAtMzY5LDggKzM3NSw3IEBAIEFMV0FZ
U19JTkxJTkUgWDg2QXNzZW1ibGVyOjpKbXBTcmMgQ1RJOjoKICNpZiBFTkFCTEUoU0FNUExJTkdf
VE9PTCkKICAgICBtX2ppdC5tb3ZsX2kzMm0oMSwgJmluQ2FsbGVkQ29kZSk7CiAjZW5kaWYKLSAg
ICBtX2ppdC5lbWl0UmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgWDg2QXNzZW1ibGVy
OjpKbXBTcmMgY2FsbCA9IG1faml0LmVtaXRDYWxsKCk7CisgICAgWDg2QXNzZW1ibGVyOjpKbXBT
cmMgY2FsbCA9IGVtaXRDVElDYWxsKCk7CiAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChj
YWxsLCBoZWxwZXIsIG9wY29kZUluZGV4KSk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1RPT0wpCiAg
ICAgbV9qaXQubW92bF9pMzJtKDAsICZpbkNhbGxlZENvZGUpOwpAQCAtMzg0LDggKzM4OSw3IEBA
IEFMV0FZU19JTkxJTkUgWDg2QXNzZW1ibGVyOjpKbXBTcmMgQ1RJOjoKICNpZiBFTkFCTEUoU0FN
UExJTkdfVE9PTCkKICAgICBtX2ppdC5tb3ZsX2kzMm0oMSwgJmluQ2FsbGVkQ29kZSk7CiAjZW5k
aWYKLSAgICBtX2ppdC5lbWl0UmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgWDg2QXNz
ZW1ibGVyOjpKbXBTcmMgY2FsbCA9IG1faml0LmVtaXRDYWxsKCk7CisgICAgWDg2QXNzZW1ibGVy
OjpKbXBTcmMgY2FsbCA9IGVtaXRDVElDYWxsKCk7CiAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJl
Y29yZChjYWxsLCBoZWxwZXIsIG9wY29kZUluZGV4KSk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1RP
T0wpCiAgICAgbV9qaXQubW92bF9pMzJtKDAsICZpbkNhbGxlZENvZGUpOwpAQCAtNTc4LDggKzU4
Miw3IEBAIHZvaWQgQ1RJOjpjb21waWxlT3BDYWxsKEluc3RydWN0aW9uKiBpbnMKICAgICAvLyBs
b2FkIGN0aUNvZGUgZnJvbSB0aGUgbmV3IGNvZGVCbG9jay4KICAgICBtX2ppdC5tb3ZsX21yKE9C
SkVDVF9PRkZTRVQoQ29kZUJsb2NrLCBjdGlDb2RlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKIAot
ICAgIC8vIFB1dCB0aGUgbmV3IHZhbHVlIG9mICdjYWxsRnJhbWUnIGludG8gZWRpIGFuZCBvbnRv
IHRoZSBzdGFjaywgdG9vLgotICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkeCwgQ1RJX0FSR1Nf
Y2FsbEZyYW1lKTsKKyAgICAvLyBQdXQgdGhlIG5ldyB2YWx1ZSBvZiAnY2FsbEZyYW1lJyBpbnRv
IGVkaQogICAgIG1faml0Lm1vdmxfcnIoWDg2OjplZHgsIFg4Njo6ZWRpKTsKIAogICAgIC8vIENo
ZWNrIHRoZSBjdGlDb2RlIGhhcyBiZWVuIGdlbmVyYXRlZCAtIGlmIG5vdCwgdGhpcyBpcyBoYW5k
bGVkIGluIGEgc2xvdyBjYXNlLgpAQCAtMTI3Nyw3ICsxMjgwLDYgQEAgdm9pZCBDVEk6OnByaXZh
dGVDb21waWxlTWFpblBhc3MoKQogCiAgICAgICAgICAgICAvLyBSZXN0b3JlIG91ciBjYWxsZXIn
cyAiciIuCiAgICAgICAgICAgICBlbWl0R2V0QXJnKFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUs
IFg4Njo6ZWRpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FS
R1NfY2FsbEZyYW1lKTsKIAogICAgICAgICAgICAgLy8gUmV0dXJuLgogICAgICAgICAgICAgbV9q
aXQucHVzaGxfcihYODY6OmVkeCk7CkBAIC0xODQwLDcgKzE4NDIsNyBAQCB2b2lkIENUSTo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIG9wX2NhdGNoOiB7Ci0gICAgICAgICAgICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FS
R1NfY2FsbEZyYW1lLCBYODY6OmVkaSk7IC8vIGVkaSA6PSByCisgICAgICAgICAgICBlbWl0R2V0
Q1RJUGFyYW0oQ1RJX0FSR1NfY2FsbEZyYW1lLCBYODY6OmVkaSk7IC8vIGVkaSA6PSBjYWxsRnJh
bWUKICAgICAgICAgICAgIGVtaXRQdXRSZXN1bHQoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZCk7CiAgICAgICAgICAgICBpICs9IDI7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI4NDcsNiAr
Mjg0OSw3IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRSZXBsYWNlKFMKIAogICAg
IC8vIGNoZWNrcyBvdXQgb2theSEgLSBwdXREaXJlY3RPZmZzZXQKICAgICBtX2ppdC5tb3ZsX21y
KE9CSkVDVF9PRkZTRVQoSlNPYmplY3QsIG1fcHJvcGVydHlTdG9yYWdlKSwgWDg2OjplYXgsIFg4
Njo6ZWF4KTsKKyAgICBtX2ppdC5tb3ZsX21yKDggKyBzaXplb2Yodm9pZCopLCBYODY6OmVjeCwg
WDg2OjplZHgpOwogICAgIG1faml0Lm1vdmxfcm0oWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNp
emVvZihKU1ZhbHVlKiksIFg4Njo6ZWF4KTsKICAgICBtX2ppdC5yZXQoKTsKIApAQCAtMjg4Nywz
MyArMjg5MCwzNiBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAg
ICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2ppdC5lbWl0VW5saW5rZWRKbmUoKSk7CiAgICAgVmVj
dG9yPFg4NkFzc2VtYmxlcjo6Sm1wU3JjPiBzdWNjZXNzQ2FzZXM7CiAKLSAgICAvLyAgZWN4ID0g
YmFzZU9iamVjdAotICAgIG1faml0Lm1vdmxfbXIoT0JKRUNUX09GRlNFVChKU0NlbGwsIG1fc3Ry
dWN0dXJlSUQpLCBYODY6OmVheCwgWDg2OjplY3gpOwotICAgIC8vIHByb3RvKGVjeCkgPSBiYXNl
T2JqZWN0LT5zdHJ1Y3R1cmVJRCgpLT5wcm90b3R5cGUoKQotICAgIG1faml0LmNtcGxfaTMybShP
YmplY3RUeXBlLCBPQkpFQ1RfT0ZGU0VUKFN0cnVjdHVyZUlELCBtX3R5cGVJbmZvKSArIE9CSkVD
VF9PRkZTRVQoVHlwZUluZm8sIG1fdHlwZSksIFg4Njo6ZWN4KTsKKyAgICAvLyAgZWR4ID0gYmFz
ZU9iamVjdAorICAgIG1faml0Lm1vdmxfbXIoT0JKRUNUX09GRlNFVChKU0NlbGwsIG1fc3RydWN0
dXJlSUQpLCBYODY6OmVheCwgWDg2OjplZHgpOworICAgIC8vIHByb3RvKGVkeCkgPSBiYXNlT2Jq
ZWN0LT5zdHJ1Y3R1cmVJRCgpLT5wcm90b3R5cGUoKQorICAgIG1faml0LmNtcGxfaTMybShPYmpl
Y3RUeXBlLCBPQkpFQ1RfT0ZGU0VUKFN0cnVjdHVyZUlELCBtX3R5cGVJbmZvKSArIE9CSkVDVF9P
RkZTRVQoVHlwZUluZm8sIG1fdHlwZSksIFg4Njo6ZWR4KTsKICAgICBmYWlsdXJlQ2FzZXMuYXBw
ZW5kKG1faml0LmVtaXRVbmxpbmtlZEpuZSgpKTsKLSAgICBtX2ppdC5tb3ZsX21yKE9CSkVDVF9P
RkZTRVQoU3RydWN0dXJlSUQsIG1fcHJvdG90eXBlKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKKyAg
ICBtX2ppdC5tb3ZsX21yKE9CSkVDVF9PRkZTRVQoU3RydWN0dXJlSUQsIG1fcHJvdG90eXBlKSwg
WDg2OjplZHgsIFg4Njo6ZWR4KTsKICAgICAKICAgICAvLyBlY3ggPSBiYXNlT2JqZWN0LT5tX3N0
cnVjdHVyZUlECiAgICAgZm9yIChSZWZQdHI8U3RydWN0dXJlSUQ+KiBpdCA9IHNJREMtPmhlYWQo
KTsgKml0OyArK2l0KSB7CiAgICAgICAgIC8vIG51bGwgY2hlY2sgdGhlIHByb3RvdHlwZQotICAg
ICAgICBtX2ppdC5jbXBsX2kzMnIocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4gKGpzTnVsbCgp
KSwgWDg2OjplY3gpOworICAgICAgICBtX2ppdC5jbXBsX2kzMnIocmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4gKGpzTnVsbCgpKSwgWDg2OjplZHgpOwogICAgICAgICBzdWNjZXNzQ2FzZXMuYXBw
ZW5kKG1faml0LmVtaXRVbmxpbmtlZEplKCkpOwogCiAgICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1
Y3R1cmUgaWQKLSAgICAgICAgbV9qaXQuY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
X3Q+KGl0LT5nZXQoKSksIE9CSkVDVF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZUlEKSwgWDg2
OjplY3gpOworICAgICAgICBtX2ppdC5jbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJf
dD4oaXQtPmdldCgpKSwgT0JKRUNUX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlSUQpLCBYODY6
OmVkeCk7CiAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobV9qaXQuZW1pdFVubGlua2VkSm5l
KCkpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubW92bF9tcihPQkpFQ1RfT0ZGU0VUKEpTQ2Vs
bCwgbV9zdHJ1Y3R1cmVJRCksIFg4Njo6ZWN4LCBYODY6OmVjeCk7Ci0gICAgICAgIG1faml0LmNt
cGxfaTMybShPYmplY3RUeXBlLCBPQkpFQ1RfT0ZGU0VUKFN0cnVjdHVyZUlELCBtX3R5cGVJbmZv
KSArIE9CSkVDVF9PRkZTRVQoVHlwZUluZm8sIG1fdHlwZSksIFg4Njo6ZWN4KTsKKyAgICAgICAg
bV9qaXQubW92bF9tcihPQkpFQ1RfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmVJRCksIFg4Njo6
ZWR4LCBYODY6OmVkeCk7CisgICAgICAgIG1faml0LmNtcGxfaTMybShPYmplY3RUeXBlLCBPQkpF
Q1RfT0ZGU0VUKFN0cnVjdHVyZUlELCBtX3R5cGVJbmZvKSArIE9CSkVDVF9PRkZTRVQoVHlwZUlu
Zm8sIG1fdHlwZSksIFg4Njo6ZWR4KTsKICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2pp
dC5lbWl0VW5saW5rZWRKbmUoKSk7Ci0gICAgICAgIG1faml0Lm1vdmxfbXIoT0JKRUNUX09GRlNF
VChTdHJ1Y3R1cmVJRCwgbV9wcm90b3R5cGUpLCBYODY6OmVjeCwgWDg2OjplY3gpOworICAgICAg
ICBtX2ppdC5tb3ZsX21yKE9CSkVDVF9PRkZTRVQoU3RydWN0dXJlSUQsIG1fcHJvdG90eXBlKSwg
WDg2OjplZHgsIFg4Njo6ZWR4KTsKICAgICB9CiAKICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1f
aml0LmVtaXRVbmxpbmtlZEpuZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3Vj
Y2Vzc0Nhc2VzLnNpemUoKTsgKytpKQogICAgICAgICBtX2ppdC5saW5rKHN1Y2Nlc3NDYXNlc1tp
XSwgbV9qaXQubGFiZWwoKSk7CiAKKyAgICAvLyBlZHggPSB2YWx1ZQorICAgIG1faml0Lm1vdmxf
bXIoOCArIHNpemVvZih2b2lkKiksIFg4Njo6ZWN4LCBYODY6OmVkeCk7CisKICAgICBYODZBc3Nl
bWJsZXI6OkptcFNyYyBjYWxsVGFyZ2V0OwogICAgIC8vIEZhc3QgY2FzZSwgZG9uJ3QgbmVlZCB0
byBkbyBhbnkgaGVhdnkgbGlmdGluZywgc28gZG9uJ3QgYm90aGVyIG1ha2luZyBhIGNhbGwuCiAg
ICAgaWYgKCF0cmFuc2l0aW9uV2lsbE5lZWRTdG9yYWdlUmVhbGxvYyhvbGRTdHJ1Y3R1cmVJRCwg
bmV3U3RydWN0dXJlSUQpKSB7CkBAIC0yOTQ1LDYgKzI5NTEsNyBAQCB2b2lkIENUSTo6cHJpdmF0
ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmYWlsdXJlQ2FzZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBtX2ppdC5saW5rKGZhaWx1
cmVDYXNlc1tpXSwgbV9qaXQubGFiZWwoKSk7CiAgICAgICAgIG1faml0LmVtaXRSZXN0b3JlQXJn
dW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7CisgICAgICAgIG1faml0Lm1vdmxfcnIoWDg2
OjplZGksIFg4Njo6ZWR4KTsKICAgICAgICAgZmFpbHVyZUp1bXAgPSBtX2ppdC5lbWl0VW5saW5r
ZWRKbXAoKTsKICAgICB9CiAKQEAgLTMwMjYsNyArMzAzMyw3IEBAIHZvaWQgQ1RJOjpwYXRjaEdl
dEJ5SWRTZWxmKENvZGVCbG9jayogY28KICAgICAvLyBTaG91bGQgcHJvYmFibHkgZ28gdG8gTWFj
aGluZTo6Y3RpX29wX2dldF9ieV9pZF9mYWlsLCBidXQgdGhhdCBkb2Vzbid0IGRvIGFueXRoaW5n
IGludGVyZXN0aW5nIHJpZ2h0IG5vdy4KICAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVz
cyhyZXR1cm5BZGRyZXNzLCAodm9pZCopKE1hY2hpbmU6OmN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJp
YykpOwogCi0gICAgLy8gUmVwYXRjaCB0aGUgb2Zmc2V0IGludG8gdGhlIHByb3BvZXJ0eSBtYXAg
dG8gbG9hZCBmcm9tLCB0aGVuIHJlcGF0Y2ggdGhlIFN0cnVjdHVyZUlEIHRvIGxvb2sgZm9yLgor
ICAgIC8vIFJlcGF0Y2ggdGhlIG9mZnNldCBpbnRvIHRoZSBwcm9wZXJ0eSBtYXAgdG8gbG9hZCBm
cm9tLCB0aGVuIHJlcGF0Y2ggdGhlIFN0cnVjdHVyZUlEIHRvIGxvb2sgZm9yLgogICAgIFg4NkFz
c2VtYmxlcjo6cmVwYXRjaERpc3BsYWNlbWVudChyZWludGVycHJldF9jYXN0PGludHB0cl90Pihp
bmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0
LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopKTsKICAgICBYODZBc3NlbWJsZXI6OnJl
cGF0Y2hJbW1lZGlhdGUocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVn
aW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRTdHJ1Y3R1cmVJRCwgcmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdD4oc3RydWN0dXJlSUQpKTsKIH0KSW5kZXg6IFZNL0NUSS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFZNL0NUSS5oCShyZXZpc2lvbiAzNzU4MSkKKysrIFZNL0NUSS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw3ICs0NSw2IEBACiAjZGVmaW5lIENUSV9BUkdTX3Byb2ZpbGVyUmVmZXJlbmNlIDB4MTAK
ICNkZWZpbmUgQ1RJX0FSR1NfZ2xvYmFsRGF0YSAweDExCiAjZGVmaW5lIEFSR19yZWdpc3RlckZp
bGUgKChSZWdpc3RlckZpbGUqKShhcmdzKVtDVElfQVJHU19yZWdpc3RlckZpbGVdKQotI2RlZmlu
ZSBBUkdfY2FsbEZyYW1lICgoQ2FsbEZyYW1lKikoYXJncylbQ1RJX0FSR1NfY2FsbEZyYW1lXSkK
ICNkZWZpbmUgQVJHX2V4Y2VwdGlvbiAoKEpTVmFsdWUqKikoYXJncylbQ1RJX0FSR1NfZXhjZXB0
aW9uXSkKICNkZWZpbmUgQVJHX3Byb2ZpbGVyUmVmZXJlbmNlICgoUHJvZmlsZXIqKikoYXJncylb
Q1RJX0FSR1NfcHJvZmlsZXJSZWZlcmVuY2VdKQogI2RlZmluZSBBUkdfZ2xvYmFsRGF0YSAoKEpT
R2xvYmFsRGF0YSopKGFyZ3MpW0NUSV9BUkdTX2dsb2JhbERhdGFdKQpAQCAtOTUsMTIgKzk0LDEy
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0cnVjdCBJbnN0cnVjdGlvbjsKICAgICBzdHJ1Y3Qg
T3BlcmFuZFR5cGVzOwogCi0gICAgdHlwZWRlZiBKU1ZhbHVlKiAoU0ZYX0NBTEwgKkNUSUhlbHBl
cl9qKSh2b2lkKiogYXJncyk7Ci0gICAgdHlwZWRlZiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiAo
U0ZYX0NBTEwgKkNUSUhlbHBlcl9wKSh2b2lkKiogYXJncyk7Ci0gICAgdHlwZWRlZiB2b2lkIChT
RlhfQ0FMTCAqQ1RJSGVscGVyX3YpKHZvaWQqKiBhcmdzKTsKLSAgICB0eXBlZGVmIHZvaWQqIChT
RlhfQ0FMTCAqQ1RJSGVscGVyX3MpKHZvaWQqKiBhcmdzKTsKLSAgICB0eXBlZGVmIGludCAoU0ZY
X0NBTEwgKkNUSUhlbHBlcl9iKSh2b2lkKiogYXJncyk7Ci0gICAgdHlwZWRlZiBWb2lkUHRyUGFp
ciAoU0ZYX0NBTEwgKkNUSUhlbHBlcl8yKSh2b2lkKiogYXJncyk7CisgICAgdHlwZWRlZiBKU1Zh
bHVlKiAoU0ZYX0NBTEwgKkNUSUhlbHBlcl9qKSh2b2lkKiogYXJncywgQ2FsbEZyYW1lKik7Cisg
ICAgdHlwZWRlZiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiAoU0ZYX0NBTEwgKkNUSUhlbHBlcl9w
KSh2b2lkKiogYXJncywgQ2FsbEZyYW1lKik7CisgICAgdHlwZWRlZiB2b2lkIChTRlhfQ0FMTCAq
Q1RJSGVscGVyX3YpKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAgICB0eXBlZGVmIHZvaWQq
IChTRlhfQ0FMTCAqQ1RJSGVscGVyX3MpKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAgICB0
eXBlZGVmIGludCAoU0ZYX0NBTEwgKkNUSUhlbHBlcl9iKSh2b2lkKiogYXJncywgQ2FsbEZyYW1l
Kik7CisgICAgdHlwZWRlZiBWb2lkUHRyUGFpciAoU0ZYX0NBTEwgKkNUSUhlbHBlcl8yKSh2b2lk
KiogYXJncywgQ2FsbEZyYW1lKik7CiAKICAgICBzdHJ1Y3QgQ2FsbFJlY29yZCB7CiAgICAgICAg
IFg4NkFzc2VtYmxlcjo6Sm1wU3JjIGZyb207CkBAIC0yMzgsNyArMjM3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdl
IG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSByZXBhdGNoZWQgb2Zmc2V0LgogICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHJlcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKIAotICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IGN0aUFyZ3VtZW50SW5pdFNpemUgPSAyOworICAgICAgICBzdGF0
aWMgY29uc3QgaW50IGN0aUFyZ3VtZW50SW5pdFNpemUgPSA0OwogCiAgICAgICAgIC8vIFRoZXNl
IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB2YWx1ZSBhcmUgdXNlZCB0byBlbmFibGUgcmVwYXRjaGlu
ZyAtIHNlZSBjb21tZW50IG9uIG9wX3B1dF9ieV9pZC4KICAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCByZXBhdGNoT2Zmc2V0UHV0QnlJZFN0cnVjdHVyZUlEID0gMTk7CkBAIC0zODMsNiArMzgyLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0VGFnQXNCb29sSW1tZWRpYXRl
KFg4NkFzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWcpOwogCisgICAgICAgIFg4NkFzc2VtYmxlcjo6
Sm1wU3JjIGVtaXRDVElDYWxsKCk7CiAgICAgICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIGVtaXRD
YWxsKHVuc2lnbmVkIG9wY29kZUluZGV4LCBYODY6OlJlZ2lzdGVySUQpOwogICAgICAgICBYODZB
c3NlbWJsZXI6OkptcFNyYyBlbWl0Q2FsbCh1bnNpZ25lZCBvcGNvZGVJbmRleCwgQ1RJSGVscGVy
X2opOwogICAgICAgICBYODZBc3NlbWJsZXI6OkptcFNyYyBlbWl0Q2FsbCh1bnNpZ25lZCBvcGNv
ZGVJbmRleCwgQ1RJSGVscGVyX3ApOwpJbmRleDogVk0vTWFjaGluZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVk0vTWFjaGluZS5jcHAJKHJldmlzaW9uIDM3NTgxKQorKysgVk0vTWFjaGluZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyMDcsNyArNDIwNyw4IEBAIE5FVkVSX0lOTElORSB2b2lkIE1hY2hp
bmU6OnRyeUNUSUNhY2hlR2UKICAgICBkbyB7IFwKICAgICAgICAgQVNTRVJUKEFSR19nbG9iYWxE
YXRhLT5leGNlcHRpb24pOyBcCiAgICAgICAgIEFSR19nbG9iYWxEYXRhLT50aHJvd1JldHVybkFk
ZHJlc3MgPSBDVElfUkVUVVJOX0FERFJFU1M7IFwKLSAgICAgICAgZG9TZXRSZXR1cm5BZGRyZXNz
Vk1UaHJvd1RyYW1wb2xpbmUoJkNUSV9SRVRVUk5fQUREUkVTUyk7IFwKKyAgICAgICAgQVJHX3Nl
dENhbGxGcmFtZShjYWxsRnJhbWUpOyBcCisgICAgICAgIGRvU2V0UmV0dXJuQWRkcmVzc1ZNVGhy
b3dUcmFtcG9saW5lKCZDVElfUkVUVVJOX0FERFJFU1MpOyAgICAgIFwKICAgICB9IHdoaWxlICgw
KQogCiAjZGVmaW5lIFZNX0NIRUNLX0VYQ0VQVElPTigpIFwKQEAgLTQyNDEsMjQgKzQyNDIsMjMg
QEAgTkVWRVJfSU5MSU5FIHZvaWQgTWFjaGluZTo6dHJ5Q1RJQ2FjaGVHZQogICAgICAgICB9IFwK
ICAgICB9IHdoaWxlICgwKQogCi1KU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfY29udmVydF90aGlz
KHZvaWQqKiBhcmdzKQorSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2NvbnZlcnRfdGhpcyh2b2lk
KiogYXJncywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgSlNWYWx1ZSogdjEgPSBBUkdf
c3JjMTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKICAgICBK
U09iamVjdCogcmVzdWx0ID0gdjEtPnRvVGhpc09iamVjdChjYWxsRnJhbWUpOwogICAgIFZNX0NI
RUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIE1h
Y2hpbmU6OmN0aV9vcF9lbmQodm9pZCoqIGFyZ3MpCit2b2lkIE1hY2hpbmU6OmN0aV9vcF9lbmQo
dm9pZCoqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbiA9IEFSR19jYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKKyAgICBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogICAgIEFTU0VSVChzY29w
ZUNoYWluLT5yZWZDb3VudCA+IDEpOwogICAgIHNjb3BlQ2hhaW4tPmRlcmVmKCk7CiB9CiAKLUpT
VmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9hZGQodm9pZCoqIGFyZ3MpCitKU1ZhbHVlKiBNYWNoaW5l
OjpjdGlfb3BfYWRkKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBK
U1ZhbHVlKiB2MSA9IEFSR19zcmMxOwogICAgIEpTVmFsdWUqIHYyID0gQVJHX3NyYzI7CkBAIC00
MjcwLDggKzQyNzAsNiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfYWRkKHZvaWQqKiBhcmdz
CiAgICAgaWYgKHJpZ2h0SXNOdW1iZXIgJiYgZmFzdElzTnVtYmVyKHYxLCBsZWZ0KSkKICAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0ICsgcmlnaHQpOwogICAgIAot
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKLQogICAgIGJvb2wgbGVm
dElzU3RyaW5nID0gdjEtPmlzU3RyaW5nKCk7CiAgICAgaWYgKGxlZnRJc1N0cmluZyAmJiB2Mi0+
aXNTdHJpbmcoKSkgewogICAgICAgICBSZWZQdHI8VVN0cmluZzo6UmVwPiB2YWx1ZSA9IGNvbmNh
dGVuYXRlKHN0YXRpY19jYXN0PEpTU3RyaW5nKj4odjEpLT52YWx1ZSgpLnJlcCgpLCBzdGF0aWNf
Y2FzdDxKU1N0cmluZyo+KHYyKS0+dmFsdWUoKS5yZXAoKSk7CkBAIC00MzAxLDcwICs0Mjk5LDY1
IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9hZGQodm9pZCoqIGFyZ3MKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1KU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfcHJlX2luYyh2b2lkKiogYXJn
cykKK0pTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9wcmVfaW5jKHZvaWQqKiBhcmdzLCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKIHsKICAgICBKU1ZhbHVlKiB2ID0gQVJHX3NyYzE7CiAKLSAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgSlNWYWx1ZSogcmVzdWx0ID0g
anNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHYtPnRvTnVtYmVyKGNhbGxGcmFtZSkgKyAxKTsKICAg
ICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
dm9pZCBNYWNoaW5lOjpjdGlfdGltZW91dF9jaGVjayh2b2lkKiogYXJncykKK3ZvaWQgTWFjaGlu
ZTo6Y3RpX3RpbWVvdXRfY2hlY2sodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ewotICAgIGlmIChBUkdfZ2xvYmFsRGF0YS0+bWFjaGluZS0+Y2hlY2tUaW1lb3V0KEFSR19jYWxs
RnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSkpIHsKKyAgICBpZiAoQVJHX2dsb2JhbERhdGEt
Pm1hY2hpbmUtPmNoZWNrVGltZW91dChjYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSkp
IHsKICAgICAgICAgQVJHX2dsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZUludGVycnVwdGVk
RXhlY3V0aW9uRXhjZXB0aW9uKEFSR19nbG9iYWxEYXRhKTsKICAgICAgICAgVk1fVEhST1dfRVhD
RVBUSU9OX0FUX0VORCgpOwogICAgIH0KIH0KIAotdm9pZCBNYWNoaW5lOjpjdGlfcmVnaXN0ZXJf
ZmlsZV9jaGVjayh2b2lkKiogYXJncykKK3ZvaWQgTWFjaGluZTo6Y3RpX3JlZ2lzdGVyX2ZpbGVf
Y2hlY2sodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUg
PSBBUkdfcmVnaXN0ZXJGaWxlOwogCiAgICAgaWYgKCFyZWdpc3RlckZpbGUtPmdyb3coY2FsbEZy
YW1lICsgY29kZUJsb2NrLT5udW1DYWxsZWVSZWdpc3RlcnMpKSB7CiAgICAgICAgIENhbGxGcmFt
ZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgICAgIEFSR19z
ZXRDYWxsRnJhbWUoY2FsbGVyRnJhbWUpOwogICAgICAgICBBUkdfZ2xvYmFsRGF0YS0+ZXhjZXB0
aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxlckZyYW1lKTsKICAgICAgICAgQVNT
RVJUKEFSR19nbG9iYWxEYXRhLT5leGNlcHRpb24pOwogICAgICAgICBBUkdfZ2xvYmFsRGF0YS0+
dGhyb3dSZXR1cm5BZGRyZXNzID0gY2FsbEZyYW1lLT5yZXR1cm5QQygpOworICAgICAgICBBUkdf
c2V0Q2FsbEZyYW1lKGNhbGxlckZyYW1lKTsKICAgICAgICAgZG9TZXRSZXR1cm5BZGRyZXNzVk1U
aHJvd1RyYW1wb2xpbmUoJkNUSV9SRVRVUk5fQUREUkVTUyk7CiAgICAgfQogfQogCi1pbnQgTWFj
aGluZTo6Y3RpX29wX2xvb3BfaWZfbGVzcyh2b2lkKiogYXJncykKK2ludCBNYWNoaW5lOjpjdGlf
b3BfbG9vcF9pZl9sZXNzKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAg
ICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7CiAgICAgSlNWYWx1ZSogc3JjMiA9IEFSR19zcmMy
OwotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAogICAgIGJvb2wg
cmVzdWx0ID0ganNMZXNzKGNhbGxGcmFtZSwgc3JjMSwgc3JjMik7CiAgICAgVk1fQ0hFQ0tfRVhD
RVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWludCBNYWNoaW5lOjpj
dGlfb3BfbG9vcF9pZl9sZXNzZXEodm9pZCoqIGFyZ3MpCitpbnQgTWFjaGluZTo6Y3RpX29wX2xv
b3BfaWZfbGVzc2VxKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBK
U1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7CiAgICAgSlNWYWx1ZSogc3JjMiA9IEFSR19zcmMyOwot
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAogICAgIGJvb2wgcmVz
dWx0ID0ganNMZXNzRXEoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKTsKICAgICBWTV9DSEVDS19FWENF
UFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogTWFjaGlu
ZTo6Y3RpX29wX25ld19vYmplY3Qodm9pZCoqIGFyZ3MpCitKU1ZhbHVlKiBNYWNoaW5lOjpjdGlf
b3BfbmV3X29iamVjdCh2b2lkKiosIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIHJldHVy
biBjb25zdHJ1Y3RFbXB0eU9iamVjdChBUkdfY2FsbEZyYW1lKTs7CisgICAgcmV0dXJuIGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGNhbGxGcmFtZSk7OwogfQogCi12b2lkIE1hY2hpbmU6OmN0aV9vcF9w
dXRfYnlfaWQodm9pZCoqIGFyZ3MpCit2b2lkIE1hY2hpbmU6OmN0aV9vcF9wdXRfYnlfaWQodm9p
ZCoqIGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBJZGVudGlmaWVyJiBpZGVudCA9ICpBUkdfaWQyOwog
CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CkBAIC00Mzc1LDI0ICs0MzY4LDIzIEBAIHZvaWQg
TWFjaGluZTo6Y3RpX29wX3B1dF9ieV9pZCh2b2lkKiogYXIKICAgICBWTV9DSEVDS19FWENFUFRJ
T05fQVRfRU5EKCk7CiB9CiAKLXZvaWQgTWFjaGluZTo6Y3RpX29wX3B1dF9ieV9pZF9zZWNvbmQo
dm9pZCoqIGFyZ3MpCit2b2lkIE1hY2hpbmU6OmN0aV9vcF9wdXRfYnlfaWRfc2Vjb25kKHZvaWQq
KiBhcmdzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dDsKLSAgICBBUkdfc3JjMS0+cHV0KEFSR19jYWxsRnJhbWUsICpBUkdfaWQyLCBBUkdfc3JjMywg
c2xvdCk7Ci0gICAgQVJHX2dsb2JhbERhdGEtPm1hY2hpbmUtPnRyeUNUSUNhY2hlUHV0QnlJRChB
UkdfY2FsbEZyYW1lLCBBUkdfY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgQ1RJX1JFVFVSTl9BRERS
RVNTLCBBUkdfc3JjMSwgc2xvdCk7CisgICAgQVJHX3NyYzEtPnB1dChjYWxsRnJhbWUsICpBUkdf
aWQyLCBBUkdfc3JjMywgc2xvdCk7CisgICAgQVJHX2dsb2JhbERhdGEtPm1hY2hpbmUtPnRyeUNU
SUNhY2hlUHV0QnlJRChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIENUSV9SRVRV
Uk5fQUREUkVTUywgQVJHX3NyYzEsIHNsb3QpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9F
TkQoKTsKIH0KIAotdm9pZCBNYWNoaW5lOjpjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWModm9pZCoq
IGFyZ3MpCit2b2lkIE1hY2hpbmU6OmN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYyh2b2lkKiogYXJn
cywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0g
ICAgQVJHX3NyYzEtPnB1dChBUkdfY2FsbEZyYW1lLCAqQVJHX2lkMiwgQVJHX3NyYzMsIHNsb3Qp
OworICAgIEFSR19zcmMxLT5wdXQoY2FsbEZyYW1lLCAqQVJHX2lkMiwgQVJHX3NyYzMsIHNsb3Qp
OwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKIH0KIAotdm9pZCBNYWNoaW5lOjpj
dGlfb3BfcHV0X2J5X2lkX2ZhaWwodm9pZCoqIGFyZ3MpCit2b2lkIE1hY2hpbmU6OmN0aV9vcF9w
dXRfYnlfaWRfZmFpbCh2b2lkKiogYXJncywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAgIElkZW50aWZpZXImIGlk
ZW50ID0gKkFSR19pZDI7CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKQEAgLTQ0MDQsOSAr
NDM5Niw4IEBAIHZvaWQgTWFjaGluZTo6Y3RpX29wX3B1dF9ieV9pZF9mYWlsKHZvaWQKICAgICBW
TV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmN0aV9v
cF9nZXRfYnlfaWQodm9pZCoqIGFyZ3MpCitKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfZ2V0X2J5
X2lkKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgSWRlbnRpZmllciYgaWRlbnQgPSAqQVJH
X2lkMjsKIAogICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOwpAQCAtNDQxOSw5ICs0
NDEwLDggQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2dldF9ieV9pZCh2b2lkKgogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9nZXRfYnlfaWRfc2Vj
b25kKHZvaWQqKiBhcmdzKQorSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2dldF9ieV9pZF9zZWNv
bmQodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBJZGVudGlmaWVyJiBpZGVudCA9ICpBUkdf
aWQyOwogCiAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gQVJHX3NyYzE7CkBAIC00NDM0LDkgKzQ0
MjQsOCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfZ2V0X2J5X2lkX3NlY29uCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2dldF9ieV9pZF9nZW5l
cmljKHZvaWQqKiBhcmdzKQorSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2dldF9ieV9pZF9nZW5l
cmljKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgSWRlbnRpZmllciYgaWRlbnQgPSAqQVJH
X2lkMjsKIAogICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOwpAQCAtNDQ0Nyw5ICs0
NDM2LDggQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2dldF9ieV9pZF9nZW5lcgogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9nZXRfYnlfaWRfZmFp
bCh2b2lkKiogYXJncykKK0pTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9nZXRfYnlfaWRfZmFpbCh2
b2lkKiogYXJncywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAgIElkZW50aWZpZXImIGlkZW50ID0gKkFSR19pZDI7
CiAKICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKQEAgLTQ0NjMsOSArNDQ1MSw4
IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9nZXRfYnlfaWRfZmFpbCgKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1KU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfaW5zdGFuY2VvZih2b2lkKiog
YXJncykKK0pTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9pbnN0YW5jZW9mKHZvaWQqKiBhcmdzLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19j
YWxsRnJhbWU7CiAgICAgSlNWYWx1ZSogdmFsdWUgPSBBUkdfc3JjMTsKICAgICBKU1ZhbHVlKiBi
YXNlVmFsID0gQVJHX3NyYzI7CiAgICAgSlNWYWx1ZSogcHJvdG8gPSBBUkdfc3JjMzsKQEAgLTQ0
NzksNyArNDQ2Niw2IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9pbnN0YW5jZW9mKHZvaWQK
ICAgICAgICAgICAgfHwgKGJhc2VDZWxsLT5zdHJ1Y3R1cmVJRCgpLT50eXBlSW5mbygpLmZsYWdz
KCkgJiAoSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVzSGFzSW5zdGFuY2UpKSAhPSBJ
bXBsZW1lbnRzSGFzSW5zdGFuY2UpOwogCiAgICAgaWYgKCFiYXNlVmFsLT5pc09iamVjdCgpKSB7
Ci0gICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgICAgICBB
U1NFUlQoY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmNvbnRhaW5zKENUSV9SRVRV
Uk5fQUREUkVTUykpOwogICAgICAgICB1bnNpZ25lZCB2UENJbmRleCA9IGNvZGVCbG9jay0+Y3Rp
UmV0dXJuQWRkcmVzc1ZQQ01hcC5nZXQoQ1RJX1JFVFVSTl9BRERSRVNTKTsKQEAgLTQ1MDQsOSAr
NDQ5MCw4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9pbnN0YW5jZW9mKHZvaWQKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfZGVsX2J5X2lkKHZv
aWQqKiBhcmdzKQorSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2RlbF9ieV9pZCh2b2lkKiogYXJn
cywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBB
UkdfY2FsbEZyYW1lOwogICAgIElkZW50aWZpZXImIGlkZW50ID0gKkFSR19pZDI7CiAgICAgCiAg
ICAgSlNPYmplY3QqIGJhc2VPYmogPSBBUkdfc3JjMS0+dG9PYmplY3QoY2FsbEZyYW1lKTsKQEAg
LTQ1MTYsNyArNDUwMSw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9kZWxfYnlfaWQodm9p
ZCoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfbXVs
KHZvaWQqKiBhcmdzKQorSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX211bCh2b2lkKiogYXJncywg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgSlNWYWx1ZSogc3JjMSA9IEFSR19zcmMxOwog
ICAgIEpTVmFsdWUqIHNyYzIgPSBBUkdfc3JjMjsKQEAgLTQ1MjYsMTggKzQ1MTEsMTcgQEAgSlNW
YWx1ZSogTWFjaGluZTo6Y3RpX29wX211bCh2b2lkKiogYXJncwogICAgIGlmIChmYXN0SXNOdW1i
ZXIoc3JjMSwgbGVmdCkgJiYgZmFzdElzTnVtYmVyKHNyYzIsIHJpZ2h0KSkKICAgICAgICAgcmV0
dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0ICogcmlnaHQpOwogCi0gICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpz
TnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMxLT50b051bWJlcihjYWxsRnJhbWUpICogc3JjMi0+
dG9OdW1iZXIoY2FsbEZyYW1lKSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9uZXdfZnVu
Yyh2b2lkKiogYXJncykKK0pTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9uZXdfZnVuYyh2b2lkKiog
YXJncywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIEFSR19mdW5jMS0+bWFr
ZUZ1bmN0aW9uKEFSR19jYWxsRnJhbWUsIEFSR19jYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKSk7Cisg
ICAgcmV0dXJuIEFSR19mdW5jMS0+bWFrZUZ1bmN0aW9uKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5z
Y29wZUNoYWluKCkpOwogfQogCi1Wb2lkUHRyUGFpciBNYWNoaW5lOjpjdGlfb3BfY2FsbF9KU0Z1
bmN0aW9uKHZvaWQqKiBhcmdzKQorVm9pZFB0clBhaXIgTWFjaGluZTo6Y3RpX29wX2NhbGxfSlNG
dW5jdGlvbih2b2lkKiogYXJncywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAjaWZuZGVmIE5E
RUJVRwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwpAQCAtNDU0NSwxMSArNDUyOSwxMCBAQCBWb2lk
UHRyUGFpciBNYWNoaW5lOjpjdGlfb3BfY2FsbF9KU0Z1bmN0CiAjZW5kaWYKIAogICAgIGlmIChV
TkxJS0VMWSgqQVJHX3Byb2ZpbGVyUmVmZXJlbmNlICE9IDApKQotICAgICAgICAoKkFSR19wcm9m
aWxlclJlZmVyZW5jZSktPndpbGxFeGVjdXRlKEFSR19jYWxsRnJhbWUsIHN0YXRpY19jYXN0PEpT
RnVuY3Rpb24qPihBUkdfc3JjMSkpOworICAgICAgICAoKkFSR19wcm9maWxlclJlZmVyZW5jZSkt
PndpbGxFeGVjdXRlKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KEFSR19zcmMx
KSk7CiAKICAgICBTY29wZUNoYWluTm9kZSogY2FsbERhdGFTY29wZUNoYWluID0gc3RhdGljX2Nh
c3Q8SlNGdW5jdGlvbio+KEFSR19zcmMxKS0+bV9zY29wZUNoYWluLm5vZGUoKTsKICAgICBDb2Rl
QmxvY2sqIG5ld0NvZGVCbG9jayA9ICZzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4oQVJHX3NyYzEp
LT5tX2JvZHktPmJ5dGVDb2RlKGNhbGxEYXRhU2NvcGVDaGFpbik7Ci0gICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAgIHNpemVfdCByZWdpc3Rlck9mZnNldCA9IEFS
R19pbnQyOwogICAgIGludCBhcmdDb3VudCA9IEFSR19pbnQzOwogCkBAIC00NTg2LDIyICs0NTY5
LDIyIEBAIFZvaWRQdHJQYWlyIE1hY2hpbmU6OmN0aV9vcF9jYWxsX0pTRnVuY3QKICAgICByZXR1
cm4gcGFpcjsKIH0KIAotdm9pZCogTWFjaGluZTo6Y3RpX3ZtX2NvbXBpbGUodm9pZCoqIGFyZ3Mp
Cit2b2lkKiBNYWNoaW5lOjpjdGlfdm1fY29tcGlsZSh2b2lkKiogYXJncywgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBBUkdfY2FsbEZyYW1lLT5j
b2RlQmxvY2soKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCk7CiAgICAgaWYgKCFjb2RlQmxvY2stPmN0aUNvZGUpCi0gICAgICAgIENUSTo6Y29tcGls
ZShBUkdfZ2xvYmFsRGF0YS0+bWFjaGluZSwgQVJHX2NhbGxGcmFtZSwgY29kZUJsb2NrKTsKKyAg
ICAgICAgQ1RJOjpjb21waWxlKEFSR19nbG9iYWxEYXRhLT5tYWNoaW5lLCBjYWxsRnJhbWUsIGNv
ZGVCbG9jayk7CiAgICAgcmV0dXJuIGNvZGVCbG9jay0+Y3RpQ29kZTsKIH0KIAotSlNWYWx1ZSog
TWFjaGluZTo6Y3RpX29wX3B1c2hfYWN0aXZhdGlvbih2b2lkKiogYXJncykKK0pTVmFsdWUqIE1h
Y2hpbmU6OmN0aV9vcF9wdXNoX2FjdGl2YXRpb24odm9pZCoqIGFyZ3MsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogewotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IG5ldyAoQVJHX2dsb2Jh
bERhdGEpIEpTQWN0aXZhdGlvbihBUkdfY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkJv
ZHlOb2RlKj4oQVJHX2NhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyTm9kZSkpOwotICAgIEFS
R19jYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oQVJHX2NhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5j
b3B5KCktPnB1c2goYWN0aXZhdGlvbikpOworICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9
IG5ldyAoQVJHX2dsb2JhbERhdGEpIEpTQWN0aXZhdGlvbihjYWxsRnJhbWUsIHN0YXRpY19jYXN0
PEZ1bmN0aW9uQm9keU5vZGUqPihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lck5vZGUpKTsK
KyAgICBjYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmNv
cHkoKS0+cHVzaChhY3RpdmF0aW9uKSk7CiAgICAgcmV0dXJuIGFjdGl2YXRpb247CiB9CiAKLUpT
VmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24odm9pZCoqIGFyZ3MpCitK
U1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKHZvaWQqKiBhcmdzLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBKU1ZhbHVlKiBmdW5jVmFsID0gQVJHX3NyYzE7
CiAKQEAgLTQ2MTMsNzcgKzQ1OTYsNzIgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2NhbGxf
Tm90SlNGdW5jdAogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpIHsKICAgICAgICAg
aW50IHJlZ2lzdGVyT2Zmc2V0ID0gQVJHX2ludDI7CiAgICAgICAgIGludCBhcmdDb3VudCA9IEFS
R19pbnQzOwotICAgICAgICBDYWxsRnJhbWUqIHByZXZpb3VzQ2FsbEZyYW1lID0gQVJHX2NhbGxG
cmFtZTsKLSAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShw
cmV2aW91c0NhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldCk7Ci0KLSAgICAg
ICAgY2FsbEZyYW1lLT5pbml0KDAsIEFSR19pbnN0cjQgKyAxLCBwcmV2aW91c0NhbGxGcmFtZS0+
c2NvcGVDaGFpbigpLCBwcmV2aW91c0NhbGxGcmFtZSwgMCwgYXJnQ291bnQsIHN0YXRpY19jYXN0
PEpTRnVuY3Rpb24qPihmdW5jVmFsKSk7Ci0gICAgICAgIEFSR19zZXRDYWxsRnJhbWUoY2FsbEZy
YW1lKTsKKyAgICAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0
ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgcmVnaXN0ZXJPZmZzZXQpOwogCisgICAgICAgIG5l
d0NhbGxGcmFtZS0+aW5pdCgwLCBBUkdfaW5zdHI0ICsgMSwgY2FsbEZyYW1lLT5zY29wZUNoYWlu
KCksIGNhbGxGcmFtZSwgMCwgYXJnQ291bnQsIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihmdW5j
VmFsKSk7CiAgICAgICAgIGlmICgqQVJHX3Byb2ZpbGVyUmVmZXJlbmNlKQotICAgICAgICAgICAg
KCpBUkdfcHJvZmlsZXJSZWZlcmVuY2UpLT53aWxsRXhlY3V0ZShjYWxsRnJhbWUsIHN0YXRpY19j
YXN0PEpTRnVuY3Rpb24qPihmdW5jVmFsKSk7CisgICAgICAgICAgICAoKkFSR19wcm9maWxlclJl
ZmVyZW5jZSktPndpbGxFeGVjdXRlKG5ld0NhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8SlNGdW5jdGlv
bio+KGZ1bmNWYWwpKTsKIAotICAgICAgICBSZWdpc3RlciogYXJndiA9IEFSR19jYWxsRnJhbWUt
PnJlZ2lzdGVycygpIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gYXJnQ291
bnQ7CisgICAgICAgIFJlZ2lzdGVyKiBhcmd2ID0gbmV3Q2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAt
IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFyZ0NvdW50OwogICAgICAgICBB
cmdMaXN0IGFyZ0xpc3QoYXJndiArIDEsIGFyZ0NvdW50IC0gMSk7CiAKICAgICAgICAgQ1RJX01B
Q0hJTkVfU0FNUExJTkdfY2FsbGluZ0hvc3RGdW5jdGlvbigpOwogCi0gICAgICAgIEpTVmFsdWUq
IHJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGNhbGxGcmFtZSwgc3RhdGlj
X2Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmNWYWwpLCBhcmd2WzBdLmpzVmFsdWUoY2FsbEZyYW1lKSwg
YXJnTGlzdCk7Ci0gICAgICAgIEFSR19zZXRDYWxsRnJhbWUocHJldmlvdXNDYWxsRnJhbWUpOwor
ICAgICAgICBKU1ZhbHVlKiByZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihu
ZXdDYWxsRnJhbWUsIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihmdW5jVmFsKSwgYXJndlswXS5q
c1ZhbHVlKG5ld0NhbGxGcmFtZSksIGFyZ0xpc3QpOwogICAgICAgICBWTV9DSEVDS19FWENFUFRJ
T04oKTsKIAogICAgICAgICBpZiAoKkFSR19wcm9maWxlclJlZmVyZW5jZSkKLSAgICAgICAgICAg
ICgqQVJHX3Byb2ZpbGVyUmVmZXJlbmNlKS0+ZGlkRXhlY3V0ZShwcmV2aW91c0NhbGxGcmFtZSwg
c3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmNWYWwpKTsKKyAgICAgICAgICAgICgqQVJHX3By
b2ZpbGVyUmVmZXJlbmNlKS0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEpTRnVu
Y3Rpb24qPihmdW5jVmFsKSk7CiAKICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgIH0K
IAogICAgIEFTU0VSVChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpOwogCi0gICAgQVJHX2dsb2Jh
bERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKEFSR19jYWxsRnJhbWUs
IGZ1bmNWYWwsIEFSR19pbnN0cjQsIEFSR19jYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKKyAgICBB
UkdfZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoY2FsbEZy
YW1lLCBmdW5jVmFsLCBBUkdfaW5zdHI0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKICAgICBW
TV9USFJPV19FWENFUFRJT04oKTsKIH0KIAotdm9pZCBNYWNoaW5lOjpjdGlfb3BfY3JlYXRlX2Fy
Z3VtZW50cyh2b2lkKiogYXJncykKK3ZvaWQgTWFjaGluZTo6Y3RpX29wX2NyZWF0ZV9hcmd1bWVu
dHModm9pZCoqIGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIEFyZ3VtZW50cyog
YXJndW1lbnRzID0gbmV3IChBUkdfZ2xvYmFsRGF0YSkgQXJndW1lbnRzKEFSR19jYWxsRnJhbWUp
OwotICAgIEFSR19jYWxsRnJhbWUtPnNldENhbGxlZUFyZ3VtZW50cyhhcmd1bWVudHMpOwotICAg
IEFSR19jYWxsRnJhbWVbUmVnaXN0ZXJGaWxlOjpBcmd1bWVudHNSZWdpc3Rlcl0gPSBhcmd1bWVu
dHM7CisgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBuZXcgKEFSR19nbG9iYWxEYXRhKSBBcmd1
bWVudHMoY2FsbEZyYW1lKTsKKyAgICBjYWxsRnJhbWUtPnNldENhbGxlZUFyZ3VtZW50cyhhcmd1
bWVudHMpOworICAgIGNhbGxGcmFtZVtSZWdpc3RlckZpbGU6OkFyZ3VtZW50c1JlZ2lzdGVyXSA9
IGFyZ3VtZW50czsKIH0KIAotdm9pZCBNYWNoaW5lOjpjdGlfb3BfdGVhcl9vZmZfYWN0aXZhdGlv
bih2b2lkKiogYXJncykKK3ZvaWQgTWFjaGluZTo6Y3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24o
dm9pZCoqIGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIEFTU0VSVChBUkdfY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbik7CisgICAgQVNTRVJUKGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCktPm5lZWRzRnVsbFNjb3BlQ2hhaW4pOwogICAgIEFTU0VSVChB
Ukdfc3JjMS0+aXNPYmplY3QoJkpTQWN0aXZhdGlvbjo6aW5mbykpOwotICAgIHN0YXRpY19jYXN0
PEpTQWN0aXZhdGlvbio+KEFSR19zcmMxKS0+Y29weVJlZ2lzdGVycyhBUkdfY2FsbEZyYW1lLT5v
cHRpb25hbENhbGxlZUFyZ3VtZW50cygpKTsKKyAgICBzdGF0aWNfY2FzdDxKU0FjdGl2YXRpb24q
PihBUkdfc3JjMSktPmNvcHlSZWdpc3RlcnMoY2FsbEZyYW1lLT5vcHRpb25hbENhbGxlZUFyZ3Vt
ZW50cygpKTsKIH0KIAotdm9pZCBNYWNoaW5lOjpjdGlfb3BfdGVhcl9vZmZfYXJndW1lbnRzKHZv
aWQqKiBhcmdzKQordm9pZCBNYWNoaW5lOjpjdGlfb3BfdGVhcl9vZmZfYXJndW1lbnRzKHZvaWQq
KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgQVNTRVJUKEFSR19jYWxsRnJhbWUtPmNv
ZGVCbG9jaygpLT51c2VzQXJndW1lbnRzICYmICFBUkdfY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+
bmVlZHNGdWxsU2NvcGVDaGFpbik7Ci0gICAgQVJHX2NhbGxGcmFtZS0+b3B0aW9uYWxDYWxsZWVB
cmd1bWVudHMoKS0+Y29weVJlZ2lzdGVycygpOworICAgIEFTU0VSVChjYWxsRnJhbWUtPmNvZGVC
bG9jaygpLT51c2VzQXJndW1lbnRzICYmICFjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5uZWVkc0Z1
bGxTY29wZUNoYWluKTsKKyAgICBjYWxsRnJhbWUtPm9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzKCkt
PmNvcHlSZWdpc3RlcnMoKTsKIH0KIAotdm9pZCBNYWNoaW5lOjpjdGlfb3BfcmV0X3Byb2ZpbGVy
KHZvaWQqKiBhcmdzKQordm9pZCBNYWNoaW5lOjpjdGlfb3BfcmV0X3Byb2ZpbGVyKHZvaWQqKiBh
cmdzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBBU1NFUlQoKkFSR19wcm9maWxlclJl
ZmVyZW5jZSk7Ci0gICAgKCpBUkdfcHJvZmlsZXJSZWZlcmVuY2UpLT5kaWRFeGVjdXRlKEFSR19j
YWxsRnJhbWUsIEFSR19jYWxsRnJhbWUtPmNhbGxlZSgpKTsKKyAgICAoKkFSR19wcm9maWxlclJl
ZmVyZW5jZSktPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNhbGxlZSgpKTsKIH0K
IAotdm9pZCBNYWNoaW5lOjpjdGlfb3BfcmV0X3Njb3BlQ2hhaW4odm9pZCoqIGFyZ3MpCit2b2lk
IE1hY2hpbmU6OmN0aV9vcF9yZXRfc2NvcGVDaGFpbih2b2lkKiosIENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewotICAgIEFTU0VSVChBUkdfY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxs
U2NvcGVDaGFpbik7Ci0gICAgQVJHX2NhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5kZXJlZigpOwor
ICAgIEFTU0VSVChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKTsK
KyAgICBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+ZGVyZWYoKTsKIH0KIAotSlNWYWx1ZSogTWFj
aGluZTo6Y3RpX29wX25ld19hcnJheSh2b2lkKiogYXJncykKK0pTVmFsdWUqIE1hY2hpbmU6OmN0
aV9vcF9uZXdfYXJyYXkodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAg
IEFyZ0xpc3QgYXJnTGlzdChBUkdfcmVnaXN0ZXJzMSwgQVJHX2ludDIpOwotICAgIHJldHVybiBj
b25zdHJ1Y3RBcnJheShBUkdfY2FsbEZyYW1lLCBhcmdMaXN0KTsKKyAgICByZXR1cm4gY29uc3Ry
dWN0QXJyYXkoY2FsbEZyYW1lLCBhcmdMaXN0KTsKIH0KIAotSlNWYWx1ZSogTWFjaGluZTo6Y3Rp
X29wX3Jlc29sdmUodm9pZCoqIGFyZ3MpCitKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfcmVzb2x2
ZSh2b2lkKiogYXJncywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
ID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CiAKICAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRl
ciA9IHNjb3BlQ2hhaW4tPmJlZ2luKCk7CkBAIC00NzA4LDEwICs0Njg2LDggQEAgSlNWYWx1ZSog
TWFjaGluZTo6Y3RpX29wX3Jlc29sdmUodm9pZCoqIAogICAgIFZNX1RIUk9XX0VYQ0VQVElPTigp
OwogfQogCi1Wb2lkUHRyUGFpciBNYWNoaW5lOjpjdGlfb3BfY29uc3RydWN0X0pTQ29uc3RydWN0
KHZvaWQqKiBhcmdzKQorVm9pZFB0clBhaXIgTWFjaGluZTo6Y3RpX29wX2NvbnN0cnVjdF9KU0Nv
bnN0cnVjdCh2b2lkKiogYXJncywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwotCiAgICAgSlNGdW5jdGlvbiogY29uc3Ry
dWN0b3IgPSBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4oQVJHX3NyYzEpOwogICAgIEpTVmFsdWUq
IGNvbnN0clByb3RvVmFsID0gQVJHX3NyYzI7CiAgICAgaW50IGZpcnN0QXJnID0gQVJHX2ludDM7
CkBAIC00NzcxLDEwICs0NzQ3LDggQEAgVm9pZFB0clBhaXIgTWFjaGluZTo6Y3RpX29wX2NvbnN0
cnVjdF9KUwogICAgIHJldHVybiBwYWlyOwogfQogCi1KU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3Bf
Y29uc3RydWN0X05vdEpTQ29uc3RydWN0KHZvaWQqKiBhcmdzKQorSlNWYWx1ZSogTWFjaGluZTo6
Y3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCh2b2lkKiogYXJncywgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwot
CiAgICAgSlNWYWx1ZSogY29uc3RyVmFsID0gQVJHX3NyYzE7CiAgICAgaW50IGZpcnN0QXJnID0g
QVJHX2ludDM7CiAgICAgaW50IGFyZ0NvdW50ID0gQVJHX2ludDU7CkBAIC00ODA3LDkgKzQ3ODEs
OCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfY29uc3RydWN0X05vdEpTCiAgICAgVk1fVEhS
T1dfRVhDRVBUSU9OKCk7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9nZXRfYnlfdmFs
KHZvaWQqKiBhcmdzKQorSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2dldF9ieV92YWwodm9pZCoq
IGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gQVJHX2NhbGxGcmFtZTsKICAgICBNYWNoaW5lKiBtYWNoaW5lID0gQVJHX2dsb2JhbERhdGEt
Pm1hY2hpbmU7CiAKICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKQEAgLTQ4Mzks
OSArNDgxMiw4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9nZXRfYnlfdmFsKHZvaWQKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1Wb2lkUHRyUGFpciBNYWNoaW5lOjpjdGlfb3BfcmVzb2x2
ZV9mdW5jKHZvaWQqKiBhcmdzKQorVm9pZFB0clBhaXIgTWFjaGluZTo6Y3RpX29wX3Jlc29sdmVf
ZnVuYyh2b2lkKiogYXJncywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CiAKICAgICBTY29wZUNoYWluSXRlcmF0b3Ig
aXRlciA9IHNjb3BlQ2hhaW4tPmJlZ2luKCk7CkBAIC00ODgxLDcgKzQ4NTMsNyBAQCBWb2lkUHRy
UGFpciBNYWNoaW5lOjpjdGlfb3BfcmVzb2x2ZV9mdW5jCiAgICAgVk1fVEhST1dfRVhDRVBUSU9O
XzIoKTsKIH0KIAotSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3N1Yih2b2lkKiogYXJncykKK0pT
VmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9zdWIodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewogICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKICAgICBKU1ZhbHVlKiBzcmMy
ID0gQVJHX3NyYzI7CkBAIC00ODkxLDE1ICs0ODYzLDEzIEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0
aV9vcF9zdWIodm9pZCoqIGFyZ3MKICAgICBpZiAoZmFzdElzTnVtYmVyKHNyYzEsIGxlZnQpICYm
IGZhc3RJc051bWJlcihzcmMyLCByaWdodCkpCiAgICAgICAgIHJldHVybiBqc051bWJlcihBUkdf
Z2xvYmFsRGF0YSwgbGVmdCAtIHJpZ2h0KTsKIAotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
QVJHX2NhbGxGcmFtZTsKICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFs
RGF0YSwgc3JjMS0+dG9OdW1iZXIoY2FsbEZyYW1lKSAtIHNyYzItPnRvTnVtYmVyKGNhbGxGcmFt
ZSkpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi12b2lkIE1hY2hpbmU6OmN0aV9vcF9wdXRfYnlfdmFsKHZvaWQqKiBhcmdzKQordm9p
ZCBNYWNoaW5lOjpjdGlfb3BfcHV0X2J5X3ZhbCh2b2lkKiogYXJncywgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiB7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAg
IE1hY2hpbmUqIG1hY2hpbmUgPSBBUkdfZ2xvYmFsRGF0YS0+bWFjaGluZTsKIAogICAgIEpTVmFs
dWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOwpAQCAtNDkyOSwxMCArNDg5OSw4IEBAIHZvaWQgTWFj
aGluZTo6Y3RpX29wX3B1dF9ieV92YWwodm9pZCoqIGEKICAgICBWTV9DSEVDS19FWENFUFRJT05f
QVRfRU5EKCk7CiB9CiAKLXZvaWQgTWFjaGluZTo6Y3RpX29wX3B1dF9ieV92YWxfYXJyYXkodm9p
ZCoqIGFyZ3MpCit2b2lkIE1hY2hpbmU6OmN0aV9vcF9wdXRfYnlfdmFsX2FycmF5KHZvaWQqKiBh
cmdzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IEFSR19jYWxsRnJhbWU7Ci0KICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKICAg
ICBpbnQgaSA9IEFSR19pbnQyOwogICAgIEpTVmFsdWUqIHZhbHVlID0gQVJHX3NyYzM7CkBAIC00
OTUzLDI2ICs0OTIxLDIzIEBAIHZvaWQgTWFjaGluZTo6Y3RpX29wX3B1dF9ieV92YWxfYXJyYXko
dm8KICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiB9CiAKLUpTVmFsdWUqIE1hY2hp
bmU6OmN0aV9vcF9sZXNzZXEodm9pZCoqIGFyZ3MpCitKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3Bf
bGVzc2VxKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNC
b29sZWFuKGpzTGVzc0VxKGNhbGxGcmFtZSwgQVJHX3NyYzEsIEFSR19zcmMyKSk7CiAgICAgVk1f
Q0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWludCBN
YWNoaW5lOjpjdGlfb3BfbG9vcF9pZl90cnVlKHZvaWQqKiBhcmdzKQoraW50IE1hY2hpbmU6OmN0
aV9vcF9sb29wX2lmX3RydWUodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewog
ICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKIAotICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gQVJHX2NhbGxGcmFtZTsKLQogICAgIGJvb2wgcmVzdWx0ID0gc3JjMS0+dG9Cb29sZWFuKGNh
bGxGcmFtZSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9uZWdhdGUodm9pZCoqIGFyZ3Mp
CitKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfbmVnYXRlKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKICAgICBKU1ZhbHVlKiBzcmMgPSBBUkdfc3JjMTsKIApAQCAtNDk4MCwy
MCArNDk0NSwxOCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfbmVnYXRlKHZvaWQqKiBhCiAg
ICAgaWYgKGZhc3RJc051bWJlcihzcmMsIHYpKQogICAgICAgICByZXR1cm4ganNOdW1iZXIoQVJH
X2dsb2JhbERhdGEsIC12KTsKIAotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxG
cmFtZTsKICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgLXNy
Yy0+dG9OdW1iZXIoY2FsbEZyYW1lKSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9yZXNv
bHZlX2Jhc2Uodm9pZCoqIGFyZ3MpCitKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfcmVzb2x2ZV9i
YXNlKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gaW5s
aW5lUmVzb2x2ZUJhc2UoQVJHX2NhbGxGcmFtZSwgKkFSR19pZDEsIEFSR19jYWxsRnJhbWUtPnNj
b3BlQ2hhaW4oKSk7CisgICAgcmV0dXJuIGlubGluZVJlc29sdmVCYXNlKGNhbGxGcmFtZSwgKkFS
R19pZDEsIGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpKTsKIH0KIAotSlNWYWx1ZSogTWFjaGluZTo6
Y3RpX29wX3Jlc29sdmVfc2tpcCh2b2lkKiogYXJncykKK0pTVmFsdWUqIE1hY2hpbmU6OmN0aV9v
cF9yZXNvbHZlX3NraXAodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogCiAgICAgaW50IHNraXAg
PSBBUkdfaW50MjsKQEAgLTUwMjMsOSArNDk4Niw4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9v
cF9yZXNvbHZlX3NraXAodm8KICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKIH0KIAotSlNWYWx1
ZSogTWFjaGluZTo6Y3RpX29wX3Jlc29sdmVfZ2xvYmFsKHZvaWQqKiBhcmdzKQorSlNWYWx1ZSog
TWFjaGluZTo6Y3RpX29wX3Jlc29sdmVfZ2xvYmFsKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRpY19jYXN0PEpTR2xvYmFsT2Jq
ZWN0Kj4oQVJHX3NyYzEpOwogICAgIElkZW50aWZpZXImIGlkZW50ID0gKkFSR19pZDI7CiAgICAg
SW5zdHJ1Y3Rpb24qIHZQQyA9IEFSR19pbnN0cjM7CkBAIC01MDUxLDcgKzUwMTMsNyBAQCBKU1Zh
bHVlKiBNYWNoaW5lOjpjdGlfb3BfcmVzb2x2ZV9nbG9iYWwoCiAgICAgVk1fVEhST1dfRVhDRVBU
SU9OKCk7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9kaXYodm9pZCoqIGFyZ3MpCitK
U1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfZGl2KHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKIHsKICAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7CiAgICAgSlNWYWx1ZSogc3Jj
MiA9IEFSR19zcmMyOwpAQCAtNTA2MSw2MSArNTAyMyw1MiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpj
dGlfb3BfZGl2KHZvaWQqKiBhcmdzCiAgICAgaWYgKGZhc3RJc051bWJlcihzcmMxLCBsZWZ0KSAm
JiBmYXN0SXNOdW1iZXIoc3JjMiwgcmlnaHQpKQogICAgICAgICByZXR1cm4ganNOdW1iZXIoQVJH
X2dsb2JhbERhdGEsIGxlZnQgLyByaWdodCk7CiAKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IEFSR19jYWxsRnJhbWU7CiAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2Jh
bERhdGEsIHNyYzEtPnRvTnVtYmVyKGNhbGxGcmFtZSkgLyBzcmMyLT50b051bWJlcihjYWxsRnJh
bWUpKTsKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3ByZV9kZWModm9pZCoqIGFyZ3MpCitK
U1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfcHJlX2RlYyh2b2lkKiogYXJncywgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7CiAgICAgSlNWYWx1ZSogdiA9IEFSR19zcmMxOwogCi0gICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVt
YmVyKEFSR19nbG9iYWxEYXRhLCB2LT50b051bWJlcihjYWxsRnJhbWUpIC0gMSk7CiAgICAgVk1f
Q0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWludCBN
YWNoaW5lOjpjdGlfb3Bfamxlc3Modm9pZCoqIGFyZ3MpCitpbnQgTWFjaGluZTo6Y3RpX29wX2ps
ZXNzKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBKU1ZhbHVlKiBz
cmMxID0gQVJHX3NyYzE7CiAgICAgSlNWYWx1ZSogc3JjMiA9IEFSR19zcmMyOwotICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAogICAgIGJvb2wgcmVzdWx0ID0ganNM
ZXNzKGNhbGxGcmFtZSwgc3JjMSwgc3JjMik7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VO
RCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9u
b3Qodm9pZCoqIGFyZ3MpCitKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3Bfbm90KHZvaWQqKiBhcmdz
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBKU1ZhbHVlKiBzcmMgPSBBUkdfc3JjMTsK
IAotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKLQogICAgIEpTVmFs
dWUqIHJlc3VsdCA9IGpzQm9vbGVhbighc3JjLT50b0Jvb2xlYW4oY2FsbEZyYW1lKSk7CiAgICAg
Vk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWlu
dCBTRlhfQ0FMTCBNYWNoaW5lOjpjdGlfb3BfanRydWUodm9pZCoqIGFyZ3MpCitpbnQgU0ZYX0NB
TEwgTWFjaGluZTo6Y3RpX29wX2p0cnVlKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKIHsKICAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7CiAKLSAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7Ci0KICAgICBib29sIHJlc3VsdCA9IHNyYzEtPnRvQm9v
bGVhbihjYWxsRnJhbWUpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1Wb2lkUHRyUGFpciBNYWNoaW5lOjpjdGlfb3BfcG9zdF9pbmMo
dm9pZCoqIGFyZ3MpCitWb2lkUHRyUGFpciBNYWNoaW5lOjpjdGlfb3BfcG9zdF9pbmModm9pZCoq
IGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEpTVmFsdWUqIHYgPSBBUkdfc3Jj
MTsKIAotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKLQogICAgIEpT
VmFsdWUqIG51bWJlciA9IHYtPnRvSlNOdW1iZXIoY2FsbEZyYW1lKTsKICAgICBWTV9DSEVDS19F
WENFUFRJT05fMigpOwogCkBAIC01MTIzLDIwICs1MDc2LDE4IEBAIFZvaWRQdHJQYWlyIE1hY2hp
bmU6OmN0aV9vcF9wb3N0X2luYyh2b2kKICAgICByZXR1cm4gcGFpcjsKIH0KIAotSlNWYWx1ZSog
TWFjaGluZTo6Y3RpX29wX2VxKHZvaWQqKiBhcmdzKQorSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29w
X2VxKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBKU1ZhbHVlKiBz
cmMxID0gQVJHX3NyYzE7CiAgICAgSlNWYWx1ZSogc3JjMiA9IEFSR19zcmMyOwogCi0gICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwotCiAgICAgQVNTRVJUKCFKU0ltbWVk
aWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpOwogICAgIEpTVmFsdWUq
IHJlc3VsdCA9IGpzQm9vbGVhbihlcXVhbFNsb3dDYXNlSW5saW5lKGNhbGxGcmFtZSwgc3JjMSwg
c3JjMikpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1KU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfbHNoaWZ0KHZvaWQqKiBhcmdzKQor
SlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2xzaGlmdCh2b2lkKiogYXJncywgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7CiAgICAgSlNWYWx1ZSogdmFsID0gQVJHX3NyYzE7CiAgICAgSlNWYWx1ZSog
c2hpZnQgPSBBUkdfc3JjMjsKQEAgLTUxNDgsMTMgKzUwOTksMTIgQEAgSlNWYWx1ZSogTWFjaGlu
ZTo6Y3RpX29wX2xzaGlmdCh2b2lkKiogYQogICAgIGlmIChmYXN0VG9JbnQzMih2YWwsIGxlZnQp
ICYmIGZhc3RUb1VJbnQzMihzaGlmdCwgcmlnaHQpKQogICAgICAgICByZXR1cm4ganNOdW1iZXIo
QVJHX2dsb2JhbERhdGEsIGxlZnQgPDwgKHJpZ2h0ICYgMHgxZikpOwogCi0gICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVt
YmVyKEFSR19nbG9iYWxEYXRhLCAodmFsLT50b0ludDMyKGNhbGxGcmFtZSkpIDw8IChzaGlmdC0+
dG9VSW50MzIoY2FsbEZyYW1lKSAmIDB4MWYpKTsKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRf
RU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29w
X2JpdGFuZCh2b2lkKiogYXJncykKK0pTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9iaXRhbmQodm9p
ZCoqIGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEpTVmFsdWUqIHNyYzEgPSBB
Ukdfc3JjMTsKICAgICBKU1ZhbHVlKiBzcmMyID0gQVJHX3NyYzI7CkBAIC01MTY0LDEzICs1MTE0
LDEyIEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9iaXRhbmQodm9pZCoqIGEKICAgICBpZiAo
ZmFzdFRvSW50MzIoc3JjMSwgbGVmdCkgJiYgZmFzdFRvSW50MzIoc3JjMiwgcmlnaHQpKQogICAg
ICAgICByZXR1cm4ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGxlZnQgJiByaWdodCk7CiAKLSAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgSlNWYWx1ZSogcmVz
dWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEtPnRvSW50MzIoY2FsbEZyYW1lKSAm
IHNyYzItPnRvSW50MzIoY2FsbEZyYW1lKSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VO
RCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9y
c2hpZnQodm9pZCoqIGFyZ3MpCitKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfcnNoaWZ0KHZvaWQq
KiBhcmdzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBKU1ZhbHVlKiB2YWwgPSBBUkdf
c3JjMTsKICAgICBKU1ZhbHVlKiBzaGlmdCA9IEFSR19zcmMyOwpAQCAtNTE4MiwxMyArNTEzMSwx
MiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfcnNoaWZ0KHZvaWQqKiBhCiAgICAgaWYgKGZh
c3RUb0ludDMyKHZhbCwgbGVmdCkgJiYgZmFzdFRvVUludDMyKHNoaWZ0LCByaWdodCkpCiAgICAg
ICAgIHJldHVybiBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVmdCA+PiAocmlnaHQgJiAweDFm
KSk7CiAKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgSlNW
YWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsICh2YWwtPnRvSW50MzIoY2Fs
bEZyYW1lKSkgPj4gKHNoaWZ0LT50b1VJbnQzMihjYWxsRnJhbWUpICYgMHgxZikpOwogICAgIFZN
X0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1Zh
bHVlKiBNYWNoaW5lOjpjdGlfb3BfYml0bm90KHZvaWQqKiBhcmdzKQorSlNWYWx1ZSogTWFjaGlu
ZTo6Y3RpX29wX2JpdG5vdCh2b2lkKiogYXJncywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAg
ICAgSlNWYWx1ZSogc3JjID0gQVJHX3NyYzE7CiAKQEAgLTUxOTYsMTUgKzUxNDQsMTMgQEAgSlNW
YWx1ZSogTWFjaGluZTo6Y3RpX29wX2JpdG5vdCh2b2lkKiogYQogICAgIGlmIChmYXN0VG9JbnQz
MihzcmMsIHZhbHVlKSkKICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCB+
dmFsdWUpOwogICAgICAgICAgICAgCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2Fs
bEZyYW1lOwogICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCB+
c3JjLT50b0ludDMyKGNhbGxGcmFtZSkpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQo
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1Wb2lkUHRyUGFpciBNYWNoaW5lOjpjdGlfb3Bf
cmVzb2x2ZV93aXRoX2Jhc2Uodm9pZCoqIGFyZ3MpCitWb2lkUHRyUGFpciBNYWNoaW5lOjpjdGlf
b3BfcmVzb2x2ZV93aXRoX2Jhc2Uodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogCiAgICAgU2Nv
cGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBzY29wZUNoYWluLT5iZWdpbigpOwpAQCAtNTIzNiw1MCAr
NTE4Miw0NSBAQCBWb2lkUHRyUGFpciBNYWNoaW5lOjpjdGlfb3BfcmVzb2x2ZV93aXRoCiAgICAg
Vk1fVEhST1dfRVhDRVBUSU9OXzIoKTsKIH0KIAotSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX25l
d19mdW5jX2V4cCh2b2lkKiogYXJncykKK0pTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9uZXdfZnVu
Y19leHAodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIHJldHVybiBB
UkdfZnVuY2V4cDEtPm1ha2VGdW5jdGlvbihBUkdfY2FsbEZyYW1lLCBBUkdfY2FsbEZyYW1lLT5z
Y29wZUNoYWluKCkpOworICAgIHJldHVybiBBUkdfZnVuY2V4cDEtPm1ha2VGdW5jdGlvbihjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpKTsKIH0KIAotSlNWYWx1ZSogTWFjaGluZTo6
Y3RpX29wX21vZCh2b2lkKiogYXJncykKK0pTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9tb2Qodm9p
ZCoqIGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEpTVmFsdWUqIGRpdmlkZW5k
VmFsdWUgPSBBUkdfc3JjMTsKICAgICBKU1ZhbHVlKiBkaXZpc29yVmFsdWUgPSBBUkdfc3JjMjsK
IAotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBkb3VibGUg
ZCA9IGRpdmlkZW5kVmFsdWUtPnRvTnVtYmVyKGNhbGxGcmFtZSk7CiAgICAgSlNWYWx1ZSogcmVz
dWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGZtb2QoZCwgZGl2aXNvclZhbHVlLT50b051
bWJlcihjYWxsRnJhbWUpKSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9sZXNzKHZvaWQq
KiBhcmdzKQorSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2xlc3Modm9pZCoqIGFyZ3MsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxG
cmFtZTsKICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oanNMZXNzKGNhbGxGcmFtZSwg
QVJHX3NyYzEsIEFSR19zcmMyKSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9uZXEodm9p
ZCoqIGFyZ3MpCitKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfbmVxKHZvaWQqKiBhcmdzLCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7CiAgICAg
SlNWYWx1ZSogc3JjMiA9IEFSR19zcmMyOwogCiAgICAgQVNTRVJUKCFKU0ltbWVkaWF0ZTo6YXJl
Qm90aEltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpOwogCi0gICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbigh
ZXF1YWxTbG93Q2FzZUlubGluZShjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKICAgICBWTV9DSEVD
S19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVm9pZFB0clBh
aXIgTWFjaGluZTo6Y3RpX29wX3Bvc3RfZGVjKHZvaWQqKiBhcmdzKQorVm9pZFB0clBhaXIgTWFj
aGluZTo6Y3RpX29wX3Bvc3RfZGVjKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
IHsKICAgICBKU1ZhbHVlKiB2ID0gQVJHX3NyYzE7CiAKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IEFSR19jYWxsRnJhbWU7Ci0KICAgICBKU1ZhbHVlKiBudW1iZXIgPSB2LT50b0pTTnVtYmVy
KGNhbGxGcmFtZSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OXzIoKTsKIApAQCAtNTI4NywxMyAr
NTIyOCwxMSBAQCBWb2lkUHRyUGFpciBNYWNoaW5lOjpjdGlfb3BfcG9zdF9kZWModm9pCiAgICAg
cmV0dXJuIHBhaXI7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF91cnNoaWZ0KHZvaWQq
KiBhcmdzKQorSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3Vyc2hpZnQodm9pZCoqIGFyZ3MsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEpTVmFsdWUqIHZhbCA9IEFSR19zcmMxOwogICAg
IEpTVmFsdWUqIHNoaWZ0ID0gQVJHX3NyYzI7CiAKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IEFSR19jYWxsRnJhbWU7Ci0KICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVO
dW1iZXJzKHZhbCwgc2hpZnQpICYmICFKU0ltbWVkaWF0ZTo6aXNOZWdhdGl2ZSh2YWwpKQogICAg
ICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OnJpZ2h0U2hpZnRJbW1lZGlhdGVOdW1iZXJzKHZhbCwg
c2hpZnQpOwogICAgIGVsc2UgewpAQCAtNTMwMywzOCArNTI0MiwzMyBAQCBKU1ZhbHVlKiBNYWNo
aW5lOjpjdGlfb3BfdXJzaGlmdCh2b2lkKiogCiAgICAgfQogfQogCi1KU1ZhbHVlKiBNYWNoaW5l
OjpjdGlfb3BfYml0eG9yKHZvaWQqKiBhcmdzKQorSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2Jp
dHhvcih2b2lkKiogYXJncywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgSlNWYWx1ZSog
c3JjMSA9IEFSR19zcmMxOwogICAgIEpTVmFsdWUqIHNyYzIgPSBBUkdfc3JjMjsKIAotICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKLQogICAgIEpTVmFsdWUqIHJlc3Vs
dCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMxLT50b0ludDMyKGNhbGxGcmFtZSkgXiBz
cmMyLT50b0ludDMyKGNhbGxGcmFtZSkpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQo
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfbmV3
X3JlZ2V4cCh2b2lkKiogYXJncykKK0pTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9uZXdfcmVnZXhw
KHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gbmV3IChB
UkdfZ2xvYmFsRGF0YSkgUmVnRXhwT2JqZWN0KEFSR19jYWxsRnJhbWUtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIEFSR19yZWdleHAxKTsKKyAgICByZXR1cm4gbmV3
IChBUkdfZ2xvYmFsRGF0YSkgUmVnRXhwT2JqZWN0KGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwgQVJHX3JlZ2V4cDEpOwogfQogCi1KU1ZhbHVlKiBN
YWNoaW5lOjpjdGlfb3BfYml0b3Iodm9pZCoqIGFyZ3MpCitKU1ZhbHVlKiBNYWNoaW5lOjpjdGlf
b3BfYml0b3Iodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEpTVmFs
dWUqIHNyYzEgPSBBUkdfc3JjMTsKICAgICBKU1ZhbHVlKiBzcmMyID0gQVJHX3NyYzI7CiAKLSAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7Ci0KICAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgc3JjMS0+dG9JbnQzMihjYWxsRnJhbWUp
IHwgc3JjMi0+dG9JbnQzMihjYWxsRnJhbWUpKTsKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRf
RU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29w
X2NhbGxfZXZhbCh2b2lkKiogYXJncykKK0pTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9jYWxsX2V2
YWwodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmls
ZSA9IEFSR19yZWdpc3RlckZpbGU7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpOwogICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZy
YW1lLT5zY29wZUNoYWluKCk7CkBAIC01MzU3LDkgKzUyOTEsOCBAQCBKU1ZhbHVlKiBNYWNoaW5l
OjpjdGlfb3BfY2FsbF9ldmFsKHZvaWQqCiAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjppbXBvc3Np
YmxlVmFsdWUoKTsKIH0KIAotdm9pZCogTWFjaGluZTo6Y3RpX29wX3Rocm93KHZvaWQqKiBhcmdz
KQordm9pZCogTWFjaGluZTo6Y3RpX29wX3Rocm93KHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5jb250YWlucyhDVElfUkVU
VVJOX0FERFJFU1MpKTsKQEAgLTUzODIsNjkgKzUzMTUsNjkgQEAgdm9pZCogTWFjaGluZTo6Y3Rp
X29wX3Rocm93KHZvaWQqKiBhcmdzKQogICAgIHJldHVybiBleGNlcHRpb25WYWx1ZTsKIH0KIAot
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogTWFjaGluZTo6Y3RpX29wX2dldF9wbmFtZXModm9pZCoq
IGFyZ3MpCitKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBNYWNoaW5lOjpjdGlfb3BfZ2V0X3BuYW1l
cyh2b2lkKiogYXJncywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIEpTUHJv
cGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShBUkdfY2FsbEZyYW1lLCBBUkdfc3JjMSk7CisgICAg
cmV0dXJuIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShjYWxsRnJhbWUsIEFSR19zcmMx
KTsKIH0KIAotSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX25leHRfcG5hbWUodm9pZCoqIGFyZ3Mp
CitKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfbmV4dF9wbmFtZSh2b2lkKiogYXJncywgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogaXQgPSBBUkdf
cG5pMTsKLSAgICBKU1ZhbHVlKiB0ZW1wID0gaXQtPm5leHQoQVJHX2NhbGxGcmFtZSk7CisgICAg
SlNWYWx1ZSogdGVtcCA9IGl0LT5uZXh0KGNhbGxGcmFtZSk7CiAgICAgaWYgKCF0ZW1wKQogICAg
ICAgICBpdC0+aW52YWxpZGF0ZSgpOwogICAgIHJldHVybiB0ZW1wOwogfQogCi12b2lkIE1hY2hp
bmU6OmN0aV9vcF9wdXNoX3Njb3BlKHZvaWQqKiBhcmdzKQordm9pZCBNYWNoaW5lOjpjdGlfb3Bf
cHVzaF9zY29wZSh2b2lkKiogYXJncywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgSlNP
YmplY3QqIG8gPSBBUkdfc3JjMS0+dG9PYmplY3QoQVJHX2NhbGxGcmFtZSk7CisgICAgSlNPYmpl
Y3QqIG8gPSBBUkdfc3JjMS0+dG9PYmplY3QoY2FsbEZyYW1lKTsKICAgICBWTV9DSEVDS19FWENF
UFRJT05fVk9JRCgpOwotICAgIEFSR19jYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oQVJHX2NhbGxG
cmFtZS0+c2NvcGVDaGFpbigpLT5wdXNoKG8pKTsKKyAgICBjYWxsRnJhbWUtPnNldFNjb3BlQ2hh
aW4oY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnB1c2gobykpOwogfQogCi12b2lkIE1hY2hpbmU6
OmN0aV9vcF9wb3Bfc2NvcGUodm9pZCoqIGFyZ3MpCit2b2lkIE1hY2hpbmU6OmN0aV9vcF9wb3Bf
c2NvcGUodm9pZCoqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBBUkdfY2FsbEZyYW1l
LT5zZXRTY29wZUNoYWluKEFSR19jYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cG9wKCkpOworICAg
IGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cG9wKCkp
OwogfQogCi1KU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfdHlwZW9mKHZvaWQqKiBhcmdzKQorSlNW
YWx1ZSogTWFjaGluZTo6Y3RpX29wX3R5cGVvZih2b2lkKiogYXJncywgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiB7Ci0gICAgcmV0dXJuIGpzVHlwZVN0cmluZ0ZvclZhbHVlKEFSR19jYWxsRnJhbWUs
IEFSR19zcmMxKTsKKyAgICByZXR1cm4ganNUeXBlU3RyaW5nRm9yVmFsdWUoY2FsbEZyYW1lLCBB
Ukdfc3JjMSk7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9pc191bmRlZmluZWQodm9p
ZCoqIGFyZ3MpCitKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfaXNfdW5kZWZpbmVkKHZvaWQqKiBh
cmdzLCBDYWxsRnJhbWUqKQogewogICAgIEpTVmFsdWUqIHYgPSBBUkdfc3JjMTsKICAgICByZXR1
cm4ganNCb29sZWFuKEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2KSA/IHYtPmlzVW5kZWZpbmVk
KCkgOiB2LT5hc0NlbGwoKS0+c3RydWN0dXJlSUQoKS0+dHlwZUluZm8oKS5tYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKCkpOwogfQogCi1KU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfaXNfYm9vbGVhbih2
b2lkKiogYXJncykKK0pTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9pc19ib29sZWFuKHZvaWQqKiBh
cmdzLCBDYWxsRnJhbWUqKQogewogICAgIHJldHVybiBqc0Jvb2xlYW4oQVJHX3NyYzEtPmlzQm9v
bGVhbigpKTsKIH0KIAotSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2lzX251bWJlcih2b2lkKiog
YXJncykKK0pTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9pc19udW1iZXIodm9pZCoqIGFyZ3MsIENh
bGxGcmFtZSopCiB7CiAgICAgcmV0dXJuIGpzQm9vbGVhbihBUkdfc3JjMS0+aXNOdW1iZXIoKSk7
CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9pc19zdHJpbmcodm9pZCoqIGFyZ3MpCitK
U1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfaXNfc3RyaW5nKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUq
KQogewogICAgIHJldHVybiBqc0Jvb2xlYW4oQVJHX2dsb2JhbERhdGEtPm1hY2hpbmUtPmlzSlNT
dHJpbmcoQVJHX3NyYzEpKTsKIH0KIAotSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2lzX29iamVj
dCh2b2lkKiogYXJncykKK0pTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9pc19vYmplY3Qodm9pZCoq
IGFyZ3MsIENhbGxGcmFtZSopCiB7CiAgICAgcmV0dXJuIGpzQm9vbGVhbihqc0lzT2JqZWN0VHlw
ZShBUkdfc3JjMSkpOwogfQogCi1KU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfaXNfZnVuY3Rpb24o
dm9pZCoqIGFyZ3MpCitKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfaXNfZnVuY3Rpb24odm9pZCoq
IGFyZ3MsIENhbGxGcmFtZSopCiB7CiAgICAgcmV0dXJuIGpzQm9vbGVhbihqc0lzRnVuY3Rpb25U
eXBlKEFSR19zcmMxKSk7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9zdHJpY3RlcSh2
b2lkKiogYXJncykKK0pTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9zdHJpY3RlcSh2b2lkKiogYXJn
cywgQ2FsbEZyYW1lKikKIHsKICAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7CiAgICAgSlNW
YWx1ZSogc3JjMiA9IEFSR19zcmMyOwpAQCAtNTQ1Niw3ICs1Mzg5LDcgQEAgSlNWYWx1ZSogTWFj
aGluZTo6Y3RpX29wX3N0cmljdGVxKHZvaWQqKgogICAgIHJldHVybiBqc0Jvb2xlYW4oc3RyaWN0
RXF1YWxTbG93Q2FzZUlubGluZShzcmMxLCBzcmMyKSk7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6
OmN0aV9vcF9uc3RyaWN0ZXEodm9pZCoqIGFyZ3MpCitKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3Bf
bnN0cmljdGVxKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqKQogewogICAgIEpTVmFsdWUqIHNyYzEg
PSBBUkdfc3JjMTsKICAgICBKU1ZhbHVlKiBzcmMyID0gQVJHX3NyYzI7CkBAIC01NDY4LDIzICs1
NDAxLDIwIEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9uc3RyaWN0ZXEodm9pZCoKICAgICBy
ZXR1cm4ganNCb29sZWFuKCFzdHJpY3RFcXVhbFNsb3dDYXNlSW5saW5lKHNyYzEsIHNyYzIpKTsK
IH0KIAotSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3RvX2pzbnVtYmVyKHZvaWQqKiBhcmdzKQor
SlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3RvX2pzbnVtYmVyKHZvaWQqKiBhcmdzLCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKIHsKICAgICBKU1ZhbHVlKiBzcmMgPSBBUkdfc3JjMTsKLSAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKICAgICBKU1ZhbHVlKiByZXN1bHQg
PSBzcmMtPnRvSlNOdW1iZXIoY2FsbEZyYW1lKTsKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRf
RU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29w
X2luKHZvaWQqKiBhcmdzKQorSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2luKHZvaWQqKiBhcmdz
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFS
R19jYWxsRnJhbWU7CiAgICAgSlNWYWx1ZSogYmFzZVZhbCA9IEFSR19zcmMyOwogCiAgICAgaWYg
KCFiYXNlVmFsLT5pc09iamVjdCgpKSB7Ci0gICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
QVJHX2NhbGxGcmFtZTsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwogICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNz
VlBDTWFwLmNvbnRhaW5zKENUSV9SRVRVUk5fQUREUkVTUykpOwogICAgICAgICB1bnNpZ25lZCB2
UENJbmRleCA9IGNvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5nZXQoQ1RJX1JFVFVS
Tl9BRERSRVNTKTsKQEAgLTU1MDQsMTkgKzU0MzQsMTcgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3Rp
X29wX2luKHZvaWQqKiBhcmdzKQogICAgIHJldHVybiBqc0Jvb2xlYW4oYmFzZU9iai0+aGFzUHJv
cGVydHkoY2FsbEZyYW1lLCBwcm9wZXJ0eSkpOwogfQogCi1KU1ZhbHVlKiBNYWNoaW5lOjpjdGlf
b3BfcHVzaF9uZXdfc2NvcGUodm9pZCoqIGFyZ3MpCitKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3Bf
cHVzaF9uZXdfc2NvcGUodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAg
IEpTT2JqZWN0KiBzY29wZSA9IG5ldyAoQVJHX2dsb2JhbERhdGEpIEpTU3RhdGljU2NvcGVPYmpl
Y3QoQVJHX2NhbGxGcmFtZSwgKkFSR19pZDEsIEFSR19zcmMyLCBEb250RGVsZXRlKTsKKyAgICBK
U09iamVjdCogc2NvcGUgPSBuZXcgKEFSR19nbG9iYWxEYXRhKSBKU1N0YXRpY1Njb3BlT2JqZWN0
KGNhbGxGcmFtZSwgKkFSR19pZDEsIEFSR19zcmMyLCBEb250RGVsZXRlKTsKIAotICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBjYWxsRnJhbWUtPnNldFNjb3Bl
Q2hhaW4oY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnB1c2goc2NvcGUpKTsKICAgICByZXR1cm4g
c2NvcGU7CiB9CiAKLXZvaWQgTWFjaGluZTo6Y3RpX29wX2ptcF9zY29wZXModm9pZCoqIGFyZ3Mp
Cit2b2lkIE1hY2hpbmU6OmN0aV9vcF9qbXBfc2NvcGVzKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKICAgICB1bnNpZ25lZCBjb3VudCA9IEFSR19pbnQxOwotICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAogICAgIFNjb3BlQ2hhaW5Ob2RlKiB0
bXAgPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKICAgICB3aGlsZSAoY291bnQtLSkKQEAgLTU1
MjQsMTkgKzU0NTIsMTcgQEAgdm9pZCBNYWNoaW5lOjpjdGlfb3Bfam1wX3Njb3Blcyh2b2lkKiog
YQogICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbih0bXApOwogfQogCi12b2lkIE1hY2hpbmU6
OmN0aV9vcF9wdXRfYnlfaW5kZXgodm9pZCoqIGFyZ3MpCit2b2lkIE1hY2hpbmU6OmN0aV9vcF9w
dXRfYnlfaW5kZXgodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0
eSA9IEFSR19pbnQyOwogCiAgICAgQVJHX3NyYzEtPnB1dChjYWxsRnJhbWUsIHByb3BlcnR5LCBB
Ukdfc3JjMyk7CiB9CiAKLXZvaWQqIE1hY2hpbmU6OmN0aV9vcF9zd2l0Y2hfaW1tKHZvaWQqKiBh
cmdzKQordm9pZCogTWFjaGluZTo6Y3RpX29wX3N3aXRjaF9pbW0odm9pZCoqIGFyZ3MsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewogICAgIEpTVmFsdWUqIHNjcnV0aW5lZSA9IEFSR19zcmMxOwog
ICAgIHVuc2lnbmVkIHRhYmxlSW5kZXggPSBBUkdfaW50MjsKLSAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpOwogCiAgICAgaWYgKEpTSW1tZWRpYXRlOjppc051bWJlcihzY3J1dGlu
ZWUpKSB7CkBAIC01NTQ3LDExICs1NDczLDEwIEBAIHZvaWQqIE1hY2hpbmU6OmN0aV9vcF9zd2l0
Y2hfaW1tKHZvaWQqKiAKICAgICByZXR1cm4gY29kZUJsb2NrLT5pbW1lZGlhdGVTd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdLmN0aURlZmF1bHQ7CiB9CiAKLXZvaWQqIE1hY2hpbmU6OmN0aV9v
cF9zd2l0Y2hfY2hhcih2b2lkKiogYXJncykKK3ZvaWQqIE1hY2hpbmU6OmN0aV9vcF9zd2l0Y2hf
Y2hhcih2b2lkKiogYXJncywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgSlNWYWx1ZSog
c2NydXRpbmVlID0gQVJHX3NyYzE7CiAgICAgdW5zaWduZWQgdGFibGVJbmRleCA9IEFSR19pbnQy
OwotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKICAgICB2b2lkKiByZXN1
bHQgPSBjb2RlQmxvY2stPmNoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF0uY3Rp
RGVmYXVsdDsKQEAgLTU1NjUsMTEgKzU0OTAsMTAgQEAgdm9pZCogTWFjaGluZTo6Y3RpX29wX3N3
aXRjaF9jaGFyKHZvaWQqKgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQqIE1hY2hpbmU6
OmN0aV9vcF9zd2l0Y2hfc3RyaW5nKHZvaWQqKiBhcmdzKQordm9pZCogTWFjaGluZTo6Y3RpX29w
X3N3aXRjaF9zdHJpbmcodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAg
IEpTVmFsdWUqIHNjcnV0aW5lZSA9IEFSR19zcmMxOwogICAgIHVuc2lnbmVkIHRhYmxlSW5kZXgg
PSBBUkdfaW50MjsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCiAgICAg
dm9pZCogcmVzdWx0ID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdLmN0aURlZmF1bHQ7CkBAIC01NTgyLDEwICs1NTA2LDggQEAgdm9pZCogTWFjaGluZTo6Y3Rp
X29wX3N3aXRjaF9zdHJpbmcodm9pZAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUq
IE1hY2hpbmU6OmN0aV9vcF9kZWxfYnlfdmFsKHZvaWQqKiBhcmdzKQorSlNWYWx1ZSogTWFjaGlu
ZTo6Y3RpX29wX2RlbF9ieV92YWwodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKLQogICAgIEpTVmFs
dWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOwogICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gYmFzZVZh
bHVlLT50b09iamVjdChjYWxsRnJhbWUpOyAvLyBtYXkgdGhyb3cKIApAQCAtNTYwNSwxMCArNTUy
Nyw4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9kZWxfYnlfdmFsKHZvaWQKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi12b2lkIE1hY2hpbmU6OmN0aV9vcF9wdXRfZ2V0dGVyKHZvaWQqKiBh
cmdzKQordm9pZCBNYWNoaW5lOjpjdGlfb3BfcHV0X2dldHRlcih2b2lkKiogYXJncywgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZy
YW1lOwotCiAgICAgQVNTRVJUKEFSR19zcmMxLT5pc09iamVjdCgpKTsKICAgICBKU09iamVjdCog
YmFzZU9iaiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oQVJHX3NyYzEpOwogICAgIElkZW50aWZp
ZXImIGlkZW50ID0gKkFSR19pZDI7CkBAIC01NjE2LDEwICs1NTM2LDggQEAgdm9pZCBNYWNoaW5l
OjpjdGlfb3BfcHV0X2dldHRlcih2b2lkKiogYQogICAgIGJhc2VPYmotPmRlZmluZUdldHRlcihj
YWxsRnJhbWUsIGlkZW50LCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KEFSR19zcmMzKSk7CiB9CiAK
LXZvaWQgTWFjaGluZTo6Y3RpX29wX3B1dF9zZXR0ZXIodm9pZCoqIGFyZ3MpCit2b2lkIE1hY2hp
bmU6OmN0aV9vcF9wdXRfc2V0dGVyKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
IHsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7Ci0KICAgICBBU1NF
UlQoQVJHX3NyYzEtPmlzT2JqZWN0KCkpOwogICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gc3RhdGlj
X2Nhc3Q8SlNPYmplY3QqPihBUkdfc3JjMSk7CiAgICAgSWRlbnRpZmllciYgaWRlbnQgPSAqQVJH
X2lkMjsKQEAgLTU2MjcsOSArNTU0NSw4IEBAIHZvaWQgTWFjaGluZTo6Y3RpX29wX3B1dF9zZXR0
ZXIodm9pZCoqIGEKICAgICBiYXNlT2JqLT5kZWZpbmVTZXR0ZXIoY2FsbEZyYW1lLCBpZGVudCwg
c3RhdGljX2Nhc3Q8SlNPYmplY3QqPihBUkdfc3JjMykpOwogfQogCi1KU1ZhbHVlKiBNYWNoaW5l
OjpjdGlfb3BfbmV3X2Vycm9yKHZvaWQqKiBhcmdzKQorSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29w
X25ld19lcnJvcih2b2lkKiogYXJncywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICB1bnNpZ25lZCB0eXBlID0gQVJHX2lu
dDE7CiAgICAgSlNWYWx1ZSogbWVzc2FnZSA9IEFSR19zcmMyOwpAQCAtNTYzOCwxMCArNTU1NSw4
IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9uZXdfZXJyb3Iodm9pZCoKICAgICByZXR1cm4g
RXJyb3I6OmNyZWF0ZShjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEVycm9yVHlwZT4odHlwZSksIG1l
c3NhZ2UtPnRvU3RyaW5nKGNhbGxGcmFtZSksIGxpbmVOdW1iZXIsIGNvZGVCbG9jay0+b3duZXJO
b2RlLT5zb3VyY2VJRCgpLCBjb2RlQmxvY2stPm93bmVyTm9kZS0+c291cmNlVVJMKCkpOwogfQog
Ci12b2lkIE1hY2hpbmU6OmN0aV9vcF9kZWJ1Zyh2b2lkKiogYXJncykKK3ZvaWQgTWFjaGluZTo6
Y3RpX29wX2RlYnVnKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7Ci0KICAgICBpbnQgZGVidWdIb29r
SUQgPSBBUkdfaW50MTsKICAgICBpbnQgZmlyc3RMaW5lID0gQVJHX2ludDI7CiAgICAgaW50IGxh
c3RMaW5lID0gQVJHX2ludDM7CkBAIC01NjQ5LDkgKzU1NjQsOCBAQCB2b2lkIE1hY2hpbmU6OmN0
aV9vcF9kZWJ1Zyh2b2lkKiogYXJncykKICAgICBBUkdfZ2xvYmFsRGF0YS0+bWFjaGluZS0+ZGVi
dWcoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVidWdIb29rSUQpLCBmaXJz
dExpbmUsIGxhc3RMaW5lKTsKIH0KIAotdm9pZCogTWFjaGluZTo6Y3RpX3ZtX3Rocm93KHZvaWQq
KiBhcmdzKQordm9pZCogTWFjaGluZTo6Y3RpX3ZtX3Rocm93KHZvaWQqKiBhcmdzLCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKIHsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJh
bWU7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwog
CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5jb250YWlucyhB
UkdfZ2xvYmFsRGF0YS0+dGhyb3dSZXR1cm5BZGRyZXNzKSk7CkluZGV4OiBWTS9NYWNoaW5lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVk0vTWFjaGluZS5oCShyZXZpc2lvbiAzNzU4MSkKKysrIFZNL01hY2hp
bmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDEwMyArMTQxLDEwMyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogI2lmIEVOQUJMRShDVEkpCiAKLSAgICAgICAgc3RhdGljIHZvaWQgU0ZYX0NBTEwgY3Rp
X3RpbWVvdXRfY2hlY2sodm9pZCoqIGFyZ3MpOwotICAgICAgICBzdGF0aWMgdm9pZCBTRlhfQ0FM
TCBjdGlfcmVnaXN0ZXJfZmlsZV9jaGVjayh2b2lkKiogYXJncyk7CisgICAgICAgIHN0YXRpYyB2
b2lkIFNGWF9DQUxMIGN0aV90aW1lb3V0X2NoZWNrKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsK
KyAgICAgICAgc3RhdGljIHZvaWQgU0ZYX0NBTEwgY3RpX3JlZ2lzdGVyX2ZpbGVfY2hlY2sodm9p
ZCoqIGFyZ3MsIENhbGxGcmFtZSopOwogCi0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FM
TCBjdGlfb3BfY29udmVydF90aGlzKHZvaWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGljIHZvaWQg
U0ZYX0NBTEwgY3RpX29wX2VuZCh2b2lkKiogYXJncyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVl
KiBTRlhfQ0FMTCBjdGlfb3BfYWRkKHZvaWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGljIEpTVmFs
dWUqIFNGWF9DQUxMIGN0aV9vcF9wcmVfaW5jKHZvaWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGlj
IGludCBTRlhfQ0FMTCBjdGlfb3BfbG9vcF9pZl9sZXNzKHZvaWQqKiBhcmdzKTsKLSAgICAgICAg
c3RhdGljIGludCBTRlhfQ0FMTCBjdGlfb3BfbG9vcF9pZl9sZXNzZXEodm9pZCoqIGFyZ3MpOwot
ICAgICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX25ld19vYmplY3Qodm9pZCoq
IGFyZ3MpOwotICAgICAgICBzdGF0aWMgdm9pZCBTRlhfQ0FMTCBjdGlfb3BfcHV0X2J5X2lkKHZv
aWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGljIHZvaWQgU0ZYX0NBTEwgY3RpX29wX3B1dF9ieV9p
ZF9zZWNvbmQodm9pZCoqIGFyZ3MpOwotICAgICAgICBzdGF0aWMgdm9pZCBTRlhfQ0FMTCBjdGlf
b3BfcHV0X2J5X2lkX2dlbmVyaWModm9pZCoqIGFyZ3MpOwotICAgICAgICBzdGF0aWMgdm9pZCBT
RlhfQ0FMTCBjdGlfb3BfcHV0X2J5X2lkX2ZhaWwodm9pZCoqIGFyZ3MpOwotICAgICAgICBzdGF0
aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX2dldF9ieV9pZCh2b2lkKiogYXJncyk7Ci0gICAg
ICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfZ2V0X2J5X2lkX3NlY29uZCh2b2lk
KiogYXJncyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfZ2V0X2J5
X2lkX2dlbmVyaWModm9pZCoqIGFyZ3MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NB
TEwgY3RpX29wX2dldF9ieV9pZF9mYWlsKHZvaWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGljIEpT
VmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9kZWxfYnlfaWQodm9pZCoqIGFyZ3MpOwotICAgICAgICBz
dGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX2luc3RhbmNlb2Yodm9pZCoqIGFyZ3MpOwot
ICAgICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX211bCh2b2lkKiogYXJncyk7
Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfbmV3X2Z1bmModm9pZCoq
IGFyZ3MpOwotICAgICAgICBzdGF0aWMgVm9pZFB0clBhaXIgU0ZYX0NBTEwgY3RpX29wX2NhbGxf
SlNGdW5jdGlvbih2b2lkKiogYXJncyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FM
TCBjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKHZvaWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGlj
IHZvaWQgU0ZYX0NBTEwgY3RpX29wX2NyZWF0ZV9hcmd1bWVudHModm9pZCoqIGFyZ3MpOwotICAg
ICAgICBzdGF0aWMgdm9pZCBTRlhfQ0FMTCBjdGlfb3BfdGVhcl9vZmZfYWN0aXZhdGlvbih2b2lk
KiogYXJncyk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIFNGWF9DQUxMIGN0aV9vcF90ZWFyX29mZl9h
cmd1bWVudHModm9pZCoqIGFyZ3MpOwotICAgICAgICBzdGF0aWMgdm9pZCBTRlhfQ0FMTCBjdGlf
b3BfcmV0X3Byb2ZpbGVyKHZvaWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGljIHZvaWQgU0ZYX0NB
TEwgY3RpX29wX3JldF9zY29wZUNoYWluKHZvaWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGljIEpT
VmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9uZXdfYXJyYXkodm9pZCoqIGFyZ3MpOwotICAgICAgICBz
dGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX3Jlc29sdmUodm9pZCoqIGFyZ3MpOwotICAg
ICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX3Jlc29sdmVfZ2xvYmFsKHZvaWQq
KiBhcmdzKTsKLSAgICAgICAgc3RhdGljIFZvaWRQdHJQYWlyIFNGWF9DQUxMIGN0aV9vcF9jb25z
dHJ1Y3RfSlNDb25zdHJ1Y3Qodm9pZCoqIGFyZ3MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSog
U0ZYX0NBTEwgY3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCh2b2lkKiogYXJncyk7Ci0g
ICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfZ2V0X2J5X3ZhbCh2b2lkKiog
YXJncyk7Ci0gICAgICAgIHN0YXRpYyBWb2lkUHRyUGFpciBTRlhfQ0FMTCBjdGlfb3BfcmVzb2x2
ZV9mdW5jKHZvaWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0
aV9vcF9zdWIodm9pZCoqIGFyZ3MpOwotICAgICAgICBzdGF0aWMgdm9pZCBTRlhfQ0FMTCBjdGlf
b3BfcHV0X2J5X3ZhbCh2b2lkKiogYXJncyk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIFNGWF9DQUxM
IGN0aV9vcF9wdXRfYnlfdmFsX2FycmF5KHZvaWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGljIEpT
VmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9sZXNzZXEodm9pZCoqIGFyZ3MpOwotICAgICAgICBzdGF0
aWMgaW50IFNGWF9DQUxMIGN0aV9vcF9sb29wX2lmX3RydWUodm9pZCoqIGFyZ3MpOwotICAgICAg
ICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX3Jlc29sdmVfYmFzZSh2b2lkKiogYXJn
cyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfbmVnYXRlKHZvaWQq
KiBhcmdzKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9yZXNvbHZl
X3NraXAodm9pZCoqIGFyZ3MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3Rp
X29wX2Rpdih2b2lkKiogYXJncyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBj
dGlfb3BfcHJlX2RlYyh2b2lkKiogYXJncyk7Ci0gICAgICAgIHN0YXRpYyBpbnQgU0ZYX0NBTEwg
Y3RpX29wX2psZXNzKHZvaWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9D
QUxMIGN0aV9vcF9ub3Qodm9pZCoqIGFyZ3MpOwotICAgICAgICBzdGF0aWMgaW50IFNGWF9DQUxM
IGN0aV9vcF9qdHJ1ZSh2b2lkKiogYXJncyk7Ci0gICAgICAgIHN0YXRpYyBWb2lkUHRyUGFpciBT
RlhfQ0FMTCBjdGlfb3BfcG9zdF9pbmModm9pZCoqIGFyZ3MpOwotICAgICAgICBzdGF0aWMgSlNW
YWx1ZSogU0ZYX0NBTEwgY3RpX29wX2VxKHZvaWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGljIEpT
VmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9sc2hpZnQodm9pZCoqIGFyZ3MpOwotICAgICAgICBzdGF0
aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX2JpdGFuZCh2b2lkKiogYXJncyk7Ci0gICAgICAg
IHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfcnNoaWZ0KHZvaWQqKiBhcmdzKTsKLSAg
ICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9iaXRub3Qodm9pZCoqIGFyZ3Mp
OwotICAgICAgICBzdGF0aWMgVm9pZFB0clBhaXIgU0ZYX0NBTEwgY3RpX29wX3Jlc29sdmVfd2l0
aF9iYXNlKHZvaWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0
aV9vcF9uZXdfZnVuY19leHAodm9pZCoqIGFyZ3MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSog
U0ZYX0NBTEwgY3RpX29wX21vZCh2b2lkKiogYXJncyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVl
KiBTRlhfQ0FMTCBjdGlfb3BfbGVzcyh2b2lkKiogYXJncyk7Ci0gICAgICAgIHN0YXRpYyBKU1Zh
bHVlKiBTRlhfQ0FMTCBjdGlfb3BfbmVxKHZvaWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGljIFZv
aWRQdHJQYWlyIFNGWF9DQUxMIGN0aV9vcF9wb3N0X2RlYyh2b2lkKiogYXJncyk7Ci0gICAgICAg
IHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfdXJzaGlmdCh2b2lkKiogYXJncyk7Ci0g
ICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfYml0eG9yKHZvaWQqKiBhcmdz
KTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9uZXdfcmVnZXhwKHZv
aWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9iaXRv
cih2b2lkKiogYXJncyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3Bf
Y2FsbF9ldmFsKHZvaWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGljIHZvaWQqIFNGWF9DQUxMIGN0
aV9vcF90aHJvdyh2b2lkKiogYXJncyk7Ci0gICAgICAgIHN0YXRpYyBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yKiBTRlhfQ0FMTCBjdGlfb3BfZ2V0X3BuYW1lcyh2b2lkKiogYXJncyk7Ci0gICAgICAg
IHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfbmV4dF9wbmFtZSh2b2lkKiogYXJncyk7
Ci0gICAgICAgIHN0YXRpYyB2b2lkIFNGWF9DQUxMIGN0aV9vcF9wdXNoX3Njb3BlKHZvaWQqKiBh
cmdzKTsKLSAgICAgICAgc3RhdGljIHZvaWQgU0ZYX0NBTEwgY3RpX29wX3BvcF9zY29wZSh2b2lk
KiogYXJncyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfdHlwZW9m
KHZvaWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9p
c191bmRlZmluZWQodm9pZCoqIGFyZ3MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NB
TEwgY3RpX29wX2lzX2Jvb2xlYW4odm9pZCoqIGFyZ3MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1
ZSogU0ZYX0NBTEwgY3RpX29wX2lzX251bWJlcih2b2lkKiogYXJncyk7Ci0gICAgICAgIHN0YXRp
YyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfaXNfc3RyaW5nKHZvaWQqKiBhcmdzKTsKLSAgICAg
ICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9pc19vYmplY3Qodm9pZCoqIGFyZ3Mp
OwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX2lzX2Z1bmN0aW9uKHZv
aWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9zdHJp
Y3RlcSh2b2lkKiogYXJncyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlf
b3BfbnN0cmljdGVxKHZvaWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9D
QUxMIGN0aV9vcF90b19qc251bWJlcih2b2lkKiogYXJncyk7Ci0gICAgICAgIHN0YXRpYyBKU1Zh
bHVlKiBTRlhfQ0FMTCBjdGlfb3BfaW4odm9pZCoqIGFyZ3MpOwotICAgICAgICBzdGF0aWMgSlNW
YWx1ZSogU0ZYX0NBTEwgY3RpX29wX3B1c2hfbmV3X3Njb3BlKHZvaWQqKiBhcmdzKTsKLSAgICAg
ICAgc3RhdGljIHZvaWQgU0ZYX0NBTEwgY3RpX29wX2ptcF9zY29wZXModm9pZCoqIGFyZ3MpOwot
ICAgICAgICBzdGF0aWMgdm9pZCBTRlhfQ0FMTCBjdGlfb3BfcHV0X2J5X2luZGV4KHZvaWQqKiBh
cmdzKTsKLSAgICAgICAgc3RhdGljIHZvaWQqIFNGWF9DQUxMIGN0aV9vcF9zd2l0Y2hfaW1tKHZv
aWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGljIHZvaWQqIFNGWF9DQUxMIGN0aV9vcF9zd2l0Y2hf
Y2hhcih2b2lkKiogYXJncyk7Ci0gICAgICAgIHN0YXRpYyB2b2lkKiBTRlhfQ0FMTCBjdGlfb3Bf
c3dpdGNoX3N0cmluZyh2b2lkKiogYXJncyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhf
Q0FMTCBjdGlfb3BfZGVsX2J5X3ZhbCh2b2lkKiogYXJncyk7Ci0gICAgICAgIHN0YXRpYyB2b2lk
IFNGWF9DQUxMIGN0aV9vcF9wdXRfZ2V0dGVyKHZvaWQqKiBhcmdzKTsKLSAgICAgICAgc3RhdGlj
IHZvaWQgU0ZYX0NBTEwgY3RpX29wX3B1dF9zZXR0ZXIodm9pZCoqIGFyZ3MpOwotICAgICAgICBz
dGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX25ld19lcnJvcih2b2lkKiogYXJncyk7Ci0g
ICAgICAgIHN0YXRpYyB2b2lkIFNGWF9DQUxMIGN0aV9vcF9kZWJ1Zyh2b2lkKiogYXJncyk7Ci0K
LSAgICAgICAgc3RhdGljIHZvaWQqIFNGWF9DQUxMIGN0aV92bV90aHJvdyh2b2lkKiogYXJncyk7
Ci0gICAgICAgIHN0YXRpYyB2b2lkKiBTRlhfQ0FMTCBjdGlfdm1fY29tcGlsZSh2b2lkKiogYXJn
cyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfcHVzaF9hY3RpdmF0
aW9uKHZvaWQqKiBhcmdzKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9v
cF9jb252ZXJ0X3RoaXModm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAgICAgICBzdGF0aWMg
dm9pZCBTRlhfQ0FMTCBjdGlfb3BfZW5kKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAgICAg
ICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9hZGQodm9pZCoqIGFyZ3MsIENhbGxG
cmFtZSopOworICAgICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX3ByZV9pbmMo
dm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAgICAgICBzdGF0aWMgaW50IFNGWF9DQUxMIGN0
aV9vcF9sb29wX2lmX2xlc3Modm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAgICAgICBzdGF0
aWMgaW50IFNGWF9DQUxMIGN0aV9vcF9sb29wX2lmX2xlc3NlcSh2b2lkKiogYXJncywgQ2FsbEZy
YW1lKik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfbmV3X29iamVj
dCh2b2lkKiogYXJncywgQ2FsbEZyYW1lKik7CisgICAgICAgIHN0YXRpYyB2b2lkIFNGWF9DQUxM
IGN0aV9vcF9wdXRfYnlfaWQodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAgICAgICBzdGF0
aWMgdm9pZCBTRlhfQ0FMTCBjdGlfb3BfcHV0X2J5X2lkX3NlY29uZCh2b2lkKiogYXJncywgQ2Fs
bEZyYW1lKik7CisgICAgICAgIHN0YXRpYyB2b2lkIFNGWF9DQUxMIGN0aV9vcF9wdXRfYnlfaWRf
Z2VuZXJpYyh2b2lkKiogYXJncywgQ2FsbEZyYW1lKik7CisgICAgICAgIHN0YXRpYyB2b2lkIFNG
WF9DQUxMIGN0aV9vcF9wdXRfYnlfaWRfZmFpbCh2b2lkKiogYXJncywgQ2FsbEZyYW1lKik7Cisg
ICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfZ2V0X2J5X2lkKHZvaWQqKiBh
cmdzLCBDYWxsRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9v
cF9nZXRfYnlfaWRfc2Vjb25kKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAgICAgICAgc3Rh
dGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYyh2b2lkKiogYXJn
cywgQ2FsbEZyYW1lKik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3Bf
Z2V0X2J5X2lkX2ZhaWwodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAgICAgICBzdGF0aWMg
SlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX2RlbF9ieV9pZCh2b2lkKiogYXJncywgQ2FsbEZyYW1l
Kik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfaW5zdGFuY2VvZih2
b2lkKiogYXJncywgQ2FsbEZyYW1lKik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FM
TCBjdGlfb3BfbXVsKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIEpT
VmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9uZXdfZnVuYyh2b2lkKiogYXJncywgQ2FsbEZyYW1lKik7
CisgICAgICAgIHN0YXRpYyBWb2lkUHRyUGFpciBTRlhfQ0FMTCBjdGlfb3BfY2FsbF9KU0Z1bmN0
aW9uKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNG
WF9DQUxMIGN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24odm9pZCoqIGFyZ3MsIENhbGxGcmFtZSop
OworICAgICAgICBzdGF0aWMgdm9pZCBTRlhfQ0FMTCBjdGlfb3BfY3JlYXRlX2FyZ3VtZW50cyh2
b2lkKiogYXJncywgQ2FsbEZyYW1lKik7CisgICAgICAgIHN0YXRpYyB2b2lkIFNGWF9DQUxMIGN0
aV9vcF90ZWFyX29mZl9hY3RpdmF0aW9uKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAgICAg
ICAgc3RhdGljIHZvaWQgU0ZYX0NBTEwgY3RpX29wX3RlYXJfb2ZmX2FyZ3VtZW50cyh2b2lkKiog
YXJncywgQ2FsbEZyYW1lKik7CisgICAgICAgIHN0YXRpYyB2b2lkIFNGWF9DQUxMIGN0aV9vcF9y
ZXRfcHJvZmlsZXIodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAgICAgICBzdGF0aWMgdm9p
ZCBTRlhfQ0FMTCBjdGlfb3BfcmV0X3Njb3BlQ2hhaW4odm9pZCoqIGFyZ3MsIENhbGxGcmFtZSop
OworICAgICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX25ld19hcnJheSh2b2lk
KiogYXJncywgQ2FsbEZyYW1lKik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBj
dGlfb3BfcmVzb2x2ZSh2b2lkKiogYXJncywgQ2FsbEZyYW1lKik7CisgICAgICAgIHN0YXRpYyBK
U1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfcmVzb2x2ZV9nbG9iYWwodm9pZCoqIGFyZ3MsIENhbGxG
cmFtZSopOworICAgICAgICBzdGF0aWMgVm9pZFB0clBhaXIgU0ZYX0NBTEwgY3RpX29wX2NvbnN0
cnVjdF9KU0NvbnN0cnVjdCh2b2lkKiogYXJncywgQ2FsbEZyYW1lKik7CisgICAgICAgIHN0YXRp
YyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KHZvaWQq
KiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0
aV9vcF9nZXRfYnlfdmFsKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAgICAgICAgc3RhdGlj
IFZvaWRQdHJQYWlyIFNGWF9DQUxMIGN0aV9vcF9yZXNvbHZlX2Z1bmModm9pZCoqIGFyZ3MsIENh
bGxGcmFtZSopOworICAgICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX3N1Yih2
b2lkKiogYXJncywgQ2FsbEZyYW1lKik7CisgICAgICAgIHN0YXRpYyB2b2lkIFNGWF9DQUxMIGN0
aV9vcF9wdXRfYnlfdmFsKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAgICAgICAgc3RhdGlj
IHZvaWQgU0ZYX0NBTEwgY3RpX29wX3B1dF9ieV92YWxfYXJyYXkodm9pZCoqIGFyZ3MsIENhbGxG
cmFtZSopOworICAgICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX2xlc3NlcSh2
b2lkKiogYXJncywgQ2FsbEZyYW1lKik7CisgICAgICAgIHN0YXRpYyBpbnQgU0ZYX0NBTEwgY3Rp
X29wX2xvb3BfaWZfdHJ1ZSh2b2lkKiogYXJncywgQ2FsbEZyYW1lKik7CisgICAgICAgIHN0YXRp
YyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfcmVzb2x2ZV9iYXNlKHZvaWQqKiBhcmdzLCBDYWxs
RnJhbWUqKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9uZWdhdGUo
dm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAgICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NB
TEwgY3RpX29wX3Jlc29sdmVfc2tpcCh2b2lkKiogYXJncywgQ2FsbEZyYW1lKik7CisgICAgICAg
IHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfZGl2KHZvaWQqKiBhcmdzLCBDYWxsRnJh
bWUqKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9wcmVfZGVjKHZv
aWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIGludCBTRlhfQ0FMTCBjdGlf
b3Bfamxlc3Modm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAgICAgICBzdGF0aWMgSlNWYWx1
ZSogU0ZYX0NBTEwgY3RpX29wX25vdCh2b2lkKiogYXJncywgQ2FsbEZyYW1lKik7CisgICAgICAg
IHN0YXRpYyBpbnQgU0ZYX0NBTEwgY3RpX29wX2p0cnVlKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUq
KTsKKyAgICAgICAgc3RhdGljIFZvaWRQdHJQYWlyIFNGWF9DQUxMIGN0aV9vcF9wb3N0X2luYyh2
b2lkKiogYXJncywgQ2FsbEZyYW1lKik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FM
TCBjdGlfb3BfZXEodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAgICAgICBzdGF0aWMgSlNW
YWx1ZSogU0ZYX0NBTEwgY3RpX29wX2xzaGlmdCh2b2lkKiogYXJncywgQ2FsbEZyYW1lKik7Cisg
ICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfYml0YW5kKHZvaWQqKiBhcmdz
LCBDYWxsRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9y
c2hpZnQodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAgICAgICBzdGF0aWMgSlNWYWx1ZSog
U0ZYX0NBTEwgY3RpX29wX2JpdG5vdCh2b2lkKiogYXJncywgQ2FsbEZyYW1lKik7CisgICAgICAg
IHN0YXRpYyBWb2lkUHRyUGFpciBTRlhfQ0FMTCBjdGlfb3BfcmVzb2x2ZV93aXRoX2Jhc2Uodm9p
ZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAgICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwg
Y3RpX29wX25ld19mdW5jX2V4cCh2b2lkKiogYXJncywgQ2FsbEZyYW1lKik7CisgICAgICAgIHN0
YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfbW9kKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUq
KTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9sZXNzKHZvaWQqKiBh
cmdzLCBDYWxsRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9v
cF9uZXEodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAgICAgICBzdGF0aWMgVm9pZFB0clBh
aXIgU0ZYX0NBTEwgY3RpX29wX3Bvc3RfZGVjKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAg
ICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF91cnNoaWZ0KHZvaWQqKiBhcmdz
LCBDYWxsRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9i
aXR4b3Iodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAgICAgICBzdGF0aWMgSlNWYWx1ZSog
U0ZYX0NBTEwgY3RpX29wX25ld19yZWdleHAodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAg
ICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX2JpdG9yKHZvaWQqKiBhcmdzLCBD
YWxsRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9jYWxs
X2V2YWwodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAgICAgICBzdGF0aWMgdm9pZCogU0ZY
X0NBTEwgY3RpX29wX3Rocm93KHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAgICAgICAgc3Rh
dGljIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIFNGWF9DQUxMIGN0aV9vcF9nZXRfcG5hbWVzKHZv
aWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxM
IGN0aV9vcF9uZXh0X3BuYW1lKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAgICAgICAgc3Rh
dGljIHZvaWQgU0ZYX0NBTEwgY3RpX29wX3B1c2hfc2NvcGUodm9pZCoqIGFyZ3MsIENhbGxGcmFt
ZSopOworICAgICAgICBzdGF0aWMgdm9pZCBTRlhfQ0FMTCBjdGlfb3BfcG9wX3Njb3BlKHZvaWQq
KiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0
aV9vcF90eXBlb2Yodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAgICAgICBzdGF0aWMgSlNW
YWx1ZSogU0ZYX0NBTEwgY3RpX29wX2lzX3VuZGVmaW5lZCh2b2lkKiogYXJncywgQ2FsbEZyYW1l
Kik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfaXNfYm9vbGVhbih2
b2lkKiogYXJncywgQ2FsbEZyYW1lKik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FM
TCBjdGlfb3BfaXNfbnVtYmVyKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAgICAgICAgc3Rh
dGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9pc19zdHJpbmcodm9pZCoqIGFyZ3MsIENhbGxG
cmFtZSopOworICAgICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX2lzX29iamVj
dCh2b2lkKiogYXJncywgQ2FsbEZyYW1lKik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhf
Q0FMTCBjdGlfb3BfaXNfZnVuY3Rpb24odm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAgICAg
ICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX3N0cmljdGVxKHZvaWQqKiBhcmdzLCBD
YWxsRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9uc3Ry
aWN0ZXEodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAgICAgICBzdGF0aWMgSlNWYWx1ZSog
U0ZYX0NBTEwgY3RpX29wX3RvX2pzbnVtYmVyKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAg
ICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9pbih2b2lkKiogYXJncywgQ2Fs
bEZyYW1lKik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfcHVzaF9u
ZXdfc2NvcGUodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAgICAgICBzdGF0aWMgdm9pZCBT
RlhfQ0FMTCBjdGlfb3Bfam1wX3Njb3Blcyh2b2lkKiogYXJncywgQ2FsbEZyYW1lKik7CisgICAg
ICAgIHN0YXRpYyB2b2lkIFNGWF9DQUxMIGN0aV9vcF9wdXRfYnlfaW5kZXgodm9pZCoqIGFyZ3Ms
IENhbGxGcmFtZSopOworICAgICAgICBzdGF0aWMgdm9pZCogU0ZYX0NBTEwgY3RpX29wX3N3aXRj
aF9pbW0odm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAgICAgICBzdGF0aWMgdm9pZCogU0ZY
X0NBTEwgY3RpX29wX3N3aXRjaF9jaGFyKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAgICAg
ICAgc3RhdGljIHZvaWQqIFNGWF9DQUxMIGN0aV9vcF9zd2l0Y2hfc3RyaW5nKHZvaWQqKiBhcmdz
LCBDYWxsRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9k
ZWxfYnlfdmFsKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIHZvaWQg
U0ZYX0NBTEwgY3RpX29wX3B1dF9nZXR0ZXIodm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOworICAg
ICAgICBzdGF0aWMgdm9pZCBTRlhfQ0FMTCBjdGlfb3BfcHV0X3NldHRlcih2b2lkKiogYXJncywg
Q2FsbEZyYW1lKik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfbmV3
X2Vycm9yKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIHZvaWQgU0ZY
X0NBTEwgY3RpX29wX2RlYnVnKHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUqKTsKKworICAgICAgICBz
dGF0aWMgdm9pZCogU0ZYX0NBTEwgY3RpX3ZtX3Rocm93KHZvaWQqKiBhcmdzLCBDYWxsRnJhbWUq
KTsKKyAgICAgICAgc3RhdGljIHZvaWQqIFNGWF9DQUxMIGN0aV92bV9jb21waWxlKHZvaWQqKiBh
cmdzLCBDYWxsRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9v
cF9wdXNoX2FjdGl2YXRpb24odm9pZCoqIGFyZ3MsIENhbGxGcmFtZSopOwogICAgICAgICAKICNl
bmRpZiAvLyBFTkFCTEUoQ1RJKQogCg==
</data>
<flag name="review"
          id="11088"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24455</attachid>
            <date>2008-10-17 02:04:12 -0700</date>
            <delta_ts>2008-10-17 02:06:39 -0700</delta_ts>
            <desc>take the low road</desc>
            <filename>avoid-edi-writes-low-road.patch.txt</filename>
            <type>text/plain</type>
            <size>43274</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IFZNL0NUSS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ1RJLmNwcAkocmV2aXNpb24gMzc2
NDcpCisrKyBWTS9DVEkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTIsMTIgKzMxMiwxMyBAQCBB
TFdBWVNfSU5MSU5FIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIENUSTo6CiAgICAgcmV0dXJuIGNhbGw7
CiB9CiAKLUFMV0FZU19JTkxJTkUgWDg2QXNzZW1ibGVyOjpKbXBTcmMgQ1RJOjplbWl0Q2FsbCh1
bnNpZ25lZCBvcGNvZGVJbmRleCwgQ1RJSGVscGVyX2ogaGVscGVyKQorQUxXQVlTX0lOTElORSBY
ODZBc3NlbWJsZXI6OkptcFNyYyBDVEk6OmVtaXRDVElDYWxsKHVuc2lnbmVkIG9wY29kZUluZGV4
LCBDVElIZWxwZXJfaiBoZWxwZXIpCiB7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1RPT0wpCiAgICAg
bV9qaXQubW92bF9pMzJtKDEsICZpbkNhbGxlZENvZGUpOwogI2VuZGlmCiAgICAgbV9qaXQuZW1p
dFJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOworICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVk
aSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKICAgICBYODZBc3NlbWJsZXI6OkptcFNyYyBjYWxsID0g
bV9qaXQuZW1pdENhbGwoKTsKICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIGhl
bHBlciwgb3Bjb2RlSW5kZXgpKTsKICNpZiBFTkFCTEUoU0FNUExJTkdfVE9PTCkKQEAgLTMyNywx
MiArMzI4LDEzIEBAIEFMV0FZU19JTkxJTkUgWDg2QXNzZW1ibGVyOjpKbXBTcmMgQ1RJOjoKICAg
ICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSBYODZBc3NlbWJsZXI6OkptcFNyYyBD
VEk6OmVtaXRDYWxsKHVuc2lnbmVkIG9wY29kZUluZGV4LCBDVElIZWxwZXJfcCBoZWxwZXIpCitB
TFdBWVNfSU5MSU5FIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIENUSTo6ZW1pdENUSUNhbGwodW5zaWdu
ZWQgb3Bjb2RlSW5kZXgsIENUSUhlbHBlcl9wIGhlbHBlcikKIHsKICNpZiBFTkFCTEUoU0FNUExJ
TkdfVE9PTCkKICAgICBtX2ppdC5tb3ZsX2kzMm0oMSwgJmluQ2FsbGVkQ29kZSk7CiAjZW5kaWYK
ICAgICBtX2ppdC5lbWl0UmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgZW1pdFB1dENU
SVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOwogICAgIFg4NkFzc2VtYmxlcjo6
Sm1wU3JjIGNhbGwgPSBtX2ppdC5lbWl0Q2FsbCgpOwogICAgIG1fY2FsbHMuYXBwZW5kKENhbGxS
ZWNvcmQoY2FsbCwgaGVscGVyLCBvcGNvZGVJbmRleCkpOwogI2lmIEVOQUJMRShTQU1QTElOR19U
T09MKQpAQCAtMzQyLDEyICszNDQsMTMgQEAgQUxXQVlTX0lOTElORSBYODZBc3NlbWJsZXI6Okpt
cFNyYyBDVEk6OgogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIFg4NkFzc2Vt
Ymxlcjo6Sm1wU3JjIENUSTo6ZW1pdENhbGwodW5zaWduZWQgb3Bjb2RlSW5kZXgsIENUSUhlbHBl
cl9iIGhlbHBlcikKK0FMV0FZU19JTkxJTkUgWDg2QXNzZW1ibGVyOjpKbXBTcmMgQ1RJOjplbWl0
Q1RJQ2FsbCh1bnNpZ25lZCBvcGNvZGVJbmRleCwgQ1RJSGVscGVyX2IgaGVscGVyKQogewogI2lm
IEVOQUJMRShTQU1QTElOR19UT09MKQogICAgIG1faml0Lm1vdmxfaTMybSgxLCAmaW5DYWxsZWRD
b2RlKTsKICNlbmRpZgogICAgIG1faml0LmVtaXRSZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsK
KyAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7CiAgICAg
WDg2QXNzZW1ibGVyOjpKbXBTcmMgY2FsbCA9IG1faml0LmVtaXRDYWxsKCk7CiAgICAgbV9jYWxs
cy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBoZWxwZXIsIG9wY29kZUluZGV4KSk7CiAjaWYgRU5B
QkxFKFNBTVBMSU5HX1RPT0wpCkBAIC0zNTcsMTIgKzM2MCwxMyBAQCBBTFdBWVNfSU5MSU5FIFg4
NkFzc2VtYmxlcjo6Sm1wU3JjIENUSTo6CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19J
TkxJTkUgWDg2QXNzZW1ibGVyOjpKbXBTcmMgQ1RJOjplbWl0Q2FsbCh1bnNpZ25lZCBvcGNvZGVJ
bmRleCwgQ1RJSGVscGVyX3YgaGVscGVyKQorQUxXQVlTX0lOTElORSBYODZBc3NlbWJsZXI6Okpt
cFNyYyBDVEk6OmVtaXRDVElDYWxsKHVuc2lnbmVkIG9wY29kZUluZGV4LCBDVElIZWxwZXJfdiBo
ZWxwZXIpCiB7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1RPT0wpCiAgICAgbV9qaXQubW92bF9pMzJt
KDEsICZpbkNhbGxlZENvZGUpOwogI2VuZGlmCiAgICAgbV9qaXQuZW1pdFJlc3RvcmVBcmd1bWVu
dFJlZmVyZW5jZSgpOworICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2Fs
bEZyYW1lKTsKICAgICBYODZBc3NlbWJsZXI6OkptcFNyYyBjYWxsID0gbV9qaXQuZW1pdENhbGwo
KTsKICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIGhlbHBlciwgb3Bjb2RlSW5k
ZXgpKTsKICNpZiBFTkFCTEUoU0FNUExJTkdfVE9PTCkKQEAgLTM3MiwxMiArMzc2LDEzIEBAIEFM
V0FZU19JTkxJTkUgWDg2QXNzZW1ibGVyOjpKbXBTcmMgQ1RJOjoKICAgICByZXR1cm4gY2FsbDsK
IH0KIAotQUxXQVlTX0lOTElORSBYODZBc3NlbWJsZXI6OkptcFNyYyBDVEk6OmVtaXRDYWxsKHVu
c2lnbmVkIG9wY29kZUluZGV4LCBDVElIZWxwZXJfcyBoZWxwZXIpCitBTFdBWVNfSU5MSU5FIFg4
NkFzc2VtYmxlcjo6Sm1wU3JjIENUSTo6ZW1pdENUSUNhbGwodW5zaWduZWQgb3Bjb2RlSW5kZXgs
IENUSUhlbHBlcl9zIGhlbHBlcikKIHsKICNpZiBFTkFCTEUoU0FNUExJTkdfVE9PTCkKICAgICBt
X2ppdC5tb3ZsX2kzMm0oMSwgJmluQ2FsbGVkQ29kZSk7CiAjZW5kaWYKICAgICBtX2ppdC5lbWl0
UmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRp
LCBDVElfQVJHU19jYWxsRnJhbWUpOwogICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIGNhbGwgPSBt
X2ppdC5lbWl0Q2FsbCgpOwogICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgaGVs
cGVyLCBvcGNvZGVJbmRleCkpOwogI2lmIEVOQUJMRShTQU1QTElOR19UT09MKQpAQCAtMzg3LDEy
ICszOTIsMTMgQEAgQUxXQVlTX0lOTElORSBYODZBc3NlbWJsZXI6OkptcFNyYyBDVEk6OgogICAg
IHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIENU
STo6ZW1pdENhbGwodW5zaWduZWQgb3Bjb2RlSW5kZXgsIENUSUhlbHBlcl8yIGhlbHBlcikKK0FM
V0FZU19JTkxJTkUgWDg2QXNzZW1ibGVyOjpKbXBTcmMgQ1RJOjplbWl0Q1RJQ2FsbCh1bnNpZ25l
ZCBvcGNvZGVJbmRleCwgQ1RJSGVscGVyXzIgaGVscGVyKQogewogI2lmIEVOQUJMRShTQU1QTElO
R19UT09MKQogICAgIG1faml0Lm1vdmxfaTMybSgxLCAmaW5DYWxsZWRDb2RlKTsKICNlbmRpZgog
ICAgIG1faml0LmVtaXRSZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICBlbWl0UHV0Q1RJ
UGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7CiAgICAgWDg2QXNzZW1ibGVyOjpK
bXBTcmMgY2FsbCA9IG1faml0LmVtaXRDYWxsKCk7CiAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJl
Y29yZChjYWxsLCBoZWxwZXIsIG9wY29kZUluZGV4KSk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1RP
T0wpCkBAIC00ODYsNyArNDkyLDcgQEAgQ1RJOjpDVEkoTWFjaGluZSogbWFjaGluZSwgQ2FsbEZy
YW1lKiBjYQogICAgIGNhc2UgbmFtZTogeyBcCiAgICAgICAgIGVtaXRHZXRQdXRBcmcoaW5zdHJ1
Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOyBcCiAgICAgICAgIGVtaXRHZXRQ
dXRBcmcoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOyBcCi0gICAg
ICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV8jI25hbWUpOyBcCisgICAgICAgIGVtaXRDVElD
YWxsKGksIE1hY2hpbmU6OmN0aV8jI25hbWUpOyBcCiAgICAgICAgIGVtaXRQdXRSZXN1bHQoaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7IFwKICAgICAgICAgaSArPSA0OyBcCiAgICAgICAg
IGJyZWFrOyBcCkBAIC00OTUsNyArNTAxLDcgQEAgQ1RJOjpDVEkoTWFjaGluZSogbWFjaGluZSwg
Q2FsbEZyYW1lKiBjYQogI2RlZmluZSBDVElfQ09NUElMRV9VTkFSWV9PUChuYW1lKSBcCiAgICAg
Y2FzZSBuYW1lOiB7IFwKICAgICAgICAgZW1pdEdldFB1dEFyZyhpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7IFwKLSAgICAgICAgZW1pdENhbGwoaSwgTWFjaGluZTo6
Y3RpXyMjbmFtZSk7IFwKKyAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpXyMjbmFt
ZSk7IFwKICAgICAgICAgZW1pdFB1dFJlc3VsdChpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
KTsgXAogICAgICAgICBpICs9IDM7IFwKICAgICAgICAgYnJlYWs7IFwKQEAgLTU1Myw3ICs1NTks
NyBAQCB2b2lkIENUSTo6Y29tcGlsZU9wQ2FsbChJbnN0cnVjdGlvbiogaW5zCiAgICAgWDg2QXNz
ZW1ibGVyOjpKbXBTcmMgd2FzRXZhbDsKICAgICBpZiAodHlwZSA9PSBPcENhbGxFdmFsKSB7CiAg
ICAgICAgIGVtaXRHZXRQdXRBcmcoY2FsbGVlLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgIGVtaXRD
YWxsKGksIE1hY2hpbmU6OmN0aV9vcF9jYWxsX2V2YWwpOworICAgICAgICBlbWl0Q1RJQ2FsbChp
LCBNYWNoaW5lOjpjdGlfb3BfY2FsbF9ldmFsKTsKIAogICAgICAgICBtX2ppdC5jbXBsX2kzMnIo
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oSlNJbW1lZGlhdGU6OmltcG9zc2libGVWYWx1ZSgp
KSwgWDg2OjplYXgpOwogICAgICAgICB3YXNFdmFsID0gbV9qaXQuZW1pdFVubGlua2VkSm5lKCk7
CkBAIC01NzMsMTMgKzU3OSwxMyBAQCB2b2lkIENUSTo6Y29tcGlsZU9wQ2FsbChJbnN0cnVjdGlv
biogaW5zCiAgICAgbV9qaXQubGluayhpc05vdE9iamVjdCwgbV9qaXQubGFiZWwoKSk7CiAKICAg
ICAvLyBUaGlzIGhhbmRsZXMgaG9zdCBmdW5jdGlvbnMKLSAgICBlbWl0Q2FsbChpLCAoKHR5cGUg
PT0gT3BDb25zdHJ1Y3QpID8gTWFjaGluZTo6Y3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVj
dCA6IE1hY2hpbmU6OmN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pKTsKKyAgICBlbWl0Q1RJQ2Fs
bChpLCAoKHR5cGUgPT0gT3BDb25zdHJ1Y3QpID8gTWFjaGluZTo6Y3RpX29wX2NvbnN0cnVjdF9O
b3RKU0NvbnN0cnVjdCA6IE1hY2hpbmU6OmN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pKTsKIAog
ICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIHdhc05vdEpTRnVuY3Rpb24gPSBtX2ppdC5lbWl0VW5s
aW5rZWRKbXAoKTsKICAgICBtX2ppdC5saW5rKGlzSlNGdW5jdGlvbiwgbV9qaXQubGFiZWwoKSk7
CiAKICAgICAvLyBUaGlzIGhhbmRsZXMgSlNGdW5jdGlvbnMKLSAgICBlbWl0Q2FsbChpLCAodHlw
ZSA9PSBPcENvbnN0cnVjdCkgPyBNYWNoaW5lOjpjdGlfb3BfY29uc3RydWN0X0pTQ29uc3RydWN0
IDogTWFjaGluZTo6Y3RpX29wX2NhbGxfSlNGdW5jdGlvbik7CisgICAgZW1pdENUSUNhbGwoaSwg
KHR5cGUgPT0gT3BDb25zdHJ1Y3QpID8gTWFjaGluZTo6Y3RpX29wX2NvbnN0cnVjdF9KU0NvbnN0
cnVjdCA6IE1hY2hpbmU6OmN0aV9vcF9jYWxsX0pTRnVuY3Rpb24pOwogCiAgICAgY29tcGlsZU9w
Q2FsbEluaXRpYWxpemVDYWxsRnJhbWUoY2FsbGVlLCBhcmdDb3VudCk7CiAKQEAgLTU4Nyw3ICs1
OTMsNiBAQCB2b2lkIENUSTo6Y29tcGlsZU9wQ2FsbChJbnN0cnVjdGlvbiogaW5zCiAgICAgbV9q
aXQubW92bF9tcihPQkpFQ1RfT0ZGU0VUKENvZGVCbG9jaywgY3RpQ29kZSksIFg4Njo6ZWF4LCBY
ODY6OmVheCk7CiAKICAgICAvLyBQdXQgdGhlIG5ldyB2YWx1ZSBvZiAnY2FsbEZyYW1lJyBpbnRv
IGVkaSBhbmQgb250byB0aGUgc3RhY2ssIHRvby4KLSAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2Ojpl
ZHgsIENUSV9BUkdTX2NhbGxGcmFtZSk7CiAgICAgbV9qaXQubW92bF9ycihYODY6OmVkeCwgWDg2
OjplZGkpOwogCiAgICAgLy8gQ2hlY2sgdGhlIGN0aUNvZGUgaGFzIGJlZW4gZ2VuZXJhdGVkIC0g
aWYgbm90LCB0aGlzIGlzIGhhbmRsZWQgaW4gYSBzbG93IGNhc2UuCkBAIC02NjQsNyArNjY5LDcg
QEAgdm9pZCBDVEk6OmVtaXRTbG93U2NyaXB0Q2hlY2sodW5zaWduZWQgbwogewogICAgIG1faml0
LnN1YmxfaThyKDEsIFg4Njo6ZXNpKTsKICAgICBYODZBc3NlbWJsZXI6OkptcFNyYyBza2lwVGlt
ZW91dCA9IG1faml0LmVtaXRVbmxpbmtlZEpuZSgpOwotICAgIGVtaXRDYWxsKG9wY29kZUluZGV4
LCBNYWNoaW5lOjpjdGlfdGltZW91dF9jaGVjayk7CisgICAgZW1pdENUSUNhbGwob3Bjb2RlSW5k
ZXgsIE1hY2hpbmU6OmN0aV90aW1lb3V0X2NoZWNrKTsKIAogICAgIGVtaXRHZXRDVElQYXJhbShD
VElfQVJHU19nbG9iYWxEYXRhLCBYODY6OmVjeCk7CiAgICAgbV9qaXQubW92bF9tcihPQkpFQ1Rf
T0ZGU0VUKEpTR2xvYmFsRGF0YSwgbWFjaGluZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7CkBAIC04
OTEsMTIgKzg5NiwxMiBAQCB2b2lkIENUSTo6Y29tcGlsZUJpbmFyeUFyaXRoT3BTbG93Q2FzZShP
CiAgICAgZW1pdEdldFB1dEFyZyhzcmMxLCAwLCBYODY6OmVjeCk7CiAgICAgZW1pdEdldFB1dEFy
ZyhzcmMyLCA0LCBYODY6OmVjeCk7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX2FkZCkKLSAgICAg
ICAgZW1pdENhbGwoaSwgTWFjaGluZTo6Y3RpX29wX2FkZCk7CisgICAgICAgIGVtaXRDVElDYWxs
KGksIE1hY2hpbmU6OmN0aV9vcF9hZGQpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX3N1
YikKLSAgICAgICAgZW1pdENhbGwoaSwgTWFjaGluZTo6Y3RpX29wX3N1Yik7CisgICAgICAgIGVt
aXRDVElDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9zdWIpOwogICAgIGVsc2UgewogICAgICAgICBB
U1NFUlQob3Bjb2RlSUQgPT0gb3BfbXVsKTsKLSAgICAgICAgZW1pdENhbGwoaSwgTWFjaGluZTo6
Y3RpX29wX211bCk7CisgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9tdWwp
OwogICAgIH0KICAgICBlbWl0UHV0UmVzdWx0KGRzdCk7CiB9CkBAIC05NTEsNyArOTU2LDcgQEAg
dm9pZCBDVEk6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICBlbWl0R2V0UHV0QXJnKGluc3RydWN0aW9uW2kgKyAyXS51
Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKICAgICAgICAgICAgICAgICAgICAgZW1pdEdldFB1dEFy
ZyhpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9hZGQpOworICAgICAgICAgICAg
ICAgICAgICBlbWl0Q1RJQ2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfYWRkKTsKICAgICAgICAgICAg
ICAgICAgICAgZW1pdFB1dFJlc3VsdChpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC05NjEsNyArOTY2LDcgQEAgdm9pZCBD
VEk6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3Bf
ZW5kOiB7CiAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4p
Ci0gICAgICAgICAgICAgICAgZW1pdENhbGwoaSwgTWFjaGluZTo6Y3RpX29wX2VuZCk7CisgICAg
ICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpX29wX2VuZCk7CiAgICAgICAg
ICAgICBlbWl0R2V0QXJnKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4KTsK
ICNpZiBFTkFCTEUoU0FNUExJTkdfVE9PTCkKICAgICAgICAgICAgIG1faml0Lm1vdmxfaTMybSgt
MSwgJmN1cnJlbnRPcGNvZGVJRCk7CkBAIC0xMDM4LDcgKzEwNDMsNyBAQCB2b2lkIENUSTo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIG9wX25ld19vYmplY3Q6IHsKLSAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hp
bmU6OmN0aV9vcF9uZXdfb2JqZWN0KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hp
bmU6OmN0aV9vcF9uZXdfb2JqZWN0KTsKICAgICAgICAgICAgIGVtaXRQdXRSZXN1bHQoaW5zdHJ1
Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBpICs9IDI7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTExNjQsNyArMTE2OSw3IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKCkKICAgICAgICAgICAgIGVtaXRHZXRQdXRBcmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUu
b3BlcmFuZCwgMCwgWDg2OjplY3gpOwogICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kXSk7
CiAgICAgICAgICAgICBlbWl0UHV0QXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZD4oaWRlbnQpLCA0KTsKLSAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9k
ZWxfYnlfaWQpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpX29wX2Rl
bF9ieV9pZCk7CiAgICAgICAgICAgICBlbWl0UHV0UmVzdWx0KGluc3RydWN0aW9uW2kgKyAxXS51
Lm9wZXJhbmQpOwogICAgICAgICAgICAgaSArPSA0OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0x
MjAzLDcgKzEyMDgsNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAg
ICAgIGNhc2Ugb3BfbmV3X2Z1bmM6IHsKICAgICAgICAgICAgIEZ1bmNEZWNsTm9kZSogZnVuYyA9
IChtX2NvZGVCbG9jay0+ZnVuY3Rpb25zW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKS5n
ZXQoKTsKICAgICAgICAgICAgIGVtaXRQdXRBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVu
c2lnbmVkPihmdW5jKSwgMCk7Ci0gICAgICAgICAgICBlbWl0Q2FsbChpLCBNYWNoaW5lOjpjdGlf
b3BfbmV3X2Z1bmMpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpX29w
X25ld19mdW5jKTsKICAgICAgICAgICAgIGVtaXRQdXRSZXN1bHQoaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZCk7CiAgICAgICAgICAgICBpICs9IDM7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTEyNTcsMTIgKzEyNjIsMTIgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQog
ICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfdGVhcl9vZmZfYWN0aXZhdGlvbjogewogICAgICAg
ICAgICAgZW1pdEdldFB1dEFyZyhpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwLCBYODY6
OmVjeCk7Ci0gICAgICAgICAgICBlbWl0Q2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfdGVhcl9vZmZf
YWN0aXZhdGlvbik7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBNYWNoaW5lOjpjdGlfb3Bf
dGVhcl9vZmZfYWN0aXZhdGlvbik7CiAgICAgICAgICAgICBpICs9IDI7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50czogewot
ICAgICAgICAgICAgZW1pdENhbGwoaSwgTWFjaGluZTo6Y3RpX29wX3RlYXJfb2ZmX2FyZ3VtZW50
cyk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfdGVhcl9vZmZf
YXJndW1lbnRzKTsKICAgICAgICAgICAgIGkgKz0gMTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CkBAIC0xMjc1LDcgKzEyODAsNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcygpCiAKICAgICAgICAgICAgIC8vIFdlIGNvdWxkIEpJVCBnZW5lcmF0ZSB0aGUgZGVyZWYs
IG9ubHkgY2FsbGluZyBvdXQgdG8gQyB3aGVuIHRoZSByZWZjb3VudCBoaXRzIHplcm8uCiAgICAg
ICAgICAgICBpZiAobV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4pCi0gICAgICAgICAg
ICAgICAgZW1pdENhbGwoaSwgTWFjaGluZTo6Y3RpX29wX3JldF9zY29wZUNoYWluKTsKKyAgICAg
ICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfcmV0X3Njb3BlQ2hhaW4p
OwogCiAgICAgICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiAlZWF4LgogICAgICAgICAg
ICAgZW1pdEdldEFyZyhpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCk7CkBA
IC0xMjg1LDcgKzEyOTAsNiBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAK
ICAgICAgICAgICAgIC8vIFJlc3RvcmUgb3VyIGNhbGxlcidzICJyIi4KICAgICAgICAgICAgIGVt
aXRHZXRBcmcoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSwgWDg2OjplZGkpOwotICAgICAgICAg
ICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOwogCiAgICAg
ICAgICAgICAvLyBSZXR1cm4uCiAgICAgICAgICAgICBtX2ppdC5wdXNobF9yKFg4Njo6ZWR4KTsK
QEAgLTEyOTMsNyArMTI5Nyw3IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkK
IAogICAgICAgICAgICAgLy8gUHJvZmlsaW5nIGhvb2sKICAgICAgICAgICAgIG1faml0Lmxpbmso
cHJvZmlsZSwgbV9qaXQubGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0Q2FsbChpLCBNYWNoaW5l
OjpjdGlfb3BfcmV0X3Byb2ZpbGVyKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hp
bmU6OmN0aV9vcF9yZXRfcHJvZmlsZXIpOwogICAgICAgICAgICAgbV9qaXQubGluayhtX2ppdC5l
bWl0VW5saW5rZWRKbXAoKSwgcHJvZmlsZWQpOwogCiAgICAgICAgICAgICBpICs9IDI7CkBAIC0x
MzAzLDcgKzEzMDcsNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAg
ICAgICAgICBtX2ppdC5sZWFsX21yKHNpemVvZihSZWdpc3RlcikgKiBpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kLCBYODY6OmVkaSwgWDg2OjplZHgpOwogICAgICAgICAgICAgZW1pdFB1dEFy
ZyhYODY6OmVkeCwgMCk7CiAgICAgICAgICAgICBlbWl0UHV0QXJnQ29uc3RhbnQoaW5zdHJ1Y3Rp
b25baSArIDNdLnUub3BlcmFuZCwgNCk7Ci0gICAgICAgICAgICBlbWl0Q2FsbChpLCBNYWNoaW5l
OjpjdGlfb3BfbmV3X2FycmF5KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hpbmU6
OmN0aV9vcF9uZXdfYXJyYXkpOwogICAgICAgICAgICAgZW1pdFB1dFJlc3VsdChpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGkgKz0gNDsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTMxMSw3ICsxMzE1LDcgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlTWFpblBh
c3MoKQogICAgICAgICBjYXNlIG9wX3Jlc29sdmU6IHsKICAgICAgICAgICAgIElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDJdLnUu
b3BlcmFuZF0pOwogICAgICAgICAgICAgZW1pdFB1dEFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQ+KGlkZW50KSwgMCk7Ci0gICAgICAgICAgICBlbWl0Q2FsbChpLCBNYWNoaW5l
OjpjdGlfb3BfcmVzb2x2ZSk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBNYWNoaW5lOjpj
dGlfb3BfcmVzb2x2ZSk7CiAgICAgICAgICAgICBlbWl0UHV0UmVzdWx0KGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgaSArPSAzOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC0xMzYyLDcgKzEzNjYsNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygp
CiAgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9mdW5jOiB7CiAgICAgICAgICAgICBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAzXS51
Lm9wZXJhbmRdKTsKICAgICAgICAgICAgIGVtaXRQdXRBcmdDb25zdGFudChyZWludGVycHJldF9j
YXN0PHVuc2lnbmVkPihpZGVudCksIDApOwotICAgICAgICAgICAgZW1pdENhbGwoaSwgTWFjaGlu
ZTo6Y3RpX29wX3Jlc29sdmVfZnVuYyk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBNYWNo
aW5lOjpjdGlfb3BfcmVzb2x2ZV9mdW5jKTsKICAgICAgICAgICAgIGVtaXRQdXRSZXN1bHQoaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBlbWl0UHV0UmVzdWx0KGlu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWR4KTsKICAgICAgICAgICAgIGkgKz0g
NDsKQEAgLTE0MjcsMTQgKzE0MzEsMTQgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlTWFpblBh
c3MoKQogICAgICAgICBjYXNlIG9wX3Jlc29sdmVfYmFzZTogewogICAgICAgICAgICAgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kXSk7CiAgICAgICAgICAgICBlbWl0UHV0QXJnQ29uc3RhbnQocmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCAwKTsKLSAgICAgICAgICAgIGVtaXRDYWxsKGksIE1h
Y2hpbmU6OmN0aV9vcF9yZXNvbHZlX2Jhc2UpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwg
TWFjaGluZTo6Y3RpX29wX3Jlc29sdmVfYmFzZSk7CiAgICAgICAgICAgICBlbWl0UHV0UmVzdWx0
KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgaSArPSAzOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9uZWdhdGU6IHsKICAg
ICAgICAgICAgIGVtaXRHZXRQdXRBcmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwg
WDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdENhbGwoaSwgTWFjaGluZTo6Y3RpX29wX25lZ2F0
ZSk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfbmVnYXRlKTsK
ICAgICAgICAgICAgIGVtaXRQdXRSZXN1bHQoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7
CiAgICAgICAgICAgICBpICs9IDM7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE0NDMsNyArMTQ0
Nyw3IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZF0pOwogICAgICAgICAgICAgZW1pdFB1dEFyZ0NvbnN0YW50KHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgMCk7CiAgICAgICAgICAgICBlbWl0UHV0QXJn
Q29uc3RhbnQoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCArIG1fY29kZUJsb2NrLT5uZWVk
c0Z1bGxTY29wZUNoYWluLCA0KTsKLSAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0
aV9vcF9yZXNvbHZlX3NraXApOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6
Y3RpX29wX3Jlc29sdmVfc2tpcCk7CiAgICAgICAgICAgICBlbWl0UHV0UmVzdWx0KGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgaSArPSA0OwogICAgICAgICAgICAg
YnJlYWs7CkBAIC0xNDc0LDcgKzE0NzgsNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcygpCiAgICAgICAgICAgICBlbWl0UHV0QXJnQ29uc3RhbnQoZ2xvYmFsT2JqZWN0LCAwKTsK
ICAgICAgICAgICAgIGVtaXRQdXRBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVk
PihpZGVudCksIDQpOwogICAgICAgICAgICAgZW1pdFB1dEFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQ+KGluc3RydWN0aW9uICsgaSksIDgpOwotICAgICAgICAgICAgZW1pdENh
bGwoaSwgTWFjaGluZTo6Y3RpX29wX3Jlc29sdmVfZ2xvYmFsKTsKKyAgICAgICAgICAgIGVtaXRD
VElDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9yZXNvbHZlX2dsb2JhbCk7CiAgICAgICAgICAgICBl
bWl0UHV0UmVzdWx0KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAg
bV9qaXQubGluayhlbmQsIG1faml0LmxhYmVsKCkpOwogICAgICAgICAgICAgaSArPSA2OwpAQCAt
MTY0Niw3ICsxNjUwLDcgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAg
ICAgICBjYXNlIG9wX3Jlc29sdmVfd2l0aF9iYXNlOiB7CiAgICAgICAgICAgICBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAzXS51
Lm9wZXJhbmRdKTsKICAgICAgICAgICAgIGVtaXRQdXRBcmdDb25zdGFudChyZWludGVycHJldF9j
YXN0PHVuc2lnbmVkPihpZGVudCksIDApOwotICAgICAgICAgICAgZW1pdENhbGwoaSwgTWFjaGlu
ZTo6Y3RpX29wX3Jlc29sdmVfd2l0aF9iYXNlKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGks
IE1hY2hpbmU6OmN0aV9vcF9yZXNvbHZlX3dpdGhfYmFzZSk7CiAgICAgICAgICAgICBlbWl0UHV0
UmVzdWx0KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgZW1pdFB1
dFJlc3VsdChpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVkeCk7CiAgICAgICAg
ICAgICBpICs9IDQ7CkBAIC0xNjU1LDcgKzE2NTksNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBp
bGVNYWluUGFzcygpCiAgICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOiB7CiAgICAgICAgICAg
ICBGdW5jRXhwck5vZGUqIGZ1bmMgPSAobV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcmVzc2lvbnNb
aW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZF0pLmdldCgpOwogICAgICAgICAgICAgZW1pdFB1
dEFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGZ1bmMpLCAwKTsKLSAgICAg
ICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9uZXdfZnVuY19leHApOworICAgICAg
ICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpX29wX25ld19mdW5jX2V4cCk7CiAgICAg
ICAgICAgICBlbWl0UHV0UmVzdWx0KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwogICAg
ICAgICAgICAgaSArPSAzOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzM1LDcgKzE3MzksNyBA
QCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIGNhc2Ugb3BfbmV3
X3JlZ2V4cDogewogICAgICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBtX2NvZGVCbG9jay0+cmVn
ZXhwc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXS5nZXQoKTsKICAgICAgICAgICAgIGVt
aXRQdXRBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihyZWdFeHApLCAwKTsK
LSAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9uZXdfcmVnZXhwKTsKKyAg
ICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9uZXdfcmVnZXhwKTsKICAg
ICAgICAgICAgIGVtaXRQdXRSZXN1bHQoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CiAg
ICAgICAgICAgICBpICs9IDM7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3NTYsNyArMTc2MCw3
IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgfQogICAgICAg
ICBjYXNlIG9wX3Rocm93OiB7CiAgICAgICAgICAgICBlbWl0R2V0UHV0QXJnKGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDYWxsKGks
IE1hY2hpbmU6OmN0aV9vcF90aHJvdyk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBNYWNo
aW5lOjpjdGlfb3BfdGhyb3cpOwogICAgICAgICAgICAgbV9qaXQuYWRkbF9pOHIoMHgyNCwgWDg2
Ojplc3ApOwogICAgICAgICAgICAgbV9qaXQucG9wbF9yKFg4Njo6ZWRpKTsKICAgICAgICAgICAg
IG1faml0LnBvcGxfcihYODY6OmVzaSk7CkBAIC0xNzY2LDcgKzE3NzAsNyBAQCB2b2lkIENUSTo6
cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9nZXRf
cG5hbWVzOiB7CiAgICAgICAgICAgICBlbWl0R2V0UHV0QXJnKGluc3RydWN0aW9uW2kgKyAyXS51
Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6
OmN0aV9vcF9nZXRfcG5hbWVzKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hpbmU6
OmN0aV9vcF9nZXRfcG5hbWVzKTsKICAgICAgICAgICAgIGVtaXRQdXRSZXN1bHQoaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBpICs9IDM7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTE3NzQsNyArMTc3OCw3IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKCkKICAgICAgICAgY2FzZSBvcF9uZXh0X3BuYW1lOiB7CiAgICAgICAgICAgICBlbWl0R2V0
UHV0QXJnKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKICAgICAg
ICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBlbWl0Q2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfbmV4dF9wbmFtZSk7CisgICAg
ICAgICAgICBlbWl0Q1RJQ2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfbmV4dF9wbmFtZSk7CiAgICAg
ICAgICAgICBtX2ppdC50ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOwogICAgICAgICAgICAg
WDg2QXNzZW1ibGVyOjpKbXBTcmMgZW5kT2ZJdGVyID0gbV9qaXQuZW1pdFVubGlua2VkSmUoKTsK
ICAgICAgICAgICAgIGVtaXRQdXRSZXN1bHQoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7
CkBAIC0xNzg1LDEyICsxNzg5LDEyIEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KCkKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3B1c2hfc2NvcGU6IHsKICAgICAgICAgICAg
IGVtaXRHZXRQdXRBcmcoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gp
OwotICAgICAgICAgICAgZW1pdENhbGwoaSwgTWFjaGluZTo6Y3RpX29wX3B1c2hfc2NvcGUpOwor
ICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpX29wX3B1c2hfc2NvcGUpOwog
ICAgICAgICAgICAgaSArPSAyOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBvcF9wb3Bfc2NvcGU6IHsKLSAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6
OmN0aV9vcF9wb3Bfc2NvcGUpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6
Y3RpX29wX3BvcF9zY29wZSk7CiAgICAgICAgICAgICBpICs9IDE7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQpAQCAtMTgzMyw3ICsxODM3LDcgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogICAgICAgICBjYXNlIG9wX2luOiB7CiAgICAgICAgICAgICBlbWl0R2V0
UHV0QXJnKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKICAgICAg
ICAgICAgIGVtaXRHZXRQdXRBcmcoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2
OjplY3gpOwotICAgICAgICAgICAgZW1pdENhbGwoaSwgTWFjaGluZTo6Y3RpX29wX2luKTsKKyAg
ICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9pbik7CiAgICAgICAgICAg
ICBlbWl0UHV0UmVzdWx0KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwogICAgICAgICAg
ICAgaSArPSA0OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xODQyLDcgKzE4NDYsNyBAQCB2b2lk
IENUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9w
ZXJhbmRdKTsKICAgICAgICAgICAgIGVtaXRQdXRBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0
PHVuc2lnbmVkPihpZGVudCksIDApOwogICAgICAgICAgICAgZW1pdEdldFB1dEFyZyhpbnN0cnVj
dGlvbltpICsgM10udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0Q2Fs
bChpLCBNYWNoaW5lOjpjdGlfb3BfcHVzaF9uZXdfc2NvcGUpOworICAgICAgICAgICAgZW1pdENU
SUNhbGwoaSwgTWFjaGluZTo6Y3RpX29wX3B1c2hfbmV3X3Njb3BlKTsKICAgICAgICAgICAgIGVt
aXRQdXRSZXN1bHQoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBp
ICs9IDQ7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE4NTYsNyArMTg2MCw3IEBAIHZvaWQgQ1RJ
Ojpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgY2FzZSBvcF9qbXBfc2NvcGVzOiB7
CiAgICAgICAgICAgICB1bnNpZ25lZCBjb3VudCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICBlbWl0UHV0QXJnQ29uc3RhbnQoY291bnQsIDApOwotICAgICAgICAg
ICAgZW1pdENhbGwoaSwgTWFjaGluZTo6Y3RpX29wX2ptcF9zY29wZXMpOworICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpX29wX2ptcF9zY29wZXMpOwogICAgICAgICAgICAg
dW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKICAgICAgICAg
ICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKG1faml0LmVtaXRVbmxpbmtlZEptcCgpLCBp
ICsgMiArIHRhcmdldCkpOwogICAgICAgICAgICAgaSArPSAzOwpAQCAtMTg2Niw3ICsxODcwLDcg
QEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgZW1pdEdl
dFB1dEFyZyhpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7CiAgICAg
ICAgICAgICBlbWl0UHV0QXJnQ29uc3RhbnQoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwg
NCk7CiAgICAgICAgICAgICBlbWl0R2V0UHV0QXJnKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJh
bmQsIDgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV9v
cF9wdXRfYnlfaW5kZXgpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3Rp
X29wX3B1dF9ieV9pbmRleCk7CiAgICAgICAgICAgICBpICs9IDQ7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQpAQCAtMTg4Miw3ICsxODg2LDcgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogCiAgICAgICAgICAgICBlbWl0R2V0UHV0QXJnKHNjcnV0aW5lZSwgMCwg
WDg2OjplY3gpOwogICAgICAgICAgICAgZW1pdFB1dEFyZ0NvbnN0YW50KHRhYmxlSW5kZXgsIDQp
OwotICAgICAgICAgICAgZW1pdENhbGwoaSwgTWFjaGluZTo6Y3RpX29wX3N3aXRjaF9pbW0pOwor
ICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpX29wX3N3aXRjaF9pbW0pOwog
ICAgICAgICAgICAgbV9qaXQuam1wX3IoWDg2OjplYXgpOwogICAgICAgICAgICAgaSArPSA0Owog
ICAgICAgICAgICAgYnJlYWs7CkBAIC0xODk5LDcgKzE5MDMsNyBAQCB2b2lkIENUSTo6cHJpdmF0
ZUNvbXBpbGVNYWluUGFzcygpCiAKICAgICAgICAgICAgIGVtaXRHZXRQdXRBcmcoc2NydXRpbmVl
LCAwLCBYODY6OmVjeCk7CiAgICAgICAgICAgICBlbWl0UHV0QXJnQ29uc3RhbnQodGFibGVJbmRl
eCwgNCk7Ci0gICAgICAgICAgICBlbWl0Q2FsbChpLCBNYWNoaW5lOjpjdGlfb3Bfc3dpdGNoX2No
YXIpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpX29wX3N3aXRjaF9j
aGFyKTsKICAgICAgICAgICAgIG1faml0LmptcF9yKFg4Njo6ZWF4KTsKICAgICAgICAgICAgIGkg
Kz0gNDsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTkxNSw3ICsxOTE5LDcgQEAgdm9pZCBDVEk6
OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAgICAgICAgICBlbWl0R2V0UHV0QXJnKHNj
cnV0aW5lZSwgMCwgWDg2OjplY3gpOwogICAgICAgICAgICAgZW1pdFB1dEFyZ0NvbnN0YW50KHRh
YmxlSW5kZXgsIDQpOwotICAgICAgICAgICAgZW1pdENhbGwoaSwgTWFjaGluZTo6Y3RpX29wX3N3
aXRjaF9zdHJpbmcpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpX29w
X3N3aXRjaF9zdHJpbmcpOwogICAgICAgICAgICAgbV9qaXQuam1wX3IoWDg2OjplYXgpOwogICAg
ICAgICAgICAgaSArPSA0OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTIzLDcgKzE5MjcsNyBA
QCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIGNhc2Ugb3BfZGVs
X2J5X3ZhbDogewogICAgICAgICAgICAgZW1pdEdldFB1dEFyZyhpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7CiAgICAgICAgICAgICBlbWl0R2V0UHV0QXJnKGluc3Ry
dWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRD
YWxsKGksIE1hY2hpbmU6OmN0aV9vcF9kZWxfYnlfdmFsKTsKKyAgICAgICAgICAgIGVtaXRDVElD
YWxsKGksIE1hY2hpbmU6OmN0aV9vcF9kZWxfYnlfdmFsKTsKICAgICAgICAgICAgIGVtaXRQdXRS
ZXN1bHQoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBpICs9IDQ7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5MzMsNyArMTkzNyw3IEBAIHZvaWQgQ1RJOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZF0pOwog
ICAgICAgICAgICAgZW1pdFB1dEFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+
KGlkZW50KSwgNCk7CiAgICAgICAgICAgICBlbWl0R2V0UHV0QXJnKGluc3RydWN0aW9uW2kgKyAz
XS51Lm9wZXJhbmQsIDgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hp
bmU6OmN0aV9vcF9wdXRfZ2V0dGVyKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hp
bmU6OmN0aV9vcF9wdXRfZ2V0dGVyKTsKICAgICAgICAgICAgIGkgKz0gNDsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CkBAIC0xOTQyLDcgKzE5NDYsNyBAQCB2b2lkIENUSTo6cHJpdmF0
ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsKICAg
ICAgICAgICAgIGVtaXRQdXRBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihp
ZGVudCksIDQpOwogICAgICAgICAgICAgZW1pdEdldFB1dEFyZyhpbnN0cnVjdGlvbltpICsgM10u
dS5vcGVyYW5kLCA4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0Q2FsbChpLCBNYWNoaW5l
OjpjdGlfb3BfcHV0X3NldHRlcik7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBNYWNoaW5l
OjpjdGlfb3BfcHV0X3NldHRlcik7CiAgICAgICAgICAgICBpICs9IDQ7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQpAQCAtMTk1MSw3ICsxOTU1LDcgQEAgdm9pZCBDVEk6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgZW1pdFB1dEFyZ0NvbnN0YW50KGluc3RydWN0
aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDApOwogICAgICAgICAgICAgZW1pdFB1dEFyZ0NvbnN0YW50
KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG1lc3NhZ2UpLCA0KTsKICAgICAgICAgICAgIGVt
aXRQdXRBcmdDb25zdGFudChtX2NvZGVCbG9jay0+bGluZU51bWJlckZvclZQQygmaW5zdHJ1Y3Rp
b25baV0pLCA4KTsKLSAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9uZXdf
ZXJyb3IpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpX29wX25ld19l
cnJvcik7CiAgICAgICAgICAgICBlbWl0UHV0UmVzdWx0KGluc3RydWN0aW9uW2kgKyAxXS51Lm9w
ZXJhbmQpOwogICAgICAgICAgICAgaSArPSA0OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTYw
LDcgKzE5NjQsNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAg
ICAgICBlbWl0UHV0QXJnQ29uc3RhbnQoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgMCk7
CiAgICAgICAgICAgICBlbWl0UHV0QXJnQ29uc3RhbnQoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3Bl
cmFuZCwgNCk7CiAgICAgICAgICAgICBlbWl0UHV0QXJnQ29uc3RhbnQoaW5zdHJ1Y3Rpb25baSAr
IDNdLnUub3BlcmFuZCwgOCk7Ci0gICAgICAgICAgICBlbWl0Q2FsbChpLCBNYWNoaW5lOjpjdGlf
b3BfZGVidWcpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpX29wX2Rl
YnVnKTsKICAgICAgICAgICAgIGkgKz0gNDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC0yMDQzLDE0ICsyMDQ3LDE0IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KCkKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgY291bnQ7ICsraikKICAgICAg
ICAgICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKGopOwogCi0gICAgICAgICAgICBlbWl0Q2FsbChp
LCBNYWNoaW5lOjpjdGlfb3BfcHVzaF9hY3RpdmF0aW9uKTsKKyAgICAgICAgICAgIGVtaXRDVElD
YWxsKGksIE1hY2hpbmU6OmN0aV9vcF9wdXNoX2FjdGl2YXRpb24pOwogICAgICAgICAgICAgZW1p
dFB1dFJlc3VsdChpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKIAogICAgICAgICAgICAg
aSs9IDI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2Ny
ZWF0ZV9hcmd1bWVudHM6IHsKLSAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV9v
cF9jcmVhdGVfYXJndW1lbnRzKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hpbmU6
OmN0aV9vcF9jcmVhdGVfYXJndW1lbnRzKTsKICAgICAgICAgICAgIGkgKz0gMTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMDk1LDcgKzIwOTksNyBAQCB2b2lkIENUSTo6cHJp
dmF0ZUNvbXBpbGVMaW5rUGFzcygpCiAgICAgICAgIG1faml0LmxpbmsoaXRlci0+ZnJvbSwgbV9q
aXQubGFiZWwoKSk7IFwKICAgICAgICAgZW1pdEdldFB1dEFyZyhpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7IFwKICAgICAgICAgZW1pdEdldFB1dEFyZyhpbnN0cnVj
dGlvbltpICsgM10udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7IFwKLSAgICAgICAgZW1pdENhbGwo
aSwgTWFjaGluZTo6Y3RpXyMjbmFtZSk7IFwKKyAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGlu
ZTo6Y3RpXyMjbmFtZSk7IFwKICAgICAgICAgZW1pdFB1dFJlc3VsdChpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kKTsgXAogICAgICAgICBpICs9IDQ7IFwKICAgICAgICAgYnJlYWs7IFwKQEAg
LTIxMTMsNyArMjExNyw3IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAg
ICAgICAgICAgICBtX2ppdC5saW5rKGl0ZXItPmZyb20sIG1faml0LmxhYmVsKCkpOwogICAgICAg
ICAgICAgbV9qaXQubGluaygoKytpdGVyKS0+ZnJvbSwgbV9qaXQubGFiZWwoKSk7CiAgICAgICAg
ICAgICBlbWl0UHV0QXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRDYWxsKGksIE1h
Y2hpbmU6OmN0aV9vcF9jb252ZXJ0X3RoaXMpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwg
TWFjaGluZTo6Y3RpX29wX2NvbnZlcnRfdGhpcyk7CiAgICAgICAgICAgICBlbWl0UHV0UmVzdWx0
KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgaSArPSAyOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0yMTI5LDcgKzIxMzMsNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNv
bXBpbGVTbG93Q2FzZXMoKQogICAgICAgICAgICAgICAgIG1faml0Lmxpbmsobm90SW1tLCBtX2pp
dC5sYWJlbCgpKTsKICAgICAgICAgICAgICAgICBlbWl0R2V0UHV0QXJnKHNyYzEsIDAsIFg4Njo6
ZWN4KTsKICAgICAgICAgICAgICAgICBlbWl0UHV0QXJnKFg4Njo6ZWR4LCA0KTsKLSAgICAgICAg
ICAgICAgICBlbWl0Q2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfYWRkKTsKKyAgICAgICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfYWRkKTsKICAgICAgICAgICAgICAgICBl
bWl0UHV0UmVzdWx0KGRzdCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKEpTVmFsdWUqIHZhbHVl
ID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzIpKSB7CiAgICAgICAgICAgICAg
ICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgbm90SW1tID0gaXRlci0+ZnJvbTsKQEAgLTIxMzgsNyAr
MjE0Miw3IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAg
ICAgICAgbV9qaXQubGluayhub3RJbW0sIG1faml0LmxhYmVsKCkpOwogICAgICAgICAgICAgICAg
IGVtaXRQdXRBcmcoWDg2OjplYXgsIDApOwogICAgICAgICAgICAgICAgIGVtaXRHZXRQdXRBcmco
c3JjMiwgNCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6
OmN0aV9vcF9hZGQpOworICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hpbmU6OmN0
aV9vcF9hZGQpOwogICAgICAgICAgICAgICAgIGVtaXRQdXRSZXN1bHQoZHN0KTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gT3BlcmFu
ZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQpOwpAQCAtMjE2Miw3
ICsyMTY2LDcgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAg
ICAgIG1faml0Lmxpbmsobm90SW1tLCBtX2ppdC5sYWJlbCgpKTsKICAgICAgICAgICAgIGVtaXRQ
dXRBcmcoWDg2OjplYXgsIDApOwogICAgICAgICAgICAgZW1pdFB1dEFyZyhYODY6OmVkeCwgNCk7
Ci0gICAgICAgICAgICBlbWl0Q2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfZ2V0X2J5X3ZhbCk7Cisg
ICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfZ2V0X2J5X3ZhbCk7CiAg
ICAgICAgICAgICBlbWl0UHV0UmVzdWx0KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwog
ICAgICAgICAgICAgbV9qaXQubGluayhtX2ppdC5lbWl0VW5saW5rZWRKbXAoKSwgbV9sYWJlbHNb
aSArIDRdKTsKIApAQCAtMjE5Miw3ICsyMTk2LDcgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxl
U2xvd0Nhc2VzKCkKICAgICAgICAgICAgIG1faml0LmxpbmsoKCsraXRlciktPmZyb20sIG1faml0
LmxhYmVsKCkpOwogICAgICAgICAgICAgZW1pdFB1dEFyZyhYODY6OmVheCwgMCk7CiAgICAgICAg
ICAgICBlbWl0UHV0QXJnKFg4Njo6ZWN4LCA0KTsKLSAgICAgICAgICAgIGVtaXRDYWxsKGksIE1h
Y2hpbmU6OmN0aV9vcF9yc2hpZnQpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGlu
ZTo6Y3RpX29wX3JzaGlmdCk7CiAgICAgICAgICAgICBlbWl0UHV0UmVzdWx0KGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgaSArPSA0OwogICAgICAgICAgICAgYnJl
YWs7CkBAIC0yMjA3LDcgKzIyMTEsNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVTbG93Q2Fz
ZXMoKQogICAgICAgICAgICAgbV9qaXQubGluayhub3RJbW0yLCBtX2ppdC5sYWJlbCgpKTsKICAg
ICAgICAgICAgIGVtaXRQdXRBcmcoWDg2OjplYXgsIDApOwogICAgICAgICAgICAgZW1pdFB1dEFy
ZyhYODY6OmVjeCwgNCk7Ci0gICAgICAgICAgICBlbWl0Q2FsbChpLCBNYWNoaW5lOjpjdGlfb3Bf
bHNoaWZ0KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9sc2hp
ZnQpOwogICAgICAgICAgICAgZW1pdFB1dFJlc3VsdChpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kKTsKICAgICAgICAgICAgIGkgKz0gNDsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjIyMSw3
ICsyMjI1LDcgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAg
ICAgICAgICBtX2ppdC5saW5rKGl0ZXItPmZyb20sIG1faml0LmxhYmVsKCkpOwogICAgICAgICAg
ICAgICAgIGVtaXRQdXRBcmcoWDg2OjplZHgsIDApOwogICAgICAgICAgICAgICAgIGVtaXRHZXRQ
dXRBcmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOwotICAgICAg
ICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9sb29wX2lmX2xlc3MpOworICAg
ICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9sb29wX2lmX2xlc3Mp
OwogICAgICAgICAgICAgICAgIG1faml0LnRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7CiAg
ICAgICAgICAgICAgICAgbV9qaXQubGluayhtX2ppdC5lbWl0VW5saW5rZWRKbmUoKSwgbV9sYWJl
bHNbaSArIDMgKyB0YXJnZXRdKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yMjI5LDcgKzIy
MzMsNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICAgICAg
ICAgIG1faml0LmxpbmsoKCsraXRlciktPmZyb20sIG1faml0LmxhYmVsKCkpOwogICAgICAgICAg
ICAgICAgIGVtaXRQdXRBcmcoWDg2OjplYXgsIDApOwogICAgICAgICAgICAgICAgIGVtaXRQdXRB
cmcoWDg2OjplZHgsIDQpOwotICAgICAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0
aV9vcF9sb29wX2lmX2xlc3MpOworICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hp
bmU6OmN0aV9vcF9sb29wX2lmX2xlc3MpOwogICAgICAgICAgICAgICAgIG1faml0LnRlc3RsX3Jy
KFg4Njo6ZWF4LCBYODY6OmVheCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubGluayhtX2ppdC5l
bWl0VW5saW5rZWRKbmUoKSwgbV9sYWJlbHNbaSArIDMgKyB0YXJnZXRdKTsKICAgICAgICAgICAg
IH0KQEAgLTIyNDQsNyArMjI0OCw3IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNl
cygpCiAgICAgICAgICAgICBlbWl0UHV0QXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZD4oaWRlbnQpLCA0KTsKICAgICAgICAgICAgIGVtaXRQdXRBcmcoWDg2OjplYXgsIDApOwog
ICAgICAgICAgICAgZW1pdFB1dEFyZyhYODY6OmVkeCwgOCk7Ci0gICAgICAgICAgICBYODZBc3Nl
bWJsZXI6OkptcFNyYyBjYWxsID0gZW1pdENhbGwoaSwgTWFjaGluZTo6Y3RpX29wX3B1dF9ieV9p
ZCk7CisgICAgICAgICAgICBYODZBc3NlbWJsZXI6OkptcFNyYyBjYWxsID0gZW1pdENUSUNhbGwo
aSwgTWFjaGluZTo6Y3RpX29wX3B1dF9ieV9pZCk7CiAKICAgICAgICAgICAgIC8vIFRyYWNrIHRo
ZSBsb2NhdGlvbiBvZiB0aGUgY2FsbDsgdGhpcyB3aWxsIGJlIHVzZWQgdG8gcmVjb3ZlciByZXBh
dGNoIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5zdHJ1Y3R1
cmVJREluc3RydWN0aW9uc1tzdHJ1Y3R1cmVJREluc3RydWN0aW9uSW5kZXhdLm9wY29kZUluZGV4
ID09IGkpOwpAQCAtMjI3MCw3ICsyMjc0LDcgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlU2xv
d0Nhc2VzKCkKICAgICAgICAgICAgIGVtaXRQdXRBcmcoWDg2OjplYXgsIDApOwogICAgICAgICAg
ICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVj
dGlvbltpICsgM10udS5vcGVyYW5kXSk7CiAgICAgICAgICAgICBlbWl0UHV0QXJnQ29uc3RhbnQo
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCA0KTsKLSAgICAgICAgICAgIFg4NkFz
c2VtYmxlcjo6Sm1wU3JjIGNhbGwgPSBlbWl0Q2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfZ2V0X2J5
X2lkKTsKKyAgICAgICAgICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIGNhbGwgPSBlbWl0Q1RJQ2Fs
bChpLCBNYWNoaW5lOjpjdGlfb3BfZ2V0X2J5X2lkKTsKICAgICAgICAgICAgIEFTU0VSVChYODZB
c3NlbWJsZXI6OmdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKGNvbGRQYXRoQmVnaW4sIGNhbGwp
ID09IHJlcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsKICAgICAgICAgICAgIGVtaXRQ
dXRSZXN1bHQoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CiAKQEAgLTIyOTYsNyArMjMw
MCw3IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICAg
ICAgbV9qaXQubGluayhpdGVyLT5mcm9tLCBtX2ppdC5sYWJlbCgpKTsKICAgICAgICAgICAgICAg
ICBlbWl0UHV0QXJnKFg4Njo6ZWR4LCAwKTsKICAgICAgICAgICAgICAgICBlbWl0R2V0UHV0QXJn
KGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAg
ICAgICBlbWl0Q2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfbG9vcF9pZl9sZXNzZXEpOworICAgICAg
ICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9sb29wX2lmX2xlc3NlcSk7
CiAgICAgICAgICAgICAgICAgbV9qaXQudGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKICAg
ICAgICAgICAgICAgICBtX2ppdC5saW5rKG1faml0LmVtaXRVbmxpbmtlZEpuZSgpLCBtX2xhYmVs
c1tpICsgMyArIHRhcmdldF0pOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTIzMDQsNyArMjMw
OCw3IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICAg
ICAgbV9qaXQubGluaygoKytpdGVyKS0+ZnJvbSwgbV9qaXQubGFiZWwoKSk7CiAgICAgICAgICAg
ICAgICAgZW1pdFB1dEFyZyhYODY6OmVheCwgMCk7CiAgICAgICAgICAgICAgICAgZW1pdFB1dEFy
ZyhYODY6OmVkeCwgNCk7Ci0gICAgICAgICAgICAgICAgZW1pdENhbGwoaSwgTWFjaGluZTo6Y3Rp
X29wX2xvb3BfaWZfbGVzc2VxKTsKKyAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBNYWNo
aW5lOjpjdGlfb3BfbG9vcF9pZl9sZXNzZXEpOwogICAgICAgICAgICAgICAgIG1faml0LnRlc3Rs
X3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubGluayhtX2pp
dC5lbWl0VW5saW5rZWRKbmUoKSwgbV9sYWJlbHNbaSArIDMgKyB0YXJnZXRdKTsKICAgICAgICAg
ICAgIH0KQEAgLTIzMTgsNyArMjMyMiw3IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiAgICAgICAgICAgICBtX2ppdC5zdWJsX2k4cihnZXREZVRhZ2dlZENvbnN0YW50SW1t
ZWRpYXRlKEpTSW1tZWRpYXRlOjpvbmVJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKICAgICAgICAg
ICAgIG1faml0Lmxpbmsobm90SW1tLCBtX2ppdC5sYWJlbCgpKTsKICAgICAgICAgICAgIGVtaXRQ
dXRBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdENhbGwoaSwgTWFjaGluZTo6Y3Rp
X29wX3ByZV9pbmMpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpX29w
X3ByZV9pbmMpOwogICAgICAgICAgICAgZW1pdFB1dFJlc3VsdChzcmNEc3QpOwogICAgICAgICAg
ICAgaSArPSAyOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMzM0LDcgKzIzMzgsNyBAQCB2b2lk
IENUSTo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICAgICAgZW1pdFB1dEFyZyhY
ODY6OmVheCwgMCk7CiAgICAgICAgICAgICBlbWl0UHV0QXJnKFg4Njo6ZWR4LCA0KTsKICAgICAg
ICAgICAgIGVtaXRQdXRBcmcoWDg2OjplY3gsIDgpOwotICAgICAgICAgICAgZW1pdENhbGwoaSwg
TWFjaGluZTo6Y3RpX29wX3B1dF9ieV92YWwpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwg
TWFjaGluZTo6Y3RpX29wX3B1dF9ieV92YWwpOwogICAgICAgICAgICAgbV9qaXQubGluayhtX2pp
dC5lbWl0VW5saW5rZWRKbXAoKSwgbV9sYWJlbHNbaSArIDRdKTsKIAogICAgICAgICAgICAgLy8g
c2xvdyBjYXNlcyBmb3IgaW1tZWRpYXRlIGludCBhY2Nlc3NlcyB0byBhcnJheXMKQEAgLTIzNDQs
NyArMjM0OCw3IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAg
ICAgICBlbWl0UHV0QXJnKFg4Njo6ZWF4LCAwKTsKICAgICAgICAgICAgIGVtaXRQdXRBcmcoWDg2
OjplZHgsIDQpOwogICAgICAgICAgICAgZW1pdFB1dEFyZyhYODY6OmVjeCwgOCk7Ci0gICAgICAg
ICAgICBlbWl0Q2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfcHV0X2J5X3ZhbF9hcnJheSk7CisgICAg
ICAgICAgICBlbWl0Q1RJQ2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfcHV0X2J5X3ZhbF9hcnJheSk7
CiAKICAgICAgICAgICAgIGkgKz0gNDsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjM1NCw3ICsy
MzU4LDcgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICAg
ICAgbV9qaXQubGluayhpdGVyLT5mcm9tLCBtX2ppdC5sYWJlbCgpKTsKICAgICAgICAgICAgIGVt
aXRQdXRBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdENhbGwoaSwgTWFjaGluZTo6
Y3RpX29wX2p0cnVlKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hpbmU6OmN0aV9v
cF9qdHJ1ZSk7CiAgICAgICAgICAgICBtX2ppdC50ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgp
OwogICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3Bl
cmFuZDsKICAgICAgICAgICAgIG1faml0LmxpbmsobV9qaXQuZW1pdFVubGlua2VkSm5lKCksIG1f
bGFiZWxzW2kgKyAyICsgdGFyZ2V0XSk7CkBAIC0yMzY4LDcgKzIzNzIsNyBAQCB2b2lkIENUSTo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICAgICAgbV9qaXQuYWRkbF9pOHIoZ2V0
RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZShKU0ltbWVkaWF0ZTo6b25lSW1tZWRpYXRlKCkpLCBY
ODY6OmVheCk7CiAgICAgICAgICAgICBtX2ppdC5saW5rKG5vdEltbSwgbV9qaXQubGFiZWwoKSk7
CiAgICAgICAgICAgICBlbWl0UHV0QXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRD
YWxsKGksIE1hY2hpbmU6OmN0aV9vcF9wcmVfZGVjKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIE1hY2hpbmU6OmN0aV9vcF9wcmVfZGVjKTsKICAgICAgICAgICAgIGVtaXRQdXRSZXN1bHQo
c3JjRHN0KTsKICAgICAgICAgICAgIGkgKz0gMjsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjM4
MCw3ICsyMzg0LDcgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAg
ICAgICAgICAgICBtX2ppdC5saW5rKGl0ZXItPmZyb20sIG1faml0LmxhYmVsKCkpOwogICAgICAg
ICAgICAgICAgIGVtaXRQdXRBcmcoWDg2OjplZHgsIDApOwogICAgICAgICAgICAgICAgIGVtaXRH
ZXRQdXRBcmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOwotICAg
ICAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9qbGVzcyk7CisgICAgICAg
ICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpX29wX2psZXNzKTsKICAgICAgICAg
ICAgICAgICBtX2ppdC50ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOwogICAgICAgICAgICAg
ICAgIG1faml0LmxpbmsobV9qaXQuZW1pdFVubGlua2VkSmUoKSwgbV9sYWJlbHNbaSArIDMgKyB0
YXJnZXRdKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yMzg4LDcgKzIzOTIsNyBAQCB2b2lk
IENUSTo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICAgICAgICAgIG1faml0Lmxp
bmsoKCsraXRlciktPmZyb20sIG1faml0LmxhYmVsKCkpOwogICAgICAgICAgICAgICAgIGVtaXRQ
dXRBcmcoWDg2OjplYXgsIDApOwogICAgICAgICAgICAgICAgIGVtaXRQdXRBcmcoWDg2OjplZHgs
IDQpOwotICAgICAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9qbGVzcyk7
CisgICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpX29wX2psZXNzKTsK
ICAgICAgICAgICAgICAgICBtX2ppdC50ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOwogICAg
ICAgICAgICAgICAgIG1faml0LmxpbmsobV9qaXQuZW1pdFVubGlua2VkSmUoKSwgbV9sYWJlbHNb
aSArIDMgKyB0YXJnZXRdKTsKICAgICAgICAgICAgIH0KQEAgLTIzOTksNyArMjQwMyw3IEBAIHZv
aWQgQ1RJOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBtX2ppdC5saW5r
KGl0ZXItPmZyb20sIG1faml0LmxhYmVsKCkpOwogICAgICAgICAgICAgbV9qaXQueG9ybF9pOHIo
SlNJbW1lZGlhdGU6OkZ1bGxUYWdUeXBlQm9vbCwgWDg2OjplYXgpOwogICAgICAgICAgICAgZW1p
dFB1dEFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0Q2FsbChpLCBNYWNoaW5lOjpj
dGlfb3Bfbm90KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9u
b3QpOwogICAgICAgICAgICAgZW1pdFB1dFJlc3VsdChpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kKTsKICAgICAgICAgICAgIGkgKz0gMzsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQwNyw3
ICsyNDExLDcgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAg
Y2FzZSBvcF9qZmFsc2U6IHsKICAgICAgICAgICAgIG1faml0LmxpbmsoaXRlci0+ZnJvbSwgbV9q
aXQubGFiZWwoKSk7CiAgICAgICAgICAgICBlbWl0UHV0QXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAg
ICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9qdHJ1ZSk7CisgICAgICAgICAgICBl
bWl0Q1RJQ2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfanRydWUpOwogICAgICAgICAgICAgbV9qaXQu
dGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBtX2ppdC5saW5r
KG1faml0LmVtaXRVbmxpbmtlZEplKCksIG1fbGFiZWxzW2kgKyAyICsgdGFyZ2V0XSk7IC8vIGlu
dmVydGVkIQpAQCAtMjQxOSw3ICsyNDIzLDcgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlU2xv
d0Nhc2VzKCkKICAgICAgICAgICAgIG1faml0LmxpbmsoaXRlci0+ZnJvbSwgbV9qaXQubGFiZWwo
KSk7CiAgICAgICAgICAgICBtX2ppdC5saW5rKCgrK2l0ZXIpLT5mcm9tLCBtX2ppdC5sYWJlbCgp
KTsKICAgICAgICAgICAgIGVtaXRQdXRBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1p
dENhbGwoaSwgTWFjaGluZTo6Y3RpX29wX3Bvc3RfaW5jKTsKKyAgICAgICAgICAgIGVtaXRDVElD
YWxsKGksIE1hY2hpbmU6OmN0aV9vcF9wb3N0X2luYyk7CiAgICAgICAgICAgICBlbWl0UHV0UmVz
dWx0KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgZW1pdFB1dFJl
c3VsdChzcmNEc3QsIFg4Njo6ZWR4KTsKICAgICAgICAgICAgIGkgKz0gMzsKQEAgLTI0MjgsNyAr
MjQzMiw3IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIGNh
c2Ugb3BfYml0bm90OiB7CiAgICAgICAgICAgICBtX2ppdC5saW5rKGl0ZXItPmZyb20sIG1faml0
LmxhYmVsKCkpOwogICAgICAgICAgICAgZW1pdFB1dEFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAg
ICAgICBlbWl0Q2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfYml0bm90KTsKKyAgICAgICAgICAgIGVt
aXRDVElDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9iaXRub3QpOwogICAgICAgICAgICAgZW1pdFB1
dFJlc3VsdChpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGkgKz0g
MzsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQ0MSwxOSArMjQ0NSwxOSBAQCB2b2lkIENUSTo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICAgICAgICAgIG1faml0LmxpbmsoaXRl
ci0+ZnJvbSwgbV9qaXQubGFiZWwoKSk7CiAgICAgICAgICAgICAgICAgZW1pdEdldFB1dEFyZyhz
cmMxLCAwLCBYODY6OmVjeCk7CiAgICAgICAgICAgICAgICAgZW1pdFB1dEFyZyhYODY6OmVheCwg
NCk7Ci0gICAgICAgICAgICAgICAgZW1pdENhbGwoaSwgTWFjaGluZTo6Y3RpX29wX2JpdGFuZCk7
CisgICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpX29wX2JpdGFuZCk7
CiAgICAgICAgICAgICAgICAgZW1pdFB1dFJlc3VsdChkc3QpOwogICAgICAgICAgICAgfSBlbHNl
IGlmIChnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMikpIHsKICAgICAgICAgICAg
ICAgICBtX2ppdC5saW5rKGl0ZXItPmZyb20sIG1faml0LmxhYmVsKCkpOwogICAgICAgICAgICAg
ICAgIGVtaXRQdXRBcmcoWDg2OjplYXgsIDApOwogICAgICAgICAgICAgICAgIGVtaXRHZXRQdXRB
cmcoc3JjMiwgNCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hp
bmU6OmN0aV9vcF9iaXRhbmQpOworICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hp
bmU6OmN0aV9vcF9iaXRhbmQpOwogICAgICAgICAgICAgICAgIGVtaXRQdXRSZXN1bHQoZHN0KTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbV9qaXQubGluayhpdGVyLT5m
cm9tLCBtX2ppdC5sYWJlbCgpKTsKICAgICAgICAgICAgICAgICBlbWl0R2V0UHV0QXJnKHNyYzEs
IDAsIFg4Njo6ZWN4KTsKICAgICAgICAgICAgICAgICBlbWl0UHV0QXJnKFg4Njo6ZWR4LCA0KTsK
LSAgICAgICAgICAgICAgICBlbWl0Q2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfYml0YW5kKTsKKyAg
ICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfYml0YW5kKTsKICAg
ICAgICAgICAgICAgICBlbWl0UHV0UmVzdWx0KGRzdCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpICs9IDU7CkBAIC0yNDYyLDcgKzI0NjYsNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBp
bGVTbG93Q2FzZXMoKQogICAgICAgICBjYXNlIG9wX2p0cnVlOiB7CiAgICAgICAgICAgICBtX2pp
dC5saW5rKGl0ZXItPmZyb20sIG1faml0LmxhYmVsKCkpOwogICAgICAgICAgICAgZW1pdFB1dEFy
ZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0Q2FsbChpLCBNYWNoaW5lOjpjdGlfb3Bf
anRydWUpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpX29wX2p0cnVl
KTsKICAgICAgICAgICAgIG1faml0LnRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7CiAgICAg
ICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwog
ICAgICAgICAgICAgbV9qaXQubGluayhtX2ppdC5lbWl0VW5saW5rZWRKbmUoKSwgbV9sYWJlbHNb
aSArIDIgKyB0YXJnZXRdKTsKQEAgLTI0NzQsNyArMjQ3OCw3IEBAIHZvaWQgQ1RJOjpwcml2YXRl
Q29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBtX2ppdC5saW5rKGl0ZXItPmZyb20sIG1f
aml0LmxhYmVsKCkpOwogICAgICAgICAgICAgbV9qaXQubGluaygoKytpdGVyKS0+ZnJvbSwgbV9q
aXQubGFiZWwoKSk7CiAgICAgICAgICAgICBlbWl0UHV0QXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAg
ICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9wb3N0X2RlYyk7CisgICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfcG9zdF9kZWMpOwogICAgICAgICAgICAg
ZW1pdFB1dFJlc3VsdChpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAg
IGVtaXRQdXRSZXN1bHQoc3JjRHN0LCBYODY6OmVkeCk7CiAgICAgICAgICAgICBpICs9IDM7CkBA
IC0yNDg0LDcgKzI0ODgsNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ICAgICAgICAgICAgbV9qaXQubGluayhpdGVyLT5mcm9tLCBtX2ppdC5sYWJlbCgpKTsKICAgICAg
ICAgICAgIGVtaXRQdXRBcmcoWDg2OjplYXgsIDApOwogICAgICAgICAgICAgZW1pdFB1dEFyZyhY
ODY6OmVkeCwgNCk7Ci0gICAgICAgICAgICBlbWl0Q2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfYml0
eG9yKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9iaXR4b3Ip
OwogICAgICAgICAgICAgZW1pdFB1dFJlc3VsdChpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
KTsKICAgICAgICAgICAgIGkgKz0gNTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQ5Myw3ICsy
NDk3LDcgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAg
IG1faml0LmxpbmsoaXRlci0+ZnJvbSwgbV9qaXQubGFiZWwoKSk7CiAgICAgICAgICAgICBlbWl0
UHV0QXJnKFg4Njo6ZWF4LCAwKTsKICAgICAgICAgICAgIGVtaXRQdXRBcmcoWDg2OjplZHgsIDQp
OwotICAgICAgICAgICAgZW1pdENhbGwoaSwgTWFjaGluZTo6Y3RpX29wX2JpdG9yKTsKKyAgICAg
ICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9iaXRvcik7CiAgICAgICAgICAg
ICBlbWl0UHV0UmVzdWx0KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwogICAgICAgICAg
ICAgaSArPSA1OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNTAyLDcgKzI1MDYsNyBAQCB2b2lk
IENUSTo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICAgICAgbV9qaXQubGluayhp
dGVyLT5mcm9tLCBtX2ppdC5sYWJlbCgpKTsKICAgICAgICAgICAgIGVtaXRQdXRBcmcoWDg2Ojpl
YXgsIDApOwogICAgICAgICAgICAgZW1pdFB1dEFyZyhYODY6OmVkeCwgNCk7Ci0gICAgICAgICAg
ICBlbWl0Q2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfZXEpOworICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgTWFjaGluZTo6Y3RpX29wX2VxKTsKICAgICAgICAgICAgIGVtaXRQdXRSZXN1bHQoaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBpICs9IDQ7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTI1MTEsNyArMjUxNSw3IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBtX2ppdC5saW5rKGl0ZXItPmZyb20sIG1faml0Lmxh
YmVsKCkpOwogICAgICAgICAgICAgZW1pdFB1dEFyZyhYODY6OmVheCwgMCk7CiAgICAgICAgICAg
ICBlbWl0UHV0QXJnKFg4Njo6ZWR4LCA0KTsKLSAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hp
bmU6OmN0aV9vcF9uZXEpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3Rp
X29wX25lcSk7CiAgICAgICAgICAgICBlbWl0UHV0UmVzdWx0KGluc3RydWN0aW9uW2kgKyAxXS51
Lm9wZXJhbmQpOwogICAgICAgICAgICAgaSArPSA0OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0y
NTIzLDcgKzI1MjcsNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAg
ICAgICAgICAgZW1pdEdldFB1dEFyZyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBY
ODY6OmVjeCk7CiAgICAgICAgICAgICBlbWl0R2V0UHV0QXJnKGluc3RydWN0aW9uW2kgKyAzXS51
Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsKICAgICAgICAgICAgIGVtaXRHZXRQdXRBcmcoaW5zdHJ1
Y3Rpb25baSArIDRdLnUub3BlcmFuZCwgOCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdENh
bGwoaSwgTWFjaGluZTo6Y3RpX29wX2luc3RhbmNlb2YpOworICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgTWFjaGluZTo6Y3RpX29wX2luc3RhbmNlb2YpOwogICAgICAgICAgICAgZW1pdFB1dFJl
c3VsdChpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGkgKz0gNTsK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjUzOCw3ICsyNTQyLDcgQEAgdm9pZCBDVEk6OnByaXZh
dGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAgIG1faml0Lmxpbmsobm90SW1tMiwgbV9q
aXQubGFiZWwoKSk7CiAgICAgICAgICAgICBlbWl0UHV0QXJnKFg4Njo6ZWF4LCAwKTsKICAgICAg
ICAgICAgIGVtaXRQdXRBcmcoWDg2OjplY3gsIDQpOwotICAgICAgICAgICAgZW1pdENhbGwoaSwg
TWFjaGluZTo6Y3RpX29wX21vZCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBNYWNoaW5l
OjpjdGlfb3BfbW9kKTsKICAgICAgICAgICAgIGVtaXRQdXRSZXN1bHQoaW5zdHJ1Y3Rpb25baSAr
IDFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBpICs9IDQ7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTI1NTUsMTQgKzI1NTksMTQgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlU2xvd0Nhc2Vz
KCkKICAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhbiBleHRyYSBzbG93IGNhc2UgZm9yIChv
cDEgKiAtTikgb3IgKC1OICogb3AyKSwgdG8gY2hlY2sgZm9yIDAgc2luY2UgdGhpcyBzaG91bGQg
cHJvZHVjZSBhIHJlc3VsdCBvZiAtMC4KICAgICAgICAgICAgICAgICBlbWl0R2V0UHV0QXJnKHNy
YzEsIDAsIFg4Njo6ZWN4KTsKICAgICAgICAgICAgICAgICBlbWl0R2V0UHV0QXJnKHNyYzIsIDQs
IFg4Njo6ZWN4KTsKLSAgICAgICAgICAgICAgICBlbWl0Q2FsbChpLCBNYWNoaW5lOjpjdGlfb3Bf
bXVsKTsKKyAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfbXVs
KTsKICAgICAgICAgICAgICAgICBlbWl0UHV0UmVzdWx0KGRzdCk7CiAgICAgICAgICAgICB9IGVs
c2UgaWYgKHNyYzJWYWx1ZSAmJiAoKHZhbHVlID0gSlNJbW1lZGlhdGU6OmludFZhbHVlKHNyYzJW
YWx1ZSkpID4gMCkpIHsKICAgICAgICAgICAgICAgICBtX2ppdC5saW5rKGl0ZXItPmZyb20sIG1f
aml0LmxhYmVsKCkpOwogICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGFuIGV4dHJhIHNsb3cg
Y2FzZSBmb3IgKG9wMSAqIC1OKSBvciAoLU4gKiBvcDIpLCB0byBjaGVjayBmb3IgMCBzaW5jZSB0
aGlzIHNob3VsZCBwcm9kdWNlIGEgcmVzdWx0IG9mIC0wLgogICAgICAgICAgICAgICAgIGVtaXRH
ZXRQdXRBcmcoc3JjMSwgMCwgWDg2OjplY3gpOwogICAgICAgICAgICAgICAgIGVtaXRHZXRQdXRB
cmcoc3JjMiwgNCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hp
bmU6OmN0aV9vcF9tdWwpOworICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hpbmU6
OmN0aV9vcF9tdWwpOwogICAgICAgICAgICAgICAgIGVtaXRQdXRSZXN1bHQoZHN0KTsKICAgICAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGNvbXBpbGVCaW5hcnlBcml0aE9wU2xvd0Nh
c2Uob3BfbXVsLCBpdGVyLCBkc3QsIHNyYzEsIHNyYzIsIE9wZXJhbmRUeXBlczo6ZnJvbUludChp
bnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5kKSwgaSk7CkBAIC0yNTc2LDcgKzI1ODAsNyBAQCB2
b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICAgICAgbV9qaXQubGlu
ayhpdGVyLT5mcm9tLCBtX2ppdC5sYWJlbCgpKTsKIAogICAgICAgICAgICAgLy8gV2UganVtcCB0
byB0aGlzIHNsb3cgY2FzZSBpZiB0aGUgY3RpQ29kZSBmb3IgdGhlIGNvZGVCbG9jayBoYXMgbm90
IHlldCBiZWVuIGdlbmVyYXRlZDsgY29tcGlsZSBpdCBub3cuCi0gICAgICAgICAgICBlbWl0Q2Fs
bChpLCBNYWNoaW5lOjpjdGlfdm1fY29tcGlsZSk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChp
LCBNYWNoaW5lOjpjdGlfdm1fY29tcGlsZSk7CiAgICAgICAgICAgICBlbWl0Q2FsbChpLCBYODY6
OmVheCk7CiAKICAgICAgICAgICAgIC8vIEluc3RlYWQgb2YgY2hlY2tpbmcgZm9yIDAgd2UgY291
bGQgaW5pdGlhbGl6ZSB0aGUgQ29kZUJsb2NrOjpjdGlDb2RlIHRvIHBvaW50IHRvIGEgdHJhbXBv
bGluZSB0aGF0IHdvdWxkIHRyaWdnZXIgdGhlIHRyYW5zbGF0aW9uLgpAQCAtMjU5MSw3ICsyNTk1
LDcgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAgIG1f
aml0LmxpbmsoaXRlci0+ZnJvbSwgbV9qaXQubGFiZWwoKSk7CiAKICAgICAgICAgICAgIGVtaXRQ
dXRBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdENhbGwoaSwgTWFjaGluZTo6Y3Rp
X29wX3RvX2pzbnVtYmVyKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hpbmU6OmN0
aV9vcF90b19qc251bWJlcik7CiAKICAgICAgICAgICAgIGVtaXRQdXRSZXN1bHQoaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBpICs9IDM7CkBAIC0yNjMxLDcgKzI2
MzUsNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGUoKQogCiAgICAgaWYgKG1fY29kZUJsb2Nr
LT5jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUpIHsKICAgICAgICAgbV9qaXQubGluayhzbG93UmVn
aXN0ZXJGaWxlQ2hlY2ssIG1faml0LmxhYmVsKCkpOwotICAgICAgICBlbWl0Q2FsbCgwLCBNYWNo
aW5lOjpjdGlfcmVnaXN0ZXJfZmlsZV9jaGVjayk7CisgICAgICAgIGVtaXRDVElDYWxsKDAsIE1h
Y2hpbmU6OmN0aV9yZWdpc3Rlcl9maWxlX2NoZWNrKTsKICAgICAgICAgWDg2QXNzZW1ibGVyOjpK
bXBTcmMgYmFja1RvQm9keSA9IG1faml0LmVtaXRVbmxpbmtlZEptcCgpOwogICAgICAgICBtX2pp
dC5saW5rKGJhY2tUb0JvZHksIGFmdGVyUmVnaXN0ZXJGaWxlQ2hlY2spOwogICAgIH0KSW5kZXg6
IFZNL0NUSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NUSS5oCShyZXZpc2lvbiAzNzY0NSkKKysrIFZN
L0NUSS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCw4IEBACiAjZGVmaW5lIENUSV9BUkdT
X2V4Y2VwdGlvbiAweDBGCiAjZGVmaW5lIENUSV9BUkdTX3Byb2ZpbGVyUmVmZXJlbmNlIDB4MTAK
ICNkZWZpbmUgQ1RJX0FSR1NfZ2xvYmFsRGF0YSAweDExCi0jZGVmaW5lIEFSR19yZWdpc3RlckZp
bGUgKChSZWdpc3RlckZpbGUqKShBUkdTKVtDVElfQVJHU19yZWdpc3RlckZpbGVdKQogI2RlZmlu
ZSBBUkdfY2FsbEZyYW1lICgoQ2FsbEZyYW1lKikoQVJHUylbQ1RJX0FSR1NfY2FsbEZyYW1lXSkK
KyNkZWZpbmUgQVJHX3JlZ2lzdGVyRmlsZSAoKFJlZ2lzdGVyRmlsZSopKEFSR1MpW0NUSV9BUkdT
X3JlZ2lzdGVyRmlsZV0pCiAjZGVmaW5lIEFSR19leGNlcHRpb24gKChKU1ZhbHVlKiopKEFSR1Mp
W0NUSV9BUkdTX2V4Y2VwdGlvbl0pCiAjZGVmaW5lIEFSR19wcm9maWxlclJlZmVyZW5jZSAoKFBy
b2ZpbGVyKiopKEFSR1MpW0NUSV9BUkdTX3Byb2ZpbGVyUmVmZXJlbmNlXSkKICNkZWZpbmUgQVJH
X2dsb2JhbERhdGEgKChKU0dsb2JhbERhdGEqKShBUkdTKVtDVElfQVJHU19nbG9iYWxEYXRhXSkK
QEAgLTI1Myw5ICsyNTMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0
IGludCByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UgPSAyNTsKICAgICAgICAg
c3RhdGljIGNvbnN0IGludCByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0ID0g
MzQ7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1RPT0wpCi0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
cmVwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwgPSAyNyArIGN0aUFyZ3VtZW50SW5pdFNp
emU7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmVwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2Fz
ZUNhbGwgPSAyNyArIDQgKyBjdGlBcmd1bWVudEluaXRTaXplOwogI2Vsc2UKLSAgICAgICAgc3Rh
dGljIGNvbnN0IGludCByZXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCA9IDE3ICsgY3Rp
QXJndW1lbnRJbml0U2l6ZTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCByZXBhdGNoT2Zmc2V0
R2V0QnlJZFNsb3dDYXNlQ2FsbCA9IDE3ICsgNCArIGN0aUFyZ3VtZW50SW5pdFNpemU7CiAjZW5k
aWYKIAogICAgIHB1YmxpYzoKQEAgLTM4OSwxMiArMzg5LDEyIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUoWDg2QXNzZW1ibGVyOjpSZWdpc3Rl
cklEIHJlZyk7CiAKICAgICAgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgZW1pdENhbGwodW5zaWdu
ZWQgb3Bjb2RlSW5kZXgsIFg4Njo6UmVnaXN0ZXJJRCk7Ci0gICAgICAgIFg4NkFzc2VtYmxlcjo6
Sm1wU3JjIGVtaXRDYWxsKHVuc2lnbmVkIG9wY29kZUluZGV4LCBDVElIZWxwZXJfaik7Ci0gICAg
ICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIGVtaXRDYWxsKHVuc2lnbmVkIG9wY29kZUluZGV4LCBD
VElIZWxwZXJfcCk7Ci0gICAgICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIGVtaXRDYWxsKHVuc2ln
bmVkIG9wY29kZUluZGV4LCBDVElIZWxwZXJfdik7Ci0gICAgICAgIFg4NkFzc2VtYmxlcjo6Sm1w
U3JjIGVtaXRDYWxsKHVuc2lnbmVkIG9wY29kZUluZGV4LCBDVElIZWxwZXJfcyk7Ci0gICAgICAg
IFg4NkFzc2VtYmxlcjo6Sm1wU3JjIGVtaXRDYWxsKHVuc2lnbmVkIG9wY29kZUluZGV4LCBDVElI
ZWxwZXJfYik7Ci0gICAgICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIGVtaXRDYWxsKHVuc2lnbmVk
IG9wY29kZUluZGV4LCBDVElIZWxwZXJfMik7CisgICAgICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3Jj
IGVtaXRDVElDYWxsKHVuc2lnbmVkIG9wY29kZUluZGV4LCBDVElIZWxwZXJfaik7CisgICAgICAg
IFg4NkFzc2VtYmxlcjo6Sm1wU3JjIGVtaXRDVElDYWxsKHVuc2lnbmVkIG9wY29kZUluZGV4LCBD
VElIZWxwZXJfcCk7CisgICAgICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIGVtaXRDVElDYWxsKHVu
c2lnbmVkIG9wY29kZUluZGV4LCBDVElIZWxwZXJfdik7CisgICAgICAgIFg4NkFzc2VtYmxlcjo6
Sm1wU3JjIGVtaXRDVElDYWxsKHVuc2lnbmVkIG9wY29kZUluZGV4LCBDVElIZWxwZXJfcyk7Cisg
ICAgICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIGVtaXRDVElDYWxsKHVuc2lnbmVkIG9wY29kZUlu
ZGV4LCBDVElIZWxwZXJfYik7CisgICAgICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIGVtaXRDVElD
YWxsKHVuc2lnbmVkIG9wY29kZUluZGV4LCBDVElIZWxwZXJfMik7CiAKICAgICAgICAgdm9pZCBl
bWl0R2V0VmFyaWFibGVPYmplY3RSZWdpc3RlcihYODZBc3NlbWJsZXI6OlJlZ2lzdGVySUQgdmFy
aWFibGVPYmplY3QsIGludCBpbmRleCwgWDg2QXNzZW1ibGVyOjpSZWdpc3RlcklEIGRzdCk7CiAg
ICAgICAgIHZvaWQgZW1pdFB1dFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIoWDg2QXNzZW1ibGVyOjpS
ZWdpc3RlcklEIHNyYywgWDg2QXNzZW1ibGVyOjpSZWdpc3RlcklEIHZhcmlhYmxlT2JqZWN0LCBp
bnQgaW5kZXgpOwo=
</data>
<flag name="review"
          id="11125"
          type_id="1"
          status="+"
          setter="zwarich"
    />
          </attachment>
      

    </bug>

</bugzilla>