<?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>131336</bug_id>
          
          <creation_ts>2014-04-07 18:35:13 -0700</creation_ts>
          <short_desc>Setters are just getters that take an extra argument and don&apos;t return a value</short_desc>
          <delta_ts>2014-04-07 20:55:55 -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>130750</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>998351</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-07 18:35:13 -0700</bug_when>
    <thetext>Other than that, they&apos;re totally the same thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998355</commentid>
    <comment_count>1</comment_count>
      <attachid>228790</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-07 18:38:53 -0700</bug_when>
    <thetext>Created attachment 228790
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998356</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-07 18:41:09 -0700</bug_when>
    <thetext>Attachment 228790 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/Repatch.cpp:396:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998358</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-07 18:42:36 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 228790 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/JavaScriptCore/jit/Repatch.cpp:396:  Multi line control clauses should use braces.  [whitespace/braces] [4]
&gt; Total errors found: 1 in 5 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998365</commentid>
    <comment_count>4</comment_count>
      <attachid>228790</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-07 18:58:00 -0700</bug_when>
    <thetext>Comment on attachment 228790
the patch

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

&gt; Source/JavaScriptCore/jit/Repatch.cpp:442
&gt; +            stubJit.storeValue(
&gt; +                valueRegs,
&gt; +                calleeFrame.withOffset(
&gt; +                    virtualRegisterForArgument(1).offset() * sizeof(Register)));
&gt; +            

Is this okay to do if we&apos;re invoking a getter?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998366</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-07 18:59:32 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 228790 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=228790&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/Repatch.cpp:442
&gt; &gt; +            stubJit.storeValue(
&gt; &gt; +                valueRegs,
&gt; &gt; +                calleeFrame.withOffset(
&gt; &gt; +                    virtualRegisterForArgument(1).offset() * sizeof(Register)));
&gt; &gt; +            
&gt; 
&gt; Is this okay to do if we&apos;re invoking a getter?

Oh lol, no it&apos;s not!  It barely works because in almost all cases we&apos;re overestimating the amount of extra stack space that we need and the top of stack is clobberable (Baseline, DFG, and LLVM all leave slop at the top of stack).  But, it&apos;s wrong.  And inefficient.  I will fix by conditionalizing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998367</commentid>
    <comment_count>6</comment_count>
      <attachid>228792</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-07 19:01:33 -0700</bug_when>
    <thetext>Created attachment 228792
the patch

With fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998370</commentid>
    <comment_count>7</comment_count>
      <attachid>228792</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-04-07 19:03:55 -0700</bug_when>
    <thetext>Comment on attachment 228792
the patch

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

&gt; Source/JavaScriptCore/jit/Repatch.cpp:316
&gt; +    bool isAccessor = kind != GetValue;

This seems dangerous because it would go wrong silently if someone added a GetValue ByIdStubKind. Maybe use an isAccessorFor helper function with a switch statement inside instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998372</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-04-07 19:04:40 -0700</bug_when>
    <thetext>&gt; if someone added a GetValue ByIdStubKind

*SetValue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998384</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-07 19:19:45 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; if someone added a GetValue ByIdStubKind
&gt; 
&gt; *SetValue

I presume that your SetValue means either PutByIdReplace or PutByIdTransition.  We already have those and they are handled by a different code path, since they require a different kind of idiom to handle propertly - they never involve &quot;setting&quot; something in the prototype chain but they may involve validating that the prototype chain doesn&apos;t have the thing we are setting.

I could add more assertions here but this code is well-tested - each line of code in here has a test case at this point - and so I don&apos;t think it&apos;s worth the clutter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998391</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-07 19:24:45 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; &gt; if someone added a GetValue ByIdStubKind
&gt; &gt; 
&gt; &gt; *SetValue
&gt; 
&gt; I presume that your SetValue means either PutByIdReplace or PutByIdTransition.  We already have those and they are handled by a different code path, since they require a different kind of idiom to handle propertly - they never involve &quot;setting&quot; something in the prototype chain but they may involve validating that the prototype chain doesn&apos;t have the thing we are setting.
&gt; 
&gt; I could add more assertions here but this code is well-tested - each line of code in here has a test case at this point - and so I don&apos;t think it&apos;s worth the clutter.

It&apos;s actually even better than that.  isAccessor is only used in one place - where we decide to emit a call.  It&apos;s a very obvious if statement.  You would of course change this if statement if you added a new case to this code.

I don&apos;t think it&apos;s worth adding an assertion since if you *really* added a Put case to the enum but literally were so high that you forgot to change that if statement, then you would be guaranteed to ragecrash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998392</commentid>
    <comment_count>11</comment_count>
      <attachid>228796</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-07 19:25:18 -0700</bug_when>
    <thetext>Created attachment 228796
the patch

Make the isAccessor thing more obvious</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998407</commentid>
    <comment_count>12</comment_count>
      <attachid>228796</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-04-07 20:46:15 -0700</bug_when>
    <thetext>Comment on attachment 228796
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998411</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-07 20:55:55 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/166908</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228790</attachid>
            <date>2014-04-07 18:38:53 -0700</date>
            <delta_ts>2014-04-07 19:01:33 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>25627</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2OTAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE0LTA0LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U2V0dGVycyBhcmUganVzdCBnZXR0ZXJzIHRoYXQgdGFrZSBhbiBleHRyYSBhcmd1bWVudCBhbmQg
