<?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>26655</bug_id>
          
          <creation_ts>2009-06-23 12:46:38 -0700</creation_ts>
          <short_desc>ResourceHandle infrastructure is needed to support loading out of an appcache</short_desc>
          <delta_ts>2009-07-29 16:18:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Nordman">michaeln</reporter>
          <assigned_to name="Michael Nordman">michaeln</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>127660</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-06-23 12:46:38 -0700</bug_when>
    <thetext>This bug was split off of https://bugs.webkit.org/show_bug.cgi?id=25436. Please see the discussion there about the reason for this.

Preliminary patch forth coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127694</commentid>
    <comment_count>1</comment_count>
      <attachid>31738</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-06-23 14:32:49 -0700</bug_when>
    <thetext>Created attachment 31738
Interceptor (rev1)

Looking for some preliminary feedback on this new piece of webcore resource handle
infrastructure.

These changes allow an &apos;interceptor&apos; to hijack ResourceHandle requests and to provide response data instead of actually going to the network.

The approach taken in this preliminary patch ripples into the platform
specific resourcehandleXXX.cpp files more than i would like. Its doable, just
very platform specific.

Another approach would be to introduce a new ResourceHandle class into the
hierarchy that &apos;wraps&apos; the existing class. Something like...
* rename existing ResourceHandle.h cpp --&gt; PlatformResourceHandle.h cpp
* introduce new ResourceHandle.h cpp with same interface as existing class, but
have it use ResourceHandleInterceptorHost  and PlatformResourceHandle for everything under the covers. 

I&apos;m preparing another patch with that hoist usage of the ResourceHandleInterceptorHost into a new wrapper class as described above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128014</commentid>
    <comment_count>2</comment_count>
      <attachid>31813</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-06-24 15:16:30 -0700</bug_when>
    <thetext>Created attachment 31813
Interceptor (rev2)

Uploaded another stab it using the &quot;other approach&quot;... the wrapper class
* renamed existing ResourceHandle.h cpp --&gt; PlatformResourceHandle.h cpp
* introduced new ResourceHandle.h cpp with same interface as existing class, but
have it use the PlatformResourceHandle for everything
* bake ResourceHandleInterceptor usage into the new class

The good thing about this approach is that it only calls for entirely mechanical
changes to the existing platorm specific ResourceHandle impls... simple class
name changes.

Still just looking for preliminary comments right now. An obvious thing thats needed are test cases.

Incidentally, chrome has the moral equivalent, URLRequest::Interceptor, in place for this already... http://codereview.chromium.org/67019... including a decent set of test cases. I&apos;ll be looking to implement similar tests for this  ResourceHandle Intercepor stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129018</commentid>
    <comment_count>3</comment_count>
      <attachid>31738</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-30 03:19:25 -0700</bug_when>
    <thetext>Comment on attachment 31738
Interceptor (rev1)

It appears that this patch should have been obsoleted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129019</commentid>
    <comment_count>4</comment_count>
      <attachid>31813</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-30 03:20:22 -0700</bug_when>
    <thetext>Comment on attachment 31813
Interceptor (rev2)

This patch needs ChangeLogs to explain what your doing.

http://webkit.org/coding/contributing.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129206</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-06-30 16:08:56 -0700</bug_when>
    <thetext>I&apos;ve unobsoleted the initial patch. Patch rev1 and rev2 represent different approaches. I&apos;m looking for preliminary comments including which of these approaches looks more promising.

There&apos;s no change log entry yet, just looking for initial comments right now. Please see the discussion in https://bugs.webkit.org/show_bug.cgi?id=25436 for the explanation.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129238</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-06-30 19:34:32 -0700</bug_when>
    <thetext>I&apos;ve been pushing on the second approach (rev2) since initially uploading since that&apos;s the direction that Alexey and I had discussed taking. Here&apos;s an update...

* rev2 as uploaded builds and runs in chrome as is (with simple mechanical changes to chrome platform specific files to deal with the rename to PlatformResourceHandle)

* moved this over to a mac webkit client

* did the obvious class name change work in ResourceHandleMac.mm

* did the less obvious class name change work in FormDataStreamMac.h .mm 

* addressed some some gcc vs msvc issues to get things to compile

* fleshed out the PLATFORM(MAC) parts of ResourceHandle.h .cpp to make the linker happy

* build and runs and passes unit tests (modulo few items that i think were also failing prior to patching anything in)

I still don&apos;t have good automated tests for this, but manual testing (using the TestInterceptor class in the patch) is looking good. The &apos;intercept_main&apos;, &apos;intercept_response&apos;, &apos;intercept_redirect&apos;, &apos;intercept_error&apos;, and &apos;restart_wo_interception&apos; cases are working for me.

Cheers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129308</commentid>
    <comment_count>7</comment_count>
      <attachid>32128</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-07-01 09:49:40 -0700</bug_when>
    <thetext>Created attachment 32128
Interceptor (rev2)

Here&apos;s an updated patch that working for me on Safari/mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132074</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-15 16:15:12 -0700</bug_when>
    <thetext>133k is too large for me to review.  But maybe you&apos;ve been working with a reviewer who can understand this huge patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132086</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-07-15 16:34:33 -0700</bug_when>
    <thetext>This is patch is really here more for proof-of-concept purposes, I&apos;m not looking to submit anything like this at this time. Appropriate folks are taking a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132298</commentid>
    <comment_count>10</comment_count>
      <attachid>32128</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-16 10:53:49 -0700</bug_when>
    <thetext>Comment on attachment 32128
Interceptor (rev2)

Clearing r? to move this out of the review queue since Michael Nordman stated &quot;This is patch is really here more for proof-of-concept purposes, I&apos;m not
looking to submit anything like this at this time.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132299</commentid>
    <comment_count>11</comment_count>
      <attachid>31738</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-16 10:54:18 -0700</bug_when>
    <thetext>Comment on attachment 31738
Interceptor (rev1)

Clearing r? to move this out of the review queue since Michael Nordman stated &quot;This is patch is really here more for proof-of-concept purposes, I&apos;m not
looking to submit anything like this at this time.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135709</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-07-29 16:18:40 -0700</bug_when>
    <thetext>Closing... The webkit team has other plans in mind. We&apos;ll have to wait and see what that looks like. In the meantime, the chrome team is going to build its own appcache system as what webcore currently has to offer just plain don&apos;t work for us.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31738</attachid>
            <date>2009-06-23 14:32:49 -0700</date>
            <delta_ts>2009-07-16 10:54:18 -0700</delta_ts>
            <desc>Interceptor (rev1)</desc>
            <filename>issue146038_24.diff</filename>
            <type>text/plain</type>
            <size>44920</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IHBsYXRmb3JtL25ldHdvcmsvSW50ZXJjZXB0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0
Zm9ybS9uZXR3b3JrL0ludGVyY2VwdG9yLmgJKHJldmlzaW9uIDApCisrKyBwbGF0Zm9ybS9uZXR3
b3JrL0ludGVyY2VwdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBJbnRlcmNlcHRvcl9oCisjZGVmaW5lIEludGVyY2VwdG9yX2gKKworI2luY2x1ZGUgIlJlc291
cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnRlcmNlcHRvcjsKK2NsYXNzIEludGVyY2VwdG9yQ2xp
ZW50OworY2xhc3MgSW50ZXJjZXB0b3JGYWN0b3J5OworCisKKy8vIEludGVyZmFjZSB1c2VkIGFu
ZCBpbnRlcmNlcHRvciByZXNwb25zZXMgZm9yIGRlbGl2ZXJ5IGJhY2sgdG8gdGhlIGNsaWVudC4K
K2NsYXNzIEludGVyY2VwdG9yQ2xpZW50IHsKK3B1YmxpYzoKKyAgICAvLyBDYWxsZWQgYnkgYW4g
aW50ZXJjZXB0b3IgdG8gc2NoZWR1bGUgYSByZXNwb25zZSBmb3IgZGVsaXZlcnkgYmFjayB0bwor
ICAgIC8vIHRoZSBjbGllbnQuIEl0IGlzIGFuIGVycm9yIHRvIGNhbGwgd2l0aG91dCBoYXZpbmcg
YmVlbiBzdGFydGVkLgorICAgIHZpcnR1YWwgdm9pZCBkZWxpdmVyUmVzcG9uc2UoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhKSA9
IDA7CisKKyAgICAvLyBDYWxsZWQgYnkgYW4gaW50ZXJjZXB0b3IgdG8gc2NoZWR1bGUgYW4gZXJy
b3IgZm9yIGRlbGl2ZXJ5IGJhY2sgdG8KKyAgICAvLyB0aGUgY2xpZW50LiBJdCBpcyBhbiBlcnJv
ciB0byBjYWxsIHdpdGhvdXQgaGF2aW5nIGJlZW4gc3RhcnRlZC4KKyAgICB2aXJ0dWFsIHZvaWQg
ZGVsaXZlckVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKSA9IDA7CisKKyAgICAvLyBD
YWxsZWQgYnkgYW4gaW50ZXJjZXB0b3IgdG8gcmVzdGFydCB0aGUgbG9hZCB0aGlzIHRpbWUgd2l0
b3V0IGludGVyY2VwdGlvbi4KKyAgICAvLyBJdCBpcyBhbiBlcnJvciB0byBjYWxsIHdpdGhvdXQg
aGF2aW5nIGJlZW4gc3RhcnRlZCB0byBpbnRlcmNlcHQgYSByZXF1ZXN0LgorICAgIC8vIFRvIGNs
YXJpZnksIHRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGFmdGVyIGhhdmluZyBiZWVu
IHN0YXJ0ZWQgdG8KKyAgICAvLyBpbnRlcmNlcHQgYSByZWRpcmVjdCBvciByZXNwb25zZSwgaXRz
IG9ubHkgdmFsaWQgdG8gY2FsbCBpbiB0aGUKKyAgICAvLyBtYXliZUludGVyY2VwdFJlcXVlc3Qg
Y2FzZSBzcGVjaWZpY2FsbHkuCisgICAgdmlydHVhbCB2b2lkIHJlc3RhcnRSZXF1ZXN0V2l0aG91
dEludGVyY2VwdGlvbigpID0gMDsKK307CisKKy8vIEFuIGludGVyY2VwdG9yIGNhbiBwcmUtZW1w
dGl2ZWx5IGhpamFjayByZXNvdXJjZSBsb2FkcyBhbmQKKy8vIHByb3ZpZGUgZGF0YSBvZiBpdHMg
b3duIGluc3RlYWQgb2YgYWN0dWFsbHkgZ29pbmcgdG8gdGhlIG5ldHdvcmsuIEFuCisvLyBpbnRl
cmNlcHRvciBjYW4gYWxzbyBoaWphY2sgaW50ZXJtZWRpYXJ5IHJlZGlyZWN0IHJlc3BvbnNlcyBv
ciB0aGUgZmluYWwKKy8vIHJlc3BvbnNlLCByZXBsYWNpbmcgdGhvc2UgcmVzcG9uc2VzIHdpdGgg
aXRzIG93biBkYXRhIGluc3RlYWQuCisvLworLy8gSW50ZXJjZXB0aW9uIGlzIHRyYW5zcGFyZW50
IHRvIGNsaWVudHMgb2YgdGhlIFJlc291cmNlSGFuZGxlIGNsYXNzLiBDbGllbnRzCisvLyBjYW4n
dCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHJlc3BvbnNlcyByZXRyaWV2ZWQgZnJvbSB0aGUgbmV0d29y
ayBhbmQKKy8vIGludGVyY2VwdG9yIGdlbmVyYXRlZCByZXNwb25zZXMuCitjbGFzcyBJbnRlcmNl
cHRvciB7CitwdWJsaWM6CisgICAgSW50ZXJjZXB0b3JDbGllbnQqIGludGVyY2VwdG9yQ2xpZW50
KCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcmNlcHRvckNsaWVudDsgfQorICAgIHZvaWQgc2V0SW50
ZXJjZXB0b3JDbGllbnQoSW50ZXJjZXB0b3JDbGllbnQqIGNsaWVudCkgIHsgbV9pbnRlcmNlcHRv
ckNsaWVudCA9IGNsaWVudDsgfQorCisgICAgLy8gQ2FsbGVkIGZvciBldmVyeSByZXF1ZXN0IG1h
ZGUsIGluY2x1ZGluZyByZXF1ZXN0cyBmb3IgdGhlIG5ldyAKKyAgICAvLyBsb2NhdGlvbiBvZiBh
IHJlZGlyZWN0LiBDYW4gcmV0dXJuIHRydWUgaWYgdGhlIHJlcXVlc3QgaWYgaXQKKyAgICAvLyBz
aG91bGQgYmUgaW50ZXJjZXB0ZWQsIG9yIGZhbHNlIHRvIGFsbG93IHRoZSByZXF1ZXN0IHRvIGJl
IGhhbmRsZWQgYmUKKyAgICAvLyBoYW5kbGVkIGluIHRoZSBub3JtYWwgbWFubmVyLiAKKyAgICB2
aXJ0dWFsIGJvb2wgbWF5YmVJbnRlcmNlcHRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYp
ID0gMDsKKworICAgIC8vIENhbGxlZCBhZnRlciBoYXZpbmcgcmVjZWl2ZWQgYSByZWRpcmVjdCBy
ZXNwb25zZSwgYnV0IHByaW9yIHRvIHRoZQorICAgIC8vIHRoZSByZXNvdXJjZSBoYW5kbGUgY2xp
ZW50IGJlaW5nIGluZm9ybWVkIG9mIHRoZSByZWRpcmVjdC4gQ2FuIHJldHVybiB0cnVlIGlmCisg
ICAgLy8gdGhlIHJlZGlyZWN0IHNob3VsZCBiZSBkaXNjYXJkZWQgYW5kIHJlcGxhY2VkIGJ5IGFu
IGludGVyY2VwdG9yIGdlbmVyYXRlZAorICAgIC8vIHJlc3BvbnNlLiBJZiB0cnVlIGlzIHJldHVy
bmVkLCB0aGUgcmVzb3VyY2UgaGFuZGxlIGNsaWVudCBuZXZlciBzZWVzIHRoZQorICAgIC8vIG9y
aWdpbmFsIHJlZGlyZWN0LCBpbnN0ZWFkIHRoZSByZXNwb25zZSBwcm9kdWNlZCBieSB0aGUgaW50
ZXJjZXB0b3Igd2lsbAorICAgIC8vIGJlIHJldHVybmVkLgorICAgIHZpcnR1YWwgYm9vbCBtYXli
ZUludGVyY2VwdFJlZGlyZWN0KGNvbnN0IEtVUkwmIGxvY2F0aW9uKSA9IDA7CisKKyAgICAvLyBD
YWxsZWQgYWZ0ZXIgaGF2aW5nIHJlY2VpdmVkIGEgZmluYWwgcmVzcG9uc2UsIGJ1dCBwcmlvciB0
byB0aGUKKyAgICAvLyB0aGUgcmVzb3VyY2UgaGFuZGxlIGNsaWVudCBiZWluZyBpbmZvcm1lZCBv
ZiB0aGUgcmVzcG9uc2UuIENhbiByZXR1cm4gdHJ1ZQorICAgIC8vIGlmIHRoZSByZXNwb25zZSBz
aG91bGQgYmUgZGlzY2FyZGVkIGFuZCByZXBsYWNlZCB3aXRoIGFuIGludGVyY2VwdG9yIGdlbmVy
YXRlZAorICAgIC8vIHJlc3Bvc25lLiBJZiB0cnVlIGlzIHJldHVybmVkLCB0aGUgcmVzb3VyY2Ug
aGFuZGxlIGNsaWVudCBuZXZlciBzZWVzIHRoZQorICAgIC8vIG9yaWdpbmFsIHJlc3BvbnNlLCBp
bnN0ZWFkIHRoZSByZXNwb25zZSBwcm9kdWNlZCBieSB0aGUgaW50ZXJjZXB0b3Igd2lsbCBiZQor
ICAgIC8vIHJldHVybmVkLgorICAgIHZpcnR1YWwgYm9vbCBtYXliZUludGVyY2VwdFJlc3BvbnNl
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSA9IDA7CisKKyAgICAvLyBDYWxsZWQgYWZ0ZXIgaGF2
aW5nIHJlY2VpdmVkIGEgZmluYWwgZXJyb3IsIGJ1dCBwcmlvciB0byB0aGUKKyAgICAvLyB0aGUg
cmVzb3VyY2UgaGFuZGxlIGNsaWVudCBiZWluZyBpbmZvcm1lZCBvZiB0aGUgZXJyb3IuIENhbiBy
ZXR1cm4gdHJ1ZQorICAgIC8vIGlmIHRoZSBlcnJvciBzaG91bGQgYmUgZGlzY2FyZGVkIGFuZCBy
ZXBsYWNlZCB3aXRoIGFuIGludGVyY2VwdG9yIGdlbmVyYXRlZAorICAgIC8vIHJlc3Bvc25lLiBJ
ZiB0cnVlIGlzIHJldHVybmVkLCB0aGUgcmVzb3VyY2UgaGFuZGxlIGNsaWVudCBuZXZlciBzZWVz
IHRoZQorICAgIC8vIG9yaWdpbmFsIGVycm9yLCBpbnN0ZWFkIHRoZSByZXNwb25zZSBwcm9kdWNl
ZCBieSB0aGUgaW50ZXJjZXB0b3Igd2lsbCBiZQorICAgIC8vIHJldHVybmVkLgorICAgIHZpcnR1
YWwgYm9vbCBtYXliZUludGVyY2VwdEVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImKSA9IDA7CisK
KyAgICAvLyBDYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYW4gaW50ZXJjZXB0b3IgcmV0dXJucyB0
cnVlIHRvIGFueSBvZiB0aGUgbWF5YmUKKyAgICAvLyBtZXRob2RzLiBUaGlzIGdpdmVzIHRoZSBp
bnRlcmNlcHRvciBhbiBvcHBvcnR1bml0eSB0byBkZWxpdmVyIGEgcmVzcG9uc2UKKyAgICAvLyBp
bW1lZGlhdGVseSBmcm9tIHdpdGhpbiB0aGUgc3RhcnQgbWV0aG9kIHdpdGhvdXQgZ29pbmcgdGhy
dSB0aGUgbWVzc2FnZSBsb29wLgorICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpIHt9CisKKyAgICAv
LyBDYWxsZWQgdG8gY2FuY2VsIGFuIGludGVyY2VwdC4KKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2Vs
KCkgPSAwOworCitwcml2YXRlOgorICAgIEludGVyY2VwdG9yQ2xpZW50KiBtX2ludGVyY2VwdG9y
Q2xpZW50OworfTsKKworCisvLyBBIGZhY3RvcnkgZm9yIGluc3RhbmNlcyBvZiBpbnRlcmNlcHRv
cnMuIFRoZSBmYWN0b3J5IGFsc28gcHJvdmlkZXMgbWV0aG9kcworLy8gdG8gaW50ZXJjZXB0IHN5
bmMgbG9hZHMuCitjbGFzcyBJbnRlcmNlcHRvckZhY3RvcnkgeworcHVibGljOgorICAgIC8vIFJl
dHVybnMgYW4gaW50ZXJjZXB0b3IgZm9yIGFuIGFzeW5jIHJlcXVlc3QsIGl0IG1heSByZXR1cm4g
MAorICAgIHZpcnR1YWwgSW50ZXJjZXB0b3IqIGNyZWF0ZUludGVyY2VwdG9yKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYpIHsgcmV0dXJuIDA7IH0KKworICAgIC8vIEZJWE1FOiBTeW5jaHJvbm91cyBp
bnRlcmNlcHRpb24gaGFzIG5vIG9wcG9ydHVuaXR5IHRvIGludGVyY2VwdCBpbnRlcm1pZGFpcnkg
cmVkaXJlY3RzCisgICAgdmlydHVhbCBib29sIG1heWJlTG9hZFN5bmNocm9ub3VzbHkoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImLCBSZXNv
dXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKSB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBtYXliZUZhbGxiYWNrU3ljaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25z
ZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSkgeyByZXR1cm4gZmFsc2U7IH0KK307CisKKy8vIEZJWE1F
OiB0aGlzIGlzIHF1aWNrIGFuZCBkaXJ0eSB0ZXN0IGNvZGUsIGZpbmQgYSByZWFsIHdheSB0byB0
ZXN0IHRoaXMKK0ludGVyY2VwdG9yRmFjdG9yeSogZ2V0VGVzdEludGVyY2VwdG9yRmFjdG9yeSgp
OworCit9CisKKyNlbmRpZiAvLyBJbnRlcmNlcHRvcl9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBw
bGF0Zm9ybVxuZXR3b3JrXEludGVyY2VwdG9yLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1z
dHlsZQogICArIExGCgpJbmRleDogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkocmV2aXNpb24g
NDQyMDIpCisrKyBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIwMSw2ICsyMDEsMjAgQEAKIAogICAgIGJvb2wgc3RhcnQoRnJhbWUqKTsKIAorICAg
IFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnRJbnRlcm5hbCgpIGNvbnN0OworICAgIHZvaWQg
c2V0Q2xpZW50SW50ZXJuYWwoUmVzb3VyY2VIYW5kbGVDbGllbnQqKTsKKyAgICB2b2lkIHJlY3Jl
YXRlSW50ZXJuYWwoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQq
KTsKKworICAgIC8vIG11c3QgYmUgcHJvdmlkZWQgYnkgYSBwbGF0Zm9ybSBzcGVjaWZpYyBpbXBs
CisgICAgYm9vbCBzdGFydEludGVybmFsKEZyYW1lKik7CisgICAgdm9pZCBjYW5jZWxJbnRlcm5h
bCgpOworICAgIHZvaWQgYWJhbmRvbkludGVybmFsKCk7CisgICAgUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IGJ1ZmZlcmVkRGF0YUludGVybmFsKCk7CisgICAgc3RhdGljIHZvaWQgbG9hZFJlc291
cmNlU3luY2hyb25vdXNseUludGVybmFsKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENy
ZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFy
PiYgZGF0YSwgRnJhbWUqIGZyYW1lKTsKKworICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZUhhbmRs
ZUludGVyY2VwdG9ySG9zdDsKKyAgICBPd25QdHI8UmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhv
c3Q+IG1faW50ZXJjZXB0b3JIb3N0OworCiAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlSGFuZGxl
SW50ZXJuYWw7CiAgICAgT3duUHRyPFJlc291cmNlSGFuZGxlSW50ZXJuYWw+IGQ7CiB9OwpJbmRl
eDogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9z
dC5jcHAJKHJldmlzaW9uIDApCisrKyBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50
ZXJjZXB0b3JIb3N0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNTUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3QuaCIK
KworI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiICAvLyBG
SVhNRTogaSB3aXNoIGZyYW1lIHdhcyBub3QgYSBwYXJhbSB0byBzdGFydCEhCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIEludGVyY2VwdG9yRmFjdG9yeSogZ19mYWN0b3J5OworCitz
dGF0aWMgSW50ZXJjZXB0b3JGYWN0b3J5KiBmYWN0b3J5KCkKK3sKKyAgICAvLyBGSVhNRTogdGhp
cyBpcyBxdWljayBhbmQgZGlydHkgdGVzdCBjb2RlLCBmaW5kIGEgcmVhbCB3YXkgdG8gdGVzdCB0
aGlzCisgICAgcmV0dXJuIGdfZmFjdG9yeSA/IGdfZmFjdG9yeSA6IGdldFRlc3RJbnRlcmNlcHRv
ckZhY3RvcnkoKTsKK30KKworLy8gc3RhdGljCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0
b3JIb3N0OjpzZXRJbnRlcmNlcHRvckZhY3RvcnkoSW50ZXJjZXB0b3JGYWN0b3J5KiBmYWN0b3J5
KQoreworICAgIGdfZmFjdG9yeSA9IGZhY3Rvcnk7Cit9CisKKy8vIHN0YXRpYworUmVzb3VyY2VI
YW5kbGVJbnRlcmNlcHRvckhvc3QqIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0OjpjcmVh
dGVJbnRlcmNlcHRvckFuZEhvc3QoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIEludGVyY2VwdG9yKiBpbnRlcmNlcHRvciA9IGZh
Y3RvcnkoKSA/IGZhY3RvcnkoKS0+Y3JlYXRlSW50ZXJjZXB0b3IocmVxdWVzdCkgOiAwOworICAg
IGlmIChpbnRlcmNlcHRvcikKKyAgICAgICAgcmV0dXJuIG5ldyBSZXNvdXJjZUhhbmRsZUludGVy
Y2VwdG9ySG9zdChoYW5kbGUsIGludGVyY2VwdG9yKTsKKyAgICByZXR1cm4gMDsKK30KKworLy8g
c3RhdGljCitib29sIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0OjptYXliZUxvYWRTeW5j
aHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlh
bHMgY3JlZGVudGlhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQoreworICAgIHJldHVybiBmYWN0b3J5KCkg
PyBmYWN0b3J5KCktPm1heWJlTG9hZFN5bmNocm9ub3VzbHkocmVxdWVzdCwgY3JlZGVudGlhbHMs
IGVycm9yLCByZXNwb25zZSwgZGF0YSkgOiBmYWxzZTsKK30KKworLy8gc3RhdGljCitib29sIFJl
c291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0OjptYXliZUZhbGxiYWNrU3ljaHJvbm91c2x5KGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgY3JlZGVudGlh
bHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQoreworICAgIHJldHVybiBmYWN0b3J5KCkgPyBmYWN0b3J5
KCktPm1heWJlRmFsbGJhY2tTeWNocm9ub3VzbHkocmVxdWVzdCwgY3JlZGVudGlhbHMsIGVycm9y
LCByZXNwb25zZSwgZGF0YSkgOiBmYWxzZTsKK30KKworUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRv
ckhvc3Q6OlJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0KFJlc291cmNlSGFuZGxlKiBoYW5k
bGUsIEludGVyY2VwdG9yKiBpbnRlcmNlcHRvcikKKyAgICA6IG1faGFuZGxlKGhhbmRsZSkKKyAg
ICAsIG1fY2xpZW50KDApCisgICAgLCBtX2ludGVyY2VwdFR5cGUoSU5URVJDRVBUX05PTkUpCisg
ICAgLCBtX3dhc0NhbmNlbGxlZChmYWxzZSkKKyAgICAsIG1fc3RhcnRlZEludGVyY2VwdG9yKGZh
bHNlKQorICAgICwgbV9zdGFydGVkSW50ZXJuYWwoZmFsc2UpCisgICAgLCBtX2ludGVyY2VwdG9y
KGludGVyY2VwdG9yKQoreworICAgIEFTU0VSVChoYW5kbGUpOworICAgIEFTU0VSVChpbnRlcmNl
cHRvcik7CisKKyAgICBtX2ludGVyY2VwdG9yLT5zZXRJbnRlcmNlcHRvckNsaWVudCh0aGlzKTsK
KyAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogcmVhbENsaWVudCA9IG1faGFuZGxlLT5jbGllbnRJ
bnRlcm5hbCgpOworICAgIHNldENsaWVudChyZWFsQ2xpZW50KTsKK30KKworYm9vbCBSZXNvdXJj
ZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6c3RhcnQoRnJhbWUqIGZyYW1lKQoreworICAgIEFTU0VS
VCghbV93YXNDYW5jZWxsZWQpOworCisgICAgbV9mcmFtZSA9IGZyYW1lOyAgLy8gc28gd2UgY2Fu
IHJlc3RhcnQgdGhlIGludGVybmFsIGhhbmRsZSBsYXRlciBpZiBuZWVkZWQgbGF0ZXIKKworICAg
IGlmIChtX2ludGVyY2VwdG9yLT5tYXliZUludGVyY2VwdFJlcXVlc3QobV9oYW5kbGUtPnJlcXVl
c3QoKSkpIHsKKyAgICAgICAgc3RhcnRJbnRlcmNlcHRvcihJTlRFUkNFUFRfUkVRVUVTVCwgbV9o
YW5kbGUtPnJlcXVlc3QoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIG1f
c3RhcnRlZEludGVybmFsID0gbV9oYW5kbGUtPnN0YXJ0SW50ZXJuYWwoZnJhbWUpOworICAgIHJl
dHVybiBtX3N0YXJ0ZWRJbnRlcm5hbDsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZUludGVyY2Vw
dG9ySG9zdDo6c3RhcnRJbnRlcmNlcHRvcihJbnRlcmNlcHRUeXBlIGludGVyY2VwdFR5cGUsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBBU1NFUlQoaW50ZXJjZXB0VHlw
ZSAhPSBJTlRFUkNFUFRfTk9ORSk7CisgICAgQVNTRVJUKCFtX3N0YXJ0ZWRJbnRlcmNlcHRvcik7
CisKKyAgICBtX2ludGVyY2VwdFR5cGUgPSBpbnRlcmNlcHRUeXBlOworICAgIG1fcmVzcG9uc2VE
YXRhID0gMDsKKyAgICBtX3N0YXJ0ZWRJbnRlcmNlcHRvciA9IHRydWU7CisgICAgbV9oYW5kbGUt
PnJlZigpOyAgLy8gYmFsYW5jZWQgd2hlbiB0aGUgaW50ZXJjZXB0b3IgZmluaXNoZXMgb3Igd2Un
cmUgY2FuY2VsbGVkCisKKyAgICBpZiAobV9zdGFydGVkSW50ZXJuYWwpIHsKKyAgICAgICAgLy8g
VGhlIGludGVyY2VwdG9yIGlzIHRha2luZyBvdmVyLCB3ZSBoYXZlIHRvIGdldCByaWQgb2YgdGhl
IGN1cnJlbnQKKyAgICAgICAgLy8gaW50ZXJuYWwgaGFuZGxlIGlmIGl0cyBhY3R1YWxseSBkb2lu
ZyBhbnl0aGluZyBhbmQgcmVjcmVhdGUgYSBuZXcKKyAgICAgICAgLy8gaWRsZSBpbnN0YW5jZS4K
KyAgICAgICAgbV9zdGFydGVkSW50ZXJuYWwgPSBmYWxzZTsKKyAgICAgICAgbV9oYW5kbGUtPmNh
bmNlbEludGVybmFsKCk7CisgICAgICAgIG1faGFuZGxlLT5yZWNyZWF0ZUludGVybmFsKHJlcXVl
c3QsIG1fY2xpZW50ID8gdGhpcyA6IDApOworICAgIH0KKworICAgIG1faW50ZXJjZXB0b3ItPnN0
YXJ0KCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6OmNhbmNlbCgp
Cit7CisgICAgaWYgKCFtX3dhc0NhbmNlbGxlZCkgeworICAgICAgICBtX3dhc0NhbmNlbGxlZCA9
IHRydWU7CisgICAgICAgIGlmIChpc0ludGVyY2VwdGluZygpKSB7CisgICAgICAgICAgICBpZiAo
bV9zdGFydGVkSW50ZXJjZXB0b3IpIHsKKyAgICAgICAgICAgICAgICBtX2ludGVyY2VwdG9yLT5j
YW5jZWwoKTsKKyAgICAgICAgICAgICAgICBtX3N0YXJ0ZWRJbnRlcmNlcHRvciA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIG1faGFuZGxlLT5kZXJlZigpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbV9zdGFydGVkSW50ZXJuYWwgPSBmYWxzZTsKKyAgICAg
ICAgICAgIG1faGFuZGxlLT5jYW5jZWxJbnRlcm5hbCgpOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0OjpzZXRDbGllbnQoUmVzb3VyY2VI
YW5kbGVDbGllbnQqIGNsaWVudCkKK3sKKyAgICBBU1NFUlQobV9oYW5kbGUpOworICAgIG1fY2xp
ZW50ID0gY2xpZW50OworCisgICAgLy8gQXMgZmFyIGFzIHRoZSBpbnRlcm5hbCBoYW5kbGUgaXMg
Y29uY2VybmVkLCB0aGUgaW50ZXJjZXB0b3IgaXMgdGhlCisgICAgLy8gY2xpZW50LiBJbiB0aGlz
IHdheSB3ZSBjYW4gbW9uaXRvciB0aGUgY2FsbGJhY2tzIGFuZCBpbnRlcnZlbmUgaWYKKyAgICAv
LyBkZXNpcmVkLgorICAgIG1faGFuZGxlLT5zZXRDbGllbnRJbnRlcm5hbChtX2NsaWVudCA/IHRo
aXMgOiAwKTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFJlc291cmNlSGFuZGxlSW50
ZXJjZXB0b3JIb3N0OjpidWZmZXJlZERhdGEoKQoreworICAgIGlmIChpc0ludGVyY2VwdGluZygp
KQorICAgICAgICByZXR1cm4gbV9yZXNwb25zZURhdGE7CisgICAgZWxzZQorICAgICAgICByZXR1
cm4gbV9oYW5kbGUtPmJ1ZmZlcmVkRGF0YUludGVybmFsKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VI
YW5kbGVJbnRlcmNlcHRvckhvc3Q6OmRlbGl2ZXJSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEpCit7CisgICAgQVNT
RVJUKGlzSW50ZXJjZXB0aW5nKCkgJiYgbV9zdGFydGVkSW50ZXJjZXB0b3IpOworICAgIEFTU0VS
VChkYXRhKTsKKworICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gcHJvdGVjdChtX2hhbmRsZSk7
CisgICAgbV9yZXNwb25zZURhdGEgPSBkYXRhOworICAgIGlmIChtX2NsaWVudCAmJiAhbV93YXND
YW5jZWxsZWQpCisgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UobV9oYW5kbGUs
IHJlc3BvbnNlKTsKKyAgICBpZiAobV9jbGllbnQgJiYgIW1fd2FzQ2FuY2VsbGVkKQorICAgICAg
ICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEobV9oYW5kbGUsIG1fcmVzcG9uc2VEYXRhLT5kYXRh
KCksIG1fcmVzcG9uc2VEYXRhLT5zaXplKCksIG1fcmVzcG9uc2VEYXRhLT5zaXplKCkpOworICAg
IGlmIChtX2NsaWVudCAmJiAhbV93YXNDYW5jZWxsZWQpCisgICAgICAgIG1fY2xpZW50LT5kaWRG
aW5pc2hMb2FkaW5nKG1faGFuZGxlKTsKKworICAgIG1fc3RhcnRlZEludGVyY2VwdG9yID0gZmFs
c2U7CisgICAgbV9oYW5kbGUtPmRlcmVmKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVJbnRl
cmNlcHRvckhvc3Q6OmRlbGl2ZXJFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sK
KyAgICBBU1NFUlQoaXNJbnRlcmNlcHRpbmcoKSAmJiBtX3N0YXJ0ZWRJbnRlcmNlcHRvcik7CisK
KyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKG1faGFuZGxlLCBl
cnJvcik7CisKKyAgICBtX3N0YXJ0ZWRJbnRlcmNlcHRvciA9IGZhbHNlOworICAgIG1faGFuZGxl
LT5kZXJlZigpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0OjpyZXN0
YXJ0UmVxdWVzdFdpdGhvdXRJbnRlcmNlcHRpb24oKQoreworICAgIEFTU0VSVChtX2ludGVyY2Vw
dFR5cGUgPT0gSU5URVJDRVBUX1JFUVVFU1QpOworICAgIEFTU0VSVChtX3N0YXJ0ZWRJbnRlcmNl
cHRvcik7CisKKyAgICBtX2ludGVyY2VwdFR5cGUgPSBJTlRFUkNFUFRfTk9ORTsKKyAgICBpZiAo
bV9oYW5kbGUtPnN0YXJ0SW50ZXJuYWwobV9mcmFtZS5nZXQoKSkpIHsKKyAgICAgICAgbV9zdGFy
dGVkSW50ZXJuYWwgPSB0cnVlOworICAgICAgICBtX3N0YXJ0ZWRJbnRlcmNlcHRvciA9IGZhbHNl
OworICAgICAgICBtX2hhbmRsZS0+ZGVyZWYoKTsKKyAgICB9IGVsc2UgeworICAgICAgbV9pbnRl
cmNlcHRUeXBlID0gSU5URVJDRVBUX1JFUVVFU1Q7CisgICAgICBSZXNvdXJjZUVycm9yIGVycm9y
KCJpbnRlcmNlcHRvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDUwMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9oYW5kbGUtPnJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKCkgLypsb2NhbGl6ZWQgZGVzY3JpcHRpb24q
Lyk7CisgICAgICBkZWxpdmVyRXJyb3IoZXJyb3IpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJj
ZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiBo
YW5kbGUsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVkaXJlY3RSZXNwb25zZSkKK3sKKyAgICBBU1NFUlQoaGFuZGxlID09IG1faGFuZGxlKTsKKyAg
ICBBU1NFUlQobV9jbGllbnQpOworCisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBwcm90ZWN0
KG1faGFuZGxlKTsKKworICAgIC8vIEdpdmUgdGhlIGludGVyY2VwdG9yIGEgY2hhbmNlIHRvIGVh
dCB0aGlzIHJlZGlyZWN0UmVzcG9uc2UgYW5kIHByb3ZpZGUKKyAgICAvLyBhIHJlc3BvbnNlIG9m
IGl0cyBvd24uIFRoZSB1c2UgY2FzZSBoZXJlIGlzIGFwcGNhY2hlIGZhbGxiYWNrIHJlc291cmNl
cy4KKyAgICBjb25zdCBLVVJMJiBsb2NhdGlvbiA9IHJlcXVlc3QudXJsKCk7CisgICAgaWYgKG1f
aW50ZXJjZXB0b3ItPm1heWJlSW50ZXJjZXB0UmVkaXJlY3QobG9jYXRpb24pKSB7CisgICAgICAg
IHN0YXJ0SW50ZXJjZXB0b3IoSU5URVJDRVBUX1JFRElSRUNULCBtX2hhbmRsZS0+cmVxdWVzdCgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY2xpZW50LT53aWxsU2VuZFJlcXVl
c3QoaGFuZGxlLCByZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKKworICAgIC8vIEFsc28gZ2l2
ZSB0aGUgaW50ZXJjZXB0b3IgYSBjaGFuY2UgdG8gaW50ZXJjZXB0IHRoZSByZXF1ZXN0IGZvciB0
aGUgbmV3IGxvY2F0aW9uLgorICAgIC8vIFRoaXMgdXNlIGNhc2UgaGVyZSBpcyBjYXRjaGluZyBy
ZWRpcmVjdHMgdG8gc29tZXRoaW5nIGluIGFuIGFwcGNhY2hlLgorICAgIGlmICghbV93YXNDYW5j
ZWxsZWQgJiYgbV9pbnRlcmNlcHRvci0+bWF5YmVJbnRlcmNlcHRSZXF1ZXN0KHJlcXVlc3QpKQor
ICAgICAgICBzdGFydEludGVyY2VwdG9yKElOVEVSQ0VQVF9SRVFVRVNULCByZXF1ZXN0KTsKK30K
Kwordm9pZCBSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6ZGlkUmVjZWl2ZVJlc3BvbnNl
KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQoreworICAgIEFTU0VSVChoYW5kbGUgPT0gbV9oYW5kbGUpOyAKKyAgICBBU1NFUlQobV9jbGll
bnQpOworCisgICAgaWYgKG1faW50ZXJjZXB0b3ItPm1heWJlSW50ZXJjZXB0UmVzcG9uc2UocmVz
cG9uc2UpKQorICAgICAgICBzdGFydEludGVyY2VwdG9yKElOVEVSQ0VQVF9SRVNQT05TRSwgbV9o
YW5kbGUtPnJlcXVlc3QoKSk7CisgICAgZWxzZQorICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2
ZVJlc3BvbnNlKGhhbmRsZSwgcmVzcG9uc2UpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlSW50
ZXJjZXB0b3JIb3N0OjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291
cmNlRXJyb3ImIGVycm9yKQoreworICAgIEFTU0VSVChoYW5kbGUgPT0gbV9oYW5kbGUpOyAKKyAg
ICBBU1NFUlQobV9jbGllbnQpOworICAgIAorICAgIGlmIChtX2ludGVyY2VwdG9yLT5tYXliZUlu
dGVyY2VwdEVycm9yKGVycm9yKSkKKyAgICAgICAgc3RhcnRJbnRlcmNlcHRvcihJTlRFUkNFUFRf
RVJST1IsIG1faGFuZGxlLT5yZXF1ZXN0KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9jbGllbnQt
PmRpZEZhaWwoaGFuZGxlLCBlcnJvcik7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcmNl
cHRvckhvc3Q6OmRpZFNlbmREYXRhKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIHVuc2lnbmVkIGxv
bmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQp
Cit7CisgICAgQVNTRVJUKGhhbmRsZSA9PSBtX2hhbmRsZSk7IAorICAgIEFTU0VSVChtX2NsaWVu
dCk7CisgICAgbV9jbGllbnQtPmRpZFNlbmREYXRhKGhhbmRsZSwgYnl0ZXNTZW50LCB0b3RhbEJ5
dGVzVG9CZVNlbnQpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0Ojpk
aWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBp
bnQgbGVuZ3RoLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7CisgICAgQVNTRVJUKGhhbmRsZSA9PSBt
X2hhbmRsZSk7IAorICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPmRpZFJlY2Vp
dmVEYXRhKGhhbmRsZSwgZGF0YSwgbGVuZ3RoLCBsZW5ndGhSZWNlaXZlZCk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VI
YW5kbGUqIGhhbmRsZSkKK3sKKyAgICBBU1NFUlQoaGFuZGxlID09IG1faGFuZGxlKTsgCisgICAg
QVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhoYW5kbGUp
OworfQorCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0Ojp3YXNCbG9ja2VkKFJl
c291cmNlSGFuZGxlKiBoYW5kbGUpCit7CisgICAgQVNTRVJUKGhhbmRsZSA9PSBtX2hhbmRsZSk7
IAorICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPndhc0Jsb2NrZWQoaGFuZGxl
KTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6Y2Fubm90U2hvd1VS
TChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQoreworICAgIEFTU0VSVChoYW5kbGUgPT0gbV9oYW5k
bGUpOyAKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fY2xpZW50LT5jYW5ub3RTaG93VVJM
KGhhbmRsZSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6OndpbGxD
YWNoZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIENhY2hlU3RvcmFnZVBvbGljeSYg
cG9saWN5KQoreworICAgIEFTU0VSVChoYW5kbGUgPT0gbV9oYW5kbGUpOyAKKyAgICBBU1NFUlQo
bV9jbGllbnQpOworICAgIG1fY2xpZW50LT53aWxsQ2FjaGVSZXNwb25zZShoYW5kbGUsIHBvbGlj
eSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6OnNob3VsZFVzZUNy
ZWRlbnRpYWxTdG9yYWdlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCit7CisgICAgQVNTRVJUKGhh
bmRsZSA9PSBtX2hhbmRsZSk7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICByZXR1cm4gbV9j
bGllbnQtPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKGhhbmRsZSk7Cit9CisKK3ZvaWQgUmVz
b3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYgY2hhbGxlbmdlKQoreworICAgIEFTU0VSVChoYW5kbGUgPT0gbV9oYW5kbGUpOyAKKyAgICBB
U1NFUlQobV9jbGllbnQpOworICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UoaGFuZGxlLCBjaGFsbGVuZ2UpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlSW50
ZXJjZXB0b3JIb3N0OjpkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShSZXNvdXJjZUhh
bmRsZSogaGFuZGxlLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQor
eworICAgIEFTU0VSVChoYW5kbGUgPT0gbV9oYW5kbGUpOyAKKyAgICBBU1NFUlQobV9jbGllbnQp
OworICAgIG1fY2xpZW50LT5kaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShoYW5kbGUs
IGNoYWxsZW5nZSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6OnJl
Y2VpdmVkQ2FuY2VsbGF0aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCit7CisgICAgQVNTRVJUKGhhbmRsZSA9PSBtX2hh
bmRsZSk7IAorICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPnJlY2VpdmVkQ2Fu
Y2VsbGF0aW9uKGhhbmRsZSwgY2hhbGxlbmdlKTsKK30KKworI2lmIFBMQVRGT1JNKE1BQykgICAg
ICAgIAordmlydHVhbCBOU0NhY2hlZFVSTFJlc3BvbnNlKiB3aWxsQ2FjaGVSZXNwb25zZShSZXNv
dXJjZUhhbmRsZSogaGFuZGxlLCBOU0NhY2hlZFVSTFJlc3BvbnNlKiByZXNwb25zZSkKK3sKKyAg
ICBBU1NFUlQoaGFuZGxlID09IG1faGFuZGxlKTsgCisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAg
ICBtX2NsaWVudC0+d2lsbENhY2hlUmVzcG9uc2UoaGFuZGxlLCByZXNwb25zZSk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6OndpbGxTdG9wQnVmZmVyaW5nRGF0YShS
ZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBjaGFyKmRhdGEsIGludCBsZW4pIAoreworICAg
IEFTU0VSVChoYW5kbGUgPT0gbV9oYW5kbGUpOyAKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAg
IG1fY2xpZW50LT53aWxsU3RvcEJ1ZmZlcmluZ0RhdGEoaGFuZGxlLCBkYXRhLCBsZW4pOworfQor
I2VuZGlmCisKKyNpZiBVU0UoQ0ZORVRXT1JLKQorYm9vbCBSZXNvdXJjZUhhbmRsZUludGVyY2Vw
dG9ySG9zdDo6c2hvdWxkQ2FjaGVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBDRkNh
Y2hlZFVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKQoreworICAgIEFTU0VSVChoYW5kbGUgPT0gbV9o
YW5kbGUpOyAKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIHJldHVybiBtX2NsaWVudC0+c2hv
dWxkQ2FjaGVSZXNwb25zZShoYW5kbGUsIHJlc3BvbnNlKTsKK30KKyNlbmRpZgorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBwbGF0Zm9ybVxuZXR3b3JrXFJl
c291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9s
LXN0eWxlCiAgICsgTEYKCkluZGV4OiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5k
bGVDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VI
YW5kbGVDdXJsLmNwcAkocmV2aXNpb24gNDQyMDIpCisrKyBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
UmVzb3VyY2VIYW5kbGVDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDIwICsxMDEsMjUg
QEAKICAgICBjYW5jZWwoKTsKIH0KIAotYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoRnJhbWUq
IGZyYW1lKQorYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnRJbnRlcm5hbChGcmFtZSogZnJhbWUp
CiB7CiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnNoYXJl
ZEluc3RhbmNlKCktPmFkZCh0aGlzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZXNv
dXJjZUhhbmRsZTo6Y2FuY2VsKCkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhbmNlbEludGVybmFs
KCkKIHsKICAgICBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnNoYXJlZEluc3RhbmNlKCktPmNhbmNl
bCh0aGlzKTsKIH0KIAotUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFJlc291cmNlSGFuZGxlOjpi
dWZmZXJlZERhdGEoKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6YWJhbmRvbkludGVybmFsKCkKIHsK
KyAgICBkLT4KK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFJlc291cmNlSGFuZGxlOjpi
dWZmZXJlZERhdGFJbnRlcm5hbCgpCit7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE2OSw3ICsx
NzQsNyBAQAogICAgICAgICBDVVJMY29kZSBlcnJvciA9IGN1cmxfZWFzeV9wYXVzZShkLT5tX2hh
bmRsZSwgQ1VSTFBBVVNFX0NPTlQpOwogICAgICAgICBpZiAoZXJyb3IgIT0gQ1VSTEVfT0spCiAg
ICAgICAgICAgICAvLyBSZXN0YXJ0aW5nIHRoZSBoYW5kbGUgaGFzIGZhaWxlZCBzbyBqdXN0IGNh
bmNlbCBpdC4KLSAgICAgICAgICAgIGNhbmNlbCgpOworICAgICAgICAgICAgY2FuY2VsSW50ZXJu
YWwoKTsKICAgICB9CiAjZWxzZQogICAgIGQtPm1fZGVmZXJzTG9hZGluZyA9IGRlZmVyczsKQEAg
LTE5MSw3ICsxOTYsNyBAQAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZXNvdXJjZUhh
bmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9y
JiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSwg
RnJhbWUqKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseUlu
dGVybmFsKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMg
c3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhLCBGcmFtZSopCiB7CiAgICAgV2ViQ29yZVN5
bmNocm9ub3VzTG9hZGVyIHN5bmNMb2FkZXI7CiAgICAgUmVzb3VyY2VIYW5kbGUgaGFuZGxlKHJl
cXVlc3QsICZzeW5jTG9hZGVyLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CkluZGV4OiBwbGF0Zm9ybS9u
ZXR3b3JrL0ludGVyY2VwdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9uZXR3b3JrL0lu
dGVyY2VwdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIHBsYXRmb3JtL25ldHdvcmsvSW50ZXJjZXB0
b3IuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbnRlcmNlcHRvci5oIgorCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0
LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIgIC8vIGkgd2lzaCBmcmFtZSB3YXMgbm90IGEgcGFyYW0g
dG8gc3RhcnQhIQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZJWE1FOiB0aGlzIGlzIHF1
aWNrIGFuZCBkaXJ0eSB0ZXN0IGNvZGUsIGZpbmQgYSByZWFsIHdheSB0byB0ZXN0IHRoaXMKKwor
Y2xhc3MgVGVzdEludGVyY2VwdG9yIDogcHVibGljIEludGVyY2VwdG9yIHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIGJvb2wgbWF5YmVJbnRlcmNlcHRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVz
dCYpOworICAgIHZpcnR1YWwgYm9vbCBtYXliZUludGVyY2VwdFJlZGlyZWN0KGNvbnN0IEtVUkwm
IGxvY2F0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbWF5YmVJbnRlcmNlcHRSZXNwb25zZShjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdmlydHVhbCBib29sIG1heWJlSW50ZXJjZXB0RXJy
b3IoY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpOworICAg
IHZpcnR1YWwgdm9pZCBjYW5jZWwoKTsKK3ByaXZhdGU6CisgICAgS1VSTCBtX3VybDsKKworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY2FubmVkUmVzcG9uc2VEYXRhKCk7Cit9
OworCitjbGFzcyBUZXN0SW50ZXJjZXB0b3JGYWN0b3J5IDogcHVibGljIEludGVyY2VwdG9yRmFj
dG9yeSB7CitwdWJsaWM6CisgICAgdmlydHVhbCBJbnRlcmNlcHRvciogY3JlYXRlSW50ZXJjZXB0
b3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdmlydHVhbCBib29sIG1heWJlTG9hZFN5
bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJl
c291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgbWF5YmVGYWxsYmFja1N5Y2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9u
c2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworfTsKKworSW50ZXJjZXB0b3IqIFRlc3RJbnRlcmNl
cHRvckZhY3Rvcnk6OmNyZWF0ZUludGVyY2VwdG9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKK3sKKyAgICBpZiAoKHJlcXVlc3QuaHR0cE1ldGhvZCgpICE9ICJHRVQiKSAmJiAocmVx
dWVzdC5odHRwTWV0aG9kKCkgIT0gIkhFQUQiKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp
ZiAocmVxdWVzdC51cmwoKS5xdWVyeSgpLmNvbnRhaW5zKCJpbnRlcmNlcHRfIikpCisgICAgICAg
IHJldHVybiBuZXcgVGVzdEludGVyY2VwdG9yKCk7CisKKyAgICByZXR1cm4gMDsKK30KKworYm9v
bCBUZXN0SW50ZXJjZXB0b3JGYWN0b3J5OjptYXliZUxvYWRTeW5jaHJvbm91c2x5KGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3Vy
Y2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgVGVzdEludGVyY2VwdG9yRmFjdG9yeTo6bWF5YmVGYWxsYmFja1N5Y2hyb25vdXNs
eShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJv
ciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFRlc3RJbnRlcmNlcHRvcjo6bWF5YmVJbnRlcmNlcHRSZXF1ZXN0
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBtX3VybCA9IHJlcXVlc3Qu
dXJsKCk7CisgICAgcmV0dXJuIG1fdXJsLnF1ZXJ5KCkuY29udGFpbnMoImludGVyY2VwdF9tYWlu
Iik7Cit9CisKK2Jvb2wgVGVzdEludGVyY2VwdG9yOjptYXliZUludGVyY2VwdFJlZGlyZWN0KGNv
bnN0IEtVUkwmIGxvY2F0aW9uKQoreworICAgIHJldHVybiBtX3VybC5xdWVyeSgpLmNvbnRhaW5z
KCJpbnRlcmNlcHRfcmVkaXJlY3QiKTsKK30KKworYm9vbCBUZXN0SW50ZXJjZXB0b3I6Om1heWJl
SW50ZXJjZXB0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit7CisgICAgcmV0dXJu
IG1fdXJsLnF1ZXJ5KCkuY29udGFpbnMoImludGVyY2VwdF9yZXNwb25zZSIpOworfQorCitib29s
IFRlc3RJbnRlcmNlcHRvcjo6bWF5YmVJbnRlcmNlcHRFcnJvcihjb25zdCBSZXNvdXJjZUVycm9y
JikKK3sKKyAgICByZXR1cm4gbV91cmwucXVlcnkoKS5jb250YWlucygiaW50ZXJjZXB0X2Vycm9y
Iik7Cit9CisKK3ZvaWQgVGVzdEludGVyY2VwdG9yOjpzdGFydCgpCit7CisgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gZGF0YSA9IGNhbm5lZFJlc3BvbnNlRGF0YSgpOworICAgIFJlc291cmNlUmVz
cG9uc2UgcmVzcG9uc2UobV91cmwsIFN0cmluZygidGV4dC9odG1sIiksIGRhdGEtPnNpemUoKSwg
U3RyaW5nKCksIFN0cmluZygpKTsKKyAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZSgyMDAp
OworICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KFN0cmluZygiT0siKSk7CisgICAgaW50
ZXJjZXB0b3JDbGllbnQoKS0+ZGVsaXZlclJlc3BvbnNlKHJlc3BvbnNlLCBkYXRhKTsKK30KKwor
dm9pZCBUZXN0SW50ZXJjZXB0b3I6OmNhbmNlbCgpCit7Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVk
QnVmZmVyPiBUZXN0SW50ZXJjZXB0b3I6OmNhbm5lZFJlc3BvbnNlRGF0YSgpCit7CisgICAgc3Rh
dGljIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGE7CisgICAgaWYgKCFkYXRhKQorICAgICAgICBk
YXRhID0gU2hhcmVkQnVmZmVyOjphZG9wdFZlY3RvcihTdHJpbmcoImhlbGxvIHRoZXJlIGZyb20g
aW50ZXJjZXB0IGxhbmQiKS5hc2NpaSgpKTsKKyAgICByZXR1cm4gZGF0YTsKK30KKworSW50ZXJj
ZXB0b3JGYWN0b3J5KiBnZXRUZXN0SW50ZXJjZXB0b3JGYWN0b3J5KCkKK3sKKyAgICBUZXN0SW50
ZXJjZXB0b3JGYWN0b3J5IHRlc3RGYWN0b3J5OworICAgIHJldHVybiAmdGVzdEZhY3Rvcnk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IHBsYXRmb3Jt
XG5ldHdvcmtcSW50ZXJjZXB0b3IuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUK
ICAgKyBMRgoKSW5kZXg6IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiA0
NDIwMikKKysrIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw2ICs0Miw3IEBACiAgICAgICAgICBib29sIHNob3VsZENvbnRlbnRTbmlmZiwg
Ym9vbCBtaWdodERvd25sb2FkRnJvbUhhbmRsZSkKICAgICA6IGQobmV3IFJlc291cmNlSGFuZGxl
SW50ZXJuYWwodGhpcywgcmVxdWVzdCwgY2xpZW50LCBkZWZlcnNMb2FkaW5nLCBzaG91bGRDb250
ZW50U25pZmYsIG1pZ2h0RG93bmxvYWRGcm9tSGFuZGxlKSkKIHsKKyAgICBtX2ludGVyY2VwdG9y
SG9zdC5zZXQoUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6OmNyZWF0ZUludGVyY2VwdG9y
QW5kSG9zdCh0aGlzLCByZXF1ZXN0KSk7CiB9CiAKIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+
IFJlc291cmNlSGFuZGxlOjpjcmVhdGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBS
ZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50LApAQCAtNjEsMTMgKzYyLDM1IEBACiAgICAgICAg
IG5ld0hhbmRsZS0+c2NoZWR1bGVGYWlsdXJlKEJsb2NrZWRGYWlsdXJlKTsKICAgICAgICAgcmV0
dXJuIG5ld0hhbmRsZS5yZWxlYXNlKCk7CiAgICAgfQotICAgICAgICAKKwogICAgIGlmIChuZXdI
YW5kbGUtPnN0YXJ0KGZyYW1lKSkKICAgICAgICAgcmV0dXJuIG5ld0hhbmRsZS5yZWxlYXNlKCk7
CiAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25v
dXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIGNy
ZWRlbnRpYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJj
ZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYg
ZGF0YSwgRnJhbWUqIGZyYW1lKQoreworICAgIGlmIChSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9y
SG9zdDo6bWF5YmVMb2FkU3luY2hyb25vdXNseShyZXF1ZXN0LCBjcmVkZW50aWFscywgZXJyb3Is
IHJlc3BvbnNlLCBkYXRhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseUludGVybmFsKHJlcXVlc3QsIGNyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2Us
IGRhdGEsIGZyYW1lKTsgIC8vIGRlZmluZWQgcGVyIHBsYXRmb3JtCisKKyAgICBSZXNvdXJjZUhh
bmRsZUludGVyY2VwdG9ySG9zdDo6bWF5YmVGYWxsYmFja1N5Y2hyb25vdXNseShyZXF1ZXN0LCBj
cmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKK30KKwordm9pZCBSZXNvdXJjZUhh
bmRsZTo6cmVjcmVhdGVJbnRlcm5hbChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJl
c291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQpCit7CisgICAgYm9vbCBkZWZlcnNMb2FkaW5nID0g
ZC0+bV9kZWZlcnNMb2FkaW5nOworICAgIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmID0gZC0+bV9z
aG91bGRDb250ZW50U25pZmY7CisgICAgYm9vbCBtaWdodERvd25sb2FkRnJvbUhhbmRsZSA9IGQt
Pm1fbWlnaHREb3dubG9hZEZyb21IYW5kbGU7CisgICAgc2V0Q2xpZW50SW50ZXJuYWwoMCk7Cisg
ICAgY2FuY2VsSW50ZXJuYWwoKTsgICAvLyBkZWZpbmVkIHBlciBwbGF0Zm9ybQorICAgIGFiYW5k
b25JbnRlcm5hbCgpOyAgLy8gZGVmaW5lZCBwZXIgcGxhdGZvcm0KKyAgICBkLnNldChuZXcgUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbCh0aGlzLCByZXF1ZXN0LCBjbGllbnQsIGRlZmVyc0xvYWRpbmcs
IHNob3VsZENvbnRlbnRTbmlmZiwgbWlnaHREb3dubG9hZEZyb21IYW5kbGUpKTsKK30KKwogdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6c2NoZWR1bGVGYWlsdXJlKEZhaWx1cmVUeXBlIHR5cGUpCiB7CiAg
ICAgZC0+bV9mYWlsdXJlVHlwZSA9IHR5cGU7CkBAIC05MSwxMyArMTE0LDUzIEBACiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KEZyYW1l
KiBmcmFtZSkKK3sKKyAgICBpZiAobV9pbnRlcmNlcHRvckhvc3QpCisgICAgICAgIHJldHVybiBt
X2ludGVyY2VwdG9ySG9zdC0+c3RhcnQoZnJhbWUpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJu
IHN0YXJ0SW50ZXJuYWwoZnJhbWUpOyAgLy8gZGVmaW5lZCBwZXIgcGxhdGZvcm0KK30KKwordm9p
ZCBSZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKCkKK3sKKyAgICBpZiAobV9pbnRlcmNlcHRvckhvc3Qp
CisgICAgICAgIG1faW50ZXJjZXB0b3JIb3N0LT5jYW5jZWwoKTsKKyAgICBlbHNlCisgICAgICAg
IGNhbmNlbEludGVybmFsKCk7ICAvLyBkZWZpbmVkIHBlciBwbGF0Zm9ybQorfQorCiBSZXNvdXJj
ZUhhbmRsZUNsaWVudCogUmVzb3VyY2VIYW5kbGU6OmNsaWVudCgpIGNvbnN0CiB7CisgICAgaWYg
KG1faW50ZXJjZXB0b3JIb3N0KQorICAgICAgICByZXR1cm4gbV9pbnRlcmNlcHRvckhvc3QtPmNs
aWVudCgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGNsaWVudEludGVybmFsKCk7Cit9CisK
K1Jlc291cmNlSGFuZGxlQ2xpZW50KiBSZXNvdXJjZUhhbmRsZTo6Y2xpZW50SW50ZXJuYWwoKSBj
b25zdAorewogICAgIHJldHVybiBkLT5tX2NsaWVudDsKIH0KIAorUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IFJlc291cmNlSGFuZGxlOjpidWZmZXJlZERhdGEoKQoreworICAgIGlmIChtX2ludGVy
Y2VwdG9ySG9zdCkKKyAgICAgICAgcmV0dXJuIG1faW50ZXJjZXB0b3JIb3N0LT5idWZmZXJlZERh
dGEoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBidWZmZXJlZERhdGFJbnRlcm5hbCgpOyAg
Ly8gZGVmaW5lZCBwZXIgcGxhdGZvcm0KK30KKwogdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0Q2xp
ZW50KFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQpCiB7CisgICAgaWYgKG1faW50ZXJjZXB0
b3JIb3N0KQorICAgICAgICBtX2ludGVyY2VwdG9ySG9zdC0+c2V0Q2xpZW50KGNsaWVudCk7Cisg
ICAgZWxzZQorICAgICAgICBzZXRDbGllbnRJbnRlcm5hbChjbGllbnQpOworfQorCit2b2lkIFJl
c291cmNlSGFuZGxlOjpzZXRDbGllbnRJbnRlcm5hbChSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xp
ZW50KQorewogICAgIGQtPm1fY2xpZW50ID0gY2xpZW50OwogfQogCkluZGV4OiBwbGF0Zm9ybS9u
ZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3Jt
L25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAJKHJldmlzaW9uIDQ0MjAyKQorKysg
cGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTMxLDcgKzEzMSw3IEBACiAKICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gZGlkUmVj
ZWl2ZVJlc3BvbnNlKGNvbm49JXAsIGhhbmRsZT0lcCkgKCVzKSIsIGNvbm4sIGhhbmRsZSwgaGFu
ZGxlLT5yZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBpZiAo
IWhhbmRsZS0+Y2xpZW50KCkpCisgICAgaWYgKCFoYW5kbGUtPmNsaWVudEludGVybmFsKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmICghQ0ZVUkxSZXNwb25zZUdldE1JTUVUeXBlKGNmUmVz
cG9uc2UpKSB7CkBAIC0xNDAsNyArMTQwLDcgQEAKICAgICAgICAgc2V0RGVmYXVsdE1JTUVUeXBl
KGNmUmVzcG9uc2UpOwogICAgIH0KICAgICAKLSAgICBoYW5kbGUtPmNsaWVudCgpLT5kaWRSZWNl
aXZlUmVzcG9uc2UoaGFuZGxlLCBjZlJlc3BvbnNlKTsKKyAgICBoYW5kbGUtPmNsaWVudEludGVy
bmFsKCktPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUsIGNmUmVzcG9uc2UpOwogfQogCiB2b2lk
IGRpZFJlY2VpdmVEYXRhKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRkRhdGFSZWYgZGF0YSwg
Q0ZJbmRleCBvcmlnaW5hbExlbmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykgCkBAIC0xNTEs
MTYgKzE1MSwxNiBAQAogCiAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIGRpZFJlY2VpdmVEYXRh
KGNvbm49JXAsIGhhbmRsZT0lcCwgYnl0ZXM9JWQpICglcykiLCBjb25uLCBoYW5kbGUsIGxlbmd0
aCwgaGFuZGxlLT5yZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKLSAg
ICBpZiAoaGFuZGxlLT5jbGllbnQoKSkKLSAgICAgICAgaGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVj
ZWl2ZURhdGEoaGFuZGxlLCAoY29uc3QgY2hhciopYnl0ZXMsIGxlbmd0aCwgb3JpZ2luYWxMZW5n
dGgpOworICAgIGlmIChoYW5kbGUtPmNsaWVudEludGVybmFsKCkpCisgICAgICAgIGhhbmRsZS0+
Y2xpZW50SW50ZXJuYWwoKS0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLCAoY29uc3QgY2hhciopYnl0
ZXMsIGxlbmd0aCwgb3JpZ2luYWxMZW5ndGgpOwogfQogCiBzdGF0aWMgdm9pZCBkaWRTZW5kQm9k
eURhdGEoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGSW5kZXggYnl0ZXNXcml0dGVuLCBDRklu
ZGV4IHRvdGFsQnl0ZXNXcml0dGVuLCBDRkluZGV4IHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGUs
IGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCiB7CiAgICAgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSA9
IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5m
bykpOwotICAgIGlmICghaGFuZGxlIHx8ICFoYW5kbGUtPmNsaWVudCgpKQorICAgIGlmICghaGFu
ZGxlIHx8ICFoYW5kbGUtPmNsaWVudEludGVybmFsKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBo
YW5kbGUtPmNsaWVudCgpLT5kaWRTZW5kRGF0YShoYW5kbGUsIHRvdGFsQnl0ZXNXcml0dGVuLCB0
b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRlKTsKKyAgICBoYW5kbGUtPmNsaWVudEludGVybmFsKCkt
PmRpZFNlbmREYXRhKGhhbmRsZSwgdG90YWxCeXRlc1dyaXR0ZW4sIHRvdGFsQnl0ZXNFeHBlY3Rl
ZFRvV3JpdGUpOwogfQogCiBzdGF0aWMgQm9vbGVhbiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZUNhbGxiYWNrKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQpAQCAtMTgxLDggKzE4MSw4IEBACiAKICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gZGlkRmlu
aXNoTG9hZGluZyhjb25uPSVwLCBoYW5kbGU9JXApICglcykiLCBjb25uLCBoYW5kbGUsIGhhbmRs
ZS0+cmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgaWYgKGhh
bmRsZS0+Y2xpZW50KCkpCi0gICAgICAgIGhhbmRsZS0+Y2xpZW50KCktPmRpZEZpbmlzaExvYWRp
bmcoaGFuZGxlKTsKKyAgICBpZiAoaGFuZGxlLT5jbGllbnRJbnRlcm5hbCgpKQorICAgICAgICBo
YW5kbGUtPmNsaWVudEludGVybmFsKCktPmRpZEZpbmlzaExvYWRpbmcoaGFuZGxlKTsKIH0KIAog
dm9pZCBkaWRGYWlsKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRkVycm9yUmVmIGVycm9yLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKSAKQEAgLTE5MSwyMSArMTkxLDIxIEBACiAKICAgICBMT0co
TmV0d29yaywgIkNGTmV0IC0gZGlkRmFpbChjb25uPSVwLCBoYW5kbGU9JXAsIGVycm9yID0gJXAp
ICglcykiLCBjb25uLCBoYW5kbGUsIGVycm9yLCBoYW5kbGUtPnJlcXVlc3QoKS51cmwoKS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIGlmIChoYW5kbGUtPmNsaWVudCgpKQotICAgICAg
ICBoYW5kbGUtPmNsaWVudCgpLT5kaWRGYWlsKGhhbmRsZSwgUmVzb3VyY2VFcnJvcihlcnJvcikp
OworICAgIGlmIChoYW5kbGUtPmNsaWVudEludGVybmFsKCkpCisgICAgICAgIGhhbmRsZS0+Y2xp
ZW50SW50ZXJuYWwoKS0+ZGlkRmFpbChoYW5kbGUsIFJlc291cmNlRXJyb3IoZXJyb3IpKTsKIH0K
IAogQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiB3aWxsQ2FjaGVSZXNwb25zZShDRlVSTENvbm5lY3Rp
b25SZWYgY29ubiwgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiBjYWNoZWRSZXNwb25zZSwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykgCiB7CiAgICAgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSA9IHN0YXRp
Y19jYXN0PFJlc291cmNlSGFuZGxlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwog
Ci0gICAgaWYgKGhhbmRsZS0+Y2xpZW50KCkgJiYgIWhhbmRsZS0+Y2xpZW50KCktPnNob3VsZENh
Y2hlUmVzcG9uc2UoaGFuZGxlLCBjYWNoZWRSZXNwb25zZSkpCisgICAgaWYgKGhhbmRsZS0+Y2xp
ZW50SW50ZXJuYWwoKSAmJiAhaGFuZGxlLT5jbGllbnRJbnRlcm5hbCgpLT5zaG91bGRDYWNoZVJl
c3BvbnNlKGhhbmRsZSwgY2FjaGVkUmVzcG9uc2UpKQogICAgICAgICByZXR1cm4gMDsKIAogICAg
IENhY2hlU3RvcmFnZVBvbGljeSBwb2xpY3kgPSBzdGF0aWNfY2FzdDxDYWNoZVN0b3JhZ2VQb2xp
Y3k+KENGQ2FjaGVkVVJMUmVzcG9uc2VHZXRTdG9yYWdlUG9saWN5KGNhY2hlZFJlc3BvbnNlKSk7
CiAKLSAgICBpZiAoaGFuZGxlLT5jbGllbnQoKSkKLSAgICAgICAgaGFuZGxlLT5jbGllbnQoKS0+
d2lsbENhY2hlUmVzcG9uc2UoaGFuZGxlLCBwb2xpY3kpOworICAgIGlmIChoYW5kbGUtPmNsaWVu
dEludGVybmFsKCkpCisgICAgICAgIGhhbmRsZS0+Y2xpZW50SW50ZXJuYWwoKS0+d2lsbENhY2hl
UmVzcG9uc2UoaGFuZGxlLCBwb2xpY3kpOwogCiAgICAgaWYgKHN0YXRpY19jYXN0PENGVVJMQ2Fj
aGVTdG9yYWdlUG9saWN5Pihwb2xpY3kpICE9IENGQ2FjaGVkVVJMUmVzcG9uc2VHZXRTdG9yYWdl
UG9saWN5KGNhY2hlZFJlc3BvbnNlKSkKICAgICAgICAgY2FjaGVkUmVzcG9uc2UgPSBDRkNhY2hl
ZFVSTFJlc3BvbnNlQ3JlYXRlV2l0aFVzZXJJbmZvKGtDRkFsbG9jYXRvckRlZmF1bHQsIApAQCAt
MzQxLDcgKzM0MSw3IEBACiAgICAgcmV0dXJuIG5ld1JlcXVlc3Q7CiB9CiAKLWJvb2wgUmVzb3Vy
Y2VIYW5kbGU6OnN0YXJ0KEZyYW1lKiBmcmFtZSkKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0
SW50ZXJuYWwoRnJhbWUqIGZyYW1lKQogewogICAgIC8vIElmIHdlIGFyZSBubyBsb25nZXIgYXR0
YWNoZWQgdG8gYSBQYWdlLCB0aGlzIG11c3QgYmUgYW4gYXR0ZW1wdGVkIGxvYWQgZnJvbSBhbgog
ICAgIC8vIG9uVW5sb2FkIGhhbmRsZXIsIHNvIGxldCdzIGp1c3QgYmxvY2sgaXQuCkBAIC0zNzEs
NyArMzcxLDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6
Y2FuY2VsKCkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhbmNlbEludGVybmFsKCkKIHsKICAgICBp
ZiAoZC0+bV9jb25uZWN0aW9uKSB7CiAgICAgICAgIENGVVJMQ29ubmVjdGlvbkNhbmNlbChkLT5t
X2Nvbm5lY3Rpb24uZ2V0KCkpOwpAQCAtMzc5LDggKzM3OSwxNSBAQAogICAgIH0KIH0KIAotUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IFJlc291cmNlSGFuZGxlOjpidWZmZXJlZERhdGEoKQordm9p
ZCBSZXNvdXJjZUhhbmRsZTo6YWJhbmRvbkludGVybmFsKCkKIHsKKyAgICBBU1NFUlQoIWQtPm1f
Y29ubmVjdGlvbik7ICAvLyB1bmV4cGVjdGVkIHVubGVzcyB3ZSd2ZSBiZWVuIGNhbmNlbGVkIG9y
IG5ldmVyIHN0YXJ0ZWQKKyAgICBkLnNldCgwKTsKK30KKworCitQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gUmVzb3VyY2VIYW5kbGU6OmJ1ZmZlcmVkRGF0YUludGVybmFsKCkKK3sKICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTM5NywxNCArNDA0LDE1IEBA
CiAgICAgZC0+bV9wYXNzID0gdXJsLnBhc3MoKTsKICAgICByZXF1ZXN0LnJlbW92ZUNyZWRlbnRp
YWxzKCk7CiAKLSAgICBjbGllbnQoKS0+d2lsbFNlbmRSZXF1ZXN0KHRoaXMsIHJlcXVlc3QsIHJl
ZGlyZWN0UmVzcG9uc2UpOworICAgIGlmIChjbGllbnRJbnRlcm5hbCgpKQorICAgICAgICBjbGll
bnRJbnRlcm5hbCgpLT53aWxsU2VuZFJlcXVlc3QodGhpcywgcmVxdWVzdCwgcmVkaXJlY3RSZXNw
b25zZSk7CiB9CiAKIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9y
YWdlKCkKIHsKICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gc2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UoKSIpOwotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudCgpLT5z
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSh0aGlzKTsKKyAgICBpZiAoY2xpZW50SW50ZXJuYWwo
KSkKKyAgICAgICAgcmV0dXJuIGNsaWVudEludGVybmFsKCktPnNob3VsZFVzZUNyZWRlbnRpYWxT
dG9yYWdlKHRoaXMpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNDMxLDcgKzQzOSw3IEBA
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWNoYWxsZW5nZS5wcmV2aW91c0Zh
aWx1cmVDb3VudCgpICYmICghY2xpZW50KCkgfHwgY2xpZW50KCktPnNob3VsZFVzZUNyZWRlbnRp
YWxTdG9yYWdlKHRoaXMpKSkgeworICAgIGlmICghY2hhbGxlbmdlLnByZXZpb3VzRmFpbHVyZUNv
dW50KCkgJiYgKCFjbGllbnRJbnRlcm5hbCgpIHx8IGNsaWVudEludGVybmFsKCktPnNob3VsZFVz
ZUNyZWRlbnRpYWxTdG9yYWdlKHRoaXMpKSkgewogICAgICAgICBDRlVSTENyZWRlbnRpYWxSZWYg
Y3JlZGVudGlhbCA9IFdlYkNvcmVDcmVkZW50aWFsU3RvcmFnZTo6Z2V0KENGVVJMQXV0aENoYWxs
ZW5nZUdldFByb3RlY3Rpb25TcGFjZShjaGFsbGVuZ2UuY2ZVUkxBdXRoQ2hhbGxlbmdlUmVmKCkp
KTsKICAgICAgICAgaWYgKGNyZWRlbnRpYWwpIHsKICAgICAgICAgICAgIEFTU0VSVChDRlVSTENy
ZWRlbnRpYWxHZXRQZXJzaXN0ZW5jZShjcmVkZW50aWFsKSA9PSBrQ0ZVUkxDcmVkZW50aWFsUGVy
c2lzdGVuY2VOb25lKTsKQEAgLTQ0Myw4ICs0NTEsOCBAQAogICAgIGQtPm1fY3VycmVudENGQ2hh
bGxlbmdlID0gY2hhbGxlbmdlLmNmVVJMQXV0aENoYWxsZW5nZVJlZigpOwogICAgIGQtPm1fY3Vy
cmVudFdlYkNoYWxsZW5nZSA9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGQtPm1fY3VycmVudENG
Q2hhbGxlbmdlLCB0aGlzKTsKICAgICAKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVu
dCgpLT5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UodGhpcywgZC0+bV9jdXJyZW50
V2ViQ2hhbGxlbmdlKTsKKyAgICBpZiAoY2xpZW50SW50ZXJuYWwoKSkKKyAgICAgICAgY2xpZW50
SW50ZXJuYWwoKS0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHRoaXMsIGQtPm1f
Y3VycmVudFdlYkNoYWxsZW5nZSk7CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVk
Q3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBjb25z
dCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQpAQCAtNDg5LDggKzQ5Nyw4IEBACiAgICAgaWYgKGNo
YWxsZW5nZSAhPSBkLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2UpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPnJlY2VpdmVkQ2FuY2VsbGF0aW9u
KHRoaXMsIGNoYWxsZW5nZSk7CisgICAgaWYgKGNsaWVudEludGVybmFsKCkpCisgICAgICAgIGNs
aWVudEludGVybmFsKCktPnJlY2VpdmVkQ2FuY2VsbGF0aW9uKHRoaXMsIGNoYWxsZW5nZSk7CiB9
CiAKIENGVVJMQ29ubmVjdGlvblJlZiBSZXNvdXJjZUhhbmRsZTo6Y29ubmVjdGlvbigpIGNvbnN0
CkBAIC01MDQsNyArNTEyLDcgQEAKICAgICByZXR1cm4gZC0+bV9jb25uZWN0aW9uLnJlbGVhc2VS
ZWYoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3Jl
ZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UsIFZlY3RvcjxjaGFyPiYgdmVjdG9yLCBGcmFtZSopCit2b2lkIFJlc291cmNlSGFuZGxl
Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5SW50ZXJuYWwoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VF
cnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIHZl
Y3RvciwgRnJhbWUqKQogewogICAgIEFTU0VSVCghcmVxdWVzdC5pc0VtcHR5KCkpOwogCkluZGV4
OiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdC5o
CShyZXZpc2lvbiAwKQorKysgcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVyY2Vw
dG9ySG9zdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVzb3Vy
Y2VIYW5kbGVJbnRlcmNlcHRvckhvc3RfaAorI2RlZmluZSBSZXNvdXJjZUhhbmRsZUludGVyY2Vw
dG9ySG9zdF9oCisKKyNpbmNsdWRlICJJbnRlcmNlcHRvci5oIgorI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBJbnRlcmNlcHRvcjsKK2NsYXNzIEludGVyY2VwdG9yQ2xpZW50
OworY2xhc3MgSW50ZXJjZXB0b3JGYWN0b3J5OworCisvLyBBIGhlbHBlciBjbGFzcyB1c2VkIGJ5
IFJlc291cmNlSGFuZGxlIHRvIG1lZGlhdGUgYmV0d2VlbiBhbiBpbnRlcm5hbCByZXNvdXJjZQor
Ly8gaGFuZGxlLCBhbiBpbnRlcmNlcHRvciwgYW5kIHRoZSByZXNvdXJjZSBoYW5kbGUgY2xpZW50
LiBUaGlzIGNsYXNzIGlzIHNldCBhcworLy8gdGhlIGNsaWVudCBvZiB0aGUgaW50ZXJuYWwgaGFu
ZGxlLiBBcyBjYWxsYmFja3Mgb2NjdXIsIHRoZSBob3N0IGFsbG93cyBhbgorLy8gaW50ZXJjZXB0
b3IgdG8gaW50ZXJ2ZW5lIGJ5IGNhbGxpbmcgdGhlIHZhcmlvcyBtYXliZUludGVyY2VwdCBtZXRo
b2RzLgorLy8gU2VlIFJlc291cmNlSGFuZGxlIGZvciBkZXRhaWxzIG9mIGhvdyB0aGlzIGNsYXNz
IGlzIHVzZWQuCitjbGFzcyBSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdCA6IHByb3RlY3Rl
ZCBJbnRlcmNlcHRvckNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvdGVjdGVkIFJlc291cmNlSGFuZGxlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICAvLyBSZXNv
dXJjZUhhbmRsZSBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIGludGVyY2VwdG9yIGZhY3RvcnkuCisg
ICAgc3RhdGljIHZvaWQgc2V0SW50ZXJjZXB0b3JGYWN0b3J5KEludGVyY2VwdG9yRmFjdG9yeSog
ZmFjdG9yeSk7CisKK3ByaXZhdGU6CisgICAgLy8gVGhpcyBjbGFzcyBpcyBhbiBpbXBsZW1lbnRh
dGlvbiBkZXRhaWwgb2YgUmVzb3VyY2VIYW5kbGUKKyAgICBmcmllbmQgUmVzb3VyY2VIYW5kbGU7
CisKKyAgICAvLyBSZXR1cm5zIGFuIGludGVyY2VwdG9yIGhvc3QgZm9yIGFuIGFzeW5jIHJlcXVl
c3QsIGl0IG1heSByZXR1cm4gMAorICAgIHN0YXRpYyBSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9y
SG9zdCogY3JlYXRlSW50ZXJjZXB0b3JBbmRIb3N0KFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0Jik7CisKKyAgICAvLyBGSVhNRTogU3luY2hyb25vdXMgaW50ZXJjZXB0aW9u
IGhhcyBubyBvcHBvcnR1bml0eSB0byBpbnRlcmNlcHQgaW50ZXJtaWRhaXJ5IHJlZGlyZWN0cwor
ICAgIHN0YXRpYyBib29sIG1heWJlTG9hZFN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNl
JiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICBzdGF0aWMgYm9vbCBtYXliZUZhbGxiYWNrU3lj
aHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzLCBSZXNv
dXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7CisKKwor
ICAgIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0KFJlc291cmNlSGFuZGxlKiBoYW5kbGUs
IEludGVyY2VwdG9yKiBpbnRlcmNlcHRvcik7CisKKyAgICBlbnVtIEludGVyY2VwdFR5cGUgewor
ICAgICAgICBJTlRFUkNFUFRfTk9ORSwKKyAgICAgICAgSU5URVJDRVBUX1JFUVVFU1QsCisgICAg
ICAgIElOVEVSQ0VQVF9SRURJUkVDVCwKKyAgICAgICAgSU5URVJDRVBUX1JFU1BPTlNFLAorICAg
ICAgICBJTlRFUkNFUFRfRVJST1IKKyAgICB9OworCisgICAgLy8gTWV0aG9kcyBjYWxsZWQgYnkg
dGhlIFJlc291cmNlSGFuZGxlIGRpcmVjdGx5CisgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNs
aWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CisgICAgdm9pZCBzZXRDbGllbnQoUmVz
b3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCk7CisgICAgYm9vbCBzdGFydChGcmFtZSopOworICAg
IHZvaWQgY2FuY2VsKCk7CisgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcmVkRGF0
YSgpOworCisgICAgLy8gSGVscGVycyB1c2VkIGludGVybmFsbHkgYnkgdGhpcyBjbGFzcywgc2hv
dWxkIG5vdCBiZSBjYWxsZWQgYnkgUmVzb3VyY2VIYW5kbGUKKyAgICB2b2lkIHN0YXJ0SW50ZXJj
ZXB0b3IoSW50ZXJjZXB0VHlwZSBpbnRlcmNlcHRUeXBlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
KTsKKyAgICBib29sIGlzSW50ZXJjZXB0aW5nKCkgeyByZXR1cm4gbV9pbnRlcmNlcHRUeXBlICE9
IElOVEVSQ0VQVF9OT05FOyB9CisKKyAgICAvLyBJbnRlcmNlcHRvckNsaWVudCBpbXBsLCBjYWxs
ZWQgYnkgdGhlIGludGVyY2VwdG9yIGJlaW5nIGhvc3RlZC4KKyAgICB2aXJ0dWFsIHZvaWQgZGVs
aXZlclJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gZGF0YSk7CisgICAgdmlydHVhbCB2b2lkIGRlbGl2ZXJFcnJvcihjb25z
dCBSZXNvdXJjZUVycm9yJiBlcnJvcik7CisgICAgdmlydHVhbCB2b2lkIHJlc3RhcnRSZXF1ZXN0
V2l0aG91dEludGVyY2VwdGlvbigpOworCisgICAgLy8gUmVzb3VyY2VIYW5kbGVDbGllbnQgaW1w
bAorICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCBieSB0aGUgaW50ZXJuYWwgcmVzb3Vy
Y2UgaGFuZGxlLgorICAgIC8vIFRoaXMgY2xhc3MgZ2VuZXJhbGx5IHBhc3NlcyBtZXRob2QgY2Fs
bHMgdGhydSB0byB0aGUgcmVhbCBjbGllbnQsCisgICAgLy8gd2l0aCBhIGNvdXBsZSBvZiBleGNl
cHRpb25zLgorICAgIC8vIDEpIFdoZW4gYSByZWRpcmVjdCByZXNwb25zZSBpcyByZWNlaXZlZCwg
cHJpb3IgdG8gY2FsbGluZyB0aHJ1IHRvIHRoZSByZWFsCisgICAgLy8gY2xpZW50LCB0aGUgbWF5
YmVJbnRlcmNlcHRSZWRpcmVjdCBtZXRob2QgaXMgY2FsbGVkIHRvIGFsbG93IGhpamFja2luZwor
ICAgIC8vIGF0IHRoYXQgcG9pbnQuCisgICAgLy8gMikgV2hlbiB0aGUgZmluYWwgcmVwc29uc2Ug
aXMgcmVjaWV2ZWQsIHByaW9yIHRvIGNhbGxpbmcgdGhydSB0byB0aGUgcmVhbAorICAgIC8vIGNs
aWVudCwgdGhlIG1heWJlSW50ZXJjZXB0UmVzb25zZSBtZXRob2QgaXMgY2FsbGVkIHRvIGFsbG93
IGhpamFja2luZworICAgIC8vIGF0IHRoYXQgcG9pbnQuCisgICAgdmlydHVhbCB2b2lkIHdpbGxT
ZW5kUmVxdWVzdChSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBSZXNvdXJjZVJlcXVlc3QmIHJlcSwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CisgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEoUmVzb3VyY2VIYW5kbGUqLCB1
bnNpZ25lZCBsb25nIGxvbmcgLypieXRlc1NlbnQqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qdG90
YWxCeXRlc1RvQmVTZW50Ki8pOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZXNv
dXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBpbnQsIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKik7CisgICAg
dmlydHVhbCB2b2lkIGRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9y
Jik7CisgICAgdmlydHVhbCB2b2lkIHdhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgY2Fubm90U2hvd1VSTChSZXNvdXJjZUhhbmRsZSopOworICAgIHZpcnR1YWwg
dm9pZCB3aWxsQ2FjaGVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIENhY2hlU3RvcmFnZVBvbGlj
eSYpOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShSZXNvdXJj
ZUhhbmRsZSopOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShSZXNvdXJj
ZUhhbmRsZSosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CisgICAgdmlydHVhbCB2
b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKFJlc291cmNlSGFuZGxlKiwgY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmKTsKKyNpZiBQTEFURk9STShNQUMpICAgICAgICAKKyAgICB2aXJ0dWFs
IE5TQ2FjaGVkVVJMUmVzcG9uc2UqIHdpbGxDYWNoZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwg
TlNDYWNoZWRVUkxSZXNwb25zZSogcmVzcG9uc2UpOworICAgIHZpcnR1YWwgdm9pZCB3aWxsU3Rv
cEJ1ZmZlcmluZ0RhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50KTsKKyNlbmRp
ZgorI2lmIFVTRShDRk5FVFdPUkspCisgICAgdmlydHVhbCBib29sIHNob3VsZENhY2hlUmVzcG9u
c2UoUmVzb3VyY2VIYW5kbGUqLCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKTsKKyNl
bmRpZgorCisgICAgUmVzb3VyY2VIYW5kbGUqIG1faGFuZGxlOworICAgIFJlc291cmNlSGFuZGxl
Q2xpZW50KiBtX2NsaWVudDsKKyAgICBJbnRlcmNlcHRUeXBlIG1faW50ZXJjZXB0VHlwZTsKKyAg
ICBib29sIG1fd2FzQ2FuY2VsbGVkOworICAgIGJvb2wgbV9zdGFydGVkSW50ZXJjZXB0b3I7Cisg
ICAgYm9vbCBtX3N0YXJ0ZWRJbnRlcm5hbDsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX3Jl
c3BvbnNlRGF0YTsKKyAgICBPd25QdHI8SW50ZXJjZXB0b3I+IG1faW50ZXJjZXB0b3I7CisgICAg
UmVmUHRyPEZyYW1lPiBtX2ZyYW1lOworfTsgCisKK30KKworI2VuZGlmIC8vIFJlc291cmNlSGFu
ZGxlX2gKClByb3BlcnR5IGNoYW5nZXMgb246IHBsYXRmb3JtXG5ldHdvcmtcUmVzb3VyY2VIYW5k
bGVJbnRlcmNlcHRvckhvc3QuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsg
TEYKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31813</attachid>
            <date>2009-06-24 15:16:30 -0700</date>
            <delta_ts>2009-07-01 09:49:40 -0700</delta_ts>
            <desc>Interceptor (rev2)</desc>
            <filename>issue146038_29.rev2.diff</filename>
            <type>text/plain</type>
            <size>70927</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IHBsYXRmb3JtL25ldHdvcmsvSW50ZXJjZXB0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0
Zm9ybS9uZXR3b3JrL0ludGVyY2VwdG9yLmgJKHJldmlzaW9uIDApCisrKyBwbGF0Zm9ybS9uZXR3
b3JrL0ludGVyY2VwdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBJbnRlcmNlcHRvcl9oCisjZGVmaW5lIEludGVyY2VwdG9yX2gKKworI2luY2x1ZGUgIlJlc291
cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnRlcmNlcHRvcjsKK2NsYXNzIEludGVyY2VwdG9yQ2xp
ZW50OworY2xhc3MgSW50ZXJjZXB0b3JGYWN0b3J5OworCisKKy8vIEludGVyZmFjZSB1c2VkIGFu
ZCBpbnRlcmNlcHRvciByZXNwb25zZXMgZm9yIGRlbGl2ZXJ5IGJhY2sgdG8gdGhlIGNsaWVudC4K
K2NsYXNzIEludGVyY2VwdG9yQ2xpZW50IHsKK3B1YmxpYzoKKyAgICAvLyBDYWxsZWQgYnkgYW4g
aW50ZXJjZXB0b3IgdG8gc2NoZWR1bGUgYSByZXNwb25zZSBmb3IgZGVsaXZlcnkgYmFjayB0bwor
ICAgIC8vIHRoZSBjbGllbnQuIEl0IGlzIGFuIGVycm9yIHRvIGNhbGwgd2l0aG91dCBoYXZpbmcg
YmVlbiBzdGFydGVkLgorICAgIHZpcnR1YWwgdm9pZCBkZWxpdmVyUmVzcG9uc2UoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhKSA9
IDA7CisKKyAgICAvLyBDYWxsZWQgYnkgYW4gaW50ZXJjZXB0b3IgdG8gc2NoZWR1bGUgYW4gZXJy
b3IgZm9yIGRlbGl2ZXJ5IGJhY2sgdG8KKyAgICAvLyB0aGUgY2xpZW50LiBJdCBpcyBhbiBlcnJv
ciB0byBjYWxsIHdpdGhvdXQgaGF2aW5nIGJlZW4gc3RhcnRlZC4KKyAgICB2aXJ0dWFsIHZvaWQg
ZGVsaXZlckVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKSA9IDA7CisKKyAgICAvLyBD
YWxsZWQgYnkgYW4gaW50ZXJjZXB0b3IgdG8gcmVzdGFydCB0aGUgbG9hZCB0aGlzIHRpbWUgd2l0
b3V0IGludGVyY2VwdGlvbi4KKyAgICAvLyBJdCBpcyBhbiBlcnJvciB0byBjYWxsIHdpdGhvdXQg
aGF2aW5nIGJlZW4gc3RhcnRlZCB0byBpbnRlcmNlcHQgYSByZXF1ZXN0LgorICAgIC8vIFRvIGNs
YXJpZnksIHRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGFmdGVyIGhhdmluZyBiZWVu
IHN0YXJ0ZWQgdG8KKyAgICAvLyBpbnRlcmNlcHQgYSByZWRpcmVjdCBvciByZXNwb25zZSwgaXRz
IG9ubHkgdmFsaWQgdG8gY2FsbCBpbiB0aGUKKyAgICAvLyBtYXliZUludGVyY2VwdFJlcXVlc3Qg
Y2FzZSBzcGVjaWZpY2FsbHkuCisgICAgdmlydHVhbCB2b2lkIHJlc3RhcnRSZXF1ZXN0V2l0aG91
dEludGVyY2VwdGlvbigpID0gMDsKK307CisKKy8vIEFuIGludGVyY2VwdG9yIGNhbiBwcmUtZW1w
dGl2ZWx5IGhpamFjayByZXNvdXJjZSBsb2FkcyBhbmQKKy8vIHByb3ZpZGUgZGF0YSBvZiBpdHMg
b3duIGluc3RlYWQgb2YgYWN0dWFsbHkgZ29pbmcgdG8gdGhlIG5ldHdvcmsuIEFuCisvLyBpbnRl
cmNlcHRvciBjYW4gYWxzbyBoaWphY2sgaW50ZXJtZWRpYXJ5IHJlZGlyZWN0IHJlc3BvbnNlcyBv
ciB0aGUgZmluYWwKKy8vIHJlc3BvbnNlLCByZXBsYWNpbmcgdGhvc2UgcmVzcG9uc2VzIHdpdGgg
aXRzIG93biBkYXRhIGluc3RlYWQuCisvLworLy8gSW50ZXJjZXB0aW9uIGlzIHRyYW5zcGFyZW50
IHRvIGNsaWVudHMgb2YgdGhlIFJlc291cmNlSGFuZGxlIGNsYXNzLiBDbGllbnRzCisvLyBjYW4n
dCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHJlc3BvbnNlcyByZXRyaWV2ZWQgZnJvbSB0aGUgbmV0d29y
ayBhbmQKKy8vIGludGVyY2VwdG9yIGdlbmVyYXRlZCByZXNwb25zZXMuCitjbGFzcyBJbnRlcmNl
cHRvciB7CitwdWJsaWM6CisgICAgSW50ZXJjZXB0b3IoSW50ZXJjZXB0b3JDbGllbnQqIGNsaWVu
dCkgOiBtX2ludGVyY2VwdG9yQ2xpZW50KGNsaWVudCkge30KKworICAgIEludGVyY2VwdG9yQ2xp
ZW50KiBpbnRlcmNlcHRvckNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJjZXB0b3JDbGll
bnQ7IH0KKyAgICB2b2lkIHNldEludGVyY2VwdG9yQ2xpZW50KEludGVyY2VwdG9yQ2xpZW50KiBj
bGllbnQpICB7IG1faW50ZXJjZXB0b3JDbGllbnQgPSBjbGllbnQ7IH0KKworICAgIC8vIENhbGxl
ZCBmb3IgZXZlcnkgcmVxdWVzdCBtYWRlLCBpbmNsdWRpbmcgcmVxdWVzdHMgZm9yIHRoZSBuZXcg
CisgICAgLy8gbG9jYXRpb24gb2YgYSByZWRpcmVjdC4gQ2FuIHJldHVybiB0cnVlIGlmIHRoZSBy
ZXF1ZXN0IGlmIGl0CisgICAgLy8gc2hvdWxkIGJlIGludGVyY2VwdGVkLCBvciBmYWxzZSB0byBh
bGxvdyB0aGUgcmVxdWVzdCB0byBiZSBoYW5kbGVkIGJlCisgICAgLy8gaGFuZGxlZCBpbiB0aGUg
bm9ybWFsIG1hbm5lci4gCisgICAgdmlydHVhbCBib29sIG1heWJlSW50ZXJjZXB0UmVxdWVzdChj
b25zdCBSZXNvdXJjZVJlcXVlc3QmKSA9IDA7CisKKyAgICAvLyBDYWxsZWQgYWZ0ZXIgaGF2aW5n
IHJlY2VpdmVkIGEgcmVkaXJlY3QgcmVzcG9uc2UsIGJ1dCBwcmlvciB0byB0aGUKKyAgICAvLyB0
aGUgcmVzb3VyY2UgaGFuZGxlIGNsaWVudCBiZWluZyBpbmZvcm1lZCBvZiB0aGUgcmVkaXJlY3Qu
IENhbiByZXR1cm4gdHJ1ZSBpZgorICAgIC8vIHRoZSByZWRpcmVjdCBzaG91bGQgYmUgZGlzY2Fy
ZGVkIGFuZCByZXBsYWNlZCBieSBhbiBpbnRlcmNlcHRvciBnZW5lcmF0ZWQKKyAgICAvLyByZXNw
b25zZS4gSWYgdHJ1ZSBpcyByZXR1cm5lZCwgdGhlIHJlc291cmNlIGhhbmRsZSBjbGllbnQgbmV2
ZXIgc2VlcyB0aGUKKyAgICAvLyBvcmlnaW5hbCByZWRpcmVjdCwgaW5zdGVhZCB0aGUgcmVzcG9u
c2UgcHJvZHVjZWQgYnkgdGhlIGludGVyY2VwdG9yIHdpbGwKKyAgICAvLyBiZSByZXR1cm5lZC4K
KyAgICB2aXJ0dWFsIGJvb2wgbWF5YmVJbnRlcmNlcHRSZWRpcmVjdChjb25zdCBLVVJMJiBsb2Nh
dGlvbikgPSAwOworCisgICAgLy8gQ2FsbGVkIGFmdGVyIGhhdmluZyByZWNlaXZlZCBhIGZpbmFs
IHJlc3BvbnNlLCBidXQgcHJpb3IgdG8gdGhlCisgICAgLy8gdGhlIHJlc291cmNlIGhhbmRsZSBj
bGllbnQgYmVpbmcgaW5mb3JtZWQgb2YgdGhlIHJlc3BvbnNlLiBDYW4gcmV0dXJuIHRydWUKKyAg
ICAvLyBpZiB0aGUgcmVzcG9uc2Ugc2hvdWxkIGJlIGRpc2NhcmRlZCBhbmQgcmVwbGFjZWQgd2l0
aCBhbiBpbnRlcmNlcHRvciBnZW5lcmF0ZWQKKyAgICAvLyByZXNwb3NuZS4gSWYgdHJ1ZSBpcyBy
ZXR1cm5lZCwgdGhlIHJlc291cmNlIGhhbmRsZSBjbGllbnQgbmV2ZXIgc2VlcyB0aGUKKyAgICAv
LyBvcmlnaW5hbCByZXNwb25zZSwgaW5zdGVhZCB0aGUgcmVzcG9uc2UgcHJvZHVjZWQgYnkgdGhl
IGludGVyY2VwdG9yIHdpbGwgYmUKKyAgICAvLyByZXR1cm5lZC4KKyAgICB2aXJ0dWFsIGJvb2wg
bWF5YmVJbnRlcmNlcHRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgPSAwOworCisg
ICAgLy8gQ2FsbGVkIGFmdGVyIGhhdmluZyByZWNlaXZlZCBhIGZpbmFsIGVycm9yLCBidXQgcHJp
b3IgdG8gdGhlCisgICAgLy8gdGhlIHJlc291cmNlIGhhbmRsZSBjbGllbnQgYmVpbmcgaW5mb3Jt
ZWQgb2YgdGhlIGVycm9yLiBDYW4gcmV0dXJuIHRydWUKKyAgICAvLyBpZiB0aGUgZXJyb3Igc2hv
dWxkIGJlIGRpc2NhcmRlZCBhbmQgcmVwbGFjZWQgd2l0aCBhbiBpbnRlcmNlcHRvciBnZW5lcmF0
ZWQKKyAgICAvLyByZXNwb3NuZS4gSWYgdHJ1ZSBpcyByZXR1cm5lZCwgdGhlIHJlc291cmNlIGhh
bmRsZSBjbGllbnQgbmV2ZXIgc2VlcyB0aGUKKyAgICAvLyBvcmlnaW5hbCBlcnJvciwgaW5zdGVh
ZCB0aGUgcmVzcG9uc2UgcHJvZHVjZWQgYnkgdGhlIGludGVyY2VwdG9yIHdpbGwgYmUKKyAgICAv
LyByZXR1cm5lZC4KKyAgICB2aXJ0dWFsIGJvb2wgbWF5YmVJbnRlcmNlcHRFcnJvcihjb25zdCBS
ZXNvdXJjZUVycm9yJikgPSAwOworCisgICAgLy8gQ2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGFu
IGludGVyY2VwdG9yIHJldHVybnMgdHJ1ZSB0byBhbnkgb2YgdGhlIG1heWJlCisgICAgLy8gbWV0
aG9kcy4gVGhpcyBnaXZlcyB0aGUgaW50ZXJjZXB0b3IgYW4gb3Bwb3J0dW5pdHkgdG8gZGVsaXZl
ciBhIHJlc3BvbnNlCisgICAgLy8gaW1tZWRpYXRlbHkgZnJvbSB3aXRoaW4gdGhlIHN0YXJ0IG1l
dGhvZCB3aXRob3V0IGdvaW5nIHRocnUgdGhlIG1lc3NhZ2UgbG9vcC4KKyAgICB2aXJ0dWFsIHZv
aWQgc3RhcnQoKSB7fQorCisgICAgLy8gQ2FsbGVkIHRvIGNhbmNlbCBhbiBpbnRlcmNlcHQuCisg
ICAgdmlydHVhbCB2b2lkIGNhbmNlbCgpID0gMDsKKworcHJpdmF0ZToKKyAgICBJbnRlcmNlcHRv
ckNsaWVudCogbV9pbnRlcmNlcHRvckNsaWVudDsKK307CisKKworLy8gQSBmYWN0b3J5IGZvciBp
bnN0YW5jZXMgb2YgaW50ZXJjZXB0b3JzLiBUaGUgZmFjdG9yeSBhbHNvIHByb3ZpZGVzIG1ldGhv
ZHMKKy8vIHRvIGludGVyY2VwdCBzeW5jIGxvYWRzLgorY2xhc3MgSW50ZXJjZXB0b3JGYWN0b3J5
IHsKK3B1YmxpYzoKKyAgICAvLyBSZXR1cm5zIGFuIGludGVyY2VwdG9yIGZvciBhbiBhc3luYyBy
ZXF1ZXN0LCBpdCBtYXkgcmV0dXJuIDAKKyAgICB2aXJ0dWFsIEludGVyY2VwdG9yKiBjcmVhdGVJ
bnRlcmNlcHRvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBJbnRlcmNlcHRvckNsaWVudCopIHsg
cmV0dXJuIDA7IH0KKworICAgIC8vIEZJWE1FOiBTeW5jaHJvbm91cyBpbnRlcmNlcHRpb24gaGFz
IG5vIG9wcG9ydHVuaXR5IHRvIGludGVyY2VwdCBpbnRlcm1pZGFpcnkgcmVkaXJlY3RzCisgICAg
dmlydHVhbCBib29sIG1heWJlTG9hZFN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwg
VmVjdG9yPGNoYXI+JiBkYXRhKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBt
YXliZUZhbGxiYWNrU3ljaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENy
ZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFy
PiYgZGF0YSkgeyByZXR1cm4gZmFsc2U7IH0KK307CisKKy8vIEZJWE1FOiB0aGlzIGlzIHF1aWNr
IGFuZCBkaXJ0eSB0ZXN0IGNvZGUsIGZpbmQgYSByZWFsIHdheSB0byB0ZXN0IHRoaXMKK0ludGVy
Y2VwdG9yRmFjdG9yeSogZ2V0VGVzdEludGVyY2VwdG9yRmFjdG9yeSgpOworCit9CisKKyNlbmRp
ZiAvLyBJbnRlcmNlcHRvcl9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBwbGF0Zm9ybVxuZXR3b3Jr
XEludGVyY2VwdG9yLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJ
bmRleDogcGxhdGZvcm0vbmV0d29yay9JbnRlcmNlcHRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxh
dGZvcm0vbmV0d29yay9JbnRlcmNlcHRvci5jcHAJKHJldmlzaW9uIDApCisrKyBwbGF0Zm9ybS9u
ZXR3b3JrL0ludGVyY2VwdG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50ZXJjZXB0b3IuaCIKKworI2luY2x1ZGUg
IlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiICAvLyBpIHdpc2ggZnJhbWUg
d2FzIG5vdCBhIHBhcmFtIHRvIHN0YXJ0ISEKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBG
SVhNRTogdGhpcyBpcyBxdWljayBhbmQgZGlydHkgdGVzdCBjb2RlLCBmaW5kIGEgcmVhbCB3YXkg
dG8gdGVzdCB0aGlzCisKK2NsYXNzIFRlc3RJbnRlcmNlcHRvciA6IHB1YmxpYyBJbnRlcmNlcHRv
ciB7CitwdWJsaWM6CisgICAgVGVzdEludGVyY2VwdG9yKEludGVyY2VwdG9yQ2xpZW50KiBjbGll
bnQpIDogSW50ZXJjZXB0b3IoY2xpZW50KSB7fQorICAgIHZpcnR1YWwgYm9vbCBtYXliZUludGVy
Y2VwdFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdmlydHVhbCBib29sIG1h
eWJlSW50ZXJjZXB0UmVkaXJlY3QoY29uc3QgS1VSTCYgbG9jYXRpb24pOworICAgIHZpcnR1YWwg
Ym9vbCBtYXliZUludGVyY2VwdFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgbWF5YmVJbnRlcmNlcHRFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJik7
CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCk7CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbCgpOwor
cHJpdmF0ZToKKyAgICBLVVJMIG1fdXJsOworICAgIEtVUkwgbV9vcmlnVXJsOworCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBjYW5uZWRSZXNwb25zZURhdGEoKTsKK307CisK
K2NsYXNzIFRlc3RJbnRlcmNlcHRvckZhY3RvcnkgOiBwdWJsaWMgSW50ZXJjZXB0b3JGYWN0b3J5
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIEludGVyY2VwdG9yKiBjcmVhdGVJbnRlcmNlcHRvcihj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBJbnRlcmNlcHRvckNsaWVudCopOworICAgIHZpcnR1YWwg
Ym9vbCBtYXliZUxvYWRTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3Jl
ZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjxj
aGFyPiYgZGF0YSk7CisgICAgdmlydHVhbCBib29sIG1heWJlRmFsbGJhY2tTeWNocm9ub3VzbHko
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3Im
LCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKK307CisKK0ludGVyY2Vw
dG9yKiBUZXN0SW50ZXJjZXB0b3JGYWN0b3J5OjpjcmVhdGVJbnRlcmNlcHRvcihjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIEludGVyY2VwdG9yQ2xpZW50KiBjbGllbnQpCit7CisgICAg
aWYgKChyZXF1ZXN0Lmh0dHBNZXRob2QoKSAhPSAiR0VUIikgJiYgKHJlcXVlc3QuaHR0cE1ldGhv
ZCgpICE9ICJIRUFEIikpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKHJlcXVlc3QudXJs
KCkucXVlcnkoKS5jb250YWlucygiaW50ZXJjZXB0XyIpKQorICAgICAgICByZXR1cm4gbmV3IFRl
c3RJbnRlcmNlcHRvcihjbGllbnQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgVGVzdElu
dGVyY2VwdG9yRmFjdG9yeTo6bWF5YmVMb2FkU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9u
c2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFRlc3RJbnRlcmNlcHRvckZhY3Rvcnk6Om1heWJlRmFsbGJhY2tTeWNocm9ub3VzbHkoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImLCBSZXNv
dXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKQoreworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBUZXN0SW50ZXJjZXB0b3I6Om1heWJlSW50ZXJjZXB0UmVxdWVzdChjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgaWYgKG1fb3JpZ1VybC5pc0VtcHR5KCkp
CisgICAgICAgIG1fb3JpZ1VybCA9IG1fdXJsOworICAgIG1fdXJsID0gcmVxdWVzdC51cmwoKTsK
KyAgICByZXR1cm4gbV91cmwucXVlcnkoKS5jb250YWlucygiaW50ZXJjZXB0X21haW4iKTsKK30K
KworYm9vbCBUZXN0SW50ZXJjZXB0b3I6Om1heWJlSW50ZXJjZXB0UmVkaXJlY3QoY29uc3QgS1VS
TCYgbG9jYXRpb24pCit7CisgICAgcmV0dXJuIG1fdXJsLnF1ZXJ5KCkuY29udGFpbnMoImludGVy
Y2VwdF9yZWRpcmVjdCIpOworfQorCitib29sIFRlc3RJbnRlcmNlcHRvcjo6bWF5YmVJbnRlcmNl
cHRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3sKKyAgICByZXR1cm4gbV91cmwu
cXVlcnkoKS5jb250YWlucygiaW50ZXJjZXB0X3Jlc3BvbnNlIikKKyAgICAgICAgICAgfHwgbV9v
cmlnVXJsLnF1ZXJ5KCkuY29udGFpbnMoImludGVyY2VwdF9yZXNwb25zZSIpOworfQorCitib29s
IFRlc3RJbnRlcmNlcHRvcjo6bWF5YmVJbnRlcmNlcHRFcnJvcihjb25zdCBSZXNvdXJjZUVycm9y
JikKK3sKKyAgICByZXR1cm4gbV91cmwucXVlcnkoKS5jb250YWlucygiaW50ZXJjZXB0X2Vycm9y
Iik7Cit9CisKK3ZvaWQgVGVzdEludGVyY2VwdG9yOjpzdGFydCgpCit7CisgICAgaWYgKG1fdXJs
LnF1ZXJ5KCkuY29udGFpbnMoInJlc3RhcnRfd29faW50ZXJjZXB0aW9uIikpIHsKKyAgICAgICAg
aW50ZXJjZXB0b3JDbGllbnQoKS0+cmVzdGFydFJlcXVlc3RXaXRob3V0SW50ZXJjZXB0aW9uKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRh
ID0gY2FubmVkUmVzcG9uc2VEYXRhKCk7CisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSht
X3VybCwgU3RyaW5nKCJ0ZXh0L2h0bWwiKSwgZGF0YS0+c2l6ZSgpLCBTdHJpbmcoKSwgU3RyaW5n
KCkpOworICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKDIwMCk7CisgICAgcmVzcG9uc2Uu
c2V0SFRUUFN0YXR1c1RleHQoU3RyaW5nKCJPSyIpKTsKKyAgICBpbnRlcmNlcHRvckNsaWVudCgp
LT5kZWxpdmVyUmVzcG9uc2UocmVzcG9uc2UsIGRhdGEpOworfQorCit2b2lkIFRlc3RJbnRlcmNl
cHRvcjo6Y2FuY2VsKCkKK3sKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFRlc3RJbnRl
cmNlcHRvcjo6Y2FubmVkUmVzcG9uc2VEYXRhKCkKK3sKKyAgICBzdGF0aWMgUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gZGF0YTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIGRhdGEgPSBTaGFyZWRCdWZm
ZXI6OmFkb3B0VmVjdG9yKFN0cmluZygiaGVsbG8gdGhlcmUgZnJvbSBpbnRlcmNlcHQgbGFuZCIp
LmFzY2lpKCkpOworICAgIHJldHVybiBkYXRhOworfQorCitJbnRlcmNlcHRvckZhY3RvcnkqIGdl
dFRlc3RJbnRlcmNlcHRvckZhY3RvcnkoKQoreworICAgIFRlc3RJbnRlcmNlcHRvckZhY3Rvcnkg
dGVzdEZhY3Rvcnk7CisgICAgcmV0dXJuICZ0ZXN0RmFjdG9yeTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogcGxhdGZvcm1cbmV0d29ya1xJbnRlcmNl
cHRvci5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDog
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkocmV2aXNpb24gNDQyMDIpCisrKyBwbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDgwICsyNiwyMiBA
QAogI2lmbmRlZiBSZXNvdXJjZUhhbmRsZV9oCiAjZGVmaW5lIFJlc291cmNlSGFuZGxlX2gKIAot
I2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCi0jaW5jbHVkZSAiSFRUUEhlYWRl
ck1hcC5oIgotI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKLSNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CisjaW5jbHVkZSAiUGxhdGZvcm1SZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlRo
cmVhZGFibGVMb2FkZXIuaCIgIC8vIGZvciBTdG9yZWRDcmVkZW50aWFscworI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KIAotI2lmIFVTRShTT1VQKQotdHlwZWRlZiBzdHJ1Y3QgX1NvdXBTZXNzaW9u
IFNvdXBTZXNzaW9uOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDRikKLXR5cGVkZWYgY29uc3Qg
c3RydWN0IF9fQ0ZEYXRhICogQ0ZEYXRhUmVmOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4p
Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgRFdPUkQ7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgRFdP
UkRfUFRSOwotdHlwZWRlZiB2b2lkKiBMUFZPSUQ7Ci10eXBlZGVmIExQVk9JRCBISU5URVJORVQ7
Ci10eXBlZGVmIHVuc2lnbmVkIFdQQVJBTTsKLXR5cGVkZWYgbG9uZyBMUEFSQU07Ci10eXBlZGVm
IHN0cnVjdCBIV05EX18qIEhXTkQ7Ci10eXBlZGVmIF9XNjQgbG9uZyBMT05HX1BUUjsKLXR5cGVk
ZWYgTE9OR19QVFIgTFJFU1VMVDsKLSNlbmRpZgotCi0KLSNpZiBQTEFURk9STShNQUMpCi0jaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2lmZGVmIF9fT0JKQ19fCi1AY2xhc3MgTlNEYXRhOwot
QGNsYXNzIE5TRXJyb3I7Ci1AY2xhc3MgTlNVUkxDb25uZWN0aW9uOwotQGNsYXNzIFdlYkNvcmVS
ZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGU7Ci0jZWxzZQotY2xhc3MgTlNEYXRhOwotY2xhc3MgTlNF
cnJvcjsKLWNsYXNzIE5TVVJMQ29ubmVjdGlvbjsKLWNsYXNzIFdlYkNvcmVSZXNvdXJjZUhhbmRs
ZUFzRGVsZWdhdGU7Ci10eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCAqaWQ7Ci0jZW5kaWYKLSNl
bmRpZgotCi0jaWYgVVNFKENGTkVUV09SSykKLXR5cGVkZWYgc3RydWN0IF9DRlVSTENvbm5lY3Rp
b24qIENGVVJMQ29ubmVjdGlvblJlZjsKLXR5cGVkZWYgaW50IENGSFRUUENvb2tpZVN0b3JhZ2VB
Y2NlcHRQb2xpY3k7Ci10eXBlZGVmIHN0cnVjdCBPcGFxdWVDRkhUVFBDb29raWVTdG9yYWdlKiBD
RkhUVFBDb29raWVTdG9yYWdlUmVmOwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7Ci1jbGFzcyBDcmVkZW50aWFsOwotY2xhc3Mg
Rm9ybURhdGE7CiBjbGFzcyBGcmFtZTsKLWNsYXNzIEtVUkw7Ci1jbGFzcyBSZXNvdXJjZUVycm9y
OworY2xhc3MgUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q7CiBjbGFzcyBSZXNvdXJjZUhh
bmRsZUNsaWVudDsKLWNsYXNzIFJlc291cmNlSGFuZGxlSW50ZXJuYWw7Ci1zdHJ1Y3QgUmVzb3Vy
Y2VSZXF1ZXN0OwotY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKLWNsYXNzIFNjaGVkdWxlUGFpcjsK
LWNsYXNzIFNoYXJlZEJ1ZmZlcjsKK2NsYXNzIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGU7CitjbGFz
cyBQbGF0Zm9ybVJlc291cmNlSGFuZGxlQ2xpZW50OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
Y2xhc3MgVGltZXI7Ci0KIGNsYXNzIFJlc291cmNlSGFuZGxlIDogcHVibGljIFJlZkNvdW50ZWQ8
UmVzb3VyY2VIYW5kbGU+IHsKIHByaXZhdGU6Ci0gICAgUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqLCBib29sIGRlZmVyc0xvYWRpbmcs
IGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIG1pZ2h0RG93bmxvYWRGcm9tSGFuZGxlKTsK
KyAgICBSZXNvdXJjZUhhbmRsZSgpOwogCi0gICAgZW51bSBGYWlsdXJlVHlwZSB7Ci0gICAgICAg
IEJsb2NrZWRGYWlsdXJlLAotICAgICAgICBJbnZhbGlkVVJMRmFpbHVyZQotICAgIH07Ci0KIHB1
YmxpYzoKICAgICAvLyBGSVhNRTogc2hvdWxkIG5vdCBuZWVkIHRoZSBGcmFtZQogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBjcmVhdGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqLCBGcmFtZSosIGJvb2wgZGVmZXJzTG9hZGluZywgYm9v
bCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgbWlnaHREb3dubG9hZEZyb21IYW5kbGUgPSBmYWxz
ZSk7CkBAIC0xNTIsMTAgKzk0LDEzIEBACiAKICAgICBib29sIHNob3VsZENvbnRlbnRTbmlmZigp
IGNvbnN0OwogICAgIHN0YXRpYyBib29sIHNob3VsZENvbnRlbnRTbmlmZlVSTChjb25zdCBLVVJM
Jik7Ci0KICAgICBzdGF0aWMgdm9pZCBmb3JjZUNvbnRlbnRTbmlmZmluZygpOwogCiAjaWYgVVNF
KFdJTklORVQpCisgICAgLy8gRklYTUU6IGRldGVybWluZSB3aGljaCBvZiB0aGVzZSByZWFsbHkg
bmVlZCB0byBiZSBvbiB0aGUgd3JhcHBlciBjbGFzcywgc29tZSBhcmUKKyAgICAvLyBhbG1vc3Qg
bGlrZWx5IG9ubHkgY2FsbGVkIGJ5IHRoZSBQbGF0Zm9ybVJlc291cmNlSGFuZGxlL0ludGVybmFs
IGltcGwgYW5kIGRvIG5vdAorICAgIC8vIHJlYWxseSBuZWVkIHRvIGJlIG9uIHRoaXMgd3JhcHBl
ci4gRGl0dG8gZm9yIG90aGVyIHBsYXRmb3JtIHNwZWNpZmljIG1ldGhvZHMKKyAgICAvLyBvbiB0
aGlzIGNsYXNzLgogICAgIHZvaWQgc2V0SGFzUmVjZWl2ZWRSZXNwb25zZShib29sID0gdHJ1ZSk7
CiAgICAgYm9vbCBoYXNSZWNlaXZlZFJlc3BvbnNlKCkgY29uc3Q7CiAgICAgdm9pZCBmaWxlTG9h
ZFRpbWVyKFRpbWVyPFJlc291cmNlSGFuZGxlPiopOwpAQCAtMTY3LDExICsxMTIsMTEgQEAKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oUVQpIHx8IFVTRShDVVJMKSB8fCBVU0UoU09VUCkKLSAgICBS
ZXNvdXJjZUhhbmRsZUludGVybmFsKiBnZXRJbnRlcm5hbCgpIHsgcmV0dXJuIGQuZ2V0KCk7IH0K
KyAgICBQbGF0Zm9ybVJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGdldEludGVybmFsKCkgeyByZXR1
cm4gbV9wbGF0Zm9ybUhhbmRsZS0+ZC5nZXQoKTsgfQogI2VuZGlmCiAKICNpZiBVU0UoU09VUCkK
LSAgICBzdGF0aWMgU291cFNlc3Npb24qIGRlZmF1bHRTZXNzaW9uKCk7CisgICAgc3RhdGljIFNv
dXBTZXNzaW9uKiBkZWZhdWx0U2Vzc2lvbigpIHsgcmV0dXJuIFBsYXRmb3JtUmVzb3VyY2VIYW5k
bGU6OmRlZmF1bHRTZXNzaW9uKCk7IH0KICNlbmRpZgogCiAgICAgLy8gVXNlZCB0byB3b3JrIGFy
b3VuZCB0aGUgZmFjdCB0aGF0IHlvdSBkb24ndCBnZXQgYW55IG1vcmUgTlNVUkxDb25uZWN0aW9u
IGNhbGxiYWNrcyB1bnRpbCB5b3UgcmV0dXJuIGZyb20gdGhlIG9uZSB5b3UncmUgaW4uCkBAIC0x
ODgsMjEgKzEzMywxOSBAQAogICAgICAgCiAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KCkgY29uc3Q7CiAKLSAgICB2b2lkIGZpcmVGYWlsdXJlKFRpbWVyPFJlc291cmNlSGFuZGxl
PiopOwotCiBwcml2YXRlOgotI2lmIFVTRShTT1VQKQotICAgIGJvb2wgc3RhcnREYXRhKFN0cmlu
ZyB1cmxTdHJpbmcpOwotICAgIGJvb2wgc3RhcnRIdHRwKFN0cmluZyB1cmxTdHJpbmcpOwotICAg
IGJvb2wgc3RhcnRHaW8oS1VSTCB1cmwpOwotI2VuZGlmCisgICAgYm9vbCBzdGFydChGcmFtZSop
OwogCi0gICAgdm9pZCBzY2hlZHVsZUZhaWx1cmUoRmFpbHVyZVR5cGUpOworICAgIGJvb2wgc3Rh
cnRQbGF0Zm9ybUhhbmRsZShGcmFtZSopOworICAgIHZvaWQgcmVjcmVhdGVQbGF0Zm9ybUhhbmRs
ZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQbGF0Zm9ybVJlc291cmNlSGFuZGxlQ2xpZW50Kik7
CiAKLSAgICBib29sIHN0YXJ0KEZyYW1lKik7CisgICAgZnJpZW5kIFJlc291cmNlSGFuZGxlSW50
ZXJjZXB0b3JIb3N0OworICAgIE93blB0cjxSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdD4g
bV9pbnRlcmNlcHRvckhvc3Q7CiAKLSAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbDsKLSAgICBPd25QdHI8UmVzb3VyY2VIYW5kbGVJbnRlcm5hbD4gZDsKKyAgICBib29sIG1f
ZGVmZXJzTG9hZGluZzsKKyAgICBib29sIG1fc2hvdWxkQ29udGVudFNuaWZmOworICAgIGJvb2wg
bV9taWdodERvd25sb2FkRnJvbUhhbmRsZTsKKyAgICBSZWZQdHI8UGxhdGZvcm1SZXNvdXJjZUhh
bmRsZT4gbV9wbGF0Zm9ybUhhbmRsZTsKIH07CiAKIH0KSW5kZXg6IHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VIYW5kbGUuY3BwCShyZXZpc2lvbiA0NDIwMikKKysrIHBsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VIYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwyMDQgKzI1LDEzNSBAQAogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVy
Y2VwdG9ySG9zdC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBib29sIHNob3VsZEZvcmNlQ29udGVudFNu
aWZmaW5nOworUmVzb3VyY2VIYW5kbGU6OlJlc291cmNlSGFuZGxlKCkKKyAgICA6IG1faW50ZXJj
ZXB0b3JIb3N0KG5ldyBSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdCh0aGlzKSkKK3sKK30K
IAotc3RhdGljIGJvb2wgcG9ydEFsbG93ZWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7Ci0KLVJl
c291cmNlSGFuZGxlOjpSZXNvdXJjZUhhbmRsZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQsIGJvb2wgZGVmZXJzTG9hZGluZywKLSAg
ICAgICAgIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIG1pZ2h0RG93bmxvYWRGcm9tSGFu
ZGxlKQotICAgIDogZChuZXcgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCh0aGlzLCByZXF1ZXN0LCBj
bGllbnQsIGRlZmVyc0xvYWRpbmcsIHNob3VsZENvbnRlbnRTbmlmZiwgbWlnaHREb3dubG9hZEZy
b21IYW5kbGUpKQorUmVzb3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSgpCiB7CiB9CiAKIFBh
c3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IFJlc291cmNlSGFuZGxlOjpjcmVhdGUoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50LAogICAg
IEZyYW1lKiBmcmFtZSwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNob3VsZENvbnRlbnRTbmlm
ZiwgYm9vbCBtaWdodERvd25sb2FkRnJvbUhhbmRsZSkKIHsKLSAgICBpZiAoc2hvdWxkQ29udGVu
dFNuaWZmKQotICAgICAgICBzaG91bGRDb250ZW50U25pZmYgPSBzaG91bGRDb250ZW50U25pZmZV
UkwocmVxdWVzdC51cmwoKSk7CisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUoYWRv
cHRSZWYobmV3IFJlc291cmNlSGFuZGxlKCkpKTsKKyAgICBoYW5kbGUtPm1fZGVmZXJzTG9hZGlu
ZyA9IGRlZmVyc0xvYWRpbmc7CisgICAgaGFuZGxlLT5tX3Nob3VsZENvbnRlbnRTbmlmZiA9IHNo
b3VsZENvbnRlbnRTbmlmZjsKKyAgICBoYW5kbGUtPm1fbWlnaHREb3dubG9hZEZyb21IYW5kbGUg
PSBtaWdodERvd25sb2FkRnJvbUhhbmRsZTsKKyAgICBoYW5kbGUtPm1fcGxhdGZvcm1IYW5kbGUg
PSBQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjpjcmVhdGVXaXRob3V0U3RhcnRpbmcocmVxdWVzdCwg
MCwgZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmLCBtaWdodERvd25sb2FkRnJvbUhh
bmRsZSk7CiAKLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IG5ld0hhbmRsZShhZG9wdFJlZihu
ZXcgUmVzb3VyY2VIYW5kbGUocmVxdWVzdCwgY2xpZW50LCBkZWZlcnNMb2FkaW5nLCBzaG91bGRD
b250ZW50U25pZmYsIG1pZ2h0RG93bmxvYWRGcm9tSGFuZGxlKSkpOworICAgIGhhbmRsZS0+bV9p
bnRlcmNlcHRvckhvc3QtPmNyZWF0ZUludGVyY2VwdG9yKHJlcXVlc3QpOworICAgIGhhbmRsZS0+
c2V0Q2xpZW50KGNsaWVudCk7CiAKLSAgICBpZiAoIXJlcXVlc3QudXJsKCkuaXNWYWxpZCgpKSB7
Ci0gICAgICAgIG5ld0hhbmRsZS0+c2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWlsdXJlKTsK
LSAgICAgICAgcmV0dXJuIG5ld0hhbmRsZS5yZWxlYXNlKCk7Ci0gICAgfQorICAgIGlmIChoYW5k
bGUtPnN0YXJ0KGZyYW1lKSkKKyAgICAgICAgcmV0dXJuIGhhbmRsZS5yZWxlYXNlKCk7CiAKLSAg
ICBpZiAoIXBvcnRBbGxvd2VkKHJlcXVlc3QpKSB7Ci0gICAgICAgIG5ld0hhbmRsZS0+c2NoZWR1
bGVGYWlsdXJlKEJsb2NrZWRGYWlsdXJlKTsKLSAgICAgICAgcmV0dXJuIG5ld0hhbmRsZS5yZWxl
YXNlKCk7Ci0gICAgfQotICAgICAgICAKLSAgICBpZiAobmV3SGFuZGxlLT5zdGFydChmcmFtZSkp
Ci0gICAgICAgIHJldHVybiBuZXdIYW5kbGUucmVsZWFzZSgpOwotCiAgICAgcmV0dXJuIDA7CiB9
CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnNjaGVkdWxlRmFpbHVyZShGYWlsdXJlVHlwZSB0eXBl
KQordm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIGNyZWRlbnRpYWxzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZUVy
cm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0
YSwgRnJhbWUqIGZyYW1lKQogewotICAgIGQtPm1fZmFpbHVyZVR5cGUgPSB0eXBlOwotICAgIGQt
Pm1fZmFpbHVyZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICBpZiAoUmVzb3VyY2VIYW5kbGVJ
bnRlcmNlcHRvckhvc3Q6Om1heWJlSW50ZXJjZXB0U3luY2hyb25vdXNseShyZXF1ZXN0LCBjcmVk
ZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShyZXF1ZXN0
LCBjcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhLCBmcmFtZSk7CisKKyAgICBSZXNv
dXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6bWF5YmVGYWxsYmFja1N5Y2hyb25vdXNseShyZXF1
ZXN0LCBjcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKIH0KIAotdm9pZCBSZXNv
dXJjZUhhbmRsZTo6ZmlyZUZhaWx1cmUoVGltZXI8UmVzb3VyY2VIYW5kbGU+KikKK2Jvb2wgUmVz
b3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkK
IHsKLSAgICBpZiAoIWNsaWVudCgpKQotICAgICAgICByZXR1cm47CisgICAgcmV0dXJuIFBsYXRm
b3JtUmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKHJlcXVlc3QpOworfQogCi0gICAg
c3dpdGNoIChkLT5tX2ZhaWx1cmVUeXBlKSB7Ci0gICAgICAgIGNhc2UgQmxvY2tlZEZhaWx1cmU6
Ci0gICAgICAgICAgICBjbGllbnQoKS0+d2FzQmxvY2tlZCh0aGlzKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgY2FzZSBJbnZhbGlkVVJMRmFpbHVyZToKLSAgICAgICAgICAgIGNsaWVu
dCgpLT5jYW5ub3RTaG93VVJMKHRoaXMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KK2Jv
b2wgUmVzb3VyY2VIYW5kbGU6OmxvYWRzQmxvY2tlZCgpCit7CisgICAgcmV0dXJuIFBsYXRmb3Jt
UmVzb3VyY2VIYW5kbGU6OmxvYWRzQmxvY2tlZCgpOworfQogCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Citib29sIFJlc291cmNlSGFuZGxlOjpzdXBwb3J0c0J1ZmZlcmVkRGF0YSgpCit7Cisg
ICAgcmV0dXJuIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6OnN1cHBvcnRzQnVmZmVyZWREYXRhKCk7
CiB9CiAKLVJlc291cmNlSGFuZGxlQ2xpZW50KiBSZXNvdXJjZUhhbmRsZTo6Y2xpZW50KCkgY29u
c3QKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY3JlYXRlUGxhdGZvcm1IYW5kbGUoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBQbGF0Zm9ybVJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGll
bnQpCiB7Ci0gICAgcmV0dXJuIGQtPm1fY2xpZW50OworICAgIG1fcGxhdGZvcm1IYW5kbGUtPnNl
dENsaWVudCgwKTsKKyAgICBtX3BsYXRmb3JtSGFuZGxlLT5jYW5jZWwoKTsKKyAgICBtX3BsYXRm
b3JtSGFuZGxlLmNsZWFyKCk7CisgICAgbV9wbGF0Zm9ybUhhbmRsZSA9IFBsYXRmb3JtUmVzb3Vy
Y2VIYW5kbGU6OmNyZWF0ZVdpdGhvdXRTdGFydGluZyhyZXF1ZXN0LCBjbGllbnQsIG1fZGVmZXJz
TG9hZGluZywgbV9zaG91bGRDb250ZW50U25pZmYsIG1fbWlnaHREb3dubG9hZEZyb21IYW5kbGUp
OwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGllbnQoUmVzb3VyY2VIYW5kbGVDbGll
bnQqIGNsaWVudCkKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KEZyYW1lKiBmcmFtZSkKIHsK
LSAgICBkLT5tX2NsaWVudCA9IGNsaWVudDsKKyAgICByZXR1cm4gbV9pbnRlcmNlcHRvckhvc3Qt
PnN0YXJ0KGZyYW1lKTsKIH0KIAotY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBSZXNvdXJjZUhhbmRs
ZTo6cmVxdWVzdCgpIGNvbnN0Citib29sIFJlc291cmNlSGFuZGxlOjpzdGFydFBsYXRmb3JtSGFu
ZGxlKEZyYW1lKiBmcmFtZSkKIHsKLSAgICByZXR1cm4gZC0+bV9yZXF1ZXN0OworICAgIHJldHVy
biBtX3BsYXRmb3JtSGFuZGxlLT5zdGFydChmcmFtZSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5k
bGU6OmNsZWFyQXV0aGVudGljYXRpb24oKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKCkK
IHsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgZC0+bV9jdXJyZW50TWFjQ2hhbGxlbmdlID0gbmls
OwotI2VsaWYgVVNFKENGTkVUV09SSykKLSAgICBkLT5tX2N1cnJlbnRDRkNoYWxsZW5nZSA9IDA7
Ci0jZW5kaWYKLSAgICBkLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2UubnVsbGlmeSgpOworICAgIG1f
aW50ZXJjZXB0b3JIb3N0LT5jYW5jZWwoKTsKIH0KIAotc3RhdGljIGJvb2wgcG9ydEFsbG93ZWQo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorUmVzb3VyY2VIYW5kbGVDbGllbnQqIFJl
c291cmNlSGFuZGxlOjpjbGllbnQoKSBjb25zdAogewotICAgIHVuc2lnbmVkIHNob3J0IHBvcnQg
PSByZXF1ZXN0LnVybCgpLnBvcnQoKTsKKyAgICByZXR1cm4gbV9pbnRlcmNlcHRvckhvc3QtPmNs
aWVudCgpOworfQogCi0gICAgLy8gU2luY2UgbW9zdCBVUkxzIGRvbid0IGhhdmUgYSBwb3J0LCBy
ZXR1cm4gZWFybHkgZm9yIHRoZSAibm8gcG9ydCIgY2FzZS4KLSAgICBpZiAoIXBvcnQpCi0gICAg
ICAgIHJldHVybiB0cnVlOwordm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50KFJlc291cmNl
SGFuZGxlQ2xpZW50KiBjbGllbnQpCit7CisgICAgbV9pbnRlcmNlcHRvckhvc3QtPnNldENsaWVu
dChjbGllbnQpOworfQogCi0gICAgLy8gVGhpcyBibG9ja2VkIHBvcnQgbGlzdCBtYXRjaGVzIHRo
ZSBwb3J0IGJsb2NraW5nIHRoYXQgTW96aWxsYSBpbXBsZW1lbnRzLgotICAgIC8vIFNlZSBodHRw
Oi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL25ldGxpYi9Qb3J0QmFubmluZy5odG1sIGZvciBt
b3JlIGluZm9ybWF0aW9uLgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBibG9ja2Vk
UG9ydExpc3RbXSA9IHsKLSAgICAgICAgMSwgICAgLy8gdGNwbXV4Ci0gICAgICAgIDcsICAgIC8v
IGVjaG8KLSAgICAgICAgOSwgICAgLy8gZGlzY2FyZAotICAgICAgICAxMSwgICAvLyBzeXN0YXQK
LSAgICAgICAgMTMsICAgLy8gZGF5dGltZQotICAgICAgICAxNSwgICAvLyBuZXRzdGF0Ci0gICAg
ICAgIDE3LCAgIC8vIHFvdGQKLSAgICAgICAgMTksICAgLy8gY2hhcmdlbgotICAgICAgICAyMCwg
ICAvLyBGVFAtZGF0YQotICAgICAgICAyMSwgICAvLyBGVFAtY29udHJvbAotICAgICAgICAyMiwg
ICAvLyBTU0gKLSAgICAgICAgMjMsICAgLy8gdGVsbmV0Ci0gICAgICAgIDI1LCAgIC8vIFNNVFAK
LSAgICAgICAgMzcsICAgLy8gdGltZQotICAgICAgICA0MiwgICAvLyBuYW1lCi0gICAgICAgIDQz
LCAgIC8vIG5pY25hbWUKLSAgICAgICAgNTMsICAgLy8gZG9tYWluCi0gICAgICAgIDc3LCAgIC8v
IHByaXYtcmpzCi0gICAgICAgIDc5LCAgIC8vIGZpbmdlcgotICAgICAgICA4NywgICAvLyB0dHls
aW5rCi0gICAgICAgIDk1LCAgIC8vIHN1cGR1cAotICAgICAgICAxMDEsICAvLyBob3N0cmlhbWUK
LSAgICAgICAgMTAyLCAgLy8gaXNvLXRzYXAKLSAgICAgICAgMTAzLCAgLy8gZ3BwaXRucAotICAg
ICAgICAxMDQsICAvLyBhY3ItbmVtYQotICAgICAgICAxMDksICAvLyBQT1AyCi0gICAgICAgIDEx
MCwgIC8vIFBPUDMKLSAgICAgICAgMTExLCAgLy8gc3VucnBjCi0gICAgICAgIDExMywgIC8vIGF1
dGgKLSAgICAgICAgMTE1LCAgLy8gU0ZUUAotICAgICAgICAxMTcsICAvLyB1dWNwLXBhdGgKLSAg
ICAgICAgMTE5LCAgLy8gbm50cAotICAgICAgICAxMjMsICAvLyBOVFAKLSAgICAgICAgMTM1LCAg
Ly8gbG9jLXNydiAvIGVwbWFwCi0gICAgICAgIDEzOSwgIC8vIG5ldGJpb3MKLSAgICAgICAgMTQz
LCAgLy8gSU1BUDIKLSAgICAgICAgMTc5LCAgLy8gQkdQCi0gICAgICAgIDM4OSwgIC8vIExEQVAK
LSAgICAgICAgNDY1LCAgLy8gU01UUCtTU0wKLSAgICAgICAgNTEyLCAgLy8gcHJpbnQgLyBleGVj
Ci0gICAgICAgIDUxMywgIC8vIGxvZ2luCi0gICAgICAgIDUxNCwgIC8vIHNoZWxsCi0gICAgICAg
IDUxNSwgIC8vIHByaW50ZXIKLSAgICAgICAgNTI2LCAgLy8gdGVtcG8KLSAgICAgICAgNTMwLCAg
Ly8gY291cmllcgotICAgICAgICA1MzEsICAvLyBDaGF0Ci0gICAgICAgIDUzMiwgIC8vIG5ldG5l
d3MKLSAgICAgICAgNTQwLCAgLy8gVVVDUAotICAgICAgICA1NTYsICAvLyByZW1vdGVmcwotICAg
ICAgICA1NjMsICAvLyBOTlRQK1NTTAotICAgICAgICA1ODcsICAvLyBFU01UUAotICAgICAgICA2
MDEsICAvLyBzeXNsb2ctY29ubgotICAgICAgICA2MzYsICAvLyBMREFQK1NTTAotICAgICAgICA5
OTMsICAvLyBJTUFQK1NTTAotICAgICAgICA5OTUsICAvLyBQT1AzK1NTTAotICAgICAgICAyMDQ5
LCAvLyBORlMKLSAgICAgICAgMzY1OSwgLy8gYXBwbGUtc2FzbCAvIFBhc3N3b3JkU2VydmVyIFtB
cHBsZSBhZGRpdGlvbl0KLSAgICAgICAgNDA0NSwgLy8gbG9ja2QKLSAgICAgICAgNjAwMCwgLy8g
WDExCi0gICAgfTsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCogY29uc3QgYmxvY2tlZFBvcnRM
aXN0RW5kID0gYmxvY2tlZFBvcnRMaXN0Ci0gICAgICAgICsgc2l6ZW9mKGJsb2NrZWRQb3J0TGlz
dCkgLyBzaXplb2YoYmxvY2tlZFBvcnRMaXN0WzBdKTsKK1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiBSZXNvdXJjZUhhbmRsZTo6YnVmZmVyZWREYXRhKCkKK3sKKyAgICByZXR1cm4gbV9pbnRlcmNl
cHRvckhvc3QtPmJ1ZmZlcmVkRGF0YSgpOworfQogCi0gICAgLy8gSWYgdGhlIHBvcnQgaXMgbm90
IGluIHRoZSBibG9ja2VkIHBvcnQgbGlzdCwgYWxsb3cgaXQuCi0gICAgaWYgKCFzdGQ6OmJpbmFy
eV9zZWFyY2goYmxvY2tlZFBvcnRMaXN0LCBibG9ja2VkUG9ydExpc3RFbmQsIHBvcnQpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKK2NvbnN0IFJlc291cmNlUmVxdWVzdCYgUmVzb3VyY2VIYW5kbGU6
OnJlcXVlc3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3JtSGFuZGxlLT5yZXF1ZXN0
KCk7Cit9CiAKLSAgICAvLyBBbGxvdyBwb3J0cyAyMSBhbmQgMjIgZm9yIEZUUCBVUkxzLCBhcyBN
b3ppbGxhIGRvZXMuCi0gICAgaWYgKChwb3J0ID09IDIxIHx8IHBvcnQgPT0gMjIpICYmIHJlcXVl
c3QudXJsKCkucHJvdG9jb2xJcygiZnRwIikpCi0gICAgICAgIHJldHVybiB0cnVlOwordm9pZCBS
ZXNvdXJjZUhhbmRsZTo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVyKQoreworICAgIG1fcGxh
dGZvcm1IYW5kbGUtPnNldERlZmVyc0xvYWRpbmcoZGVmZXIpOworfQogCi0gICAgLy8gQWxsb3cg
YW55IHBvcnQgbnVtYmVyIGluIGEgZmlsZSBVUkwsIHNpbmNlIHRoZSBwb3J0IG51bWJlciBpcyBp
Z25vcmVkLgotICAgIGlmIChyZXF1ZXN0LnVybCgpLnByb3RvY29sSXMoImZpbGUiKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Cit2b2lkIFJlc291cmNlSGFuZGxl
OjpjbGVhckF1dGhlbnRpY2F0aW9uKCkKK3sKKyAgICBtX3BsYXRmb3JtSGFuZGxlLT5jbGVhckF1
dGhlbnRpY2F0aW9uKCk7CiB9Ci0gIAorCiBib29sIFJlc291cmNlSGFuZGxlOjpzaG91bGRDb250
ZW50U25pZmYoKSBjb25zdAogewotICAgIHJldHVybiBkLT5tX3Nob3VsZENvbnRlbnRTbmlmZjsK
KyAgICByZXR1cm4gbV9wbGF0Zm9ybUhhbmRsZS0+c2hvdWxkQ29udGVudFNuaWZmKCk7CiB9CiAK
IGJvb2wgUmVzb3VyY2VIYW5kbGU6OnNob3VsZENvbnRlbnRTbmlmZlVSTChjb25zdCBLVVJMJiB1
cmwpCiB7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIGlmIChzaG91bGRGb3JjZUNvbnRlbnRTbmlm
ZmluZykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSAgICAvLyBXZSBzaG91bGRuJ3Qg
Y29udGVudCBzbmlmZiBmaWxlIFVSTHMgYXMgdGhlaXIgTUlNRSB0eXBlIHNob3VsZCBiZSBlc3Rh
Ymxpc2hlZCB2aWEgdGhlaXIgZXh0ZW5zaW9uLgotICAgIHJldHVybiAhdXJsLnByb3RvY29sSXMo
ImZpbGUiKTsKKyAgICByZXR1cm4gUGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6c2hvdWxkQ29udGVu
dFNuaWZmVVJMKHVybCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmZvcmNlQ29udGVudFNu
aWZmaW5nKCkKIHsKLSAgICBzaG91bGRGb3JjZUNvbnRlbnRTbmlmZmluZyA9IHRydWU7CisgICAg
UGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6Zm9yY2VDb250ZW50U25pZmZpbmcoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlSW50ZXJjZXB0b3JIb3N0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdC5oCShyZXZpc2lvbiAwKQorKysgcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3RfaAorI2Rl
ZmluZSBSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdF9oCisKKyNpbmNsdWRlICJJbnRlcmNl
cHRvci5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1S
ZXNvdXJjZUhhbmRsZUNsaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElu
dGVyY2VwdG9yOworY2xhc3MgSW50ZXJjZXB0b3JDbGllbnQ7CitjbGFzcyBJbnRlcmNlcHRvckZh
Y3Rvcnk7CisKKy8vIEEgaGVscGVyIGNsYXNzIHVzZWQgYnkgUmVzb3VyY2VIYW5kbGUgdG8gbWVk
aWF0ZSBiZXR3ZWVuIGFuIGludGVybmFsIHJlc291cmNlCisvLyBoYW5kbGUsIGFuIGludGVyY2Vw
dG9yLCBhbmQgdGhlIHJlc291cmNlIGhhbmRsZSBjbGllbnQuIFRoaXMgY2xhc3MgaXMgc2V0IGFz
CisvLyB0aGUgY2xpZW50IG9mIHRoZSBpbnRlcm5hbCBoYW5kbGUuIEFzIGNhbGxiYWNrcyBvY2N1
ciwgdGhlIGhvc3QgYWxsb3dzIGFuCisvLyBpbnRlcmNlcHRvciB0byBpbnRlcnZlbmUgYnkgY2Fs
bGluZyB0aGUgdmFyaW9zIG1heWJlSW50ZXJjZXB0IG1ldGhvZHMuCisvLyBTZWUgUmVzb3VyY2VI
YW5kbGUgZm9yIGRldGFpbHMgb2YgaG93IHRoaXMgY2xhc3MgaXMgdXNlZC4KK2NsYXNzIFJlc291
cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0IDogcHJvdGVjdGVkIEludGVyY2VwdG9yQ2xpZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgUGxhdGZvcm1S
ZXNvdXJjZUhhbmRsZUNsaWVudCB7CitwdWJsaWM6CisgICAgLy8gUmVzb3VyY2VIYW5kbGUgb25s
eSBzdXBwb3J0cyBhIHNpbmdsZSBpbnRlcmNlcHRvciBmYWN0b3J5LgorICAgIHN0YXRpYyB2b2lk
IHNldEludGVyY2VwdG9yRmFjdG9yeShJbnRlcmNlcHRvckZhY3RvcnkqIGZhY3RvcnkpOworCitw
cml2YXRlOgorICAgIC8vIFRoaXMgY2xhc3MgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9m
IFJlc291cmNlSGFuZGxlCisgICAgZnJpZW5kIFJlc291cmNlSGFuZGxlOworCisgICAgLy8gRklY
TUU6IFN5bmNocm9ub3VzIGludGVyY2VwdGlvbiBoYXMgbm8gb3Bwb3J0dW5pdHkgdG8gaW50ZXJj
ZXB0IGludGVybWlkYWlyeSByZWRpcmVjdHMKKyAgICBzdGF0aWMgYm9vbCBtYXliZUludGVyY2Vw
dFN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMs
IFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsK
KyAgICBzdGF0aWMgYm9vbCBtYXliZUZhbGxiYWNrU3ljaHJvbm91c2x5KGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNw
b25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7CisKKyAgICBlbnVtIEludGVyY2VwdFR5cGUgewor
ICAgICAgICBJTlRFUkNFUFRfTk9ORSwKKyAgICAgICAgSU5URVJDRVBUX1JFUVVFU1QsCisgICAg
ICAgIElOVEVSQ0VQVF9SRURJUkVDVCwKKyAgICAgICAgSU5URVJDRVBUX1JFU1BPTlNFLAorICAg
ICAgICBJTlRFUkNFUFRfRVJST1IKKyAgICB9OworCisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcmNl
cHRvckhvc3QoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSk7CisKKyAgICAvLyBNZXRob2RzIGNhbGxl
ZCBieSB0aGUgUmVzb3VyY2VIYW5kbGUgZGlyZWN0bHkKKyAgICB2b2lkIGNyZWF0ZUludGVyY2Vw
dG9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCk7CisgICAgUmVzb3VyY2VIYW5kbGVD
bGllbnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CisgICAgdm9pZCBzZXRD
bGllbnQoUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCk7CisgICAgYm9vbCBzdGFydChGcmFt
ZSopOworICAgIHZvaWQgY2FuY2VsKCk7CisgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1
ZmZlcmVkRGF0YSgpOworCisgICAgLy8gSGVscGVycyB1c2VkIGludGVybmFsbHkgYnkgdGhpcyBj
bGFzcywgc2hvdWxkIG5vdCBiZSBjYWxsZWQgYnkgUmVzb3VyY2VIYW5kbGUKKyAgICB2b2lkIHN0
YXJ0SW50ZXJjZXB0b3IoSW50ZXJjZXB0VHlwZSBpbnRlcmNlcHRUeXBlLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmKTsKKyAgICBib29sIGlzSW50ZXJjZXB0aW5nKCkgeyByZXR1cm4gbV9pbnRlcmNl
cHRUeXBlICE9IElOVEVSQ0VQVF9OT05FOyB9CisKKyAgICAvLyBJbnRlcmNlcHRvckNsaWVudCBp
bXBsLCBjYWxsZWQgYnkgdGhlIGludGVyY2VwdG9yIGJlaW5nIGhvc3RlZC4KKyAgICB2aXJ0dWFs
IHZvaWQgZGVsaXZlclJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSk7CisgICAgdmlydHVhbCB2b2lkIGRlbGl2ZXJF
cnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcik7CisgICAgdmlydHVhbCB2b2lkIHJlc3Rh
cnRSZXF1ZXN0V2l0aG91dEludGVyY2VwdGlvbigpOworCisgICAgLy8gUGxhdGZvcm1SZXNvdXJj
ZUhhbmRsZUNsaWVudCBpbXBsCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIGJ5IHRo
ZSBpbnRlcm5hbCByZXNvdXJjZSBoYW5kbGUuCisgICAgLy8gVGhpcyBjbGFzcyBnZW5lcmFsbHkg
cGFzc2VzIG1ldGhvZCBjYWxscyB0aHJ1IHRvIHRoZSByZWFsIGNsaWVudCwKKyAgICAvLyB3aXRo
IGEgY291cGxlIG9mIGV4Y2VwdGlvbnMuCisgICAgLy8gMSkgV2hlbiBhIHJlZGlyZWN0IHJlc3Bv
bnNlIGlzIHJlY2VpdmVkLCBwcmlvciB0byBjYWxsaW5nIHRocnUgdG8gdGhlIHJlYWwKKyAgICAv
LyBjbGllbnQsIHRoZSBtYXliZUludGVyY2VwdFJlZGlyZWN0IG1ldGhvZCBpcyBjYWxsZWQgdG8g
YWxsb3cgaGlqYWNraW5nCisgICAgLy8gYXQgdGhhdCBwb2ludC4KKyAgICAvLyAyKSBXaGVuIHRo
ZSBmaW5hbCByZXBzb25zZSBpcyByZWNpZXZlZCwgcHJpb3IgdG8gY2FsbGluZyB0aHJ1IHRvIHRo
ZSByZWFsCisgICAgLy8gY2xpZW50LCB0aGUgbWF5YmVJbnRlcmNlcHRSZXNvbnNlIG1ldGhvZCBp
cyBjYWxsZWQgdG8gYWxsb3cgaGlqYWNraW5nCisgICAgLy8gYXQgdGhhdCBwb2ludC4KKyAgICB2
aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUqIGhhbmRs
ZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXEsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0
UmVzcG9uc2UpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUGxhdGZvcm1S
ZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkU2VuZERhdGEoUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSosIHVuc2lnbmVkIGxvbmcgbG9u
ZyAvKmJ5dGVzU2VudCovLCB1bnNpZ25lZCBsb25nIGxvbmcgLyp0b3RhbEJ5dGVzVG9CZVNlbnQq
Lyk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFBsYXRmb3JtUmVzb3VyY2VIYW5k
bGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhQbGF0Zm9ybVJlc291cmNlSGFuZGxlKik7CisgICAg
dmlydHVhbCB2b2lkIGRpZEZhaWwoUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291
cmNlRXJyb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2FzQmxvY2tlZChQbGF0Zm9ybVJlc291cmNl
SGFuZGxlKik7CisgICAgdmlydHVhbCB2b2lkIGNhbm5vdFNob3dVUkwoUGxhdGZvcm1SZXNvdXJj
ZUhhbmRsZSopOworICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FjaGVSZXNwb25zZShQbGF0Zm9ybVJl
c291cmNlSGFuZGxlKiwgQ2FjaGVTdG9yYWdlUG9saWN5Jik7CisgICAgdmlydHVhbCBib29sIHNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBsYXRmb3JtUmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOworICAgIHZpcnR1
YWwgdm9pZCBkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQbGF0Zm9ybVJlc291cmNl
SGFuZGxlKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVjZWl2ZWRDYW5jZWxsYXRpb24oUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSosIGNvbnN0IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CisjaWYgUExBVEZPUk0oTUFDKSAgICAgICAgCisgICAg
dmlydHVhbCBOU0NhY2hlZFVSTFJlc3BvbnNlKiB3aWxsQ2FjaGVSZXNwb25zZShQbGF0Zm9ybVJl
c291cmNlSGFuZGxlKiwgTlNDYWNoZWRVUkxSZXNwb25zZSogcmVzcG9uc2UpOworICAgIHZpcnR1
YWwgdm9pZCB3aWxsU3RvcEJ1ZmZlcmluZ0RhdGEoUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSosIGNv
bnN0IGNoYXIqLCBpbnQpOworI2VuZGlmCisjaWYgVVNFKENGTkVUV09SSykKKyAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkQ2FjaGVSZXNwb25zZShQbGF0Zm9ybVJlc291cmNlSGFuZGxlKiwgQ0ZDYWNo
ZWRVUkxSZXNwb25zZVJlZiByZXNwb25zZSk7CisjZW5kaWYKKworICAgIFJlc291cmNlSGFuZGxl
KiBtX2hhbmRsZTsKKyAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogbV9jbGllbnQ7CisgICAgSW50
ZXJjZXB0VHlwZSBtX2ludGVyY2VwdFR5cGU7CisgICAgYm9vbCBtX3dhc0NhbmNlbGxlZDsKKyAg
ICBib29sIG1fc3RhcnRlZEludGVyY2VwdG9yOworICAgIGJvb2wgbV9zdGFydGVkSW50ZXJuYWw7
CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9yZXNwb25zZURhdGE7CisgICAgT3duUHRyPElu
dGVyY2VwdG9yPiBtX2ludGVyY2VwdG9yOworICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsKK307
IAorCit9CisKKyNlbmRpZiAvLyBSZXNvdXJjZUhhbmRsZV9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBwbGF0Zm9ybVxuZXR3b3JrXFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0LmgKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdC5jcHAJKHJldmlzaW9uIDAp
CisrKyBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0LmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3QuaCIKKworI2luY2x1ZGUgIlJlc291
cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiICAvLyBGSVhNRTogaSB3aXNoIGZyYW1l
IHdhcyBub3QgYSBwYXJhbSB0byBzdGFydCEhCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Rh
dGljIEludGVyY2VwdG9yRmFjdG9yeSogZ19mYWN0b3J5OworCisvLyBGSVhNRTogd2hhdCBpcyB0
aGUgZ2F1cmFudGVlIHRoYXQgUmVzb3VyY2VIYW5kbGUgbWFrZXMgd2l0aCByZWdhcmQgdG8gcmVm
Y291bnRpbmc/CisvLyBBdCBsZWFzdCAqc29tZSogUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSBpbXBs
ZW1lbnRhdGlvbnMgd2lsbCBrZWVwIHRoZSBoYW5kbGUgYWxpdmUKKy8vIG9uY2UgaXRzIHN0YXJ0
ZWQsIGFuZCBjb250aW51ZSB0byBjYWxsIHRoZSAnY2xpZW50JyBiYWNrIHVudGlsIGNvbXBsZXRl
LiBJJ20gbm90CisvLyBzdXJlIGlmICphbGwqIGltcGxzIGhhdmUgdGhpcyBjaGFyYWN0ZXJpc3Rp
YyBvciBub3QsIG9yIGlmIHRoZXJlIGFyZSBhbnkgdXNhZ2VzCisvLyBvZiBSZXNvdXJjZUhhbmRs
ZSB0aGF0IGFjdHVhbGx5IGRlcGVuZCBvbiB0aGF0IGNoYXJhY3RlcmlzdGljPworLy8KKy8vIEkg
bG9va2VkIG92ZXIgdGhlIFJlc291cmNlSGFuZGxlOjpjcmVhdGUgY2FsbHNpdGUgaW4gd2Via2l0
IHN2biwgdGhleSBhbGwKKy8vIGFwcGVhciB0byBzdGFjayB0aGUgaGFuZGxlIGluIGEgcmVmcHRy
IGFuZCBkbyBub3QgYWN0dWFsbHkgZGVwZW5kIG9uICdsaXZlcworLy8gdW50aWwgY29tcGxldGUn
IGNoYXJhY3RlcmlzdGljLgorLy8KKy8vIEkgd29uZGVyIGlmIGEgZmluYWwgcmVsZWFzZSBieSB0
aGUgY2FsbGVyIHNob3VsZCBoYXZlICdjYW5jZWwnIHNlbWFudGljcz8KK3N0YXRpYyBib29sIGdf
YWRkcmVmcyA9IGZhbHNlOworCitzdGF0aWMgSW50ZXJjZXB0b3JGYWN0b3J5KiBmYWN0b3J5KCkK
K3sKKyAgICAvLyBGSVhNRTogdGhpcyBpcyBxdWljayBhbmQgZGlydHkgdGVzdCBjb2RlLCBmaW5k
IGEgcmVhbCB3YXkgdG8gdGVzdCB0aGlzCisgICAgcmV0dXJuIGdfZmFjdG9yeSA/IGdfZmFjdG9y
eSA6IGdldFRlc3RJbnRlcmNlcHRvckZhY3RvcnkoKTsKK30KKworLy8gc3RhdGljCit2b2lkIFJl
c291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0OjpzZXRJbnRlcmNlcHRvckZhY3RvcnkoSW50ZXJj
ZXB0b3JGYWN0b3J5KiBmYWN0b3J5KQoreworICAgIGdfZmFjdG9yeSA9IGZhY3Rvcnk7Cit9CisK
Ky8vIHN0YXRpYworYm9vbCBSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6bWF5YmVJbnRl
cmNlcHRTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVk
Q3JlZGVudGlhbHMgY3JlZGVudGlhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit7CisgICAgcmV0
dXJuIGZhY3RvcnkoKSA/IGZhY3RvcnkoKS0+bWF5YmVMb2FkU3luY2hyb25vdXNseShyZXF1ZXN0
LCBjcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKSA6IGZhbHNlOworfQorCisvLyBz
dGF0aWMKK2Jvb2wgUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6Om1heWJlRmFsbGJhY2tT
eWNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50
aWFscyBjcmVkZW50aWFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit7CisgICAgcmV0dXJuIGZhY3Rv
cnkoKSA/IGZhY3RvcnkoKS0+bWF5YmVGYWxsYmFja1N5Y2hyb25vdXNseShyZXF1ZXN0LCBjcmVk
ZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKSA6IGZhbHNlOworfQorCitSZXNvdXJjZUhh
bmRsZUludGVyY2VwdG9ySG9zdDo6UmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3QoUmVzb3Vy
Y2VIYW5kbGUqIGhhbmRsZSkKKyAgICA6IG1faGFuZGxlKGhhbmRsZSkKKyAgICAsIG1fY2xpZW50
KDApCisgICAgLCBtX2ludGVyY2VwdFR5cGUoSU5URVJDRVBUX05PTkUpCisgICAgLCBtX3dhc0Nh
bmNlbGxlZChmYWxzZSkKKyAgICAsIG1fc3RhcnRlZEludGVyY2VwdG9yKGZhbHNlKQorICAgICwg
bV9zdGFydGVkSW50ZXJuYWwoZmFsc2UpCit7CisgICAgQVNTRVJUKGhhbmRsZSk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6OmNyZWF0ZUludGVyY2VwdG9yKGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBtX2ludGVyY2VwdG9yLnNldChmYWN0
b3J5KCkgPyBmYWN0b3J5KCktPmNyZWF0ZUludGVyY2VwdG9yKHJlcXVlc3QsIHRoaXMpIDogMCk7
Cit9CisgCitib29sIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0OjpzdGFydChGcmFtZSog
ZnJhbWUpCit7CisgICAgQVNTRVJUKCFtX3dhc0NhbmNlbGxlZCk7CisKKyAgICBtX2ZyYW1lID0g
ZnJhbWU7ICAvLyBzbyB3ZSBjYW4gcmVzdGFydCB0aGUgcGxhdGZvcm0gaGFuZGxlIGxhdGVyIGlm
IG5lZWRlZCBsYXRlcgorCisgICAgaWYgKG1faW50ZXJjZXB0b3IgJiYgbV9pbnRlcmNlcHRvci0+
bWF5YmVJbnRlcmNlcHRSZXF1ZXN0KG1faGFuZGxlLT5yZXF1ZXN0KCkpKSB7CisgICAgICAgIHN0
YXJ0SW50ZXJjZXB0b3IoSU5URVJDRVBUX1JFUVVFU1QsIG1faGFuZGxlLT5yZXF1ZXN0KCkpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtX3N0YXJ0ZWRJbnRlcm5hbCA9IG1f
aGFuZGxlLT5zdGFydFBsYXRmb3JtSGFuZGxlKGZyYW1lKTsKKyAgICByZXR1cm4gbV9zdGFydGVk
SW50ZXJuYWw7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6OnN0YXJ0
SW50ZXJjZXB0b3IoSW50ZXJjZXB0VHlwZSBpbnRlcmNlcHRUeXBlLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCit7CisgICAgQVNTRVJUKG1faW50ZXJjZXB0b3IpOworICAgIEFTU0VS
VChpbnRlcmNlcHRUeXBlICE9IElOVEVSQ0VQVF9OT05FKTsKKyAgICBBU1NFUlQoIW1fc3RhcnRl
ZEludGVyY2VwdG9yKTsKKworICAgIG1faW50ZXJjZXB0VHlwZSA9IGludGVyY2VwdFR5cGU7Cisg
ICAgbV9yZXNwb25zZURhdGEgPSAwOworICAgIG1fc3RhcnRlZEludGVyY2VwdG9yID0gdHJ1ZTsK
KworICAgIGlmIChnX2FkZHJlZnMpCisgICAgICAgIG1faGFuZGxlLT5yZWYoKTsgIC8vIGJhbGFu
Y2VkIHdoZW4gdGhlIGludGVyY2VwdG9yIGZpbmlzaGVzIG9yIHdlJ3JlIGNhbmNlbGxlZAorCisg
ICAgaWYgKG1fc3RhcnRlZEludGVybmFsKSB7CisgICAgICAgIC8vIFRoZSBpbnRlcmNlcHRvciBp
cyB0YWtpbmcgb3Zlciwgd2UgaGF2ZSB0byBnZXQgcmlkIG9mIHRoZSBjdXJyZW50CisgICAgICAg
IC8vIHBsYXRmb3JtIGhhbmRsZSBpZiBpdHMgYWN0dWFsbHkgZG9pbmcgYW55dGhpbmcgYW5kIHJl
Y3JlYXRlIGEgbmV3CisgICAgICAgIC8vIGlkbGUgaW5zdGFuY2UuCisgICAgICAgIG1fc3RhcnRl
ZEludGVybmFsID0gZmFsc2U7CisgICAgICAgIG1faGFuZGxlLT5yZWNyZWF0ZVBsYXRmb3JtSGFu
ZGxlKHJlcXVlc3QsIG1fY2xpZW50ID8gdGhpcyA6IDApOworICAgIH0KKworICAgIG1faW50ZXJj
ZXB0b3ItPnN0YXJ0KCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6
OmNhbmNlbCgpCit7CisgICAgaWYgKCFtX3dhc0NhbmNlbGxlZCkgeworICAgICAgICBtX3dhc0Nh
bmNlbGxlZCA9IHRydWU7CisgICAgICAgIGlmIChpc0ludGVyY2VwdGluZygpKSB7CisgICAgICAg
ICAgICBpZiAobV9zdGFydGVkSW50ZXJjZXB0b3IpIHsKKyAgICAgICAgICAgICAgICBtX2ludGVy
Y2VwdG9yLT5jYW5jZWwoKTsKKyAgICAgICAgICAgICAgICBtX3N0YXJ0ZWRJbnRlcmNlcHRvciA9
IGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChnX2FkZHJlZnMpCisgICAgICAgICAgICAgICAg
ICAgIG1faGFuZGxlLT5kZXJlZigpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbV9zdGFydGVkSW50ZXJuYWwgPSBmYWxzZTsKKyAgICAgICAgICAgIG1faGFu
ZGxlLT5tX3BsYXRmb3JtSGFuZGxlLT5jYW5jZWwoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6c2V0Q2xpZW50KFJlc291cmNlSGFu
ZGxlQ2xpZW50KiBjbGllbnQpCit7CisgICAgQVNTRVJUKG1faGFuZGxlKTsKKyAgICBtX2NsaWVu
dCA9IGNsaWVudDsKKyAgICBtX2hhbmRsZS0+bV9wbGF0Zm9ybUhhbmRsZS0+c2V0Q2xpZW50KGNs
aWVudCA/IHRoaXMgOiAwKTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFJlc291cmNl
SGFuZGxlSW50ZXJjZXB0b3JIb3N0OjpidWZmZXJlZERhdGEoKQoreworICAgIGlmIChpc0ludGVy
Y2VwdGluZygpKQorICAgICAgICByZXR1cm4gbV9yZXNwb25zZURhdGE7CisgICAgZWxzZQorICAg
ICAgICByZXR1cm4gbV9oYW5kbGUtPm1fcGxhdGZvcm1IYW5kbGUtPmJ1ZmZlcmVkRGF0YSgpOwor
fQorCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0OjpkZWxpdmVyUmVzcG9uc2Uo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiBkYXRhKQoreworICAgIEFTU0VSVChpc0ludGVyY2VwdGluZygpICYmIG1fc3RhcnRlZEludGVy
Y2VwdG9yKTsKKyAgICBBU1NFUlQoZGF0YSk7CisKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+
IHByb3RlY3QobV9oYW5kbGUpOworICAgIG1fcmVzcG9uc2VEYXRhID0gZGF0YTsKKyAgICBpZiAo
bV9jbGllbnQgJiYgIW1fd2FzQ2FuY2VsbGVkKQorICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2
ZVJlc3BvbnNlKG1faGFuZGxlLCByZXNwb25zZSk7CisgICAgaWYgKG1fY2xpZW50ICYmICFtX3dh
c0NhbmNlbGxlZCkKKyAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKG1faGFuZGxlLCBt
X3Jlc3BvbnNlRGF0YS0+ZGF0YSgpLCBtX3Jlc3BvbnNlRGF0YS0+c2l6ZSgpLCBtX3Jlc3BvbnNl
RGF0YS0+c2l6ZSgpKTsKKyAgICBpZiAobV9jbGllbnQgJiYgIW1fd2FzQ2FuY2VsbGVkKQorICAg
ICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhtX2hhbmRsZSk7CisKKyAgICBtX3N0YXJ0
ZWRJbnRlcmNlcHRvciA9IGZhbHNlOworICAgIGlmIChnX2FkZHJlZnMpCisgICAgICAgIG1faGFu
ZGxlLT5kZXJlZigpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0Ojpk
ZWxpdmVyRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgQVNTRVJUKGlz
SW50ZXJjZXB0aW5nKCkgJiYgbV9zdGFydGVkSW50ZXJjZXB0b3IpOworCisgICAgaWYgKG1fY2xp
ZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChtX2hhbmRsZSwgZXJyb3IpOworCisgICAg
bV9zdGFydGVkSW50ZXJjZXB0b3IgPSBmYWxzZTsKKyAgICBpZiAoZ19hZGRyZWZzKQorICAgICAg
ICBtX2hhbmRsZS0+ZGVyZWYoKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9y
SG9zdDo6cmVzdGFydFJlcXVlc3RXaXRob3V0SW50ZXJjZXB0aW9uKCkKK3sKKyAgICBBU1NFUlQo
bV9pbnRlcmNlcHRUeXBlID09IElOVEVSQ0VQVF9SRVFVRVNUKTsKKyAgICBBU1NFUlQobV9zdGFy
dGVkSW50ZXJjZXB0b3IpOworCisgICAgbV9pbnRlcmNlcHRUeXBlID0gSU5URVJDRVBUX05PTkU7
CisgICAgaWYgKG1faGFuZGxlLT5zdGFydFBsYXRmb3JtSGFuZGxlKG1fZnJhbWUuZ2V0KCkpKSB7
CisgICAgICAgIG1fc3RhcnRlZEludGVybmFsID0gdHJ1ZTsKKyAgICAgICAgbV9zdGFydGVkSW50
ZXJjZXB0b3IgPSBmYWxzZTsKKyAgICAgICAgaWYgKGdfYWRkcmVmcykKKyAgICAgICAgICAgIG1f
aGFuZGxlLT5kZXJlZigpOworICAgIH0gZWxzZSB7CisgICAgICBtX2ludGVyY2VwdFR5cGUgPSBJ
TlRFUkNFUFRfUkVRVUVTVDsKKyAgICAgIFJlc291cmNlRXJyb3IgZXJyb3IoImludGVyY2VwdG9y
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgNTAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2hhbmRsZS0+cmVxdWVzdCgpLnVybCgpLnN0cmluZygpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBTdHJpbmcoKSAvKmxvY2FsaXplZCBkZXNjcmlwdGlvbiovKTsKKyAgICAgIGRl
bGl2ZXJFcnJvcihlcnJvcik7CisgICAgfQorfQorCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJj
ZXB0b3JIb3N0Ojp3aWxsU2VuZFJlcXVlc3QoUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSogaGFuZGxl
LCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGly
ZWN0UmVzcG9uc2UpCit7CisgICAgQVNTRVJUKGhhbmRsZSA9PSBtX2hhbmRsZS0+bV9wbGF0Zm9y
bUhhbmRsZSk7IAorICAgIEFTU0VSVChtX2NsaWVudCk7CisKKyAgICBSZWZQdHI8UmVzb3VyY2VI
YW5kbGU+IHByb3RlY3QobV9oYW5kbGUpOworCisgICAgLy8gR2l2ZSB0aGUgaW50ZXJjZXB0b3Ig
YSBjaGFuY2UgdG8gZWF0IHRoaXMgcmVkaXJlY3RSZXNwb25zZSBhbmQgcHJvdmlkZQorICAgIC8v
IGEgcmVzcG9uc2Ugb2YgaXRzIG93bi4gVGhlIHVzZSBjYXNlIGhlcmUgaXMgYXBwY2FjaGUgZmFs
bGJhY2sgcmVzb3VyY2VzLgorICAgIGNvbnN0IEtVUkwmIGxvY2F0aW9uID0gcmVxdWVzdC51cmwo
KTsKKyAgICBpZiAobV9pbnRlcmNlcHRvciAmJiBtX2ludGVyY2VwdG9yLT5tYXliZUludGVyY2Vw
dFJlZGlyZWN0KGxvY2F0aW9uKSkgeworICAgICAgICBzdGFydEludGVyY2VwdG9yKElOVEVSQ0VQ
VF9SRURJUkVDVCwgbV9oYW5kbGUtPnJlcXVlc3QoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX2NsaWVudC0+d2lsbFNlbmRSZXF1ZXN0KG1faGFuZGxlLCByZXF1ZXN0LCByZWRp
cmVjdFJlc3BvbnNlKTsKKworICAgIC8vIEFsc28gZ2l2ZSB0aGUgaW50ZXJjZXB0b3IgYSBjaGFu
Y2UgdG8gaW50ZXJjZXB0IHRoZSByZXF1ZXN0IGZvciB0aGUgbmV3IGxvY2F0aW9uLgorICAgIC8v
IFRoaXMgdXNlIGNhc2UgaGVyZSBpcyBjYXRjaGluZyByZWRpcmVjdHMgdG8gc29tZXRoaW5nIGlu
IGFuIGFwcGNhY2hlLgorICAgIGlmICghbV93YXNDYW5jZWxsZWQgJiYgbV9pbnRlcmNlcHRvciAm
JiBtX2ludGVyY2VwdG9yLT5tYXliZUludGVyY2VwdFJlcXVlc3QocmVxdWVzdCkpCisgICAgICAg
IHN0YXJ0SW50ZXJjZXB0b3IoSU5URVJDRVBUX1JFUVVFU1QsIHJlcXVlc3QpOworfQorCit2b2lk
IFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0OjpkaWRSZWNlaXZlUmVzcG9uc2UoUGxhdGZv
cm1SZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSkKK3sKKyAgICBBU1NFUlQoaGFuZGxlID09IG1faGFuZGxlLT5tX3BsYXRmb3JtSGFuZGxlKTsg
CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKworICAgIGlmIChtX2ludGVyY2VwdG9yICYmIG1faW50
ZXJjZXB0b3ItPm1heWJlSW50ZXJjZXB0UmVzcG9uc2UocmVzcG9uc2UpKQorICAgICAgICBzdGFy
dEludGVyY2VwdG9yKElOVEVSQ0VQVF9SRVNQT05TRSwgbV9oYW5kbGUtPnJlcXVlc3QoKSk7Cisg
ICAgZWxzZQorICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKG1faGFuZGxlLCBy
ZXNwb25zZSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6OmRpZEZh
aWwoUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZUVycm9yJiBl
cnJvcikKK3sKKyAgICBBU1NFUlQoaGFuZGxlID09IG1faGFuZGxlLT5tX3BsYXRmb3JtSGFuZGxl
KTsgCisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICAKKyAgICBpZiAobV9pbnRlcmNlcHRvciAm
JiBtX2ludGVyY2VwdG9yLT5tYXliZUludGVyY2VwdEVycm9yKGVycm9yKSkKKyAgICAgICAgc3Rh
cnRJbnRlcmNlcHRvcihJTlRFUkNFUFRfRVJST1IsIG1faGFuZGxlLT5yZXF1ZXN0KCkpOworICAg
IGVsc2UKKyAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwobV9oYW5kbGUsIGVycm9yKTsKK30KKwor
dm9pZCBSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6ZGlkU2VuZERhdGEoUGxhdGZvcm1S
ZXNvdXJjZUhhbmRsZSogaGFuZGxlLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNp
Z25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQoreworICAgIEFTU0VSVChoYW5kbGUg
PT0gbV9oYW5kbGUtPm1fcGxhdGZvcm1IYW5kbGUpOyAKKyAgICBBU1NFUlQobV9jbGllbnQpOwor
ICAgIG1fY2xpZW50LT5kaWRTZW5kRGF0YShtX2hhbmRsZSwgYnl0ZXNTZW50LCB0b3RhbEJ5dGVz
VG9CZVNlbnQpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0OjpkaWRS
ZWNlaXZlRGF0YShQbGF0Zm9ybVJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGgsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAgICBBU1NFUlQoaGFuZGxl
ID09IG1faGFuZGxlLT5tX3BsYXRmb3JtSGFuZGxlKTsgCisgICAgQVNTRVJUKG1fY2xpZW50KTsK
KyAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEobV9oYW5kbGUsIGRhdGEsIGxlbmd0aCwgbGVu
Z3RoUmVjZWl2ZWQpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0Ojpk
aWRGaW5pc2hMb2FkaW5nKFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKK3sKKyAgICBB
U1NFUlQoaGFuZGxlID09IG1faGFuZGxlLT5tX3BsYXRmb3JtSGFuZGxlKTsgCisgICAgQVNTRVJU
KG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhtX2hhbmRsZSk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6Ondhc0Jsb2NrZWQoUGxhdGZv
cm1SZXNvdXJjZUhhbmRsZSogaGFuZGxlKQoreworICAgIEFTU0VSVChoYW5kbGUgPT0gbV9oYW5k
bGUtPm1fcGxhdGZvcm1IYW5kbGUpOyAKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fY2xp
ZW50LT53YXNCbG9ja2VkKG1faGFuZGxlKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZUludGVy
Y2VwdG9ySG9zdDo6Y2Fubm90U2hvd1VSTChQbGF0Zm9ybVJlc291cmNlSGFuZGxlKiBoYW5kbGUp
Cit7CisgICAgQVNTRVJUKGhhbmRsZSA9PSBtX2hhbmRsZS0+bV9wbGF0Zm9ybUhhbmRsZSk7IAor
ICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPmNhbm5vdFNob3dVUkwobV9oYW5k
bGUpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0Ojp3aWxsQ2FjaGVS
ZXNwb25zZShQbGF0Zm9ybVJlc291cmNlSGFuZGxlKiBoYW5kbGUsIENhY2hlU3RvcmFnZVBvbGlj
eSYgcG9saWN5KQoreworICAgIEFTU0VSVChoYW5kbGUgPT0gbV9oYW5kbGUtPm1fcGxhdGZvcm1I
YW5kbGUpOyAKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fY2xpZW50LT53aWxsQ2FjaGVS
ZXNwb25zZShtX2hhbmRsZSwgcG9saWN5KTsKK30KKworYm9vbCBSZXNvdXJjZUhhbmRsZUludGVy
Y2VwdG9ySG9zdDo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoUGxhdGZvcm1SZXNvdXJjZUhh
bmRsZSogaGFuZGxlKQoreworICAgIEFTU0VSVChoYW5kbGUgPT0gbV9oYW5kbGUtPm1fcGxhdGZv
cm1IYW5kbGUpOyAKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIHJldHVybiBtX2NsaWVudC0+
c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UobV9oYW5kbGUpOworfQorCit2b2lkIFJlc291cmNl
SGFuZGxlSW50ZXJjZXB0b3JIb3N0OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
UGxhdGZvcm1SZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYgY2hhbGxlbmdlKQoreworICAgIEFTU0VSVChoYW5kbGUgPT0gbV9oYW5kbGUtPm1fcGxh
dGZvcm1IYW5kbGUpOyAKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fY2xpZW50LT5kaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UobV9oYW5kbGUsIGNoYWxsZW5nZSk7Cit9CisK
K3ZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6OmRpZENhbmNlbEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKK3sKKyAgICBBU1NFUlQoaGFuZGxlID09IG1f
aGFuZGxlLT5tX3BsYXRmb3JtSGFuZGxlKTsgCisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBt
X2NsaWVudC0+ZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UobV9oYW5kbGUsIGNoYWxs
ZW5nZSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6OnJlY2VpdmVk
Q2FuY2VsbGF0aW9uKFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKK3sKKyAgICBBU1NFUlQoaGFuZGxlID09IG1f
aGFuZGxlLT5tX3BsYXRmb3JtSGFuZGxlKTsgCisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBt
X2NsaWVudC0+cmVjZWl2ZWRDYW5jZWxsYXRpb24obV9oYW5kbGUsIGNoYWxsZW5nZSk7Cit9CisK
KyNpZiBQTEFURk9STShNQUMpICAgICAgICAKK3ZpcnR1YWwgTlNDYWNoZWRVUkxSZXNwb25zZSog
d2lsbENhY2hlUmVzcG9uc2UoUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBOU0NhY2hl
ZFVSTFJlc3BvbnNlKiByZXNwb25zZSkKK3sKKyAgICBBU1NFUlQoaGFuZGxlID09IG1faGFuZGxl
LT5tX3BsYXRmb3JtSGFuZGxlKTsgCisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVu
dC0+d2lsbENhY2hlUmVzcG9uc2UobV9oYW5kbGUsIHJlc3BvbnNlKTsKK30KKwordm9pZCBSZXNv
dXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6d2lsbFN0b3BCdWZmZXJpbmdEYXRhKFBsYXRmb3Jt
UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgY2hhcipkYXRhLCBpbnQgbGVuKSAKK3sKKyAg
ICBBU1NFUlQoaGFuZGxlID09IG1faGFuZGxlLT5tX3BsYXRmb3JtSGFuZGxlKTsgCisgICAgQVNT
RVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+d2lsbFN0b3BCdWZmZXJpbmdEYXRhKG1faGFu
ZGxlLCBkYXRhLCBsZW4pOworfQorI2VuZGlmCisKKyNpZiBVU0UoQ0ZORVRXT1JLKQorYm9vbCBS
ZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6c2hvdWxkQ2FjaGVSZXNwb25zZShQbGF0Zm9y
bVJlc291cmNlSGFuZGxlKiBoYW5kbGUsIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2Up
Cit7CisgICAgQVNTRVJUKGhhbmRsZSA9PSBtX2hhbmRsZS0+bV9wbGF0Zm9ybUhhbmRsZSk7IAor
ICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgcmV0dXJuIG1fY2xpZW50LT5zaG91bGRDYWNoZVJl
c3BvbnNlKG1faGFuZGxlLCByZXNwb25zZSk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogcGxhdGZvcm1cbmV0d29ya1xSZXNvdXJjZUhh
bmRsZUludGVyY2VwdG9ySG9zdC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQog
ICArIExGCgpJbmRleDogcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybVJlc291cmNlSGFuZGxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3JtUmVzb3VyY2VIYW5kbGUu
Y3BwCShyZXZpc2lvbiA0NDIwMikKKysrIHBsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1SZXNvdXJj
ZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDExICsyNCwxMSBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVJlc291cmNlSGFu
ZGxlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1SZXNvdXJjZUhhbmRsZUNsaWVudC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgogCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGltZXIu
aCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKQEAgLTM4LDE5ICszOCwxOSBAQAogCiBzdGF0aWMg
Ym9vbCBwb3J0QWxsb3dlZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKIAotUmVzb3VyY2VIYW5k
bGU6OlJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3Vy
Y2VIYW5kbGVDbGllbnQqIGNsaWVudCwgYm9vbCBkZWZlcnNMb2FkaW5nLAorUGxhdGZvcm1SZXNv
dXJjZUhhbmRsZTo6UGxhdGZvcm1SZXNvdXJjZUhhbmRsZShjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCwgYm9vbCBkZWZl
cnNMb2FkaW5nLAogICAgICAgICAgYm9vbCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgbWlnaHRE
b3dubG9hZEZyb21IYW5kbGUpCi0gICAgOiBkKG5ldyBSZXNvdXJjZUhhbmRsZUludGVybmFsKHRo
aXMsIHJlcXVlc3QsIGNsaWVudCwgZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmLCBt
aWdodERvd25sb2FkRnJvbUhhbmRsZSkpCisgICAgOiBkKG5ldyBQbGF0Zm9ybVJlc291cmNlSGFu
ZGxlSW50ZXJuYWwodGhpcywgcmVxdWVzdCwgY2xpZW50LCBkZWZlcnNMb2FkaW5nLCBzaG91bGRD
b250ZW50U25pZmYsIG1pZ2h0RG93bmxvYWRGcm9tSGFuZGxlKSkKIHsKIH0KIAotUGFzc1JlZlB0
cjxSZXNvdXJjZUhhbmRsZT4gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQsCitQYXNzUmVmUHRy
PFBsYXRmb3JtUmVzb3VyY2VIYW5kbGU+IFBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGll
bnQqIGNsaWVudCwKICAgICBGcmFtZSogZnJhbWUsIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBz
aG91bGRDb250ZW50U25pZmYsIGJvb2wgbWlnaHREb3dubG9hZEZyb21IYW5kbGUpCiB7CiAgICAg
aWYgKHNob3VsZENvbnRlbnRTbmlmZikKICAgICAgICAgc2hvdWxkQ29udGVudFNuaWZmID0gc2hv
dWxkQ29udGVudFNuaWZmVVJMKHJlcXVlc3QudXJsKCkpOwogCi0gICAgUmVmUHRyPFJlc291cmNl
SGFuZGxlPiBuZXdIYW5kbGUoYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNs
aWVudCwgZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmLCBtaWdodERvd25sb2FkRnJv
bUhhbmRsZSkpKTsKKyAgICBSZWZQdHI8UGxhdGZvcm1SZXNvdXJjZUhhbmRsZT4gbmV3SGFuZGxl
KGFkb3B0UmVmKG5ldyBQbGF0Zm9ybVJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVudCwgZGVm
ZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmLCBtaWdodERvd25sb2FkRnJvbUhhbmRsZSkp
KTsKIAogICAgIGlmICghcmVxdWVzdC51cmwoKS5pc1ZhbGlkKCkpIHsKICAgICAgICAgbmV3SGFu
ZGxlLT5zY2hlZHVsZUZhaWx1cmUoSW52YWxpZFVSTEZhaWx1cmUpOwpAQCAtNjEsMjAgKzYxLDQ1
IEBACiAgICAgICAgIG5ld0hhbmRsZS0+c2NoZWR1bGVGYWlsdXJlKEJsb2NrZWRGYWlsdXJlKTsK
ICAgICAgICAgcmV0dXJuIG5ld0hhbmRsZS5yZWxlYXNlKCk7CiAgICAgfQotICAgICAgICAKKwog
ICAgIGlmIChuZXdIYW5kbGUtPnN0YXJ0KGZyYW1lKSkKICAgICAgICAgcmV0dXJuIG5ld0hhbmRs
ZS5yZWxlYXNlKCk7CiAKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6
c2NoZWR1bGVGYWlsdXJlKEZhaWx1cmVUeXBlIHR5cGUpCitQYXNzUmVmUHRyPFBsYXRmb3JtUmVz
b3VyY2VIYW5kbGU+IFBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZVdpdGhvdXRTdGFydGlu
Zyhjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVD
bGllbnQqIGNsaWVudCwKKyAgICBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVu
dFNuaWZmLCBib29sIG1pZ2h0RG93bmxvYWRGcm9tSGFuZGxlKQogeworICAgIGlmIChzaG91bGRD
b250ZW50U25pZmYpCisgICAgICAgIHNob3VsZENvbnRlbnRTbmlmZiA9IHNob3VsZENvbnRlbnRT
bmlmZlVSTChyZXF1ZXN0LnVybCgpKTsKKworICAgIFJlZlB0cjxQbGF0Zm9ybVJlc291cmNlSGFu
ZGxlPiBuZXdIYW5kbGUoYWRvcHRSZWYobmV3IFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUocmVxdWVz
dCwgY2xpZW50LCBkZWZlcnNMb2FkaW5nLCBzaG91bGRDb250ZW50U25pZmYsIG1pZ2h0RG93bmxv
YWRGcm9tSGFuZGxlKSkpOworCisgICAgLy8gRklYTUU6IHdoYXQgYWJvdXQgdGhlc2UgdGVzdHMu
Li4gc2VlbXMgbGlrZSB0aGV5IHNob3VsZCBnbyBpbiBzdGFydC4uLgorICAgIC8vIG1vdmUgdGhl
IFJlc291cmNlSGFuZGxlOjpzdGFydD8KKyAgICAvKgorICAgIGlmICghcmVxdWVzdC51cmwoKS5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgbmV3SGFuZGxlLT5zY2hlZHVsZUZhaWx1cmUoSW52YWxpZFVS
TEZhaWx1cmUpOworICAgICAgICByZXR1cm4gbmV3SGFuZGxlLnJlbGVhc2UoKTsKKyAgICB9CisK
KyAgICBpZiAoIXBvcnRBbGxvd2VkKHJlcXVlc3QpKSB7CisgICAgICAgIG5ld0hhbmRsZS0+c2No
ZWR1bGVGYWlsdXJlKEJsb2NrZWRGYWlsdXJlKTsKKyAgICAgICAgcmV0dXJuIG5ld0hhbmRsZS5y
ZWxlYXNlKCk7CisgICAgfQorICAgICovCisKKyAgICByZXR1cm4gbmV3SGFuZGxlLnJlbGVhc2Uo
KTsKK30KKwordm9pZCBQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjpzY2hlZHVsZUZhaWx1cmUoRmFp
bHVyZVR5cGUgdHlwZSkKK3sKICAgICBkLT5tX2ZhaWx1cmVUeXBlID0gdHlwZTsKICAgICBkLT5t
X2ZhaWx1cmVUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6
OmZpcmVGYWlsdXJlKFRpbWVyPFJlc291cmNlSGFuZGxlPiopCit2b2lkIFBsYXRmb3JtUmVzb3Vy
Y2VIYW5kbGU6OmZpcmVGYWlsdXJlKFRpbWVyPFBsYXRmb3JtUmVzb3VyY2VIYW5kbGU+KikKIHsK
ICAgICBpZiAoIWNsaWVudCgpKQogICAgICAgICByZXR1cm47CkBAIC05MSwyMiArMTE2LDIyIEBA
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVJlc291cmNlSGFuZGxlQ2xpZW50KiBS
ZXNvdXJjZUhhbmRsZTo6Y2xpZW50KCkgY29uc3QKK1BsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGll
bnQqIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6OmNsaWVudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGQtPm1fY2xpZW50OwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGllbnQoUmVzb3Vy
Y2VIYW5kbGVDbGllbnQqIGNsaWVudCkKK3ZvaWQgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6c2V0
Q2xpZW50KFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCkKIHsKICAgICBkLT5t
X2NsaWVudCA9IGNsaWVudDsKIH0KIAotY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBSZXNvdXJjZUhh
bmRsZTo6cmVxdWVzdCgpIGNvbnN0Citjb25zdCBSZXNvdXJjZVJlcXVlc3QmIFBsYXRmb3JtUmVz
b3VyY2VIYW5kbGU6OnJlcXVlc3QoKSBjb25zdAogewogICAgIHJldHVybiBkLT5tX3JlcXVlc3Q7
CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OmNsZWFyQXV0aGVudGljYXRpb24oKQordm9pZCBQ
bGF0Zm9ybVJlc291cmNlSGFuZGxlOjpjbGVhckF1dGhlbnRpY2F0aW9uKCkKIHsKICNpZiBQTEFU
Rk9STShNQUMpCiAgICAgZC0+bV9jdXJyZW50TWFjQ2hhbGxlbmdlID0gbmlsOwpAQCAtMjA1LDEy
ICsyMzAsMTIgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAgIAotYm9vbCBSZXNvdXJjZUhhbmRs
ZTo6c2hvdWxkQ29udGVudFNuaWZmKCkgY29uc3QKK2Jvb2wgUGxhdGZvcm1SZXNvdXJjZUhhbmRs
ZTo6c2hvdWxkQ29udGVudFNuaWZmKCkgY29uc3QKIHsKICAgICByZXR1cm4gZC0+bV9zaG91bGRD
b250ZW50U25pZmY7CiB9CiAKLWJvb2wgUmVzb3VyY2VIYW5kbGU6OnNob3VsZENvbnRlbnRTbmlm
ZlVSTChjb25zdCBLVVJMJiB1cmwpCitib29sIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6OnNob3Vs
ZENvbnRlbnRTbmlmZlVSTChjb25zdCBLVVJMJiB1cmwpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIGlmIChzaG91bGRGb3JjZUNvbnRlbnRTbmlmZmluZykKQEAgLTIyMCw3ICsyNDUsNyBAQAog
ICAgIHJldHVybiAhdXJsLnByb3RvY29sSXMoImZpbGUiKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhh
bmRsZTo6Zm9yY2VDb250ZW50U25pZmZpbmcoKQordm9pZCBQbGF0Zm9ybVJlc291cmNlSGFuZGxl
Ojpmb3JjZUNvbnRlbnRTbmlmZmluZygpCiB7CiAgICAgc2hvdWxkRm9yY2VDb250ZW50U25pZmZp
bmcgPSB0cnVlOwogfQpJbmRleDogcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybVJlc291cmNlSGFu
ZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybVJlc291cmNlSGFu
ZGxlLmgJKHJldmlzaW9uIDQ0MjAyKQorKysgcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybVJlc291
cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAogICovCiAKLSNpZm5kZWYgUmVzb3VyY2VIYW5kbGVfaAotI2RlZmluZSBSZXNvdXJjZUhh
bmRsZV9oCisjaWZuZGVmIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVfaAorI2RlZmluZSBQbGF0Zm9y
bVJlc291cmNlSGFuZGxlX2gKIAogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgi
CiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgpAQCAtODIsOCArODIsOCBAQAogY2xhc3MgRnJh
bWU7CiBjbGFzcyBLVVJMOwogY2xhc3MgUmVzb3VyY2VFcnJvcjsKLWNsYXNzIFJlc291cmNlSGFu
ZGxlQ2xpZW50OwotY2xhc3MgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDsKK2NsYXNzIFBsYXRmb3Jt
UmVzb3VyY2VIYW5kbGVDbGllbnQ7CitjbGFzcyBQbGF0Zm9ybVJlc291cmNlSGFuZGxlSW50ZXJu
YWw7CiBzdHJ1Y3QgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIGNs
YXNzIFNjaGVkdWxlUGFpcjsKQEAgLTkxLDkgKzkxLDkgQEAKIAogdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IGNsYXNzIFRpbWVyOwogCi1jbGFzcyBSZXNvdXJjZUhhbmRsZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFJlc291cmNlSGFuZGxlPiB7CitjbGFzcyBQbGF0Zm9ybVJlc291cmNlSGFuZGxlIDogcHVi
bGljIFJlZkNvdW50ZWQ8UGxhdGZvcm1SZXNvdXJjZUhhbmRsZT4gewogcHJpdmF0ZToKLSAgICBS
ZXNvdXJjZUhhbmRsZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVu
dCosIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgbWln
aHREb3dubG9hZEZyb21IYW5kbGUpOworICAgIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZUNsaWVudCosIGJvb2wgZGVm
ZXJzTG9hZGluZywgYm9vbCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgbWlnaHREb3dubG9hZEZy
b21IYW5kbGUpOwogCiAgICAgZW51bSBGYWlsdXJlVHlwZSB7CiAgICAgICAgIEJsb2NrZWRGYWls
dXJlLApAQCAtMTAyLDcgKzEwMiw3IEBACiAKIHB1YmxpYzoKICAgICAvLyBGSVhNRTogc2hvdWxk
IG5vdCBuZWVkIHRoZSBGcmFtZQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxl
PiBjcmVhdGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqLCBG
cmFtZSosIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wg
bWlnaHREb3dubG9hZEZyb21IYW5kbGUgPSBmYWxzZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
UGxhdGZvcm1SZXNvdXJjZUhhbmRsZT4gY3JlYXRlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBs
YXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQqLCBGcmFtZSosIGJvb2wgZGVmZXJzTG9hZGluZywg
Ym9vbCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgbWlnaHREb3dubG9hZEZyb21IYW5kbGUgPSBm
YWxzZSk7CiAKICAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVz
b3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSwgRnJhbWUqIGZyYW1lKTsKICAgICBz
dGF0aWMgYm9vbCB3aWxsTG9hZEZyb21DYWNoZShSZXNvdXJjZVJlcXVlc3QmKTsKQEAgLTExMCw3
ICsxMTAsNyBAQAogICAgIHN0YXRpYyBib29sIGRpZFNlbmRCb2R5RGF0YURlbGVnYXRlRXhpc3Rz
KCk7CiAjZW5kaWYKIAotICAgIH5SZXNvdXJjZUhhbmRsZSgpOworICAgIH5QbGF0Zm9ybVJlc291
cmNlSGFuZGxlKCk7CiAKICNpZiBQTEFURk9STShNQUMpIHx8IFVTRShDRk5FVFdPUkspCiAgICAg
dm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CkBAIC0xNTgsNyArMTU4LDcgQEAKICNpZiBVU0UoV0lO
SU5FVCkKICAgICB2b2lkIHNldEhhc1JlY2VpdmVkUmVzcG9uc2UoYm9vbCA9IHRydWUpOwogICAg
IGJvb2wgaGFzUmVjZWl2ZWRSZXNwb25zZSgpIGNvbnN0OwotICAgIHZvaWQgZmlsZUxvYWRUaW1l
cihUaW1lcjxSZXNvdXJjZUhhbmRsZT4qKTsKKyAgICB2b2lkIGZpbGVMb2FkVGltZXIoVGltZXI8
UGxhdGZvcm1SZXNvdXJjZUhhbmRsZT4qKTsKICAgICB2b2lkIG9uSGFuZGxlQ3JlYXRlZChMUEFS
QU0pOwogICAgIHZvaWQgb25SZXF1ZXN0UmVkaXJlY3RlZChMUEFSQU0pOwogICAgIHZvaWQgb25S
ZXF1ZXN0Q29tcGxldGUoTFBBUkFNKTsKQEAgLTE2Nyw3ICsxNjcsNyBAQAogI2VuZGlmCiAKICNp
ZiBQTEFURk9STShRVCkgfHwgVVNFKENVUkwpIHx8IFVTRShTT1VQKQotICAgIFJlc291cmNlSGFu
ZGxlSW50ZXJuYWwqIGdldEludGVybmFsKCkgeyByZXR1cm4gZC5nZXQoKTsgfQorICAgIFBsYXRm
b3JtUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZ2V0SW50ZXJuYWwoKSB7IHJldHVybiBkLmdldCgp
OyB9CiAjZW5kaWYKIAogI2lmIFVTRShTT1VQKQpAQCAtMTgxLDE0ICsxODEsMTQgQEAKICAgICB2
b2lkIGNhbmNlbCgpOwogCiAgICAgLy8gVGhlIGNsaWVudCBtYXkgYmUgMCwgaW4gd2hpY2ggY2Fz
ZSBubyBjYWxsYmFja3Mgd2lsbCBiZSBtYWRlLgotICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBj
bGllbnQoKSBjb25zdDsKLSAgICB2b2lkIHNldENsaWVudChSZXNvdXJjZUhhbmRsZUNsaWVudCop
OworICAgIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCgpIGNvbnN0OworICAg
IHZvaWQgc2V0Q2xpZW50KFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQqKTsKIAogICAgIHZv
aWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKICAgICAgIAogICAgIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCgpIGNvbnN0OwogCi0gICAgdm9pZCBmaXJlRmFpbHVyZShUaW1lcjxSZXNv
dXJjZUhhbmRsZT4qKTsKKyAgICB2b2lkIGZpcmVGYWlsdXJlKFRpbWVyPFBsYXRmb3JtUmVzb3Vy
Y2VIYW5kbGU+Kik7CiAKIHByaXZhdGU6CiAjaWYgVVNFKFNPVVApCkBAIC0xOTksMTIgKzE5OSwx
NSBAQAogCiAgICAgdm9pZCBzY2hlZHVsZUZhaWx1cmUoRmFpbHVyZVR5cGUpOwogCi0gICAgYm9v
bCBzdGFydChGcmFtZSopOworICAgIGJvb2wgc3RhcnQoRnJhbWUqKTsgIC8vIGRlZmluZWQgcGVy
IHBsYXRmb3JtCiAKLSAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDsKLSAg
ICBPd25QdHI8UmVzb3VyY2VIYW5kbGVJbnRlcm5hbD4gZDsKKyAgICBmcmllbmQgY2xhc3MgUmVz
b3VyY2VIYW5kbGU7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1SZXNvdXJjZUhhbmRs
ZT4gY3JlYXRlV2l0aG91dFN0YXJ0aW5nKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBsYXRmb3Jt
UmVzb3VyY2VIYW5kbGVDbGllbnQqLCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29u
dGVudFNuaWZmLCBib29sIG1pZ2h0RG93bmxvYWRGcm9tSGFuZGxlID0gZmFsc2UpOworCisgICAg
ZnJpZW5kIGNsYXNzIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDsKKyAgICBPd25QdHI8
UGxhdGZvcm1SZXNvdXJjZUhhbmRsZUludGVybmFsPiBkOwogfTsKIAogfQogCi0jZW5kaWYgLy8g
UmVzb3VyY2VIYW5kbGVfaAorI2VuZGlmIC8vIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVfaApJbmRl
eDogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgJKHJldmlzaW9uIDQ0
MjAyKQorKysgcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMjMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
Zm5kZWYgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbF9oCi0jZGVmaW5lIFJlc291cmNlSGFuZGxlSW50
ZXJuYWxfaAotCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJSZXNvdXJj
ZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIgotI2luY2x1
ZGUgIlRpbWVyLmgiCi0KLSNpZiBVU0UoQ0ZORVRXT1JLKQotI2luY2x1ZGUgPENGTmV0d29yay9D
RlVSTENvbm5lY3Rpb25Qcml2Lmg+Ci0jZW5kaWYKLQotI2lmIFVTRShXSU5JTkVUKQotI2luY2x1
ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotI2VuZGlmCi0KLSNpZiBVU0Uo
Q1VSTCkKLSNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KLSNpbmNsdWRlICJGb3JtRGF0YVN0cmVhbUN1
cmwuaCIKLSNlbmRpZgotCi0jaWYgVVNFKFNPVVApCi0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+
Ci1jbGFzcyBGcmFtZTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oUVQpCi1jbGFzcyBRV2ViRnJh
bWU7Ci1jbGFzcyBRV2ViTmV0d29ya0pvYjsKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFFO
ZXR3b3JrUmVwbHlIYW5kbGVyOwotfQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCi0jaWZk
ZWYgX19PQkpDX18KLUBjbGFzcyBOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwotQGNsYXNz
IE5TVVJMQ29ubmVjdGlvbjsKLSNlbHNlCi1jbGFzcyBOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlOwotY2xhc3MgTlNVUkxDb25uZWN0aW9uOwotI2VuZGlmCi0jZW5kaWYKLQotLy8gVGhlIGFs
bG9jYXRpb25zIGFuZCByZWxlYXNlcyBpbiBSZXNvdXJjZUhhbmRsZUludGVybmFsIGFyZQotLy8g
Q29jb2EtZXhjZXB0aW9uLWZyZWUgKGVpdGhlciBzaW1wbGUgRm91bmRhdGlvbiBjbGFzc2VzIG9y
Ci0vLyBXZWJDb3JlUmVzb3VyY2VMb2FkZXJJbXAgd2hpY2ggYXZvaWRzIGRvaW5nIHdvcmsgaW4g
ZGVhbGxvYykuCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBSZXNvdXJjZUhhbmRs
ZUNsaWVudDsKLQotICAgIGNsYXNzIFJlc291cmNlSGFuZGxlSW50ZXJuYWwgOiBOb25jb3B5YWJs
ZSB7Ci0gICAgcHVibGljOgotICAgICAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKFJlc291cmNl
SGFuZGxlKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VI
YW5kbGVDbGllbnQqIGMsIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91bGRDb250ZW50U25p
ZmYsIGJvb2wgbWlnaHREb3dubG9hZEZyb21IYW5kbGUpCi0gICAgICAgICAgICA6IG1fY2xpZW50
KGMpCi0gICAgICAgICAgICAsIG1fcmVxdWVzdChyZXF1ZXN0KQotICAgICAgICAgICAgLCBzdGF0
dXMoMCkKLSAgICAgICAgICAgICwgbV9kZWZlcnNMb2FkaW5nKGRlZmVyc0xvYWRpbmcpCi0gICAg
ICAgICAgICAsIG1fc2hvdWxkQ29udGVudFNuaWZmKHNob3VsZENvbnRlbnRTbmlmZikKLSAgICAg
ICAgICAgICwgbV9taWdodERvd25sb2FkRnJvbUhhbmRsZShtaWdodERvd25sb2FkRnJvbUhhbmRs
ZSkKLSNpZiBVU0UoQ0ZORVRXT1JLKQotICAgICAgICAgICAgLCBtX2Nvbm5lY3Rpb24oMCkKLSNl
bmRpZgotI2lmIFVTRShXSU5JTkVUKQotICAgICAgICAgICAgLCBtX2ZpbGVIYW5kbGUoSU5WQUxJ
RF9IQU5ETEVfVkFMVUUpCi0gICAgICAgICAgICAsIG1fZmlsZUxvYWRUaW1lcihsb2FkZXIsICZS
ZXNvdXJjZUhhbmRsZTo6ZmlsZUxvYWRUaW1lcikKLSAgICAgICAgICAgICwgbV9yZXNvdXJjZUhh
bmRsZSgwKQotICAgICAgICAgICAgLCBtX3NlY29uZGFyeUhhbmRsZSgwKQotICAgICAgICAgICAg
LCBtX2pvYklkKDApCi0gICAgICAgICAgICAsIG1fdGhyZWFkSWQoMCkKLSAgICAgICAgICAgICwg
bV93cml0aW5nKGZhbHNlKQotICAgICAgICAgICAgLCBtX2Zvcm1EYXRhU3RyaW5nKDApCi0gICAg
ICAgICAgICAsIG1fZm9ybURhdGFMZW5ndGgoMCkKLSAgICAgICAgICAgICwgbV9ieXRlc1JlbWFp
bmluZ1RvV3JpdGUoMCkKLSAgICAgICAgICAgICwgbV9oYXNSZWNlaXZlZFJlc3BvbnNlKGZhbHNl
KQotICAgICAgICAgICAgLCBtX3Jlc2VuZChmYWxzZSkKLSNlbmRpZgotI2lmIFVTRShDVVJMKQot
ICAgICAgICAgICAgLCBtX2hhbmRsZSgwKQotICAgICAgICAgICAgLCBtX3VybCgwKQotICAgICAg
ICAgICAgLCBtX2N1c3RvbUhlYWRlcnMoMCkKLSAgICAgICAgICAgICwgbV9jYW5jZWxsZWQoZmFs
c2UpCi0gICAgICAgICAgICAsIG1fZm9ybURhdGFTdHJlYW0obG9hZGVyKQotI2VuZGlmCi0jaWYg
VVNFKFNPVVApCi0gICAgICAgICAgICAsIG1fbXNnKDApCi0gICAgICAgICAgICAsIG1fY2FuY2Vs
bGVkKGZhbHNlKQotICAgICAgICAgICAgLCBtX3JlcG9ydGVkSGVhZGVycyhmYWxzZSkKLSAgICAg
ICAgICAgICwgbV9nZmlsZSgwKQotICAgICAgICAgICAgLCBtX2lucHV0U3RyZWFtKDApCi0gICAg
ICAgICAgICAsIG1fY2FuY2VsbGFibGUoMCkKLSAgICAgICAgICAgICwgbV9idWZmZXIoMCkKLSAg
ICAgICAgICAgICwgbV9idWZmZXJTaXplKDApCi0gICAgICAgICAgICAsIG1fdG90YWwoMCkKLSAg
ICAgICAgICAgICwgbV9pZGxlSGFuZGxlcigwKQotICAgICAgICAgICAgLCBtX2ZyYW1lKDApCi0j
ZW5kaWYKLSNpZiBQTEFURk9STShRVCkKLSAgICAgICAgICAgICwgbV9qb2IoMCkKLSAgICAgICAg
ICAgICwgbV9mcmFtZSgwKQotI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICAgICAg
LCBtX3N0YXJ0V2hlblNjaGVkdWxlZChmYWxzZSkKLSAgICAgICAgICAgICwgbV9uZWVkc1NpdGVT
cGVjaWZpY1F1aXJrcyhmYWxzZSkKLSAgICAgICAgICAgICwgbV9jdXJyZW50TWFjQ2hhbGxlbmdl
KG5pbCkKLSNlbGlmIFVTRShDRk5FVFdPUkspCi0gICAgICAgICAgICAsIG1fY3VycmVudENGQ2hh
bGxlbmdlKDApCi0jZW5kaWYKLSAgICAgICAgICAgICwgbV9mYWlsdXJlVGltZXIobG9hZGVyLCAm
UmVzb3VyY2VIYW5kbGU6OmZpcmVGYWlsdXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25z
dCBLVVJMJiB1cmwgPSBtX3JlcXVlc3QudXJsKCk7Ci0gICAgICAgICAgICBtX3VzZXIgPSB1cmwu
dXNlcigpOwotICAgICAgICAgICAgbV9wYXNzID0gdXJsLnBhc3MoKTsKLSAgICAgICAgICAgIG1f
cmVxdWVzdC5yZW1vdmVDcmVkZW50aWFscygpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICB+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCgpOwotCi0gICAgICAgIFJlc291cmNlSGFuZGxlQ2xp
ZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQotICAgICAgICBSZXNvdXJjZUhhbmRs
ZUNsaWVudCogbV9jbGllbnQ7Ci0gICAgICAgIAotICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbV9y
ZXF1ZXN0OwotCi0gICAgICAgIC8vIFN1Z2dlc3RlZCBjcmVkZW50aWFscyBmb3IgdGhlIGN1cnJl
bnQgcmVkaXJlY3Rpb24gc3RlcC4KLSAgICAgICAgU3RyaW5nIG1fdXNlcjsKLSAgICAgICAgU3Ry
aW5nIG1fcGFzczsKLSAgICAgICAgCi0gICAgICAgIGludCBzdGF0dXM7Ci0KLSAgICAgICAgYm9v
bCBtX2RlZmVyc0xvYWRpbmc7Ci0gICAgICAgIGJvb2wgbV9zaG91bGRDb250ZW50U25pZmY7Ci0g
ICAgICAgIGJvb2wgbV9taWdodERvd25sb2FkRnJvbUhhbmRsZTsKLSNpZiBVU0UoQ0ZORVRXT1JL
KQotICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxDb25uZWN0aW9uUmVmPiBtX2Nvbm5lY3Rpb247Ci0j
ZWxpZiBQTEFURk9STShNQUMpCi0gICAgICAgIFJldGFpblB0cjxOU1VSTENvbm5lY3Rpb24+IG1f
Y29ubmVjdGlvbjsKLSAgICAgICAgUmV0YWluUHRyPFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVs
ZWdhdGU+IG1fZGVsZWdhdGU7Ci0gICAgICAgIFJldGFpblB0cjxpZD4gbV9wcm94eTsKLSAgICAg
ICAgYm9vbCBtX3N0YXJ0V2hlblNjaGVkdWxlZDsKLSAgICAgICAgYm9vbCBtX25lZWRzU2l0ZVNw
ZWNpZmljUXVpcmtzOwotI2VuZGlmCi0jaWYgVVNFKFdJTklORVQpCi0gICAgICAgIEhBTkRMRSBt
X2ZpbGVIYW5kbGU7Ci0gICAgICAgIFRpbWVyPFJlc291cmNlSGFuZGxlPiBtX2ZpbGVMb2FkVGlt
ZXI7Ci0gICAgICAgIEhJTlRFUk5FVCBtX3Jlc291cmNlSGFuZGxlOwotICAgICAgICBISU5URVJO
RVQgbV9zZWNvbmRhcnlIYW5kbGU7Ci0gICAgICAgIHVuc2lnbmVkIG1fam9iSWQ7Ci0gICAgICAg
IERXT1JEIG1fdGhyZWFkSWQ7Ci0gICAgICAgIGJvb2wgbV93cml0aW5nOwotICAgICAgICBjaGFy
KiBtX2Zvcm1EYXRhU3RyaW5nOwotICAgICAgICBpbnQgbV9mb3JtRGF0YUxlbmd0aDsKLSAgICAg
ICAgaW50IG1fYnl0ZXNSZW1haW5pbmdUb1dyaXRlOwotICAgICAgICBTdHJpbmcgbV9wb3N0UmVm
ZXJyZXI7Ci0gICAgICAgIGJvb2wgbV9oYXNSZWNlaXZlZFJlc3BvbnNlOwotICAgICAgICBib29s
IG1fcmVzZW5kOwotI2VuZGlmCi0jaWYgVVNFKENVUkwpCi0gICAgICAgIENVUkwqIG1faGFuZGxl
OwotICAgICAgICBjaGFyKiBtX3VybDsKLSAgICAgICAgc3RydWN0IGN1cmxfc2xpc3QqIG1fY3Vz
dG9tSGVhZGVyczsKLSAgICAgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwotICAgICAg
ICBib29sIG1fY2FuY2VsbGVkOwotCi0gICAgICAgIEZvcm1EYXRhU3RyZWFtIG1fZm9ybURhdGFT
dHJlYW07Ci0gICAgICAgIFZlY3RvcjxjaGFyPiBtX3Bvc3RCeXRlczsKLSNlbmRpZgotI2lmIFVT
RShTT1VQKQotICAgICAgICBTb3VwTWVzc2FnZSogbV9tc2c7Ci0gICAgICAgIFJlc291cmNlUmVz
cG9uc2UgbV9yZXNwb25zZTsKLSAgICAgICAgYm9vbCBtX2NhbmNlbGxlZDsKLSAgICAgICAgYm9v
bCBtX3JlcG9ydGVkSGVhZGVyczsKLSAgICAgICAgR0ZpbGUqIG1fZ2ZpbGU7Ci0gICAgICAgIEdJ
bnB1dFN0cmVhbSogbV9pbnB1dFN0cmVhbTsKLSAgICAgICAgR0NhbmNlbGxhYmxlKiBtX2NhbmNl
bGxhYmxlOwotICAgICAgICBjaGFyKiBtX2J1ZmZlcjsKLSAgICAgICAgZ3NpemUgbV9idWZmZXJT
aXplLCBtX3RvdGFsOwotICAgICAgICBndWludCBtX2lkbGVIYW5kbGVyOwotICAgICAgICBGcmFt
ZSogbV9mcmFtZTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKFFUKQotI2lmIFFUX1ZFUlNJT04gPCAw
eDA0MDQwMAotICAgICAgICBRV2ViTmV0d29ya0pvYiogbV9qb2I7Ci0jZWxzZQotICAgICAgICBR
TmV0d29ya1JlcGx5SGFuZGxlciogbV9qb2I7Ci0jZW5kaWYKLSAgICAgICAgUVdlYkZyYW1lKiBt
X2ZyYW1lOwotI2VuZGlmCi0KLSAgICAgICAgLy8gRklYTUU6IFRoZSBwbGF0Zm9ybSBjaGFsbGVu
Z2UgaXMgYWxtb3N0IGlkZW50aWNhbCB0byB0aGUgb25lIHN0b3JlZCBpbiBtX2N1cnJlbnRXZWJD
aGFsbGVuZ2UsIGJ1dCBpdCBoYXMgYSBkaWZmZXJlbnQgc2VuZGVyLiBXZSBvbmx5IG5lZWQgdG8g
c3RvcmUgYSBzZW5kZXIgcmVmZXJlbmNlIGhlcmUuCi0jaWYgUExBVEZPUk0oTUFDKQotICAgICAg
ICBOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICptX2N1cnJlbnRNYWNDaGFsbGVuZ2U7Ci0j
ZW5kaWYKLSNpZiBVU0UoQ0ZORVRXT1JLKQotICAgICAgICBDRlVSTEF1dGhDaGFsbGVuZ2VSZWYg
bV9jdXJyZW50Q0ZDaGFsbGVuZ2U7Ci0jZW5kaWYKLSAgICAgICAgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UgbV9jdXJyZW50V2ViQ2hhbGxlbmdlOwotCi0gICAgICAgIFJlc291cmNlSGFuZGxlOjpG
YWlsdXJlVHlwZSBtX2ZhaWx1cmVUeXBlOwotICAgICAgICBUaW1lcjxSZXNvdXJjZUhhbmRsZT4g
bV9mYWlsdXJlVGltZXI7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gUmVzb3VyY2VIYW5kbGVJbnRlcm5hbF9oCkluZGV4OiBwbGF0Zm9ybS9uZXR3b3JrL1Bs
YXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9uZXR3
b3JrL1BsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQuaAkocmV2aXNpb24gNDQyMDIpCisrKyBw
bGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjMsOSArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYg
UmVzb3VyY2VIYW5kbGVDbGllbnRfaAotI2RlZmluZSBSZXNvdXJjZUhhbmRsZUNsaWVudF9oCisj
aWZuZGVmIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnRfaAorI2RlZmluZSBQbGF0Zm9ybVJl
c291cmNlSGFuZGxlQ2xpZW50X2gKIAorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50Lmgi
ICAvLyBmb3IgQ2FjaGVTdG9yYWdlUG9saWN5CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC00
OCw0NSArNDksMzkgQEAKICAgICBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKICAgICBj
bGFzcyBDcmVkZW50aWFsOwogICAgIGNsYXNzIEtVUkw7Ci0gICAgY2xhc3MgUmVzb3VyY2VIYW5k
bGU7CisgICAgY2xhc3MgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZTsKICAgICBjbGFzcyBSZXNvdXJj
ZUVycm9yOwogICAgIHN0cnVjdCBSZXNvdXJjZVJlcXVlc3Q7CiAgICAgY2xhc3MgUmVzb3VyY2VS
ZXNwb25zZTsKIAotICAgIGVudW0gQ2FjaGVTdG9yYWdlUG9saWN5IHsKLSAgICAgICAgU3RvcmFn
ZUFsbG93ZWQsCi0gICAgICAgIFN0b3JhZ2VBbGxvd2VkSW5NZW1vcnlPbmx5LAotICAgICAgICBT
dG9yYWdlTm90QWxsb3dlZCwKLSAgICB9OwotICAgIAotICAgIGNsYXNzIFJlc291cmNlSGFuZGxl
Q2xpZW50IHsKKyAgICBjbGFzcyBQbGF0Zm9ybVJlc291cmNlSGFuZGxlQ2xpZW50IHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgflJlc291cmNlSGFuZGxlQ2xpZW50KCkgeyB9CisgICAg
ICAgIHZpcnR1YWwgflBsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQoKSB7IH0KIAogICAgICAg
ICAvLyByZXF1ZXN0IG1heSBiZSBtb2RpZmllZAotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNl
bmRSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgLypyZWRpcmVjdFJlc3BvbnNlKi8pIHsgfQotICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkU2VuZERhdGEoUmVzb3VyY2VIYW5kbGUqLCB1bnNpZ25lZCBsb25nIGxvbmcgLypieXRl
c1NlbnQqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qdG90YWxCeXRlc1RvQmVTZW50Ki8pIHsgfQor
ICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFBsYXRmb3JtUmVzb3VyY2VIYW5k
bGUqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiAvKnJlZGlyZWN0
UmVzcG9uc2UqLykgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShQbGF0Zm9y
bVJlc291cmNlSGFuZGxlKiwgdW5zaWduZWQgbG9uZyBsb25nIC8qYnl0ZXNTZW50Ki8sIHVuc2ln
bmVkIGxvbmcgbG9uZyAvKnRvdGFsQnl0ZXNUb0JlU2VudCovKSB7IH0KIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYpIHsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7
IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUq
KSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBSZXNvdXJjZUVycm9yJikgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB3YXNCbG9ja2VkKFJl
c291cmNlSGFuZGxlKikgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjYW5ub3RTaG93VVJMKFJl
c291cmNlSGFuZGxlKikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9u
c2UoUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0K
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFBsYXRmb3JtUmVzb3VyY2VIYW5k
bGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSop
IHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChQbGF0Zm9ybVJlc291cmNlSGFuZGxl
KiwgY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgd2FzQmxv
Y2tlZChQbGF0Zm9ybVJlc291cmNlSGFuZGxlKikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBj
YW5ub3RTaG93VVJMKFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUqKSB7IH0KIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgd2lsbENhY2hlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBDYWNoZVN0b3JhZ2VQ
b2xpY3kmKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxDYWNoZVJlc3BvbnNlKFBsYXRm
b3JtUmVzb3VyY2VIYW5kbGUqLCBDYWNoZVN0b3JhZ2VQb2xpY3kmKSB7IH0KIAotICAgICAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoUmVzb3VyY2VIYW5kbGUqKSB7
IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZENhbmNlbEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
KSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKFJlc291cmNl
SGFuZGxlKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSB7IH0KKyAgICAgICAgdmly
dHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFBsYXRmb3JtUmVzb3VyY2VIYW5k
bGUqKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2FuY2Vs
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSosIGNvbnN0IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWNlaXZl
ZENhbmNlbGxhdGlvbihQbGF0Zm9ybVJlc291cmNlSGFuZGxlKiwgY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmKSB7IH0KIAogI2lmIFBMQVRGT1JNKE1BQykgICAgICAgIAotICAgICAgICB2
aXJ0dWFsIE5TQ2FjaGVkVVJMUmVzcG9uc2UqIHdpbGxDYWNoZVJlc3BvbnNlKFJlc291cmNlSGFu
ZGxlKiwgTlNDYWNoZWRVUkxSZXNwb25zZSogcmVzcG9uc2UpIHsgcmV0dXJuIHJlc3BvbnNlOyB9
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsU3RvcEJ1ZmZlcmluZ0RhdGEoUmVzb3VyY2VIYW5k
bGUqLCBjb25zdCBjaGFyKiwgaW50KSB7IH0gCisgICAgICAgIHZpcnR1YWwgTlNDYWNoZWRVUkxS
ZXNwb25zZSogd2lsbENhY2hlUmVzcG9uc2UoUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSosIE5TQ2Fj
aGVkVVJMUmVzcG9uc2UqIHJlc3BvbnNlKSB7IHJldHVybiByZXNwb25zZTsgfQorICAgICAgICB2
aXJ0dWFsIHZvaWQgd2lsbFN0b3BCdWZmZXJpbmdEYXRhKFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUq
LCBjb25zdCBjaGFyKiwgaW50KSB7IH0gCiAjZW5kaWYKICNpZiBVU0UoQ0ZORVRXT1JLKQotICAg
ICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2FjaGVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIENG
Q2FjaGVkVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAg
dmlydHVhbCBib29sIHNob3VsZENhY2hlUmVzcG9uc2UoUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSos
IENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRp
ZgogICAgIH07CiAKSW5kZXg6IHBsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1SZXNvdXJjZUhhbmRs
ZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybVJlc291
cmNlSGFuZGxlSW50ZXJuYWwuaAkocmV2aXNpb24gNDQyMDIpCisrKyBwbGF0Zm9ybS9uZXR3b3Jr
L1BsYXRmb3JtUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywx
MCArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbF9oCi0jZGVmaW5lIFJlc291cmNlSGFuZGxlSW50ZXJuYWxfaAorI2lmbmRlZiBQ
bGF0Zm9ybVJlc291cmNlSGFuZGxlSW50ZXJuYWxfaAorI2RlZmluZSBQbGF0Zm9ybVJlc291cmNl
SGFuZGxlSW50ZXJuYWxfaAogCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybVJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0Lmgi
CiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKICNpbmNsdWRlICJUaW1lci5o
IgpAQCAtNjgsMTYgKzY4LDE2IEBACiAjZW5kaWYKICNlbmRpZgogCi0vLyBUaGUgYWxsb2NhdGlv
bnMgYW5kIHJlbGVhc2VzIGluIFJlc291cmNlSGFuZGxlSW50ZXJuYWwgYXJlCisvLyBUaGUgYWxs
b2NhdGlvbnMgYW5kIHJlbGVhc2VzIGluIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCBh
cmUKIC8vIENvY29hLWV4Y2VwdGlvbi1mcmVlIChlaXRoZXIgc2ltcGxlIEZvdW5kYXRpb24gY2xh
c3NlcyBvcgogLy8gV2ViQ29yZVJlc291cmNlTG9hZGVySW1wIHdoaWNoIGF2b2lkcyBkb2luZyB3
b3JrIGluIGRlYWxsb2MpLgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgUmVzb3Vy
Y2VIYW5kbGVDbGllbnQ7CisgICAgY2xhc3MgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZUNsaWVudDsK
IAotICAgIGNsYXNzIFJlc291cmNlSGFuZGxlSW50ZXJuYWwgOiBOb25jb3B5YWJsZSB7CisgICAg
Y2xhc3MgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZUludGVybmFsIDogTm9uY29weWFibGUgewogICAg
IHB1YmxpYzoKLSAgICAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbChSZXNvdXJjZUhhbmRsZSog
bG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlSGFuZGxlQ2xp
ZW50KiBjLCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLCBib29s
IG1pZ2h0RG93bmxvYWRGcm9tSGFuZGxlKQorICAgICAgICBQbGF0Zm9ybVJlc291cmNlSGFuZGxl
SW50ZXJuYWwoUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQqIGMsIGJvb2wgZGVm
ZXJzTG9hZGluZywgYm9vbCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgbWlnaHREb3dubG9hZEZy
b21IYW5kbGUpCiAgICAgICAgICAgICA6IG1fY2xpZW50KGMpCiAgICAgICAgICAgICAsIG1fcmVx
dWVzdChyZXF1ZXN0KQogICAgICAgICAgICAgLCBzdGF0dXMoMCkKQEAgLTg5LDcgKzg5LDcgQEAK
ICNlbmRpZgogI2lmIFVTRShXSU5JTkVUKQogICAgICAgICAgICAgLCBtX2ZpbGVIYW5kbGUoSU5W
QUxJRF9IQU5ETEVfVkFMVUUpCi0gICAgICAgICAgICAsIG1fZmlsZUxvYWRUaW1lcihsb2FkZXIs
ICZSZXNvdXJjZUhhbmRsZTo6ZmlsZUxvYWRUaW1lcikKKyAgICAgICAgICAgICwgbV9maWxlTG9h
ZFRpbWVyKGxvYWRlciwgJlBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6OmZpbGVMb2FkVGltZXIpCiAg
ICAgICAgICAgICAsIG1fcmVzb3VyY2VIYW5kbGUoMCkKICAgICAgICAgICAgICwgbV9zZWNvbmRh
cnlIYW5kbGUoMCkKICAgICAgICAgICAgICwgbV9qb2JJZCgwKQpAQCAtMTMyLDcgKzEzMiw3IEBA
CiAjZWxpZiBVU0UoQ0ZORVRXT1JLKQogICAgICAgICAgICAgLCBtX2N1cnJlbnRDRkNoYWxsZW5n
ZSgwKQogI2VuZGlmCi0gICAgICAgICAgICAsIG1fZmFpbHVyZVRpbWVyKGxvYWRlciwgJlJlc291
cmNlSGFuZGxlOjpmaXJlRmFpbHVyZSkKKyAgICAgICAgICAgICwgbV9mYWlsdXJlVGltZXIobG9h
ZGVyLCAmUGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6ZmlyZUZhaWx1cmUpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGNvbnN0IEtVUkwmIHVybCA9IG1fcmVxdWVzdC51cmwoKTsKICAgICAgICAgICAg
IG1fdXNlciA9IHVybC51c2VyKCk7CkBAIC0xNDAsMTAgKzE0MCwxMCBAQAogICAgICAgICAgICAg
bV9yZXF1ZXN0LnJlbW92ZUNyZWRlbnRpYWxzKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIH5SZXNvdXJjZUhhbmRsZUludGVybmFsKCk7CisgICAgICAgIH5QbGF0Zm9ybVJlc291cmNl
SGFuZGxlSW50ZXJuYWwoKTsKIAotICAgICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50
KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KLSAgICAgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIG1f
Y2xpZW50OworICAgICAgICBQbGF0Zm9ybVJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQoKSB7
IHJldHVybiBtX2NsaWVudDsgfQorICAgICAgICBQbGF0Zm9ybVJlc291cmNlSGFuZGxlQ2xpZW50
KiBtX2NsaWVudDsKICAgICAgICAgCiAgICAgICAgIFJlc291cmNlUmVxdWVzdCBtX3JlcXVlc3Q7
CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQAogI2VuZGlmCiAjaWYgVVNFKFdJTklORVQpCiAgICAgICAg
IEhBTkRMRSBtX2ZpbGVIYW5kbGU7Ci0gICAgICAgIFRpbWVyPFJlc291cmNlSGFuZGxlPiBtX2Zp
bGVMb2FkVGltZXI7CisgICAgICAgIFRpbWVyPFBsYXRmb3JtUmVzb3VyY2VIYW5kbGU+IG1fZmls
ZUxvYWRUaW1lcjsKICAgICAgICAgSElOVEVSTkVUIG1fcmVzb3VyY2VIYW5kbGU7CiAgICAgICAg
IEhJTlRFUk5FVCBtX3NlY29uZGFyeUhhbmRsZTsKICAgICAgICAgdW5zaWduZWQgbV9qb2JJZDsK
QEAgLTIyMSwxMCArMjIxLDEwIEBACiAjZW5kaWYKICAgICAgICAgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UgbV9jdXJyZW50V2ViQ2hhbGxlbmdlOwogCi0gICAgICAgIFJlc291cmNlSGFuZGxlOjpG
YWlsdXJlVHlwZSBtX2ZhaWx1cmVUeXBlOwotICAgICAgICBUaW1lcjxSZXNvdXJjZUhhbmRsZT4g
bV9mYWlsdXJlVGltZXI7CisgICAgICAgIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6OkZhaWx1cmVU
eXBlIG1fZmFpbHVyZVR5cGU7CisgICAgICAgIFRpbWVyPFBsYXRmb3JtUmVzb3VyY2VIYW5kbGU+
IG1fZmFpbHVyZVRpbWVyOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2Vu
ZGlmIC8vIFJlc291cmNlSGFuZGxlSW50ZXJuYWxfaAorI2VuZGlmIC8vIFBsYXRmb3JtUmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32128</attachid>
            <date>2009-07-01 09:49:40 -0700</date>
            <delta_ts>2009-07-16 10:53:49 -0700</delta_ts>
            <desc>Interceptor (rev2)</desc>
            <filename>FatResourceHandle.txt</filename>
            <type>text/plain</type>
            <size>136706</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTQzOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkyIEBACisyMDA5LTA3LTAxICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNoYWVsbkBn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIERlY2xhcmUgSW50ZXJjZXB0b3IgYW5kIEludGVyY2VwdG9yQ2xpZW50IGludGVyZmFjZXMg
dG8gYWxsb3cgaGlqYWNraW5nIG9mIFJlc291cmNlSGFuZGxlIGxvYWRzLiBJbnRlbmRlZAorICAg
ICAgICB0byBzdXBwb3J0IGxvYWRpbmcgb3V0IG9mIGFuIGFwcGNhY2hlLgorICAgICAgICAKKyAg
ICAgICAgTW9kcyB0byBSZXNvdXJjZUhhbmRsZSBpbmZyYXN0cnVjdHVyZSB0byBjYWxsIHRoZSBJ
bnRlcmNlcHRvciBpbnRlcmZhY2UgYW5kIGhhbmRsZSB0aGUgY2xpZW50IGNhbGxiYWNrcy4KKwor
ICAgICAgICAqIHJlbmFtZWQgdGhlIGV4aXN0aW5nIFJlc291cmNlSGFuZGxlIC0tPiBQbGF0Zm9y
bVJlc291cmNlSGFuZGxlCisgICAgICAgICogZGl0dG8gcmVuYW1pbmcgUmVzb3VyY2VIYW5kbGVD
bGllbnQgYW5kIFJlc291cmNlSGFuZGxlSW50ZXJuYWwKKwkqIG1vZGlmaWVkIFJlc291cmNlSGFu
ZGxlTWFjIGFuZCBGb3JtRGF0YVN0cmVhbU1hYyB0byBkZWFsIHdpdGggdGhvc2UgcmVuYW1lcwor
ICAgICAgICAqIGFkZGVkIG5ldyBSZXNvdXJjZUhhbmRsZSAoYW5kIFJlc291cmNlSGFuZGxlQ2xp
ZW50KSBjbGFzcyB0aGF0IHdpdGggdGhlIHNhbWUgaW50ZXJmYWNlcyBhcyBiZWZvcmUKKyAgICAg
ICAgICBidXQgYSBkaWZmZXJlbnQgaW1wbC4gVGhpcyBjbGFzcyAnd3JhcHMnIHRoZSBQbGF0Zm9y
bVJlc291cmNlSGFuZGxlLgorICAgICAgICAqIFJlc291cmNlSGFuZGxlIGludGVybmFsbHkgdXNl
cyBSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdCB0byBwbGF5IG1hbi1pbi10aGUtbWlkZGxl
IGJldHdlZW4KKyAgICAgICAgICB0aGUgJ3BsYXRmb3JtJyBoYW5kbGUgYW5kIHRoZSBSZXNvdXJj
ZUhhbmRsZUNsaWVudC4gSXRzIGEgY2xpZW50IG9mIHRoZSBwbGF0Zm9ybSBoYW5kbGUuCisJCisK
KyAgICAgICAgV0FSTklORzogTk8gVEVTVCBDQVNFUyBBRERFRCBPUiBDSEFOR0VECisgICAgICAg
IFN0aWxsIGhhdmUgdG8gcHV0IHRvZ2V0aGVyIHRlc3RzIGFuZCBpbnZva2UgdGhlbSB2aWEgYSBs
YXlvdXQgdGVzdHMuIEZvciBub3csIEkndmUgYmVlbgorICAgICAgICB1c2luZyB0aGUgVGVzdElu
dGVyY2VwdG9yIGNsYXNzIHRvIG1hbnVhbGx5IHRlc3QgdGhpbmdzLgorCisgICAgICAgIFRPRE86
CisgICAgICAgICogdGVzdCBjYXNlcworICAgICAgICAqIGNsYXNzIHJlbmFtZXMgZm9yIG90aGVy
IHBvcnRzCisKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9JbnRlcmNlcHRvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGVzdElu
dGVyY2VwdG9yOjpUZXN0SW50ZXJjZXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEludGVy
Y2VwdG9yRmFjdG9yeTo6Y3JlYXRlSW50ZXJjZXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VGVz
dEludGVyY2VwdG9yRmFjdG9yeTo6bWF5YmVMb2FkU3luY2hyb25vdXNseSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXN0SW50ZXJjZXB0b3JGYWN0b3J5OjptYXliZUZhbGxiYWNrU3ljaHJvbm91c2x5
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RJbnRlcmNlcHRvcjo6bWF5YmVJbnRlcmNlcHRSZXF1
ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RJbnRlcmNlcHRvcjo6bWF5YmVJbnRlcmNlcHRS
ZWRpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW50ZXJjZXB0b3I6Om1heWJlSW50ZXJj
ZXB0UmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEludGVyY2VwdG9yOjptYXliZUlu
dGVyY2VwdEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RJbnRlcmNlcHRvcjo6c3RhcnQp
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdEludGVyY2VwdG9yOjpjYW5jZWwpOgorICAgICAgICAo
V2ViQ29yZTo6VGVzdEludGVyY2VwdG9yOjpjYW5uZWRSZXNwb25zZURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Z2V0VGVzdEludGVyY2VwdG9yRmFjdG9yeSk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9JbnRlcmNlcHRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVyY2Vw
dG9yQ2xpZW50Ojp+SW50ZXJjZXB0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJj
ZXB0b3I6OkludGVyY2VwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVyY2VwdG9yOjp+SW50
ZXJjZXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJjZXB0b3I6OmludGVyY2VwdG9yQ2xp
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVyY2VwdG9yOjpzZXRJbnRlcmNlcHRvckNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcmNlcHRvcjo6c3RhcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJjZXB0b3JGYWN0b3J5Ojp+SW50ZXJjZXB0b3JGYWN0b3J5KToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVyY2VwdG9yRmFjdG9yeTo6Y3JlYXRlSW50ZXJjZXB0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJjZXB0b3JGYWN0b3J5OjptYXliZUxvYWRTeW5jaHJvbm91c2x5KToK
KyAgICAgICAgKFdlYkNvcmU6OkludGVyY2VwdG9yRmFjdG9yeTo6bWF5YmVGYWxsYmFja1N5Y2hy
b25vdXNseSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybVJlc291cmNlSGFu
ZGxlLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6OlBsYXRm
b3JtUmVzb3VyY2VIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1SZXNvdXJjZUhh
bmRsZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6
OmNyZWF0ZVdpdGhvdXRTdGFydGluZyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVJlc291
cmNlSGFuZGxlOjpzY2hlZHVsZUZhaWx1cmUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1S
ZXNvdXJjZUhhbmRsZTo6ZmlyZUZhaWx1cmUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1S
ZXNvdXJjZUhhbmRsZTo6Y2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUmVzb3Vy
Y2VIYW5kbGU6OnNldENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVJlc291cmNl
SGFuZGxlOjpyZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUmVzb3VyY2VIYW5k
bGU6OmNsZWFyQXV0aGVudGljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1SZXNv
dXJjZUhhbmRsZTo6c2hvdWxkQ29udGVudFNuaWZmKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtUmVzb3VyY2VIYW5kbGU6OnNob3VsZENvbnRlbnRTbmlmZlVSTCk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjpmb3JjZUNvbnRlbnRTbmlmZmluZyk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybVJlc291cmNlSGFuZGxlLmg6IENvcGllZCBm
cm9tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oLgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6Z2V0SW50ZXJuYWwpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1SZXNvdXJjZUhhbmRsZUNsaWVudC5oOiBDb3BpZWQg
ZnJvbSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQ6On5QbGF0Zm9ybVJl
c291cmNlSGFuZGxlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUmVzb3VyY2VI
YW5kbGVDbGllbnQ6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bVJlc291cmNlSGFuZGxlQ2xpZW50OjpkaWRTZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybVJlc291cmNlSGFuZGxlQ2xpZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1SZXNvdXJjZUhhbmRsZUNsaWVudDo6ZGlkUmVjZWl2ZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1SZXNvdXJjZUhhbmRsZUNsaWVudDo6ZGlkRmlu
aXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVJlc291cmNlSGFuZGxlQ2xp
ZW50OjpkaWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUmVzb3VyY2VIYW5kbGVD
bGllbnQ6Ondhc0Jsb2NrZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1SZXNvdXJjZUhh
bmRsZUNsaWVudDo6Y2Fubm90U2hvd1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVJl
c291cmNlSGFuZGxlQ2xpZW50Ojp3aWxsQ2FjaGVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybVJlc291cmNlSGFuZGxlQ2xpZW50OjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVJlc291cmNlSGFuZGxlQ2xpZW50OjpkaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1SZXNvdXJjZUhhbmRsZUNsaWVudDo6ZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1SZXNvdXJjZUhhbmRsZUNsaWVudDo6cmVjZWl2
ZWRDYW5jZWxsYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1SZXNvdXJjZUhhbmRs
ZUNsaWVudDo6d2lsbFN0b3BCdWZmZXJpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtUmVzb3VyY2VIYW5kbGVDbGllbnQ6OnNob3VsZENhY2hlUmVzcG9uc2UpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1SZXNvdXJjZUhhbmRsZUludGVybmFsLmg6IENvcGll
ZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgu
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVJlc291cmNlSGFuZGxlSW50ZXJuYWw6OlBsYXRm
b3JtUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVJl
c291cmNlSGFuZGxlSW50ZXJuYWw6OmNsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6
UmVzb3VyY2VIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6On5SZXNv
dXJjZUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjp3aWxsTG9hZEZyb21DYWNo
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6bG9hZHNCbG9ja2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdXBwb3J0c0J1ZmZlcmVkRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cmVjcmVhdGVQbGF0Zm9ybUhhbmRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c3RhcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGU6OnN0YXJ0UGxhdGZvcm1IYW5kbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGU6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6Y2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRD
bGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmJ1ZmZlcmVkRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cmVxdWVzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2V0RGVmZXJzTG9hZGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZTo6Y2xlYXJBdXRoZW50aWNhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZTo6c2hvdWxkQ29udGVudFNuaWZmKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlOjpzaG91bGRDb250ZW50U25pZmZVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGU6OmZvcmNlQ29udGVudFNuaWZmaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlOjpyZWxlYXNlRGVsZWdhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGU6OnJlbGVhc2VQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZTo6c2NoZWR1bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnVuc2NoZWR1
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpnZXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZTo6ZGVmYXVsdFNlc3Npb24pOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3QuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmZhY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJ
bnRlcmNlcHRvckhvc3Q6OnNldEludGVyY2VwdG9yRmFjdG9yeSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6bWF5YmVJbnRlcmNlcHRTeW5jaHJvbm91
c2x5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0Ojpt
YXliZUZhbGxiYWNrU3ljaHJvbm91c2x5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlSW50ZXJjZXB0b3JIb3N0OjpSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6Y3JlYXRlSW50ZXJj
ZXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6
OmFkanVzdEV4dHJhUmVmKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJj
ZXB0b3JIb3N0OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVy
Y2VwdG9ySG9zdDo6c3RhcnRJbnRlcmNlcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6Y2FuY2VsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0OjpzZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6OmJ1ZmZlcmVkRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6ZGVsaXZlclJlc3BvbnNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0OjpkZWxpdmVy
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6
OnJlc3RhcnRSZXF1ZXN0V2l0aG91dEludGVyY2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0OjpkaWRSZWNlaXZlUmVzcG9u
c2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6OmRp
ZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcmNl
cHRvckhvc3Q6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRl
cmNlcHRvckhvc3Q6OmRpZFNlbmREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlSW50ZXJjZXB0b3JIb3N0OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6d2FzQmxvY2tlZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6Y2Fubm90U2hvd1VSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6d2lsbENhY2hlUmVz
cG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6
OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlSW50ZXJjZXB0b3JIb3N0OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6OmRpZENh
bmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlSW50ZXJjZXB0b3JIb3N0OjpyZWNlaXZlZENhbmNlbGxhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6d2lsbFN0b3BCdWZmZXJpbmdE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0Ojpz
aG91bGRDYWNoZVJlc3BvbnNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
SGFuZGxlSW50ZXJjZXB0b3JIb3N0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6Oik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZUludGVyY2VwdG9ySG9zdDo6Y2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlSW50ZXJjZXB0b3JIb3N0Ojppc0ludGVyY2VwdGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6aXNTdGFydGVkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5oOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6YXNzb2NpYXRlU3RyZWFtV2l0aFJlc291cmNlSGFuZGxlKToKKyAgICAgICAgKFdlYkNv
cmU6OnBlcmZvcm1EaWRTZW5kRGF0YUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1S
ZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flBs
YXRmb3JtUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bVJlc291cmNlSGFuZGxlOjp+UGxhdGZvcm1SZXNvdXJjZUhhbmRsZSk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjpkaWRTZW5kQm9keURhdGFEZWxlZ2F0ZUV4aXN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjpzdGFydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjpjYW5jZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6c2V0RGVmZXJzTG9hZGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjpzY2hlZHVsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjp1bnNjaGVkdWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6OmRlbGVnYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6OnJlbGVhc2VEZWxlZ2F0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjpzdXBwb3J0c0J1ZmZlcmVkRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjpidWZmZXJlZERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6cmVsZWFzZVBy
b3h5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6OmNvbm5lY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6bG9hZHNCbG9j
a2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6OndpbGxMb2Fk
RnJvbUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6Omxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1SZXNv
dXJjZUhhbmRsZTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
UmVzb3VyY2VIYW5kbGU6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjpkaWRD
YW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bVJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENyZWRlbnRpYWwpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRD
cmVkZW50aWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6OnJl
Y2VpdmVkQ2FuY2VsbGF0aW9uKToKKyAgICAgICAgKC1bV2ViQ29yZVJlc291cmNlSGFuZGxlQXNE
ZWxlZ2F0ZSBpbml0V2l0aEhhbmRsZTpdKToKKyAgICAgICAgKC1bV2ViQ29yZVJlc291cmNlSGFu
ZGxlQXNEZWxlZ2F0ZSBjb25uZWN0aW9uOndpbGxTZW5kUmVxdWVzdDpyZWRpcmVjdFJlc3BvbnNl
Ol0pOgorICAgICAgICAoLVtXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rp
b25EaWRGaW5pc2hMb2FkaW5nOl0pOgorICAgICAgICAoLVtXZWJDb3JlUmVzb3VyY2VIYW5kbGVB
c0RlbGVnYXRlIGNvbm5lY3Rpb246ZGlkRmFpbFdpdGhFcnJvcjpdKToKKwogMjAwOS0wNy0wMSAg
SmFrdWIgV2llY3pvcmVrICA8ZmF3MjE3QGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBTaW1vbiBIYXVzbWFubi4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiA0NTE5OSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MTcsNiArNTE3LDE0IEBACiAJCTFD
RjZCRTE0MEU5QkI0NjcwMDI1RTFDRCAvKiBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRjZCRTEyMEU5QkI0
NjcwMDI1RTFDRCAvKiBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5tbSAqLzsgfTsKIAkJMUNGNkJF
MTUwRTlCQjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0Y2QkUxMzBFOUJCNDY3MDAy
NUUxQ0QgLyogT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24uaCAqLzsgfTsKIAkJMUNGQUUzMjMwQTZE
NkEzRjAwMzI1OTNEIC8qIGxpYm9iamMuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0ZBRTMyMjBBNkQ2QTNGMDAzMjU5M0QgLyogbGlib2Jq
Yy5keWxpYiAqLzsgfTsKKwkJMjQxODBFMjcwRkY5QjBBMTAwNTU4NEMxIC8qIFBsYXRmb3JtUmVz
b3VyY2VIYW5kbGVDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDI0MTgwRTIzMEZGOUIwQTEwMDU1ODRDMSAvKiBQbGF0Zm9ybVJlc291cmNlSGFu
ZGxlQ2xpZW50LmggKi87IH07CisJCTI0MTgwRTI4MEZGOUIwQTEwMDU1ODRDMSAvKiBQbGF0Zm9y
bVJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI0MTgwRTI0MEZGOUIwQTEwMDU1ODRDMSAvKiBQbGF0Zm9ybVJlc291
cmNlSGFuZGxlSW50ZXJuYWwuaCAqLzsgfTsKKwkJMjQxODBFMjkwRkY5QjBBMTAwNTU4NEMxIC8q
IFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjQxODBFMjUwRkY5QjBBMTAwNTU4NEMxIC8qIFBsYXRmb3JtUmVz
b3VyY2VIYW5kbGUuY3BwICovOyB9OworCQkyNDE4MEUyQTBGRjlCMEExMDA1NTg0QzEgLyogUGxh
dGZvcm1SZXNvdXJjZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjQxODBFMjYwRkY5QjBBMTAwNTU4NEMxIC8qIFBsYXRmb3JtUmVzb3VyY2VI
YW5kbGUuaCAqLzsgfTsKKwkJMjQxODBFMkYwRkY5QjBEMDAwNTU4NEMxIC8qIFJlc291cmNlSGFu
ZGxlSW50ZXJjZXB0b3JIb3N0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI0MTgwRTJCMEZGOUIwRDAwMDU1ODRDMSAvKiBSZXNvdXJjZUhhbmRsZUlu
dGVyY2VwdG9ySG9zdC5jcHAgKi87IH07CisJCTI0MTgwRTMwMEZGOUIwRDAwMDU1ODRDMSAvKiBJ
bnRlcmNlcHRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyNDE4MEUyQzBGRjlCMEQwMDA1NTg0QzEgLyogSW50ZXJjZXB0b3IuY3BwICovOyB9Owor
CQkyNDE4MEUzMTBGRjlCMEQwMDA1NTg0QzEgLyogUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhv
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0MTgw
RTJEMEZGOUIwRDAwMDU1ODRDMSAvKiBSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdC5oICov
OyB9OworCQkyNDE4MEUzMjBGRjlCMEQwMDA1NTg0QzEgLyogSW50ZXJjZXB0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0MTgwRTJFMEZGOUIwRDAw
MDU1ODRDMSAvKiBJbnRlcmNlcHRvci5oICovOyB9OwogCQkyOUE4MTIyNjBGQkI5QzFEMDA1MTAy
OTMgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUE4MTIwODBGQkI5QzFEMDA1MTAyOTMgLyogQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgKi87IH07CiAJCTI5QTgxMjI3MEZCQjlDMUQwMDUx
MDI5MyAvKiBBY2Nlc3NpYmlsaXR5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBODEyMDkwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2li
aWxpdHlUYWJsZS5jcHAgKi87IH07CiAJCTI5QTgxMjI4MEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nl
c3NpYmlsaXR5QVJJQUdyaWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjlBODEyMEEwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlBUklB
R3JpZC5jcHAgKi87IH07CkBAIC01NDMzLDYgKzU0NDEsMTQgQEAKIAkJMUNGNkJFMTIwRTlCQjQ2
NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24ubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDRjZCRTEzMEU5QkI0NjcwMDI1RTFDRCAvKiBPYmpD
Tm9kZUZpbHRlckNvbmRpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBP
YmpDTm9kZUZpbHRlckNvbmRpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
Q0ZBRTMyMjBBNkQ2QTNGMDAzMjU5M0QgLyogbGlib2JqYy5keWxpYiAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIi
OyBuYW1lID0gbGlib2JqYy5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYm9iamMuZHlsaWI7IHNv
dXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CisJCTI0MTgwRTIzMEZGOUIwQTEwMDU1ODRDMSAv
KiBQbGF0Zm9ybVJlc291cmNlSGFuZGxlQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMjQxODBFMjQwRkY5QjBBMTAwNTU4NEMxIC8qIFBsYXRmb3JtUmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0
Zm9ybVJlc291cmNlSGFuZGxlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMjQxODBFMjUwRkY5QjBBMTAwNTU4NEMxIC8qIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZvcm1SZXNvdXJjZUhh
bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI0MTgwRTI2MEZGOUIwQTEw
MDU1ODRDMSAvKiBQbGF0Zm9ybVJlc291cmNlSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMjQxODBFMkIwRkY5QjBEMDAwNTU4NEMxIC8qIFJlc291cmNlSGFuZGxlSW50
ZXJjZXB0b3JIb3N0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
c291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMjQxODBFMkMwRkY5QjBEMDAwNTU4NEMxIC8qIEludGVyY2VwdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVyY2VwdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjQxODBFMkQwRkY5QjBEMDAwNTU4NEMxIC8qIFJlc291cmNl
SGFuZGxlSW50ZXJjZXB0b3JIb3N0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTI0MTgwRTJFMEZGOUIwRDAwMDU1ODRDMSAvKiBJbnRlcmNlcHRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlcmNlcHRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyOUE4MTIwODBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MjlBODEyMDkwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlUYWJsZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5VGFibGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOUE4MTIwQTBGQkI5QzFEMDA1MTAyOTMgLyog
QWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEFjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMDE5NSw3ICsxMDIxMSwxNSBAQAogCQkJCTFBN0ZBNjE4MEREQTNCM0EwMDI4RjhB
NSAvKiBOZXR3b3JrU3RhdGVOb3RpZmllci5oICovLAogCQkJCTUxNEM3NjVGMENFOTIzQTEwMDdF
RjNDRCAvKiBQcm90ZWN0aW9uU3BhY2UuY3BwICovLAogCQkJCTUxNEM3NjYwMENFOTIzQTEwMDdF
RjNDRCAvKiBQcm90ZWN0aW9uU3BhY2UuaCAqLywKKwkJCQkyNDE4MEUyQjBGRjlCMEQwMDA1NTg0
QzEgLyogUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3QuY3BwICovLAorCQkJCTI0MTgwRTJD
MEZGOUIwRDAwMDU1ODRDMSAvKiBJbnRlcmNlcHRvci5jcHAgKi8sCisJCQkJMjQxODBFMkQwRkY5
QjBEMDAwNTU4NEMxIC8qIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0LmggKi8sCisJCQkJ
MjQxODBFMkUwRkY5QjBEMDAwNTU4NEMxIC8qIEludGVyY2VwdG9yLmggKi8sCiAJCQkJOTM0Rjcx
M0QwRDVBNkYyODAwMDE4RDY5IC8qIFJlc291cmNlRXJyb3JCYXNlLmNwcCAqLywKKwkJCQkyNDE4
MEUyMzBGRjlCMEExMDA1NTg0QzEgLyogUGxhdGZvcm1SZXNvdXJjZUhhbmRsZUNsaWVudC5oICov
LAorCQkJCTI0MTgwRTI0MEZGOUIwQTEwMDU1ODRDMSAvKiBQbGF0Zm9ybVJlc291cmNlSGFuZGxl
SW50ZXJuYWwuaCAqLywKKwkJCQkyNDE4MEUyNTBGRjlCMEExMDA1NTg0QzEgLyogUGxhdGZvcm1S
ZXNvdXJjZUhhbmRsZS5jcHAgKi8sCisJCQkJMjQxODBFMjYwRkY5QjBBMTAwNTU4NEMxIC8qIFBs
YXRmb3JtUmVzb3VyY2VIYW5kbGUuaCAqLywKIAkJCQk5MzRGNzEzQjBENUE2RjE5MDAwMThENjkg
LyogUmVzb3VyY2VFcnJvckJhc2UuaCAqLywKIAkJCQk1MTRDNzY2MzBDRTkyM0ExMDA3RUYzQ0Qg
LyogUmVzb3VyY2VIYW5kbGUuY3BwICovLAogCQkJCTUxNEM3NjY0MENFOTIzQTEwMDdFRjNDRCAv
KiBSZXNvdXJjZUhhbmRsZS5oICovLApAQCAtMTYzNzMsNiArMTYzOTcsOSBAQAogCQkJCTUxNEM3
Njc5MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTE0Qzc2N0EwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlSGFuZGxlQ2xpZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTRDNzY3QjBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjQxODBFMjcwRkY5QjBBMTAwNTU4NEMx
IC8qIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI0
MTgwRTI4MEZGOUIwQTEwMDU1ODRDMSAvKiBQbGF0Zm9ybVJlc291cmNlSGFuZGxlSW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovLAorCQkJCTI0MTgwRTJBMEZGOUIwQTEwMDU1ODRDMSAvKiBQbGF0Zm9y
bVJlc291cmNlSGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTZEMzczRjBBREJBNURFMDBB
NDU1NEQgLyogUmVzb3VyY2VMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNEM3NjUyMENF
OTIzNEUwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
NEM3NjdEMENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3RCYXNlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTE2Mzg3LDYgKzE2NDE0LDcgQEAKIAkJCQk1MUVDOTI1OTBDRTkwREI0MDBGOTAz
MDggLyogU1FMRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxOTYxMTc0MENBQzU2NTcwMDEw
QTgwQyAvKiBTUUxSZXN1bHRTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRkUxMTdFMENCRkZC
MzYwMDMwMTdGQSAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQky
NDE4MEUzMjBGRjlCMEQwMDA1NTg0QzEgLyogSW50ZXJjZXB0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxNUIwMzk5MENEMTY0MkEwMEI3RUE5QyAvKiBTUUxTdGF0ZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBN0NDQjE5MENEOTQ2OUEwMEI3QjY0RSAvKiBTUUxTdGF0ZW1lbnRDYWxsYmFj
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE3Q0NCMUEwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFN0
YXRlbWVudEVycm9yQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtMTY5MTMsNiArMTY5NDEs
NyBAQAogCQkJCUJDNzdEMTZDMEZGMTlGNTYwMDcwODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1uTGlz
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCQ0FFMzcwRkYxOTM4NTAwMDc2MkFFIC8qIERhdGFH
cmlkRGF0YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCQ0FFM0QwRkYxOTM5OTAwMDc2
MkFFIC8qIEpTRGF0YUdyaWREYXRhU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNDE4MEUz
MTBGRjlCMEQwMDA1NTg0QzEgLyogUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpAQCAtMTcxNzEsNiArMTcyMDAsOCBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1
aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAo
CisJCQkJMjQxODBFMjkwRkY5QjBBMTAwNTU4NEMxIC8qIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMjQxODBFMzAwRkY5QjBEMDAwNTU4NEMxIC8qIEludGVy
Y2VwdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQzRERTZFMEVBNzVDNjUwMDIzQ0NENiAv
KiBBY3RpdmVET01PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlFOTEyQUEwRUZBQzkw
NjAwOUQwQ0FGIC8qIEFuaW1hdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTZGRTExMTBF
NkUxREE3MDBCRjYwODggLyogQW5pbWF0aW9uQmFzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE4
OTI3LDYgKzE4OTU4LDcgQEAKIAkJCQlCQ0JDQUU1NDBGRjFBMjlFMDAwNzYyQUUgLyogSlNIVE1M
RGF0YUdyaWRFbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzdEMUZEMEZG
MjhEOUIwMDcwODg3QiAvKiBEYXRhR3JpZENvbHVtbkxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkM3N0QyMzkwRkYyOTgwODAwNzA4ODdCIC8qIERhdGFHcmlkQ29sdW1uLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTI0MTgwRTJGMEZGOUIwRDAwMDU1ODRDMSAvKiBSZXNvdXJjZUhhbmRsZUlu
dGVyY2VwdG9ySG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9JbnRlcmNlcHRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0ludGVyY2VwdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9JbnRlcmNlcHRvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludGVyY2VwdG9yLmgiCisKKyNpbmNsdWRl
ICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJGcmFtZS5oIiAgLy8gaSB3aXNoIGZyYW1l
IHdhcyBub3QgYSBwYXJhbSB0byBzdGFydCEhCisjaW5jbHVkZSAid3RmL1N0ZExpYkV4dHJhcy5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZJWE1FOiB0aGlzIGlzIHF1aWNrIGFuZCBk
aXJ0eSB0ZXN0IGNvZGUsIGZpbmQgYSByZWFsIHdheSB0byB0ZXN0IHRoaXMKKworY2xhc3MgVGVz
dEludGVyY2VwdG9yIDogcHVibGljIEludGVyY2VwdG9yIHsKK3B1YmxpYzoKKyAgICBUZXN0SW50
ZXJjZXB0b3IoSW50ZXJjZXB0b3JDbGllbnQqIGNsaWVudCkgOiBJbnRlcmNlcHRvcihjbGllbnQp
IHt9CisgICAgdmlydHVhbCBib29sIG1heWJlSW50ZXJjZXB0UmVxdWVzdChjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgbWF5YmVJbnRlcmNlcHRSZWRpcmVjdChjb25z
dCBLVVJMJiBsb2NhdGlvbik7CisgICAgdmlydHVhbCBib29sIG1heWJlSW50ZXJjZXB0UmVzcG9u
c2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZpcnR1YWwgYm9vbCBtYXliZUludGVy
Y2VwdEVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCk7Citwcml2YXRlOgorICAgIEtVUkwgbV91cmw7
CisgICAgS1VSTCBtX29yaWdVcmw7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IGNhbm5lZFJlc3BvbnNlRGF0YSgpOworfTsKKworY2xhc3MgVGVzdEludGVyY2VwdG9yRmFj
dG9yeSA6IHB1YmxpYyBJbnRlcmNlcHRvckZhY3RvcnkgeworcHVibGljOgorICAgIHZpcnR1YWwg
SW50ZXJjZXB0b3IqIGNyZWF0ZUludGVyY2VwdG9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIElu
dGVyY2VwdG9yQ2xpZW50Kik7CisgICAgdmlydHVhbCBib29sIG1heWJlTG9hZFN5bmNocm9ub3Vz
bHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJy
b3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICB2aXJ0dWFs
IGJvb2wgbWF5YmVGYWxsYmFja1N5Y2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBT
dG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0
b3I8Y2hhcj4mIGRhdGEpOworfTsKKworSW50ZXJjZXB0b3IqIFRlc3RJbnRlcmNlcHRvckZhY3Rv
cnk6OmNyZWF0ZUludGVyY2VwdG9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgSW50
ZXJjZXB0b3JDbGllbnQqIGNsaWVudCkKK3sKKyAgICBpZiAoKHJlcXVlc3QuaHR0cE1ldGhvZCgp
ICE9ICJHRVQiKSAmJiAocmVxdWVzdC5odHRwTWV0aG9kKCkgIT0gIkhFQUQiKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBpZiAocmVxdWVzdC51cmwoKS5xdWVyeSgpLmNvbnRhaW5zKCJpbnRl
cmNlcHRfIikpCisgICAgICAgIHJldHVybiBuZXcgVGVzdEludGVyY2VwdG9yKGNsaWVudCk7CisK
KyAgICByZXR1cm4gMDsKK30KKworYm9vbCBUZXN0SW50ZXJjZXB0b3JGYWN0b3J5OjptYXliZUxv
YWRTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxz
LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYpCit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRlc3RJbnRlcmNlcHRvckZhY3Rvcnk6Om1heWJl
RmFsbGJhY2tTeWNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVu
dGlhbHMsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JikK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVGVzdEludGVyY2VwdG9yOjptYXliZUlu
dGVyY2VwdFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGlm
IChtX29yaWdVcmwuaXNFbXB0eSgpKQorICAgICAgICBtX29yaWdVcmwgPSBtX3VybDsKKyAgICBt
X3VybCA9IHJlcXVlc3QudXJsKCk7CisgICAgcmV0dXJuIG1fdXJsLnF1ZXJ5KCkuY29udGFpbnMo
ImludGVyY2VwdF9tYWluIik7Cit9CisKK2Jvb2wgVGVzdEludGVyY2VwdG9yOjptYXliZUludGVy
Y2VwdFJlZGlyZWN0KGNvbnN0IEtVUkwmIGxvY2F0aW9uKQoreworICAgIFVOVVNFRF9QQVJBTShs
b2NhdGlvbik7CisgICAgcmV0dXJuIG1fdXJsLnF1ZXJ5KCkuY29udGFpbnMoImludGVyY2VwdF9y
ZWRpcmVjdCIpOworfQorCitib29sIFRlc3RJbnRlcmNlcHRvcjo6bWF5YmVJbnRlcmNlcHRSZXNw
b25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3sKKyAgICByZXR1cm4gbV91cmwucXVlcnko
KS5jb250YWlucygiaW50ZXJjZXB0X3Jlc3BvbnNlIikKKyAgICAgICAgICAgfHwgbV9vcmlnVXJs
LnF1ZXJ5KCkuY29udGFpbnMoImludGVyY2VwdF9yZXNwb25zZSIpOworfQorCitib29sIFRlc3RJ
bnRlcmNlcHRvcjo6bWF5YmVJbnRlcmNlcHRFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJikKK3sK
KyAgICByZXR1cm4gbV91cmwucXVlcnkoKS5jb250YWlucygiaW50ZXJjZXB0X2Vycm9yIik7Cit9
CisKK3ZvaWQgVGVzdEludGVyY2VwdG9yOjpzdGFydCgpCit7CisgICAgaWYgKG1fdXJsLnF1ZXJ5
KCkuY29udGFpbnMoInJlc3RhcnRfd29faW50ZXJjZXB0aW9uIikpIHsKKyAgICAgICAgaW50ZXJj
ZXB0b3JDbGllbnQoKS0+cmVzdGFydFJlcXVlc3RXaXRob3V0SW50ZXJjZXB0aW9uKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gY2Fu
bmVkUmVzcG9uc2VEYXRhKCk7CisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZShtX3VybCwg
U3RyaW5nKCJ0ZXh0L2h0bWwiKSwgZGF0YS0+c2l6ZSgpLCBTdHJpbmcoKSwgU3RyaW5nKCkpOwor
ICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKDIwMCk7CisgICAgcmVzcG9uc2Uuc2V0SFRU
UFN0YXR1c1RleHQoU3RyaW5nKCJPSyIpKTsKKyAgICBpbnRlcmNlcHRvckNsaWVudCgpLT5kZWxp
dmVyUmVzcG9uc2UocmVzcG9uc2UsIGRhdGEpOworfQorCit2b2lkIFRlc3RJbnRlcmNlcHRvcjo6
Y2FuY2VsKCkKK3sKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFRlc3RJbnRlcmNlcHRv
cjo6Y2FubmVkUmVzcG9uc2VEYXRhKCkKK3sKKyAgICBzdGF0aWMgY2hhciBrQ2FubmVkU3RyaW5n
W10gPSAiaGVsbG8gdGhlcmUgZnJvbSBpbnRlcmNlcHQgbGFuZCI7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChSZWZQdHI8U2hhcmVkQnVmZmVyPiwgZGF0YSwgKCkpOworICAgIGlmICghZGF0YSkK
KyAgICAgICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGtDYW5uZWRTdHJpbmcsIHNpemVv
ZihrQ2FubmVkU3RyaW5nKSk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK0ludGVyY2VwdG9yRmFj
dG9yeSogZ2V0VGVzdEludGVyY2VwdG9yRmFjdG9yeSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChUZXN0SW50ZXJjZXB0b3JGYWN0b3J5LCB0ZXN0RmFjdG9yeSwgKCkpOworICAgIHJldHVy
biAmdGVzdEZhY3Rvcnk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNo
YW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9JbnRlcmNlcHRvci5jcHAKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpOYW1lOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvSW50ZXJjZXB0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvSW50ZXJjZXB0b3IuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9JbnRlcmNlcHRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgSW50ZXJjZXB0b3JfaAorI2RlZmluZSBJbnRlcmNlcHRvcl9oCisKKyNpbmNsdWRlICJSZXNv
dXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnRl
cmNlcHRvcjsKK2NsYXNzIEludGVyY2VwdG9yQ2xpZW50OworY2xhc3MgSW50ZXJjZXB0b3JGYWN0
b3J5OworY2xhc3MgU2hhcmVkQnVmZmVyOworICAgIAorCisvLyBJbnRlcmZhY2UgdXNlZCBhbmQg
aW50ZXJjZXB0b3IgcmVzcG9uc2VzIGZvciBkZWxpdmVyeSBiYWNrIHRvIHRoZSBjbGllbnQuCitj
bGFzcyBJbnRlcmNlcHRvckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SW50ZXJjZXB0
b3JDbGllbnQoKSB7fQorCisgICAgLy8gQ2FsbGVkIGJ5IGFuIGludGVyY2VwdG9yIHRvIHNjaGVk
dWxlIGEgcmVzcG9uc2UgZm9yIGRlbGl2ZXJ5IGJhY2sgdG8KKyAgICAvLyB0aGUgY2xpZW50LiBJ
dCBpcyBhbiBlcnJvciB0byBjYWxsIHdpdGhvdXQgaGF2aW5nIGJlZW4gc3RhcnRlZC4KKyAgICB2
aXJ0dWFsIHZvaWQgZGVsaXZlclJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSkgPSAwOworCisgICAgLy8gQ2FsbGVk
IGJ5IGFuIGludGVyY2VwdG9yIHRvIHNjaGVkdWxlIGFuIGVycm9yIGZvciBkZWxpdmVyeSBiYWNr
IHRvCisgICAgLy8gdGhlIGNsaWVudC4gSXQgaXMgYW4gZXJyb3IgdG8gY2FsbCB3aXRob3V0IGhh
dmluZyBiZWVuIHN0YXJ0ZWQuCisgICAgdmlydHVhbCB2b2lkIGRlbGl2ZXJFcnJvcihjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnJvcikgPSAwOworCisgICAgLy8gQ2FsbGVkIGJ5IGFuIGludGVyY2Vw
dG9yIHRvIHJlc3RhcnQgdGhlIGxvYWQgdGhpcyB0aW1lIHdpdG91dCBpbnRlcmNlcHRpb24uCisg
ICAgLy8gSXQgaXMgYW4gZXJyb3IgdG8gY2FsbCB3aXRob3V0IGhhdmluZyBiZWVuIHN0YXJ0ZWQg
dG8gaW50ZXJjZXB0IGEgcmVxdWVzdC4KKyAgICAvLyBUbyBjbGFyaWZ5LCB0aGlzIG1ldGhvZCBz
aG91bGQgbm90IGJlIGNhbGxlZCBhZnRlciBoYXZpbmcgYmVlbiBzdGFydGVkIHRvCisgICAgLy8g
aW50ZXJjZXB0IGEgcmVkaXJlY3Qgb3IgcmVzcG9uc2UsIGl0cyBvbmx5IHZhbGlkIHRvIGNhbGwg
aW4gdGhlCisgICAgLy8gbWF5YmVJbnRlcmNlcHRSZXF1ZXN0IGNhc2Ugc3BlY2lmaWNhbGx5Lgor
ICAgIHZpcnR1YWwgdm9pZCByZXN0YXJ0UmVxdWVzdFdpdGhvdXRJbnRlcmNlcHRpb24oKSA9IDA7
Cit9OworCisvLyBBbiBpbnRlcmNlcHRvciBjYW4gcHJlLWVtcHRpdmVseSBoaWphY2sgcmVzb3Vy
Y2UgbG9hZHMgYW5kCisvLyBwcm92aWRlIGRhdGEgb2YgaXRzIG93biBpbnN0ZWFkIG9mIGFjdHVh
bGx5IGdvaW5nIHRvIHRoZSBuZXR3b3JrLiBBbgorLy8gaW50ZXJjZXB0b3IgY2FuIGFsc28gaGlq
YWNrIGludGVybWVkaWFyeSByZWRpcmVjdCByZXNwb25zZXMgb3IgdGhlIGZpbmFsCisvLyByZXNw
b25zZSwgcmVwbGFjaW5nIHRob3NlIHJlc3BvbnNlcyB3aXRoIGl0cyBvd24gZGF0YSBpbnN0ZWFk
LgorLy8KKy8vIEludGVyY2VwdGlvbiBpcyB0cmFuc3BhcmVudCB0byBjbGllbnRzIG9mIHRoZSBS
ZXNvdXJjZUhhbmRsZSBjbGFzcy4gQ2xpZW50cworLy8gY2FuJ3QgZGlzdGluZ3Vpc2ggYmV0d2Vl
biByZXNwb25zZXMgcmV0cmlldmVkIGZyb20gdGhlIG5ldHdvcmsgYW5kCisvLyBpbnRlcmNlcHRv
ciBnZW5lcmF0ZWQgcmVzcG9uc2VzLgorY2xhc3MgSW50ZXJjZXB0b3IgeworcHVibGljOgorICAg
IEludGVyY2VwdG9yKEludGVyY2VwdG9yQ2xpZW50KiBjbGllbnQpIDogbV9pbnRlcmNlcHRvckNs
aWVudChjbGllbnQpIHt9CisKKyAgICB2aXJ0dWFsIH5JbnRlcmNlcHRvcigpIHt9CisKKyAgICBJ
bnRlcmNlcHRvckNsaWVudCogaW50ZXJjZXB0b3JDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2lu
dGVyY2VwdG9yQ2xpZW50OyB9CisgICAgdm9pZCBzZXRJbnRlcmNlcHRvckNsaWVudChJbnRlcmNl
cHRvckNsaWVudCogY2xpZW50KSAgeyBtX2ludGVyY2VwdG9yQ2xpZW50ID0gY2xpZW50OyB9CisK
KyAgICAvLyBDYWxsZWQgZm9yIGV2ZXJ5IHJlcXVlc3QgbWFkZSwgaW5jbHVkaW5nIHJlcXVlc3Rz
IGZvciB0aGUgbmV3IAorICAgIC8vIGxvY2F0aW9uIG9mIGEgcmVkaXJlY3QuIENhbiByZXR1cm4g
dHJ1ZSBpZiB0aGUgcmVxdWVzdCBpZiBpdAorICAgIC8vIHNob3VsZCBiZSBpbnRlcmNlcHRlZCwg
b3IgZmFsc2UgdG8gYWxsb3cgdGhlIHJlcXVlc3QgdG8gYmUgaGFuZGxlZCBiZQorICAgIC8vIGhh
bmRsZWQgaW4gdGhlIG5vcm1hbCBtYW5uZXIuIAorICAgIHZpcnR1YWwgYm9vbCBtYXliZUludGVy
Y2VwdFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgPSAwOworCisgICAgLy8gQ2FsbGVk
IGFmdGVyIGhhdmluZyByZWNlaXZlZCBhIHJlZGlyZWN0IHJlc3BvbnNlLCBidXQgcHJpb3IgdG8g
dGhlCisgICAgLy8gdGhlIHJlc291cmNlIGhhbmRsZSBjbGllbnQgYmVpbmcgaW5mb3JtZWQgb2Yg
dGhlIHJlZGlyZWN0LiBDYW4gcmV0dXJuIHRydWUgaWYKKyAgICAvLyB0aGUgcmVkaXJlY3Qgc2hv
dWxkIGJlIGRpc2NhcmRlZCBhbmQgcmVwbGFjZWQgYnkgYW4gaW50ZXJjZXB0b3IgZ2VuZXJhdGVk
CisgICAgLy8gcmVzcG9uc2UuIElmIHRydWUgaXMgcmV0dXJuZWQsIHRoZSByZXNvdXJjZSBoYW5k
bGUgY2xpZW50IG5ldmVyIHNlZXMgdGhlCisgICAgLy8gb3JpZ2luYWwgcmVkaXJlY3QsIGluc3Rl
YWQgdGhlIHJlc3BvbnNlIHByb2R1Y2VkIGJ5IHRoZSBpbnRlcmNlcHRvciB3aWxsCisgICAgLy8g
YmUgcmV0dXJuZWQuCisgICAgdmlydHVhbCBib29sIG1heWJlSW50ZXJjZXB0UmVkaXJlY3QoY29u
c3QgS1VSTCYgbG9jYXRpb24pID0gMDsKKworICAgIC8vIENhbGxlZCBhZnRlciBoYXZpbmcgcmVj
ZWl2ZWQgYSBmaW5hbCByZXNwb25zZSwgYnV0IHByaW9yIHRvIHRoZQorICAgIC8vIHRoZSByZXNv
dXJjZSBoYW5kbGUgY2xpZW50IGJlaW5nIGluZm9ybWVkIG9mIHRoZSByZXNwb25zZS4gQ2FuIHJl
dHVybiB0cnVlCisgICAgLy8gaWYgdGhlIHJlc3BvbnNlIHNob3VsZCBiZSBkaXNjYXJkZWQgYW5k
IHJlcGxhY2VkIHdpdGggYW4gaW50ZXJjZXB0b3IgZ2VuZXJhdGVkCisgICAgLy8gcmVzcG9zbmUu
IElmIHRydWUgaXMgcmV0dXJuZWQsIHRoZSByZXNvdXJjZSBoYW5kbGUgY2xpZW50IG5ldmVyIHNl
ZXMgdGhlCisgICAgLy8gb3JpZ2luYWwgcmVzcG9uc2UsIGluc3RlYWQgdGhlIHJlc3BvbnNlIHBy
b2R1Y2VkIGJ5IHRoZSBpbnRlcmNlcHRvciB3aWxsIGJlCisgICAgLy8gcmV0dXJuZWQuCisgICAg
dmlydHVhbCBib29sIG1heWJlSW50ZXJjZXB0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpID0gMDsKKworICAgIC8vIENhbGxlZCBhZnRlciBoYXZpbmcgcmVjZWl2ZWQgYSBmaW5hbCBl
cnJvciwgYnV0IHByaW9yIHRvIHRoZQorICAgIC8vIHRoZSByZXNvdXJjZSBoYW5kbGUgY2xpZW50
IGJlaW5nIGluZm9ybWVkIG9mIHRoZSBlcnJvci4gQ2FuIHJldHVybiB0cnVlCisgICAgLy8gaWYg
dGhlIGVycm9yIHNob3VsZCBiZSBkaXNjYXJkZWQgYW5kIHJlcGxhY2VkIHdpdGggYW4gaW50ZXJj
ZXB0b3IgZ2VuZXJhdGVkCisgICAgLy8gcmVzcG9zbmUuIElmIHRydWUgaXMgcmV0dXJuZWQsIHRo
ZSByZXNvdXJjZSBoYW5kbGUgY2xpZW50IG5ldmVyIHNlZXMgdGhlCisgICAgLy8gb3JpZ2luYWwg
ZXJyb3IsIGluc3RlYWQgdGhlIHJlc3BvbnNlIHByb2R1Y2VkIGJ5IHRoZSBpbnRlcmNlcHRvciB3
aWxsIGJlCisgICAgLy8gcmV0dXJuZWQuCisgICAgdmlydHVhbCBib29sIG1heWJlSW50ZXJjZXB0
RXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYpID0gMDsKKworICAgIC8vIENhbGxlZCBpbW1lZGlh
dGVseSBhZnRlciBhbiBpbnRlcmNlcHRvciByZXR1cm5zIHRydWUgdG8gYW55IG9mIHRoZSBtYXli
ZQorICAgIC8vIG1ldGhvZHMuIFRoaXMgZ2l2ZXMgdGhlIGludGVyY2VwdG9yIGFuIG9wcG9ydHVu
aXR5IHRvIGRlbGl2ZXIgYSByZXNwb25zZQorICAgIC8vIGltbWVkaWF0ZWx5IGZyb20gd2l0aGlu
IHRoZSBzdGFydCBtZXRob2Qgd2l0aG91dCBnb2luZyB0aHJ1IHRoZSBtZXNzYWdlIGxvb3AuCisg
ICAgdmlydHVhbCB2b2lkIHN0YXJ0KCkge30KKworICAgIC8vIENhbGxlZCB0byBjYW5jZWwgYW4g
aW50ZXJjZXB0LgorICAgIHZpcnR1YWwgdm9pZCBjYW5jZWwoKSA9IDA7CisKK3ByaXZhdGU6Cisg
ICAgSW50ZXJjZXB0b3JDbGllbnQqIG1faW50ZXJjZXB0b3JDbGllbnQ7Cit9OworCisKKy8vIEEg
ZmFjdG9yeSBmb3IgaW5zdGFuY2VzIG9mIGludGVyY2VwdG9ycy4gVGhlIGZhY3RvcnkgYWxzbyBw
cm92aWRlcyBtZXRob2RzCisvLyB0byBpbnRlcmNlcHQgc3luYyBsb2Fkcy4KK2NsYXNzIEludGVy
Y2VwdG9yRmFjdG9yeSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SW50ZXJjZXB0b3JGYWN0b3J5
KCkge30KKworICAgIC8vIFJldHVybnMgYW4gaW50ZXJjZXB0b3IgZm9yIGFuIGFzeW5jIHJlcXVl
c3QsIGl0IG1heSByZXR1cm4gMAorICAgIHZpcnR1YWwgSW50ZXJjZXB0b3IqIGNyZWF0ZUludGVy
Y2VwdG9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIEludGVyY2VwdG9yQ2xpZW50KikgeyByZXR1
cm4gMDsgfQorCisgICAgLy8gRklYTUU6IFN5bmNocm9ub3VzIGludGVyY2VwdGlvbiBoYXMgbm8g
b3Bwb3J0dW5pdHkgdG8gaW50ZXJjZXB0IGludGVybWlkYWlyeSByZWRpcmVjdHMKKyAgICB2aXJ0
dWFsIGJvb2wgbWF5YmVMb2FkU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBT
dG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0
b3I8Y2hhcj4mKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBtYXliZUZhbGxi
YWNrU3ljaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxz
LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYpIHsgcmV0
dXJuIGZhbHNlOyB9Cit9OworCisvLyBGSVhNRTogdGhpcyBpcyBxdWljayBhbmQgZGlydHkgdGVz
dCBjb2RlLCBmaW5kIGEgcmVhbCB3YXkgdG8gdGVzdCB0aGlzCitJbnRlcmNlcHRvckZhY3Rvcnkq
IGdldFRlc3RJbnRlcmNlcHRvckZhY3RvcnkoKTsKKworfQorCisjZW5kaWYgLy8gSW50ZXJjZXB0
b3JfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0ludGVy
Y2VwdG9yLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1SZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3JtUmVzb3VyY2VIYW5kbGUu
Y3BwCShyZXZpc2lvbiA0NTE5OSkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlLmNwcDo0NTE5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9y
bVJlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKKwor
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgor
I2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBib29sIHNob3VsZEZvcmNlQ29udGVudFNuaWZmaW5nOworCitzdGF0
aWMgYm9vbCBwb3J0QWxsb3dlZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKworUmVzb3VyY2VI
YW5kbGU6OlJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVz
b3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCwgYm9vbCBkZWZlcnNMb2FkaW5nLAorICAgICAgICAg
Ym9vbCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgbWlnaHREb3dubG9hZEZyb21IYW5kbGUpCisg
ICAgOiBkKG5ldyBSZXNvdXJjZUhhbmRsZUludGVybmFsKHRoaXMsIHJlcXVlc3QsIGNsaWVudCwg
ZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmLCBtaWdodERvd25sb2FkRnJvbUhhbmRs
ZSkpCit7Cit9CisKK1Bhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IFJlc291cmNlSGFuZGxlOjpj
cmVhdGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVu
dCogY2xpZW50LAorICAgIEZyYW1lKiBmcmFtZSwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNo
b3VsZENvbnRlbnRTbmlmZiwgYm9vbCBtaWdodERvd25sb2FkRnJvbUhhbmRsZSkKK3sKKyAgICBp
ZiAoc2hvdWxkQ29udGVudFNuaWZmKQorICAgICAgICBzaG91bGRDb250ZW50U25pZmYgPSBzaG91
bGRDb250ZW50U25pZmZVUkwocmVxdWVzdC51cmwoKSk7CisKKyAgICBSZWZQdHI8UmVzb3VyY2VI
YW5kbGU+IG5ld0hhbmRsZShhZG9wdFJlZihuZXcgUmVzb3VyY2VIYW5kbGUocmVxdWVzdCwgY2xp
ZW50LCBkZWZlcnNMb2FkaW5nLCBzaG91bGRDb250ZW50U25pZmYsIG1pZ2h0RG93bmxvYWRGcm9t
SGFuZGxlKSkpOworCisgICAgaWYgKCFyZXF1ZXN0LnVybCgpLmlzVmFsaWQoKSkgeworICAgICAg
ICBuZXdIYW5kbGUtPnNjaGVkdWxlRmFpbHVyZShJbnZhbGlkVVJMRmFpbHVyZSk7CisgICAgICAg
IHJldHVybiBuZXdIYW5kbGUucmVsZWFzZSgpOworICAgIH0KKworICAgIGlmICghcG9ydEFsbG93
ZWQocmVxdWVzdCkpIHsKKyAgICAgICAgbmV3SGFuZGxlLT5zY2hlZHVsZUZhaWx1cmUoQmxvY2tl
ZEZhaWx1cmUpOworICAgICAgICByZXR1cm4gbmV3SGFuZGxlLnJlbGVhc2UoKTsKKyAgICB9Cisg
ICAgICAgIAorICAgIGlmIChuZXdIYW5kbGUtPnN0YXJ0KGZyYW1lKSkKKyAgICAgICAgcmV0dXJu
IG5ld0hhbmRsZS5yZWxlYXNlKCk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBSZXNvdXJj
ZUhhbmRsZTo6c2NoZWR1bGVGYWlsdXJlKEZhaWx1cmVUeXBlIHR5cGUpCit7CisgICAgZC0+bV9m
YWlsdXJlVHlwZSA9IHR5cGU7CisgICAgZC0+bV9mYWlsdXJlVGltZXIuc3RhcnRPbmVTaG90KDAp
OworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpmaXJlRmFpbHVyZShUaW1lcjxSZXNvdXJjZUhh
bmRsZT4qKQoreworICAgIGlmICghY2xpZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHN3
aXRjaCAoZC0+bV9mYWlsdXJlVHlwZSkgeworICAgICAgICBjYXNlIEJsb2NrZWRGYWlsdXJlOgor
ICAgICAgICAgICAgY2xpZW50KCktPndhc0Jsb2NrZWQodGhpcyk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGNhc2UgSW52YWxpZFVSTEZhaWx1cmU6CisgICAgICAgICAgICBjbGllbnQo
KS0+Y2Fubm90U2hvd1VSTCh0aGlzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworUmVzb3VyY2VIYW5kbGVDbGllbnQqIFJlc291
cmNlSGFuZGxlOjpjbGllbnQoKSBjb25zdAoreworICAgIHJldHVybiBkLT5tX2NsaWVudDsKK30K
Kwordm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50KFJlc291cmNlSGFuZGxlQ2xpZW50KiBj
bGllbnQpCit7CisgICAgZC0+bV9jbGllbnQgPSBjbGllbnQ7Cit9CisKK2NvbnN0IFJlc291cmNl
UmVxdWVzdCYgUmVzb3VyY2VIYW5kbGU6OnJlcXVlc3QoKSBjb25zdAoreworICAgIHJldHVybiBk
LT5tX3JlcXVlc3Q7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNsZWFyQXV0aGVudGljYXRp
b24oKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBkLT5tX2N1cnJlbnRNYWNDaGFsbGVuZ2Ug
PSBuaWw7CisjZWxpZiBVU0UoQ0ZORVRXT1JLKQorICAgIGQtPm1fY3VycmVudENGQ2hhbGxlbmdl
ID0gMDsKKyNlbmRpZgorICAgIGQtPm1fY3VycmVudFdlYkNoYWxsZW5nZS5udWxsaWZ5KCk7Cit9
CisKK3N0YXRpYyBib29sIHBvcnRBbGxvd2VkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCkKK3sKKyAgICB1bnNpZ25lZCBzaG9ydCBwb3J0ID0gcmVxdWVzdC51cmwoKS5wb3J0KCk7CisK
KyAgICAvLyBTaW5jZSBtb3N0IFVSTHMgZG9uJ3QgaGF2ZSBhIHBvcnQsIHJldHVybiBlYXJseSBm
b3IgdGhlICJubyBwb3J0IiBjYXNlLgorICAgIGlmICghcG9ydCkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICAvLyBUaGlzIGJsb2NrZWQgcG9ydCBsaXN0IG1hdGNoZXMgdGhlIHBvcnQgYmxv
Y2tpbmcgdGhhdCBNb3ppbGxhIGltcGxlbWVudHMuCisgICAgLy8gU2VlIGh0dHA6Ly93d3cubW96
aWxsYS5vcmcvcHJvamVjdHMvbmV0bGliL1BvcnRCYW5uaW5nLmh0bWwgZm9yIG1vcmUgaW5mb3Jt
YXRpb24uCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGJsb2NrZWRQb3J0TGlzdFtd
ID0geworICAgICAgICAxLCAgICAvLyB0Y3BtdXgKKyAgICAgICAgNywgICAgLy8gZWNobworICAg
ICAgICA5LCAgICAvLyBkaXNjYXJkCisgICAgICAgIDExLCAgIC8vIHN5c3RhdAorICAgICAgICAx
MywgICAvLyBkYXl0aW1lCisgICAgICAgIDE1LCAgIC8vIG5ldHN0YXQKKyAgICAgICAgMTcsICAg
Ly8gcW90ZAorICAgICAgICAxOSwgICAvLyBjaGFyZ2VuCisgICAgICAgIDIwLCAgIC8vIEZUUC1k
YXRhCisgICAgICAgIDIxLCAgIC8vIEZUUC1jb250cm9sCisgICAgICAgIDIyLCAgIC8vIFNTSAor
ICAgICAgICAyMywgICAvLyB0ZWxuZXQKKyAgICAgICAgMjUsICAgLy8gU01UUAorICAgICAgICAz
NywgICAvLyB0aW1lCisgICAgICAgIDQyLCAgIC8vIG5hbWUKKyAgICAgICAgNDMsICAgLy8gbmlj
bmFtZQorICAgICAgICA1MywgICAvLyBkb21haW4KKyAgICAgICAgNzcsICAgLy8gcHJpdi1yanMK
KyAgICAgICAgNzksICAgLy8gZmluZ2VyCisgICAgICAgIDg3LCAgIC8vIHR0eWxpbmsKKyAgICAg
ICAgOTUsICAgLy8gc3VwZHVwCisgICAgICAgIDEwMSwgIC8vIGhvc3RyaWFtZQorICAgICAgICAx
MDIsICAvLyBpc28tdHNhcAorICAgICAgICAxMDMsICAvLyBncHBpdG5wCisgICAgICAgIDEwNCwg
IC8vIGFjci1uZW1hCisgICAgICAgIDEwOSwgIC8vIFBPUDIKKyAgICAgICAgMTEwLCAgLy8gUE9Q
MworICAgICAgICAxMTEsICAvLyBzdW5ycGMKKyAgICAgICAgMTEzLCAgLy8gYXV0aAorICAgICAg
ICAxMTUsICAvLyBTRlRQCisgICAgICAgIDExNywgIC8vIHV1Y3AtcGF0aAorICAgICAgICAxMTks
ICAvLyBubnRwCisgICAgICAgIDEyMywgIC8vIE5UUAorICAgICAgICAxMzUsICAvLyBsb2Mtc3J2
IC8gZXBtYXAKKyAgICAgICAgMTM5LCAgLy8gbmV0YmlvcworICAgICAgICAxNDMsICAvLyBJTUFQ
MgorICAgICAgICAxNzksICAvLyBCR1AKKyAgICAgICAgMzg5LCAgLy8gTERBUAorICAgICAgICA0
NjUsICAvLyBTTVRQK1NTTAorICAgICAgICA1MTIsICAvLyBwcmludCAvIGV4ZWMKKyAgICAgICAg
NTEzLCAgLy8gbG9naW4KKyAgICAgICAgNTE0LCAgLy8gc2hlbGwKKyAgICAgICAgNTE1LCAgLy8g
cHJpbnRlcgorICAgICAgICA1MjYsICAvLyB0ZW1wbworICAgICAgICA1MzAsICAvLyBjb3VyaWVy
CisgICAgICAgIDUzMSwgIC8vIENoYXQKKyAgICAgICAgNTMyLCAgLy8gbmV0bmV3cworICAgICAg
ICA1NDAsICAvLyBVVUNQCisgICAgICAgIDU1NiwgIC8vIHJlbW90ZWZzCisgICAgICAgIDU2Mywg
IC8vIE5OVFArU1NMCisgICAgICAgIDU4NywgIC8vIEVTTVRQCisgICAgICAgIDYwMSwgIC8vIHN5
c2xvZy1jb25uCisgICAgICAgIDYzNiwgIC8vIExEQVArU1NMCisgICAgICAgIDk5MywgIC8vIElN
QVArU1NMCisgICAgICAgIDk5NSwgIC8vIFBPUDMrU1NMCisgICAgICAgIDIwNDksIC8vIE5GUwor
ICAgICAgICAzNjU5LCAvLyBhcHBsZS1zYXNsIC8gUGFzc3dvcmRTZXJ2ZXIgW0FwcGxlIGFkZGl0
aW9uXQorICAgICAgICA0MDQ1LCAvLyBsb2NrZAorICAgICAgICA2MDAwLCAvLyBYMTEKKyAgICB9
OworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBjb25zdCBibG9ja2VkUG9ydExpc3RFbmQgPSBi
bG9ja2VkUG9ydExpc3QKKyAgICAgICAgKyBzaXplb2YoYmxvY2tlZFBvcnRMaXN0KSAvIHNpemVv
ZihibG9ja2VkUG9ydExpc3RbMF0pOworCisgICAgLy8gSWYgdGhlIHBvcnQgaXMgbm90IGluIHRo
ZSBibG9ja2VkIHBvcnQgbGlzdCwgYWxsb3cgaXQuCisgICAgaWYgKCFzdGQ6OmJpbmFyeV9zZWFy
Y2goYmxvY2tlZFBvcnRMaXN0LCBibG9ja2VkUG9ydExpc3RFbmQsIHBvcnQpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIC8vIEFsbG93IHBvcnRzIDIxIGFuZCAyMiBmb3IgRlRQIFVSTHMs
IGFzIE1vemlsbGEgZG9lcy4KKyAgICBpZiAoKHBvcnQgPT0gMjEgfHwgcG9ydCA9PSAyMikgJiYg
cmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJmdHAiKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICAvLyBBbGxvdyBhbnkgcG9ydCBudW1iZXIgaW4gYSBmaWxlIFVSTCwgc2luY2UgdGhlIHBv
cnQgbnVtYmVyIGlzIGlnbm9yZWQuCisgICAgaWYgKHJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygi
ZmlsZSIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyAg
Citib29sIFJlc291cmNlSGFuZGxlOjpzaG91bGRDb250ZW50U25pZmYoKSBjb25zdAoreworICAg
IHJldHVybiBkLT5tX3Nob3VsZENvbnRlbnRTbmlmZjsKK30KKworYm9vbCBSZXNvdXJjZUhhbmRs
ZTo6c2hvdWxkQ29udGVudFNuaWZmVVJMKGNvbnN0IEtVUkwmIHVybCkKK3sKKyNpZiBQTEFURk9S
TShNQUMpCisgICAgaWYgKHNob3VsZEZvcmNlQ29udGVudFNuaWZmaW5nKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyNlbmRpZgorICAgIC8vIFdlIHNob3VsZG4ndCBjb250ZW50IHNuaWZmIGZpbGUg
VVJMcyBhcyB0aGVpciBNSU1FIHR5cGUgc2hvdWxkIGJlIGVzdGFibGlzaGVkIHZpYSB0aGVpciBl
eHRlbnNpb24uCisgICAgcmV0dXJuICF1cmwucHJvdG9jb2xJcygiZmlsZSIpOworfQorCit2b2lk
IFJlc291cmNlSGFuZGxlOjpmb3JjZUNvbnRlbnRTbmlmZmluZygpCit7CisgICAgc2hvdWxkRm9y
Y2VDb250ZW50U25pZmZpbmcgPSB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1SZXNvdXJjZUhhbmRsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3JtUmVzb3VyY2VI
YW5kbGUuY3BwCShyZXZpc2lvbiA0NTE5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Q
bGF0Zm9ybVJlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDEx
IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxl
LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVJlc291cmNlSGFuZGxlQ2xp
ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1SZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCiAKICNp
bmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKICNp
bmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KIApAQCAtMzgsMTkgKzM4LDE5
IEBAIHN0YXRpYyBib29sIHNob3VsZEZvcmNlQ29udGVudFNuaWZmaW5nOwogCiBzdGF0aWMgYm9v
bCBwb3J0QWxsb3dlZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKIAotUmVzb3VyY2VIYW5kbGU6
OlJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VI
YW5kbGVDbGllbnQqIGNsaWVudCwgYm9vbCBkZWZlcnNMb2FkaW5nLAorUGxhdGZvcm1SZXNvdXJj
ZUhhbmRsZTo6UGxhdGZvcm1SZXNvdXJjZUhhbmRsZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCwgYm9vbCBkZWZlcnNM
b2FkaW5nLAogICAgICAgICAgYm9vbCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgbWlnaHREb3du
bG9hZEZyb21IYW5kbGUpCi0gICAgOiBkKG5ldyBSZXNvdXJjZUhhbmRsZUludGVybmFsKHRoaXMs
IHJlcXVlc3QsIGNsaWVudCwgZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmLCBtaWdo
dERvd25sb2FkRnJvbUhhbmRsZSkpCisgICAgOiBkKG5ldyBQbGF0Zm9ybVJlc291cmNlSGFuZGxl
SW50ZXJuYWwodGhpcywgcmVxdWVzdCwgY2xpZW50LCBkZWZlcnNMb2FkaW5nLCBzaG91bGRDb250
ZW50U25pZmYsIG1pZ2h0RG93bmxvYWRGcm9tSGFuZGxlKSkKIHsKIH0KIAotUGFzc1JlZlB0cjxS
ZXNvdXJjZUhhbmRsZT4gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQsCitQYXNzUmVmUHRyPFBs
YXRmb3JtUmVzb3VyY2VIYW5kbGU+IFBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQq
IGNsaWVudCwKICAgICBGcmFtZSogZnJhbWUsIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91
bGRDb250ZW50U25pZmYsIGJvb2wgbWlnaHREb3dubG9hZEZyb21IYW5kbGUpCiB7CiAgICAgaWYg
KHNob3VsZENvbnRlbnRTbmlmZikKICAgICAgICAgc2hvdWxkQ29udGVudFNuaWZmID0gc2hvdWxk
Q29udGVudFNuaWZmVVJMKHJlcXVlc3QudXJsKCkpOwogCi0gICAgUmVmUHRyPFJlc291cmNlSGFu
ZGxlPiBuZXdIYW5kbGUoYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVu
dCwgZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmLCBtaWdodERvd25sb2FkRnJvbUhh
bmRsZSkpKTsKKyAgICBSZWZQdHI8UGxhdGZvcm1SZXNvdXJjZUhhbmRsZT4gbmV3SGFuZGxlKGFk
b3B0UmVmKG5ldyBQbGF0Zm9ybVJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVudCwgZGVmZXJz
TG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmLCBtaWdodERvd25sb2FkRnJvbUhhbmRsZSkpKTsK
IAogICAgIGlmICghcmVxdWVzdC51cmwoKS5pc1ZhbGlkKCkpIHsKICAgICAgICAgbmV3SGFuZGxl
LT5zY2hlZHVsZUZhaWx1cmUoSW52YWxpZFVSTEZhaWx1cmUpOwpAQCAtNjEsMjAgKzYxLDQ1IEBA
IFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IFJlc291cmNlSGFuZGwKICAgICAgICAgbmV3SGFu
ZGxlLT5zY2hlZHVsZUZhaWx1cmUoQmxvY2tlZEZhaWx1cmUpOwogICAgICAgICByZXR1cm4gbmV3
SGFuZGxlLnJlbGVhc2UoKTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgaWYgKG5ld0hhbmRsZS0+
c3RhcnQoZnJhbWUpKQogICAgICAgICByZXR1cm4gbmV3SGFuZGxlLnJlbGVhc2UoKTsKIAogICAg
IHJldHVybiAwOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpzY2hlZHVsZUZhaWx1cmUoRmFp
bHVyZVR5cGUgdHlwZSkKK1Bhc3NSZWZQdHI8UGxhdGZvcm1SZXNvdXJjZUhhbmRsZT4gUGxhdGZv
cm1SZXNvdXJjZUhhbmRsZTo6Y3JlYXRlV2l0aG91dFN0YXJ0aW5nKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50LAorICAg
IGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgbWlnaHRE
b3dubG9hZEZyb21IYW5kbGUpCit7CisgICAgaWYgKHNob3VsZENvbnRlbnRTbmlmZikKKyAgICAg
ICAgc2hvdWxkQ29udGVudFNuaWZmID0gc2hvdWxkQ29udGVudFNuaWZmVVJMKHJlcXVlc3QudXJs
KCkpOworCisgICAgUmVmUHRyPFBsYXRmb3JtUmVzb3VyY2VIYW5kbGU+IG5ld0hhbmRsZShhZG9w
dFJlZihuZXcgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZShyZXF1ZXN0LCBjbGllbnQsIGRlZmVyc0xv
YWRpbmcsIHNob3VsZENvbnRlbnRTbmlmZiwgbWlnaHREb3dubG9hZEZyb21IYW5kbGUpKSk7CisK
KyAgICAvLyBGSVhNRTogd2hhdCBhYm91dCB0aGVzZSB0ZXN0cy4uLiBzZWVtcyBsaWtlIHRoZXkg
c2hvdWxkIGdvIGluIHN0YXJ0Li4uCisgICAgLy8gbW92ZSB0aGUgUmVzb3VyY2VIYW5kbGU6OnN0
YXJ0PworICAgIC8qCisgICAgaWYgKCFyZXF1ZXN0LnVybCgpLmlzVmFsaWQoKSkgeworICAgICAg
ICBuZXdIYW5kbGUtPnNjaGVkdWxlRmFpbHVyZShJbnZhbGlkVVJMRmFpbHVyZSk7CisgICAgICAg
IHJldHVybiBuZXdIYW5kbGUucmVsZWFzZSgpOworICAgIH0KKworICAgIGlmICghcG9ydEFsbG93
ZWQocmVxdWVzdCkpIHsKKyAgICAgICAgbmV3SGFuZGxlLT5zY2hlZHVsZUZhaWx1cmUoQmxvY2tl
ZEZhaWx1cmUpOworICAgICAgICByZXR1cm4gbmV3SGFuZGxlLnJlbGVhc2UoKTsKKyAgICB9Cisg
ICAgKi8KKworICAgIHJldHVybiBuZXdIYW5kbGUucmVsZWFzZSgpOworfQorCit2b2lkIFBsYXRm
b3JtUmVzb3VyY2VIYW5kbGU6OnNjaGVkdWxlRmFpbHVyZShGYWlsdXJlVHlwZSB0eXBlKQogewog
ICAgIGQtPm1fZmFpbHVyZVR5cGUgPSB0eXBlOwogICAgIGQtPm1fZmFpbHVyZVRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZmlyZUZhaWx1cmUoVGltZXI8
UmVzb3VyY2VIYW5kbGU+KikKK3ZvaWQgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6ZmlyZUZhaWx1
cmUoVGltZXI8UGxhdGZvcm1SZXNvdXJjZUhhbmRsZT4qKQogewogICAgIGlmICghY2xpZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTkxLDIyICsxMTYsMjIgQEAgdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6ZmlyZUZhaWx1cmUoVGltZXI8UgogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1S
ZXNvdXJjZUhhbmRsZUNsaWVudCogUmVzb3VyY2VIYW5kbGU6OmNsaWVudCgpIGNvbnN0CitQbGF0
Zm9ybVJlc291cmNlSGFuZGxlQ2xpZW50KiBQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjpjbGllbnQo
KSBjb25zdAogewogICAgIHJldHVybiBkLT5tX2NsaWVudDsKIH0KIAotdm9pZCBSZXNvdXJjZUhh
bmRsZTo6c2V0Q2xpZW50KFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQpCit2b2lkIFBsYXRm
b3JtUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudChQbGF0Zm9ybVJlc291cmNlSGFuZGxlQ2xpZW50
KiBjbGllbnQpCiB7CiAgICAgZC0+bV9jbGllbnQgPSBjbGllbnQ7CiB9CiAKLWNvbnN0IFJlc291
cmNlUmVxdWVzdCYgUmVzb3VyY2VIYW5kbGU6OnJlcXVlc3QoKSBjb25zdAorY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiBQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjpyZXF1ZXN0KCkgY29uc3QKIHsKICAg
ICByZXR1cm4gZC0+bV9yZXF1ZXN0OwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpjbGVhckF1
dGhlbnRpY2F0aW9uKCkKK3ZvaWQgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6Y2xlYXJBdXRoZW50
aWNhdGlvbigpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGQtPm1fY3VycmVudE1hY0NoYWxs
ZW5nZSA9IG5pbDsKQEAgLTIwNSwxMiArMjMwLDEyIEBAIHN0YXRpYyBib29sIHBvcnRBbGxvd2Vk
KGNvbnN0IFJlc291cmNlUmUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAgIAotYm9vbCBSZXNvdXJj
ZUhhbmRsZTo6c2hvdWxkQ29udGVudFNuaWZmKCkgY29uc3QKK2Jvb2wgUGxhdGZvcm1SZXNvdXJj
ZUhhbmRsZTo6c2hvdWxkQ29udGVudFNuaWZmKCkgY29uc3QKIHsKICAgICByZXR1cm4gZC0+bV9z
aG91bGRDb250ZW50U25pZmY7CiB9CiAKLWJvb2wgUmVzb3VyY2VIYW5kbGU6OnNob3VsZENvbnRl
bnRTbmlmZlVSTChjb25zdCBLVVJMJiB1cmwpCitib29sIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6
OnNob3VsZENvbnRlbnRTbmlmZlVSTChjb25zdCBLVVJMJiB1cmwpCiB7CiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIGlmIChzaG91bGRGb3JjZUNvbnRlbnRTbmlmZmluZykKQEAgLTIyMCw3ICsyNDUs
NyBAQCBib29sIFJlc291cmNlSGFuZGxlOjpzaG91bGRDb250ZW50U25pZmZVCiAgICAgcmV0dXJu
ICF1cmwucHJvdG9jb2xJcygiZmlsZSIpOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpmb3Jj
ZUNvbnRlbnRTbmlmZmluZygpCit2b2lkIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6OmZvcmNlQ29u
dGVudFNuaWZmaW5nKCkKIHsKICAgICBzaG91bGRGb3JjZUNvbnRlbnRTbmlmZmluZyA9IHRydWU7
CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1SZXNvdXJjZUhhbmRs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybVJlc291
cmNlSGFuZGxlLmgJKHJldmlzaW9uIDQ1MTk5KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuaDo0NTE5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Q
bGF0Zm9ybVJlc291cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUmVzb3VyY2VIYW5kbGVfaAorI2Rl
ZmluZSBSZXNvdXJjZUhhbmRsZV9oCisKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZS5oIgorI2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlTG9h
ZGVyLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCisjaWYgVVNFKFNPVVApCit0eXBlZGVm
IHN0cnVjdCBfU291cFNlc3Npb24gU291cFNlc3Npb247CisjZW5kaWYKKworI2lmIFBMQVRGT1JN
KENGKQordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRkRhdGEgKiBDRkRhdGFSZWY7CisjZW5kaWYK
KworI2lmIFBMQVRGT1JNKFdJTikKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBEV09SRDsKK3R5cGVk
ZWYgdW5zaWduZWQgbG9uZyBEV09SRF9QVFI7Cit0eXBlZGVmIHZvaWQqIExQVk9JRDsKK3R5cGVk
ZWYgTFBWT0lEIEhJTlRFUk5FVDsKK3R5cGVkZWYgdW5zaWduZWQgV1BBUkFNOwordHlwZWRlZiBs
b25nIExQQVJBTTsKK3R5cGVkZWYgc3RydWN0IEhXTkRfXyogSFdORDsKK3R5cGVkZWYgX1c2NCBs
b25nIExPTkdfUFRSOwordHlwZWRlZiBMT05HX1BUUiBMUkVTVUxUOworI2VuZGlmCisKKworI2lm
IFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaWZkZWYgX19PQkpD
X18KK0BjbGFzcyBOU0RhdGE7CitAY2xhc3MgTlNFcnJvcjsKK0BjbGFzcyBOU1VSTENvbm5lY3Rp
b247CitAY2xhc3MgV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZTsKKyNlbHNlCitjbGFz
cyBOU0RhdGE7CitjbGFzcyBOU0Vycm9yOworY2xhc3MgTlNVUkxDb25uZWN0aW9uOworY2xhc3Mg
V2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZTsKK3R5cGVkZWYgc3RydWN0IG9iamNfb2Jq
ZWN0ICppZDsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBVU0UoQ0ZORVRXT1JLKQordHlwZWRlZiBz
dHJ1Y3QgX0NGVVJMQ29ubmVjdGlvbiogQ0ZVUkxDb25uZWN0aW9uUmVmOwordHlwZWRlZiBpbnQg
Q0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeTsKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUNG
SFRUUENvb2tpZVN0b3JhZ2UqIENGSFRUUENvb2tpZVN0b3JhZ2VSZWY7CisjZW5kaWYKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKK2NsYXNz
IENyZWRlbnRpYWw7CitjbGFzcyBGb3JtRGF0YTsKK2NsYXNzIEZyYW1lOworY2xhc3MgS1VSTDsK
K2NsYXNzIFJlc291cmNlRXJyb3I7CitjbGFzcyBSZXNvdXJjZUhhbmRsZUNsaWVudDsKK2NsYXNz
IFJlc291cmNlSGFuZGxlSW50ZXJuYWw7CitzdHJ1Y3QgUmVzb3VyY2VSZXF1ZXN0OworY2xhc3Mg
UmVzb3VyY2VSZXNwb25zZTsKK2NsYXNzIFNjaGVkdWxlUGFpcjsKK2NsYXNzIFNoYXJlZEJ1ZmZl
cjsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFRpbWVyOworCitjbGFzcyBSZXNvdXJj
ZUhhbmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlc291cmNlSGFuZGxlPiB7Citwcml2YXRlOgor
ICAgIFJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlSGFuZGxl
Q2xpZW50KiwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNob3VsZENvbnRlbnRTbmlmZiwgYm9v
bCBtaWdodERvd25sb2FkRnJvbUhhbmRsZSk7CisKKyAgICBlbnVtIEZhaWx1cmVUeXBlIHsKKyAg
ICAgICAgQmxvY2tlZEZhaWx1cmUsCisgICAgICAgIEludmFsaWRVUkxGYWlsdXJlCisgICAgfTsK
KworcHVibGljOgorICAgIC8vIEZJWE1FOiBzaG91bGQgbm90IG5lZWQgdGhlIEZyYW1lCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZShjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCosIEZyYW1lKiwgYm9vbCBkZWZlcnNMb2FkaW5n
LCBib29sIHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBtaWdodERvd25sb2FkRnJvbUhhbmRsZSA9
IGZhbHNlKTsKKworICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImLCBS
ZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhLCBGcmFtZSogZnJhbWUpOworICAg
IHN0YXRpYyBib29sIHdpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYpOworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICBzdGF0aWMgYm9vbCBkaWRTZW5kQm9keURhdGFEZWxlZ2F0ZUV4aXN0
cygpOworI2VuZGlmCisKKyAgICB+UmVzb3VyY2VIYW5kbGUoKTsKKworI2lmIFBMQVRGT1JNKE1B
QykgfHwgVVNFKENGTkVUV09SSykKKyAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKTsKKyAgICBi
b29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7CisjZW5kaWYKKyNpZiBQTEFURk9STShN
QUMpIHx8IFVTRShDRk5FVFdPUkspIHx8IFVTRShDVVJMKQorICAgIHZvaWQgZGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Cisg
ICAgdm9pZCByZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
LCBjb25zdCBDcmVkZW50aWFsJik7CisgICAgdm9pZCByZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVl
V2l0aG91dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKyAgICB2
b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7
CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRpZENhbmNlbEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CisgICAgTlNV
UkxDb25uZWN0aW9uICpjb25uZWN0aW9uKCkgY29uc3Q7CisgICAgV2ViQ29yZVJlc291cmNlSGFu
ZGxlQXNEZWxlZ2F0ZSAqZGVsZWdhdGUoKTsKKyAgICB2b2lkIHJlbGVhc2VEZWxlZ2F0ZSgpOwor
ICAgIGlkIHJlbGVhc2VQcm94eSgpOworCisgICAgdm9pZCBzY2hlZHVsZShTY2hlZHVsZVBhaXIq
KTsKKyAgICB2b2lkIHVuc2NoZWR1bGUoU2NoZWR1bGVQYWlyKik7CisjZWxpZiBVU0UoQ0ZORVRX
T1JLKQorICAgIHN0YXRpYyBDRlJ1bkxvb3BSZWYgbG9hZGVyUnVuTG9vcCgpOworICAgIENGVVJM
Q29ubmVjdGlvblJlZiBjb25uZWN0aW9uKCkgY29uc3Q7CisgICAgQ0ZVUkxDb25uZWN0aW9uUmVm
IHJlbGVhc2VDb25uZWN0aW9uRm9yRG93bmxvYWQoKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRIb3N0
QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgdm9p
ZCBzZXRDbGllbnRDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3QsIENGRGF0YVJlZik7Cisj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENVUkwpCisgICAgc3RhdGljIHZvaWQg
c2V0SG9zdEFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJik7CisjZW5kaWYK
KyNpZiBQTEFURk9STShXSU4pICYmIFVTRShDVVJMKSAmJiBQTEFURk9STShDRikKKyAgICBzdGF0
aWMgdm9pZCBzZXRDbGllbnRDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3QsIENGRGF0YVJl
Zik7CisjZW5kaWYKKworICAgIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXJlZERhdGEo
KTsKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0J1ZmZlcmVkRGF0YSgpOworCisgICAgYm9vbCBz
aG91bGRDb250ZW50U25pZmYoKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRDb250ZW50
U25pZmZVUkwoY29uc3QgS1VSTCYpOworCisgICAgc3RhdGljIHZvaWQgZm9yY2VDb250ZW50U25p
ZmZpbmcoKTsKKworI2lmIFVTRShXSU5JTkVUKQorICAgIHZvaWQgc2V0SGFzUmVjZWl2ZWRSZXNw
b25zZShib29sID0gdHJ1ZSk7CisgICAgYm9vbCBoYXNSZWNlaXZlZFJlc3BvbnNlKCkgY29uc3Q7
CisgICAgdm9pZCBmaWxlTG9hZFRpbWVyKFRpbWVyPFJlc291cmNlSGFuZGxlPiopOworICAgIHZv
aWQgb25IYW5kbGVDcmVhdGVkKExQQVJBTSk7CisgICAgdm9pZCBvblJlcXVlc3RSZWRpcmVjdGVk
KExQQVJBTSk7CisgICAgdm9pZCBvblJlcXVlc3RDb21wbGV0ZShMUEFSQU0pOworICAgIGZyaWVu
ZCB2b2lkIF9fc3RkY2FsbCB0cmFuc2ZlckpvYlN0YXR1c0NhbGxiYWNrKEhJTlRFUk5FVCwgRFdP
UkRfUFRSLCBEV09SRCwgTFBWT0lELCBEV09SRCk7CisgICAgZnJpZW5kIExSRVNVTFQgX19zdGRj
YWxsIFJlc291cmNlSGFuZGxlV25kUHJvYyhIV05ELCB1bnNpZ25lZCBtZXNzYWdlLCBXUEFSQU0s
IExQQVJBTSk7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFFUKSB8fCBVU0UoQ1VSTCkgfHwgVVNF
KFNPVVApCisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZ2V0SW50ZXJuYWwoKSB7IHJldHVy
biBkLmdldCgpOyB9CisjZW5kaWYKKworI2lmIFVTRShTT1VQKQorICAgIHN0YXRpYyBTb3VwU2Vz
c2lvbiogZGVmYXVsdFNlc3Npb24oKTsKKyNlbmRpZgorCisgICAgLy8gVXNlZCB0byB3b3JrIGFy
b3VuZCB0aGUgZmFjdCB0aGF0IHlvdSBkb24ndCBnZXQgYW55IG1vcmUgTlNVUkxDb25uZWN0aW9u
IGNhbGxiYWNrcyB1bnRpbCB5b3UgcmV0dXJuIGZyb20gdGhlIG9uZSB5b3UncmUgaW4uCisgICAg
c3RhdGljIGJvb2wgbG9hZHNCbG9ja2VkKCk7ICAgIAorICAgIAorICAgIHZvaWQgY2xlYXJBdXRo
ZW50aWNhdGlvbigpOworICAgIHZvaWQgY2FuY2VsKCk7CisKKyAgICAvLyBUaGUgY2xpZW50IG1h
eSBiZSAwLCBpbiB3aGljaCBjYXNlIG5vIGNhbGxiYWNrcyB3aWxsIGJlIG1hZGUuCisgICAgUmVz
b3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCgpIGNvbnN0OworICAgIHZvaWQgc2V0Q2xpZW50KFJl
c291cmNlSGFuZGxlQ2xpZW50Kik7CisKKyAgICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7
CisgICAgICAKKyAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QoKSBjb25zdDsKKwor
ICAgIHZvaWQgZmlyZUZhaWx1cmUoVGltZXI8UmVzb3VyY2VIYW5kbGU+Kik7CisKK3ByaXZhdGU6
CisjaWYgVVNFKFNPVVApCisgICAgYm9vbCBzdGFydERhdGEoU3RyaW5nIHVybFN0cmluZyk7Cisg
ICAgYm9vbCBzdGFydEh0dHAoU3RyaW5nIHVybFN0cmluZyk7CisgICAgYm9vbCBzdGFydEdpbyhL
VVJMIHVybCk7CisjZW5kaWYKKworICAgIHZvaWQgc2NoZWR1bGVGYWlsdXJlKEZhaWx1cmVUeXBl
KTsKKworICAgIGJvb2wgc3RhcnQoRnJhbWUqKTsKKworICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJj
ZUhhbmRsZUludGVybmFsOworICAgIE93blB0cjxSZXNvdXJjZUhhbmRsZUludGVybmFsPiBkOwor
fTsKKworfQorCisjZW5kaWYgLy8gUmVzb3VyY2VIYW5kbGVfaApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1BsYXRmb3JtUmVzb3VyY2VIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1SZXNvdXJjZUhhbmRsZS5oCShyZXZpc2lvbiA0
NTE5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybVJlc291cmNlSGFuZGxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDExICsyMywxMiBAQAogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAg
Ki8KIAotI2lmbmRlZiBSZXNvdXJjZUhhbmRsZV9oCi0jZGVmaW5lIFJlc291cmNlSGFuZGxlX2gK
KyNpZm5kZWYgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZV9oCisjZGVmaW5lIFBsYXRmb3JtUmVzb3Vy
Y2VIYW5kbGVfaAogCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKICNpbmNs
dWRlICJIVFRQSGVhZGVyTWFwLmgiCisvLyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2lu
Y2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKQEAg
LTgyLDggKzgzLDggQEAgY2xhc3MgRm9ybURhdGE7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEtVUkw7
CiBjbGFzcyBSZXNvdXJjZUVycm9yOwotY2xhc3MgUmVzb3VyY2VIYW5kbGVDbGllbnQ7Ci1jbGFz
cyBSZXNvdXJjZUhhbmRsZUludGVybmFsOworY2xhc3MgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZUNs
aWVudDsKK2NsYXNzIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDsKIHN0cnVjdCBSZXNv
dXJjZVJlcXVlc3Q7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogY2xhc3MgU2NoZWR1bGVQYWly
OwpAQCAtOTEsOSArOTIsOSBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBjbGFzcyBUaW1lcjsKIAotY2xhc3MgUmVzb3VyY2VIYW5kbGUgOiBwdWJsaWMgUmVm
Q291bnRlZDxSZXNvdXJjZUhhbmRsZT4geworY2xhc3MgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSA6
IHB1YmxpYyBSZWZDb3VudGVkPFBsYXRmb3JtUmVzb3VyY2VIYW5kbGU+IHsKIHByaXZhdGU6Ci0g
ICAgUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVD
bGllbnQqLCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLCBib29s
IG1pZ2h0RG93bmxvYWRGcm9tSGFuZGxlKTsKKyAgICBQbGF0Zm9ybVJlc291cmNlSGFuZGxlKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQqLCBib29s
IGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIG1pZ2h0RG93bmxv
YWRGcm9tSGFuZGxlKTsKIAogICAgIGVudW0gRmFpbHVyZVR5cGUgewogICAgICAgICBCbG9ja2Vk
RmFpbHVyZSwKQEAgLTEwMiw3ICsxMDMsNyBAQCBwcml2YXRlOgogCiBwdWJsaWM6CiAgICAgLy8g
RklYTUU6IHNob3VsZCBub3QgbmVlZCB0aGUgRnJhbWUKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxS
ZXNvdXJjZUhhbmRsZT4gY3JlYXRlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlSGFu
ZGxlQ2xpZW50KiwgRnJhbWUqLCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVu
dFNuaWZmLCBib29sIG1pZ2h0RG93bmxvYWRGcm9tSGFuZGxlID0gZmFsc2UpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFBsYXRmb3JtUmVzb3VyY2VIYW5kbGU+IGNyZWF0ZShjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBQbGF0Zm9ybVJlc291cmNlSGFuZGxlQ2xpZW50KiwgRnJhbWUqLCBib29sIGRl
ZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIG1pZ2h0RG93bmxvYWRG
cm9tSGFuZGxlID0gZmFsc2UpOwogCiAgICAgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hy
b25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3Vy
Y2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEsIEZyYW1lKiBm
cmFtZSk7CiAgICAgc3RhdGljIGJvb2wgd2lsbExvYWRGcm9tQ2FjaGUoUmVzb3VyY2VSZXF1ZXN0
Jik7CkBAIC0xMTAsNyArMTExLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGRpZFNlbmRC
b2R5RGF0YURlbGVnYXRlRXhpc3RzKCk7CiAjZW5kaWYKIAotICAgIH5SZXNvdXJjZUhhbmRsZSgp
OworICAgIH5QbGF0Zm9ybVJlc291cmNlSGFuZGxlKCk7CiAKICNpZiBQTEFURk9STShNQUMpIHx8
IFVTRShDRk5FVFdPUkspCiAgICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CkBAIC0xNTgsNyAr
MTU5LDcgQEAgcHVibGljOgogI2lmIFVTRShXSU5JTkVUKQogICAgIHZvaWQgc2V0SGFzUmVjZWl2
ZWRSZXNwb25zZShib29sID0gdHJ1ZSk7CiAgICAgYm9vbCBoYXNSZWNlaXZlZFJlc3BvbnNlKCkg
Y29uc3Q7Ci0gICAgdm9pZCBmaWxlTG9hZFRpbWVyKFRpbWVyPFJlc291cmNlSGFuZGxlPiopOwor
ICAgIHZvaWQgZmlsZUxvYWRUaW1lcihUaW1lcjxQbGF0Zm9ybVJlc291cmNlSGFuZGxlPiopOwog
ICAgIHZvaWQgb25IYW5kbGVDcmVhdGVkKExQQVJBTSk7CiAgICAgdm9pZCBvblJlcXVlc3RSZWRp
cmVjdGVkKExQQVJBTSk7CiAgICAgdm9pZCBvblJlcXVlc3RDb21wbGV0ZShMUEFSQU0pOwpAQCAt
MTY3LDcgKzE2OCw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpIHx8IFVT
RShDVVJMKSB8fCBVU0UoU09VUCkKLSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBnZXRJbnRl
cm5hbCgpIHsgcmV0dXJuIGQuZ2V0KCk7IH0KKyAgICBQbGF0Zm9ybVJlc291cmNlSGFuZGxlSW50
ZXJuYWwqIGdldEludGVybmFsKCkgeyByZXR1cm4gZC5nZXQoKTsgfQogI2VuZGlmCiAKICNpZiBV
U0UoU09VUCkKQEAgLTE4MSwxNCArMTgyLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbmNlbCgp
OwogCiAgICAgLy8gVGhlIGNsaWVudCBtYXkgYmUgMCwgaW4gd2hpY2ggY2FzZSBubyBjYWxsYmFj
a3Mgd2lsbCBiZSBtYWRlLgotICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQoKSBjb25z
dDsKLSAgICB2b2lkIHNldENsaWVudChSZXNvdXJjZUhhbmRsZUNsaWVudCopOworICAgIFBsYXRm
b3JtUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCgpIGNvbnN0OworICAgIHZvaWQgc2V0Q2xp
ZW50KFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQqKTsKIAogICAgIHZvaWQgc2V0RGVmZXJz
TG9hZGluZyhib29sKTsKICAgICAgIAogICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCgpIGNvbnN0OwogCi0gICAgdm9pZCBmaXJlRmFpbHVyZShUaW1lcjxSZXNvdXJjZUhhbmRsZT4q
KTsKKyAgICB2b2lkIGZpcmVGYWlsdXJlKFRpbWVyPFBsYXRmb3JtUmVzb3VyY2VIYW5kbGU+Kik7
CiAKIHByaXZhdGU6CiAjaWYgVVNFKFNPVVApCkBAIC0xOTksMTIgKzIwMCwxNSBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBzY2hlZHVsZUZhaWx1cmUoRmFpbHVyZVR5cGUpOwogCi0gICAgYm9vbCBz
dGFydChGcmFtZSopOworICAgIGJvb2wgc3RhcnQoRnJhbWUqKTsgIC8vIGRlZmluZWQgcGVyIHBs
YXRmb3JtCiAKLSAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDsKLSAgICBP
d25QdHI8UmVzb3VyY2VIYW5kbGVJbnRlcm5hbD4gZDsKKyAgICBmcmllbmQgY2xhc3MgUmVzb3Vy
Y2VIYW5kbGU7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1SZXNvdXJjZUhhbmRsZT4g
Y3JlYXRlV2l0aG91dFN0YXJ0aW5nKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBsYXRmb3JtUmVz
b3VyY2VIYW5kbGVDbGllbnQqLCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVu
dFNuaWZmLCBib29sIG1pZ2h0RG93bmxvYWRGcm9tSGFuZGxlID0gZmFsc2UpOworCisgICAgZnJp
ZW5kIGNsYXNzIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDsKKyAgICBPd25QdHI8UGxh
dGZvcm1SZXNvdXJjZUhhbmRsZUludGVybmFsPiBkOwogfTsKIAogfQogCi0jZW5kaWYgLy8gUmVz
b3VyY2VIYW5kbGVfaAorI2VuZGlmIC8vIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVfaApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1SZXNvdXJjZUhh
bmRsZUNsaWVudC5oCShyZXZpc2lvbiA0NTE5OSkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg6NDUxOTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUGxhdGZvcm1SZXNvdXJjZUhhbmRsZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUmVzb3VyY2VIYW5kbGVD
bGllbnRfaAorI2RlZmluZSBSZXNvdXJjZUhhbmRsZUNsaWVudF9oCisKKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKworI2lmIFVTRShDRk5FVFdPUkspCisjaW5jbHVkZSA8Q29uZGl0aW9uYWxNYWNy
b3MuaD4KKyNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZVUkxDYWNoZVByaXYuaD4KKyNpbmNsdWRlIDxD
Rk5ldHdvcmsvQ0ZVUkxSZXNwb25zZVByaXYuaD4KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFD
KQorI2lmZGVmIF9fT0JKQ19fCitAY2xhc3MgTlNDYWNoZWRVUkxSZXNwb25zZTsKKyNlbHNlCitj
bGFzcyBOU0NhY2hlZFVSTFJlc3BvbnNlOworI2VuZGlmCisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworICAgIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOworICAgIGNsYXNzIENy
ZWRlbnRpYWw7CisgICAgY2xhc3MgS1VSTDsKKyAgICBjbGFzcyBSZXNvdXJjZUhhbmRsZTsKKyAg
ICBjbGFzcyBSZXNvdXJjZUVycm9yOworICAgIHN0cnVjdCBSZXNvdXJjZVJlcXVlc3Q7CisgICAg
Y2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKworICAgIGVudW0gQ2FjaGVTdG9yYWdlUG9saWN5IHsK
KyAgICAgICAgU3RvcmFnZUFsbG93ZWQsCisgICAgICAgIFN0b3JhZ2VBbGxvd2VkSW5NZW1vcnlP
bmx5LAorICAgICAgICBTdG9yYWdlTm90QWxsb3dlZCwKKyAgICB9OworICAgIAorICAgIGNsYXNz
IFJlc291cmNlSGFuZGxlQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgflJl
c291cmNlSGFuZGxlQ2xpZW50KCkgeyB9CisKKyAgICAgICAgLy8gcmVxdWVzdCBtYXkgYmUgbW9k
aWZpZWQKKyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdChSZXNvdXJjZUhhbmRs
ZSosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIC8qcmVkaXJlY3RS
ZXNwb25zZSovKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFJlc291cmNl
SGFuZGxlKiwgdW5zaWduZWQgbG9uZyBsb25nIC8qYnl0ZXNTZW50Ki8sIHVuc2lnbmVkIGxvbmcg
bG9uZyAvKnRvdGFsQnl0ZXNUb0JlU2VudCovKSB7IH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5k
bGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqKSB7IH0KKyAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJj
ZUVycm9yJikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCB3YXNCbG9ja2VkKFJlc291cmNlSGFu
ZGxlKikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBjYW5ub3RTaG93VVJMKFJlc291cmNlSGFu
ZGxlKikgeyB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxDYWNoZVJlc3BvbnNlKFJlc291
cmNlSGFuZGxlKiwgQ2FjaGVTdG9yYWdlUG9saWN5JikgeyB9CisKKyAgICAgICAgdmlydHVhbCBi
b29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFJlc291cmNlSGFuZGxlKikgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikg
eyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgeyB9Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZENhbmNlbGxhdGlvbihSZXNvdXJjZUhhbmRsZSos
IGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgeyB9CisKKyNpZiBQTEFURk9STShNQUMp
ICAgICAgICAKKyAgICAgICAgdmlydHVhbCBOU0NhY2hlZFVSTFJlc3BvbnNlKiB3aWxsQ2FjaGVS
ZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIE5TQ2FjaGVkVVJMUmVzcG9uc2UqIHJlc3BvbnNlKSB7
IHJldHVybiByZXNwb25zZTsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFN0b3BCdWZmZXJp
bmdEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciosIGludCkgeyB9IAorI2VuZGlmCisj
aWYgVVNFKENGTkVUV09SSykKKyAgICAgICAgdmlydHVhbCBib29sIHNob3VsZENhY2hlUmVzcG9u
c2UoUmVzb3VyY2VIYW5kbGUqLCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKSB7IHJl
dHVybiB0cnVlOyB9CisjZW5kaWYKKyAgICB9OworCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1SZXNvdXJjZUhhbmRsZUNs
aWVudC5oCShyZXZpc2lvbiA0NTE5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0
Zm9ybVJlc291cmNlSGFuZGxlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDkgKzIzLDEw
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFJlc291cmNlSGFuZGxlQ2xpZW50
X2gKLSNkZWZpbmUgUmVzb3VyY2VIYW5kbGVDbGllbnRfaAorI2lmbmRlZiBQbGF0Zm9ybVJlc291
cmNlSGFuZGxlQ2xpZW50X2gKKyNkZWZpbmUgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZUNsaWVudF9o
CiAKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIiAgLy8gZm9yIENhY2hlU3RvcmFn
ZVBvbGljeQogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNDgsNDUgKzQ5LDM5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKICAgICBj
bGFzcyBDcmVkZW50aWFsOwogICAgIGNsYXNzIEtVUkw7Ci0gICAgY2xhc3MgUmVzb3VyY2VIYW5k
bGU7CisgICAgY2xhc3MgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZTsKICAgICBjbGFzcyBSZXNvdXJj
ZUVycm9yOwogICAgIHN0cnVjdCBSZXNvdXJjZVJlcXVlc3Q7CiAgICAgY2xhc3MgUmVzb3VyY2VS
ZXNwb25zZTsKIAotICAgIGVudW0gQ2FjaGVTdG9yYWdlUG9saWN5IHsKLSAgICAgICAgU3RvcmFn
ZUFsbG93ZWQsCi0gICAgICAgIFN0b3JhZ2VBbGxvd2VkSW5NZW1vcnlPbmx5LAotICAgICAgICBT
dG9yYWdlTm90QWxsb3dlZCwKLSAgICB9OwotICAgIAotICAgIGNsYXNzIFJlc291cmNlSGFuZGxl
Q2xpZW50IHsKKyAgICBjbGFzcyBQbGF0Zm9ybVJlc291cmNlSGFuZGxlQ2xpZW50IHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgflJlc291cmNlSGFuZGxlQ2xpZW50KCkgeyB9CisgICAg
ICAgIHZpcnR1YWwgflBsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQoKSB7IH0KIAogICAgICAg
ICAvLyByZXF1ZXN0IG1heSBiZSBtb2RpZmllZAotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNl
bmRSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgLypyZWRpcmVjdFJlc3BvbnNlKi8pIHsgfQotICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkU2VuZERhdGEoUmVzb3VyY2VIYW5kbGUqLCB1bnNpZ25lZCBsb25nIGxvbmcgLypieXRl
c1NlbnQqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qdG90YWxCeXRlc1RvQmVTZW50Ki8pIHsgfQor
ICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFBsYXRmb3JtUmVzb3VyY2VIYW5k
bGUqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiAvKnJlZGlyZWN0
UmVzcG9uc2UqLykgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShQbGF0Zm9y
bVJlc291cmNlSGFuZGxlKiwgdW5zaWduZWQgbG9uZyBsb25nIC8qYnl0ZXNTZW50Ki8sIHVuc2ln
bmVkIGxvbmcgbG9uZyAvKnRvdGFsQnl0ZXNUb0JlU2VudCovKSB7IH0KIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYpIHsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7
IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUq
KSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBSZXNvdXJjZUVycm9yJikgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB3YXNCbG9ja2VkKFJl
c291cmNlSGFuZGxlKikgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjYW5ub3RTaG93VVJMKFJl
c291cmNlSGFuZGxlKikgeyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxDYWNoZVJlc3Bv
bnNlKFJlc291cmNlSGFuZGxlKiwgQ2FjaGVTdG9yYWdlUG9saWN5JikgeyB9Ci0KLSAgICAgICAg
dmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFJlc291cmNlSGFuZGxlKikg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJikgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDYW5jZWxBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JikgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZENhbmNlbGxhdGlvbihSZXNvdXJj
ZUhhbmRsZSosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgeyB9CisgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSosIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVEYXRhKFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgLyps
ZW5ndGhSZWNlaXZlZCovKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRp
bmcoUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSopIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
RmFpbChQbGF0Zm9ybVJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgfQor
ICAgICAgICB2aXJ0dWFsIHZvaWQgd2FzQmxvY2tlZChQbGF0Zm9ybVJlc291cmNlSGFuZGxlKikg
eyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBjYW5ub3RTaG93VVJMKFBsYXRmb3JtUmVzb3VyY2VI
YW5kbGUqKSB7IH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbENhY2hlUmVzcG9uc2UoUGxh
dGZvcm1SZXNvdXJjZUhhbmRsZSosIENhY2hlU3RvcmFnZVBvbGljeSYpIHsgfQorCisgICAgICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShQbGF0Zm9ybVJlc291cmNl
SGFuZGxlKikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQbGF0Zm9ybVJlc291cmNlSGFuZGxlKiwgY29uc3Qg
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZENh
bmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVj
ZWl2ZWRDYW5jZWxsYXRpb24oUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSosIGNvbnN0IEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJikgeyB9CiAKICNpZiBQTEFURk9STShNQUMpICAgICAgICAKLSAgICAg
ICAgdmlydHVhbCBOU0NhY2hlZFVSTFJlc3BvbnNlKiB3aWxsQ2FjaGVSZXNwb25zZShSZXNvdXJj
ZUhhbmRsZSosIE5TQ2FjaGVkVVJMUmVzcG9uc2UqIHJlc3BvbnNlKSB7IHJldHVybiByZXNwb25z
ZTsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFN0b3BCdWZmZXJpbmdEYXRhKFJlc291cmNl
SGFuZGxlKiwgY29uc3QgY2hhciosIGludCkgeyB9IAorICAgICAgICB2aXJ0dWFsIE5TQ2FjaGVk
VVJMUmVzcG9uc2UqIHdpbGxDYWNoZVJlc3BvbnNlKFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUqLCBO
U0NhY2hlZFVSTFJlc3BvbnNlKiByZXNwb25zZSkgeyByZXR1cm4gcmVzcG9uc2U7IH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIHdpbGxTdG9wQnVmZmVyaW5nRGF0YShQbGF0Zm9ybVJlc291cmNlSGFu
ZGxlKiwgY29uc3QgY2hhciosIGludCkgeyB9IAogI2VuZGlmCiAjaWYgVVNFKENGTkVUV09SSykK
LSAgICAgICAgdmlydHVhbCBib29sIHNob3VsZENhY2hlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUq
LCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKSB7IHJldHVybiB0cnVlOyB9CisgICAg
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDYWNoZVJlc3BvbnNlKFBsYXRmb3JtUmVzb3VyY2VIYW5k
bGUqLCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKSB7IHJldHVybiB0cnVlOyB9CiAj
ZW5kaWYKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1S
ZXNvdXJjZUhhbmRsZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1BsYXRmb3JtUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCShyZXZpc2lvbiA0NTE5OSkJ
KGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaDo0
NTE5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybVJlc291cmNlSGFuZGxl
SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzMCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBSZXNvdXJjZUhhbmRsZUludGVybmFsX2gKKyNkZWZpbmUg
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbF9oCisKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgor
I2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKworI2lmIFVTRShDRk5FVFdPUkspCisjaW5j
bHVkZSA8Q0ZOZXR3b3JrL0NGVVJMQ29ubmVjdGlvblByaXYuaD4KKyNlbmRpZgorCisjaWYgVVNF
KFdJTklORVQpCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+Cisj
ZW5kaWYKKworI2lmIFVTRShDVVJMKQorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUg
IkZvcm1EYXRhU3RyZWFtQ3VybC5oIgorI2VuZGlmCisKKyNpZiBVU0UoU09VUCkKKyNpbmNsdWRl
IDxsaWJzb3VwL3NvdXAuaD4KK2NsYXNzIEZyYW1lOworI2VuZGlmCisKKyNpZiBQTEFURk9STShR
VCkKK2NsYXNzIFFXZWJGcmFtZTsKK2NsYXNzIFFXZWJOZXR3b3JrSm9iOworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgUU5ldHdvcmtSZXBseUhhbmRsZXI7Cit9CisjZW5kaWYKKworI2lmIFBM
QVRGT1JNKE1BQykKKyNpZmRlZiBfX09CSkNfXworQGNsYXNzIE5TVVJMQXV0aGVudGljYXRpb25D
aGFsbGVuZ2U7CitAY2xhc3MgTlNVUkxDb25uZWN0aW9uOworI2Vsc2UKK2NsYXNzIE5TVVJMQXV0
aGVudGljYXRpb25DaGFsbGVuZ2U7CitjbGFzcyBOU1VSTENvbm5lY3Rpb247CisjZW5kaWYKKyNl
bmRpZgorCisvLyBUaGUgYWxsb2NhdGlvbnMgYW5kIHJlbGVhc2VzIGluIFJlc291cmNlSGFuZGxl
SW50ZXJuYWwgYXJlCisvLyBDb2NvYS1leGNlcHRpb24tZnJlZSAoZWl0aGVyIHNpbXBsZSBGb3Vu
ZGF0aW9uIGNsYXNzZXMgb3IKKy8vIFdlYkNvcmVSZXNvdXJjZUxvYWRlckltcCB3aGljaCBhdm9p
ZHMgZG9pbmcgd29yayBpbiBkZWFsbG9jKS4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNs
YXNzIFJlc291cmNlSGFuZGxlQ2xpZW50OworCisgICAgY2xhc3MgUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbCA6IE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlc291cmNlSGFuZGxl
SW50ZXJuYWwoUmVzb3VyY2VIYW5kbGUqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVudCogYywgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29s
IHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBtaWdodERvd25sb2FkRnJvbUhhbmRsZSkKKyAgICAg
ICAgICAgIDogbV9jbGllbnQoYykKKyAgICAgICAgICAgICwgbV9yZXF1ZXN0KHJlcXVlc3QpCisg
ICAgICAgICAgICAsIHN0YXR1cygwKQorICAgICAgICAgICAgLCBtX2RlZmVyc0xvYWRpbmcoZGVm
ZXJzTG9hZGluZykKKyAgICAgICAgICAgICwgbV9zaG91bGRDb250ZW50U25pZmYoc2hvdWxkQ29u
dGVudFNuaWZmKQorICAgICAgICAgICAgLCBtX21pZ2h0RG93bmxvYWRGcm9tSGFuZGxlKG1pZ2h0
RG93bmxvYWRGcm9tSGFuZGxlKQorI2lmIFVTRShDRk5FVFdPUkspCisgICAgICAgICAgICAsIG1f
Y29ubmVjdGlvbigwKQorI2VuZGlmCisjaWYgVVNFKFdJTklORVQpCisgICAgICAgICAgICAsIG1f
ZmlsZUhhbmRsZShJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAgICAgICAgICwgbV9maWxlTG9h
ZFRpbWVyKGxvYWRlciwgJlJlc291cmNlSGFuZGxlOjpmaWxlTG9hZFRpbWVyKQorICAgICAgICAg
ICAgLCBtX3Jlc291cmNlSGFuZGxlKDApCisgICAgICAgICAgICAsIG1fc2Vjb25kYXJ5SGFuZGxl
KDApCisgICAgICAgICAgICAsIG1fam9iSWQoMCkKKyAgICAgICAgICAgICwgbV90aHJlYWRJZCgw
KQorICAgICAgICAgICAgLCBtX3dyaXRpbmcoZmFsc2UpCisgICAgICAgICAgICAsIG1fZm9ybURh
dGFTdHJpbmcoMCkKKyAgICAgICAgICAgICwgbV9mb3JtRGF0YUxlbmd0aCgwKQorICAgICAgICAg
ICAgLCBtX2J5dGVzUmVtYWluaW5nVG9Xcml0ZSgwKQorICAgICAgICAgICAgLCBtX2hhc1JlY2Vp
dmVkUmVzcG9uc2UoZmFsc2UpCisgICAgICAgICAgICAsIG1fcmVzZW5kKGZhbHNlKQorI2VuZGlm
CisjaWYgVVNFKENVUkwpCisgICAgICAgICAgICAsIG1faGFuZGxlKDApCisgICAgICAgICAgICAs
IG1fdXJsKDApCisgICAgICAgICAgICAsIG1fY3VzdG9tSGVhZGVycygwKQorICAgICAgICAgICAg
LCBtX2NhbmNlbGxlZChmYWxzZSkKKyAgICAgICAgICAgICwgbV9mb3JtRGF0YVN0cmVhbShsb2Fk
ZXIpCisjZW5kaWYKKyNpZiBVU0UoU09VUCkKKyAgICAgICAgICAgICwgbV9tc2coMCkKKyAgICAg
ICAgICAgICwgbV9jYW5jZWxsZWQoZmFsc2UpCisgICAgICAgICAgICAsIG1fcmVwb3J0ZWRIZWFk
ZXJzKGZhbHNlKQorICAgICAgICAgICAgLCBtX2dmaWxlKDApCisgICAgICAgICAgICAsIG1faW5w
dXRTdHJlYW0oMCkKKyAgICAgICAgICAgICwgbV9jYW5jZWxsYWJsZSgwKQorICAgICAgICAgICAg
LCBtX2J1ZmZlcigwKQorICAgICAgICAgICAgLCBtX2J1ZmZlclNpemUoMCkKKyAgICAgICAgICAg
ICwgbV90b3RhbCgwKQorICAgICAgICAgICAgLCBtX2lkbGVIYW5kbGVyKDApCisgICAgICAgICAg
ICAsIG1fZnJhbWUoMCkKKyNlbmRpZgorI2lmIFBMQVRGT1JNKFFUKQorICAgICAgICAgICAgLCBt
X2pvYigwKQorICAgICAgICAgICAgLCBtX2ZyYW1lKDApCisjZW5kaWYKKyNpZiBQTEFURk9STShN
QUMpCisgICAgICAgICAgICAsIG1fc3RhcnRXaGVuU2NoZWR1bGVkKGZhbHNlKQorICAgICAgICAg
ICAgLCBtX25lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKGZhbHNlKQorICAgICAgICAgICAgLCBtX2N1
cnJlbnRNYWNDaGFsbGVuZ2UobmlsKQorI2VsaWYgVVNFKENGTkVUV09SSykKKyAgICAgICAgICAg
ICwgbV9jdXJyZW50Q0ZDaGFsbGVuZ2UoMCkKKyNlbmRpZgorICAgICAgICAgICAgLCBtX2ZhaWx1
cmVUaW1lcihsb2FkZXIsICZSZXNvdXJjZUhhbmRsZTo6ZmlyZUZhaWx1cmUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnN0IEtVUkwmIHVybCA9IG1fcmVxdWVzdC51cmwoKTsKKyAgICAgICAg
ICAgIG1fdXNlciA9IHVybC51c2VyKCk7CisgICAgICAgICAgICBtX3Bhc3MgPSB1cmwucGFzcygp
OworICAgICAgICAgICAgbV9yZXF1ZXN0LnJlbW92ZUNyZWRlbnRpYWxzKCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIH5SZXNvdXJjZUhhbmRsZUludGVybmFsKCk7CisKKyAgICAgICAg
UmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CisgICAg
ICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBtX2NsaWVudDsKKyAgICAgICAgCisgICAgICAgIFJl
c291cmNlUmVxdWVzdCBtX3JlcXVlc3Q7CisKKyAgICAgICAgLy8gU3VnZ2VzdGVkIGNyZWRlbnRp
YWxzIGZvciB0aGUgY3VycmVudCByZWRpcmVjdGlvbiBzdGVwLgorICAgICAgICBTdHJpbmcgbV91
c2VyOworICAgICAgICBTdHJpbmcgbV9wYXNzOworICAgICAgICAKKyAgICAgICAgaW50IHN0YXR1
czsKKworICAgICAgICBib29sIG1fZGVmZXJzTG9hZGluZzsKKyAgICAgICAgYm9vbCBtX3Nob3Vs
ZENvbnRlbnRTbmlmZjsKKyAgICAgICAgYm9vbCBtX21pZ2h0RG93bmxvYWRGcm9tSGFuZGxlOwor
I2lmIFVTRShDRk5FVFdPUkspCisgICAgICAgIFJldGFpblB0cjxDRlVSTENvbm5lY3Rpb25SZWY+
IG1fY29ubmVjdGlvbjsKKyNlbGlmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgUmV0YWluUHRyPE5T
VVJMQ29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOworICAgICAgICBSZXRhaW5QdHI8V2ViQ29yZVJl
c291cmNlSGFuZGxlQXNEZWxlZ2F0ZT4gbV9kZWxlZ2F0ZTsKKyAgICAgICAgUmV0YWluUHRyPGlk
PiBtX3Byb3h5OworICAgICAgICBib29sIG1fc3RhcnRXaGVuU2NoZWR1bGVkOworICAgICAgICBi
b29sIG1fbmVlZHNTaXRlU3BlY2lmaWNRdWlya3M7CisjZW5kaWYKKyNpZiBVU0UoV0lOSU5FVCkK
KyAgICAgICAgSEFORExFIG1fZmlsZUhhbmRsZTsKKyAgICAgICAgVGltZXI8UmVzb3VyY2VIYW5k
bGU+IG1fZmlsZUxvYWRUaW1lcjsKKyAgICAgICAgSElOVEVSTkVUIG1fcmVzb3VyY2VIYW5kbGU7
CisgICAgICAgIEhJTlRFUk5FVCBtX3NlY29uZGFyeUhhbmRsZTsKKyAgICAgICAgdW5zaWduZWQg
bV9qb2JJZDsKKyAgICAgICAgRFdPUkQgbV90aHJlYWRJZDsKKyAgICAgICAgYm9vbCBtX3dyaXRp
bmc7CisgICAgICAgIGNoYXIqIG1fZm9ybURhdGFTdHJpbmc7CisgICAgICAgIGludCBtX2Zvcm1E
YXRhTGVuZ3RoOworICAgICAgICBpbnQgbV9ieXRlc1JlbWFpbmluZ1RvV3JpdGU7CisgICAgICAg
IFN0cmluZyBtX3Bvc3RSZWZlcnJlcjsKKyAgICAgICAgYm9vbCBtX2hhc1JlY2VpdmVkUmVzcG9u
c2U7CisgICAgICAgIGJvb2wgbV9yZXNlbmQ7CisjZW5kaWYKKyNpZiBVU0UoQ1VSTCkKKyAgICAg
ICAgQ1VSTCogbV9oYW5kbGU7CisgICAgICAgIGNoYXIqIG1fdXJsOworICAgICAgICBzdHJ1Y3Qg
Y3VybF9zbGlzdCogbV9jdXN0b21IZWFkZXJzOworICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIG1f
cmVzcG9uc2U7CisgICAgICAgIGJvb2wgbV9jYW5jZWxsZWQ7CisKKyAgICAgICAgRm9ybURhdGFT
dHJlYW0gbV9mb3JtRGF0YVN0cmVhbTsKKyAgICAgICAgVmVjdG9yPGNoYXI+IG1fcG9zdEJ5dGVz
OworI2VuZGlmCisjaWYgVVNFKFNPVVApCisgICAgICAgIFNvdXBNZXNzYWdlKiBtX21zZzsKKyAg
ICAgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOworICAgICAgICBib29sIG1fY2FuY2Vs
bGVkOworICAgICAgICBib29sIG1fcmVwb3J0ZWRIZWFkZXJzOworICAgICAgICBHRmlsZSogbV9n
ZmlsZTsKKyAgICAgICAgR0lucHV0U3RyZWFtKiBtX2lucHV0U3RyZWFtOworICAgICAgICBHQ2Fu
Y2VsbGFibGUqIG1fY2FuY2VsbGFibGU7CisgICAgICAgIGNoYXIqIG1fYnVmZmVyOworICAgICAg
ICBnc2l6ZSBtX2J1ZmZlclNpemUsIG1fdG90YWw7CisgICAgICAgIGd1aW50IG1faWRsZUhhbmRs
ZXI7CisgICAgICAgIEZyYW1lKiBtX2ZyYW1lOworI2VuZGlmCisjaWYgUExBVEZPUk0oUVQpCisj
aWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCisgICAgICAgIFFXZWJOZXR3b3JrSm9iKiBtX2pvYjsK
KyNlbHNlCisgICAgICAgIFFOZXR3b3JrUmVwbHlIYW5kbGVyKiBtX2pvYjsKKyNlbmRpZgorICAg
ICAgICBRV2ViRnJhbWUqIG1fZnJhbWU7CisjZW5kaWYKKworICAgICAgICAvLyBGSVhNRTogVGhl
IHBsYXRmb3JtIGNoYWxsZW5nZSBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBvbmUgc3RvcmVk
IGluIG1fY3VycmVudFdlYkNoYWxsZW5nZSwgYnV0IGl0IGhhcyBhIGRpZmZlcmVudCBzZW5kZXIu
IFdlIG9ubHkgbmVlZCB0byBzdG9yZSBhIHNlbmRlciByZWZlcmVuY2UgaGVyZS4KKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgICAgIE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKm1fY3VycmVu
dE1hY0NoYWxsZW5nZTsKKyNlbmRpZgorI2lmIFVTRShDRk5FVFdPUkspCisgICAgICAgIENGVVJM
QXV0aENoYWxsZW5nZVJlZiBtX2N1cnJlbnRDRkNoYWxsZW5nZTsKKyNlbmRpZgorICAgICAgICBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSBtX2N1cnJlbnRXZWJDaGFsbGVuZ2U7CisKKyAgICAgICAg
UmVzb3VyY2VIYW5kbGU6OkZhaWx1cmVUeXBlIG1fZmFpbHVyZVR5cGU7CisgICAgICAgIFRpbWVy
PFJlc291cmNlSGFuZGxlPiBtX2ZhaWx1cmVUaW1lcjsKKyAgICB9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBSZXNvdXJjZUhhbmRsZUludGVybmFsX2gKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybVJlc291cmNlSGFuZGxlSW50ZXJuYWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1SZXNvdXJjZUhh
bmRsZUludGVybmFsLmgJKHJldmlzaW9uIDQ1MTk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1BsYXRmb3JtUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MywxMCArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbF9oCi0jZGVmaW5lIFJlc291cmNlSGFuZGxlSW50ZXJuYWxfaAorI2lmbmRl
ZiBQbGF0Zm9ybVJlc291cmNlSGFuZGxlSW50ZXJuYWxfaAorI2RlZmluZSBQbGF0Zm9ybVJlc291
cmNlSGFuZGxlSW50ZXJuYWxfaAogCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0
LmgiCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKICNpbmNsdWRlICJUaW1l
ci5oIgpAQCAtNjgsMTYgKzY4LDE2IEBAIGNsYXNzIE5TVVJMQ29ubmVjdGlvbjsKICNlbmRpZgog
I2VuZGlmCiAKLS8vIFRoZSBhbGxvY2F0aW9ucyBhbmQgcmVsZWFzZXMgaW4gUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbCBhcmUKKy8vIFRoZSBhbGxvY2F0aW9ucyBhbmQgcmVsZWFzZXMgaW4gUGxhdGZv
cm1SZXNvdXJjZUhhbmRsZUludGVybmFsIGFyZQogLy8gQ29jb2EtZXhjZXB0aW9uLWZyZWUgKGVp
dGhlciBzaW1wbGUgRm91bmRhdGlvbiBjbGFzc2VzIG9yCiAvLyBXZWJDb3JlUmVzb3VyY2VMb2Fk
ZXJJbXAgd2hpY2ggYXZvaWRzIGRvaW5nIHdvcmsgaW4gZGVhbGxvYykuCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKLSAgICBjbGFzcyBSZXNvdXJjZUhhbmRsZUNsaWVudDsKKyAgICBjbGFzcyBQbGF0
Zm9ybVJlc291cmNlSGFuZGxlQ2xpZW50OwogCi0gICAgY2xhc3MgUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbCA6IE5vbmNvcHlhYmxlIHsKKyAgICBjbGFzcyBQbGF0Zm9ybVJlc291cmNlSGFuZGxlSW50
ZXJuYWwgOiBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBSZXNvdXJjZUhhbmRs
ZUludGVybmFsKFJlc291cmNlSGFuZGxlKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGMsIGJvb2wgZGVmZXJzTG9hZGluZywgYm9v
bCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgbWlnaHREb3dubG9hZEZyb21IYW5kbGUpCisgICAg
ICAgIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVJbnRlcm5hbChQbGF0Zm9ybVJlc291cmNlSGFuZGxl
KiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUGxhdGZvcm1SZXNvdXJj
ZUhhbmRsZUNsaWVudCogYywgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNob3VsZENvbnRlbnRT
bmlmZiwgYm9vbCBtaWdodERvd25sb2FkRnJvbUhhbmRsZSkKICAgICAgICAgICAgIDogbV9jbGll
bnQoYykKICAgICAgICAgICAgICwgbV9yZXF1ZXN0KHJlcXVlc3QpCiAgICAgICAgICAgICAsIHN0
YXR1cygwKQpAQCAtODksNyArODksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKICNp
ZiBVU0UoV0lOSU5FVCkKICAgICAgICAgICAgICwgbV9maWxlSGFuZGxlKElOVkFMSURfSEFORExF
X1ZBTFVFKQotICAgICAgICAgICAgLCBtX2ZpbGVMb2FkVGltZXIobG9hZGVyLCAmUmVzb3VyY2VI
YW5kbGU6OmZpbGVMb2FkVGltZXIpCisgICAgICAgICAgICAsIG1fZmlsZUxvYWRUaW1lcihsb2Fk
ZXIsICZQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjpmaWxlTG9hZFRpbWVyKQogICAgICAgICAgICAg
LCBtX3Jlc291cmNlSGFuZGxlKDApCiAgICAgICAgICAgICAsIG1fc2Vjb25kYXJ5SGFuZGxlKDAp
CiAgICAgICAgICAgICAsIG1fam9iSWQoMCkKQEAgLTEzMiw3ICsxMzIsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAjZWxpZiBVU0UoQ0ZORVRXT1JLKQogICAgICAgICAgICAgLCBtX2N1cnJlbnRD
RkNoYWxsZW5nZSgwKQogI2VuZGlmCi0gICAgICAgICAgICAsIG1fZmFpbHVyZVRpbWVyKGxvYWRl
ciwgJlJlc291cmNlSGFuZGxlOjpmaXJlRmFpbHVyZSkKKyAgICAgICAgICAgICwgbV9mYWlsdXJl
VGltZXIobG9hZGVyLCAmUGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6ZmlyZUZhaWx1cmUpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGNvbnN0IEtVUkwmIHVybCA9IG1fcmVxdWVzdC51cmwoKTsKICAg
ICAgICAgICAgIG1fdXNlciA9IHVybC51c2VyKCk7CkBAIC0xNDAsMTAgKzE0MCwxMCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBtX3JlcXVlc3QucmVtb3ZlQ3JlZGVudGlhbHMo
KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgflJlc291cmNlSGFuZGxlSW50ZXJuYWwo
KTsKKyAgICAgICAgflBsYXRmb3JtUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCgpOwogCi0gICAgICAg
IFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQotICAg
ICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogbV9jbGllbnQ7CisgICAgICAgIFBsYXRmb3JtUmVz
b3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CisgICAgICAg
IFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQqIG1fY2xpZW50OwogICAgICAgICAKICAgICAg
ICAgUmVzb3VyY2VSZXF1ZXN0IG1fcmVxdWVzdDsKIApAQCAtMTY3LDcgKzE2Nyw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICNlbmRpZgogI2lmIFVTRShXSU5JTkVUKQogICAgICAgICBIQU5ETEUg
bV9maWxlSGFuZGxlOwotICAgICAgICBUaW1lcjxSZXNvdXJjZUhhbmRsZT4gbV9maWxlTG9hZFRp
bWVyOworICAgICAgICBUaW1lcjxQbGF0Zm9ybVJlc291cmNlSGFuZGxlPiBtX2ZpbGVMb2FkVGlt
ZXI7CiAgICAgICAgIEhJTlRFUk5FVCBtX3Jlc291cmNlSGFuZGxlOwogICAgICAgICBISU5URVJO
RVQgbV9zZWNvbmRhcnlIYW5kbGU7CiAgICAgICAgIHVuc2lnbmVkIG1fam9iSWQ7CkBAIC0yMjEs
MTAgKzIyMSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKICAgICAgICAgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UgbV9jdXJyZW50V2ViQ2hhbGxlbmdlOwogCi0gICAgICAgIFJlc291
cmNlSGFuZGxlOjpGYWlsdXJlVHlwZSBtX2ZhaWx1cmVUeXBlOwotICAgICAgICBUaW1lcjxSZXNv
dXJjZUhhbmRsZT4gbV9mYWlsdXJlVGltZXI7CisgICAgICAgIFBsYXRmb3JtUmVzb3VyY2VIYW5k
bGU6OkZhaWx1cmVUeXBlIG1fZmFpbHVyZVR5cGU7CisgICAgICAgIFRpbWVyPFBsYXRmb3JtUmVz
b3VyY2VIYW5kbGU+IG1fZmFpbHVyZVRpbWVyOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAotI2VuZGlmIC8vIFJlc291cmNlSGFuZGxlSW50ZXJuYWxfaAorI2VuZGlmIC8vIFBs
YXRmb3JtUmVzb3VyY2VIYW5kbGVJbnRlcm5hbF9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlzaW9uIDQ1MTk5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUs
MjA0ICsyNSwxNjIgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgogCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5k
bGVDbGllbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdC5oIgor
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRl
IDxhbGdvcml0aG0+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBib29sIHNob3VsZEZvcmNlQ29udGVudFNuaWZm
aW5nOworI2lmbmRlZiBOREVCVUcgICAgCitzdGF0aWMgV1RGOjpSZWZDb3VudGVkTGVha0NvdW50
ZXIgbGVha0NvdW50ZXIoIlJlc291cmNlSGFuZGxlIik7CisjZW5kaWYKIAotc3RhdGljIGJvb2wg
cG9ydEFsbG93ZWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAKLVJlc291cmNlSGFuZGxlOjpS
ZXNvdXJjZUhhbmRsZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlSGFu
ZGxlQ2xpZW50KiBjbGllbnQsIGJvb2wgZGVmZXJzTG9hZGluZywKLSAgICAgICAgIGJvb2wgc2hv
dWxkQ29udGVudFNuaWZmLCBib29sIG1pZ2h0RG93bmxvYWRGcm9tSGFuZGxlKQotICAgIDogZChu
ZXcgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCh0aGlzLCByZXF1ZXN0LCBjbGllbnQsIGRlZmVyc0xv
YWRpbmcsIHNob3VsZENvbnRlbnRTbmlmZiwgbWlnaHREb3dubG9hZEZyb21IYW5kbGUpKQorUmVz
b3VyY2VIYW5kbGU6OlJlc291cmNlSGFuZGxlKCkKKyAgICA6IG1faW50ZXJjZXB0b3JIb3N0KG5l
dyBSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdCh0aGlzKSkKIHsKKyNpZm5kZWYgTkRFQlVH
CisgICAgbGVha0NvdW50ZXIuaW5jcmVtZW50KCk7CisjZW5kaWYKK30KKworUmVzb3VyY2VIYW5k
bGU6On5SZXNvdXJjZUhhbmRsZSgpCit7CisgICAgaWYgKG1fcGxhdGZvcm1IYW5kbGUpCisgICAg
ICAgIG1fcGxhdGZvcm1IYW5kbGUtPnNldENsaWVudCgwKTsKKyNpZm5kZWYgTkRFQlVHCisgICAg
bGVha0NvdW50ZXIuZGVjcmVtZW50KCk7CisjZW5kaWYKIH0KIAogUGFzc1JlZlB0cjxSZXNvdXJj
ZUhhbmRsZT4gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQsCiAgICAgRnJhbWUqIGZyYW1lLCBi
b29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIG1pZ2h0RG93
bmxvYWRGcm9tSGFuZGxlKQogewotICAgIGlmIChzaG91bGRDb250ZW50U25pZmYpCi0gICAgICAg
IHNob3VsZENvbnRlbnRTbmlmZiA9IHNob3VsZENvbnRlbnRTbmlmZlVSTChyZXF1ZXN0LnVybCgp
KTsKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZShhZG9wdFJlZihuZXcgUmVzb3Vy
Y2VIYW5kbGUoKSkpOworICAgIGhhbmRsZS0+bV9kZWZlcnNMb2FkaW5nID0gZGVmZXJzTG9hZGlu
ZzsKKyAgICBoYW5kbGUtPm1fc2hvdWxkQ29udGVudFNuaWZmID0gc2hvdWxkQ29udGVudFNuaWZm
OworICAgIGhhbmRsZS0+bV9taWdodERvd25sb2FkRnJvbUhhbmRsZSA9IG1pZ2h0RG93bmxvYWRG
cm9tSGFuZGxlOworICAgIGhhbmRsZS0+bV9wbGF0Zm9ybUhhbmRsZSA9IFBsYXRmb3JtUmVzb3Vy
Y2VIYW5kbGU6OmNyZWF0ZVdpdGhvdXRTdGFydGluZyhyZXF1ZXN0LCAwLCBkZWZlcnNMb2FkaW5n
LCBzaG91bGRDb250ZW50U25pZmYsIG1pZ2h0RG93bmxvYWRGcm9tSGFuZGxlKTsKIAotICAgIFJl
ZlB0cjxSZXNvdXJjZUhhbmRsZT4gbmV3SGFuZGxlKGFkb3B0UmVmKG5ldyBSZXNvdXJjZUhhbmRs
ZShyZXF1ZXN0LCBjbGllbnQsIGRlZmVyc0xvYWRpbmcsIHNob3VsZENvbnRlbnRTbmlmZiwgbWln
aHREb3dubG9hZEZyb21IYW5kbGUpKSk7CisgICAgaGFuZGxlLT5tX2ludGVyY2VwdG9ySG9zdC0+
Y3JlYXRlSW50ZXJjZXB0b3IocmVxdWVzdCk7CisgICAgaGFuZGxlLT5zZXRDbGllbnQoY2xpZW50
KTsKIAotICAgIGlmICghcmVxdWVzdC51cmwoKS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgbmV3SGFu
ZGxlLT5zY2hlZHVsZUZhaWx1cmUoSW52YWxpZFVSTEZhaWx1cmUpOwotICAgICAgICByZXR1cm4g
bmV3SGFuZGxlLnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAoIXBvcnRBbGxvd2VkKHJlcXVl
c3QpKSB7Ci0gICAgICAgIG5ld0hhbmRsZS0+c2NoZWR1bGVGYWlsdXJlKEJsb2NrZWRGYWlsdXJl
KTsKLSAgICAgICAgcmV0dXJuIG5ld0hhbmRsZS5yZWxlYXNlKCk7Ci0gICAgfQotICAgICAgICAK
LSAgICBpZiAobmV3SGFuZGxlLT5zdGFydChmcmFtZSkpCi0gICAgICAgIHJldHVybiBuZXdIYW5k
bGUucmVsZWFzZSgpOworICAgIGlmIChoYW5kbGUtPnN0YXJ0KGZyYW1lKSkKKyAgICAgICAgcmV0
dXJuIGhhbmRsZS5yZWxlYXNlKCk7CiAKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6c2NoZWR1bGVGYWlsdXJlKEZhaWx1cmVUeXBlIHR5cGUpCit2b2lkIFJlc291cmNl
SGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgY3JlZGVudGlhbHMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhLCBGcmFtZSogZnJhbWUp
CiB7Ci0gICAgZC0+bV9mYWlsdXJlVHlwZSA9IHR5cGU7Ci0gICAgZC0+bV9mYWlsdXJlVGltZXIu
c3RhcnRPbmVTaG90KDApOworICAgIGlmIChSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6
bWF5YmVJbnRlcmNlcHRTeW5jaHJvbm91c2x5KHJlcXVlc3QsIGNyZWRlbnRpYWxzLCBlcnJvciwg
cmVzcG9uc2UsIGRhdGEpKQorICAgICAgICByZXR1cm47CisKKyAgICBQbGF0Zm9ybVJlc291cmNl
SGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHJlcXVlc3QsIGNyZWRlbnRpYWxzLCBl
cnJvciwgcmVzcG9uc2UsIGRhdGEsIGZyYW1lKTsKKworICAgIFJlc291cmNlSGFuZGxlSW50ZXJj
ZXB0b3JIb3N0OjptYXliZUZhbGxiYWNrU3ljaHJvbm91c2x5KHJlcXVlc3QsIGNyZWRlbnRpYWxz
LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpmaXJl
RmFpbHVyZShUaW1lcjxSZXNvdXJjZUhhbmRsZT4qKQorYm9vbCBSZXNvdXJjZUhhbmRsZTo6d2ls
bExvYWRGcm9tQ2FjaGUoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIGlmICghY2xp
ZW50KCkpCi0gICAgICAgIHJldHVybjsKKyAgICByZXR1cm4gUGxhdGZvcm1SZXNvdXJjZUhhbmRs
ZTo6d2lsbExvYWRGcm9tQ2FjaGUocmVxdWVzdCk7Cit9CiAKLSAgICBzd2l0Y2ggKGQtPm1fZmFp
bHVyZVR5cGUpIHsKLSAgICAgICAgY2FzZSBCbG9ja2VkRmFpbHVyZToKLSAgICAgICAgICAgIGNs
aWVudCgpLT53YXNCbG9ja2VkKHRoaXMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBj
YXNlIEludmFsaWRVUkxGYWlsdXJlOgotICAgICAgICAgICAgY2xpZW50KCktPmNhbm5vdFNob3dV
UkwodGhpcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQorYm9vbCBSZXNvdXJjZUhhbmRs
ZTo6bG9hZHNCbG9ja2VkKCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6
bG9hZHNCbG9ja2VkKCk7Cit9CiAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK2Jvb2wgUmVz
b3VyY2VIYW5kbGU6OnN1cHBvcnRzQnVmZmVyZWREYXRhKCkKK3sKKyAgICByZXR1cm4gUGxhdGZv
cm1SZXNvdXJjZUhhbmRsZTo6c3VwcG9ydHNCdWZmZXJlZERhdGEoKTsKK30KKwordm9pZCBSZXNv
dXJjZUhhbmRsZTo6cmVjcmVhdGVQbGF0Zm9ybUhhbmRsZShjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCkKK3sKKyAgICBt
X3BsYXRmb3JtSGFuZGxlLT5zZXRDbGllbnQoMCk7CisgICAgbV9wbGF0Zm9ybUhhbmRsZS0+Y2Fu
Y2VsKCk7CisgICAgbV9wbGF0Zm9ybUhhbmRsZS5jbGVhcigpOworICAgIG1fcGxhdGZvcm1IYW5k
bGUgPSBQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjpjcmVhdGVXaXRob3V0U3RhcnRpbmcocmVxdWVz
dCwgY2xpZW50LCBtX2RlZmVyc0xvYWRpbmcsIG1fc2hvdWxkQ29udGVudFNuaWZmLCBtX21pZ2h0
RG93bmxvYWRGcm9tSGFuZGxlKTsKK30KKworYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoRnJh
bWUqIGZyYW1lKQoreworICAgIHJldHVybiBtX2ludGVyY2VwdG9ySG9zdC0+c3RhcnQoZnJhbWUp
OworfQorCitib29sIFJlc291cmNlSGFuZGxlOjpzdGFydFBsYXRmb3JtSGFuZGxlKEZyYW1lKiBm
cmFtZSkKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUhhbmRsZS0+c3RhcnQoZnJhbWUpOworfQor
Cit2b2lkIFJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQoreworICAgIG1faW50ZXJjZXB0b3JIb3N0
LT5jYW5jZWwoKTsKIH0KIAogUmVzb3VyY2VIYW5kbGVDbGllbnQqIFJlc291cmNlSGFuZGxlOjpj
bGllbnQoKSBjb25zdAogewotICAgIHJldHVybiBkLT5tX2NsaWVudDsKKyAgICByZXR1cm4gbV9p
bnRlcmNlcHRvckhvc3QtPmNsaWVudCgpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRD
bGllbnQoUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCkKIHsKLSAgICBkLT5tX2NsaWVudCA9
IGNsaWVudDsKKyAgICBtX2ludGVyY2VwdG9ySG9zdC0+c2V0Q2xpZW50KGNsaWVudCk7CiB9CiAK
LWNvbnN0IFJlc291cmNlUmVxdWVzdCYgUmVzb3VyY2VIYW5kbGU6OnJlcXVlc3QoKSBjb25zdAor
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFJlc291cmNlSGFuZGxlOjpidWZmZXJlZERhdGEoKQog
ewotICAgIHJldHVybiBkLT5tX3JlcXVlc3Q7CisgICAgcmV0dXJuIG1faW50ZXJjZXB0b3JIb3N0
LT5idWZmZXJlZERhdGEoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2xlYXJBdXRoZW50
aWNhdGlvbigpCitjb25zdCBSZXNvdXJjZVJlcXVlc3QmIFJlc291cmNlSGFuZGxlOjpyZXF1ZXN0
KCkgY29uc3QKIHsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgZC0+bV9jdXJyZW50TWFjQ2hhbGxl
bmdlID0gbmlsOwotI2VsaWYgVVNFKENGTkVUV09SSykKLSAgICBkLT5tX2N1cnJlbnRDRkNoYWxs
ZW5nZSA9IDA7Ci0jZW5kaWYKLSAgICBkLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2UubnVsbGlmeSgp
OworICAgIHJldHVybiBtX3BsYXRmb3JtSGFuZGxlLT5yZXF1ZXN0KCk7CiB9CiAKLXN0YXRpYyBi
b29sIHBvcnRBbGxvd2VkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3ZvaWQgUmVz
b3VyY2VIYW5kbGU6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcikKIHsKLSAgICB1bnNpZ25l
ZCBzaG9ydCBwb3J0ID0gcmVxdWVzdC51cmwoKS5wb3J0KCk7Ci0KLSAgICAvLyBTaW5jZSBtb3N0
IFVSTHMgZG9uJ3QgaGF2ZSBhIHBvcnQsIHJldHVybiBlYXJseSBmb3IgdGhlICJubyBwb3J0IiBj
YXNlLgotICAgIGlmICghcG9ydCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBUaGlz
IGJsb2NrZWQgcG9ydCBsaXN0IG1hdGNoZXMgdGhlIHBvcnQgYmxvY2tpbmcgdGhhdCBNb3ppbGxh
IGltcGxlbWVudHMuCi0gICAgLy8gU2VlIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMv
bmV0bGliL1BvcnRCYW5uaW5nLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIHNob3J0IGJsb2NrZWRQb3J0TGlzdFtdID0gewotICAgICAgICAxLCAg
ICAvLyB0Y3BtdXgKLSAgICAgICAgNywgICAgLy8gZWNobwotICAgICAgICA5LCAgICAvLyBkaXNj
YXJkCi0gICAgICAgIDExLCAgIC8vIHN5c3RhdAotICAgICAgICAxMywgICAvLyBkYXl0aW1lCi0g
ICAgICAgIDE1LCAgIC8vIG5ldHN0YXQKLSAgICAgICAgMTcsICAgLy8gcW90ZAotICAgICAgICAx
OSwgICAvLyBjaGFyZ2VuCi0gICAgICAgIDIwLCAgIC8vIEZUUC1kYXRhCi0gICAgICAgIDIxLCAg
IC8vIEZUUC1jb250cm9sCi0gICAgICAgIDIyLCAgIC8vIFNTSAotICAgICAgICAyMywgICAvLyB0
ZWxuZXQKLSAgICAgICAgMjUsICAgLy8gU01UUAotICAgICAgICAzNywgICAvLyB0aW1lCi0gICAg
ICAgIDQyLCAgIC8vIG5hbWUKLSAgICAgICAgNDMsICAgLy8gbmljbmFtZQotICAgICAgICA1Mywg
ICAvLyBkb21haW4KLSAgICAgICAgNzcsICAgLy8gcHJpdi1yanMKLSAgICAgICAgNzksICAgLy8g
ZmluZ2VyCi0gICAgICAgIDg3LCAgIC8vIHR0eWxpbmsKLSAgICAgICAgOTUsICAgLy8gc3VwZHVw
Ci0gICAgICAgIDEwMSwgIC8vIGhvc3RyaWFtZQotICAgICAgICAxMDIsICAvLyBpc28tdHNhcAot
ICAgICAgICAxMDMsICAvLyBncHBpdG5wCi0gICAgICAgIDEwNCwgIC8vIGFjci1uZW1hCi0gICAg
ICAgIDEwOSwgIC8vIFBPUDIKLSAgICAgICAgMTEwLCAgLy8gUE9QMwotICAgICAgICAxMTEsICAv
LyBzdW5ycGMKLSAgICAgICAgMTEzLCAgLy8gYXV0aAotICAgICAgICAxMTUsICAvLyBTRlRQCi0g
ICAgICAgIDExNywgIC8vIHV1Y3AtcGF0aAotICAgICAgICAxMTksICAvLyBubnRwCi0gICAgICAg
IDEyMywgIC8vIE5UUAotICAgICAgICAxMzUsICAvLyBsb2Mtc3J2IC8gZXBtYXAKLSAgICAgICAg
MTM5LCAgLy8gbmV0YmlvcwotICAgICAgICAxNDMsICAvLyBJTUFQMgotICAgICAgICAxNzksICAv
LyBCR1AKLSAgICAgICAgMzg5LCAgLy8gTERBUAotICAgICAgICA0NjUsICAvLyBTTVRQK1NTTAot
ICAgICAgICA1MTIsICAvLyBwcmludCAvIGV4ZWMKLSAgICAgICAgNTEzLCAgLy8gbG9naW4KLSAg
ICAgICAgNTE0LCAgLy8gc2hlbGwKLSAgICAgICAgNTE1LCAgLy8gcHJpbnRlcgotICAgICAgICA1
MjYsICAvLyB0ZW1wbwotICAgICAgICA1MzAsICAvLyBjb3VyaWVyCi0gICAgICAgIDUzMSwgIC8v
IENoYXQKLSAgICAgICAgNTMyLCAgLy8gbmV0bmV3cwotICAgICAgICA1NDAsICAvLyBVVUNQCi0g
ICAgICAgIDU1NiwgIC8vIHJlbW90ZWZzCi0gICAgICAgIDU2MywgIC8vIE5OVFArU1NMCi0gICAg
ICAgIDU4NywgIC8vIEVTTVRQCi0gICAgICAgIDYwMSwgIC8vIHN5c2xvZy1jb25uCi0gICAgICAg
IDYzNiwgIC8vIExEQVArU1NMCi0gICAgICAgIDk5MywgIC8vIElNQVArU1NMCi0gICAgICAgIDk5
NSwgIC8vIFBPUDMrU1NMCi0gICAgICAgIDIwNDksIC8vIE5GUwotICAgICAgICAzNjU5LCAvLyBh
cHBsZS1zYXNsIC8gUGFzc3dvcmRTZXJ2ZXIgW0FwcGxlIGFkZGl0aW9uXQotICAgICAgICA0MDQ1
LCAvLyBsb2NrZAotICAgICAgICA2MDAwLCAvLyBYMTEKLSAgICB9OwotICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0KiBjb25zdCBibG9ja2VkUG9ydExpc3RFbmQgPSBibG9ja2VkUG9ydExpc3QKLSAg
ICAgICAgKyBzaXplb2YoYmxvY2tlZFBvcnRMaXN0KSAvIHNpemVvZihibG9ja2VkUG9ydExpc3Rb
MF0pOwotCi0gICAgLy8gSWYgdGhlIHBvcnQgaXMgbm90IGluIHRoZSBibG9ja2VkIHBvcnQgbGlz
dCwgYWxsb3cgaXQuCi0gICAgaWYgKCFzdGQ6OmJpbmFyeV9zZWFyY2goYmxvY2tlZFBvcnRMaXN0
LCBibG9ja2VkUG9ydExpc3RFbmQsIHBvcnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IC8vIEFsbG93IHBvcnRzIDIxIGFuZCAyMiBmb3IgRlRQIFVSTHMsIGFzIE1vemlsbGEgZG9lcy4K
LSAgICBpZiAoKHBvcnQgPT0gMjEgfHwgcG9ydCA9PSAyMikgJiYgcmVxdWVzdC51cmwoKS5wcm90
b2NvbElzKCJmdHAiKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBBbGxvdyBhbnkg
cG9ydCBudW1iZXIgaW4gYSBmaWxlIFVSTCwgc2luY2UgdGhlIHBvcnQgbnVtYmVyIGlzIGlnbm9y
ZWQuCi0gICAgaWYgKHJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygiZmlsZSIpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBtX3BsYXRmb3JtSGFuZGxlLT5zZXREZWZlcnNMb2FkaW5nKGRlZmVy
KTsKK30KIAotICAgIHJldHVybiBmYWxzZTsKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNsZWFyQXV0
aGVudGljYXRpb24oKQoreworICAgIG1fcGxhdGZvcm1IYW5kbGUtPmNsZWFyQXV0aGVudGljYXRp
b24oKTsKIH0KLSAgCisKIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnNob3VsZENvbnRlbnRTbmlmZigp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGQtPm1fc2hvdWxkQ29udGVudFNuaWZmOworICAgIHJldHVy
biBtX3BsYXRmb3JtSGFuZGxlLT5zaG91bGRDb250ZW50U25pZmYoKTsKIH0KIAogYm9vbCBSZXNv
dXJjZUhhbmRsZTo6c2hvdWxkQ29udGVudFNuaWZmVVJMKGNvbnN0IEtVUkwmIHVybCkKIHsKLSNp
ZiBQTEFURk9STShNQUMpCi0gICAgaWYgKHNob3VsZEZvcmNlQ29udGVudFNuaWZmaW5nKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotICAgIC8vIFdlIHNob3VsZG4ndCBjb250ZW50IHNu
aWZmIGZpbGUgVVJMcyBhcyB0aGVpciBNSU1FIHR5cGUgc2hvdWxkIGJlIGVzdGFibGlzaGVkIHZp
YSB0aGVpciBleHRlbnNpb24uCi0gICAgcmV0dXJuICF1cmwucHJvdG9jb2xJcygiZmlsZSIpOwor
ICAgIHJldHVybiBQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjpzaG91bGRDb250ZW50U25pZmZVUkwo
dXJsKTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6Zm9yY2VDb250ZW50U25pZmZpbmcoKQog
ewotICAgIHNob3VsZEZvcmNlQ29udGVudFNuaWZmaW5nID0gdHJ1ZTsKKyAgICBQbGF0Zm9ybVJl
c291cmNlSGFuZGxlOjpmb3JjZUNvbnRlbnRTbmlmZmluZygpOwogfQogCisjaWYgUExBVEZPUk0o
TUFDKQorTlNVUkxDb25uZWN0aW9uICpSZXNvdXJjZUhhbmRsZTo6Y29ubmVjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fcGxhdGZvcm1IYW5kbGUtPmNvbm5lY3Rpb24oKTsgfQorLy9XZWJDb3JlUmVz
b3VyY2VIYW5kbGVBc0RlbGVnYXRlICpkZWxlZ2F0ZSgpIHsgcmV0dXJuIG1fcGxhdGZvcm1IYW5k
bGUtPmRlbGVnYXRlKCk7IH0KK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlbGVhc2VEZWxlZ2F0ZSgp
IHsgbV9wbGF0Zm9ybUhhbmRsZS0+cmVsZWFzZURlbGVnYXRlKCk7IH0KK2lkIFJlc291cmNlSGFu
ZGxlOjpyZWxlYXNlUHJveHkoKSB7IHJldHVybiBtX3BsYXRmb3JtSGFuZGxlLT5yZWxlYXNlUHJv
eHkoKTsgfQordm9pZCBSZXNvdXJjZUhhbmRsZTo6c2NoZWR1bGUoU2NoZWR1bGVQYWlyKiBwYWly
KSB7IG1fcGxhdGZvcm1IYW5kbGUtPnNjaGVkdWxlKHBhaXIpOyB9Cit2b2lkIFJlc291cmNlSGFu
ZGxlOjp1bnNjaGVkdWxlKFNjaGVkdWxlUGFpciogcGFpcikgeyBtX3BsYXRmb3JtSGFuZGxlLT51
bnNjaGVkdWxlKHBhaXIpOyB9CisKKyNlbmRpZiAgLy8gUExBVEZPUk0oTUFDKQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZS5oCShyZXZpc2lvbiA0NTE5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3OSArMjYsMjIgQEAKICNpZm5k
ZWYgUmVzb3VyY2VIYW5kbGVfaAogI2RlZmluZSBSZXNvdXJjZUhhbmRsZV9oCiAKLSNpbmNsdWRl
ICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIgotI2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIK
LSNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgot
Ci0jaWYgVVNFKFNPVVApCi10eXBlZGVmIHN0cnVjdCBfU291cFNlc3Npb24gU291cFNlc3Npb247
Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENGKQotdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRkRh
dGEgKiBDRkRhdGFSZWY7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLXR5cGVkZWYgdW5z
aWduZWQgbG9uZyBEV09SRDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBEV09SRF9QVFI7Ci10eXBl
ZGVmIHZvaWQqIExQVk9JRDsKLXR5cGVkZWYgTFBWT0lEIEhJTlRFUk5FVDsKLXR5cGVkZWYgdW5z
aWduZWQgV1BBUkFNOwotdHlwZWRlZiBsb25nIExQQVJBTTsKLXR5cGVkZWYgc3RydWN0IEhXTkRf
XyogSFdORDsKLXR5cGVkZWYgX1c2NCBsb25nIExPTkdfUFRSOwotdHlwZWRlZiBMT05HX1BUUiBM
UkVTVUxUOwotI2VuZGlmCi0KLQotI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+Ci0jaWZkZWYgX19PQkpDX18KLUBjbGFzcyBOU0RhdGE7Ci1AY2xhc3MgTlNFcnJv
cjsKLUBjbGFzcyBOU1VSTENvbm5lY3Rpb247Ci1AY2xhc3MgV2ViQ29yZVJlc291cmNlSGFuZGxl
QXNEZWxlZ2F0ZTsKLSNlbHNlCi1jbGFzcyBOU0RhdGE7Ci1jbGFzcyBOU0Vycm9yOwotY2xhc3Mg
TlNVUkxDb25uZWN0aW9uOwotY2xhc3MgV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZTsK
LXR5cGVkZWYgc3RydWN0IG9iamNfb2JqZWN0ICppZDsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBV
U0UoQ0ZORVRXT1JLKQotdHlwZWRlZiBzdHJ1Y3QgX0NGVVJMQ29ubmVjdGlvbiogQ0ZVUkxDb25u
ZWN0aW9uUmVmOwotdHlwZWRlZiBpbnQgQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeTsK
LXR5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRUUENvb2tpZVN0b3JhZ2UqIENGSFRUUENvb2tpZVN0
b3JhZ2VSZWY7Ci0jZW5kaWYKKyNpbmNsdWRlICJQbGF0Zm9ybVJlc291cmNlSGFuZGxlLmgiCisj
aW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIiAgLy8gZm9yIFN0b3JlZENyZWRlbnRpYWxzCisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwotY2xhc3MgQ3JlZGVudGlhbDsKLWNsYXNzIEZvcm1EYXRh
OwogY2xhc3MgRnJhbWU7Ci1jbGFzcyBLVVJMOwotY2xhc3MgUmVzb3VyY2VFcnJvcjsKLWNsYXNz
IFJlc291cmNlSGFuZGxlQ2xpZW50OwotY2xhc3MgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDsKLXN0
cnVjdCBSZXNvdXJjZVJlcXVlc3Q7Ci1jbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogY2xhc3MgU2No
ZWR1bGVQYWlyOwotY2xhc3MgU2hhcmVkQnVmZmVyOwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
Y2xhc3MgVGltZXI7CitjbGFzcyBSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDsKK2NsYXNz
IFJlc291cmNlSGFuZGxlQ2xpZW50OworY2xhc3MgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZTsKK2Ns
YXNzIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQ7CiAKIGNsYXNzIFJlc291cmNlSGFuZGxl
IDogcHVibGljIFJlZkNvdW50ZWQ8UmVzb3VyY2VIYW5kbGU+IHsKIHByaXZhdGU6Ci0gICAgUmVz
b3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQq
LCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIG1pZ2h0
RG93bmxvYWRGcm9tSGFuZGxlKTsKLQotICAgIGVudW0gRmFpbHVyZVR5cGUgewotICAgICAgICBC
bG9ja2VkRmFpbHVyZSwKLSAgICAgICAgSW52YWxpZFVSTEZhaWx1cmUKLSAgICB9OworICAgIFJl
c291cmNlSGFuZGxlKCk7CiAKIHB1YmxpYzoKICAgICAvLyBGSVhNRTogc2hvdWxkIG5vdCBuZWVk
IHRoZSBGcmFtZQpAQCAtMTEzLDI1ICs1NiwyNSBAQCBwdWJsaWM6CiAgICAgflJlc291cmNlSGFu
ZGxlKCk7CiAKICNpZiBQTEFURk9STShNQUMpIHx8IFVTRShDRk5FVFdPUkspCi0gICAgdm9pZCB3
aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVkaXJlY3RSZXNwb25zZSk7Ci0gICAgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgp
OworICAgIC8vdm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CisgICAgLy9ib29sIHNob3VsZFVzZUNy
ZWRlbnRpYWxTdG9yYWdlKCk7CiAjZW5kaWYKICNpZiBQTEFURk9STShNQUMpIHx8IFVTRShDRk5F
VFdPUkspIHx8IFVTRShDVVJMKQotICAgIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0gICAgdm9pZCByZWNlaXZl
ZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDcmVkZW50
aWFsJik7Ci0gICAgdm9pZCByZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRp
YWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKLSAgICB2b2lkIHJlY2VpdmVkQ2Fu
Y2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CisgICAgLy92b2lkIGRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYpOworICAgIC8vdm9pZCByZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmLCBjb25zdCBDcmVkZW50aWFsJik7CisgICAgLy92b2lkIHJlY2VpdmVkUmVx
dWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYpOworICAgIC8vdm9pZCByZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYpOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCi0gICAgdm9pZCBk
aWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYpOworICAgIC8vdm9pZCBkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25z
dCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKSB7IG1fcGxhdGZvcm1IYW5kbGUt
PmRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSk7IH0KICAgICBOU1VS
TENvbm5lY3Rpb24gKmNvbm5lY3Rpb24oKSBjb25zdDsKLSAgICBXZWJDb3JlUmVzb3VyY2VIYW5k
bGVBc0RlbGVnYXRlICpkZWxlZ2F0ZSgpOworICAgIC8vV2ViQ29yZVJlc291cmNlSGFuZGxlQXNE
ZWxlZ2F0ZSAqZGVsZWdhdGUoKSB7IHJldHVybiBtX3BsYXRmb3JtSGFuZGxlLT5kZWxlZ2F0ZSgp
OyB9CiAgICAgdm9pZCByZWxlYXNlRGVsZWdhdGUoKTsKICAgICBpZCByZWxlYXNlUHJveHkoKTsK
IAotICAgIHZvaWQgc2NoZWR1bGUoU2NoZWR1bGVQYWlyKik7Ci0gICAgdm9pZCB1bnNjaGVkdWxl
KFNjaGVkdWxlUGFpciopOworICAgIHZvaWQgc2NoZWR1bGUoU2NoZWR1bGVQYWlyKiBwYWlyKTsK
KyAgICB2b2lkIHVuc2NoZWR1bGUoU2NoZWR1bGVQYWlyKiBwYWlyKTsKICNlbGlmIFVTRShDRk5F
VFdPUkspCiAgICAgc3RhdGljIENGUnVuTG9vcFJlZiBsb2FkZXJSdW5Mb29wKCk7CiAgICAgQ0ZV
UkxDb25uZWN0aW9uUmVmIGNvbm5lY3Rpb24oKSBjb25zdDsKQEAgLTE1MiwxMCArOTUsMTMgQEAg
cHVibGljOgogCiAgICAgYm9vbCBzaG91bGRDb250ZW50U25pZmYoKSBjb25zdDsKICAgICBzdGF0
aWMgYm9vbCBzaG91bGRDb250ZW50U25pZmZVUkwoY29uc3QgS1VSTCYpOwotCiAgICAgc3RhdGlj
IHZvaWQgZm9yY2VDb250ZW50U25pZmZpbmcoKTsKIAogI2lmIFVTRShXSU5JTkVUKQorICAgIC8v
IEZJWE1FOiBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlc2UgcmVhbGx5IG5lZWQgdG8gYmUgb24gdGhl
IHdyYXBwZXIgY2xhc3MsIHNvbWUgYXJlCisgICAgLy8gYWxtb3N0IGxpa2VseSBvbmx5IGNhbGxl
ZCBieSB0aGUgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZS9JbnRlcm5hbCBpbXBsIGFuZCBkbyBub3QK
KyAgICAvLyByZWFsbHkgbmVlZCB0byBiZSBvbiB0aGlzIHdyYXBwZXIuIERpdHRvIGZvciBvdGhl
ciBwbGF0Zm9ybSBzcGVjaWZpYyBtZXRob2RzCisgICAgLy8gb24gdGhpcyBjbGFzcy4KICAgICB2
b2lkIHNldEhhc1JlY2VpdmVkUmVzcG9uc2UoYm9vbCA9IHRydWUpOwogICAgIGJvb2wgaGFzUmVj
ZWl2ZWRSZXNwb25zZSgpIGNvbnN0OwogICAgIHZvaWQgZmlsZUxvYWRUaW1lcihUaW1lcjxSZXNv
dXJjZUhhbmRsZT4qKTsKQEAgLTE2NywxMSArMTEzLDExIEBAIHB1YmxpYzoKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oUVQpIHx8IFVTRShDVVJMKSB8fCBVU0UoU09VUCkKLSAgICBSZXNvdXJjZUhh
bmRsZUludGVybmFsKiBnZXRJbnRlcm5hbCgpIHsgcmV0dXJuIGQuZ2V0KCk7IH0KKyAgICBQbGF0
Zm9ybVJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGdldEludGVybmFsKCkgeyByZXR1cm4gbV9wbGF0
Zm9ybUhhbmRsZS0+ZC5nZXQoKTsgfQogI2VuZGlmCiAKICNpZiBVU0UoU09VUCkKLSAgICBzdGF0
aWMgU291cFNlc3Npb24qIGRlZmF1bHRTZXNzaW9uKCk7CisgICAgc3RhdGljIFNvdXBTZXNzaW9u
KiBkZWZhdWx0U2Vzc2lvbigpIHsgcmV0dXJuIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6OmRlZmF1
bHRTZXNzaW9uKCk7IH0KICNlbmRpZgogCiAgICAgLy8gVXNlZCB0byB3b3JrIGFyb3VuZCB0aGUg
ZmFjdCB0aGF0IHlvdSBkb24ndCBnZXQgYW55IG1vcmUgTlNVUkxDb25uZWN0aW9uIGNhbGxiYWNr
cyB1bnRpbCB5b3UgcmV0dXJuIGZyb20gdGhlIG9uZSB5b3UncmUgaW4uCkBAIC0xODgsMjEgKzEz
NCwxOSBAQCBwdWJsaWM6CiAgICAgICAKICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QoKSBjb25zdDsKIAotICAgIHZvaWQgZmlyZUZhaWx1cmUoVGltZXI8UmVzb3VyY2VIYW5kbGU+
Kik7Ci0KIHByaXZhdGU6Ci0jaWYgVVNFKFNPVVApCi0gICAgYm9vbCBzdGFydERhdGEoU3RyaW5n
IHVybFN0cmluZyk7Ci0gICAgYm9vbCBzdGFydEh0dHAoU3RyaW5nIHVybFN0cmluZyk7Ci0gICAg
Ym9vbCBzdGFydEdpbyhLVVJMIHVybCk7Ci0jZW5kaWYKKyAgICBib29sIHN0YXJ0KEZyYW1lKik7
CiAKLSAgICB2b2lkIHNjaGVkdWxlRmFpbHVyZShGYWlsdXJlVHlwZSk7CisgICAgYm9vbCBzdGFy
dFBsYXRmb3JtSGFuZGxlKEZyYW1lKik7CisgICAgdm9pZCByZWNyZWF0ZVBsYXRmb3JtSGFuZGxl
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBsYXRmb3JtUmVzb3VyY2VIYW5kbGVDbGllbnQqKTsK
IAotICAgIGJvb2wgc3RhcnQoRnJhbWUqKTsKKyAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VIYW5k
bGVJbnRlcmNlcHRvckhvc3Q7CisgICAgT3duUHRyPFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JI
b3N0PiBtX2ludGVyY2VwdG9ySG9zdDsKIAotICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZUhhbmRs
ZUludGVybmFsOwotICAgIE93blB0cjxSZXNvdXJjZUhhbmRsZUludGVybmFsPiBkOworICAgIGJv
b2wgbV9kZWZlcnNMb2FkaW5nOworICAgIGJvb2wgbV9zaG91bGRDb250ZW50U25pZmY7CisgICAg
Ym9vbCBtX21pZ2h0RG93bmxvYWRGcm9tSGFuZGxlOworICAgIFJlZlB0cjxQbGF0Zm9ybVJlc291
cmNlSGFuZGxlPiBtX3BsYXRmb3JtSGFuZGxlOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhv
c3QuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
SGFuZGxlSW50ZXJjZXB0b3JIb3N0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzODcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRv
ckhvc3QuaCIKKworI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiICAvLyBGSVhNRTogcmVtb3ZlIHdoZW4gJ2ZyYW1lJyBpcyBubyBsb25nZXIgYSBwYXJhbSB0
byBzdGFydAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBJbnRlcmNlcHRvckZhY3Rv
cnkqIGdfZmFjdG9yeTsKKworc3RhdGljIEludGVyY2VwdG9yRmFjdG9yeSogZmFjdG9yeSgpCit7
CisgICAgLy8gRklYTUU6IHRoaXMgaXMgcXVpY2sgYW5kIGRpcnR5IHRlc3QgY29kZSwgZmluZCBh
IHJlYWwgd2F5IHRvIHRlc3QgdGhpcworICAgIHJldHVybiBnX2ZhY3RvcnkgPyBnX2ZhY3Rvcnkg
OiBnZXRUZXN0SW50ZXJjZXB0b3JGYWN0b3J5KCk7Cit9CisKKy8vIHN0YXRpYwordm9pZCBSZXNv
dXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6c2V0SW50ZXJjZXB0b3JGYWN0b3J5KEludGVyY2Vw
dG9yRmFjdG9yeSogZmFjdG9yeSkKK3sKKyAgICBnX2ZhY3RvcnkgPSBmYWN0b3J5OworfQorCisv
LyBzdGF0aWMKK2Jvb2wgUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6Om1heWJlSW50ZXJj
ZXB0U3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENy
ZWRlbnRpYWxzIGNyZWRlbnRpYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQoreworICAgIHJldHVy
biBmYWN0b3J5KCkgPyBmYWN0b3J5KCktPm1heWJlTG9hZFN5bmNocm9ub3VzbHkocmVxdWVzdCwg
Y3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSkgOiBmYWxzZTsKK30KKworLy8gc3Rh
dGljCitib29sIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0OjptYXliZUZhbGxiYWNrU3lj
aHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlh
bHMgY3JlZGVudGlhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQoreworICAgIHJldHVybiBmYWN0b3J5
KCkgPyBmYWN0b3J5KCktPm1heWJlRmFsbGJhY2tTeWNocm9ub3VzbHkocmVxdWVzdCwgY3JlZGVu
dGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSkgOiBmYWxzZTsKK30KKworUmVzb3VyY2VIYW5k
bGVJbnRlcmNlcHRvckhvc3Q6OlJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0KFJlc291cmNl
SGFuZGxlKiBoYW5kbGUpCisgICAgOiBtX2hhbmRsZShoYW5kbGUpCisgICAgLCBtX2NsaWVudCgw
KQorICAgICwgbV9pbnRlcmNlcHRUeXBlKElOVEVSQ0VQVF9OT05FKQorICAgICwgbV9hZGRlZEV4
dHJhUmVmKGZhbHNlKQorICAgICwgbV93YXNDYW5jZWxsZWQoZmFsc2UpCisgICAgLCBtX3N0YXJ0
ZWRJbnRlcmNlcHRvcihmYWxzZSkKKyAgICAsIG1fc3RhcnRlZFBsYXRmb3JtSGFuZGxlKGZhbHNl
KQoreworICAgIEFTU0VSVChoYW5kbGUpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJj
ZXB0b3JIb3N0OjpjcmVhdGVJbnRlcmNlcHRvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QpCit7CisgICAgbV9pbnRlcmNlcHRvci5zZXQoZmFjdG9yeSgpID8gZmFjdG9yeSgpLT5jcmVh
dGVJbnRlcmNlcHRvcihyZXF1ZXN0LCB0aGlzKSA6IDApOworfQorCit2b2lkIFJlc291cmNlSGFu
ZGxlSW50ZXJjZXB0b3JIb3N0OjphZGp1c3RFeHRyYVJlZigpCit7CisgICAgLy8gV2Uga2VlcCBh
biBleHRyYSByZWZlcmVuY2Ugb24gdGhlIGhhbmRsZSBvbmNlIGEgcmVxdWVzdCBoYXMgYmVlbiBz
dGFydGVkLAorICAgIC8vIGFuZCBpcyBub3QgeWV0IGNvbXBsZXRlLCBhbmQgdGhlcmUgaXMgYSBj
bGllbnQgbGlzdGVuaW5nLgorICAgIGJvb2wgbmVlZEV4dHJhUmVmID0gIW1fd2FzQ2FuY2VsbGVk
ICYmIGlzU3RhcnRlZCgpICYmIGNsaWVudCgpOworCisgICAgaWYgKG5lZWRFeHRyYVJlZiAmJiAh
bV9hZGRlZEV4dHJhUmVmKSB7CisgICAgICAgIG1fYWRkZWRFeHRyYVJlZiA9IHRydWU7CisgICAg
ICAgIG1faGFuZGxlLT5yZWYoKTsKKyAgICB9IGVsc2UgaWYgKCFuZWVkRXh0cmFSZWYgJiYgbV9h
ZGRlZEV4dHJhUmVmKSB7CisgICAgICAgIG1fYWRkZWRFeHRyYVJlZiA9IGZhbHNlOworICAgICAg
ICBtX2hhbmRsZS0+ZGVyZWYoKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGVJbnRl
cmNlcHRvckhvc3Q6OnN0YXJ0KEZyYW1lKiBmcmFtZSkKK3sKKyAgICBBU1NFUlQoIW1fd2FzQ2Fu
Y2VsbGVkKTsKKyAgICBBU1NFUlQoIWlzU3RhcnRlZCgpKTsKKworICAgIG1fZnJhbWUgPSBmcmFt
ZTsgIC8vIHNvIHdlIGNhbiByZXN0YXJ0IHRoZSBwbGF0Zm9ybSBoYW5kbGUgbGF0ZXIgaWYgbmVl
ZGVkIGxhdGVyCisKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IHByb3RlY3QobV9oYW5kbGUp
OworCisgICAgaWYgKG1faW50ZXJjZXB0b3IgJiYgbV9pbnRlcmNlcHRvci0+bWF5YmVJbnRlcmNl
cHRSZXF1ZXN0KG1faGFuZGxlLT5yZXF1ZXN0KCkpKSB7CisgICAgICAgIHN0YXJ0SW50ZXJjZXB0
b3IoSU5URVJDRVBUX1JFUVVFU1QsIG1faGFuZGxlLT5yZXF1ZXN0KCkpOworICAgICAgICBhZGp1
c3RFeHRyYVJlZigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtX3N0YXJ0
ZWRQbGF0Zm9ybUhhbmRsZSA9IHRydWU7CisgICAgaWYgKG1faGFuZGxlLT5zdGFydFBsYXRmb3Jt
SGFuZGxlKGZyYW1lKSkgeworICAgICAgICBhZGp1c3RFeHRyYVJlZigpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtX3N0YXJ0ZWRQbGF0Zm9ybUhhbmRsZSA9IGZhbHNlOwor
ICAgIEFTU0VSVCghbV9zdGFydGVkSW50ZXJjZXB0b3IpOworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6c3RhcnRJbnRlcmNlcHRvcihJ
bnRlcmNlcHRUeXBlIGludGVyY2VwdFR5cGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCkKK3sKKyAgICBBU1NFUlQobV9pbnRlcmNlcHRvcik7CisgICAgQVNTRVJUKGludGVyY2VwdFR5
cGUgIT0gSU5URVJDRVBUX05PTkUpOworICAgIEFTU0VSVCghbV9zdGFydGVkSW50ZXJjZXB0b3Ip
OworCisgICAgaWYgKG1fc3RhcnRlZFBsYXRmb3JtSGFuZGxlKSB7CisgICAgICAgIC8vIFRoZSBp
bnRlcmNlcHRvciBpcyB0YWtpbmcgb3Zlciwgd2UgaGF2ZSB0byBnZXQgcmlkIG9mIHRoZSBjdXJy
ZW50CisgICAgICAgIC8vIHBsYXRmb3JtIGhhbmRsZSBpZiBpdHMgYWN0dWFsbHkgZG9pbmcgYW55
dGhpbmcgYW5kIHJlY3JlYXRlIGEgbmV3CisgICAgICAgIC8vIGlkbGUgaW5zdGFuY2UuCisgICAg
ICAgIG1fc3RhcnRlZFBsYXRmb3JtSGFuZGxlID0gZmFsc2U7CisgICAgICAgIG1faGFuZGxlLT5y
ZWNyZWF0ZVBsYXRmb3JtSGFuZGxlKHJlcXVlc3QsIG1fY2xpZW50ID8gdGhpcyA6IDApOworICAg
IH0KKworICAgIG1faW50ZXJjZXB0VHlwZSA9IGludGVyY2VwdFR5cGU7CisgICAgbV9yZXNwb25z
ZURhdGEgPSAwOworICAgIG1fc3RhcnRlZEludGVyY2VwdG9yID0gdHJ1ZTsKKyAgICBtX2ludGVy
Y2VwdG9yLT5zdGFydCgpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0
OjpjYW5jZWwoKQoreworICAgIGlmICghbV93YXNDYW5jZWxsZWQpIHsKKyAgICAgICAgUmVmUHRy
PFJlc291cmNlSGFuZGxlPiBwcm90ZWN0KG1faGFuZGxlKTsKKyAgICAgICAgbV93YXNDYW5jZWxs
ZWQgPSB0cnVlOworICAgICAgICBpZiAobV9zdGFydGVkSW50ZXJjZXB0b3IpIHsKKyAgICAgICAg
ICAgIG1fc3RhcnRlZEludGVyY2VwdG9yID0gZmFsc2U7CisgICAgICAgICAgICBtX2ludGVyY2Vw
dG9yLT5jYW5jZWwoKTsKKyAgICAgICAgfSBlbHNlIGlmIChtX3N0YXJ0ZWRQbGF0Zm9ybUhhbmRs
ZSkgeworICAgICAgICAgICAgbV9zdGFydGVkUGxhdGZvcm1IYW5kbGUgPSBmYWxzZTsKKyAgICAg
ICAgICAgIG1faGFuZGxlLT5tX3BsYXRmb3JtSGFuZGxlLT5jYW5jZWwoKTsKKyAgICAgICAgfQor
ICAgICAgICBhZGp1c3RFeHRyYVJlZigpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUhhbmRs
ZUludGVyY2VwdG9ySG9zdDo6c2V0Q2xpZW50KFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQp
Cit7CisgICAgQVNTRVJUKG1faGFuZGxlKTsKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IHBy
b3RlY3QobV9oYW5kbGUpOworICAgIG1fY2xpZW50ID0gY2xpZW50OworICAgIG1faGFuZGxlLT5t
X3BsYXRmb3JtSGFuZGxlLT5zZXRDbGllbnQoY2xpZW50ID8gdGhpcyA6IDApOworICAgIGFkanVz
dEV4dHJhUmVmKCk7Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBSZXNvdXJjZUhhbmRs
ZUludGVyY2VwdG9ySG9zdDo6YnVmZmVyZWREYXRhKCkKK3sKKyAgICBpZiAoaXNJbnRlcmNlcHRp
bmcoKSkKKyAgICAgICAgcmV0dXJuIG1fcmVzcG9uc2VEYXRhOworICAgIGVsc2UKKyAgICAgICAg
cmV0dXJuIG1faGFuZGxlLT5tX3BsYXRmb3JtSGFuZGxlLT5idWZmZXJlZERhdGEoKTsKK30KKwor
dm9pZCBSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6ZGVsaXZlclJlc3BvbnNlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0
YSkKK3sKKyAgICBBU1NFUlQoaXNJbnRlcmNlcHRpbmcoKSAmJiBtX3N0YXJ0ZWRJbnRlcmNlcHRv
cik7CisgICAgQVNTRVJUKGRhdGEpOworCisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBwcm90
ZWN0KG1faGFuZGxlKTsKKyAgICBtX3Jlc3BvbnNlRGF0YSA9IGRhdGE7CisgICAgaWYgKG1fY2xp
ZW50ICYmICFtX3dhc0NhbmNlbGxlZCkKKyAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVSZXNw
b25zZShtX2hhbmRsZSwgcmVzcG9uc2UpOworICAgIGlmIChtX2NsaWVudCAmJiAhbV93YXNDYW5j
ZWxsZWQpCisgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShtX2hhbmRsZSwgbV9yZXNw
b25zZURhdGEtPmRhdGEoKSwgbV9yZXNwb25zZURhdGEtPnNpemUoKSwgbV9yZXNwb25zZURhdGEt
PnNpemUoKSk7CisgICAgaWYgKG1fY2xpZW50ICYmICFtX3dhc0NhbmNlbGxlZCkKKyAgICAgICAg
bV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcobV9oYW5kbGUpOworCisgICAgbV9zdGFydGVkSW50
ZXJjZXB0b3IgPSBmYWxzZTsKKyAgICBhZGp1c3RFeHRyYVJlZigpOworfQorCit2b2lkIFJlc291
cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0OjpkZWxpdmVyRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJv
ciYgZXJyb3IpCit7CisgICAgQVNTRVJUKGlzSW50ZXJjZXB0aW5nKCkgJiYgbV9zdGFydGVkSW50
ZXJjZXB0b3IpOworICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gcHJvdGVjdChtX2hhbmRsZSk7
CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChtX2hhbmRsZSwg
ZXJyb3IpOworICAgIG1fc3RhcnRlZEludGVyY2VwdG9yID0gZmFsc2U7CisgICAgYWRqdXN0RXh0
cmFSZWYoKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6cmVzdGFy
dFJlcXVlc3RXaXRob3V0SW50ZXJjZXB0aW9uKCkKK3sKKyAgICBBU1NFUlQobV9pbnRlcmNlcHRU
eXBlID09IElOVEVSQ0VQVF9SRVFVRVNUKTsKKyAgICBBU1NFUlQobV9zdGFydGVkSW50ZXJjZXB0
b3IpOworCisgICAgbV9pbnRlcmNlcHRUeXBlID0gSU5URVJDRVBUX05PTkU7CisgICAgbV9zdGFy
dGVkSW50ZXJjZXB0b3IgPSBmYWxzZTsKKworICAgIG1fc3RhcnRlZFBsYXRmb3JtSGFuZGxlID0g
dHJ1ZTsKKyAgICBpZiAobV9oYW5kbGUtPnN0YXJ0UGxhdGZvcm1IYW5kbGUobV9mcmFtZS5nZXQo
KSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3RhcnRlZFBsYXRmb3JtSGFuZGxlID0gZmFs
c2U7CisgICAgbV9pbnRlcmNlcHRUeXBlID0gSU5URVJDRVBUX1JFUVVFU1Q7CisgICAgbV9zdGFy
dGVkSW50ZXJjZXB0b3IgPSB0cnVlOworICAgIFJlc291cmNlRXJyb3IgZXJyb3IoImludGVyY2Vw
dG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDUwMCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1faGFuZGxlLT5yZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICBTdHJpbmcoKSAvKmxvY2FsaXplZCBkZXNjcmlwdGlvbiovKTsKKyAgICBkZWxpdmVy
RXJyb3IoZXJyb3IpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0Ojp3
aWxsU2VuZFJlcXVlc3QoUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2Up
Cit7CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZS0+bV9wbGF0
Zm9ybUhhbmRsZSk7IAorICAgIEFTU0VSVChtX2NsaWVudCk7CisKKyAgICBSZWZQdHI8UmVzb3Vy
Y2VIYW5kbGU+IHByb3RlY3QobV9oYW5kbGUpOworCisgICAgLy8gR2l2ZSB0aGUgaW50ZXJjZXB0
b3IgYSBjaGFuY2UgdG8gZWF0IHRoaXMgcmVkaXJlY3RSZXNwb25zZSBhbmQgcHJvdmlkZQorICAg
IC8vIGEgcmVzcG9uc2Ugb2YgaXRzIG93bi4gVGhlIHVzZSBjYXNlIGhlcmUgaXMgYXBwY2FjaGUg
ZmFsbGJhY2sgcmVzb3VyY2VzLgorICAgIGNvbnN0IEtVUkwmIGxvY2F0aW9uID0gcmVxdWVzdC51
cmwoKTsKKyAgICBpZiAobV9pbnRlcmNlcHRvciAmJiBtX2ludGVyY2VwdG9yLT5tYXliZUludGVy
Y2VwdFJlZGlyZWN0KGxvY2F0aW9uKSkgeworICAgICAgICBSZXNvdXJjZVJlcXVlc3QgY29weSA9
IG1faGFuZGxlLT5yZXF1ZXN0KCk7CisgICAgICAgIHN0YXJ0SW50ZXJjZXB0b3IoSU5URVJDRVBU
X1JFRElSRUNULCBjb3B5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY2xpZW50
LT53aWxsU2VuZFJlcXVlc3QobV9oYW5kbGUsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwor
CisgICAgLy8gQWxzbyBnaXZlIHRoZSBpbnRlcmNlcHRvciBhIGNoYW5jZSB0byBpbnRlcmNlcHQg
dGhlIHJlcXVlc3QgZm9yIHRoZSBuZXcgbG9jYXRpb24uCisgICAgLy8gVGhpcyB1c2UgY2FzZSBo
ZXJlIGlzIGNhdGNoaW5nIHJlZGlyZWN0cyB0byBzb21ldGhpbmcgaW4gYW4gYXBwY2FjaGUuCisg
ICAgaWYgKCFtX3dhc0NhbmNlbGxlZCAmJiBtX2ludGVyY2VwdG9yICYmIG1faW50ZXJjZXB0b3It
Pm1heWJlSW50ZXJjZXB0UmVxdWVzdChyZXF1ZXN0KSkKKyAgICAgICAgc3RhcnRJbnRlcmNlcHRv
cihJTlRFUkNFUFRfUkVRVUVTVCwgcmVxdWVzdCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVJ
bnRlcmNlcHRvckhvc3Q6OmRpZFJlY2VpdmVSZXNwb25zZShQbGF0Zm9ybVJlc291cmNlSGFuZGxl
KiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIEFTU0VS
VF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUtPm1fcGxhdGZvcm1IYW5kbGUpOyAK
KyAgICBBU1NFUlQobV9jbGllbnQpOworCisgICAgLy8gR2l2ZSB0aGUgaW50ZXJjZXB0b3IgYSBj
aGFuZ2UgdG8gaGlqYWNrIHRoZSBmYWlsdXJlLiBUaGUgdXNlIGNhc2UgaXMKKyAgICAvLyBhcHBj
YWNoZSBmYWxsYmFjayByZXNvdXJjZXMuCisgICAgaWYgKG1faW50ZXJjZXB0b3IgJiYgbV9pbnRl
cmNlcHRvci0+bWF5YmVJbnRlcmNlcHRSZXNwb25zZShyZXNwb25zZSkpIHsKKyAgICAgICAgUmVz
b3VyY2VSZXF1ZXN0IGNvcHkgPSBtX2hhbmRsZS0+cmVxdWVzdCgpOworICAgICAgICBzdGFydElu
dGVyY2VwdG9yKElOVEVSQ0VQVF9SRVNQT05TRSwgY29weSk7CisgICAgfSBlbHNlCisgICAgICAg
IG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UobV9oYW5kbGUsIHJlc3BvbnNlKTsKK30KKwor
dm9pZCBSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6ZGlkRmluaXNoTG9hZGluZyhQbGF0
Zm9ybVJlc291cmNlSGFuZGxlKiBoYW5kbGUpCit7CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUs
IGhhbmRsZSA9PSBtX2hhbmRsZS0+bV9wbGF0Zm9ybUhhbmRsZSk7CisgICAgQVNTRVJUKG1fY2xp
ZW50KTsKKworICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gcHJvdGVjdChtX2hhbmRsZSk7Cisg
ICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcobV9oYW5kbGUpOworICAgIG1fc3RhcnRlZFBs
YXRmb3JtSGFuZGxlID0gZmFsc2U7CisgICAgYWRqdXN0RXh0cmFSZWYoKTsKK30KKwordm9pZCBS
ZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6ZGlkRmFpbChQbGF0Zm9ybVJlc291cmNlSGFu
ZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIEFTU0VSVF9V
TlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUtPm1fcGxhdGZvcm1IYW5kbGUpOyAKKyAg
ICBBU1NFUlQobV9jbGllbnQpOworCisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBwcm90ZWN0
KG1faGFuZGxlKTsKKworICAgIC8vIEdpdmUgdGhlIGludGVyY2VwdG9yIGEgY2hhbmdlIHRvIGhp
amFjayB0aGUgZmFpbHVyZS4gVGhlIHVzZSBjYXNlIGlzCisgICAgLy8gYXBwY2FjaGUgZmFsbGJh
Y2sgcmVzb3VyY2VzLgorICAgIGlmIChtX2ludGVyY2VwdG9yICYmIG1faW50ZXJjZXB0b3ItPm1h
eWJlSW50ZXJjZXB0RXJyb3IoZXJyb3IpKSB7CisgICAgICAgIFJlc291cmNlUmVxdWVzdCBjb3B5
ID0gbV9oYW5kbGUtPnJlcXVlc3QoKTsKKyAgICAgICAgc3RhcnRJbnRlcmNlcHRvcihJTlRFUkNF
UFRfRVJST1IsIGNvcHkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAg
ICAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKG1faGFuZGxlLCBlcnJvcik7CisgICAgICAgIG1f
c3RhcnRlZFBsYXRmb3JtSGFuZGxlID0gZmFsc2U7CisgICAgICAgIGFkanVzdEV4dHJhUmVmKCk7
CisgICAgfQorfQorCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0OjpkaWRTZW5k
RGF0YShQbGF0Zm9ybVJlc291cmNlSGFuZGxlKiBoYW5kbGUsIHVuc2lnbmVkIGxvbmcgbG9uZyBi
eXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCit7CisgICAg
QVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZS0+bV9wbGF0Zm9ybUhhbmRs
ZSk7IAorICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPmRpZFNlbmREYXRhKG1f
aGFuZGxlLCBieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6OmRpZFJlY2VpdmVEYXRhKFBsYXRmb3JtUmVzb3VyY2VI
YW5kbGUqIGhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgaW50IGxlbmd0aFJl
Y2VpdmVkKQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUt
Pm1fcGxhdGZvcm1IYW5kbGUpOyAKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fY2xpZW50
LT5kaWRSZWNlaXZlRGF0YShtX2hhbmRsZSwgZGF0YSwgbGVuZ3RoLCBsZW5ndGhSZWNlaXZlZCk7
Cit9CisKKworCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0Ojp3YXNCbG9ja2Vk
KFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGhh
bmRsZSwgaGFuZGxlID09IG1faGFuZGxlLT5tX3BsYXRmb3JtSGFuZGxlKTsgCisgICAgQVNTRVJU
KG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+d2FzQmxvY2tlZChtX2hhbmRsZSk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6OmNhbm5vdFNob3dVUkwoUGxhdGZvcm1S
ZXNvdXJjZUhhbmRsZSogaGFuZGxlKQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5k
bGUgPT0gbV9oYW5kbGUtPm1fcGxhdGZvcm1IYW5kbGUpOyAKKyAgICBBU1NFUlQobV9jbGllbnQp
OworICAgIG1fY2xpZW50LT5jYW5ub3RTaG93VVJMKG1faGFuZGxlKTsKK30KKwordm9pZCBSZXNv
dXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6d2lsbENhY2hlUmVzcG9uc2UoUGxhdGZvcm1SZXNv
dXJjZUhhbmRsZSogaGFuZGxlLCBDYWNoZVN0b3JhZ2VQb2xpY3kmIHBvbGljeSkKK3sKKyAgICBB
U1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlLT5tX3BsYXRmb3JtSGFuZGxl
KTsgCisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+d2lsbENhY2hlUmVzcG9u
c2UobV9oYW5kbGUsIHBvbGljeSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRv
ckhvc3Q6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxl
LT5tX3BsYXRmb3JtSGFuZGxlKTsgCisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICByZXR1cm4g
bV9jbGllbnQtPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKG1faGFuZGxlKTsKK30KKwordm9p
ZCBSZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwg
aGFuZGxlID09IG1faGFuZGxlLT5tX3BsYXRmb3JtSGFuZGxlKTsgCisgICAgQVNTRVJUKG1fY2xp
ZW50KTsKKyAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKG1f
aGFuZGxlLCBjaGFsbGVuZ2UpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JI
b3N0OjpkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQbGF0Zm9ybVJlc291cmNlSGFu
ZGxlKiBoYW5kbGUsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCit7
CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZS0+bV9wbGF0Zm9y
bUhhbmRsZSk7IAorICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPmRpZENhbmNl
bEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKG1faGFuZGxlLCBjaGFsbGVuZ2UpOworfQorCit2b2lk
IFJlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0OjpyZWNlaXZlZENhbmNlbGxhdGlvbihQbGF0
Zm9ybVJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JiBjaGFsbGVuZ2UpCit7CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hh
bmRsZS0+bV9wbGF0Zm9ybUhhbmRsZSk7IAorICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9j
bGllbnQtPnJlY2VpdmVkQ2FuY2VsbGF0aW9uKG1faGFuZGxlLCBjaGFsbGVuZ2UpOworfQorCisj
aWYgUExBVEZPUk0oTUFDKSAgICAgICAgCitOU0NhY2hlZFVSTFJlc3BvbnNlKiBSZXNvdXJjZUhh
bmRsZUludGVyY2VwdG9ySG9zdDo6d2lsbENhY2hlUmVzcG9uc2UoUGxhdGZvcm1SZXNvdXJjZUhh
bmRsZSogaGFuZGxlLCBOU0NhY2hlZFVSTFJlc3BvbnNlKiByZXNwb25zZSkKK3sKKyAgICBBU1NF
UlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlLT5tX3BsYXRmb3JtSGFuZGxlKTsg
CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICByZXR1cm4gbV9jbGllbnQtPndpbGxDYWNoZVJl
c3BvbnNlKG1faGFuZGxlLCByZXNwb25zZSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVJbnRl
cmNlcHRvckhvc3Q6OndpbGxTdG9wQnVmZmVyaW5nRGF0YShQbGF0Zm9ybVJlc291cmNlSGFuZGxl
KiBoYW5kbGUsIGNvbnN0IGNoYXIqZGF0YSwgaW50IGxlbikgCit7CisgICAgQVNTRVJUX1VOVVNF
RChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZS0+bV9wbGF0Zm9ybUhhbmRsZSk7IAorICAgIEFT
U0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPndpbGxTdG9wQnVmZmVyaW5nRGF0YShtX2hh
bmRsZSwgZGF0YSwgbGVuKTsKK30KKyNlbmRpZgorCisjaWYgVVNFKENGTkVUV09SSykKK2Jvb2wg
UmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3Q6OnNob3VsZENhY2hlUmVzcG9uc2UoUGxhdGZv
cm1SZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHJlc3BvbnNl
KQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUtPm1fcGxh
dGZvcm1IYW5kbGUpOyAKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIHJldHVybiBtX2NsaWVu
dC0+c2hvdWxkQ2FjaGVSZXNwb25zZShtX2hhbmRsZSwgcmVzcG9uc2UpOworfQorI2VuZGlmCisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdC5jcHAKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpOYW1lOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3QuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVy
Y2VwdG9ySG9zdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVz
b3VyY2VIYW5kbGVJbnRlcmNlcHRvckhvc3RfaAorI2RlZmluZSBSZXNvdXJjZUhhbmRsZUludGVy
Y2VwdG9ySG9zdF9oCisKKyNpbmNsdWRlICJJbnRlcmNlcHRvci5oIgorI2luY2x1ZGUgIlJlc291
cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1SZXNvdXJjZUhhbmRsZUNsaWVudC5oIgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
bnRlcmNlcHRvcjsKK2NsYXNzIEludGVyY2VwdG9yQ2xpZW50OworY2xhc3MgSW50ZXJjZXB0b3JG
YWN0b3J5OworCisvLyBBIGhlbHBlciBjbGFzcyB1c2VkIGJ5IFJlc291cmNlSGFuZGxlIHRvIG1l
ZGlhdGUgYmV0d2VlbiBhbiBpbnRlcm5hbCByZXNvdXJjZQorLy8gaGFuZGxlLCBhbiBpbnRlcmNl
cHRvciwgYW5kIHRoZSByZXNvdXJjZSBoYW5kbGUgY2xpZW50LiBUaGlzIGNsYXNzIGlzIHNldCBh
cworLy8gdGhlIGNsaWVudCBvZiB0aGUgaW50ZXJuYWwgaGFuZGxlLiBBcyBjYWxsYmFja3Mgb2Nj
dXIsIHRoZSBob3N0IGFsbG93cyBhbgorLy8gaW50ZXJjZXB0b3IgdG8gaW50ZXJ2ZW5lIGJ5IGNh
bGxpbmcgdGhlIHZhcmlvcyBtYXliZUludGVyY2VwdCBtZXRob2RzLgorLy8gU2VlIFJlc291cmNl
SGFuZGxlIGZvciBkZXRhaWxzIG9mIGhvdyB0aGlzIGNsYXNzIGlzIHVzZWQuCitjbGFzcyBSZXNv
dXJjZUhhbmRsZUludGVyY2VwdG9ySG9zdCA6IHByb3RlY3RlZCBJbnRlcmNlcHRvckNsaWVudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIFBsYXRmb3Jt
UmVzb3VyY2VIYW5kbGVDbGllbnQgeworcHVibGljOgorICAgIC8vIFJlc291cmNlSGFuZGxlIG9u
bHkgc3VwcG9ydHMgYSBzaW5nbGUgaW50ZXJjZXB0b3IgZmFjdG9yeS4KKyAgICBzdGF0aWMgdm9p
ZCBzZXRJbnRlcmNlcHRvckZhY3RvcnkoSW50ZXJjZXB0b3JGYWN0b3J5KiBmYWN0b3J5KTsKKwor
cHJpdmF0ZToKKyAgICAvLyBUaGlzIGNsYXNzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBv
ZiBSZXNvdXJjZUhhbmRsZQorICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZUhhbmRsZTsKKworICAg
IC8vIEZJWE1FOiBTeW5jaHJvbm91cyBpbnRlcmNlcHRpb24gaGFzIG5vIG9wcG9ydHVuaXR5IHRv
IGludGVyY2VwdCBpbnRlcm1pZGFpcnkgcmVkaXJlY3RzCisgICAgc3RhdGljIGJvb2wgbWF5YmVJ
bnRlcmNlcHRTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRl
bnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYg
ZGF0YSk7CisgICAgc3RhdGljIGJvb2wgbWF5YmVGYWxsYmFja1N5Y2hyb25vdXNseShjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291
cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworCisgICAgZW51bSBJbnRlcmNlcHRU
eXBlIHsKKyAgICAgICAgSU5URVJDRVBUX05PTkUsCisgICAgICAgIElOVEVSQ0VQVF9SRVFVRVNU
LAorICAgICAgICBJTlRFUkNFUFRfUkVESVJFQ1QsCisgICAgICAgIElOVEVSQ0VQVF9SRVNQT05T
RSwKKyAgICAgICAgSU5URVJDRVBUX0VSUk9SCisgICAgfTsKKworICAgIFJlc291cmNlSGFuZGxl
SW50ZXJjZXB0b3JIb3N0KFJlc291cmNlSGFuZGxlKiBoYW5kbGUpOworCisgICAgLy8gTWV0aG9k
cyBjYWxsZWQgYnkgdGhlIFJlc291cmNlSGFuZGxlIGRpcmVjdGx5CisgICAgdm9pZCBjcmVhdGVJ
bnRlcmNlcHRvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOworICAgIFJlc291cmNl
SGFuZGxlQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQorICAgIHZv
aWQgc2V0Q2xpZW50KFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQpOworICAgIGJvb2wgc3Rh
cnQoRnJhbWUqKTsKKyAgICB2b2lkIGNhbmNlbCgpOworICAgIFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBidWZmZXJlZERhdGEoKTsKKworICAgIC8vIEhlbHBlcnMgdXNlZCBpbnRlcm5hbGx5IGJ5
IHRoaXMgY2xhc3MsIHNob3VsZCBub3QgYmUgY2FsbGVkIGJ5IFJlc291cmNlSGFuZGxlCisgICAg
dm9pZCBzdGFydEludGVyY2VwdG9yKEludGVyY2VwdFR5cGUgaW50ZXJjZXB0VHlwZSwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgYm9vbCBpc0ludGVyY2VwdGluZygpIHsgcmV0dXJuIG1f
aW50ZXJjZXB0VHlwZSAhPSBJTlRFUkNFUFRfTk9ORTsgfQorICAgIGJvb2wgaXNTdGFydGVkKCkg
eyByZXR1cm4gbV9zdGFydGVkSW50ZXJjZXB0b3IgfHwgbV9zdGFydGVkUGxhdGZvcm1IYW5kbGU7
IH0KKyAgICB2b2lkIGFkanVzdEV4dHJhUmVmKCk7CisKKyAgICAvLyBJbnRlcmNlcHRvckNsaWVu
dCBpbXBsLCBjYWxsZWQgYnkgdGhlIGludGVyY2VwdG9yIGJlaW5nIGhvc3RlZC4KKyAgICB2aXJ0
dWFsIHZvaWQgZGVsaXZlclJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
LCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSk7CisgICAgdmlydHVhbCB2b2lkIGRlbGl2
ZXJFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcik7CisgICAgdmlydHVhbCB2b2lkIHJl
c3RhcnRSZXF1ZXN0V2l0aG91dEludGVyY2VwdGlvbigpOworCisgICAgLy8gUGxhdGZvcm1SZXNv
dXJjZUhhbmRsZUNsaWVudCBpbXBsCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIGJ5
IHRoZSBpbnRlcm5hbCByZXNvdXJjZSBoYW5kbGUuCisgICAgLy8gVGhpcyBjbGFzcyBnZW5lcmFs
bHkgcGFzc2VzIG1ldGhvZCBjYWxscyB0aHJ1IHRvIHRoZSByZWFsIGNsaWVudCwKKyAgICAvLyB3
aXRoIGEgY291cGxlIG9mIGV4Y2VwdGlvbnMuCisgICAgLy8gMSkgV2hlbiBhIHJlZGlyZWN0IHJl
c3BvbnNlIGlzIHJlY2VpdmVkLCBwcmlvciB0byBjYWxsaW5nIHRocnUgdG8gdGhlIHJlYWwKKyAg
ICAvLyBjbGllbnQsIHRoZSBtYXliZUludGVyY2VwdFJlZGlyZWN0IG1ldGhvZCBpcyBjYWxsZWQg
dG8gYWxsb3cgaGlqYWNraW5nCisgICAgLy8gYXQgdGhhdCBwb2ludC4KKyAgICAvLyAyKSBXaGVu
IHRoZSBmaW5hbCByZXBzb25zZSBpcyByZWNpZXZlZCwgcHJpb3IgdG8gY2FsbGluZyB0aHJ1IHRv
IHRoZSByZWFsCisgICAgLy8gY2xpZW50LCB0aGUgbWF5YmVJbnRlcmNlcHRSZXNvbnNlIG1ldGhv
ZCBpcyBjYWxsZWQgdG8gYWxsb3cgaGlqYWNraW5nCisgICAgLy8gYXQgdGhhdCBwb2ludC4KKyAg
ICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXEsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGly
ZWN0UmVzcG9uc2UpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUGxhdGZv
cm1SZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkU2VuZERhdGEoUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSosIHVuc2lnbmVkIGxvbmcg
bG9uZyAvKmJ5dGVzU2VudCovLCB1bnNpZ25lZCBsb25nIGxvbmcgLyp0b3RhbEJ5dGVzVG9CZVNl
bnQqLyk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFBsYXRmb3JtUmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhQbGF0Zm9ybVJlc291cmNlSGFuZGxlKik7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJl
c291cmNlRXJyb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2FzQmxvY2tlZChQbGF0Zm9ybVJlc291
cmNlSGFuZGxlKik7CisgICAgdmlydHVhbCB2b2lkIGNhbm5vdFNob3dVUkwoUGxhdGZvcm1SZXNv
dXJjZUhhbmRsZSopOworICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FjaGVSZXNwb25zZShQbGF0Zm9y
bVJlc291cmNlSGFuZGxlKiwgQ2FjaGVTdG9yYWdlUG9saWN5Jik7CisgICAgdmlydHVhbCBib29s
IHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFBsYXRmb3JtUmVzb3VyY2VIYW5kbGUqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBsYXRmb3Jt
UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOworICAgIHZp
cnR1YWwgdm9pZCBkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQbGF0Zm9ybVJlc291
cmNlSGFuZGxlKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRpb24oUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSosIGNvbnN0
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CisjaWYgUExBVEZPUk0oTUFDKSAgICAgICAgCisg
ICAgdmlydHVhbCBOU0NhY2hlZFVSTFJlc3BvbnNlKiB3aWxsQ2FjaGVSZXNwb25zZShQbGF0Zm9y
bVJlc291cmNlSGFuZGxlKiwgTlNDYWNoZWRVUkxSZXNwb25zZSogcmVzcG9uc2UpOworICAgIHZp
cnR1YWwgdm9pZCB3aWxsU3RvcEJ1ZmZlcmluZ0RhdGEoUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSos
IGNvbnN0IGNoYXIqLCBpbnQpOworI2VuZGlmCisjaWYgVVNFKENGTkVUV09SSykKKyAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkQ2FjaGVSZXNwb25zZShQbGF0Zm9ybVJlc291cmNlSGFuZGxlKiwgQ0ZD
YWNoZWRVUkxSZXNwb25zZVJlZiByZXNwb25zZSk7CisjZW5kaWYKKworICAgIFJlc291cmNlSGFu
ZGxlKiBtX2hhbmRsZTsKKyAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogbV9jbGllbnQ7CisgICAg
SW50ZXJjZXB0VHlwZSBtX2ludGVyY2VwdFR5cGU7CisgICAgYm9vbCBtX2FkZGVkRXh0cmFSZWY7
CisgICAgYm9vbCBtX3dhc0NhbmNlbGxlZDsKKyAgICBib29sIG1fc3RhcnRlZEludGVyY2VwdG9y
OworICAgIGJvb2wgbV9zdGFydGVkUGxhdGZvcm1IYW5kbGU7CisgICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gbV9yZXNwb25zZURhdGE7CisgICAgT3duUHRyPEludGVyY2VwdG9yPiBtX2ludGVyY2Vw
dG9yOworICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsKKyB9OyAKKworfQorCisjZW5kaWYgLy8g
UmVzb3VyY2VIYW5kbGVfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJjZXB0b3JIb3N0LmgKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBz
dm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgJKHJldmlzaW9uIDQ1MTk5KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwyMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBS
ZXNvdXJjZUhhbmRsZUludGVybmFsX2gKLSNkZWZpbmUgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbF9o
Ci0KLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCi0jaW5jbHVkZSAiVGlt
ZXIuaCIKLQotI2lmIFVTRShDRk5FVFdPUkspCi0jaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGVVJMQ29u
bmVjdGlvblByaXYuaD4KLSNlbmRpZgotCi0jaWYgVVNFKFdJTklORVQpCi0jaW5jbHVkZSA8d2lu
c29jazIuaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShDVVJMKQot
I2luY2x1ZGUgPGN1cmwvY3VybC5oPgotI2luY2x1ZGUgIkZvcm1EYXRhU3RyZWFtQ3VybC5oIgot
I2VuZGlmCi0KLSNpZiBVU0UoU09VUCkKLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLWNsYXNz
IEZyYW1lOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShRVCkKLWNsYXNzIFFXZWJGcmFtZTsKLWNs
YXNzIFFXZWJOZXR3b3JrSm9iOwotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgUU5ldHdvcmtS
ZXBseUhhbmRsZXI7Ci19Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLSNpZmRlZiBfX09C
SkNfXwotQGNsYXNzIE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7Ci1AY2xhc3MgTlNVUkxD
b25uZWN0aW9uOwotI2Vsc2UKLWNsYXNzIE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7Ci1j
bGFzcyBOU1VSTENvbm5lY3Rpb247Ci0jZW5kaWYKLSNlbmRpZgotCi0vLyBUaGUgYWxsb2NhdGlv
bnMgYW5kIHJlbGVhc2VzIGluIFJlc291cmNlSGFuZGxlSW50ZXJuYWwgYXJlCi0vLyBDb2NvYS1l
eGNlcHRpb24tZnJlZSAoZWl0aGVyIHNpbXBsZSBGb3VuZGF0aW9uIGNsYXNzZXMgb3IKLS8vIFdl
YkNvcmVSZXNvdXJjZUxvYWRlckltcCB3aGljaCBhdm9pZHMgZG9pbmcgd29yayBpbiBkZWFsbG9j
KS4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIFJlc291cmNlSGFuZGxlQ2xpZW50
OwotCi0gICAgY2xhc3MgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCA6IE5vbmNvcHlhYmxlIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwoUmVzb3VyY2VIYW5kbGUq
IGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNs
aWVudCogYywgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNob3VsZENvbnRlbnRTbmlmZiwgYm9v
bCBtaWdodERvd25sb2FkRnJvbUhhbmRsZSkKLSAgICAgICAgICAgIDogbV9jbGllbnQoYykKLSAg
ICAgICAgICAgICwgbV9yZXF1ZXN0KHJlcXVlc3QpCi0gICAgICAgICAgICAsIHN0YXR1cygwKQot
ICAgICAgICAgICAgLCBtX2RlZmVyc0xvYWRpbmcoZGVmZXJzTG9hZGluZykKLSAgICAgICAgICAg
ICwgbV9zaG91bGRDb250ZW50U25pZmYoc2hvdWxkQ29udGVudFNuaWZmKQotICAgICAgICAgICAg
LCBtX21pZ2h0RG93bmxvYWRGcm9tSGFuZGxlKG1pZ2h0RG93bmxvYWRGcm9tSGFuZGxlKQotI2lm
IFVTRShDRk5FVFdPUkspCi0gICAgICAgICAgICAsIG1fY29ubmVjdGlvbigwKQotI2VuZGlmCi0j
aWYgVVNFKFdJTklORVQpCi0gICAgICAgICAgICAsIG1fZmlsZUhhbmRsZShJTlZBTElEX0hBTkRM
RV9WQUxVRSkKLSAgICAgICAgICAgICwgbV9maWxlTG9hZFRpbWVyKGxvYWRlciwgJlJlc291cmNl
SGFuZGxlOjpmaWxlTG9hZFRpbWVyKQotICAgICAgICAgICAgLCBtX3Jlc291cmNlSGFuZGxlKDAp
Ci0gICAgICAgICAgICAsIG1fc2Vjb25kYXJ5SGFuZGxlKDApCi0gICAgICAgICAgICAsIG1fam9i
SWQoMCkKLSAgICAgICAgICAgICwgbV90aHJlYWRJZCgwKQotICAgICAgICAgICAgLCBtX3dyaXRp
bmcoZmFsc2UpCi0gICAgICAgICAgICAsIG1fZm9ybURhdGFTdHJpbmcoMCkKLSAgICAgICAgICAg
ICwgbV9mb3JtRGF0YUxlbmd0aCgwKQotICAgICAgICAgICAgLCBtX2J5dGVzUmVtYWluaW5nVG9X
cml0ZSgwKQotICAgICAgICAgICAgLCBtX2hhc1JlY2VpdmVkUmVzcG9uc2UoZmFsc2UpCi0gICAg
ICAgICAgICAsIG1fcmVzZW5kKGZhbHNlKQotI2VuZGlmCi0jaWYgVVNFKENVUkwpCi0gICAgICAg
ICAgICAsIG1faGFuZGxlKDApCi0gICAgICAgICAgICAsIG1fdXJsKDApCi0gICAgICAgICAgICAs
IG1fY3VzdG9tSGVhZGVycygwKQotICAgICAgICAgICAgLCBtX2NhbmNlbGxlZChmYWxzZSkKLSAg
ICAgICAgICAgICwgbV9mb3JtRGF0YVN0cmVhbShsb2FkZXIpCi0jZW5kaWYKLSNpZiBVU0UoU09V
UCkKLSAgICAgICAgICAgICwgbV9tc2coMCkKLSAgICAgICAgICAgICwgbV9jYW5jZWxsZWQoZmFs
c2UpCi0gICAgICAgICAgICAsIG1fcmVwb3J0ZWRIZWFkZXJzKGZhbHNlKQotICAgICAgICAgICAg
LCBtX2dmaWxlKDApCi0gICAgICAgICAgICAsIG1faW5wdXRTdHJlYW0oMCkKLSAgICAgICAgICAg
ICwgbV9jYW5jZWxsYWJsZSgwKQotICAgICAgICAgICAgLCBtX2J1ZmZlcigwKQotICAgICAgICAg
ICAgLCBtX2J1ZmZlclNpemUoMCkKLSAgICAgICAgICAgICwgbV90b3RhbCgwKQotICAgICAgICAg
ICAgLCBtX2lkbGVIYW5kbGVyKDApCi0gICAgICAgICAgICAsIG1fZnJhbWUoMCkKLSNlbmRpZgot
I2lmIFBMQVRGT1JNKFFUKQotICAgICAgICAgICAgLCBtX2pvYigwKQotICAgICAgICAgICAgLCBt
X2ZyYW1lKDApCi0jZW5kaWYKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgICAgICAsIG1fc3Rh
cnRXaGVuU2NoZWR1bGVkKGZhbHNlKQotICAgICAgICAgICAgLCBtX25lZWRzU2l0ZVNwZWNpZmlj
UXVpcmtzKGZhbHNlKQotICAgICAgICAgICAgLCBtX2N1cnJlbnRNYWNDaGFsbGVuZ2UobmlsKQot
I2VsaWYgVVNFKENGTkVUV09SSykKLSAgICAgICAgICAgICwgbV9jdXJyZW50Q0ZDaGFsbGVuZ2Uo
MCkKLSNlbmRpZgotICAgICAgICAgICAgLCBtX2ZhaWx1cmVUaW1lcihsb2FkZXIsICZSZXNvdXJj
ZUhhbmRsZTo6ZmlyZUZhaWx1cmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IEtVUkwm
IHVybCA9IG1fcmVxdWVzdC51cmwoKTsKLSAgICAgICAgICAgIG1fdXNlciA9IHVybC51c2VyKCk7
Ci0gICAgICAgICAgICBtX3Bhc3MgPSB1cmwucGFzcygpOwotICAgICAgICAgICAgbV9yZXF1ZXN0
LnJlbW92ZUNyZWRlbnRpYWxzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIH5SZXNv
dXJjZUhhbmRsZUludGVybmFsKCk7Ci0KLSAgICAgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNs
aWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9Ci0gICAgICAgIFJlc291cmNlSGFuZGxlQ2xpZW50
KiBtX2NsaWVudDsKLSAgICAgICAgCi0gICAgICAgIFJlc291cmNlUmVxdWVzdCBtX3JlcXVlc3Q7
Ci0KLSAgICAgICAgLy8gU3VnZ2VzdGVkIGNyZWRlbnRpYWxzIGZvciB0aGUgY3VycmVudCByZWRp
cmVjdGlvbiBzdGVwLgotICAgICAgICBTdHJpbmcgbV91c2VyOwotICAgICAgICBTdHJpbmcgbV9w
YXNzOwotICAgICAgICAKLSAgICAgICAgaW50IHN0YXR1czsKLQotICAgICAgICBib29sIG1fZGVm
ZXJzTG9hZGluZzsKLSAgICAgICAgYm9vbCBtX3Nob3VsZENvbnRlbnRTbmlmZjsKLSAgICAgICAg
Ym9vbCBtX21pZ2h0RG93bmxvYWRGcm9tSGFuZGxlOwotI2lmIFVTRShDRk5FVFdPUkspCi0gICAg
ICAgIFJldGFpblB0cjxDRlVSTENvbm5lY3Rpb25SZWY+IG1fY29ubmVjdGlvbjsKLSNlbGlmIFBM
QVRGT1JNKE1BQykKLSAgICAgICAgUmV0YWluUHRyPE5TVVJMQ29ubmVjdGlvbj4gbV9jb25uZWN0
aW9uOwotICAgICAgICBSZXRhaW5QdHI8V2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZT4g
bV9kZWxlZ2F0ZTsKLSAgICAgICAgUmV0YWluUHRyPGlkPiBtX3Byb3h5OwotICAgICAgICBib29s
IG1fc3RhcnRXaGVuU2NoZWR1bGVkOwotICAgICAgICBib29sIG1fbmVlZHNTaXRlU3BlY2lmaWNR
dWlya3M7Ci0jZW5kaWYKLSNpZiBVU0UoV0lOSU5FVCkKLSAgICAgICAgSEFORExFIG1fZmlsZUhh
bmRsZTsKLSAgICAgICAgVGltZXI8UmVzb3VyY2VIYW5kbGU+IG1fZmlsZUxvYWRUaW1lcjsKLSAg
ICAgICAgSElOVEVSTkVUIG1fcmVzb3VyY2VIYW5kbGU7Ci0gICAgICAgIEhJTlRFUk5FVCBtX3Nl
Y29uZGFyeUhhbmRsZTsKLSAgICAgICAgdW5zaWduZWQgbV9qb2JJZDsKLSAgICAgICAgRFdPUkQg
bV90aHJlYWRJZDsKLSAgICAgICAgYm9vbCBtX3dyaXRpbmc7Ci0gICAgICAgIGNoYXIqIG1fZm9y
bURhdGFTdHJpbmc7Ci0gICAgICAgIGludCBtX2Zvcm1EYXRhTGVuZ3RoOwotICAgICAgICBpbnQg
bV9ieXRlc1JlbWFpbmluZ1RvV3JpdGU7Ci0gICAgICAgIFN0cmluZyBtX3Bvc3RSZWZlcnJlcjsK
LSAgICAgICAgYm9vbCBtX2hhc1JlY2VpdmVkUmVzcG9uc2U7Ci0gICAgICAgIGJvb2wgbV9yZXNl
bmQ7Ci0jZW5kaWYKLSNpZiBVU0UoQ1VSTCkKLSAgICAgICAgQ1VSTCogbV9oYW5kbGU7Ci0gICAg
ICAgIGNoYXIqIG1fdXJsOwotICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCogbV9jdXN0b21IZWFk
ZXJzOwotICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7Ci0gICAgICAgIGJvb2wg
bV9jYW5jZWxsZWQ7Ci0KLSAgICAgICAgRm9ybURhdGFTdHJlYW0gbV9mb3JtRGF0YVN0cmVhbTsK
LSAgICAgICAgVmVjdG9yPGNoYXI+IG1fcG9zdEJ5dGVzOwotI2VuZGlmCi0jaWYgVVNFKFNPVVAp
Ci0gICAgICAgIFNvdXBNZXNzYWdlKiBtX21zZzsKLSAgICAgICAgUmVzb3VyY2VSZXNwb25zZSBt
X3Jlc3BvbnNlOwotICAgICAgICBib29sIG1fY2FuY2VsbGVkOwotICAgICAgICBib29sIG1fcmVw
b3J0ZWRIZWFkZXJzOwotICAgICAgICBHRmlsZSogbV9nZmlsZTsKLSAgICAgICAgR0lucHV0U3Ry
ZWFtKiBtX2lucHV0U3RyZWFtOwotICAgICAgICBHQ2FuY2VsbGFibGUqIG1fY2FuY2VsbGFibGU7
Ci0gICAgICAgIGNoYXIqIG1fYnVmZmVyOwotICAgICAgICBnc2l6ZSBtX2J1ZmZlclNpemUsIG1f
dG90YWw7Ci0gICAgICAgIGd1aW50IG1faWRsZUhhbmRsZXI7Ci0gICAgICAgIEZyYW1lKiBtX2Zy
YW1lOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oUVQpCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAw
Ci0gICAgICAgIFFXZWJOZXR3b3JrSm9iKiBtX2pvYjsKLSNlbHNlCi0gICAgICAgIFFOZXR3b3Jr
UmVwbHlIYW5kbGVyKiBtX2pvYjsKLSNlbmRpZgotICAgICAgICBRV2ViRnJhbWUqIG1fZnJhbWU7
Ci0jZW5kaWYKLQotICAgICAgICAvLyBGSVhNRTogVGhlIHBsYXRmb3JtIGNoYWxsZW5nZSBpcyBh
bG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBvbmUgc3RvcmVkIGluIG1fY3VycmVudFdlYkNoYWxsZW5n
ZSwgYnV0IGl0IGhhcyBhIGRpZmZlcmVudCBzZW5kZXIuIFdlIG9ubHkgbmVlZCB0byBzdG9yZSBh
IHNlbmRlciByZWZlcmVuY2UgaGVyZS4KLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgIE5TVVJM
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKm1fY3VycmVudE1hY0NoYWxsZW5nZTsKLSNlbmRpZgot
I2lmIFVTRShDRk5FVFdPUkspCi0gICAgICAgIENGVVJMQXV0aENoYWxsZW5nZVJlZiBtX2N1cnJl
bnRDRkNoYWxsZW5nZTsKLSNlbmRpZgotICAgICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBt
X2N1cnJlbnRXZWJDaGFsbGVuZ2U7Ci0KLSAgICAgICAgUmVzb3VyY2VIYW5kbGU6OkZhaWx1cmVU
eXBlIG1fZmFpbHVyZVR5cGU7Ci0gICAgICAgIFRpbWVyPFJlc291cmNlSGFuZGxlPiBtX2ZhaWx1
cmVUaW1lcjsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBS
ZXNvdXJjZUhhbmRsZUludGVybmFsX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9t
YWMvRm9ybURhdGFTdHJlYW1NYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLmgJKHJldmlzaW9uIDQ1MTk5KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiwxMiArMzYsMTIgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEZv
cm1EYXRhOwotICAgIGNsYXNzIFJlc291cmNlSGFuZGxlOworICAgIGNsYXNzIFBsYXRmb3JtUmVz
b3VyY2VIYW5kbGU7CiAKICAgICB2b2lkIHNldEhUVFBCb2R5KE5TTXV0YWJsZVVSTFJlcXVlc3Qg
KiwgUGFzc1JlZlB0cjxGb3JtRGF0YT4pOwogICAgIEZvcm1EYXRhKiBodHRwQm9keUZyb21TdHJl
YW0oTlNJbnB1dFN0cmVhbSAqKTsKIAotICAgIHZvaWQgYXNzb2NpYXRlU3RyZWFtV2l0aFJlc291
cmNlSGFuZGxlKE5TSW5wdXRTdHJlYW0gKiwgUmVzb3VyY2VIYW5kbGUqKTsKKyAgICB2b2lkIGFz
c29jaWF0ZVN0cmVhbVdpdGhSZXNvdXJjZUhhbmRsZShOU0lucHV0U3RyZWFtICosIFBsYXRmb3Jt
UmVzb3VyY2VIYW5kbGUqKTsKICAgICB2b2lkIGRpc2Fzc29jaWF0ZVN0cmVhbVdpdGhSZXNvdXJj
ZUhhbmRsZShOU0lucHV0U3RyZWFtICopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMu
bW0JKHJldmlzaW9uIDQ1MTk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3Jt
RGF0YVN0cmVhbU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsMTAgQEAKIAogI2lt
cG9ydCAiQ1N0cmluZy5oIgogI2ltcG9ydCAiRm9ybURhdGEuaCIKLSNpbXBvcnQgIlJlc291cmNl
SGFuZGxlLmgiCi0jaW1wb3J0ICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgorI2ltcG9ydCAiUGxh
dGZvcm1SZXNvdXJjZUhhbmRsZS5oIgorI2ltcG9ydCAiUGxhdGZvcm1SZXNvdXJjZWhhbmRsZUNs
aWVudC5oIgorLy8jaW1wb3J0ICJSZXNvdXJjZUhhbmRsZS5oIgorLy8jaW1wb3J0ICJSZXNvdXJj
ZUhhbmRsZUNsaWVudC5oIgogI2ltcG9ydCAiU2NoZWR1bGVQYWlyLmgiCiAjaW1wb3J0ICJXZWJD
b3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0IDxzeXMvc3RhdC5oPgpAQCAtNTQsMTQgKzU2
LDE0IEBAIHN0YXRpYyBTdHJlYW1Gb3JtRGF0YU1hcCYgZ2V0U3RyZWFtRm9ybUQKICAgICByZXR1
cm4gc3RyZWFtRm9ybURhdGFNYXA7CiB9CiAKLXR5cGVkZWYgSGFzaE1hcDxDRlJlYWRTdHJlYW1S
ZWYsIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gPiBTdHJlYW1SZXNvdXJjZUhhbmRsZU1hcDsKK3R5
cGVkZWYgSGFzaE1hcDxDRlJlYWRTdHJlYW1SZWYsIFJlZlB0cjxQbGF0Zm9ybVJlc291cmNlSGFu
ZGxlPiA+IFN0cmVhbVJlc291cmNlSGFuZGxlTWFwOwogc3RhdGljIFN0cmVhbVJlc291cmNlSGFu
ZGxlTWFwJiBnZXRTdHJlYW1SZXNvdXJjZUhhbmRsZU1hcCgpCiB7CiAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChTdHJlYW1SZXNvdXJjZUhhbmRsZU1hcCwgc3RyZWFtUmVzb3VyY2VIYW5kbGVNYXAs
ICgpKTsKICAgICByZXR1cm4gc3RyZWFtUmVzb3VyY2VIYW5kbGVNYXA7CiB9CiAKLXZvaWQgYXNz
b2NpYXRlU3RyZWFtV2l0aFJlc291cmNlSGFuZGxlKE5TSW5wdXRTdHJlYW0gKnN0cmVhbSwgUmVz
b3VyY2VIYW5kbGUqIHJlc291cmNlSGFuZGxlKQordm9pZCBhc3NvY2lhdGVTdHJlYW1XaXRoUmVz
b3VyY2VIYW5kbGUoTlNJbnB1dFN0cmVhbSAqc3RyZWFtLCBQbGF0Zm9ybVJlc291cmNlSGFuZGxl
KiByZXNvdXJjZUhhbmRsZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC0x
MDUsNyArMTA3LDcgQEAgc3RhdGljIHZvaWQgcGVyZm9ybURpZFNlbmREYXRhQ2FsbGJhY2sodgog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKICAgICBEaWRTZW5kRGF0YUNhbGxiYWNrRGF0
YSogZGF0YSA9IHN0YXRpY19jYXN0PERpZFNlbmREYXRhQ2FsbGJhY2tEYXRhKj4oY29udGV4dCk7
Ci0gICAgUmVzb3VyY2VIYW5kbGUqIHJlc291cmNlSGFuZGxlID0gZ2V0U3RyZWFtUmVzb3VyY2VI
YW5kbGVNYXAoKS5nZXQoZGF0YS0+c3RyZWFtKS5nZXQoKTsKKyAgICBQbGF0Zm9ybVJlc291cmNl
SGFuZGxlKiByZXNvdXJjZUhhbmRsZSA9IGdldFN0cmVhbVJlc291cmNlSGFuZGxlTWFwKCkuZ2V0
KGRhdGEtPnN0cmVhbSkuZ2V0KCk7CiAKICAgICBpZiAocmVzb3VyY2VIYW5kbGUgJiYgcmVzb3Vy
Y2VIYW5kbGUtPmNsaWVudCgpKQogICAgICAgICByZXNvdXJjZUhhbmRsZS0+Y2xpZW50KCktPmRp
ZFNlbmREYXRhKHJlc291cmNlSGFuZGxlLCBkYXRhLT5ieXRlc1NlbnQsIGRhdGEtPnN0cmVhbUxl
bmd0aCk7CkBAIC0yNDksNyArMjUxLDcgQEAgc3RhdGljIENGSW5kZXggZm9ybVJlYWQoQ0ZSZWFk
U3RyZWFtUmVmIAogICAgICAgICAgICAgKmF0RU9GID0gRkFMU0U7CiAgICAgICAgICAgICBmb3Jt
LT5ieXRlc1NlbnQgKz0gYnl0ZXNSZWFkOwogCi0gICAgICAgICAgICBpZiAoIVJlc291cmNlSGFu
ZGxlOjpkaWRTZW5kQm9keURhdGFEZWxlZ2F0ZUV4aXN0cygpKSB7CisgICAgICAgICAgICBpZiAo
IVBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6OmRpZFNlbmRCb2R5RGF0YURlbGVnYXRlRXhpc3RzKCkp
IHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogRmlndXJlIG91dCBob3cgdG8gb25seSBkbyB0
aGlzIHdoZW4gYSBSZXNvdXJjZUhhbmRsZUNsaWVudCBpcyBhdmFpbGFibGUuCiAgICAgICAgICAg
ICAgICAgRGlkU2VuZERhdGFDYWxsYmFja0RhdGEqIGRhdGEgPSBuZXcgRGlkU2VuZERhdGFDYWxs
YmFja0RhdGEoc3RyZWFtLCBmb3JtLT5ieXRlc1NlbnQsIGZvcm0tPnN0cmVhbUxlbmd0aCk7CiAg
ICAgICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChwZXJmb3JtRGlkU2VuZERhdGFDYWxsYmFj
aywgZGF0YSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFu
ZGxlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVz
b3VyY2VIYW5kbGVNYWMubW0JKHJldmlzaW9uIDQ1MTk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQsNyAr
MjQsNyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiUGxhdGZvcm1SZXNvdXJjZUhhbmRsZUludGVybmFsLmgi
CiAKICNpbXBvcnQgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCiAjaW1wb3J0ICJBdXRoZW50
aWNhdGlvbk1hYy5oIgpAQCAtMzYsNiArMzYsNyBAQAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2lt
cG9ydCAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2ltcG9ydCAiUGFnZS5oIgorI2ltcG9ydCAiUGxh
dGZvcm1SZXNvdXJjZUhhbmRsZUNsaWVudC5oIgogI2ltcG9ydCAiUmVzb3VyY2VFcnJvci5oIgog
I2ltcG9ydCAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2ltcG9ydCAiU2NoZWR1bGVQYWlyLmgiCkBA
IC01OCw5ICs1OSw5IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBAaW50ZXJmYWNlIFdl
YkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUgOiBOU09iamVjdCA8TlNVUkxBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZVNlbmRlcj4KIHsKLSAgICBSZXNvdXJjZUhhbmRsZSogbV9oYW5kbGU7Cisg
ICAgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZSogbV9oYW5kbGU7CiB9Ci0tIChpZClpbml0V2l0aEhh
bmRsZTooUmVzb3VyY2VIYW5kbGUqKWhhbmRsZTsKKy0gKGlkKWluaXRXaXRoSGFuZGxlOihQbGF0
Zm9ybVJlc291cmNlSGFuZGxlKiloYW5kbGU7CiAtICh2b2lkKWRldGFjaEhhbmRsZTsKIEBlbmQK
IApAQCAtMTI1LDExICsxMjYsMTEgQEAgcHVibGljOgogICAgIH0KIH07CiAKLVJlc291cmNlSGFu
ZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKK1BsYXRmb3JtUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbDo6flBsYXRmb3JtUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCgpCiB7CiB9CiAK
LVJlc291cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUoKQorUGxhdGZvcm1SZXNvdXJjZUhhbmRs
ZTo6flBsYXRmb3JtUmVzb3VyY2VIYW5kbGUoKQogewogICAgIHJlbGVhc2VEZWxlZ2F0ZSgpOwog
CkBAIC0xMzcsMTIgKzEzOCwxMiBAQCBSZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFuZGxlKCkK
IH0KIAogc3RhdGljIGNvbnN0IGRvdWJsZSBNYXhGb3VuZGF0aW9uVmVyc2lvbldpdGhvdXRkaWRT
ZW5kQm9keURhdGFEZWxlZ2F0ZSA9IDY3Ny4yMTsKLWJvb2wgUmVzb3VyY2VIYW5kbGU6OmRpZFNl
bmRCb2R5RGF0YURlbGVnYXRlRXhpc3RzKCkKK2Jvb2wgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6
ZGlkU2VuZEJvZHlEYXRhRGVsZWdhdGVFeGlzdHMoKQogewogICAgIHJldHVybiBOU0ZvdW5kYXRp
b25WZXJzaW9uTnVtYmVyID4gTWF4Rm91bmRhdGlvblZlcnNpb25XaXRob3V0ZGlkU2VuZEJvZHlE
YXRhRGVsZWdhdGU7CiB9CiAKLWJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KEZyYW1lKiBmcmFt
ZSkKK2Jvb2wgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6c3RhcnQoRnJhbWUqIGZyYW1lKQogewog
ICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2NCwxMiArMTY1LDEy
IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KEZyYW1lKiBmcmFtZSkKICAgICBpZiAoZC0+
bV9taWdodERvd25sb2FkRnJvbUhhbmRsZSkgewogICAgICAgICBBU1NFUlQoIWQtPm1fcHJveHkp
OwogICAgICAgICBkLT5tX3Byb3h5ID0gd2tDcmVhdGVOU1VSTENvbm5lY3Rpb25EZWxlZ2F0ZVBy
b3h5KCk7Ci0gICAgICAgIFtkLT5tX3Byb3h5LmdldCgpIHNldERlbGVnYXRlOlJlc291cmNlSGFu
ZGxlOjpkZWxlZ2F0ZSgpXTsKKyAgICAgICAgW2QtPm1fcHJveHkuZ2V0KCkgc2V0RGVsZWdhdGU6
UGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6ZGVsZWdhdGUoKV07CiAgICAgICAgIFtkLT5tX3Byb3h5
LmdldCgpIHJlbGVhc2VdOwogICAgICAgICAKICAgICAgICAgZGVsZWdhdGUgPSBkLT5tX3Byb3h5
LmdldCgpOwogICAgIH0gZWxzZSAKLSAgICAgICAgZGVsZWdhdGUgPSBSZXNvdXJjZUhhbmRsZTo6
ZGVsZWdhdGUoKTsKKyAgICAgICAgZGVsZWdhdGUgPSBQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjpk
ZWxlZ2F0ZSgpOwogCiAgICAgaWYgKCghZC0+bV91c2VyLmlzRW1wdHkoKSB8fCAhZC0+bV9wYXNz
LmlzRW1wdHkoKSkgJiYgIWQtPm1fcmVxdWVzdC51cmwoKS5wcm90b2NvbEluSFRUUEZhbWlseSgp
KSB7CiAgICAgICAgIC8vIENyZWRlbnRpYWxzIGZvciBmdHAgY2FuIG9ubHkgYmUgcGFzc2VkIGlu
IFVSTCwgdGhlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOiBk
ZWxlZ2F0ZSBjYWxsIHdvbid0IGJlIG1hZGUuCkBAIC0xNzksNyArMTgwLDcgQEAgYm9vbCBSZXNv
dXJjZUhhbmRsZTo6c3RhcnQoRnJhbWUqIGZyYW1lKQogICAgICAgICBkLT5tX3JlcXVlc3Quc2V0
VVJMKHVybFdpdGhDcmVkZW50aWFscyk7CiAgICAgfQogCi0gICAgaWYgKCFSZXNvdXJjZUhhbmRs
ZTo6ZGlkU2VuZEJvZHlEYXRhRGVsZWdhdGVFeGlzdHMoKSkKKyAgICBpZiAoIVBsYXRmb3JtUmVz
b3VyY2VIYW5kbGU6OmRpZFNlbmRCb2R5RGF0YURlbGVnYXRlRXhpc3RzKCkpCiAgICAgICAgIGFz
c29jaWF0ZVN0cmVhbVdpdGhSZXNvdXJjZUhhbmRsZShbZC0+bV9yZXF1ZXN0Lm5zVVJMUmVxdWVz
dCgpIEhUVFBCb2R5U3RyZWFtXSwgdGhpcyk7CiAKICAgICBkLT5tX25lZWRzU2l0ZVNwZWNpZmlj
UXVpcmtzID0gZnJhbWUtPnNldHRpbmdzKCkgJiYgZnJhbWUtPnNldHRpbmdzKCktPm5lZWRzU2l0
ZVNwZWNpZmljUXVpcmtzKCk7CkBAIC0yNDUsMTYgKzI0NiwxNiBAQCBib29sIFJlc291cmNlSGFu
ZGxlOjpzdGFydChGcmFtZSogZnJhbWUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJl
c291cmNlSGFuZGxlOjpjYW5jZWwoKQordm9pZCBQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjpjYW5j
ZWwoKQogewogICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGNhbmNlbCBjb25uZWN0aW9uICVw
IiwgdGhpcywgZC0+bV9jb25uZWN0aW9uLmdldCgpKTsKIAotICAgIGlmICghUmVzb3VyY2VIYW5k
bGU6OmRpZFNlbmRCb2R5RGF0YURlbGVnYXRlRXhpc3RzKCkpCisgICAgaWYgKCFQbGF0Zm9ybVJl
c291cmNlSGFuZGxlOjpkaWRTZW5kQm9keURhdGFEZWxlZ2F0ZUV4aXN0cygpKQogICAgICAgICBk
aXNhc3NvY2lhdGVTdHJlYW1XaXRoUmVzb3VyY2VIYW5kbGUoW2QtPm1fcmVxdWVzdC5uc1VSTFJl
cXVlc3QoKSBIVFRQQm9keVN0cmVhbV0pOwogICAgIFtkLT5tX2Nvbm5lY3Rpb24uZ2V0KCkgY2Fu
Y2VsXTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRl
ZmVycykKK3ZvaWQgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6c2V0RGVmZXJzTG9hZGluZyhib29s
IGRlZmVycykKIHsKICAgICBMT0coTmV0d29yaywgIkhhbmRsZSAlcCBzZXREZWZlcnNMb2FkaW5n
KCVzKSIsIHRoaXMsIGRlZmVycyA/ICJ0cnVlIiA6ICJmYWxzZSIpOwogCkBAIC0yNjMsNyArMjY0
LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0RGVmZXJzTG9hZGluZyhibwogICAgICAgICB3
a1NldE5TVVJMQ29ubmVjdGlvbkRlZmVyc0NhbGxiYWNrcyhkLT5tX2Nvbm5lY3Rpb24uZ2V0KCks
IGRlZmVycyk7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnNjaGVkdWxlKFNjaGVkdWxlUGFp
ciogcGFpcikKK3ZvaWQgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6c2NoZWR1bGUoU2NoZWR1bGVQ
YWlyKiBwYWlyKQogewogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgIE5TUnVuTG9vcCAq
cnVuTG9vcCA9IHBhaXItPm5zUnVuTG9vcCgpOwpAQCAtMjc5LDcgKzI4MCw3IEBAIHZvaWQgUmVz
b3VyY2VIYW5kbGU6OnNjaGVkdWxlKFNjaGVkdWxlUGEKICNlbmRpZgogfQogCi12b2lkIFJlc291
cmNlSGFuZGxlOjp1bnNjaGVkdWxlKFNjaGVkdWxlUGFpciogcGFpcikKK3ZvaWQgUGxhdGZvcm1S
ZXNvdXJjZUhhbmRsZTo6dW5zY2hlZHVsZShTY2hlZHVsZVBhaXIqIHBhaXIpCiB7CiAjaWZuZGVm
IEJVSUxESU5HX09OX1RJR0VSCiAgICAgaWYgKE5TUnVuTG9vcCAqcnVuTG9vcCA9IHBhaXItPm5z
UnVuTG9vcCgpKQpAQCAtMjg5LDcgKzI5MCw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnVuc2No
ZWR1bGUoU2NoZWR1bGUKICNlbmRpZgogfQogCi1XZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVn
YXRlICpSZXNvdXJjZUhhbmRsZTo6ZGVsZWdhdGUoKQorV2ViQ29yZVJlc291cmNlSGFuZGxlQXNE
ZWxlZ2F0ZSAqUGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6ZGVsZWdhdGUoKQogewogICAgIGlmICgh
ZC0+bV9kZWxlZ2F0ZSkgewogICAgICAgICBXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRl
ICpkZWxlZ2F0ZSA9IFtbV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZSBhbGxvY10gaW5p
dFdpdGhIYW5kbGU6dGhpc107CkBAIC0yOTksNyArMzAwLDcgQEAgV2ViQ29yZVJlc291cmNlSGFu
ZGxlQXNEZWxlZ2F0ZSAqUmVzb3VyYwogICAgIHJldHVybiBkLT5tX2RlbGVnYXRlLmdldCgpOwog
fQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpyZWxlYXNlRGVsZWdhdGUoKQordm9pZCBQbGF0Zm9y
bVJlc291cmNlSGFuZGxlOjpyZWxlYXNlRGVsZWdhdGUoKQogewogICAgIGlmICghZC0+bV9kZWxl
Z2F0ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzA5LDIxICszMTAsMjEgQEAgdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6cmVsZWFzZURlbGVnYXRlKCkKICAgICBkLT5tX2RlbGVnYXRlID0gbmlsOwogfQog
Ci1ib29sIFJlc291cmNlSGFuZGxlOjpzdXBwb3J0c0J1ZmZlcmVkRGF0YSgpCitib29sIFBsYXRm
b3JtUmVzb3VyY2VIYW5kbGU6OnN1cHBvcnRzQnVmZmVyZWREYXRhKCkKIHsKICAgICBzdGF0aWMg
Ym9vbCBzdXBwb3J0c0J1ZmZlcmVkRGF0YSA9IFtOU1VSTENvbm5lY3Rpb24gaW5zdGFuY2VzUmVz
cG9uZFRvU2VsZWN0b3I6QHNlbGVjdG9yKF9idWZmZXJlZERhdGEpXTsKICAgICByZXR1cm4gc3Vw
cG9ydHNCdWZmZXJlZERhdGE7CiB9CiAKLVBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBSZXNvdXJj
ZUhhbmRsZTo6YnVmZmVyZWREYXRhKCkKK1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBQbGF0Zm9y
bVJlc291cmNlSGFuZGxlOjpidWZmZXJlZERhdGEoKQogewotICAgIGlmIChSZXNvdXJjZUhhbmRs
ZTo6c3VwcG9ydHNCdWZmZXJlZERhdGEoKSkKKyAgICBpZiAoUGxhdGZvcm1SZXNvdXJjZUhhbmRs
ZTo6c3VwcG9ydHNCdWZmZXJlZERhdGEoKSkKICAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6
d3JhcE5TRGF0YShbZC0+bV9jb25uZWN0aW9uLmdldCgpIF9idWZmZXJlZERhdGFdKTsKIAogICAg
IHJldHVybiAwOwogfQogCi1pZCBSZXNvdXJjZUhhbmRsZTo6cmVsZWFzZVByb3h5KCkKK2lkIFBs
YXRmb3JtUmVzb3VyY2VIYW5kbGU6OnJlbGVhc2VQcm94eSgpCiB7CiAgICAgaWQgcHJveHkgPSBb
W2QtPm1fcHJveHkuZ2V0KCkgcmV0YWluXSBhdXRvcmVsZWFzZV07CiAgICAgZC0+bV9wcm94eSA9
IG5pbDsKQEAgLTMzMSwxMiArMzMyLDEyIEBAIGlkIFJlc291cmNlSGFuZGxlOjpyZWxlYXNlUHJv
eHkoKQogICAgIHJldHVybiBwcm94eTsKIH0KIAotTlNVUkxDb25uZWN0aW9uICpSZXNvdXJjZUhh
bmRsZTo6Y29ubmVjdGlvbigpIGNvbnN0CitOU1VSTENvbm5lY3Rpb24gKlBsYXRmb3JtUmVzb3Vy
Y2VIYW5kbGU6OmNvbm5lY3Rpb24oKSBjb25zdAogewogICAgIHJldHVybiBkLT5tX2Nvbm5lY3Rp
b24uZ2V0KCk7CiB9CiAKLWJvb2wgUmVzb3VyY2VIYW5kbGU6OmxvYWRzQmxvY2tlZCgpCitib29s
IFBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6OmxvYWRzQmxvY2tlZCgpCiB7CiAjaWZuZGVmIEJVSUxE
SU5HX09OX1RJR0VSCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzQ4LDcgKzM0OSw3IEBAIGJvb2wg
UmVzb3VyY2VIYW5kbGU6OmxvYWRzQmxvY2tlZCgpCiAjZW5kaWYKIH0KIAotYm9vbCBSZXNvdXJj
ZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorYm9v
bCBQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjp3aWxsTG9hZEZyb21DYWNoZShSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QpCiB7CiAjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCiAgICAgcmVxdWVzdC5z
ZXRDYWNoZVBvbGljeShSZXR1cm5DYWNoZURhdGFEb250TG9hZCk7CkBAIC0zNjcsNyArMzY4LDcg
QEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUoUgogI2VuZGlmCiB9CiAK
LXZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFs
cywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0
b3I8Y2hhcj4mIGRhdGEsIEZyYW1lKikKK3ZvaWQgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0
b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSwgRnJhbWUqKQog
ewogICAgIE5TRXJyb3IgKm5zRXJyb3IgPSBuaWw7CiAgICAgCkBAIC00MTcsNyArNDE4LDcgQEAg
dm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hybwogICAgIGVycm9yID0gbnNF
cnJvcjsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25z
ZSkKK3ZvaWQgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25z
ZSkKIHsKICAgICBjb25zdCBLVVJMJiB1cmwgPSByZXF1ZXN0LnVybCgpOwogICAgIGQtPm1fdXNl
ciA9IHVybC51c2VyKCk7CkBAIC00MjcsNyArNDI4LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6
d2lsbFNlbmRSZXF1ZXN0KFJlcwogICAgIGNsaWVudCgpLT53aWxsU2VuZFJlcXVlc3QodGhpcywg
cmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CiB9CiAKLWJvb2wgUmVzb3VyY2VIYW5kbGU6OnNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCkKK2Jvb2wgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6
c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKQogewogICAgIGlmIChjbGllbnQoKSkKICAgICAg
ICAgcmV0dXJuIGNsaWVudCgpLT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSh0aGlzKTsKQEAg
LTQzNSw3ICs0MzYsNyBAQCBib29sIFJlc291cmNlSGFuZGxlOjpzaG91bGRVc2VDcmVkZW50aWFs
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNo
YWxsZW5nZSkKK3ZvaWQgUGxhdGZvcm1SZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2Up
CiB7CiAgICAgQVNTRVJUKCFkLT5tX2N1cnJlbnRNYWNDaGFsbGVuZ2UpOwogICAgIEFTU0VSVChk
LT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2UuaXNOdWxsKCkpOwpAQCAtNDc1LDcgKzQ3Niw3IEBAIHZv
aWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWMKICAgICAgICAgY2xpZW50KCkt
PmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSh0aGlzLCBkLT5tX2N1cnJlbnRXZWJD
aGFsbGVuZ2UpOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpkaWRDYW5jZWxBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQor
dm9pZCBQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjpkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQogewogICAgIEFT
U0VSVChkLT5tX2N1cnJlbnRNYWNDaGFsbGVuZ2UpOwogICAgIEFTU0VSVCghZC0+bV9jdXJyZW50
V2ViQ2hhbGxlbmdlLmlzTnVsbCgpKTsKQEAgLTQ4NSw3ICs0ODYsNyBAQCB2b2lkIFJlc291cmNl
SGFuZGxlOjpkaWRDYW5jZWxBdXRoZW50aWNhCiAgICAgICAgIGNsaWVudCgpLT5kaWRDYW5jZWxB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSh0aGlzLCBjaGFsbGVuZ2UpOwogfQogCi12b2lkIFJlc291
cmNlSGFuZGxlOjpyZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmIGNoYWxsZW5nZSwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkKK3ZvaWQgUGxhdGZv
cm1SZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiBjaGFsbGVuZ2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiB7CiAg
ICAgQVNTRVJUKCFjaGFsbGVuZ2UuaXNOdWxsKCkpOwogICAgIGlmIChjaGFsbGVuZ2UgIT0gZC0+
bV9jdXJyZW50V2ViQ2hhbGxlbmdlKQpAQCAtNTEzLDcgKzUxNCw3IEBAIHZvaWQgUmVzb3VyY2VI
YW5kbGU6OnJlY2VpdmVkQ3JlZGVudGlhbCgKICAgICBjbGVhckF1dGhlbnRpY2F0aW9uKCk7CiB9
CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0
Q3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQordm9p
ZCBQbGF0Zm9ybVJlc291cmNlSGFuZGxlOjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91
dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKIHsK
ICAgICBBU1NFUlQoIWNoYWxsZW5nZS5pc051bGwoKSk7CiAgICAgaWYgKGNoYWxsZW5nZSAhPSBk
LT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2UpCkBAIC01MjQsNyArNTI1LDcgQEAgdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6cmVjZWl2ZWRSZXF1ZXN0VG9DbwogICAgIGNsZWFyQXV0aGVudGljYXRpb24oKTsK
IH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKK3ZvaWQgUGxhdGZvcm1SZXNvdXJjZUhh
bmRsZTo6cmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
IGNoYWxsZW5nZSkKIHsKICAgICBpZiAoY2hhbGxlbmdlICE9IGQtPm1fY3VycmVudFdlYkNoYWxs
ZW5nZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTM3LDcgKzUzOCw3IEBAIHZvaWQgUmVzb3VyY2VI
YW5kbGU6OnJlY2VpdmVkQ2FuY2VsbGF0aW8KIAogQGltcGxlbWVudGF0aW9uIFdlYkNvcmVSZXNv
dXJjZUhhbmRsZUFzRGVsZWdhdGUKIAotLSAoaWQpaW5pdFdpdGhIYW5kbGU6KFJlc291cmNlSGFu
ZGxlKiloYW5kbGUKKy0gKGlkKWluaXRXaXRoSGFuZGxlOihQbGF0Zm9ybVJlc291cmNlSGFuZGxl
KiloYW5kbGUKIHsKICAgICBzZWxmID0gW3NlbGYgaW5pdF07CiAgICAgaWYgKCFzZWxmKQpAQCAt
NTcxLDcgKzU3Miw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ2FuY2VsbGF0aW8K
ICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IG5ld1JlcXVlc3Q7CiAgICAgbV9oYW5kbGUt
PndpbGxTZW5kUmVxdWVzdChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKIAotICAgIGlmICgh
UmVzb3VyY2VIYW5kbGU6OmRpZFNlbmRCb2R5RGF0YURlbGVnYXRlRXhpc3RzKCkpIHsKKyAgICBp
ZiAoIVBsYXRmb3JtUmVzb3VyY2VIYW5kbGU6OmRpZFNlbmRCb2R5RGF0YURlbGVnYXRlRXhpc3Rz
KCkpIHsKICAgICAgICAgLy8gVGhlIGNsaWVudCBtYXkgY2hhbmdlIHRoZSByZXF1ZXN0J3MgYm9k
eSBzdHJlYW0sIGluIHdoaWNoIGNhc2Ugd2UgaGF2ZSB0byByZS1hc3NvY2lhdGUKICAgICAgICAg
Ly8gdGhlIGhhbmRsZSB3aXRoIHRoZSBuZXcgc3RyZWFtIHNvIHVwbG9hZCBwcm9ncmVzcyBjYWxs
YmFja3MgY29udGludWUgdG8gd29yayBjb3JyZWN0bHkuCiAgICAgICAgIE5TSW5wdXRTdHJlYW0q
IG9sZEJvZHlTdHJlYW0gPSBbbmV3UmVxdWVzdCBIVFRQQm9keVN0cmVhbV07CkBAIC03MTUsNyAr
NzE2LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDYW5jZWxsYXRpbwogICAgICAg
ICByZXR1cm47CiAgICAgQ2FsbGJhY2tHdWFyZCBndWFyZDsKIAotICAgIGlmICghUmVzb3VyY2VI
YW5kbGU6OmRpZFNlbmRCb2R5RGF0YURlbGVnYXRlRXhpc3RzKCkpCisgICAgaWYgKCFQbGF0Zm9y
bVJlc291cmNlSGFuZGxlOjpkaWRTZW5kQm9keURhdGFEZWxlZ2F0ZUV4aXN0cygpKQogICAgICAg
ICBkaXNhc3NvY2lhdGVTdHJlYW1XaXRoUmVzb3VyY2VIYW5kbGUoW21faGFuZGxlLT5yZXF1ZXN0
KCkubnNVUkxSZXF1ZXN0KCkgSFRUUEJvZHlTdHJlYW1dKTsKIAogICAgIG1faGFuZGxlLT5jbGll
bnQoKS0+ZGlkRmluaXNoTG9hZGluZyhtX2hhbmRsZSk7CkBAIC03MzEsNyArNzMyLDcgQEAgdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDYW5jZWxsYXRpbwogICAgICAgICByZXR1cm47CiAg
ICAgQ2FsbGJhY2tHdWFyZCBndWFyZDsKIAotICAgIGlmICghUmVzb3VyY2VIYW5kbGU6OmRpZFNl
bmRCb2R5RGF0YURlbGVnYXRlRXhpc3RzKCkpCisgICAgaWYgKCFQbGF0Zm9ybVJlc291cmNlSGFu
ZGxlOjpkaWRTZW5kQm9keURhdGFEZWxlZ2F0ZUV4aXN0cygpKQogICAgICAgICBkaXNhc3NvY2lh
dGVTdHJlYW1XaXRoUmVzb3VyY2VIYW5kbGUoW21faGFuZGxlLT5yZXF1ZXN0KCkubnNVUkxSZXF1
ZXN0KCkgSFRUUEJvZHlTdHJlYW1dKTsKIAogICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkRmFp
bChtX2hhbmRsZSwgZXJyb3IpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>