ZG9uJ3QgcmV0dXJuIGEgdmFsdWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzMTMzNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgT3RoZXIgdGhhbiB0aGF0LCB0aGV5J3JlIHRvdGFsbHkgdGhl
IHNhbWUgdGhpbmcuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzbid0IGFzIGR1bWIgYXMgaXQg
c291bmRzLiAgICAgICAgCisKKyAgICAgICAgTW9zdCBvZiB0aGUgd29yayBpbiBjYWxsaW5nIGFu
IGFjY2Vzc29yIGhhcyB0byBkbyB3aXRoIGVtaXR0aW5nIHRoZSBuZWNlc3NhcnkgY2hlY2tzIGZv
cgorICAgICAgICBmaWd1cmluZyBvdXQgd2hldGhlciB3ZSdyZSBjYWxsaW5nIHRoZSBhY2Nlc3Nv
ciB3ZSBleHBlY3RlZCwgZm9sbG93ZWQgYnkgdGhlIGJvaWxlcnBsYXRlCisgICAgICAgIG5lZWRl
ZCBmb3Igc2V0dGluZyB1cCBhIGNhbGwgaW5zaWRlIG9mIGEgc3R1Yi4gSXQgbWFrZXMgc2Vuc2Ug
Zm9yIHRoZSBjb2RlIHRvIGJlIHRvdGFsbHkKKyAgICAgICAgY29tbW9uLgorCisgICAgICAgICog
aml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0
b3JlVmFsdWUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6Om1vdmVUcnVzdGVkVmFs
dWUpOgorICAgICAgICAqIGppdC9DQ2FsbEhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6Q0NhbGxI
ZWxwZXJzOjpzZXR1cFJlc3VsdHMpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAg
ICAgKEpTQzo6a2luZEZvcik6CisgICAgICAgIChKU0M6OmN1c3RvbUZvcik6CisgICAgICAgIChK
U0M6OmdlbmVyYXRlQnlJZFN0dWIpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgor
ICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAgICAgICAgKEpTQzo6dHJ5Q2Fj
aGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6dHJ5QnVpbGRQdXRCeUlkTGlzdCk6CisgICAgICAg
IChKU0M6OmdlbmVyYXRlR2V0QnlJZFN0dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjplbWl0
Q3VzdG9tU2V0dGVyU3R1Yik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVl
Lmg6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmFzVmFsdWUpOgorICAgICAgICAqIHJ1bnRpbWUv
UHV0UHJvcGVydHlTbG90Lmg6CisgICAgICAgIChKU0M6OlB1dFByb3BlcnR5U2xvdDo6Y2FjaGVk
T2Zmc2V0KToKKwogMjAxNC0wNC0wNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUu
Y29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEhhbmcgaW4gZGVidWdnYWJsZSBhcHBsaWNh
dGlvbiBhZnRlciByZWNlaXZpbmcgV0lSUGVybWlzc2lvbkRlbmllZApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxNjY4OTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Nyw2ICs3NywyNiBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBhZGRyZXNzLndpdGhPZmZzZXQoVGFnT2Zmc2V0KSk7CiAj
ZW5kaWYKICAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZVZhbHVlKEpTVmFsdWVSZWdzIHJlZ3Ms
IEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3Rv
cmU2NChyZWdzLmdwcigpLCBhZGRyZXNzKTsKKyNlbHNlCisgICAgICAgIHN0b3JlMzIocmVncy5w
YXlsb2FkR1BSKCksIGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSk7CisgICAgICAg
IHN0b3JlMzIocmVncy50YWdHUFIoKSwgYWRkcmVzcy53aXRoT2Zmc2V0KFRhZ09mZnNldCkpOwor
I2VuZGlmCisgICAgfQorICAgIAorICAgIHZvaWQgbW92ZVRydXN0ZWRWYWx1ZShKU1ZhbHVlIHZh
bHVlLCBKU1ZhbHVlUmVncyByZWdzKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgcmVncy5ncHIoKSk7
CisjZWxzZQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMih2YWx1ZS50YWcoKSksIHJlZ3MudGFn
R1BSKCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMih2YWx1ZS5wYXlsb2FkKCkpLCByZWdz
LnBheWxvYWRHUFIoKSk7CisjZW5kaWYKKyAgICB9CiAKICNpZiBDUFUoWDg2XzY0KSB8fCBDUFUo
WDg2KQogICAgIHN0YXRpYyBzaXplX3QgcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDE2Njg5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE2NjcsNiArMTY2NywxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzd2FwKGRl
c3RBLCBkZXN0Qik7CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0dXBSZXN1bHRzKEpTVmFsdWVS
ZWdzIHJlZ3MpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG1vdmUoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIHJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgc2V0dXBSZXN1
bHRzKHJlZ3MucGF5bG9hZEdQUigpLCByZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorICAgIH0KKyAg
ICAKICAgICB2b2lkIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKQogICAgIHsKICAgICAgICAgLy8g
Z2VuZXJpY1Vud2luZCgpIGxlYXZlcyB0aGUgaGFuZGxlciBDYWxsRnJhbWUqIGluIHZtLT5jYWxs
RnJhbWVGb3JUaHJvdywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
cmV2aXNpb24gMTY2ODk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDI5ICsyMjIsNjYgQEAgc3RhdGljIHZvaWQgbGlua1Jl
c3RvcmVTY3JhdGNoKExpbmtCdWZmZQogICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZl
ciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCi1zdGF0aWMgdm9pZCBn
ZW5lcmF0ZUdldEJ5SWRTdHViKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsCi0gICAgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlTG9j
YXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWws
Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCitlbnVtIEJ5SWRTdHVi
S2luZCB7CisgICAgR2V0VmFsdWUsCisgICAgQ2FsbEdldHRlciwKKyAgICBDYWxsQ3VzdG9tR2V0
dGVyLAorICAgIENhbGxTZXR0ZXIsCisgICAgQ2FsbEN1c3RvbVNldHRlcgorfTsKKworc3RhdGlj
IEJ5SWRTdHViS2luZCBraW5kRm9yKGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBp
ZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCisgICAgICAgIHJldHVybiBHZXRWYWx1ZTsKKyAg
ICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKQorICAgICAgICByZXR1cm4gQ2FsbEN1c3Rv
bUdldHRlcjsKKyAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpOwor
ICAgIHJldHVybiBDYWxsR2V0dGVyOworfQorCitzdGF0aWMgRnVuY3Rpb25QdHIgY3VzdG9tRm9y
KGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVD
dXN0b20oKSkKKyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKCk7CisgICAgcmV0dXJuIEZ1bmN0
aW9uUHRyKHNsb3QuY3VzdG9tR2V0dGVyKCkpOworfQorCitzdGF0aWMgQnlJZFN0dWJLaW5kIGtp
bmRGb3IoY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIFJFTEVBU0VfQVNTRVJU
KCFzbG90LmlzQ2FjaGVhYmxlUHV0KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKHNsb3QuaXNDYWNo
ZWFibGVDdXN0b21Qcm9wZXJ0eSgpKTsKKyAgICByZXR1cm4gQ2FsbEN1c3RvbVNldHRlcjsKK30K
Kworc3RhdGljIEZ1bmN0aW9uUHRyIGN1c3RvbUZvcihjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCit7CisgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tUHJvcGVydHkoKSkKKyAgICAg
ICAgcmV0dXJuIEZ1bmN0aW9uUHRyKCk7CisgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKHNsb3QuY3Vz
dG9tU2V0dGVyKCkpOworfQorCitzdGF0aWMgdm9pZCBnZW5lcmF0ZUJ5SWRTdHViKAorICAgIEV4
ZWNTdGF0ZSogZXhlYywgQnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwKKyAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsCisgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3Vj
Y2Vzc0xhYmVsLAorICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIFJlZlB0cjxK
SVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRj
aC5iYXNlR1BSKTsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKICNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSBzdGF0aWNfY2Fz
dDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKTsKKyAgICAgICAgc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUiksCiAjZW5kaWYKLSAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQ
Uik7CisgICAgICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIp
KTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFRlbXBSZWdpc3RlclNldChzdHViSW5mby5wYXRj
aC51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7CiAgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2Ny
YXRjaCA9IHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZzsKLSAgICBSRUxFQVNFX0FTU0VSVCgh
bmVlZFRvUmVzdG9yZVNjcmF0Y2ggfHwgc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKCFuZWVkVG9SZXN0b3JlU2NyYXRjaCB8fCBraW5kID09IEdldFZhbHVlKTsK
ICAgICAKICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCgmZXhlYy0+dm0oKSwgZXhlYy0+Y29kZUJs
b2NrKCkpOwogICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hH
UFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKLSNlbHNlCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBBc3Nl
bWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSLCByZXN1bHRU
YWdHUFIpOwotI2VuZGlmCisgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNl
bGVjdFNjcmF0Y2hHUFIoCisgICAgICAgICAgICBiYXNlR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCks
IHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICBzdHViSml0LnB1c2hUb1NhdmUoc2Ny
YXRjaEdQUik7CiAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKICAgICB9CkBA
IC0yNzYsNyArMzEzLDcgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkU3R1YigKICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGlzQWNjZXNzb3IgPSBzbG90LmlzQ2FjaGVhYmxl
R2V0dGVyKCkgfHwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpOworICAgIGJvb2wgaXNBY2Nlc3Nv
ciA9IGtpbmQgIT0gR2V0VmFsdWU7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VGb3JBY2Nlc3NHUFI7
CiAgICAgaWYgKGNoYWluKSB7CkBAIC0yODYsOSArMzIzLDkgQEAgc3RhdGljIHZvaWQgZ2VuZXJh
dGVHZXRCeUlkU3R1YigKICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IGJhc2VHUFI7CiAgICAg
CiAgICAgR1BSUmVnIGxvYWRlZFZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICBpZiAoIXNs
b3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZh
bHVlKCkpCi0gICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9IHJlc3VsdEdQUjsKKyAgICBpZiAo
a2luZCAhPSBDYWxsQ3VzdG9tR2V0dGVyICYmIGtpbmQgIT0gQ2FsbEN1c3RvbVNldHRlcikgewor
ICAgICAgICBpZiAoa2luZCA9PSBHZXRWYWx1ZSkKKyAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BS
ID0gdmFsdWVSZWdzLnBheWxvYWRHUFIoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9h
ZGVkVmFsdWVHUFIgPSBzY3JhdGNoR1BSOwogICAgICAgICAKQEAgLTMwMyw4ICszNDAsOCBAQCBz
dGF0aWMgdm9pZCBnZW5lcmF0ZUdldEJ5SWRTdHViKAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
ICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9m
ZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkpLCBsb2FkZWRWYWx1ZUdQUik7CiAjZWxzZQotICAg
ICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCi0gICAgICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRv
QmFzZShvZmZzZXQpICsgVGFnT2Zmc2V0KSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgaWYgKGtp
bmQgPT0gR2V0VmFsdWUpCisgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgVGFn
T2Zmc2V0KSwgdmFsdWVUYWdHUFIpOwogICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsg
UGF5bG9hZE9mZnNldCksIGxvYWRlZFZhbHVlR1BSKTsKICNlbmRpZgogICAgIH0KQEAgLTMxMiw3
ICszNDksNiBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZUdldEJ5SWRTdHViKAogICAgIC8vIFN0dWZm
IGZvciBjdXN0b20gZ2V0dGVycy4KICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRpb25D
YWxsOwogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhhbmRsZXJDYWxsOwotICAgIEZ1bmN0aW9u
UHRyIG9wZXJhdGlvbkZ1bmN0aW9uOwogCiAgICAgLy8gU3R1ZmYgZm9yIEpTIGdldHRlcnMuCiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVj
azsKQEAgLTMyOCw3ICszNjQsNyBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZUdldEJ5SWRTdHViKAog
ICAgICAgICBzdHViSml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihleGVj
LT5sb2NhdGlvbkFzUmF3Qml0cygpKSwKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9y
KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsK
IAotICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKSB7CisgICAgICAgIGlmIChr
aW5kID09IENhbGxHZXR0ZXIgfHwga2luZCA9PSBDYWxsU2V0dGVyKSB7CiAgICAgICAgICAgICAv
LyBDcmVhdGUgYSBKUyBjYWxsIHVzaW5nIGEgSlMgY2FsbCBpbmxpbmUgY2FjaGUuIEFzc3VtZSB0
aGF0OgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIC0gU1AgaXMgYWxpZ25lZCBhbmQg
cmVwcmVzZW50cyB0aGUgZXh0ZW50IG9mIHRoZSBjYWxsaW5nIGNvbXBpbGVyJ3Mgc3RhY2sgdXNh
Z2UuCkBAIC0zNTIsMTEgKzM4OCwyMCBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZUdldEJ5SWRTdHVi
KAogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhICd0aGlzJyBhcmd1bWVu
dCBidXQgbm90aGluZyBlbHNlLgogICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0
ZXJzID0gMTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gR2V0IHRoZSBnZXR0ZXI7IGlm
IHRoZXJlIGFpbid0IG9uZSB0aGVuIHRoZSByZXN1bHQgaXMganNVbmRlZmluZWQoKS4KLSAgICAg
ICAgICAgIHN0dWJKaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZkdldHRlcigpKSwK
LSAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7CisgICAgICAgICAgICAvLyAuLi4gdW5s
ZXNzIHdlJ3JlIGNhbGxpbmcgYSBzZXR0ZXIuCisgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxs
U2V0dGVyKQorICAgICAgICAgICAgICAgIG51bWJlck9mUGFyYW1ldGVycysrOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBHZXQgdGhlIGFjY2Vzc29yOyBpZiB0aGVyZSBhaW4ndCBvbmUg
dGhlbiB0aGUgcmVzdWx0IGlzIGpzVW5kZWZpbmVkKCkuCisgICAgICAgICAgICBpZiAoa2luZCA9
PSBDYWxsU2V0dGVyKQorICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigKKyAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIsIEdldHRl
clNldHRlcjo6b2Zmc2V0T2ZTZXR0ZXIoKSksCisgICAgICAgICAgICAgICAgICAgIGxvYWRlZFZh
bHVlR1BSKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHN0dWJKaXQubG9h
ZFB0cigKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobG9hZGVk
VmFsdWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZHZXR0ZXIoKSksCisgICAgICAgICAgICAg
ICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHJldHVyblVuZGVmaW5lZCA9IHN0dWJKaXQuYnJhbmNoVGVzdFB0cigK
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywgbG9hZGVkVmFsdWVHUFIpOwog
ICAgICAgICAgICAgCkBAIC0zODQsMTEgKzQyOSwxNyBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZUdl
dEJ5SWRTdHViKAogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdHViSml0LnN0b3JlQ2VsbCgK
ICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChK
U1N0YWNrOjpDYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisKICAgICAgICAgICAgIHN0dWJK
aXQuc3RvcmVDZWxsKAogICAgICAgICAgICAgICAgIGJhc2VHUFIsCiAgICAgICAgICAgICAgICAg
Y2FsbGVlRnJhbWUud2l0aE9mZnNldCgKICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMCkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVWYWx1ZSgKKyAgICAgICAgICAgICAgICB2
YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCgKKyAgICAg
ICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHNsb3dDYXNlID0gc3R1YkppdC5icmFuY2hQdHJXaXRoUGF0Y2goCiAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVz
c09mTGlua0Z1bmN0aW9uQ2hlY2ssCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoMCkpOwpAQCAtNDA1LDYgKzQ1Niw4IEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRl
R2V0QnlJZFN0dWIoCiAgICAgICAgICAgICBzdHViSml0LmFkZFB0cigKICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2Fs
bCksCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKyAgICAgICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIpCisgICAgICAgICAgICAgICAg
c3R1YkppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOwogICAgICAgICAgICAgc2xvd0Nhc2UubGlu
aygmc3R1YkppdCk7CkBAIC00MTksMzYgKzQ3MiwzNSBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZUdl
dEJ5SWRTdHViKAogICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoCiAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwp
LAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyKQorICAgICAgICAgICAgICAgIHN0
dWJKaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGRvbmUuYXBwZW5kKHN0dWJKaXQuanVtcCgpKTsKICAgICAgICAgICAgIHJldHVyblVuZGVmaW5l
ZC5saW5rKCZzdHViSml0KTsKICAgICAgICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgICAgICBzdHViSml0Lm1vdmUoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHRHUFIpOwot
I2Vsc2UKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgICAgICBz
dHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsK
LSNlbmRpZgorICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlcikKKyAgICAgICAgICAg
ICAgICBzdHViSml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZG9uZS5saW5rKCZzdHViSml0KTsKICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEVuY29kZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShF
eGVjU3RhdGUqLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIC8vIGdldHRlcjogRW5jb2RlZEpTVmFsdWUgKCpH
ZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgLy8gc2V0dGVyOiB2b2lk
ICgqUHV0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogYmFzZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc09iamVjdCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpOwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9y
QWNjZXNzR1BSLCBiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm9wZXJ0
eU5hbWUuaW1wbCgpKSk7CisgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVy
KQorICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJh
c2VGb3JBY2Nlc3NHUFIsIGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHBy
b3BlcnR5TmFtZS5pbXBsKCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBz
dHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNl
R1BSLCB2YWx1ZVJlZ3MuZ3ByKCkpOwogI2Vsc2UKLSAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKKyAgICAgICAgICAgIGlmIChraW5k
ID09IENhbGxDdXN0b21HZXR0ZXIpCisgICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nl
c3NHUFIsIGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncy50YWdHUFIoKSk7CiAjZW5k
aWYKICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKIAotICAgICAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb24g
PSBGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRlcigpKTsKLQogICAgICAgICAgICAgb3BlcmF0
aW9uQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAg
ICBzdHViSml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7Ci0jZWxz
ZQotICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHMocmVzdWx0R1BSLCByZXN1bHRUYWdH
UFIpOwotI2VuZGlmCisgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVyKQor
ICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CiAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub0V4Y2VwdGlvbiA9IHN0dWJKaXQuZW1pdEV4Y2Vw
dGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHMoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHZtKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwpAQCAtNDYzLDEw
ICs1MTUsMTAgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkU3R1YigKICAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKICAgICAK
ICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNo
LCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJl
bCk7Ci0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlvbkZ1bmN0aW9uKTsKKyAgICBpZiAoa2lu
ZCA9PSBDYWxsQ3VzdG9tR2V0dGVyIHx8IGtpbmQgPT0gQ2FsbEN1c3RvbVNldHRlcikgeworICAg
ICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIGN1c3RvbSk7CiAgICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpOwotICAg
IH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKSB7CisgICAgfSBlbHNlIGlmIChr
aW5kID09IENhbGxHZXR0ZXIgfHwga2luZCA9PSBDYWxsU2V0dGVyKSB7CiAgICAgICAgIGNhbGxM
aW5rSW5mby0+aG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZh
c3RQYXRoQ2FsbCk7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+aG90UGF0aEJlZ2luID0gcGF0Y2hC
dWZmZXIubG9jYXRpb25PZihhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjayk7CiAgICAgICAgIGNh
bGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsKHNsb3dQYXRoQ2FsbCk7CkBAIC00ODIsNyArNTM0LDcgQEAgc3RhdGljIHZvaWQgZ2Vu
ZXJhdGVHZXRCeUlkU3R1YigKICAgICAgICAgKCJHZXQgYWNjZXNzIHN0dWIgZm9yICVzLCByZXR1
cm4gcG9pbnQgJXAiLAogICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSku
ZGF0YSgpLCBzdWNjZXNzTGFiZWwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgIAotICAgIGlm
IChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCisgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlciB8
fCBraW5kID09IENhbGxTZXR0ZXIpCiAgICAgICAgIHN0dWJSb3V0aW5lID0gYWRvcHRSZWYobmV3
IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKGNvZGUsICp2bSwgc3RkOjptb3ZlKGNhbGxMaW5r
SW5mbykpKTsKICAgICBlbHNlCiAgICAgICAgIHN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJv
dXRpbmUoY29kZSwgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCB0cnVlKTsKQEAg
LTYzMSw4ICs2ODMsOSBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBl
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVD
aGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgZ2VuZXJhdGVHZXRC
eUlkU3R1YigKLSAgICAgICAgZXhlYywgc2xvdCwgcHJvcGVydHlOYW1lLCBzdHViSW5mbywgcHJv
dG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwKKyAgICBnZW5lcmF0ZUJ5SWRT
dHViKAorICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1c3RvbUZv
cihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwKKyAgICAgICAgb2Zmc2V0
LCBzdHJ1Y3R1cmUsCiAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvU2xvd0Nhc2UpLAogICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSk7CkBAIC03MTIsOSAr
NzY1LDkgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgIH0K
ICAgICAKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgIGdlbmVy
YXRlR2V0QnlJZFN0dWIoCi0gICAgICAgIGV4ZWMsIHNsb3QsIGlkZW50LCBzdHViSW5mbywgcHJv
dG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwKLSAgICAgICAgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9Eb25lKSwKKyAgICBnZW5lcmF0ZUJ5SWRTdHViKAorICAgICAgICBleGVjLCBraW5kRm9yKHNs
b3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNv
dW50LCBvZmZzZXQsCisgICAgICAgIHN0cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKICAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KHN0dWJJbmZv
KSksIHN0dWJSb3V0aW5lKTsKICAgICAKICAgICBHZXRCeUlkQWNjZXNzOjpBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGU7CkBAIC0xMDQ0LDczICsxMDk3LDYgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5z
aXRpb25TdHViKAogICAgICAgICAgICAgc3RydWN0dXJlKTsKIH0KIAotc3RhdGljIHZvaWQgZW1p
dEN1c3RvbVNldHRlclN0dWIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QsCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluLAotICAgIENvZGVMb2NhdGlvbkxh
YmVsIGZhaWx1cmVMYWJlbCwgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCi17
Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgQVNTRVJUKHN0dWJJbmZvLnBhdGNoLnNw
aWxsTW9kZSA9PSBEb250U3BpbGwpOwotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8
R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0
Y2gudmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUik7Ci0gICAgVGVtcFJlZ2lzdGVyU2V0
IHRlbXBSZWdpc3RlcnMoc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7Ci0KLSAgICBDQ2Fs
bEhlbHBlcnMgc3R1YkppdCh2bSk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSB0ZW1wUmVnaXN0
ZXJzLmdldEZyZWVHUFIoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoR1BSICE9IEludmFs
aWRHUFJSZWcpOwotICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hHUFIgIT0gYmFzZUdQUik7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoc2NyYXRjaEdQUiAhPSB2YWx1ZUdQUik7Ci0gICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGJy
YW5jaFN0cnVjdHVyZShzdHViSml0LAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksCi0gICAgICAgIHN0cnVjdHVyZSkpOwotICAgIAotICAgIGlmIChwcm90
b3R5cGVDaGFpbikgewotICAgICAgICBmb3IgKFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9
IHByb3RvdHlwZUNoYWluLT5oZWFkKCk7ICppdDsgKytpdCkKLSAgICAgICAgICAgIGFkZFN0cnVj
dHVyZVRyYW5zaXRpb25DaGVjaygoKml0KS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVC
bG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKLSAg
ICB9Ci0KLSAgICAvLyB0eXBlZGVmIHZvaWQgKCpQdXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiBiYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB2
YWx1ZSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzbG90LmJhc2UoKSksIGJh
c2VHUFIsIHZhbHVlR1BSKTsKLSNlbHNlCi0gICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2xvdC5iYXNlKCkpLCBiYXNl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB2YWx1
ZUdQUiwgdmFsdWVUYWdHUFIpOwotI2VuZGlmCi0KLSAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0
aGF0IHdoZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRlIGluIHRoZSBmdXR1cmUsIHdlIHJlbWVtYmVy
IHRoZQotICAgIC8vIHBsYWNlIHRoYXQgd2UgbWFkZSBpdCBmcm9tLiBJdCBqdXN0IHNvIGhhcHBl
bnMgdG8gYmUgdGhlIHBsYWNlIHRoYXQgd2UgYXJlIGF0Ci0gICAgLy8gcmlnaHQgbm93IQotICAg
IHN0dWJKaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGV4ZWMtPmxvY2F0
aW9uQXNSYXdCaXRzKCkpLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgc3R1Ykpp
dC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUp
OwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgc2V0dGVyQ2FsbCA9IHN0dWJKaXQuY2FsbCgp
OwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MgPSBzdHViSml0LmVtaXRF
eGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOwotCi0g
ICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0p
LCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBoYW5kbGVyQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotCi0gICAgc3R1YkppdC5qdW1wVG9FeGNl
cHRpb25IYW5kbGVyKCk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0
LCBleGVjLT5jb2RlQmxvY2soKSk7Ci0KLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRl
bHRhQ2FsbFRvRG9uZSkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBmYWls
dXJlTGFiZWwpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2V0dGVyQ2FsbCwgRnVuY3Rpb25QdHIo
c2xvdC5jdXN0b21TZXR0ZXIoKSkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlckNhbGws
IGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpOwotCi0gICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9D
T0RFX0ZPUl9HQ19BV0FSRV9TVFVCKAotICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwgcGF0Y2hC
dWZmZXIsIHRydWUsIG51bGxwdHIsCi0gICAgICAgICgiUHV0QnlJZCBjdXN0b20gc2V0dGVyIHN0
dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVj
LT5jb2RlQmxvY2soKSkuZGF0YSgpLAotICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVj
dXRhYmxlQWRkcmVzcygpKSk7Ci19Ci0KLQogc3RhdGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlEKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgUHV0S2luZCBwdXRLaW5kKQogewogICAgIGlmIChPcHRpb25zOjpmb3JjZUlDRmFpbHVyZSgp
KQpAQCAtMTE4NCw5ICsxMTcwLDExIEBAIHN0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVj
U3RhdGUqIGUKICAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKIAog
ICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSAwOworICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgICAgICBzaXplX3Qg
Y291bnQgPSAwOwogICAgICAgICBpZiAoYmFzZVZhbHVlICE9IHNsb3QuYmFzZSgpKSB7Ci0gICAg
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXRJZ25vcmVkOwotICAgICAgICAgICAgaWYgKG5v
cm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgYmFzZUNlbGwsIHNsb3Qu
YmFzZSgpLCBpZGVudCwgb2Zmc2V0SWdub3JlZCkgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQor
ICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNz
KGV4ZWMsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSwgaWRlbnQsIG9mZnNldCk7CisgICAgICAgICAg
ICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnBy
b3RvdHlwZUNoYWluKGV4ZWMpOwpAQCAtMTE5NCw4ICsxMTgyLDEwIEBAIHN0YXRpYyBib29sIHRy
eUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlz
dCogbGlzdDsKICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0
S2luZCwgc3R1YkluZm8pOwogCi0gICAgICAgIGVtaXRDdXN0b21TZXR0ZXJTdHViKGV4ZWMsIHNs
b3QsIHN0dWJJbmZvLAotICAgICAgICAgICAgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwKKyAg
ICAgICAgZ2VuZXJhdGVCeUlkU3R1YigKKyAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCks
IGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQs
CisgICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwKKyAgICAgICAgICAgIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
RG9uZSksCiAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwKICAgICAgICAgICAgIHN0
dWJSb3V0aW5lKTsKIApAQCAtMTMwOCw5ICsxMjk4LDExIEBAIHN0YXRpYyBib29sIHRyeUJ1aWxk
UHV0QnlJZExpc3QoRXhlY1N0YXQKICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbVByb3Bl
cnR5KCkgJiYgc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewogICAgICAg
ICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgICAgICBTdHJ1Y3R1cmVD
aGFpbiogcHJvdG90eXBlQ2hhaW4gPSAwOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgICAgICBzaXplX3QgY291bnQgPSAwOwogICAgICAg
ICBpZiAoYmFzZVZhbHVlICE9IHNsb3QuYmFzZSgpKSB7Ci0gICAgICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXRJZ25vcmVkOwotICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNo
YWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgYmFzZUNlbGwsIHNsb3QuYmFzZSgpLCBwcm9wZXJ0eU5h
bWUsIG9mZnNldElnbm9yZWQpID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgICAg
IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBiYXNl
Q2VsbCwgc2xvdC5iYXNlKCksIHByb3BlcnR5TmFtZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGlm
IChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgICAgICAgICBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90
eXBlQ2hhaW4oZXhlYyk7CkBAIC0xMzE4LDggKzEzMTAsMTAgQEAgc3RhdGljIGJvb2wgdHJ5QnVp
bGRQdXRCeUlkTGlzdChFeGVjU3RhdAogICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBs
aXN0OwogICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5k
LCBzdHViSW5mbyk7CiAKLSAgICAgICAgZW1pdEN1c3RvbVNldHRlclN0dWIoZXhlYywgc2xvdCwg
c3R1YkluZm8sCi0gICAgICAgICAgICBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLAorICAgICAg
ICBnZW5lcmF0ZUJ5SWRTdHViKAorICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgcHJv
cGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291
bnQsCisgICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwKKyAgICAgICAgICAgIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvRG9uZSksCiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xv
d1BhdGhUYXJnZXQoKSksCiAgICAgICAgICAgICBzdHViUm91dGluZSk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHJldmlzaW9uIDE2Njg5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjkxLDE5ICsyOTEsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZlBheWxvYWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMucGF5bG9hZCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVGFnKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZyk7IH0KIAotcHJpdmF0ZToK
LSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gSlNWYWx1ZShXcml0ZUJhcnJpZXJCYXNlPFQ+KTsKLQot
ICAgIGVudW0gSGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFnIHsgSGFzaFRhYmxlRGVsZXRlZFZhbHVl
IH07Ci0gICAgSlNWYWx1ZShIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcpOwotCi0gICAgaW5saW5l
IGNvbnN0IEpTVmFsdWUgYXNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9Ci0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyU2xvd0Nhc2UoRXhlY1N0YXRlKikgY29uc3Q7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmcqIHRvU3RyaW5nU2xvd0Nhc2UoRXhlY1N0
YXRlKikgY29uc3Q7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgV1RGOjpTdHJpbmcgdG9XVEZTdHJp
bmdTbG93Q2FzZShFeGVjU3RhdGUqKSBjb25zdDsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU09i
amVjdCogdG9PYmplY3RTbG93Q2FzZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgdG9UaGlzU2xvd0Nhc2UoRXhlY1N0YXRl
KiwgRUNNQU1vZGUpIGNvbnN0OwotCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAvKgogICAg
ICAqIE9uIDMyLWJpdCBwbGF0Zm9ybXMgVVNFKEpTVkFMVUUzMl82NCkgc2hvdWxkIGJlIGRlZmlu
ZWQsIGFuZCB3ZSB1c2UgYSBOYU4tZW5jb2RlZApAQCAtNDE2LDYgKzQwMywxOSBAQCBwcml2YXRl
OgogICAgICNkZWZpbmUgVmFsdWVEZWxldGVkIDB4NGxsCiAjZW5kaWYKIAorcHJpdmF0ZToKKyAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gSlNWYWx1ZShXcml0ZUJhcnJpZXJCYXNlPFQ+KTsKKworICAg
IGVudW0gSGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFnIHsgSGFzaFRhYmxlRGVsZXRlZFZhbHVlIH07
CisgICAgSlNWYWx1ZShIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcpOworCisgICAgaW5saW5lIGNv
bnN0IEpTVmFsdWUgYXNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyU2xvd0Nhc2UoRXhlY1N0YXRlKikgY29uc3Q7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmcqIHRvU3RyaW5nU2xvd0Nhc2UoRXhlY1N0YXRl
KikgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmdT
bG93Q2FzZShFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVj
dCogdG9PYmplY3RTbG93Q2FzZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0Owor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgdG9UaGlzU2xvd0Nhc2UoRXhlY1N0YXRlKiwg
RUNNQU1vZGUpIGNvbnN0OworCiAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciB1OwogfTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90
LmgJKHJldmlzaW9uIDE2Njg5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1
dFByb3BlcnR5U2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCgpIGNvbnN0CiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpc0NhY2hlYWJsZVB1dCgpKTsKICAgICAgICAg
ICAgIHJldHVybiBtX29mZnNldDsKICAgICAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228792</attachid>
            <date>2014-04-07 19:01:33 -0700</date>
            <delta_ts>2014-04-07 19:25:18 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>25708</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2OTAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE0LTA0LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U2V0dGVycyBhcmUganVzdCBnZXR0ZXJzIHRoYXQgdGFrZSBhbiBleHRyYSBhcmd1bWVudCBhbmQg
ZG9uJ3QgcmV0dXJuIGEgdmFsdWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzMTMzNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgT3RoZXIgdGhhbiB0aGF0LCB0aGV5J3JlIHRvdGFsbHkgdGhl
IHNhbWUgdGhpbmcuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzbid0IGFzIGR1bWIgYXMgaXQg
c291bmRzLiAgICAgICAgCisKKyAgICAgICAgTW9zdCBvZiB0aGUgd29yayBpbiBjYWxsaW5nIGFu
IGFjY2Vzc29yIGhhcyB0byBkbyB3aXRoIGVtaXR0aW5nIHRoZSBuZWNlc3NhcnkgY2hlY2tzIGZv
cgorICAgICAgICBmaWd1cmluZyBvdXQgd2hldGhlciB3ZSdyZSBjYWxsaW5nIHRoZSBhY2Nlc3Nv
ciB3ZSBleHBlY3RlZCwgZm9sbG93ZWQgYnkgdGhlIGJvaWxlcnBsYXRlCisgICAgICAgIG5lZWRl
ZCBmb3Igc2V0dGluZyB1cCBhIGNhbGwgaW5zaWRlIG9mIGEgc3R1Yi4gSXQgbWFrZXMgc2Vuc2Ug
Zm9yIHRoZSBjb2RlIHRvIGJlIHRvdGFsbHkKKyAgICAgICAgY29tbW9uLgorCisgICAgICAgICog
aml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0
b3JlVmFsdWUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6Om1vdmVUcnVzdGVkVmFs
dWUpOgorICAgICAgICAqIGppdC9DQ2FsbEhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6Q0NhbGxI
ZWxwZXJzOjpzZXR1cFJlc3VsdHMpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAg
ICAgKEpTQzo6a2luZEZvcik6CisgICAgICAgIChKU0M6OmN1c3RvbUZvcik6CisgICAgICAgIChK
U0M6OmdlbmVyYXRlQnlJZFN0dWIpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgor
ICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAgICAgICAgKEpTQzo6dHJ5Q2Fj
aGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6dHJ5QnVpbGRQdXRCeUlkTGlzdCk6CisgICAgICAg
IChKU0M6OmdlbmVyYXRlR2V0QnlJZFN0dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjplbWl0
Q3VzdG9tU2V0dGVyU3R1Yik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVl
Lmg6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmFzVmFsdWUpOgorICAgICAgICAqIHJ1bnRpbWUv
UHV0UHJvcGVydHlTbG90Lmg6CisgICAgICAgIChKU0M6OlB1dFByb3BlcnR5U2xvdDo6Y2FjaGVk
T2Zmc2V0KToKKwogMjAxNC0wNC0wNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUu
Y29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEhhbmcgaW4gZGVidWdnYWJsZSBhcHBsaWNh
dGlvbiBhZnRlciByZWNlaXZpbmcgV0lSUGVybWlzc2lvbkRlbmllZApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxNjY4OTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Nyw2ICs3NywyNiBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBhZGRyZXNzLndpdGhPZmZzZXQoVGFnT2Zmc2V0KSk7CiAj
ZW5kaWYKICAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZVZhbHVlKEpTVmFsdWVSZWdzIHJlZ3Ms
IEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3Rv
cmU2NChyZWdzLmdwcigpLCBhZGRyZXNzKTsKKyNlbHNlCisgICAgICAgIHN0b3JlMzIocmVncy5w
YXlsb2FkR1BSKCksIGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSk7CisgICAgICAg
IHN0b3JlMzIocmVncy50YWdHUFIoKSwgYWRkcmVzcy53aXRoT2Zmc2V0KFRhZ09mZnNldCkpOwor
I2VuZGlmCisgICAgfQorICAgIAorICAgIHZvaWQgbW92ZVRydXN0ZWRWYWx1ZShKU1ZhbHVlIHZh
bHVlLCBKU1ZhbHVlUmVncyByZWdzKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgcmVncy5ncHIoKSk7
CisjZWxzZQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMih2YWx1ZS50YWcoKSksIHJlZ3MudGFn
R1BSKCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMih2YWx1ZS5wYXlsb2FkKCkpLCByZWdz
LnBheWxvYWRHUFIoKSk7CisjZW5kaWYKKyAgICB9CiAKICNpZiBDUFUoWDg2XzY0KSB8fCBDUFUo
WDg2KQogICAgIHN0YXRpYyBzaXplX3QgcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDE2Njg5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE2NjcsNiArMTY2NywxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzd2FwKGRl
c3RBLCBkZXN0Qik7CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0dXBSZXN1bHRzKEpTVmFsdWVS
ZWdzIHJlZ3MpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG1vdmUoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIHJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgc2V0dXBSZXN1
bHRzKHJlZ3MucGF5bG9hZEdQUigpLCByZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorICAgIH0KKyAg
ICAKICAgICB2b2lkIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKQogICAgIHsKICAgICAgICAgLy8g
Z2VuZXJpY1Vud2luZCgpIGxlYXZlcyB0aGUgaGFuZGxlciBDYWxsRnJhbWUqIGluIHZtLT5jYWxs
RnJhbWVGb3JUaHJvdywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
cmV2aXNpb24gMTY2ODk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDI5ICsyMjIsNjYgQEAgc3RhdGljIHZvaWQgbGlua1Jl
c3RvcmVTY3JhdGNoKExpbmtCdWZmZQogICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZl
ciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCi1zdGF0aWMgdm9pZCBn
ZW5lcmF0ZUdldEJ5SWRTdHViKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsCi0gICAgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlTG9j
YXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWws
Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCitlbnVtIEJ5SWRTdHVi
S2luZCB7CisgICAgR2V0VmFsdWUsCisgICAgQ2FsbEdldHRlciwKKyAgICBDYWxsQ3VzdG9tR2V0
dGVyLAorICAgIENhbGxTZXR0ZXIsCisgICAgQ2FsbEN1c3RvbVNldHRlcgorfTsKKworc3RhdGlj
IEJ5SWRTdHViS2luZCBraW5kRm9yKGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBp
ZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCisgICAgICAgIHJldHVybiBHZXRWYWx1ZTsKKyAg
ICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKQorICAgICAgICByZXR1cm4gQ2FsbEN1c3Rv
bUdldHRlcjsKKyAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpOwor
ICAgIHJldHVybiBDYWxsR2V0dGVyOworfQorCitzdGF0aWMgRnVuY3Rpb25QdHIgY3VzdG9tRm9y
KGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVD
dXN0b20oKSkKKyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKCk7CisgICAgcmV0dXJuIEZ1bmN0
aW9uUHRyKHNsb3QuY3VzdG9tR2V0dGVyKCkpOworfQorCitzdGF0aWMgQnlJZFN0dWJLaW5kIGtp
bmRGb3IoY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIFJFTEVBU0VfQVNTRVJU
KCFzbG90LmlzQ2FjaGVhYmxlUHV0KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKHNsb3QuaXNDYWNo
ZWFibGVDdXN0b21Qcm9wZXJ0eSgpKTsKKyAgICByZXR1cm4gQ2FsbEN1c3RvbVNldHRlcjsKK30K
Kworc3RhdGljIEZ1bmN0aW9uUHRyIGN1c3RvbUZvcihjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCit7CisgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tUHJvcGVydHkoKSkKKyAgICAg
ICAgcmV0dXJuIEZ1bmN0aW9uUHRyKCk7CisgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKHNsb3QuY3Vz
dG9tU2V0dGVyKCkpOworfQorCitzdGF0aWMgdm9pZCBnZW5lcmF0ZUJ5SWRTdHViKAorICAgIEV4
ZWNTdGF0ZSogZXhlYywgQnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwKKyAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsCisgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3Vj
Y2Vzc0xhYmVsLAorICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIFJlZlB0cjxK
SVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRj
aC5iYXNlR1BSKTsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKICNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSBzdGF0aWNfY2Fz
dDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKTsKKyAgICAgICAgc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUiksCiAjZW5kaWYKLSAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQ
Uik7CisgICAgICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIp
KTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFRlbXBSZWdpc3RlclNldChzdHViSW5mby5wYXRj
aC51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7CiAgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2Ny
YXRjaCA9IHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZzsKLSAgICBSRUxFQVNFX0FTU0VSVCgh
bmVlZFRvUmVzdG9yZVNjcmF0Y2ggfHwgc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKCFuZWVkVG9SZXN0b3JlU2NyYXRjaCB8fCBraW5kID09IEdldFZhbHVlKTsK
ICAgICAKICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCgmZXhlYy0+dm0oKSwgZXhlYy0+Y29kZUJs
b2NrKCkpOwogICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hH
UFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKLSNlbHNlCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBBc3Nl
bWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSLCByZXN1bHRU
YWdHUFIpOwotI2VuZGlmCisgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNl
bGVjdFNjcmF0Y2hHUFIoCisgICAgICAgICAgICBiYXNlR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCks
IHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICBzdHViSml0LnB1c2hUb1NhdmUoc2Ny
YXRjaEdQUik7CiAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKICAgICB9CkBA
IC0yNzYsNyArMzEzLDcgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkU3R1YigKICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGlzQWNjZXNzb3IgPSBzbG90LmlzQ2FjaGVhYmxl
R2V0dGVyKCkgfHwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpOworICAgIGJvb2wgaXNBY2Nlc3Nv
ciA9IGtpbmQgIT0gR2V0VmFsdWU7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VGb3JBY2Nlc3NHUFI7
CiAgICAgaWYgKGNoYWluKSB7CkBAIC0yODYsOSArMzIzLDkgQEAgc3RhdGljIHZvaWQgZ2VuZXJh
dGVHZXRCeUlkU3R1YigKICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IGJhc2VHUFI7CiAgICAg
CiAgICAgR1BSUmVnIGxvYWRlZFZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICBpZiAoIXNs
b3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZh
bHVlKCkpCi0gICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9IHJlc3VsdEdQUjsKKyAgICBpZiAo
a2luZCAhPSBDYWxsQ3VzdG9tR2V0dGVyICYmIGtpbmQgIT0gQ2FsbEN1c3RvbVNldHRlcikgewor
ICAgICAgICBpZiAoa2luZCA9PSBHZXRWYWx1ZSkKKyAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BS
ID0gdmFsdWVSZWdzLnBheWxvYWRHUFIoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9h
ZGVkVmFsdWVHUFIgPSBzY3JhdGNoR1BSOwogICAgICAgICAKQEAgLTMwMyw4ICszNDAsOCBAQCBz
dGF0aWMgdm9pZCBnZW5lcmF0ZUdldEJ5SWRTdHViKAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
ICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9m
ZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkpLCBsb2FkZWRWYWx1ZUdQUik7CiAjZWxzZQotICAg
ICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCi0gICAgICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRv
QmFzZShvZmZzZXQpICsgVGFnT2Zmc2V0KSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgaWYgKGtp
bmQgPT0gR2V0VmFsdWUpCisgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgVGFn
T2Zmc2V0KSwgdmFsdWVSZWdzLnRhZ0dQUigpKTsKICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zm
c2V0KSArIFBheWxvYWRPZmZzZXQpLCBsb2FkZWRWYWx1ZUdQUik7CiAjZW5kaWYKICAgICB9CkBA
IC0zMTIsNyArMzQ5LDYgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkU3R1YigKICAgICAv
LyBTdHVmZiBmb3IgY3VzdG9tIGdldHRlcnMuCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgb3Bl
cmF0aW9uQ2FsbDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBoYW5kbGVyQ2FsbDsKLSAgICBG
dW5jdGlvblB0ciBvcGVyYXRpb25GdW5jdGlvbjsKIAogICAgIC8vIFN0dWZmIGZvciBKUyBnZXR0
ZXJzLgogICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua0Z1bmN0
aW9uQ2hlY2s7CkBAIC0zMjgsNyArMzY0LDcgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlk
U3R1YigKICAgICAgICAgc3R1YkppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoZXhlYy0+bG9jYXRpb25Bc1Jhd0JpdHMoKSksCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQpKSk7CiAKLSAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkgeworICAgICAg
ICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyIHx8IGtpbmQgPT0gQ2FsbFNldHRlcikgewogICAgICAg
ICAgICAgLy8gQ3JlYXRlIGEgSlMgY2FsbCB1c2luZyBhIEpTIGNhbGwgaW5saW5lIGNhY2hlLiBB
c3N1bWUgdGhhdDoKICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyAtIFNQIGlzIGFsaWdu
ZWQgYW5kIHJlcHJlc2VudHMgdGhlIGV4dGVudCBvZiB0aGUgY2FsbGluZyBjb21waWxlcidzIHN0
YWNrIHVzYWdlLgpAQCAtMzUyLDExICszODgsMjAgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRC
eUlkU3R1YigKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSAndGhpcycg
YXJndW1lbnQgYnV0IG5vdGhpbmcgZWxzZS4KICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9m
UGFyYW1ldGVycyA9IDE7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEdldCB0aGUgZ2V0
dGVyOyBpZiB0aGVyZSBhaW4ndCBvbmUgdGhlbiB0aGUgcmVzdWx0IGlzIGpzVW5kZWZpbmVkKCku
Ci0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZHZXR0
ZXIoKSksCi0gICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgLy8g
Li4uIHVubGVzcyB3ZSdyZSBjYWxsaW5nIGEgc2V0dGVyLgorICAgICAgICAgICAgaWYgKGtpbmQg
PT0gQ2FsbFNldHRlcikKKyAgICAgICAgICAgICAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gR2V0IHRoZSBhY2Nlc3NvcjsgaWYgdGhlcmUgYWlu
J3Qgb25lIHRoZW4gdGhlIHJlc3VsdCBpcyBqc1VuZGVmaW5lZCgpLgorICAgICAgICAgICAgaWYg
KGtpbmQgPT0gQ2FsbFNldHRlcikgeworICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigK
KyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobG9hZGVkVmFsdWVH
UFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0ZXIoKSksCisgICAgICAgICAgICAgICAgICAg
IGxvYWRlZFZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
c3R1YkppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZkdldHRlcigpKSwKKyAg
ICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmV0dXJuVW5kZWZpbmVkID0gc3R1YkppdC5icmFu
Y2hUZXN0UHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBsb2FkZWRW
YWx1ZUdQUik7CiAgICAgICAgICAgICAKQEAgLTM4NCwxMSArNDI5LDE5IEBAIHN0YXRpYyB2b2lk
IGdlbmVyYXRlR2V0QnlJZFN0dWIoCiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0dWJKaXQu
c3RvcmVDZWxsKAogICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSLCBjYWxsZWVGcmFtZS53
aXRoT2Zmc2V0KEpTU3RhY2s6OkNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikpKTsKKwogICAgICAg
ICAgICAgc3R1YkppdC5zdG9yZUNlbGwoCiAgICAgICAgICAgICAgICAgYmFzZUdQUiwKICAgICAg
ICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KAogICAgICAgICAgICAgICAgICAgICB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rlcikp
KTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbFNldHRlcikgewor
ICAgICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVWYWx1ZSgKKyAgICAgICAgICAgICAgICAgICAg
dmFsdWVSZWdzLAorICAgICAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KAor
ICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gc3R1YkppdC5icmFu
Y2hQdHJXaXRoUGF0Y2goCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2ssCiAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCkpOwpAQCAtNDA1LDYgKzQ1OCw4
IEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlR2V0QnlJZFN0dWIoCiAgICAgICAgICAgICBzdHViSml0
LmFkZFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGFs
aWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGlmIChraW5kID09IENhbGxH
ZXR0ZXIpCisgICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOwog
ICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmc3R1YkppdCk7CkBAIC00MTksMzYgKzQ3NCwzNSBA
QCBzdGF0aWMgdm9pZCBnZW5lcmF0ZUdldEJ5SWRTdHViKAogICAgICAgICAgICAgc3R1YkppdC5h
ZGRQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihhbGln
bmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0
dGVyKQorICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGRvbmUuYXBwZW5kKHN0dWJKaXQuanVtcCgpKTsKICAg
ICAgICAgICAgIHJldHVyblVuZGVmaW5lZC5saW5rKCZzdHViSml0KTsKICAgICAgICAgICAgIAot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoCi0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSkpLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3Vs
dFRhZ0dQUik7Ci0gICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKLSNlbmRpZgorICAgICAgICAgICAgaWYgKGtpbmQgPT0g
Q2FsbEdldHRlcikKKyAgICAgICAgICAgICAgICBzdHViSml0Lm1vdmVUcnVzdGVkVmFsdWUoanNV
bmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZG9uZS5s
aW5rKCZzdHViSml0KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEVuY29kZWRK
U1ZhbHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogc2xvdEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIC8vIGdl
dHRlcjogRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOworICAg
ICAgICAgICAgLy8gc2V0dGVyOiB2b2lkICgqUHV0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09i
amVjdCogYmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc09iamVjdCwgRW5jb2RlZEpTVmFsdWUgdmFs
dWUpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7CisgICAgICAgICAgICBpZiAo
a2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVyKQorICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlR1BSLCB2YWx1ZVJlZ3MuZ3ByKCkpOwogI2Vsc2UKLSAg
ICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nl
c3NHUFIsIGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkp
KTsKKyAgICAgICAgICAgIGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIpCisgICAgICAgICAg
ICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQ
UiwgYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZh
bHVlUmVncy50YWdHUFIoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKIAotICAgICAg
ICAgICAgb3BlcmF0aW9uRnVuY3Rpb24gPSBGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRlcigp
KTsKLQogICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3Vs
dHMocmVzdWx0R1BSLCByZXN1bHRUYWdHUFIpOwotI2VuZGlmCisgICAgICAgICAgICBpZiAoa2lu
ZCA9PSBDYWxsQ3VzdG9tR2V0dGVyKQorICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBSZXN1
bHRzKHZhbHVlUmVncyk7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub0V4Y2Vw
dGlvbiA9IHN0dWJKaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0ZWRF
eGNlcHRpb25DaGVjayk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBB
cmd1bWVudHMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZtKSwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpOwpAQCAtNDYzLDEwICs1MTcsMTAgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVH
ZXRCeUlkU3R1YigKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4
ZWMtPmNvZGVCbG9jaygpKTsKICAgICAKICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZm
ZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1
Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7Ci0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSkgewotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlv
bkZ1bmN0aW9uKTsKKyAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVyIHx8IGtpbmQgPT0g
Q2FsbEN1c3RvbVNldHRlcikgeworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNh
bGwsIGN1c3RvbSk7CiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXIpOwotICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRl
cigpKSB7CisgICAgfSBlbHNlIGlmIChraW5kID09IENhbGxHZXR0ZXIgfHwga2luZCA9PSBDYWxs
U2V0dGVyKSB7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+aG90UGF0aE90aGVyID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RQYXRoQ2FsbCk7CiAgICAgICAgIGNhbGxMaW5rSW5m
by0+aG90UGF0aEJlZ2luID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihhZGRyZXNzT2ZMaW5rRnVu
Y3Rpb25DaGVjayk7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dQYXRoQ2FsbCk7CkBAIC00ODIsNyAr
NTM2LDcgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkU3R1YigKICAgICAgICAgKCJHZXQg
YWNjZXNzIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAogICAgICAgICAgICAgdG9DU3Ry
aW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdWNjZXNzTGFiZWwuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpOwogICAgIAotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCisgICAg
aWYgKGtpbmQgPT0gQ2FsbEdldHRlciB8fCBraW5kID09IENhbGxTZXR0ZXIpCiAgICAgICAgIHN0
dWJSb3V0aW5lID0gYWRvcHRSZWYobmV3IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKGNvZGUs
ICp2bSwgc3RkOjptb3ZlKGNhbGxMaW5rSW5mbykpKTsKICAgICBlbHNlCiAgICAgICAgIHN0dWJS
b3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoY29kZSwgKnZtLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCB0cnVlKTsKQEAgLTYzMSw4ICs2ODUsOSBAQCBzdGF0aWMgYm9vbCB0cnlD
YWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFN0
cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4o
ZXhlYyk7Ci0gICAgZ2VuZXJhdGVHZXRCeUlkU3R1YigKLSAgICAgICAgZXhlYywgc2xvdCwgcHJv
cGVydHlOYW1lLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVj
dHVyZSwKKyAgICBnZW5lcmF0ZUJ5SWRTdHViKAorICAgICAgICBleGVjLCBraW5kRm9yKHNsb3Qp
LCBwcm9wZXJ0eU5hbWUsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWlu
LCBjb3VudCwKKyAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsCiAgICAgICAgIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
RG9uZSksCiAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLAogICAgICAgICBzdHViSW5mby5z
dHViUm91dGluZSk7CkBAIC03MTIsOSArNzY3LDkgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRC
eUlETGlzdChFeGVjU3RhdAogICAgIH0KICAgICAKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+
IHN0dWJSb3V0aW5lOwotICAgIGdlbmVyYXRlR2V0QnlJZFN0dWIoCi0gICAgICAgIGV4ZWMsIHNs
b3QsIGlkZW50LCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVj
dHVyZSwKLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKKyAgICBnZW5lcmF0ZUJ5SWRTdHViKAor
ICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHVi
SW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsCisgICAgICAgIHN0cnVjdHVyZSwg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVu
dFNsb3dQYXRoVGFyZ2V0KHN0dWJJbmZvKSksIHN0dWJSb3V0aW5lKTsKICAgICAKICAgICBHZXRC
eUlkQWNjZXNzOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CkBAIC0xMDQ0LDczICsxMDk5LDYgQEAg
c3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICAgICAgc3RydWN0dXJl
KTsKIH0KIAotc3RhdGljIHZvaWQgZW1pdEN1c3RvbVNldHRlclN0dWIoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNo
YWluLAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCwgUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiYgc3R1YlJvdXRpbmUpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAg
QVNTRVJUKHN0dWJJbmZvLnBhdGNoLnNwaWxsTW9kZSA9PSBEb250U3BpbGwpOwotICAgIEdQUlJl
ZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsK
LSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRpY19j
YXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgR1BS
UmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQ
Uik7Ci0gICAgVGVtcFJlZ2lzdGVyU2V0IHRlbXBSZWdpc3RlcnMoc3R1YkluZm8ucGF0Y2gudXNl
ZFJlZ2lzdGVycyk7Ci0KLSAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7Ci0gICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSB0ZW1wUmVnaXN0ZXJzLmdldEZyZWVHUFIoKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChzY3JhdGNoR1BSICE9IEludmFsaWRHUFJSZWcpOwotICAgIFJFTEVBU0VfQVNTRVJUKHNj
cmF0Y2hHUFIgIT0gYmFzZUdQUik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc2NyYXRjaEdQUiAhPSB2
YWx1ZUdQUik7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLSAg
ICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGJyYW5jaFN0cnVjdHVyZShzdHViSml0LAotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgIHN0cnVjdHVy
ZSkpOwotICAgIAotICAgIGlmIChwcm90b3R5cGVDaGFpbikgewotICAgICAgICBmb3IgKFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IHByb3RvdHlwZUNoYWluLT5oZWFkKCk7ICppdDsgKytp
dCkKLSAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygoKml0KS0+c3RvcmVk
UHJvdG90eXBlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVy
ZUNhc2VzLCBzY3JhdGNoR1BSKTsKLSAgICB9Ci0KLSAgICAvLyB0eXBlZGVmIHZvaWQgKCpQdXRW
YWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBiYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBz
dHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihzbG90LmJhc2UoKSksIGJhc2VHUFIsIHZhbHVlR1BSKTsKLSNlbHNlCi0gICAgc3R1
YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoc2xvdC5iYXNlKCkpLCBiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOwotI2VuZGlmCi0KLSAg
ICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRlIGlu
IHRoZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRoZQotICAgIC8vIHBsYWNlIHRoYXQgd2UgbWFkZSBp
dCBmcm9tLiBJdCBqdXN0IHNvIGhhcHBlbnMgdG8gYmUgdGhlIHBsYWNlIHRoYXQgd2UgYXJlIGF0
Ci0gICAgLy8gcmlnaHQgbm93IQotICAgIHN0dWJKaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKGV4ZWMtPmxvY2F0aW9uQXNSYXdCaXRzKCkpLAotICAgICAgICBDQ2FsbEhl
bHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpKSk7Ci0gICAgc3R1YkppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgc2V0
dGVyQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IHN1Y2Nlc3MgPSBzdHViSml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVy
dGVkRXhjZXB0aW9uQ2hlY2spOwotCi0gICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0K
LSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBoYW5kbGVyQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwot
Ci0gICAgc3R1YkppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7Ci0gICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7Ci0KLSAgICBwYXRj
aEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgIHBhdGNoQnVmZmVy
LmxpbmsoZmFpbHVyZUNhc2VzLCBmYWlsdXJlTGFiZWwpOwotICAgIHBhdGNoQnVmZmVyLmxpbmso
c2V0dGVyQ2FsbCwgRnVuY3Rpb25QdHIoc2xvdC5jdXN0b21TZXR0ZXIoKSkpOwotICAgIHBhdGNo
QnVmZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpOwotCi0gICAg
c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9HQ19BV0FSRV9TVFVCKAotICAgICAgICBl
eGVjLT5jb2RlQmxvY2soKSwgcGF0Y2hCdWZmZXIsIHRydWUsIG51bGxwdHIsCi0gICAgICAgICgi
UHV0QnlJZCBjdXN0b20gc2V0dGVyIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAg
ICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLAotICAgICAgICAg
ICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci19Ci0KLQogc3RhdGlj
IGJvb2wgdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUs
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQogewogICAgIGlmIChP
cHRpb25zOjpmb3JjZUlDRmFpbHVyZSgpKQpAQCAtMTE4NCw5ICsxMTcyLDExIEBAIHN0YXRpYyBi
b29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBzdHViUm91dGluZTsKIAogICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBl
Q2hhaW4gPSAwOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9m
ZnNldCgpOworICAgICAgICBzaXplX3QgY291bnQgPSAwOwogICAgICAgICBpZiAoYmFzZVZhbHVl
ICE9IHNsb3QuYmFzZSgpKSB7Ci0gICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXRJZ25v
cmVkOwotICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nl
c3MoZXhlYywgYmFzZUNlbGwsIHNsb3QuYmFzZSgpLCBpZGVudCwgb2Zmc2V0SWdub3JlZCkgPT0g
SW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90
b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSwgaWRl
bnQsIG9mZnNldCk7CisgICAgICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNo
YWluKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgcHJvdG90
eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwpAQCAtMTE5NCw4ICsx
MTg0LDEwIEBAIHN0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGUKICAgICAg
ICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKICAgICAgICAgbGlzdCA9IFBvbHltb3Jw
aGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwogCi0gICAgICAgIGVtaXRD
dXN0b21TZXR0ZXJTdHViKGV4ZWMsIHNsb3QsIHN0dWJJbmZvLAotICAgICAgICAgICAgc3RydWN0
dXJlLCBwcm90b3R5cGVDaGFpbiwKKyAgICAgICAgZ2VuZXJhdGVCeUlkU3R1YigKKyAgICAgICAg
ICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZv
LCBwcm90b3R5cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwK
KyAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgICAgICBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Ns
b3dDYXNlKSwKICAgICAgICAgICAgIHN0dWJSb3V0aW5lKTsKIApAQCAtMTMwOCw5ICsxMzAwLDEx
IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXQKICAgICBpZiAoc2xv
dC5pc0NhY2hlYWJsZUN1c3RvbVByb3BlcnR5KCkgJiYgc3R1YkluZm8ucGF0Y2guc3BpbGxNb2Rl
ID09IERvbnRTcGlsbCkgewogICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0
aW5lOwogICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSAwOworICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgICAgICBz
aXplX3QgY291bnQgPSAwOwogICAgICAgICBpZiAoYmFzZVZhbHVlICE9IHNsb3QuYmFzZSgpKSB7
Ci0gICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXRJZ25vcmVkOwotICAgICAgICAgICAg
aWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgYmFzZUNlbGws
IHNsb3QuYmFzZSgpLCBwcm9wZXJ0eU5hbWUsIG9mZnNldElnbm9yZWQpID09IEludmFsaWRQcm90
b3R5cGVDaGFpbikKKyAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5G
b3JDaGFpbkFjY2VzcyhleGVjLCBiYXNlQ2VsbCwgc2xvdC5iYXNlKCksIHByb3BlcnR5TmFtZSwg
b2Zmc2V0KTsKKyAgICAgICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4p
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBwcm90b3R5cGVD
aGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CkBAIC0xMzE4LDggKzEzMTIs
MTAgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdAogICAgICAgICBQ
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7CiAKLSAgICAgICAgZW1pdEN1c3Rv
bVNldHRlclN0dWIoZXhlYywgc2xvdCwgc3R1YkluZm8sCi0gICAgICAgICAgICBzdHJ1Y3R1cmUs
IHByb3RvdHlwZUNoYWluLAorICAgICAgICBnZW5lcmF0ZUJ5SWRTdHViKAorICAgICAgICAgICAg
ZXhlYywga2luZEZvcihzbG90KSwgcHJvcGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJ
bmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVy
ZSwKKyAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksCiAgICAgICAgICAgICBzdHVi
Um91dGluZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1Zh
bHVlLmgJKHJldmlzaW9uIDE2Njg5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjkxLDE5ICsyOTEsNiBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlBheWxvYWQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCk7IH0KICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mVGFnKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZyk7IH0KIAotcHJpdmF0ZToKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gSlNWYWx1ZShX
cml0ZUJhcnJpZXJCYXNlPFQ+KTsKLQotICAgIGVudW0gSGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFn
IHsgSGFzaFRhYmxlRGVsZXRlZFZhbHVlIH07Ci0gICAgSlNWYWx1ZShIYXNoVGFibGVEZWxldGVk
VmFsdWVUYWcpOwotCi0gICAgaW5saW5lIGNvbnN0IEpTVmFsdWUgYXNWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuICp0aGlzOyB9Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyU2xv
d0Nhc2UoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmcq
IHRvU3RyaW5nU2xvd0Nhc2UoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmdTbG93Q2FzZShFeGVjU3RhdGUqKSBjb25zdDsKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdG9PYmplY3RTbG93Q2FzZShFeGVjU3RhdGUq
LCBKU0dsb2JhbE9iamVjdCopIGNvbnN0OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUg
dG9UaGlzU2xvd0Nhc2UoRXhlY1N0YXRlKiwgRUNNQU1vZGUpIGNvbnN0OwotCiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKICAgICAvKgogICAgICAqIE9uIDMyLWJpdCBwbGF0Zm9ybXMgVVNFKEpTVkFM
VUUzMl82NCkgc2hvdWxkIGJlIGRlZmluZWQsIGFuZCB3ZSB1c2UgYSBOYU4tZW5jb2RlZApAQCAt
NDE2LDYgKzQwMywxOSBAQCBwcml2YXRlOgogICAgICNkZWZpbmUgVmFsdWVEZWxldGVkIDB4NGxs
CiAjZW5kaWYKIAorcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gSlNWYWx1ZShXcml0
ZUJhcnJpZXJCYXNlPFQ+KTsKKworICAgIGVudW0gSGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFnIHsg
SGFzaFRhYmxlRGVsZXRlZFZhbHVlIH07CisgICAgSlNWYWx1ZShIYXNoVGFibGVEZWxldGVkVmFs
dWVUYWcpOworCisgICAgaW5saW5lIGNvbnN0IEpTVmFsdWUgYXNWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuICp0aGlzOyB9CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyU2xvd0Nh
c2UoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmcqIHRv
U3RyaW5nU2xvd0Nhc2UoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
V1RGOjpTdHJpbmcgdG9XVEZTdHJpbmdTbG93Q2FzZShFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdG9PYmplY3RTbG93Q2FzZShFeGVjU3RhdGUqLCBK
U0dsb2JhbE9iamVjdCopIGNvbnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgdG9U
aGlzU2xvd0Nhc2UoRXhlY1N0YXRlKiwgRUNNQU1vZGUpIGNvbnN0OworCiAgICAgRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciB1OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHV0UHJvcGVydHlTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgJKHJldmlzaW9uIDE2Njg5NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC05Myw3ICs5Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFByb3BlcnR5T2Zmc2V0
IGNhY2hlZE9mZnNldCgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpc0Nh
Y2hlYWJsZVB1dCgpKTsKICAgICAgICAgICAgIHJldHVybiBtX29mZnNldDsKICAgICAgICAgfQog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228796</attachid>
            <date>2014-04-07 19:25:18 -0700</date>
            <delta_ts>2014-04-07 20:46:15 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>26098</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2OTAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE0LTA0LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U2V0dGVycyBhcmUganVzdCBnZXR0ZXJzIHRoYXQgdGFrZSBhbiBleHRyYSBhcmd1bWVudCBhbmQg
ZG9uJ3QgcmV0dXJuIGEgdmFsdWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzMTMzNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgT3RoZXIgdGhhbiB0aGF0LCB0aGV5J3JlIHRvdGFsbHkgdGhl
IHNhbWUgdGhpbmcuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzbid0IGFzIGR1bWIgYXMgaXQg
c291bmRzLiAgICAgICAgCisKKyAgICAgICAgTW9zdCBvZiB0aGUgd29yayBpbiBjYWxsaW5nIGFu
IGFjY2Vzc29yIGhhcyB0byBkbyB3aXRoIGVtaXR0aW5nIHRoZSBuZWNlc3NhcnkgY2hlY2tzIGZv
cgorICAgICAgICBmaWd1cmluZyBvdXQgd2hldGhlciB3ZSdyZSBjYWxsaW5nIHRoZSBhY2Nlc3Nv
ciB3ZSBleHBlY3RlZCwgZm9sbG93ZWQgYnkgdGhlIGJvaWxlcnBsYXRlCisgICAgICAgIG5lZWRl
ZCBmb3Igc2V0dGluZyB1cCBhIGNhbGwgaW5zaWRlIG9mIGEgc3R1Yi4gSXQgbWFrZXMgc2Vuc2Ug
Zm9yIHRoZSBjb2RlIHRvIGJlIHRvdGFsbHkKKyAgICAgICAgY29tbW9uLgorCisgICAgICAgICog
aml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0
b3JlVmFsdWUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6Om1vdmVUcnVzdGVkVmFs
dWUpOgorICAgICAgICAqIGppdC9DQ2FsbEhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6Q0NhbGxI
ZWxwZXJzOjpzZXR1cFJlc3VsdHMpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAg
ICAgKEpTQzo6a2luZEZvcik6CisgICAgICAgIChKU0M6OmN1c3RvbUZvcik6CisgICAgICAgIChK
U0M6OmdlbmVyYXRlQnlJZFN0dWIpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgor
ICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAgICAgICAgKEpTQzo6dHJ5Q2Fj
aGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6dHJ5QnVpbGRQdXRCeUlkTGlzdCk6CisgICAgICAg
IChKU0M6OmdlbmVyYXRlR2V0QnlJZFN0dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjplbWl0
Q3VzdG9tU2V0dGVyU3R1Yik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVl
Lmg6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmFzVmFsdWUpOgorICAgICAgICAqIHJ1bnRpbWUv
UHV0UHJvcGVydHlTbG90Lmg6CisgICAgICAgIChKU0M6OlB1dFByb3BlcnR5U2xvdDo6Y2FjaGVk
T2Zmc2V0KToKKwogMjAxNC0wNC0wNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUu
Y29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEhhbmcgaW4gZGVidWdnYWJsZSBhcHBsaWNh
dGlvbiBhZnRlciByZWNlaXZpbmcgV0lSUGVybWlzc2lvbkRlbmllZApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxNjY4OTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Nyw2ICs3NywyNiBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBhZGRyZXNzLndpdGhPZmZzZXQoVGFnT2Zmc2V0KSk7CiAj
ZW5kaWYKICAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZVZhbHVlKEpTVmFsdWVSZWdzIHJlZ3Ms
IEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3Rv
cmU2NChyZWdzLmdwcigpLCBhZGRyZXNzKTsKKyNlbHNlCisgICAgICAgIHN0b3JlMzIocmVncy5w
YXlsb2FkR1BSKCksIGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSk7CisgICAgICAg
IHN0b3JlMzIocmVncy50YWdHUFIoKSwgYWRkcmVzcy53aXRoT2Zmc2V0KFRhZ09mZnNldCkpOwor
I2VuZGlmCisgICAgfQorICAgIAorICAgIHZvaWQgbW92ZVRydXN0ZWRWYWx1ZShKU1ZhbHVlIHZh
bHVlLCBKU1ZhbHVlUmVncyByZWdzKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgcmVncy5ncHIoKSk7
CisjZWxzZQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMih2YWx1ZS50YWcoKSksIHJlZ3MudGFn
R1BSKCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMih2YWx1ZS5wYXlsb2FkKCkpLCByZWdz
LnBheWxvYWRHUFIoKSk7CisjZW5kaWYKKyAgICB9CiAKICNpZiBDUFUoWDg2XzY0KSB8fCBDUFUo
WDg2KQogICAgIHN0YXRpYyBzaXplX3QgcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDE2Njg5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE2NjcsNiArMTY2NywxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzd2FwKGRl
c3RBLCBkZXN0Qik7CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0dXBSZXN1bHRzKEpTVmFsdWVS
ZWdzIHJlZ3MpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG1vdmUoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIHJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgc2V0dXBSZXN1
bHRzKHJlZ3MucGF5bG9hZEdQUigpLCByZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorICAgIH0KKyAg
ICAKICAgICB2b2lkIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKQogICAgIHsKICAgICAgICAgLy8g
Z2VuZXJpY1Vud2luZCgpIGxlYXZlcyB0aGUgaGFuZGxlciBDYWxsRnJhbWUqIGluIHZtLT5jYWxs
RnJhbWVGb3JUaHJvdywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
cmV2aXNpb24gMTY2ODk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDI5ICsyMjIsNjYgQEAgc3RhdGljIHZvaWQgbGlua1Jl
c3RvcmVTY3JhdGNoKExpbmtCdWZmZQogICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZl
ciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCi1zdGF0aWMgdm9pZCBn
ZW5lcmF0ZUdldEJ5SWRTdHViKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsCi0gICAgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlTG9j
YXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWws
Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCitlbnVtIEJ5SWRTdHVi
S2luZCB7CisgICAgR2V0VmFsdWUsCisgICAgQ2FsbEdldHRlciwKKyAgICBDYWxsQ3VzdG9tR2V0
dGVyLAorICAgIENhbGxTZXR0ZXIsCisgICAgQ2FsbEN1c3RvbVNldHRlcgorfTsKKworc3RhdGlj
IEJ5SWRTdHViS2luZCBraW5kRm9yKGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBp
ZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCisgICAgICAgIHJldHVybiBHZXRWYWx1ZTsKKyAg
ICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKQorICAgICAgICByZXR1cm4gQ2FsbEN1c3Rv
bUdldHRlcjsKKyAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpOwor
ICAgIHJldHVybiBDYWxsR2V0dGVyOworfQorCitzdGF0aWMgRnVuY3Rpb25QdHIgY3VzdG9tRm9y
KGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVD
dXN0b20oKSkKKyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKCk7CisgICAgcmV0dXJuIEZ1bmN0
aW9uUHRyKHNsb3QuY3VzdG9tR2V0dGVyKCkpOworfQorCitzdGF0aWMgQnlJZFN0dWJLaW5kIGtp
bmRGb3IoY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIFJFTEVBU0VfQVNTRVJU
KCFzbG90LmlzQ2FjaGVhYmxlUHV0KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKHNsb3QuaXNDYWNo
ZWFibGVDdXN0b21Qcm9wZXJ0eSgpKTsKKyAgICByZXR1cm4gQ2FsbEN1c3RvbVNldHRlcjsKK30K
Kworc3RhdGljIEZ1bmN0aW9uUHRyIGN1c3RvbUZvcihjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCit7CisgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tUHJvcGVydHkoKSkKKyAgICAg
ICAgcmV0dXJuIEZ1bmN0aW9uUHRyKCk7CisgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKHNsb3QuY3Vz
dG9tU2V0dGVyKCkpOworfQorCitzdGF0aWMgdm9pZCBnZW5lcmF0ZUJ5SWRTdHViKAorICAgIEV4
ZWNTdGF0ZSogZXhlYywgQnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwKKyAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsCisgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3Vj
Y2Vzc0xhYmVsLAorICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIFJlZlB0cjxK
SVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRj
aC5iYXNlR1BSKTsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKICNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSBzdGF0aWNfY2Fz
dDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKTsKKyAgICAgICAgc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUiksCiAjZW5kaWYKLSAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQ
Uik7CisgICAgICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIp
KTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFRlbXBSZWdpc3RlclNldChzdHViSW5mby5wYXRj
aC51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7CiAgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2Ny
YXRjaCA9IHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZzsKLSAgICBSRUxFQVNFX0FTU0VSVCgh
bmVlZFRvUmVzdG9yZVNjcmF0Y2ggfHwgc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKCFuZWVkVG9SZXN0b3JlU2NyYXRjaCB8fCBraW5kID09IEdldFZhbHVlKTsK
ICAgICAKICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCgmZXhlYy0+dm0oKSwgZXhlYy0+Y29kZUJs
b2NrKCkpOwogICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hH
UFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKLSNlbHNlCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBBc3Nl
bWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSLCByZXN1bHRU
YWdHUFIpOwotI2VuZGlmCisgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNl
bGVjdFNjcmF0Y2hHUFIoCisgICAgICAgICAgICBiYXNlR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCks
IHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICBzdHViSml0LnB1c2hUb1NhdmUoc2Ny
YXRjaEdQUik7CiAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKICAgICB9CkBA
IC0yNzYsOCArMzEzLDYgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkU3R1YigKICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGlzQWNjZXNzb3IgPSBzbG90LmlzQ2FjaGVhYmxl
R2V0dGVyKCkgfHwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpOwotICAgIAogICAgIEdQUlJlZyBi
YXNlRm9yQWNjZXNzR1BSOwogICAgIGlmIChjaGFpbikgewogICAgICAgICBzdHViSml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QpLCBzY3JhdGNoR1BSKTsK
QEAgLTI4Niw5ICszMjEsOSBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZUdldEJ5SWRTdHViKAogICAg
ICAgICBiYXNlRm9yQWNjZXNzR1BSID0gYmFzZUdQUjsKICAgICAKICAgICBHUFJSZWcgbG9hZGVk
VmFsdWVHUFIgPSBJbnZhbGlkR1BSUmVnOwotICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZUN1c3Rv
bSgpKSB7Ci0gICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAgICAg
IGxvYWRlZFZhbHVlR1BSID0gcmVzdWx0R1BSOworICAgIGlmIChraW5kICE9IENhbGxDdXN0b21H
ZXR0ZXIgJiYga2luZCAhPSBDYWxsQ3VzdG9tU2V0dGVyKSB7CisgICAgICAgIGlmIChraW5kID09
IEdldFZhbHVlKQorICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIgPSB2YWx1ZVJlZ3MucGF5bG9h
ZEdQUigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9IHNjcmF0
Y2hHUFI7CiAgICAgICAgIApAQCAtMzAzLDggKzMzOCw4IEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRl
R2V0QnlJZFN0dWIoCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgc3R1YkppdC5sb2FkNjQo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uo
b2Zmc2V0KSksIGxvYWRlZFZhbHVlR1BSKTsKICNlbHNlCi0gICAgICAgIGlmIChzbG90LmlzQ2Fj
aGVhYmxlVmFsdWUoKSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBUYWdP
ZmZzZXQpLCByZXN1bHRUYWdHUFIpOworICAgICAgICBpZiAoa2luZCA9PSBHZXRWYWx1ZSkKKyAg
ICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBUYWdPZmZzZXQpLCB2YWx1ZVJlZ3Mu
dGFnR1BSKCkpOwogICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgUGF5bG9hZE9mZnNl
dCksIGxvYWRlZFZhbHVlR1BSKTsKICNlbmRpZgogICAgIH0KQEAgLTMxMiw3ICszNDcsNiBAQCBz
dGF0aWMgdm9pZCBnZW5lcmF0ZUdldEJ5SWRTdHViKAogICAgIC8vIFN0dWZmIGZvciBjdXN0b20g
Z2V0dGVycy4KICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRpb25DYWxsOwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGhhbmRsZXJDYWxsOwotICAgIEZ1bmN0aW9uUHRyIG9wZXJhdGlv
bkZ1bmN0aW9uOwogCiAgICAgLy8gU3R1ZmYgZm9yIEpTIGdldHRlcnMuCiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkRhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjazsKQEAgLTMyMSwx
NCArMzU1LDE0IEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlR2V0QnlJZFN0dWIoCiAgICAgc3RkOjp1
bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gY2FsbExpbmtJbmZvOwogCiAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKLSAgICBpZiAoaXNBY2Nlc3NvcikgeworICAgIGlmIChr
aW5kICE9IEdldFZhbHVlKSB7CiAgICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2hl
bmV2ZXIgdGhpcyBjYWxsIGlzIG1hZGUgaW4gdGhlIGZ1dHVyZSwgd2UgcmVtZW1iZXIgdGhlCiAg
ICAgICAgIC8vIHBsYWNlIHRoYXQgd2UgbWFkZSBpdCBmcm9tLiBJdCBqdXN0IHNvIGhhcHBlbnMg
dG8gYmUgdGhlIHBsYWNlIHRoYXQgd2UgYXJlIGF0CiAgICAgICAgIC8vIHJpZ2h0IG5vdyEKICAg
ICAgICAgc3R1YkppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZXhlYy0+
bG9jYXRpb25Bc1Jhd0JpdHMoKSksCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0Zvcihz
dGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CiAK
LSAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkgeworICAgICAgICBpZiAoa2lu
ZCA9PSBDYWxsR2V0dGVyIHx8IGtpbmQgPT0gQ2FsbFNldHRlcikgewogICAgICAgICAgICAgLy8g
Q3JlYXRlIGEgSlMgY2FsbCB1c2luZyBhIEpTIGNhbGwgaW5saW5lIGNhY2hlLiBBc3N1bWUgdGhh
dDoKICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyAtIFNQIGlzIGFsaWduZWQgYW5kIHJl
cHJlc2VudHMgdGhlIGV4dGVudCBvZiB0aGUgY2FsbGluZyBjb21waWxlcidzIHN0YWNrIHVzYWdl
LgpAQCAtMzUyLDExICszODYsMjAgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkU3R1YigK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSAndGhpcycgYXJndW1lbnQg
YnV0IG5vdGhpbmcgZWxzZS4KICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVy
cyA9IDE7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEdldCB0aGUgZ2V0dGVyOyBpZiB0
aGVyZSBhaW4ndCBvbmUgdGhlbiB0aGUgcmVzdWx0IGlzIGpzVW5kZWZpbmVkKCkuCi0gICAgICAg
ICAgICBzdHViSml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MobG9hZGVkVmFsdWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZHZXR0ZXIoKSksCi0g
ICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgLy8gLi4uIHVubGVz
cyB3ZSdyZSBjYWxsaW5nIGEgc2V0dGVyLgorICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbFNl
dHRlcikKKyAgICAgICAgICAgICAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gR2V0IHRoZSBhY2Nlc3NvcjsgaWYgdGhlcmUgYWluJ3Qgb25lIHRo
ZW4gdGhlIHJlc3VsdCBpcyBqc1VuZGVmaW5lZCgpLgorICAgICAgICAgICAgaWYgKGtpbmQgPT0g
Q2FsbFNldHRlcikgeworICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigKKyAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIsIEdldHRl
clNldHRlcjo6b2Zmc2V0T2ZTZXR0ZXIoKSksCisgICAgICAgICAgICAgICAgICAgIGxvYWRlZFZh
bHVlR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3R1YkppdC5s
b2FkUHRyKAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsb2Fk
ZWRWYWx1ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZkdldHRlcigpKSwKKyAgICAgICAgICAg
ICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgcmV0dXJuVW5kZWZpbmVkID0gc3R1YkppdC5icmFuY2hUZXN0UHRy
KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBsb2FkZWRWYWx1ZUdQUik7
CiAgICAgICAgICAgICAKQEAgLTM4NCwxMSArNDI3LDE5IEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRl
R2V0QnlJZFN0dWIoCiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVDZWxs
KAogICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0
KEpTU3RhY2s6OkNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikpKTsKKwogICAgICAgICAgICAgc3R1
YkppdC5zdG9yZUNlbGwoCiAgICAgICAgICAgICAgICAgYmFzZUdQUiwKICAgICAgICAgICAgICAg
ICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KAogICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudCgwKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbFNldHRlcikgeworICAgICAgICAg
ICAgICAgIHN0dWJKaXQuc3RvcmVWYWx1ZSgKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdz
LAorICAgICAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KAorICAgICAgICAg
ICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gc3R1YkppdC5icmFuY2hQdHJXaXRo
UGF0Y2goCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBsb2FkZWRW
YWx1ZUdQUiwgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2ssCiAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCkpOwpAQCAtNDA1LDYgKzQ1Niw4IEBAIHN0YXRp
YyB2b2lkIGdlbmVyYXRlR2V0QnlJZFN0dWIoCiAgICAgICAgICAgICBzdHViSml0LmFkZFB0cigK
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1i
ZXJPZkJ5dGVzRm9yQ2FsbCksCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIpCisg
ICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOwogICAgICAgICAg
ICAgc2xvd0Nhc2UubGluaygmc3R1YkppdCk7CkBAIC00MTksMzYgKzQ3MiwzNSBAQCBzdGF0aWMg
dm9pZCBnZW5lcmF0ZUdldEJ5SWRTdHViKAogICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoCiAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVy
T2ZCeXRlc0ZvckNhbGwpLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyKQorICAg
ICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGRvbmUuYXBwZW5kKHN0dWJKaXQuanVtcCgpKTsKICAgICAgICAgICAg
IHJldHVyblVuZGVmaW5lZC5saW5rKCZzdHViSml0KTsKICAgICAgICAgICAgIAotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoCi0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkp
LCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFRhZ0dQUik7
Ci0gICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigw
KSwgcmVzdWx0R1BSKTsKLSNlbmRpZgorICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRl
cikKKyAgICAgICAgICAgICAgICBzdHViSml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQo
KSwgdmFsdWVSZWdzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZG9uZS5saW5rKCZzdHVi
Sml0KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEVuY29kZWRKU1ZhbHVlICgq
R2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIC8vIGdldHRlcjogRW5j
b2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBzbG90QmFz
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAg
Ly8gc2V0dGVyOiB2b2lkICgqUHV0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogYmFz
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc09iamVjdCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpOwogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7CisgICAgICAgICAgICBpZiAoa2luZCA9PSBD
YWxsQ3VzdG9tR2V0dGVyKQorICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9y
QWNjZXNzR1BSLCBiYXNlR1BSLCB2YWx1ZVJlZ3MuZ3ByKCkpOwogI2Vsc2UKLSAgICAgICAgICAg
IHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJh
c2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKKyAgICAg
ICAgICAgIGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIpCisgICAgICAgICAgICAgICAgc3R1
YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncy50
YWdHUFIoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKIAotICAgICAgICAgICAgb3Bl
cmF0aW9uRnVuY3Rpb24gPSBGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRlcigpKTsKLQogICAg
ICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJl
c3VsdEdQUik7Ci0jZWxzZQotICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHMocmVzdWx0
R1BSLCByZXN1bHRUYWdHUFIpOwotI2VuZGlmCisgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxs
Q3VzdG9tR2V0dGVyKQorICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBSZXN1bHRzKHZhbHVl
UmVncyk7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub0V4Y2VwdGlvbiA9IHN0
dWJKaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25D
aGVjayk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHMo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZtKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpOwpAQCAtNDYzLDEwICs1MTUsMTAgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkU3R1
YigKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVC
bG9jaygpKTsKICAgICAKICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRU
b1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJl
bCwgc2xvd0Nhc2VMYWJlbCk7Ci0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewot
ICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlvbkZ1bmN0aW9u
KTsKKyAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVyIHx8IGtpbmQgPT0gQ2FsbEN1c3Rv
bVNldHRlcikgeworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIGN1c3Rv
bSk7CiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlv
bkhhbmRsZXIpOwotICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKSB7Cisg
ICAgfSBlbHNlIGlmIChraW5kID09IENhbGxHZXR0ZXIgfHwga2luZCA9PSBDYWxsU2V0dGVyKSB7
CiAgICAgICAgIGNhbGxMaW5rSW5mby0+aG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsKGZhc3RQYXRoQ2FsbCk7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+aG90UGF0
aEJlZ2luID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVj
ayk7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dQYXRoQ2FsbCk7CkBAIC00ODIsNyArNTM0LDcgQEAg
c3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkU3R1YigKICAgICAgICAgKCJHZXQgYWNjZXNzIHN0
dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAogICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVj
LT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdWNjZXNzTGFiZWwuZXhlY3V0YWJsZUFkZHJlc3MoKSkp
OwogICAgIAotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCisgICAgaWYgKGtpbmQg
PT0gQ2FsbEdldHRlciB8fCBraW5kID09IENhbGxTZXR0ZXIpCiAgICAgICAgIHN0dWJSb3V0aW5l
ID0gYWRvcHRSZWYobmV3IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKGNvZGUsICp2bSwgc3Rk
Ojptb3ZlKGNhbGxMaW5rSW5mbykpKTsKICAgICBlbHNlCiAgICAgICAgIHN0dWJSb3V0aW5lID0g
Y3JlYXRlSklUU3R1YlJvdXRpbmUoY29kZSwgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCB0cnVlKTsKQEAgLTYzMSw4ICs2ODMsOSBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5
SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFN0cnVjdHVyZUNo
YWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0g
ICAgZ2VuZXJhdGVHZXRCeUlkU3R1YigKLSAgICAgICAgZXhlYywgc2xvdCwgcHJvcGVydHlOYW1l
LCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwKKyAg
ICBnZW5lcmF0ZUJ5SWRTdHViKAorICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0
eU5hbWUsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwK
KyAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsCiAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAg
ICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLAogICAgICAgICBzdHViSW5mby5zdHViUm91dGlu
ZSk7CkBAIC03MTIsOSArNzY1LDkgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChF
eGVjU3RhdAogICAgIH0KICAgICAKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0
aW5lOwotICAgIGdlbmVyYXRlR2V0QnlJZFN0dWIoCi0gICAgICAgIGV4ZWMsIHNsb3QsIGlkZW50
LCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwKLSAg
ICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKKyAgICBnZW5lcmF0ZUJ5SWRTdHViKAorICAgICAgICBl
eGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgcHJv
dG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsCisgICAgICAgIHN0cnVjdHVyZSwgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9Eb25lKSwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRo
VGFyZ2V0KHN0dWJJbmZvKSksIHN0dWJSb3V0aW5lKTsKICAgICAKICAgICBHZXRCeUlkQWNjZXNz
OjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CkBAIC0xMDQ0LDczICsxMDk3LDYgQEAgc3RhdGljIHZv
aWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICAgICAgc3RydWN0dXJlKTsKIH0KIAot
c3RhdGljIHZvaWQgZW1pdEN1c3RvbVNldHRlclN0dWIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QsCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluLAotICAg
IENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCwgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYg
c3R1YlJvdXRpbmUpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgQVNTRVJUKHN0
dWJJbmZvLnBhdGNoLnNwaWxsTW9kZSA9PSBEb250U3BpbGwpOwotICAgIEdQUlJlZyBiYXNlR1BS
ID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKLSNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJl
Zz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgR1BSUmVnIHZhbHVl
R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUik7Ci0gICAg
VGVtcFJlZ2lzdGVyU2V0IHRlbXBSZWdpc3RlcnMoc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVy
cyk7Ci0KLSAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSB0ZW1wUmVnaXN0ZXJzLmdldEZyZWVHUFIoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChzY3Jh
dGNoR1BSICE9IEludmFsaWRHUFJSZWcpOwotICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hHUFIg
IT0gYmFzZUdQUik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc2NyYXRjaEdQUiAhPSB2YWx1ZUdQUik7
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLSAgICBmYWlsdXJl
Q2FzZXMuYXBwZW5kKGJyYW5jaFN0cnVjdHVyZShzdHViSml0LAotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgIHN0cnVjdHVyZSkpOwotICAg
IAotICAgIGlmIChwcm90b3R5cGVDaGFpbikgewotICAgICAgICBmb3IgKFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+KiBpdCA9IHByb3RvdHlwZUNoYWluLT5oZWFkKCk7ICppdDsgKytpdCkKLSAgICAg
ICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygoKml0KS0+c3RvcmVkUHJvdG90eXBl
KCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBz
Y3JhdGNoR1BSKTsKLSAgICB9Ci0KLSAgICAvLyB0eXBlZGVmIHZvaWQgKCpQdXRWYWx1ZUZ1bmMp
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBiYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB2YWx1ZSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdHViSml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihz
bG90LmJhc2UoKSksIGJhc2VHUFIsIHZhbHVlR1BSKTsKLSNlbHNlCi0gICAgc3R1YkppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2xv
dC5iYXNlKCkpLCBiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOwotI2VuZGlmCi0KLSAgICAvLyBOZWVk
IHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRlIGluIHRoZSBmdXR1
cmUsIHdlIHJlbWVtYmVyIHRoZQotICAgIC8vIHBsYWNlIHRoYXQgd2UgbWFkZSBpdCBmcm9tLiBJ
dCBqdXN0IHNvIGhhcHBlbnMgdG8gYmUgdGhlIHBsYWNlIHRoYXQgd2UgYXJlIGF0Ci0gICAgLy8g
cmlnaHQgbm93IQotICAgIHN0dWJKaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKGV4ZWMtPmxvY2F0aW9uQXNSYXdCaXRzKCkpLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OnRh
Z0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
KSk7Ci0gICAgc3R1YkppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZt
LT50b3BDYWxsRnJhbWUpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgc2V0dGVyQ2FsbCA9
IHN0dWJKaXQuY2FsbCgpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3Mg
PSBzdHViSml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0
aW9uQ2hlY2spOwotCi0gICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0KLSAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBoYW5kbGVyQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotCi0gICAgc3R1
YkppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdm0sICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7Ci0KLSAgICBwYXRjaEJ1ZmZlci5s
aW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFp
bHVyZUNhc2VzLCBmYWlsdXJlTGFiZWwpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2V0dGVyQ2Fs
bCwgRnVuY3Rpb25QdHIoc2xvdC5jdXN0b21TZXR0ZXIoKSkpOwotICAgIHBhdGNoQnVmZmVyLmxp
bmsoaGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpOwotCi0gICAgc3R1YlJvdXRp
bmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9HQ19BV0FSRV9TVFVCKAotICAgICAgICBleGVjLT5jb2Rl
QmxvY2soKSwgcGF0Y2hCdWZmZXIsIHRydWUsIG51bGxwdHIsCi0gICAgICAgICgiUHV0QnlJZCBj
dXN0b20gc2V0dGVyIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAg
dG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLAotICAgICAgICAgICAgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci19Ci0KLQogc3RhdGljIGJvb2wgdHJ5
Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQogewogICAgIGlmIChPcHRpb25zOjpm
b3JjZUlDRmFpbHVyZSgpKQpAQCAtMTE4NCw5ICsxMTcwLDExIEBAIHN0YXRpYyBib29sIHRyeUNh
Y2hlUHV0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBz
dHViUm91dGluZTsKIAogICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSAw
OworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwor
ICAgICAgICBzaXplX3QgY291bnQgPSAwOwogICAgICAgICBpZiAoYmFzZVZhbHVlICE9IHNsb3Qu
YmFzZSgpKSB7Ci0gICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXRJZ25vcmVkOwotICAg
ICAgICAgICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywg
YmFzZUNlbGwsIHNsb3QuYmFzZSgpLCBpZGVudCwgb2Zmc2V0SWdub3JlZCkgPT0gSW52YWxpZFBy
b3RvdHlwZUNoYWluKQorICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFp
bkZvckNoYWluQWNjZXNzKGV4ZWMsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSwgaWRlbnQsIG9mZnNl
dCk7CisgICAgICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW4g
PSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwpAQCAtMTE5NCw4ICsxMTgyLDEwIEBA
IHN0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgUG9seW1v
cnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJ
ZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwogCi0gICAgICAgIGVtaXRDdXN0b21TZXR0
ZXJTdHViKGV4ZWMsIHNsb3QsIHN0dWJJbmZvLAotICAgICAgICAgICAgc3RydWN0dXJlLCBwcm90
b3R5cGVDaGFpbiwKKyAgICAgICAgZ2VuZXJhdGVCeUlkU3R1YigKKyAgICAgICAgICAgIGV4ZWMs
IGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5
cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwKKyAgICAgICAg
ICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwK
ICAgICAgICAgICAgIHN0dWJSb3V0aW5lKTsKIApAQCAtMTMwOCw5ICsxMjk4LDExIEBAIHN0YXRp
YyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXQKICAgICBpZiAoc2xvdC5pc0NhY2hl
YWJsZUN1c3RvbVByb3BlcnR5KCkgJiYgc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRT
cGlsbCkgewogICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAg
ICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSAwOworICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgICAgICBzaXplX3QgY291
bnQgPSAwOwogICAgICAgICBpZiAoYmFzZVZhbHVlICE9IHNsb3QuYmFzZSgpKSB7Ci0gICAgICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXRJZ25vcmVkOwotICAgICAgICAgICAgaWYgKG5vcm1h
bGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgYmFzZUNlbGwsIHNsb3QuYmFz
ZSgpLCBwcm9wZXJ0eU5hbWUsIG9mZnNldElnbm9yZWQpID09IEludmFsaWRQcm90b3R5cGVDaGFp
bikKKyAgICAgICAgICAgIGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFj
Y2VzcyhleGVjLCBiYXNlQ2VsbCwgc2xvdC5iYXNlKCksIHByb3BlcnR5TmFtZSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBwcm90b3R5cGVDaGFpbiA9IHN0
cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CkBAIC0xMzE4LDggKzEzMTAsMTAgQEAgc3Rh
dGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdAogICAgICAgICBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlz
dDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7CiAKLSAgICAgICAgZW1pdEN1c3RvbVNldHRlclN0
dWIoZXhlYywgc2xvdCwgc3R1YkluZm8sCi0gICAgICAgICAgICBzdHJ1Y3R1cmUsIHByb3RvdHlw
ZUNoYWluLAorICAgICAgICBnZW5lcmF0ZUJ5SWRTdHViKAorICAgICAgICAgICAgZXhlYywga2lu
ZEZvcihzbG90KSwgcHJvcGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90
b3R5cGVDaGFpbiwgY291bnQsCisgICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwKKyAgICAg
ICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChs
aXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksCiAgICAgICAgICAgICBzdHViUm91dGluZSk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHJl
dmlzaW9uIDE2Njg5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjkxLDE5ICsyOTEsNiBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZlBheWxvYWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mVGFnKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZyk7
IH0KIAotcHJpdmF0ZToKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gSlNWYWx1ZShXcml0ZUJhcnJp
ZXJCYXNlPFQ+KTsKLQotICAgIGVudW0gSGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFnIHsgSGFzaFRh
YmxlRGVsZXRlZFZhbHVlIH07Ci0gICAgSlNWYWx1ZShIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcp
OwotCi0gICAgaW5saW5lIGNvbnN0IEpTVmFsdWUgYXNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0
aGlzOyB9Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyU2xvd0Nhc2UoRXhl
Y1N0YXRlKikgY29uc3Q7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmcqIHRvU3RyaW5n
U2xvd0Nhc2UoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgV1RGOjpT
dHJpbmcgdG9XVEZTdHJpbmdTbG93Q2FzZShFeGVjU3RhdGUqKSBjb25zdDsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBKU09iamVjdCogdG9PYmplY3RTbG93Q2FzZShFeGVjU3RhdGUqLCBKU0dsb2Jh
bE9iamVjdCopIGNvbnN0OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgdG9UaGlzU2xv
d0Nhc2UoRXhlY1N0YXRlKiwgRUNNQU1vZGUpIGNvbnN0OwotCiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKICAgICAvKgogICAgICAqIE9uIDMyLWJpdCBwbGF0Zm9ybXMgVVNFKEpTVkFMVUUzMl82NCkg
c2hvdWxkIGJlIGRlZmluZWQsIGFuZCB3ZSB1c2UgYSBOYU4tZW5jb2RlZApAQCAtNDE2LDYgKzQw
MywxOSBAQCBwcml2YXRlOgogICAgICNkZWZpbmUgVmFsdWVEZWxldGVkIDB4NGxsCiAjZW5kaWYK
IAorcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gSlNWYWx1ZShXcml0ZUJhcnJpZXJC
YXNlPFQ+KTsKKworICAgIGVudW0gSGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFnIHsgSGFzaFRhYmxl
RGVsZXRlZFZhbHVlIH07CisgICAgSlNWYWx1ZShIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcpOwor
CisgICAgaW5saW5lIGNvbnN0IEpTVmFsdWUgYXNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlz
OyB9CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyU2xvd0Nhc2UoRXhlY1N0
YXRlKikgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmcqIHRvU3RyaW5nU2xv
d0Nhc2UoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgV1RGOjpTdHJp
bmcgdG9XVEZTdHJpbmdTbG93Q2FzZShFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBKU09iamVjdCogdG9PYmplY3RTbG93Q2FzZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9i
amVjdCopIGNvbnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgdG9UaGlzU2xvd0Nh
c2UoRXhlY1N0YXRlKiwgRUNNQU1vZGUpIGNvbnN0OworCiAgICAgRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciB1OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJv
cGVydHlTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHV0UHJvcGVydHlTbG90LmgJKHJldmlzaW9uIDE2Njg5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5
Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9m
ZnNldCgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpc0NhY2hlYWJsZVB1
dCgpKTsKICAgICAgICAgICAgIHJldHVybiBtX29mZnNldDsKICAgICAgICAgfQogCg==
</data>
<flag name="review"
          id="253122"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>