<?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>192949</bug_id>
          
          <creation_ts>2018-12-20 12:42:29 -0800</creation_ts>
          <short_desc>[WebAuthN] Import an APDU coder from Chromium</short_desc>
          <delta_ts>2018-12-21 15:07:05 -0800</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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>181943</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jiewen Tan">jiewen_tan</reporter>
          <assigned_to name="Jiewen Tan">jiewen_tan</assigned_to>
          <cc>alex.gaynor</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1490009</commentid>
    <comment_count>0</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-12-20 12:42:29 -0800</bug_when>
    <thetext>Import an APDU coder from Chromium. APDU is a binary format to frame any U2F requests/responses into binaries. It is equivalent to CBOR in CTAP2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490011</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-12-20 12:43:25 -0800</bug_when>
    <thetext>&lt;rdar://problem/46879933&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490023</commentid>
    <comment_count>2</comment_count>
      <attachid>357855</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-12-20 13:12:02 -0800</bug_when>
    <thetext>Created attachment 357855
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490028</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-12-20 13:17:28 -0800</bug_when>
    <thetext>Attachment 357855 did not pass style-queue:


ERROR: Source/WebCore/Modules/webauthn/apdu/ApduResponse.h:64:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduResponse.h:65:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:68:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:69:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:70:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:71:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:72:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:73:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:75:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:76:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:77:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:78:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:79:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:80:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
Total errors found: 14 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490182</commentid>
    <comment_count>4</comment_count>
      <attachid>357899</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-12-20 16:45:08 -0800</bug_when>
    <thetext>Created attachment 357899
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490185</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-12-20 16:47:38 -0800</bug_when>
    <thetext>Attachment 357899 did not pass style-queue:


ERROR: Source/WebCore/Modules/webauthn/apdu/ApduResponse.h:64:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduResponse.h:65:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:68:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:69:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:70:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:71:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:72:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:73:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:75:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:76:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:77:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:78:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:79:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/Modules/webauthn/apdu/ApduCommand.h:80:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
Total errors found: 14 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490482</commentid>
    <comment_count>6</comment_count>
      <attachid>357899</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-12-21 14:23:05 -0800</bug_when>
    <thetext>Comment on attachment 357899
Patch

Looks good! r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490495</commentid>
    <comment_count>7</comment_count>
      <attachid>357899</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-12-21 14:41:20 -0800</bug_when>
    <thetext>Comment on attachment 357899
Patch

Thanks Brent for r+ this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490515</commentid>
    <comment_count>8</comment_count>
      <attachid>357899</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-12-21 15:07:03 -0800</bug_when>
    <thetext>Comment on attachment 357899
Patch

Clearing flags on attachment: 357899

Committed r239520: &lt;https://trac.webkit.org/changeset/239520&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490516</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-12-21 15:07:05 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357855</attachid>
            <date>2018-12-20 13:12:02 -0800</date>
            <delta_ts>2018-12-20 16:45:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192949-20181220131202.patch</filename>
            <type>text/plain</type>
            <size>38370</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5MzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmVmYWVjZGJlYWM5ZTg3
MDE3NDQzNmYyM2UwMWRkZjczNDgwNjEyMi4uMDcxMTRiN2JjMjFjMTgzMGY2ZDg3NzlmZmI2MTM4
NmVjYTBlZTFjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDE4LTEyLTIwICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhOXSBJbXBv
cnQgYW4gQVBEVSBjb2RlciBmcm9tIENocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI5NDkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ2
ODc5OTMzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggaW1wb3J0cyBhbiBBUERVIGNvZGVyIGZyb20gQ2hyb21pdW0uIEhlcmUgaXMg
dGhlIGRvY3VtZW50YXRpb246CisgICAgICAgIGh0dHBzOi8vZmlkb2FsbGlhbmNlLm9yZy9zcGVj
cy9maWRvLXUyZi12MS4yLXBzLTIwMTcwNDExL2ZpZG8tdTJmLXJhdy1tZXNzYWdlLWZvcm1hdHMt
djEuMi1wcy0yMDE3MDQxMS5odG1sI3UyZi1tZXNzYWdlLWZyYW1pbmcKKyAgICAgICAgQVBEVSBp
cyBhIGJpbmFyeSBmb3JtYXQgdG8gZnJhbWUgYW55IFUyRiByZXF1ZXN0cy9yZXNwb25zZXMgaW50
byBiaW5hcmllcy4gSXQgaXMgZXF1aXZhbGVudCB0byBDQk9SIGluIENUQVAyLgorCisgICAgICAg
IEhlcmUgaXMgYSBsaXN0IG9mIGZpbGVzIHRoYXQgYXJlIGltcG9ydGVkIGZyb20gQ2hyb21pdW06
CisgICAgICAgIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9jb21wb25lbnRz
L2FwZHUvYXBkdV9jb21tYW5kLmNjP3JjbD1hMmYyOTBjMTBkMTMyZjUzNTE4ZTdmOTlkNTYzNWVl
ODE0ZmY4MDkwCisgICAgICAgIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9j
b21wb25lbnRzL2FwZHUvYXBkdV9jb21tYW5kLmg/cmNsPTg2N2IxMDM0ODFmNmY0Y2NjNzlhNjli
YmExNmMxMWVlZmFjM2NkYjYKKyAgICAgICAgaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21p
dW0vc3JjL2NvbXBvbmVudHMvYXBkdS9hcGR1X3Jlc3BvbnNlLmNjP3JjbD04NjdiMTAzNDgxZjZm
NGNjYzc5YTY5YmJhMTZjMTFlZWZhYzNjZGI2CisgICAgICAgIGh0dHBzOi8vY3MuY2hyb21pdW0u
b3JnL2Nocm9taXVtL3NyYy9jb21wb25lbnRzL2FwZHUvYXBkdV9yZXNwb25zZS5oP3JjbD04Njdi
MTAzNDgxZjZmNGNjYzc5YTY5YmJhMTZjMTFlZWZhYzNjZGI2CisgICAgICAgIGh0dHBzOi8vY3Mu
Y2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9jb21wb25lbnRzL2FwZHUvYXBkdV91bml0dGVzdC5j
Yz9yY2w9ODY3YjEwMzQ4MWY2ZjRjY2M3OWE2OWJiYTE2YzExZWVmYWMzY2RiNgorCisgICAgICAg
IENvdmVyZWQgYnkgQVBJIHRlc3RzLgorCisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9hcGR1
L0FwZHVDb21tYW5kLmNwcDogQWRkZWQuCisgICAgICAgIChhcGR1OjpBcGR1Q29tbWFuZDo6Y3Jl
YXRlRnJvbU1lc3NhZ2UpOgorICAgICAgICAoYXBkdTo6QXBkdUNvbW1hbmQ6OkFwZHVDb21tYW5k
KToKKyAgICAgICAgKGFwZHU6OkFwZHVDb21tYW5kOjpnZXRFbmNvZGVkQ29tbWFuZCBjb25zdCk6
CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9hcGR1L0FwZHVDb21tYW5kLmg6IEFkZGVkLgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vYXBkdS9BcGR1UmVzcG9uc2UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKGFwZHU6OkFwZHVSZXNwb25zZTo6Y3JlYXRlRnJvbU1lc3NhZ2UpOgorICAgICAg
ICAoYXBkdTo6QXBkdVJlc3BvbnNlOjpBcGR1UmVzcG9uc2UpOgorICAgICAgICAoYXBkdTo6QXBk
dVJlc3BvbnNlOjpnZXRFbmNvZGVkUmVzcG9uc2UgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMv
d2ViYXV0aG4vYXBkdS9BcGR1UmVzcG9uc2UuaDogQWRkZWQuCisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE4
LTEyLTE4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFNvbWUg
aU9TIGFwcCBjcmFzaCBpbiBGcmFtZUxvYWRlcjo6Y2hlY2tDb21wbGV0ZWQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vYXBkdS9BcGR1Q29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2FwZHUvQXBkdUNvbW1hbmQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjg1OGFhZjc2Mjk0MjIyNDMxOTVjZGQ4NjAxOGUxNzdlODUxNGQxMjMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2FwZHUvQXBkdUNvbW1h
bmQuY3BwCkBAIC0wLDAgKzEsMTQ5IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0g
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
Ky8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBcGR1Q29tbWFu
ZC5oIgorCisjaWYgRU5BQkxFKFdFQl9BVVRITikKKworbmFtZXNwYWNlIGFwZHUgeworCituYW1l
c3BhY2UgeworCisvLyBBUERVIGNvbW1hbmQgZGF0YSBsZW5ndGggaXMgMiBieXRlcyBlbmNvZGVk
IGluIGJpZyBlbmRpYW4gb3JkZXIuCit1aW50MTZfdCBwYXJzZU1lc3NhZ2VMZW5ndGgoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBtZXNzYWdlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIEFTU0VSVCht
ZXNzYWdlLnNpemUoKSA+PSBvZmZzZXQgKyAyKTsKKyAgICByZXR1cm4gKG1lc3NhZ2Vbb2Zmc2V0
XSA8PCA4KSB8IG1lc3NhZ2Vbb2Zmc2V0ICsgMV07Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK3N0
ZDo6b3B0aW9uYWw8QXBkdUNvbW1hbmQ+IEFwZHVDb21tYW5kOjpjcmVhdGVGcm9tTWVzc2FnZShj
b25zdCBWZWN0b3I8dWludDhfdD4mIG1lc3NhZ2UpCit7CisgICAgaWYgKG1lc3NhZ2Uuc2l6ZSgp
IDwga0FwZHVNaW5IZWFkZXIgfHwgbWVzc2FnZS5zaXplKCkgPiBrQXBkdU1heExlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHVpbnQ4X3QgY2xhID0gbWVzc2FnZVsw
XTsKKyAgICB1aW50OF90IGlucyA9IG1lc3NhZ2VbMV07CisgICAgdWludDhfdCBwMSA9IG1lc3Nh
Z2VbMl07CisgICAgdWludDhfdCBwMiA9IG1lc3NhZ2VbM107CisKKyAgICBzaXplX3QgcmVzcG9u
c2VMZW5ndGggPSAwOworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworCisgICAgc3dpdGNoICht
ZXNzYWdlLnNpemUoKSkgeworICAgIC8vIE5vIGRhdGEgcHJlc2VudDsgbm8gZXhwZWN0ZWQgcmVz
cG9uc2UuCisgICAgY2FzZSBrQXBkdU1pbkhlYWRlcjoKKyAgICAgICAgYnJlYWs7CisgICAgLy8g
SW52YWxpZCBlbmNvZGluZyBzaXplcy4KKyAgICBjYXNlIGtBcGR1TWluSGVhZGVyICsgMToKKyAg
ICBjYXNlIGtBcGR1TWluSGVhZGVyICsgMjoKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICAvLyBObyBkYXRhIHByZXNlbnQ7IHJlc3BvbnNlIGV4cGVjdGVkLgorICAgIGNhc2Uga0Fw
ZHVNaW5IZWFkZXIgKyAzOgorICAgICAgICAvLyBGaWZ0aCBieXRlIG11c3QgYmUgMC4KKyAgICAg
ICAgaWYgKG1lc3NhZ2VbNF0pCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
ICAgICByZXNwb25zZUxlbmd0aCA9IHBhcnNlTWVzc2FnZUxlbmd0aChtZXNzYWdlLCBrQXBkdUNv
bW1hbmRMZW5ndGhPZmZzZXQpOworICAgICAgICAvLyBTcGVjaWFsIGNhc2Ugd2hlcmUgcmVzcG9u
c2UgbGVuZ3RoIG9mIDB4MDAwMCBjb3JyZXNwb25kcyB0byA2NTUzNgorICAgICAgICAvLyBhcyBk
ZWZpbmVkIGluIElTTzc4MTYtNC4KKyAgICAgICAgaWYgKCFyZXNwb25zZUxlbmd0aCkKKyAgICAg
ICAgICAgIHJlc3BvbnNlTGVuZ3RoID0ga0FwZHVNYXhSZXNwb25zZUxlbmd0aDsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gRmlmdGggYnl0ZSBtdXN0IGJlIDAuCisg
ICAgICAgIGlmIChtZXNzYWdlWzRdKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICAgICAgYXV0byBkYXRhTGVuZ3RoID0gcGFyc2VNZXNzYWdlTGVuZ3RoKG1lc3NhZ2UsIGtB
cGR1Q29tbWFuZExlbmd0aE9mZnNldCk7CisKKyAgICAgICAgaWYgKG1lc3NhZ2Uuc2l6ZSgpID09
IGRhdGFMZW5ndGggKyBrQXBkdUNvbW1hbmREYXRhT2Zmc2V0KSB7CisgICAgICAgICAgICAvLyBO
byByZXNwb25zZSBleHBlY3RlZC4KKyAgICAgICAgICAgIGRhdGEuYXBwZW5kUmFuZ2UobWVzc2Fn
ZS5iZWdpbigpICsga0FwZHVDb21tYW5kRGF0YU9mZnNldCwgbWVzc2FnZS5lbmQoKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAobWVzc2FnZS5zaXplKCkgPT0gZGF0YUxlbmd0aCArIGtBcGR1Q29tbWFu
ZERhdGFPZmZzZXQgKyAyKSB7CisgICAgICAgICAgICAvLyBNYXhpbXVtIHJlc3BvbnNlIHNpemUg
aXMgc3RvcmVkIGluIGZpbmFsIDIgYnl0ZXMuCisgICAgICAgICAgICBkYXRhLmFwcGVuZFJhbmdl
KG1lc3NhZ2UuYmVnaW4oKSArIGtBcGR1Q29tbWFuZERhdGFPZmZzZXQsIG1lc3NhZ2UuZW5kKCkg
LSAyKTsKKyAgICAgICAgICAgIGF1dG8gcmVzcG9uc2VMZW5ndGhPZmZzZXQgPSBrQXBkdUNvbW1h
bmREYXRhT2Zmc2V0ICsgZGF0YUxlbmd0aDsKKyAgICAgICAgICAgIHJlc3BvbnNlTGVuZ3RoID0g
cGFyc2VNZXNzYWdlTGVuZ3RoKG1lc3NhZ2UsIHJlc3BvbnNlTGVuZ3RoT2Zmc2V0KTsKKyAgICAg
ICAgICAgIC8vIFNwZWNpYWwgY2FzZSB3aGVyZSByZXNwb25zZSBsZW5ndGggb2YgMHgwMDAwIGNv
cnJlc3BvbmRzIHRvIDY1NTM2CisgICAgICAgICAgICAvLyBhcyBkZWZpbmVkIGluIElTTzc4MTYt
NC4KKyAgICAgICAgICAgIGlmICghcmVzcG9uc2VMZW5ndGgpCisgICAgICAgICAgICAgICAgcmVz
cG9uc2VMZW5ndGggPSBrQXBkdU1heFJlc3BvbnNlTGVuZ3RoOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHJldHVybiBBcGR1Q29tbWFuZChjbGEsIGlucywgcDEsIHAyLCByZXNwb25zZUxlbmd0aCwg
V1RGTW92ZShkYXRhKSk7Cit9CisKK0FwZHVDb21tYW5kOjpBcGR1Q29tbWFuZCh1aW50OF90IGNs
YSwgdWludDhfdCBpbnMsIHVpbnQ4X3QgcDEsIHVpbnQ4X3QgcDIsIHNpemVfdCByZXNwb25zZUxl
bmd0aCwgVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkKKyAgICA6IG1fY2xhKGNsYSkKKyAgICAsIG1f
aW5zKGlucykKKyAgICAsIG1fcDEocDEpCisgICAgLCBtX3AyKHAyKQorICAgICwgbV9yZXNwb25z
ZUxlbmd0aChyZXNwb25zZUxlbmd0aCkKKyAgICAsIG1fZGF0YShXVEZNb3ZlKGRhdGEpKQorewor
fQorCitWZWN0b3I8dWludDhfdD4gQXBkdUNvbW1hbmQ6OmdldEVuY29kZWRDb21tYW5kKCkgY29u
c3QKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZCA9IHsgbV9jbGEsIG1faW5zLCBtX3Ax
LCBtX3AyIH07CisKKyAgICAvLyBJZiBkYXRhIGV4aXN0cywgcmVxdWVzdCBzaXplIChMYykgaXMg
ZW5jb2RlZCBpbiAzIGJ5dGVzLCB3aXRoIHRoZSBmaXJzdAorICAgIC8vIGJ5dGUgYWx3YXlzIGJl
aW5nIG51bGwsIGFuZCB0aGUgb3RoZXIgdHdvIGJ5dGVzIGJlaW5nIGEgYmlnLWVuZGlhbgorICAg
IC8vIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXF1ZXN0IHNpemUuIElmIGRhdGEgbGVuZ3RoIGlz
IDAsIHJlc3BvbnNlIHNpemUgKExlKQorICAgIC8vIHdpbGwgYmUgcHJlcGVuZGVkIHdpdGggYSBu
dWxsIGJ5dGUuCisgICAgaWYgKCFtX2RhdGEuaXNFbXB0eSgpKSB7CisgICAgICAgIHNpemVfdCBk
YXRhTGVuZ3RoID0gbV9kYXRhLnNpemUoKTsKKworICAgICAgICBlbmNvZGVkLmFwcGVuZCgweDAp
OworICAgICAgICBpZiAoZGF0YUxlbmd0aCA+IGtBcGR1TWF4RGF0YUxlbmd0aCkKKyAgICAgICAg
ICAgIGRhdGFMZW5ndGggPSBrQXBkdU1heERhdGFMZW5ndGg7CisgICAgICAgIGVuY29kZWQuYXBw
ZW5kKChkYXRhTGVuZ3RoID4+IDgpICYgMHhmZik7CisgICAgICAgIGVuY29kZWQuYXBwZW5kKGRh
dGFMZW5ndGggJiAweGZmKTsKKyAgICAgICAgZW5jb2RlZC5hcHBlbmRSYW5nZShtX2RhdGEuYmVn
aW4oKSwgbV9kYXRhLmJlZ2luKCkgKyBkYXRhTGVuZ3RoKTsKKyAgICB9IGVsc2UgaWYgKG1fcmVz
cG9uc2VMZW5ndGggPiAwKQorICAgICAgICBlbmNvZGVkLmFwcGVuZCgweDApOworCisgICAgaWYg
KG1fcmVzcG9uc2VMZW5ndGggPiAwKSB7CisgICAgICAgIHNpemVfdCByZXNwb25zZUxlbmd0aCA9
IG1fcmVzcG9uc2VMZW5ndGg7CisgICAgICAgIGlmIChyZXNwb25zZUxlbmd0aCA+IGtBcGR1TWF4
UmVzcG9uc2VMZW5ndGgpCisgICAgICAgICAgICByZXNwb25zZUxlbmd0aCA9IGtBcGR1TWF4UmVz
cG9uc2VMZW5ndGg7CisgICAgICAgIC8vIEEgemVybyB2YWx1ZSByZXByZXNlbnRzIGEgcmVzcG9u
c2UgbGVuZ3RoIG9mIDY1LDUzNiBieXRlcy4KKyAgICAgICAgZW5jb2RlZC5hcHBlbmQoKHJlc3Bv
bnNlTGVuZ3RoID4+IDgpICYgMHhmZik7CisgICAgICAgIGVuY29kZWQuYXBwZW5kKHJlc3BvbnNl
TGVuZ3RoICYgMHhmZik7CisgICAgfQorICAgIHJldHVybiBlbmNvZGVkOworfQorCit9IC8vIG5h
bWVzcGFjZSBhcGR1CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9hcGR1L0FwZHVDb21tYW5kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2FwZHUvQXBkdUNvbW1hbmQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45NTBmODBiNTA1MGRlN2VhNzJjODEzMDcwNWFlMTFmODEyZTA1NmZkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9hcGR1L0FwZHVDb21tYW5kLmgK
QEAgLTAsMCArMSwxMDcgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
Ky8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisv
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorCisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgYXBkdSB7CisKKy8vIEFQRFUgY29tbWFuZHMg
YXJlIGRlZmluZWQgYXMgcGFydCBvZiBJU08gNzgxNi00LiBDb21tYW5kcyBjYW4gYmUgc2VyaWFs
aXplZAorLy8gaW50byBlaXRoZXIgc2hvcnQgbGVuZ3RoIGVuY29kaW5ncywgd2hlcmUgdGhlIG1h
eGltdW0gZGF0YSBsZW5ndGggaXMgMjU2CisvLyBieXRlcywgb3IgYW4gZXh0ZW5kZWQgbGVuZ3Ro
IGVuY29kaW5nLCB3aGVyZSB0aGUgbWF4aW11bSBkYXRhIGxlbmd0aCBpcyA2NTUzNgorLy8gYnl0
ZXMuIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBvbmx5IHRoZSBleHRlbmRlZCBsZW5ndGggZW5jb2Rp
bmcuIFNlcmlhbGl6ZWQKKy8vIGNvbW1hbmRzIGNvbnNpc3Qgb2YgYSBDTEEgYnl0ZSwgZGVub3Rp
bmcgdGhlIGNsYXNzIG9mIGluc3RydWN0aW9uLCBhbiBJTlMKKy8vIGJ5dGUsIGRlbm90aW5nIHRo
ZSBpbnN0cnVjdGlvbiBjb2RlLCBQMSBhbmQgUDIsIGVhY2ggb25lIGJ5dGUgZGVub3RpbmcKKy8v
IGluc3RydWN0aW9uIHBhcmFtZXRlcnMsIGEgbGVuZ3RoIGZpZWxkIChMYyksIGEgZGF0YSBmaWVs
ZCBvZiBsZW5ndGggTGMsIGFuZAorLy8gYSBtYXhpbXVtIGV4cGVjdGVkIHJlc3BvbnNlIGxlbmd0
aCAoTGUpLgorY2xhc3MgV0VCQ09SRV9FWFBPUlQgQXBkdUNvbW1hbmQgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEFwZHVDb21tYW5kKTsKK3B1YmxpYzoKKyAgICAvLyBDb25zdHJ1Y3RzIGFu
IEFQRFUgY29tbWFuZCBmcm9tIHRoZSBzZXJpYWxpemVkIG1lc3NhZ2UgZGF0YS4KKyAgICBzdGF0
aWMgc3RkOjpvcHRpb25hbDxBcGR1Q29tbWFuZD4gY3JlYXRlRnJvbU1lc3NhZ2UoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+Jik7CisKKyAgICBBcGR1Q29tbWFuZCgpID0gZGVmYXVsdDsKKyAgICBBcGR1
Q29tbWFuZCgKKyAgICAgICAgdWludDhfdCBjbGEsCisgICAgICAgIHVpbnQ4X3QgaW5zLAorICAg
ICAgICB1aW50OF90IHAxLAorICAgICAgICB1aW50OF90IHAyLAorICAgICAgICBzaXplX3QgcmVz
cG9uc2VMZW5ndGgsCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpOworICAgIEFwZHVD
b21tYW5kKEFwZHVDb21tYW5kJiYpID0gZGVmYXVsdDsKKyAgICBBcGR1Q29tbWFuZCYgb3BlcmF0
b3I9KEFwZHVDb21tYW5kJiYpID0gZGVmYXVsdDsKKworICAgIC8vIFJldHVybnMgc2VyaWFsaXpl
ZCBtZXNzYWdlIGRhdGEuCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGdldEVuY29kZWRDb21tYW5kKCkg
Y29uc3Q7CisKKyAgICB2b2lkIHNldENsYSh1aW50OF90IGNsYSkgeyBtX2NsYSA9IGNsYTsgfQor
ICAgIHZvaWQgc2V0SW5zKHVpbnQ4X3QgaW5zKSB7IG1faW5zID0gaW5zOyB9CisgICAgdm9pZCBz
ZXRQMSh1aW50OF90IHAxKSB7IG1fcDEgPSBwMTsgfQorICAgIHZvaWQgc2V0UDIodWludDhfdCBw
MikgeyBtX3AyID0gcDI7IH0KKyAgICB2b2lkIHNldERhdGEoVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0
YSkgeyBtX2RhdGEgPSBXVEZNb3ZlKGRhdGEpOyB9CisgICAgdm9pZCBzZXRSZXNwb25zZUxlbmd0
aChzaXplX3QgcmVzcG9uc2VMZW5ndGgpIHsgbV9yZXNwb25zZUxlbmd0aCA9IHJlc3BvbnNlTGVu
Z3RoOyB9CisKKyAgICB1aW50OF90IGNsYSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xhOyB9CisgICAg
dWludDhfdCBpbnMoKSBjb25zdCB7IHJldHVybiBtX2luczsgfQorICAgIHVpbnQ4X3QgcDEoKSBj
b25zdCB7IHJldHVybiBtX3AxOyB9CisgICAgdWludDhfdCBwMigpIGNvbnN0IHsgcmV0dXJuIG1f
cDI7IH0KKyAgICBzaXplX3QgcmVzcG9uc2VMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3Jlc3Bv
bnNlTGVuZ3RoOyB9CisgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhOyB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBrQXBkdU1heFJl
c3BvbnNlTGVuZ3RoID0gNjU1MzY7CisKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBrQXBk
dU1pbkhlYWRlciA9IDQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qga0FwZHVNYXhIZWFk
ZXIgPSA3OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGtBcGR1Q29tbWFuZERhdGFPZmZz
ZXQgPSA3OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGtBcGR1Q29tbWFuZExlbmd0aE9m
ZnNldCA9IDU7CisKKyAgICAvLyBBcyBkZWZpbmVkIGluIElTTzc4MTYtNCwgZXh0ZW5kZWQgbGVu
Z3RoIEFQRFUgcmVxdWVzdCBkYXRhIGlzIGxpbWl0ZWQgdG8KKyAgICAvLyAxNiBiaXRzIGluIGxl
bmd0aCB3aXRoIGEgbWF4aW11bSB2YWx1ZSBvZiA2NTUzNS4gUmVzcG9uc2UgZGF0YSBsZW5ndGgg
aXMKKyAgICAvLyBhbHNvIGxpbWl0ZWQgdG8gMTYgYml0cyBpbiBsZW5ndGggd2l0aCBhIHZhbHVl
IG9mIDB4MDAwMCBjb3JyZXNwb25kaW5nIHRvCisgICAgLy8gYSBsZW5ndGggb2YgNjU1MzYuCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qga0FwZHVNYXhEYXRhTGVuZ3RoID0gNjU1MzU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qga0FwZHVNYXhMZW5ndGggPSBrQXBkdU1heERhdGFM
ZW5ndGggKyBrQXBkdU1heEhlYWRlciArIDI7CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtX2Ns
YSB7IDAgfTsKKyAgICB1aW50OF90IG1faW5zIHsgMCB9OworICAgIHVpbnQ4X3QgbV9wMSB7IDAg
fTsKKyAgICB1aW50OF90IG1fcDIgeyAwIH07CisgICAgc2l6ZV90IG1fcmVzcG9uc2VMZW5ndGgg
eyAwIH07CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fZGF0YTsKK307CisKK30gLy8gbmFtZXNwYWNl
IGFwZHUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2FwZHUvQXBkdVJlc3BvbnNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vYXBkdS9BcGR1UmVzcG9uc2UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRlY2E3NDdjYTQ2OWQyODE4NWFhNTE2MTNiM2YwMTkxNWUwZTM1NmYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2FwZHUvQXBkdVJlc3BvbnNlLmNw
cApAQCAtMCwwICsxLDY4IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisv
LyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
Ly8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBcGR1UmVzcG9uc2UuaCIK
KworI2lmIEVOQUJMRShXRUJfQVVUSE4pCisKK25hbWVzcGFjZSBhcGR1IHsKKworLy8gc3RhdGlj
CitzdGQ6Om9wdGlvbmFsPEFwZHVSZXNwb25zZT4gQXBkdVJlc3BvbnNlOjpjcmVhdGVGcm9tTWVz
c2FnZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCit7CisgICAgLy8gSW52YWxpZCBtZXNz
YWdlIHNpemUsIGRhdGEgaXMgYXBwZW5kZWQgYnkgc3RhdHVzIGJ5dGUuCisgICAgaWYgKGRhdGEu
c2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHVpbnQxNl90
IHN0YXR1c0J5dGVzID0gZGF0YVtkYXRhLnNpemUoKSAtIDJdIDw8IDg7CisgICAgc3RhdHVzQnl0
ZXMgfD0gZGF0YVtkYXRhLnNpemUoKSAtIDFdOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IG5ld0Rh
dGE7CisgICAgbmV3RGF0YS5hcHBlbmRSYW5nZShkYXRhLmJlZ2luKCksIGRhdGEuZW5kKCkgLSAy
KTsKKyAgICByZXR1cm4gQXBkdVJlc3BvbnNlKFdURk1vdmUobmV3RGF0YSksIHN0YXRpY19jYXN0
PFN0YXR1cz4oc3RhdHVzQnl0ZXMpKTsKK30KKworQXBkdVJlc3BvbnNlOjpBcGR1UmVzcG9uc2Uo
VmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSwgU3RhdHVzIHJlc3BvbnNlU3RhdHVzKQorICAgIDogbV9k
YXRhKFdURk1vdmUoZGF0YSkpCisgICAgLCBtX3Jlc3BvbnNlU3RhdHVzKHJlc3BvbnNlU3RhdHVz
KQoreworfQorCitWZWN0b3I8dWludDhfdD4gQXBkdVJlc3BvbnNlOjpnZXRFbmNvZGVkUmVzcG9u
c2UoKSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkUmVzcG9uc2UgPSBtX2Rh
dGE7CisgICAgZW5jb2RlZFJlc3BvbnNlLmFwcGVuZChzdGF0aWNfY2FzdDx1aW50MTZfdD4obV9y
ZXNwb25zZVN0YXR1cykgPj4gOCAmIDB4ZmYpOworICAgIGVuY29kZWRSZXNwb25zZS5hcHBlbmQo
c3RhdGljX2Nhc3Q8dWludDE2X3Q+KG1fcmVzcG9uc2VTdGF0dXMpICYgMHhmZik7CisgICAgcmV0
dXJuIGVuY29kZWRSZXNwb25zZTsKK30KKworfSAvLyBuYW1lc3BhY2UgYXBkdQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQl9BVVRITikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXV0aG4vYXBkdS9BcGR1UmVzcG9uc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXV0aG4vYXBkdS9BcGR1UmVzcG9uc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODM4ZTgxZmIxMTljMWRhYzYw
NDgxNjNmMTA4OWRjMGIyNTc0OWEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdXRobi9hcGR1L0FwZHVSZXNwb25zZS5oCkBAIC0wLDAgKzEsNzQgQEAKKy8v
IENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRp
c3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgYXBkdSB7CisKKy8vIEFQRFUgcmVzcG9uc2VzIGFyZSBkZWZpbmVkIGFzIHBhcnQg
b2YgSVNPIDc4MTYtNC4gU2VyaWFsaXplZCByZXNwb25zZXMKKy8vIGNvbnNpc3Qgb2YgYSBkYXRh
IGZpZWxkIG9mIHZhcnlpbmcgbGVuZ3RoLCB1cCB0byBhIG1heGltdW0gNjU1MzYsIGFuZCBhCisv
LyB0d28gYnl0ZSBzdGF0dXMgZmllbGQuCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBBcGR1UmVzcG9u
c2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFwZHVSZXNwb25zZSk7CitwdWJsaWM6Cisg
ICAgLy8gU3RhdHVzIGJ5dGVzIGFyZSBzcGVjaWZpZWQgaW4gSVNPIDc4MTYtNC4KKyAgICBlbnVt
IGNsYXNzIFN0YXR1cyA6IHVpbnQxNl90IHsKKyAgICAgICAgU1dfTk9fRVJST1IgPSAweDkwMDAs
CisgICAgICAgIFNXX0NPTkRJVElPTlNfTk9UX1NBVElTRklFRCA9IDB4Njk4NSwKKyAgICAgICAg
U1dfV1JPTkdfREFUQSA9IDB4NkE4MCwKKyAgICAgICAgU1dfV1JPTkdfTEVOR1RIID0gMHg2NzAw
LAorICAgICAgICBTV19JTlNfTk9UX1NVUFBPUlRFRCA9IDB4NkQwMCwKKyAgICB9OworCisgICAg
Ly8gQ3JlYXRlIGEgQVBEVSByZXNwb25zZSBmcm9tIHRoZSBzZXJpYWxpemVkIG1lc3NhZ2UuCisg
ICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QXBkdVJlc3BvbnNlPiBjcmVhdGVGcm9tTWVzc2FnZShj
b25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOworCisgICAgQXBkdVJlc3BvbnNlKFZlY3Rvcjx1
aW50OF90PiYmIGRhdGEsIFN0YXR1cyk7CisgICAgQXBkdVJlc3BvbnNlKEFwZHVSZXNwb25zZSYm
IHRoYXQpID0gZGVmYXVsdDsKKyAgICBBcGR1UmVzcG9uc2UmIG9wZXJhdG9yPShBcGR1UmVzcG9u
c2UmJiB0aGF0KSA9IGRlZmF1bHQ7CisKKyAgICBWZWN0b3I8dWludDhfdD4gZ2V0RW5jb2RlZFJl
c3BvbnNlKCkgY29uc3Q7CisKKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEoKSBjb25z
dCB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4g
bV9yZXNwb25zZVN0YXR1czsgfQorCitwcml2YXRlOgorICAgIFZlY3Rvcjx1aW50OF90PiBtX2Rh
dGE7CisgICAgU3RhdHVzIG1fcmVzcG9uc2VTdGF0dXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBh
cGR1CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBlNzBk
YjgzOTQ0MWM4OGYxNjBhMGYyZTZiOWUwZTljNTUyZDZhN2Q0Li4xNmFkMmI5Nzk0NDQ3Y2FiOTZi
NzE3OTlkODYzZWZiZWE0MzVhYzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjU2LDYgKzI1Niw4IEBA
IE1vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5jcHAKIE1vZHVsZXMvd2ViYXV0
aG4vQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAogTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50
aWNhdG9yQ29vcmRpbmF0b3JDbGllbnQuY3BwCiBNb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNy
ZWRlbnRpYWwuY3BwCitNb2R1bGVzL3dlYmF1dGhuL2FwZHUvQXBkdUNvbW1hbmQuY3BwCitNb2R1
bGVzL3dlYmF1dGhuL2FwZHUvQXBkdVJlc3BvbnNlLmNwcAogTW9kdWxlcy93ZWJhdXRobi9jYm9y
L0NCT1JSZWFkZXIuY3BwCiBNb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUlZhbHVlLmNwcAogTW9k
dWxlcy93ZWJhdXRobi9jYm9yL0NCT1JXcml0ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjNlOWE2ODNmZmE2ZTFhNDk2
YzA5NzQ2ZjczNDU3ZjZkZjFiMDQ4NS4uMTVlZGJlMzZiYTMxNTQzNzRlZDU2YjBiY2QwYjQ3ZmIw
MTM2ZTFhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTc4Miw2ICsxNzgyLDggQEAKIAkJNTcwNkE2OTYxRERFNUM5NTAwQTAz
QjE0IC8qIENyeXB0b0FsZ29yaXRobVJzYU9hZXBQYXJhbXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MDZBNjk1MURERTVDOTUwMEEwM0IxNCAvKiBD
cnlwdG9BbGdvcml0aG1Sc2FPYWVwUGFyYW1zLmggKi87IH07CiAJCTU3MDZBNjk4MURERTVFNDYw
MEEwM0IxNCAvKiBKU1JzYU9hZXBQYXJhbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU3MDZBNjk3MURERTVFNDYwMEEwM0IxNCAvKiBKU1JzYU9hZXBQ
YXJhbXMuaCAqLzsgfTsKIAkJNTcxMjUyNjkxRTUyNEVCMTAwOEZGMzY5IC8qIENyeXB0b0FsZ29y
aXRobUFFU19DRkIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU3MTI1MjY4MUU1MjRFQjEwMDhGRjM2OSAvKiBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmgg
Ki87IH07CisJCTU3MTUyQjVBMjFDQjNFODgwMDBDMzdDQSAvKiBBcGR1Q29tbWFuZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcxNTJCNTgyMUNCMkUz
QjAwMEMzN0NBIC8qIEFwZHVDb21tYW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTcxNTJCNUMyMUNDMTkwMjAwMEMzN0NBIC8qIEFwZHVSZXNw
b25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcx
NTJCNTYyMUNCMkUzQTAwMEMzN0NBIC8qIEFwZHVSZXNwb25zZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU3MUYyMTg5MURBNTdDNTQwMDVDOUVG
RCAvKiBKU1N1YnRsZUNyeXB0by5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTcxRjIxODgxREE1N0M1NDAwNUM5RUZEIC8qIEpTU3VidGxlQ3J5cHRvLmgg
Ki87IH07CiAJCTU3MjA5M0QzMUREQ0VCOUEwMDMxMEFCMCAvKiBDcnlwdG9BbGdvcml0aG1BZXND
YmNDZmJQYXJhbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU3MjA5M0QyMUREQ0VCOUEwMDMxMEFCMCAvKiBDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQ
YXJhbXMuaCAqLzsgfTsKIAkJNTcyMUE5ODcxRUNFNTNCMTAwODEyOTVBIC8qIENyeXB0b0RpZ2Vz
dEFsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTcyMUE5ODYxRUNFNTNCMTAwODEyOTVBIC8qIENyeXB0b0RpZ2VzdEFsZ29yaXRobS5oICov
OyB9OwpAQCAtODU4OSw2ICs4NTkxLDEwIEBACiAJCTU3MDZBNjk5MURERTVFODUwMEEwM0IxNCAv
KiBKU1JzYU9hZXBQYXJhbXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNSc2FPYWVwUGFyYW1zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcx
MjUyNjgxRTUyNEVCMTAwOEZGMzY5IC8qIENyeXB0b0FsZ29yaXRobUFFU19DRkIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzEyNTI2QTFFNTI1MjdDMDA4RkYzNjkgLyogQ3J5
cHRvQWxnb3JpdGhtQUVTX0NGQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTcxNTJCNTUyMUNCMkUzQTAwMEMzN0NBIC8qIEFwZHVSZXNwb25zZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBcGR1UmVzcG9uc2UuY3BwOyBwYXRoID0g
TW9kdWxlcy93ZWJhdXRobi9hcGR1L0FwZHVSZXNwb25zZS5jcHA7IHNvdXJjZVRyZWUgPSBTT1VS
Q0VfUk9PVDsgfTsKKwkJNTcxNTJCNTYyMUNCMkUzQTAwMEMzN0NBIC8qIEFwZHVSZXNwb25zZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBcGR1UmVzcG9uc2UuaDsgcGF0aCA9
IE1vZHVsZXMvd2ViYXV0aG4vYXBkdS9BcGR1UmVzcG9uc2UuaDsgc291cmNlVHJlZSA9IFNPVVJD
RV9ST09UOyB9OworCQk1NzE1MkI1NzIxQ0IyRTNBMDAwQzM3Q0EgLyogQXBkdUNvbW1hbmQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQXBkdUNvbW1hbmQuY3BwOyBw
YXRoID0gTW9kdWxlcy93ZWJhdXRobi9hcGR1L0FwZHVDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9
IFNPVVJDRV9ST09UOyB9OworCQk1NzE1MkI1ODIxQ0IyRTNCMDAwQzM3Q0EgLyogQXBkdUNvbW1h
bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQXBkdUNvbW1hbmQuaDsgcGF0
aCA9IE1vZHVsZXMvd2ViYXV0aG4vYXBkdS9BcGR1Q29tbWFuZC5oOyBzb3VyY2VUcmVlID0gU09V
UkNFX1JPT1Q7IH07CiAJCTU3MUYyMTg4MURBNTdDNTQwMDVDOUVGRCAvKiBKU1N1YnRsZUNyeXB0
by5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N1YnRsZUNyeXB0by5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzFGMjE4QTFEQTU3QzdBMDA1QzlFRkQgLyog
SlNTdWJ0bGVDcnlwdG8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNTdWJ0bGVDcnlwdG8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzIwOTNE
MTFERENFQTRCMDAzMTBBQjAgLyogQWVzQ2JjQ2ZiUGFyYW1zLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBBZXNDYmNDZmJQ
YXJhbXMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkyNjEsNiArMTkyNjcs
MTcgQEAKIAkJCXBhdGggPSAidW5pZmllZC1zb3VyY2VzIjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCTU3MTUyQjUzMjFDQjJDRTMwMDBDMzdDQSAvKiBhcGR1ICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk1NzE1MkI1NzIxQ0IyRTNB
MDAwQzM3Q0EgLyogQXBkdUNvbW1hbmQuY3BwICovLAorCQkJCTU3MTUyQjU4MjFDQjJFM0IwMDBD
MzdDQSAvKiBBcGR1Q29tbWFuZC5oICovLAorCQkJCTU3MTUyQjU1MjFDQjJFM0EwMDBDMzdDQSAv
KiBBcGR1UmVzcG9uc2UuY3BwICovLAorCQkJCTU3MTUyQjU2MjFDQjJFM0EwMDBDMzdDQSAvKiBB
cGR1UmVzcG9uc2UuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gYXBkdTsKKwkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CisJCX07CiAJCTU3MzAzQkIzMjAwNkM2RUQwMDM1NTk2NSAvKiBjYm9yICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE5MzM4LDYgKzE5
MzU1LDcgQEAKIAkJNTdEODQ2MkExRkVBRjU3RjAwQ0EzNjgyIC8qIHdlYmF1dGhuICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1NzE1MkI1MzIxQ0IyQ0Uz
MDAwQzM3Q0EgLyogYXBkdSAqLywKIAkJCQk1NzMwM0JCMzIwMDZDNkVEMDAzNTU5NjUgLyogY2Jv
ciAqLywKIAkJCQk1NzhBNEJGQTIxNjZBRTAwMDBEMDhGMzQgLyogZmlkbyAqLywKIAkJCQk1NzMw
M0MyNzIwMDlCMkZDMDAzNTU5NjUgLyogQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLmgg
Ki8sCkBAIC0yNzgzOSw2ICsyNzg1Nyw4IEBACiAJCQkJNzE0QzdDNjcxRkRBRDJBOTAwRjJCRUUx
IC8qIEFuaW1hdGlvblBsYXliYWNrRXZlbnRJbml0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTAy
NUVDRDFGOTlGMENFMDA0QTI1MEMgLyogQW5pbWF0aW9uVGltZWxpbmUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNTgwRkFGMTQ5ODAwRDQwMEZCNUJEOCAvKiBBbmltYXRpb25VdGlsaXRpZXMuaCBp
biBIZWFkZXJzICovLAorCQkJCTU3MTUyQjVBMjFDQjNFODgwMDBDMzdDQSAvKiBBcGR1Q29tbWFu
ZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTcxNTJCNUMyMUNDMTkwMjAwMEMzN0NBIC8qIEFwZHVS
ZXNwb25zZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlERDcwOTlFNjQ5MjAwNTZFNTgxIC8q
IEFwcGVuZE5vZGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMURGNUE5NDFGN0VDNDMy
MDA1OEE0NzcgLyogQXBwbGVQYXlDb250YWN0RmllbGQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEx
MkM1OUVFMjAzNUZDOUIwMDEyMjM2QiAvKiBBcHBsZVBheUVycm9yLmggaW4gSGVhZGVycyAqLywK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjZjVh
NmFmMWM1ZWMxZTA2YWM2ODMzYjE3ZWI1ZTYzYzNlNGE2YjMzLi41OTc4ZDAyZjEyYjM0NWYwODNm
YWI4MmE0MzljNTNmNDM2YmViNmFhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTgtMTItMjAgIEppZXdlbiBUYW4g
IDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViQXV0aE5dIEltcG9ydCBhbiBB
UERVIGNvZGVyIGZyb20gQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5Mjk0OQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDY4Nzk5MzM+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBkdVRlc3QuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE4LTEyLTE4ICBKb25hdGhhbiBCZWRh
cmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICB3ZWJraXRweTogSWdub3JlIGRldmlj
ZSB0eXBlIGZvciB0ZXN0IHdoZW4gdXNpbmcgLS1mb3JjZQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA3ZThlZDNiZTUxNDg0MzA4ZTBkOGExYTliNzhiYTM1OGVmZjU1NGE1Li43OWM2MGE3M2Zi
NWU3MjQwOGQxMjY2ZjM1ZjBkNGZjZWY4ZDhmYzFjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMjU2LDYgKzI1Niw3IEBACiAJCTU3MTRFQ0I5MUNBOEI1QjAwMDA1MUFDOCAvKiBEb3dubG9h
ZFJlcXVlc3RPcmlnaW5hbFVSTC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MTRFQ0I4MUNBOEI1ODgwMDA1MUFDOCAvKiBEb3dubG9h
ZFJlcXVlc3RPcmlnaW5hbFVSTC5odG1sICovOyB9OwogCQk1NzE0RUNCQjFDQThCRkU0MDAwNTFB
QzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MTRFQ0JBMUNBOEJGRDEw
MDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTEZyYW1lLmh0bWwgKi87IH07CiAJ
CTU3MTRFQ0JEMUNBOEMyMkEwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTDIu
aHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1NzE0RUNCQzFDQThDMjE4MDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwy
Lmh0bWwgKi87IH07CisJCTU3MTUyQjVFMjFDQzIwNDUwMDBDMzdDQSAvKiBBcGR1VGVzdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzE1MkI1RDIx
Q0MyMDQ1MDAwQzM3Q0EgLyogQXBkdVRlc3QuY3BwICovOyB9OwogCQk1NzFGN0ZEMDFGMjk2MUZC
MDA5NDY2NDggLyogSW5kZXhlZERCU3RydWN0dXJlZENsb25lQmFja3dhcmRDb21wYXRpYmlsaXR5
LnNxbGl0ZTMtd2FsIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU3MUY3RkNGMUYyOTYxRTEwMDk0NjY0OCAvKiBJbmRleGVkREJTdHJ1Y3R1cmVk
Q2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHkuc3FsaXRlMy13YWwgKi87IH07CiAJCTU3MkI0MDM0
MjE3NjlBODgwMDBBRDQzRSAvKiBDdGFwUmVxdWVzdFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyQjQwMzMyMTc2OUE4ODAwMEFENDNFIC8q
IEN0YXBSZXF1ZXN0VGVzdC5jcHAgKi87IH07CiAJCTU3MkI0MDQ0MjE3ODFCNDMwMDBBRDQzRSAv
KiBDdGFwUmVzcG9uc2VUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU3MkI0MDQzMjE3ODFCNDIwMDBBRDQzRSAvKiBDdGFwUmVzcG9uc2VUZXN0
LmNwcCAqLzsgfTsKQEAgLTE2MDIsNiArMTYwMyw3IEBACiAJCTU3MTRFQ0I4MUNBOEI1ODgwMDA1
MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTC5odG1sICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5o
dG1sOyBwYXRoID0gRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwuaHRtbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTcxNEVDQkExQ0E4QkZEMTAwMDUxQUM4IC8qIERvd25sb2FkUmVx
dWVzdE9yaWdpbmFsVVJMRnJhbWUuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IERv
d25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMRnJhbWUuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTcxNEVDQkMxQ0E4QzIxODAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdp
bmFsVVJMMi5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gRG93bmxvYWRSZXF1ZXN0
T3JpZ2luYWxVUkwyLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3MTUyQjVE
MjFDQzIwNDUwMDBDMzdDQSAvKiBBcGR1VGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBBcGR1VGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU3MUY3RkNGMUYyOTYxRTEwMDk0NjY0OCAvKiBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNr
d2FyZENvbXBhdGliaWxpdHkuc3FsaXRlMy13YWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBwYXRoID0gIkluZGV4ZWREQlN0cnVjdHVyZWRD
bG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0eS5zcWxpdGUzLXdhbCI7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTU3MkI0MDMzMjE3NjlBODgwMDBBRDQzRSAvKiBDdGFwUmVxdWVzdFRlc3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3RhcFJlcXVlc3RUZXN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcyQjQwMzUyMTc2QTAyOTAwMEFE
NDNFIC8qIEZpZG9UZXN0RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWRvVGVzdERhdGEuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2MTMsNiArMjYxNSw3IEBACiAJCQkJMzE2MkFF
OUExRTZGMkY4RjAwMEU0REJDIC8qIG1hYyAqLywKIAkJCQlBQkY1MTA2MzJBMTlCOEFDN0VDNDBF
MTcgLyogQWJvcnRhYmxlVGFza1F1ZXVlLmNwcCAqLywKIAkJCQk3QTkwOUE2RjFEODc3NDc1MDA3
RTEwRjggLyogQWZmaW5lVHJhbnNmb3JtLmNwcCAqLywKKwkJCQk1NzE1MkI1RDIxQ0MyMDQ1MDAw
QzM3Q0EgLyogQXBkdVRlc3QuY3BwICovLAogCQkJCTYzNTRGNEQwMUY3QzNBQjUwMEQ4OURGMyAv
KiBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcCAqLywKIAkJCQk5M0E3MjBFNTE4RjFBMEU4
MDBBODQ4RTEgLyogQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi8sCiAJCQkJMDdDMDQ2QzkxRTQyNTcz
RTAwNzIwMUU3IC8qIENBUmluZ0J1ZmZlci5jcHAgKi8sCkBAIC0zODM0LDYgKzM4MzcsNyBAQAog
CQkJCTdBOTA5QTdEMUQ4Nzc0ODAwMDdFMTBGOCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTFERjc0MzIxQzQxQjY1ODAwQTJGNEQwIC8qIEFsd2F5c1JldmFsaWRh
dGVkVVJMU2NoZW1lcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJERTcxQUZFMUQ0OUMwQkQwMDkw
NDA5NCAvKiBBbmltYXRlZFJlc2l6ZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTU3MTUyQjVFMjFD
QzIwNDUwMDBDMzdDQSAvKiBBcGR1VGVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2M0Y2Njgy
MjFGOTdGN0Y5MDAzMkVFNTEgLyogQXBwbGljYXRpb25NYW5pZmVzdC5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTYzNTRGNEQxMUY3QzNBQjUwMEQ4OURGMyAvKiBBcHBsaWNhdGlvbk1hbmlmZXN0UGFy
c2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgzNDEzOEM3MjAzMjYxQ0EwMEYyNjk2MCAvKiBB
c3luY1BvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZS5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FwZHVUZXN0LmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcGR1VGVzdC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzE5NjU1MDA2NmQ1ZWFlZjExNDg0ZjlkNTcxYWI5MmQ2OTY0ODUzOAotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcGR1VGVzdC5jcHAKQEAgLTAs
MCArMSwxOTQgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1l
dDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
Ky8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLwor
Ly8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVVRITikKKworI2luY2x1
ZGUgPFdlYkNvcmUvQXBkdUNvbW1hbmQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0FwZHVSZXNwb25z
ZS5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK3VzaW5nIG5hbWVzcGFjZSBhcGR1
OworCitURVNUKEFwZHVUZXN0LCBUZXN0RGVzZXJpYWxpemVCYXNpYykKK3sKKyAgICB1aW50OF90
IGNsYSA9IDB4QUE7CisgICAgdWludDhfdCBpbnMgPSAweEFCOworICAgIHVpbnQ4X3QgcDEgPSAw
eEFDOworICAgIHVpbnQ4X3QgcDIgPSAweEFEOworICAgIFZlY3Rvcjx1aW50OF90PiBtZXNzYWdl
KHsgY2xhLCBpbnMsIHAxLCBwMiB9KTsKKyAgICBhdXRvIGNtZCA9IEFwZHVDb21tYW5kOjpjcmVh
dGVGcm9tTWVzc2FnZShtZXNzYWdlKTsKKyAgICBBU1NFUlRfVFJVRShjbWQpOworICAgIEVYUEVD
VF9FUSgwdSwgY21kLT5yZXNwb25zZUxlbmd0aCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjbWQtPmRh
dGEoKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUShjbGEsIGNtZC0+Y2xhKCkpOworICAgIEVY
UEVDVF9FUShpbnMsIGNtZC0+aW5zKCkpOworICAgIEVYUEVDVF9FUShwMSwgY21kLT5wMSgpKTsK
KyAgICBFWFBFQ1RfRVEocDIsIGNtZC0+cDIoKSk7CisgICAgLy8gSW52YWxpZCBsZW5ndGguCisg
ICAgbWVzc2FnZSA9IHsgY2xhLCBpbnMsIHAxIH07CisgICAgRVhQRUNUX0ZBTFNFKEFwZHVDb21t
YW5kOjpjcmVhdGVGcm9tTWVzc2FnZShtZXNzYWdlKSk7CisgICAgbWVzc2FnZS5hcHBlbmQocDIp
OworICAgIG1lc3NhZ2UuYXBwZW5kKDApOworICAgIC8vIFNldCBBUERVIGNvbW1hbmQgZGF0YSBz
aXplIGFzIG1heGltdW0uCisgICAgbWVzc2FnZS5hcHBlbmQoMHhGRik7CisgICAgbWVzc2FnZS5h
cHBlbmQoMHhGRik7CisgICAgbWVzc2FnZS5yZXNpemUobWVzc2FnZS5zaXplKCkgKyBBcGR1Q29t
bWFuZDo6a0FwZHVNYXhEYXRhTGVuZ3RoKTsKKyAgICAvLyBTZXQgbWF4aW11bSByZXNwb25zZSBz
aXplLgorICAgIG1lc3NhZ2UuYXBwZW5kKDApOworICAgIG1lc3NhZ2UuYXBwZW5kKDApOworICAg
IC8vIHxtZXNzYWdlfCBpcyBBUERVIGVuY29kZWQgYnl0ZSBhcnJheSB3aXRoIG1heGltdW0gZGF0
YSBsZW5ndGguCisgICAgRVhQRUNUX1RSVUUoQXBkdUNvbW1hbmQ6OmNyZWF0ZUZyb21NZXNzYWdl
KG1lc3NhZ2UpKTsKKyAgICBtZXNzYWdlLmFwcGVuZCgwKTsKKyAgICAvLyB8bWVzc2FnZXwgZW5j
b2RpbmcgY29udGFpbmluZyBkYXRhIG9mIHNpemUgIG1heGltdW0gZGF0YSBsZW5ndGggKyAxLgor
ICAgIEVYUEVDVF9GQUxTRShBcGR1Q29tbWFuZDo6Y3JlYXRlRnJvbU1lc3NhZ2UobWVzc2FnZSkp
OworfQorCitURVNUKEFwZHVUZXN0LCBUZXN0RGVzZXJpYWxpemVDb21wbGV4KQoreworICAgIHVp
bnQ4X3QgY2xhID0gMHhBQTsKKyAgICB1aW50OF90IGlucyA9IDB4QUI7CisgICAgdWludDhfdCBw
MSA9IDB4QUM7CisgICAgdWludDhfdCBwMiA9IDB4QUQ7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRh
dGEoQXBkdUNvbW1hbmQ6OmtBcGR1TWF4RGF0YUxlbmd0aCAtIEFwZHVDb21tYW5kOjprQXBkdU1h
eEhlYWRlciAtIDIsIDB4N0YpOworICAgIFZlY3Rvcjx1aW50OF90PiBtZXNzYWdlID0geyBjbGEs
IGlucywgcDEsIHAyLCAwIH07CisgICAgbWVzc2FnZS5hcHBlbmQoKGRhdGEuc2l6ZSgpID4+IDgp
ICYgMHhmZik7CisgICAgbWVzc2FnZS5hcHBlbmQoZGF0YS5zaXplKCkgJiAweGZmKTsKKyAgICBt
ZXNzYWdlLmFwcGVuZFZlY3RvcihkYXRhKTsKKworICAgIC8vIENyZWF0ZSBhIG1lc3NhZ2Ugd2l0
aCBubyByZXNwb25zZSBleHBlY3RlZC4KKyAgICBhdXRvIGNtZE5vUmVzcG9uc2UgPSBBcGR1Q29t
bWFuZDo6Y3JlYXRlRnJvbU1lc3NhZ2UobWVzc2FnZSk7CisgICAgQVNTRVJUX1RSVUUoY21kTm9S
ZXNwb25zZSk7CisgICAgRVhQRUNUX0VRKDB1LCBjbWROb1Jlc3BvbnNlLT5yZXNwb25zZUxlbmd0
aCgpKTsKKyAgICBFWFBFQ1RfRVEoZGF0YSwgY21kTm9SZXNwb25zZS0+ZGF0YSgpKTsKKyAgICBF
WFBFQ1RfRVEoY2xhLCBjbWROb1Jlc3BvbnNlLT5jbGEoKSk7CisgICAgRVhQRUNUX0VRKGlucywg
Y21kTm9SZXNwb25zZS0+aW5zKCkpOworICAgIEVYUEVDVF9FUShwMSwgY21kTm9SZXNwb25zZS0+
cDEoKSk7CisgICAgRVhQRUNUX0VRKHAyLCBjbWROb1Jlc3BvbnNlLT5wMigpKTsKKworICAgIC8v
IEFkZCByZXNwb25zZSBsZW5ndGggdG8gbWVzc2FnZS4KKyAgICBtZXNzYWdlLmFwcGVuZCgweEYx
KTsKKyAgICBtZXNzYWdlLmFwcGVuZCgweEQwKTsKKyAgICBhdXRvIGNtZCA9IEFwZHVDb21tYW5k
OjpjcmVhdGVGcm9tTWVzc2FnZShtZXNzYWdlKTsKKyAgICBBU1NFUlRfVFJVRShjbWQpOworICAg
IEVYUEVDVF9FUShkYXRhLCBjbWQtPmRhdGEoKSk7CisgICAgRVhQRUNUX0VRKGNsYSwgY21kLT5j
bGEoKSk7CisgICAgRVhQRUNUX0VRKGlucywgY21kLT5pbnMoKSk7CisgICAgRVhQRUNUX0VRKHAx
LCBjbWQtPnAxKCkpOworICAgIEVYUEVDVF9FUShwMiwgY21kLT5wMigpKTsKKyAgICBFWFBFQ1Rf
RVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigweEYxRDApLCBjbWQtPnJlc3BvbnNlTGVuZ3RoKCkpOwor
fQorCitURVNUKEFwZHVUZXN0LCBUZXN0RGVzZXJpYWxpemVSZXNwb25zZSkKK3sKKyAgICBBcGR1
UmVzcG9uc2U6OlN0YXR1cyBzdGF0dXM7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRlc3RWZWN0b3I7
CisgICAgLy8gSW52YWxpZCBsZW5ndGguCisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1lc3NhZ2UoeyAw
eEFBIH0pOworICAgIEVYUEVDVF9GQUxTRShBcGR1UmVzcG9uc2U6OmNyZWF0ZUZyb21NZXNzYWdl
KG1lc3NhZ2UpKTsKKyAgICAvLyBWYWxpZCBsZW5ndGggYW5kIHN0YXR1cy4KKyAgICBzdGF0dXMg
PSBBcGR1UmVzcG9uc2U6OlN0YXR1czo6U1dfQ09ORElUSU9OU19OT1RfU0FUSVNGSUVEOworICAg
IG1lc3NhZ2UgPSB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PHVpbnQxNl90Pihz
dGF0dXMpID4+IDgpLCBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0dXMpIH07CisgICAgYXV0byBy
ZXNwb25zZSA9IEFwZHVSZXNwb25zZTo6Y3JlYXRlRnJvbU1lc3NhZ2UobWVzc2FnZSk7CisgICAg
QVNTRVJUX1RSVUUocmVzcG9uc2UpOworICAgIEVYUEVDVF9FUShBcGR1UmVzcG9uc2U6OlN0YXR1
czo6U1dfQ09ORElUSU9OU19OT1RfU0FUSVNGSUVELCByZXNwb25zZS0+c3RhdHVzKCkpOworICAg
IEVYUEVDVF9FUShyZXNwb25zZS0+ZGF0YSgpLCBWZWN0b3I8dWludDhfdD4oKSk7CisgICAgLy8g
VmFsaWQgbGVuZ3RoIGFuZCBzdGF0dXMuCisgICAgc3RhdHVzID0gQXBkdVJlc3BvbnNlOjpTdGF0
dXM6OlNXX05PX0VSUk9SOworICAgIG1lc3NhZ2UgPSB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0
YXRpY19jYXN0PHVpbnQxNl90PihzdGF0dXMpID4+IDgpLCBzdGF0aWNfY2FzdDx1aW50OF90Pihz
dGF0dXMpfTsKKyAgICB0ZXN0VmVjdG9yID0geyAweDAxLCAweDAyLCAweEVGLCAweEZGIH07Cisg
ICAgbWVzc2FnZS5pbnNlcnRWZWN0b3IoMCwgdGVzdFZlY3Rvcik7CisgICAgcmVzcG9uc2UgPSBB
cGR1UmVzcG9uc2U6OmNyZWF0ZUZyb21NZXNzYWdlKG1lc3NhZ2UpOworICAgIEFTU0VSVF9UUlVF
KHJlc3BvbnNlKTsKKyAgICBFWFBFQ1RfRVEoQXBkdVJlc3BvbnNlOjpTdGF0dXM6OlNXX05PX0VS
Uk9SLCByZXNwb25zZS0+c3RhdHVzKCkpOworICAgIEVYUEVDVF9FUShyZXNwb25zZS0+ZGF0YSgp
LCB0ZXN0VmVjdG9yKTsKK30KKworVEVTVChBcGR1VGVzdCwgVGVzdFNlcmlhbGl6ZUNvbW1hbmQp
Cit7CisgICAgQXBkdUNvbW1hbmQgY21kOworICAgIGNtZC5zZXRDbGEoMHhBKTsKKyAgICBjbWQu
c2V0SW5zKDB4Qik7CisgICAgY21kLnNldFAxKDB4Qyk7CisgICAgY21kLnNldFAyKDB4RCk7Cisg
ICAgLy8gTm8gZGF0YSwgbm8gcmVzcG9uc2UgZXhwZWN0ZWQuCisgICAgVmVjdG9yPHVpbnQ4X3Q+
IGV4cGVjdGVkKHsgMHhBLCAweEIsIDB4QywgMHhEIH0pOworICAgIEFTU0VSVChleHBlY3RlZCA9
PSBjbWQuZ2V0RW5jb2RlZENvbW1hbmQoKSk7CisgICAgYXV0byBkZXNlcmlhbGl6ZWRDbWQgPSBB
cGR1Q29tbWFuZDo6Y3JlYXRlRnJvbU1lc3NhZ2UoZXhwZWN0ZWQpOworICAgIEFTU0VSVF9UUlVF
KGRlc2VyaWFsaXplZENtZCk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkLCBkZXNlcmlhbGl6ZWRD
bWQtPmdldEVuY29kZWRDb21tYW5kKCkpOworICAgIC8vIE5vIGRhdGEsIHJlc3BvbnNlIGV4cGVj
dGVkLgorICAgIGNtZC5zZXRSZXNwb25zZUxlbmd0aCgweENBRkUpOworICAgIGV4cGVjdGVkID0g
eyAweEEsIDB4QiwgMHhDLCAweEQsIDB4MCwgMHhDQSwgMHhGRSB9OworICAgIEVYUEVDVF9FUShl
eHBlY3RlZCwgY21kLmdldEVuY29kZWRDb21tYW5kKCkpOworICAgIGRlc2VyaWFsaXplZENtZCA9
IEFwZHVDb21tYW5kOjpjcmVhdGVGcm9tTWVzc2FnZShleHBlY3RlZCk7CisgICAgQVNTRVJUX1RS
VUUoZGVzZXJpYWxpemVkQ21kKTsKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIGRlc2VyaWFsaXpl
ZENtZC0+Z2V0RW5jb2RlZENvbW1hbmQoKSk7CisgICAgLy8gRGF0YSBleGlzdHMsIHJlc3BvbnNl
IGV4cGVjdGVkLgorICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhKHsgMHgxLCAweDIsIDB4MywgMHg0
IH0pOworICAgIGNtZC5zZXREYXRhKFdURk1vdmUoZGF0YSkpOworICAgIGV4cGVjdGVkID0geyAw
eEEsIDB4QiwgMHhDLCAweEQsIDB4MCwgIDB4MCwgMHg0LCAweDEsIDB4MiwgMHgzLCAweDQsIDB4
Q0EsIDB4RkUgfTsKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIGNtZC5nZXRFbmNvZGVkQ29tbWFu
ZCgpKTsKKyAgICBkZXNlcmlhbGl6ZWRDbWQgPSBBcGR1Q29tbWFuZDo6Y3JlYXRlRnJvbU1lc3Nh
Z2UoZXhwZWN0ZWQpOworICAgIEFTU0VSVF9UUlVFKGRlc2VyaWFsaXplZENtZCk7CisgICAgRVhQ
RUNUX0VRKGV4cGVjdGVkLCBkZXNlcmlhbGl6ZWRDbWQtPmdldEVuY29kZWRDb21tYW5kKCkpOwor
ICAgIC8vIERhdGEgZXhpc3RzLCBubyByZXNwb25zZSBleHBlY3RlZC4KKyAgICBjbWQuc2V0UmVz
cG9uc2VMZW5ndGgoMCk7CisgICAgZXhwZWN0ZWQgPSB7IDB4QSwgMHhCLCAweEMsIDB4RCwgMHgw
LCAweDAsIDB4NCwgMHgxLCAweDIsIDB4MywgMHg0IH07CisgICAgRVhQRUNUX0VRKGV4cGVjdGVk
LCBjbWQuZ2V0RW5jb2RlZENvbW1hbmQoKSk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkLCBBcGR1
Q29tbWFuZDo6Y3JlYXRlRnJvbU1lc3NhZ2UoZXhwZWN0ZWQpLT5nZXRFbmNvZGVkQ29tbWFuZCgp
KTsKK30KKworVEVTVChBcGR1VGVzdCwgVGVzdFNlcmlhbGl6ZUVkZ2VDYXNlcykKK3sKKyAgICBB
cGR1Q29tbWFuZCBjbWQ7CisgICAgY21kLnNldENsYSgweEEpOworICAgIGNtZC5zZXRJbnMoMHhC
KTsKKyAgICBjbWQuc2V0UDEoMHhDKTsKKyAgICBjbWQuc2V0UDIoMHhEKTsKKyAgICAvLyBTZXQg
cmVzcG9uc2UgbGVuZ3RoIHRvIG1heGltdW0sIHdoaWNoIHNob3VsZCBzZXJpYWxpemUgdG8gMHgw
MDAwLgorICAgIGNtZC5zZXRSZXNwb25zZUxlbmd0aChBcGR1Q29tbWFuZDo6a0FwZHVNYXhSZXNw
b25zZUxlbmd0aCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGV4cGVjdGVkKHsgMHhBLCAweEIsIDB4
QywgMHhELCAweDAsIDB4MCwgMHgwIH0pOworICAgIEVYUEVDVF9FUShleHBlY3RlZCwgY21kLmdl
dEVuY29kZWRDb21tYW5kKCkpOworICAgIGF1dG8gZGVzZXJpYWxpemVkQ21kID0gQXBkdUNvbW1h
bmQ6OmNyZWF0ZUZyb21NZXNzYWdlKGV4cGVjdGVkKTsKKyAgICBBU1NFUlRfVFJVRShkZXNlcmlh
bGl6ZWRDbWQpOworICAgIEVYUEVDVF9FUShleHBlY3RlZCwgZGVzZXJpYWxpemVkQ21kLT5nZXRF
bmNvZGVkQ29tbWFuZCgpKTsKKyAgICAvLyBNYXhpbXVtIGRhdGEgc2l6ZS4KKyAgICBWZWN0b3I8
dWludDhfdD4gb3ZlcnNpemVkKEFwZHVDb21tYW5kOjprQXBkdU1heERhdGFMZW5ndGgpOworICAg
IGNtZC5zZXREYXRhKFdURk1vdmUob3ZlcnNpemVkKSk7CisgICAgZGVzZXJpYWxpemVkQ21kID0g
QXBkdUNvbW1hbmQ6OmNyZWF0ZUZyb21NZXNzYWdlKGNtZC5nZXRFbmNvZGVkQ29tbWFuZCgpKTsK
KyAgICBBU1NFUlRfVFJVRShkZXNlcmlhbGl6ZWRDbWQpOworICAgIEVYUEVDVF9FUShjbWQuZ2V0
RW5jb2RlZENvbW1hbmQoKSwgZGVzZXJpYWxpemVkQ21kLT5nZXRFbmNvZGVkQ29tbWFuZCgpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
Ql9BVVRITikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357899</attachid>
            <date>2018-12-20 16:45:08 -0800</date>
            <delta_ts>2018-12-21 15:07:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192949-20181220164507.patch</filename>
            <type>text/plain</type>
            <size>38346</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmMxMGJhYzYyMGVkNjI0
YzZmMmYxYzA3NTUxYWZkNWY3MmY0MmI2Yi4uZmY1YTA4M2MyZDI3NzYyY2VkYWFmMGZlMmM4NmQz
ZGNlMjQ4OTdiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDE4LTEyLTIwICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhOXSBJbXBv
cnQgYW4gQVBEVSBjb2RlciBmcm9tIENocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI5NDkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ2
ODc5OTMzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggaW1wb3J0cyBhbiBBUERVIGNvZGVyIGZyb20gQ2hyb21pdW0uIEhlcmUgaXMg
dGhlIGRvY3VtZW50YXRpb246CisgICAgICAgIGh0dHBzOi8vZmlkb2FsbGlhbmNlLm9yZy9zcGVj
cy9maWRvLXUyZi12MS4yLXBzLTIwMTcwNDExL2ZpZG8tdTJmLXJhdy1tZXNzYWdlLWZvcm1hdHMt
djEuMi1wcy0yMDE3MDQxMS5odG1sI3UyZi1tZXNzYWdlLWZyYW1pbmcKKyAgICAgICAgQVBEVSBp
cyBhIGJpbmFyeSBmb3JtYXQgdG8gZnJhbWUgYW55IFUyRiByZXF1ZXN0cy9yZXNwb25zZXMgaW50
byBiaW5hcmllcy4gSXQgaXMgZXF1aXZhbGVudCB0byBDQk9SIGluIENUQVAyLgorCisgICAgICAg
IEhlcmUgaXMgYSBsaXN0IG9mIGZpbGVzIHRoYXQgYXJlIGltcG9ydGVkIGZyb20gQ2hyb21pdW06
CisgICAgICAgIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9jb21wb25lbnRz
L2FwZHUvYXBkdV9jb21tYW5kLmNjP3JjbD1hMmYyOTBjMTBkMTMyZjUzNTE4ZTdmOTlkNTYzNWVl
ODE0ZmY4MDkwCisgICAgICAgIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9j
b21wb25lbnRzL2FwZHUvYXBkdV9jb21tYW5kLmg/cmNsPTg2N2IxMDM0ODFmNmY0Y2NjNzlhNjli
YmExNmMxMWVlZmFjM2NkYjYKKyAgICAgICAgaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21p
dW0vc3JjL2NvbXBvbmVudHMvYXBkdS9hcGR1X3Jlc3BvbnNlLmNjP3JjbD04NjdiMTAzNDgxZjZm
NGNjYzc5YTY5YmJhMTZjMTFlZWZhYzNjZGI2CisgICAgICAgIGh0dHBzOi8vY3MuY2hyb21pdW0u
b3JnL2Nocm9taXVtL3NyYy9jb21wb25lbnRzL2FwZHUvYXBkdV9yZXNwb25zZS5oP3JjbD04Njdi
MTAzNDgxZjZmNGNjYzc5YTY5YmJhMTZjMTFlZWZhYzNjZGI2CisgICAgICAgIGh0dHBzOi8vY3Mu
Y2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9jb21wb25lbnRzL2FwZHUvYXBkdV91bml0dGVzdC5j
Yz9yY2w9ODY3YjEwMzQ4MWY2ZjRjY2M3OWE2OWJiYTE2YzExZWVmYWMzY2RiNgorCisgICAgICAg
IENvdmVyZWQgYnkgQVBJIHRlc3RzLgorCisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9hcGR1
L0FwZHVDb21tYW5kLmNwcDogQWRkZWQuCisgICAgICAgIChhcGR1OjpBcGR1Q29tbWFuZDo6Y3Jl
YXRlRnJvbU1lc3NhZ2UpOgorICAgICAgICAoYXBkdTo6QXBkdUNvbW1hbmQ6OkFwZHVDb21tYW5k
KToKKyAgICAgICAgKGFwZHU6OkFwZHVDb21tYW5kOjpnZXRFbmNvZGVkQ29tbWFuZCBjb25zdCk6
CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9hcGR1L0FwZHVDb21tYW5kLmg6IEFkZGVkLgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vYXBkdS9BcGR1UmVzcG9uc2UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKGFwZHU6OkFwZHVSZXNwb25zZTo6Y3JlYXRlRnJvbU1lc3NhZ2UpOgorICAgICAg
ICAoYXBkdTo6QXBkdVJlc3BvbnNlOjpBcGR1UmVzcG9uc2UpOgorICAgICAgICAoYXBkdTo6QXBk
dVJlc3BvbnNlOjpnZXRFbmNvZGVkUmVzcG9uc2UgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMv
d2ViYXV0aG4vYXBkdS9BcGR1UmVzcG9uc2UuaDogQWRkZWQuCisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE4
LTEyLTIwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIE9w
dGlvbmFsOjp2YWx1ZU9yKCkgaW5zdGVhZCBvZiBPcHRpb25hbDo6dmFsdWVfb3IoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9hcGR1L0FwZHVDb21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vYXBkdS9BcGR1Q29tbWFuZC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzQ1ODFkNzJiMzhmNDE4ZjgxOGFhMGYxYzBkNThlMzE2ZDQ1ZjQyOQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vYXBkdS9BcGR1
Q29tbWFuZC5jcHAKQEAgLTAsMCArMSwxNDkgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJv
bWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
Ky8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFwZHVD
b21tYW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorCituYW1lc3BhY2UgYXBkdSB7CisK
K25hbWVzcGFjZSB7CisKKy8vIEFQRFUgY29tbWFuZCBkYXRhIGxlbmd0aCBpcyAyIGJ5dGVzIGVu
Y29kZWQgaW4gYmlnIGVuZGlhbiBvcmRlci4KK3VpbnQxNl90IHBhcnNlTWVzc2FnZUxlbmd0aChj
b25zdCBWZWN0b3I8dWludDhfdD4mIG1lc3NhZ2UsIHNpemVfdCBvZmZzZXQpCit7CisgICAgQVNT
RVJUKG1lc3NhZ2Uuc2l6ZSgpID49IG9mZnNldCArIDIpOworICAgIHJldHVybiAobWVzc2FnZVtv
ZmZzZXRdIDw8IDgpIHwgbWVzc2FnZVtvZmZzZXQgKyAxXTsKK30KKworfSAvLyBuYW1lc3BhY2UK
KworT3B0aW9uYWw8QXBkdUNvbW1hbmQ+IEFwZHVDb21tYW5kOjpjcmVhdGVGcm9tTWVzc2FnZShj
b25zdCBWZWN0b3I8dWludDhfdD4mIG1lc3NhZ2UpCit7CisgICAgaWYgKG1lc3NhZ2Uuc2l6ZSgp
IDwga0FwZHVNaW5IZWFkZXIgfHwgbWVzc2FnZS5zaXplKCkgPiBrQXBkdU1heExlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHVpbnQ4X3QgY2xhID0gbWVzc2FnZVsw
XTsKKyAgICB1aW50OF90IGlucyA9IG1lc3NhZ2VbMV07CisgICAgdWludDhfdCBwMSA9IG1lc3Nh
Z2VbMl07CisgICAgdWludDhfdCBwMiA9IG1lc3NhZ2VbM107CisKKyAgICBzaXplX3QgcmVzcG9u
c2VMZW5ndGggPSAwOworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworCisgICAgc3dpdGNoICht
ZXNzYWdlLnNpemUoKSkgeworICAgIC8vIE5vIGRhdGEgcHJlc2VudDsgbm8gZXhwZWN0ZWQgcmVz
cG9uc2UuCisgICAgY2FzZSBrQXBkdU1pbkhlYWRlcjoKKyAgICAgICAgYnJlYWs7CisgICAgLy8g
SW52YWxpZCBlbmNvZGluZyBzaXplcy4KKyAgICBjYXNlIGtBcGR1TWluSGVhZGVyICsgMToKKyAg
ICBjYXNlIGtBcGR1TWluSGVhZGVyICsgMjoKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICAvLyBObyBkYXRhIHByZXNlbnQ7IHJlc3BvbnNlIGV4cGVjdGVkLgorICAgIGNhc2Uga0Fw
ZHVNaW5IZWFkZXIgKyAzOgorICAgICAgICAvLyBGaWZ0aCBieXRlIG11c3QgYmUgMC4KKyAgICAg
ICAgaWYgKG1lc3NhZ2VbNF0pCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICByZXNwb25zZUxlbmd0aCA9IHBhcnNlTWVzc2FnZUxlbmd0aChtZXNzYWdlLCBrQXBkdUNv
bW1hbmRMZW5ndGhPZmZzZXQpOworICAgICAgICAvLyBTcGVjaWFsIGNhc2Ugd2hlcmUgcmVzcG9u
c2UgbGVuZ3RoIG9mIDB4MDAwMCBjb3JyZXNwb25kcyB0byA2NTUzNgorICAgICAgICAvLyBhcyBk
ZWZpbmVkIGluIElTTzc4MTYtNC4KKyAgICAgICAgaWYgKCFyZXNwb25zZUxlbmd0aCkKKyAgICAg
ICAgICAgIHJlc3BvbnNlTGVuZ3RoID0ga0FwZHVNYXhSZXNwb25zZUxlbmd0aDsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gRmlmdGggYnl0ZSBtdXN0IGJlIDAuCisg
ICAgICAgIGlmIChtZXNzYWdlWzRdKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICAgICAgYXV0byBkYXRhTGVuZ3RoID0gcGFyc2VNZXNzYWdlTGVuZ3RoKG1lc3NhZ2UsIGtB
cGR1Q29tbWFuZExlbmd0aE9mZnNldCk7CisKKyAgICAgICAgaWYgKG1lc3NhZ2Uuc2l6ZSgpID09
IGRhdGFMZW5ndGggKyBrQXBkdUNvbW1hbmREYXRhT2Zmc2V0KSB7CisgICAgICAgICAgICAvLyBO
byByZXNwb25zZSBleHBlY3RlZC4KKyAgICAgICAgICAgIGRhdGEuYXBwZW5kUmFuZ2UobWVzc2Fn
ZS5iZWdpbigpICsga0FwZHVDb21tYW5kRGF0YU9mZnNldCwgbWVzc2FnZS5lbmQoKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAobWVzc2FnZS5zaXplKCkgPT0gZGF0YUxlbmd0aCArIGtBcGR1Q29tbWFu
ZERhdGFPZmZzZXQgKyAyKSB7CisgICAgICAgICAgICAvLyBNYXhpbXVtIHJlc3BvbnNlIHNpemUg
aXMgc3RvcmVkIGluIGZpbmFsIDIgYnl0ZXMuCisgICAgICAgICAgICBkYXRhLmFwcGVuZFJhbmdl
KG1lc3NhZ2UuYmVnaW4oKSArIGtBcGR1Q29tbWFuZERhdGFPZmZzZXQsIG1lc3NhZ2UuZW5kKCkg
LSAyKTsKKyAgICAgICAgICAgIGF1dG8gcmVzcG9uc2VMZW5ndGhPZmZzZXQgPSBrQXBkdUNvbW1h
bmREYXRhT2Zmc2V0ICsgZGF0YUxlbmd0aDsKKyAgICAgICAgICAgIHJlc3BvbnNlTGVuZ3RoID0g
cGFyc2VNZXNzYWdlTGVuZ3RoKG1lc3NhZ2UsIHJlc3BvbnNlTGVuZ3RoT2Zmc2V0KTsKKyAgICAg
ICAgICAgIC8vIFNwZWNpYWwgY2FzZSB3aGVyZSByZXNwb25zZSBsZW5ndGggb2YgMHgwMDAwIGNv
cnJlc3BvbmRzIHRvIDY1NTM2CisgICAgICAgICAgICAvLyBhcyBkZWZpbmVkIGluIElTTzc4MTYt
NC4KKyAgICAgICAgICAgIGlmICghcmVzcG9uc2VMZW5ndGgpCisgICAgICAgICAgICAgICAgcmVz
cG9uc2VMZW5ndGggPSBrQXBkdU1heFJlc3BvbnNlTGVuZ3RoOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHJldHVybiBBcGR1Q29tbWFuZChjbGEsIGlucywgcDEsIHAyLCByZXNwb25zZUxlbmd0aCwg
V1RGTW92ZShkYXRhKSk7Cit9CisKK0FwZHVDb21tYW5kOjpBcGR1Q29tbWFuZCh1aW50OF90IGNs
YSwgdWludDhfdCBpbnMsIHVpbnQ4X3QgcDEsIHVpbnQ4X3QgcDIsIHNpemVfdCByZXNwb25zZUxl
bmd0aCwgVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkKKyAgICA6IG1fY2xhKGNsYSkKKyAgICAsIG1f
aW5zKGlucykKKyAgICAsIG1fcDEocDEpCisgICAgLCBtX3AyKHAyKQorICAgICwgbV9yZXNwb25z
ZUxlbmd0aChyZXNwb25zZUxlbmd0aCkKKyAgICAsIG1fZGF0YShXVEZNb3ZlKGRhdGEpKQorewor
fQorCitWZWN0b3I8dWludDhfdD4gQXBkdUNvbW1hbmQ6OmdldEVuY29kZWRDb21tYW5kKCkgY29u
c3QKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZCA9IHsgbV9jbGEsIG1faW5zLCBtX3Ax
LCBtX3AyIH07CisKKyAgICAvLyBJZiBkYXRhIGV4aXN0cywgcmVxdWVzdCBzaXplIChMYykgaXMg
ZW5jb2RlZCBpbiAzIGJ5dGVzLCB3aXRoIHRoZSBmaXJzdAorICAgIC8vIGJ5dGUgYWx3YXlzIGJl
aW5nIG51bGwsIGFuZCB0aGUgb3RoZXIgdHdvIGJ5dGVzIGJlaW5nIGEgYmlnLWVuZGlhbgorICAg
IC8vIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXF1ZXN0IHNpemUuIElmIGRhdGEgbGVuZ3RoIGlz
IDAsIHJlc3BvbnNlIHNpemUgKExlKQorICAgIC8vIHdpbGwgYmUgcHJlcGVuZGVkIHdpdGggYSBu
dWxsIGJ5dGUuCisgICAgaWYgKCFtX2RhdGEuaXNFbXB0eSgpKSB7CisgICAgICAgIHNpemVfdCBk
YXRhTGVuZ3RoID0gbV9kYXRhLnNpemUoKTsKKworICAgICAgICBlbmNvZGVkLmFwcGVuZCgweDAp
OworICAgICAgICBpZiAoZGF0YUxlbmd0aCA+IGtBcGR1TWF4RGF0YUxlbmd0aCkKKyAgICAgICAg
ICAgIGRhdGFMZW5ndGggPSBrQXBkdU1heERhdGFMZW5ndGg7CisgICAgICAgIGVuY29kZWQuYXBw
ZW5kKChkYXRhTGVuZ3RoID4+IDgpICYgMHhmZik7CisgICAgICAgIGVuY29kZWQuYXBwZW5kKGRh
dGFMZW5ndGggJiAweGZmKTsKKyAgICAgICAgZW5jb2RlZC5hcHBlbmRSYW5nZShtX2RhdGEuYmVn
aW4oKSwgbV9kYXRhLmJlZ2luKCkgKyBkYXRhTGVuZ3RoKTsKKyAgICB9IGVsc2UgaWYgKG1fcmVz
cG9uc2VMZW5ndGggPiAwKQorICAgICAgICBlbmNvZGVkLmFwcGVuZCgweDApOworCisgICAgaWYg
KG1fcmVzcG9uc2VMZW5ndGggPiAwKSB7CisgICAgICAgIHNpemVfdCByZXNwb25zZUxlbmd0aCA9
IG1fcmVzcG9uc2VMZW5ndGg7CisgICAgICAgIGlmIChyZXNwb25zZUxlbmd0aCA+IGtBcGR1TWF4
UmVzcG9uc2VMZW5ndGgpCisgICAgICAgICAgICByZXNwb25zZUxlbmd0aCA9IGtBcGR1TWF4UmVz
cG9uc2VMZW5ndGg7CisgICAgICAgIC8vIEEgemVybyB2YWx1ZSByZXByZXNlbnRzIGEgcmVzcG9u
c2UgbGVuZ3RoIG9mIDY1LDUzNiBieXRlcy4KKyAgICAgICAgZW5jb2RlZC5hcHBlbmQoKHJlc3Bv
bnNlTGVuZ3RoID4+IDgpICYgMHhmZik7CisgICAgICAgIGVuY29kZWQuYXBwZW5kKHJlc3BvbnNl
TGVuZ3RoICYgMHhmZik7CisgICAgfQorICAgIHJldHVybiBlbmNvZGVkOworfQorCit9IC8vIG5h
bWVzcGFjZSBhcGR1CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9hcGR1L0FwZHVDb21tYW5kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2FwZHUvQXBkdUNvbW1hbmQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jNTc5ODdlNjBkMDc5OTIyNWI1MjRkZDgxYWNjN2I5NjhiZjQ4MTVhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9hcGR1L0FwZHVDb21tYW5kLmgK
QEAgLTAsMCArMSwxMDcgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
Ky8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisv
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorCisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgYXBkdSB7CisKKy8vIEFQRFUgY29tbWFuZHMg
YXJlIGRlZmluZWQgYXMgcGFydCBvZiBJU08gNzgxNi00LiBDb21tYW5kcyBjYW4gYmUgc2VyaWFs
aXplZAorLy8gaW50byBlaXRoZXIgc2hvcnQgbGVuZ3RoIGVuY29kaW5ncywgd2hlcmUgdGhlIG1h
eGltdW0gZGF0YSBsZW5ndGggaXMgMjU2CisvLyBieXRlcywgb3IgYW4gZXh0ZW5kZWQgbGVuZ3Ro
IGVuY29kaW5nLCB3aGVyZSB0aGUgbWF4aW11bSBkYXRhIGxlbmd0aCBpcyA2NTUzNgorLy8gYnl0
ZXMuIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBvbmx5IHRoZSBleHRlbmRlZCBsZW5ndGggZW5jb2Rp
bmcuIFNlcmlhbGl6ZWQKKy8vIGNvbW1hbmRzIGNvbnNpc3Qgb2YgYSBDTEEgYnl0ZSwgZGVub3Rp
bmcgdGhlIGNsYXNzIG9mIGluc3RydWN0aW9uLCBhbiBJTlMKKy8vIGJ5dGUsIGRlbm90aW5nIHRo
ZSBpbnN0cnVjdGlvbiBjb2RlLCBQMSBhbmQgUDIsIGVhY2ggb25lIGJ5dGUgZGVub3RpbmcKKy8v
IGluc3RydWN0aW9uIHBhcmFtZXRlcnMsIGEgbGVuZ3RoIGZpZWxkIChMYyksIGEgZGF0YSBmaWVs
ZCBvZiBsZW5ndGggTGMsIGFuZAorLy8gYSBtYXhpbXVtIGV4cGVjdGVkIHJlc3BvbnNlIGxlbmd0
aCAoTGUpLgorY2xhc3MgV0VCQ09SRV9FWFBPUlQgQXBkdUNvbW1hbmQgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEFwZHVDb21tYW5kKTsKK3B1YmxpYzoKKyAgICAvLyBDb25zdHJ1Y3RzIGFu
IEFQRFUgY29tbWFuZCBmcm9tIHRoZSBzZXJpYWxpemVkIG1lc3NhZ2UgZGF0YS4KKyAgICBzdGF0
aWMgT3B0aW9uYWw8QXBkdUNvbW1hbmQ+IGNyZWF0ZUZyb21NZXNzYWdlKGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYpOworCisgICAgQXBkdUNvbW1hbmQoKSA9IGRlZmF1bHQ7CisgICAgQXBkdUNvbW1h
bmQoCisgICAgICAgIHVpbnQ4X3QgY2xhLAorICAgICAgICB1aW50OF90IGlucywKKyAgICAgICAg
dWludDhfdCBwMSwKKyAgICAgICAgdWludDhfdCBwMiwKKyAgICAgICAgc2l6ZV90IHJlc3BvbnNl
TGVuZ3RoLAorICAgICAgICBWZWN0b3I8dWludDhfdD4mJiBkYXRhKTsKKyAgICBBcGR1Q29tbWFu
ZChBcGR1Q29tbWFuZCYmKSA9IGRlZmF1bHQ7CisgICAgQXBkdUNvbW1hbmQmIG9wZXJhdG9yPShB
cGR1Q29tbWFuZCYmKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBSZXR1cm5zIHNlcmlhbGl6ZWQgbWVz
c2FnZSBkYXRhLgorICAgIFZlY3Rvcjx1aW50OF90PiBnZXRFbmNvZGVkQ29tbWFuZCgpIGNvbnN0
OworCisgICAgdm9pZCBzZXRDbGEodWludDhfdCBjbGEpIHsgbV9jbGEgPSBjbGE7IH0KKyAgICB2
b2lkIHNldElucyh1aW50OF90IGlucykgeyBtX2lucyA9IGluczsgfQorICAgIHZvaWQgc2V0UDEo
dWludDhfdCBwMSkgeyBtX3AxID0gcDE7IH0KKyAgICB2b2lkIHNldFAyKHVpbnQ4X3QgcDIpIHsg
bV9wMiA9IHAyOyB9CisgICAgdm9pZCBzZXREYXRhKFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpIHsg
bV9kYXRhID0gV1RGTW92ZShkYXRhKTsgfQorICAgIHZvaWQgc2V0UmVzcG9uc2VMZW5ndGgoc2l6
ZV90IHJlc3BvbnNlTGVuZ3RoKSB7IG1fcmVzcG9uc2VMZW5ndGggPSByZXNwb25zZUxlbmd0aDsg
fQorCisgICAgdWludDhfdCBjbGEoKSBjb25zdCB7IHJldHVybiBtX2NsYTsgfQorICAgIHVpbnQ4
X3QgaW5zKCkgY29uc3QgeyByZXR1cm4gbV9pbnM7IH0KKyAgICB1aW50OF90IHAxKCkgY29uc3Qg
eyByZXR1cm4gbV9wMTsgfQorICAgIHVpbnQ4X3QgcDIoKSBjb25zdCB7IHJldHVybiBtX3AyOyB9
CisgICAgc2l6ZV90IHJlc3BvbnNlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZUxl
bmd0aDsgfQorICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0YSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YTsgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qga0FwZHVNYXhSZXNwb25z
ZUxlbmd0aCA9IDY1NTM2OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qga0FwZHVNaW5I
ZWFkZXIgPSA0OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGtBcGR1TWF4SGVhZGVyID0g
NzsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBrQXBkdUNvbW1hbmREYXRhT2Zmc2V0ID0g
NzsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBrQXBkdUNvbW1hbmRMZW5ndGhPZmZzZXQg
PSA1OworCisgICAgLy8gQXMgZGVmaW5lZCBpbiBJU083ODE2LTQsIGV4dGVuZGVkIGxlbmd0aCBB
UERVIHJlcXVlc3QgZGF0YSBpcyBsaW1pdGVkIHRvCisgICAgLy8gMTYgYml0cyBpbiBsZW5ndGgg
d2l0aCBhIG1heGltdW0gdmFsdWUgb2YgNjU1MzUuIFJlc3BvbnNlIGRhdGEgbGVuZ3RoIGlzCisg
ICAgLy8gYWxzbyBsaW1pdGVkIHRvIDE2IGJpdHMgaW4gbGVuZ3RoIHdpdGggYSB2YWx1ZSBvZiAw
eDAwMDAgY29ycmVzcG9uZGluZyB0bworICAgIC8vIGEgbGVuZ3RoIG9mIDY1NTM2LgorICAgIHN0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IGtBcGR1TWF4RGF0YUxlbmd0aCA9IDY1NTM1OworICAgIHN0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IGtBcGR1TWF4TGVuZ3RoID0ga0FwZHVNYXhEYXRhTGVuZ3Ro
ICsga0FwZHVNYXhIZWFkZXIgKyAyOworCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbV9jbGEgeyAw
IH07CisgICAgdWludDhfdCBtX2lucyB7IDAgfTsKKyAgICB1aW50OF90IG1fcDEgeyAwIH07Cisg
ICAgdWludDhfdCBtX3AyIHsgMCB9OworICAgIHNpemVfdCBtX3Jlc3BvbnNlTGVuZ3RoIHsgMCB9
OworICAgIFZlY3Rvcjx1aW50OF90PiBtX2RhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBhcGR1
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdXRobi9hcGR1L0FwZHVSZXNwb25zZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1dGhuL2FwZHUvQXBkdVJlc3BvbnNlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MTQ1
YjBhOTk5YzA2MDczNjgyMDBjN2YyYjY3NGM2ODM2ZWMxMDA0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9hcGR1L0FwZHVSZXNwb25zZS5jcHAKQEAg
LTAsMCArMSw2OCBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8g
bWV0OgorLy8KKy8vICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8v
CisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQXBkdVJlc3BvbnNlLmgiCisKKyNp
ZiBFTkFCTEUoV0VCX0FVVEhOKQorCituYW1lc3BhY2UgYXBkdSB7CisKKy8vIHN0YXRpYworT3B0
aW9uYWw8QXBkdVJlc3BvbnNlPiBBcGR1UmVzcG9uc2U6OmNyZWF0ZUZyb21NZXNzYWdlKGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKK3sKKyAgICAvLyBJbnZhbGlkIG1lc3NhZ2Ugc2l6ZSwg
ZGF0YSBpcyBhcHBlbmRlZCBieSBzdGF0dXMgYnl0ZS4KKyAgICBpZiAoZGF0YS5zaXplKCkgPCAy
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgdWludDE2X3Qgc3RhdHVzQnl0
ZXMgPSBkYXRhW2RhdGEuc2l6ZSgpIC0gMl0gPDwgODsKKyAgICBzdGF0dXNCeXRlcyB8PSBkYXRh
W2RhdGEuc2l6ZSgpIC0gMV07CisKKyAgICBWZWN0b3I8dWludDhfdD4gbmV3RGF0YTsKKyAgICBu
ZXdEYXRhLmFwcGVuZFJhbmdlKGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSAtIDIpOworICAgIHJl
dHVybiBBcGR1UmVzcG9uc2UoV1RGTW92ZShuZXdEYXRhKSwgc3RhdGljX2Nhc3Q8U3RhdHVzPihz
dGF0dXNCeXRlcykpOworfQorCitBcGR1UmVzcG9uc2U6OkFwZHVSZXNwb25zZShWZWN0b3I8dWlu
dDhfdD4mJiBkYXRhLCBTdGF0dXMgcmVzcG9uc2VTdGF0dXMpCisgICAgOiBtX2RhdGEoV1RGTW92
ZShkYXRhKSkKKyAgICAsIG1fcmVzcG9uc2VTdGF0dXMocmVzcG9uc2VTdGF0dXMpCit7Cit9CisK
K1ZlY3Rvcjx1aW50OF90PiBBcGR1UmVzcG9uc2U6OmdldEVuY29kZWRSZXNwb25zZSgpIGNvbnN0
Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRSZXNwb25zZSA9IG1fZGF0YTsKKyAgICBl
bmNvZGVkUmVzcG9uc2UuYXBwZW5kKHN0YXRpY19jYXN0PHVpbnQxNl90PihtX3Jlc3BvbnNlU3Rh
dHVzKSA+PiA4ICYgMHhmZik7CisgICAgZW5jb2RlZFJlc3BvbnNlLmFwcGVuZChzdGF0aWNfY2Fz
dDx1aW50MTZfdD4obV9yZXNwb25zZVN0YXR1cykgJiAweGZmKTsKKyAgICByZXR1cm4gZW5jb2Rl
ZFJlc3BvbnNlOworfQorCit9IC8vIG5hbWVzcGFjZSBhcGR1CisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCX0FVVEhOKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9h
cGR1L0FwZHVSZXNwb25zZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9hcGR1
L0FwZHVSZXNwb25zZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5MTE0YzZjOGRmMTM4YWIwMjQzMzJhN2RhZTlk
Y2FjMTYzY2E4ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1dGhuL2FwZHUvQXBkdVJlc3BvbnNlLmgKQEAgLTAsMCArMSw3NCBAQAorLy8gQ29weXJpZ2h0
IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKy8vICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9u
LgorLy8gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShXRUJfQVVUSE4pCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBh
cGR1IHsKKworLy8gQVBEVSByZXNwb25zZXMgYXJlIGRlZmluZWQgYXMgcGFydCBvZiBJU08gNzgx
Ni00LiBTZXJpYWxpemVkIHJlc3BvbnNlcworLy8gY29uc2lzdCBvZiBhIGRhdGEgZmllbGQgb2Yg
dmFyeWluZyBsZW5ndGgsIHVwIHRvIGEgbWF4aW11bSA2NTUzNiwgYW5kIGEKKy8vIHR3byBieXRl
IHN0YXR1cyBmaWVsZC4KK2NsYXNzIFdFQkNPUkVfRVhQT1JUIEFwZHVSZXNwb25zZSB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQXBkdVJlc3BvbnNlKTsKK3B1YmxpYzoKKyAgICAvLyBTdGF0
dXMgYnl0ZXMgYXJlIHNwZWNpZmllZCBpbiBJU08gNzgxNi00LgorICAgIGVudW0gY2xhc3MgU3Rh
dHVzIDogdWludDE2X3QgeworICAgICAgICBTV19OT19FUlJPUiA9IDB4OTAwMCwKKyAgICAgICAg
U1dfQ09ORElUSU9OU19OT1RfU0FUSVNGSUVEID0gMHg2OTg1LAorICAgICAgICBTV19XUk9OR19E
QVRBID0gMHg2QTgwLAorICAgICAgICBTV19XUk9OR19MRU5HVEggPSAweDY3MDAsCisgICAgICAg
IFNXX0lOU19OT1RfU1VQUE9SVEVEID0gMHg2RDAwLAorICAgIH07CisKKyAgICAvLyBDcmVhdGUg
YSBBUERVIHJlc3BvbnNlIGZyb20gdGhlIHNlcmlhbGl6ZWQgbWVzc2FnZS4KKyAgICBzdGF0aWMg
T3B0aW9uYWw8QXBkdVJlc3BvbnNlPiBjcmVhdGVGcm9tTWVzc2FnZShjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGRhdGEpOworCisgICAgQXBkdVJlc3BvbnNlKFZlY3Rvcjx1aW50OF90PiYmIGRhdGEs
IFN0YXR1cyk7CisgICAgQXBkdVJlc3BvbnNlKEFwZHVSZXNwb25zZSYmIHRoYXQpID0gZGVmYXVs
dDsKKyAgICBBcGR1UmVzcG9uc2UmIG9wZXJhdG9yPShBcGR1UmVzcG9uc2UmJiB0aGF0KSA9IGRl
ZmF1bHQ7CisKKyAgICBWZWN0b3I8dWludDhfdD4gZ2V0RW5jb2RlZFJlc3BvbnNlKCkgY29uc3Q7
CisKKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGE7IH0KKyAgICBTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZVN0YXR1
czsgfQorCitwcml2YXRlOgorICAgIFZlY3Rvcjx1aW50OF90PiBtX2RhdGE7CisgICAgU3RhdHVz
IG1fcmVzcG9uc2VTdGF0dXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBhcGR1CisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCX0FVVEhOKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA1NjFkNjI1NjVjOWE1ODgzZDJk
MDUyNDMxY2Y3YzJlZDA3YjkxNjRkLi5kNTM3NGFkNDIwMzE4MThhOTQ2ODNhZjM4NjllYjFjMDcw
NTg5MmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjU2LDYgKzI1Niw4IEBAIE1vZHVsZXMvd2ViYXVk
aW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5jcHAKIE1vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRv
ckNvb3JkaW5hdG9yLmNwcAogTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0
b3JDbGllbnQuY3BwCiBNb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCitN
b2R1bGVzL3dlYmF1dGhuL2FwZHUvQXBkdUNvbW1hbmQuY3BwCitNb2R1bGVzL3dlYmF1dGhuL2Fw
ZHUvQXBkdVJlc3BvbnNlLmNwcAogTW9kdWxlcy93ZWJhdXRobi9jYm9yL0NCT1JSZWFkZXIuY3Bw
CiBNb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUlZhbHVlLmNwcAogTW9kdWxlcy93ZWJhdXRobi9j
Ym9yL0NCT1JXcml0ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggNzdhZWFhNTJmMzk5NzI5NWRhZDI3YTRjNGUzMGI4OTdl
NjMyN2VkZC4uOWJkOGY2MmNmNTcxOWIyNTNjYWM1ZmRiY2NkYzQ4MWNlOTlkOTg5OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MTc4Miw2ICsxNzgyLDggQEAKIAkJNTcwNkE2OTYxRERFNUM5NTAwQTAzQjE0IC8qIENyeXB0b0Fs
Z29yaXRobVJzYU9hZXBQYXJhbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU3MDZBNjk1MURERTVDOTUwMEEwM0IxNCAvKiBDcnlwdG9BbGdvcml0aG1S
c2FPYWVwUGFyYW1zLmggKi87IH07CiAJCTU3MDZBNjk4MURERTVFNDYwMEEwM0IxNCAvKiBKU1Jz
YU9hZXBQYXJhbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU3MDZBNjk3MURERTVFNDYwMEEwM0IxNCAvKiBKU1JzYU9hZXBQYXJhbXMuaCAqLzsgfTsK
IAkJNTcxMjUyNjkxRTUyNEVCMTAwOEZGMzY5IC8qIENyeXB0b0FsZ29yaXRobUFFU19DRkIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MTI1MjY4MUU1
MjRFQjEwMDhGRjM2OSAvKiBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmggKi87IH07CisJCTU3MTUy
QjVBMjFDQjNFODgwMDBDMzdDQSAvKiBBcGR1Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcxNTJCNTgyMUNCMkUzQjAwMEMzN0NBIC8qIEFw
ZHVDb21tYW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNTcxNTJCNUMyMUNDMTkwMjAwMEMzN0NBIC8qIEFwZHVSZXNwb25zZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcxNTJCNTYyMUNCMkUzQTAw
MEMzN0NBIC8qIEFwZHVSZXNwb25zZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTU3MUYyMTg5MURBNTdDNTQwMDVDOUVGRCAvKiBKU1N1YnRsZUNy
eXB0by5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcx
RjIxODgxREE1N0M1NDAwNUM5RUZEIC8qIEpTU3VidGxlQ3J5cHRvLmggKi87IH07CiAJCTU3MjA5
M0QzMUREQ0VCOUEwMDMxMEFCMCAvKiBDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MjA5M0QyMURE
Q0VCOUEwMDMxMEFCMCAvKiBDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXMuaCAqLzsgfTsK
IAkJNTcyMUE5ODcxRUNFNTNCMTAwODEyOTVBIC8qIENyeXB0b0RpZ2VzdEFsZ29yaXRobS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyMUE5ODYxRUNF
NTNCMTAwODEyOTVBIC8qIENyeXB0b0RpZ2VzdEFsZ29yaXRobS5oICovOyB9OwpAQCAtODU4OSw2
ICs4NTkxLDEwIEBACiAJCTU3MDZBNjk5MURERTVFODUwMEEwM0IxNCAvKiBKU1JzYU9hZXBQYXJh
bXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNSc2FPYWVwUGFy
YW1zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcxMjUyNjgxRTUyNEVCMTAw
OEZGMzY5IC8qIENyeXB0b0FsZ29yaXRobUFFU19DRkIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1NzEyNTI2QTFFNTI1MjdDMDA4RkYzNjkgLyogQ3J5cHRvQWxnb3JpdGhtQUVT
X0NGQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDcnlwdG9BbGdv
cml0aG1BRVNfQ0ZCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTcxNTJCNTUy
MUNCMkUzQTAwMEMzN0NBIC8qIEFwZHVSZXNwb25zZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBBcGR1UmVzcG9uc2UuY3BwOyBwYXRoID0gTW9kdWxlcy93ZWJhdXRo
bi9hcGR1L0FwZHVSZXNwb25zZS5jcHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJ
NTcxNTJCNTYyMUNCMkUzQTAwMEMzN0NBIC8qIEFwZHVSZXNwb25zZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBcGR1UmVzcG9uc2UuaDsgcGF0aCA9IE1vZHVsZXMvd2ViYXV0
aG4vYXBkdS9BcGR1UmVzcG9uc2UuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk1
NzE1MkI1NzIxQ0IyRTNBMDAwQzM3Q0EgLyogQXBkdUNvbW1hbmQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQXBkdUNvbW1hbmQuY3BwOyBwYXRoID0gTW9kdWxlcy93
ZWJhdXRobi9hcGR1L0FwZHVDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9
OworCQk1NzE1MkI1ODIxQ0IyRTNCMDAwQzM3Q0EgLyogQXBkdUNvbW1hbmQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQXBkdUNvbW1hbmQuaDsgcGF0aCA9IE1vZHVsZXMvd2Vi
YXV0aG4vYXBkdS9BcGR1Q29tbWFuZC5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJ
CTU3MUYyMTg4MURBNTdDNTQwMDVDOUVGRCAvKiBKU1N1YnRsZUNyeXB0by5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N1YnRsZUNyeXB0by5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1NzFGMjE4QTFEQTU3QzdBMDA1QzlFRkQgLyogSlNTdWJ0bGVDcnlwdG8u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTdWJ0bGVDcnlwdG8u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzIwOTNEMTFERENFQTRCMDAzMTBB
QjAgLyogQWVzQ2JjQ2ZiUGFyYW1zLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBBZXNDYmNDZmJQYXJhbXMuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkyNzQsNiArMTkyODAsMTcgQEAKIAkJCXBhdGgg
PSAidW5pZmllZC1zb3VyY2VzIjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJ
CTU3MTUyQjUzMjFDQjJDRTMwMDBDMzdDQSAvKiBhcGR1ICovID0geworCQkJaXNhID0gUEJYR3Jv
dXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk1NzE1MkI1NzIxQ0IyRTNBMDAwQzM3Q0EgLyogQXBk
dUNvbW1hbmQuY3BwICovLAorCQkJCTU3MTUyQjU4MjFDQjJFM0IwMDBDMzdDQSAvKiBBcGR1Q29t
bWFuZC5oICovLAorCQkJCTU3MTUyQjU1MjFDQjJFM0EwMDBDMzdDQSAvKiBBcGR1UmVzcG9uc2Uu
Y3BwICovLAorCQkJCTU3MTUyQjU2MjFDQjJFM0EwMDBDMzdDQSAvKiBBcGR1UmVzcG9uc2UuaCAq
LywKKwkJCSk7CisJCQlwYXRoID0gYXBkdTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CiAJCTU3MzAzQkIzMjAwNkM2RUQwMDM1NTk2NSAvKiBjYm9yICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE5MzUxLDYgKzE5MzY4LDcgQEAKIAkJNTdE
ODQ2MkExRkVBRjU3RjAwQ0EzNjgyIC8qIHdlYmF1dGhuICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1NzE1MkI1MzIxQ0IyQ0UzMDAwQzM3Q0EgLyogYXBk
dSAqLywKIAkJCQk1NzMwM0JCMzIwMDZDNkVEMDAzNTU5NjUgLyogY2JvciAqLywKIAkJCQk1NzhB
NEJGQTIxNjZBRTAwMDBEMDhGMzQgLyogZmlkbyAqLywKIAkJCQk1NzMwM0MyNzIwMDlCMkZDMDAz
NTU5NjUgLyogQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLmggKi8sCkBAIC0yNzg2Nyw2
ICsyNzg4NSw4IEBACiAJCQkJNzE0QzdDNjcxRkRBRDJBOTAwRjJCRUUxIC8qIEFuaW1hdGlvblBs
YXliYWNrRXZlbnRJbml0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTAyNUVDRDFGOTlGMENFMDA0
QTI1MEMgLyogQW5pbWF0aW9uVGltZWxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTgwRkFG
MTQ5ODAwRDQwMEZCNUJEOCAvKiBBbmltYXRpb25VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTU3MTUyQjVBMjFDQjNFODgwMDBDMzdDQSAvKiBBcGR1Q29tbWFuZC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTcxNTJCNUMyMUNDMTkwMjAwMEMzN0NBIC8qIEFwZHVSZXNwb25zZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTMzMDlERDcwOTlFNjQ5MjAwNTZFNTgxIC8qIEFwcGVuZE5vZGVDb21t
YW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMURGNUE5NDFGN0VDNDMyMDA1OEE0NzcgLyogQXBw
bGVQYXlDb250YWN0RmllbGQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMkM1OUVFMjAzNUZDOUIw
MDEyMjM2QiAvKiBBcHBsZVBheUVycm9yLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzNjhkYjRjMzc0MTU1NjZiYjA4
NWJkZjgxNGFjNTJhMmRlMzhhZmYyLi5jMDdlN2QwZjQ5Y2NiMGJjYTE1ZWIwYTY4YWY2M2JhOGRm
NWI2MDk5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMTgtMTItMjAgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFw
cGxlLmNvbT4KKworICAgICAgICBbV2ViQXV0aE5dIEltcG9ydCBhbiBBUERVIGNvZGVyIGZyb20g
Q2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5Mjk0OQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDY4Nzk5MzM+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvQXBkdVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRFU1QpOgorCiAyMDE4LTEyLTIwICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFw
cGxlLmNvbT4KIAogICAgICAgICB3ZWJraXRweTogQXV0b2luc3RhbGwgcGFja2FnZSBVUkxzIGhh
dmUgY2hhbmdlZApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzOTI4ZmVmYzZhMTlmODMyNTI0
ZDgwYmY0Y2E2MGVjZTg5OWRhNTAxLi4yMzE0MzI4ZmVkNGVhMTExOWZlMzVkMWE1OWNmNTRkY2Fl
ZWU5MjI3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjU3LDYgKzI1Nyw3IEBACiAJCTU3
MTRFQ0I5MUNBOEI1QjAwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTC5odG1s
IGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3
MTRFQ0I4MUNBOEI1ODgwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTC5odG1s
ICovOyB9OwogCQk1NzE0RUNCQjFDQThCRkU0MDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3Jp
Z2luYWxVUkxGcmFtZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU3MTRFQ0JBMUNBOEJGRDEwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVl
c3RPcmlnaW5hbFVSTEZyYW1lLmh0bWwgKi87IH07CiAJCTU3MTRFQ0JEMUNBOEMyMkEwMDA1MUFD
OCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTDIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzE0RUNCQzFDQThDMjE4MDAwNTFB
QzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwyLmh0bWwgKi87IH07CisJCTU3MTUyQjVF
MjFDQzIwNDUwMDBDMzdDQSAvKiBBcGR1VGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzE1MkI1RDIxQ0MyMDQ1MDAwQzM3Q0EgLyogQXBkdVRl
c3QuY3BwICovOyB9OwogCQk1NzFGN0ZEMDFGMjk2MUZCMDA5NDY2NDggLyogSW5kZXhlZERCU3Ry
dWN0dXJlZENsb25lQmFja3dhcmRDb21wYXRpYmlsaXR5LnNxbGl0ZTMtd2FsIGluIENvcHkgUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MUY3RkNGMUYyOTYx
RTEwMDk0NjY0OCAvKiBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGliaWxp
dHkuc3FsaXRlMy13YWwgKi87IH07CiAJCTU3MkI0MDM0MjE3NjlBODgwMDBBRDQzRSAvKiBDdGFw
UmVxdWVzdFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTcyQjQwMzMyMTc2OUE4ODAwMEFENDNFIC8qIEN0YXBSZXF1ZXN0VGVzdC5jcHAgKi87
IH07CiAJCTU3MkI0MDQ0MjE3ODFCNDMwMDBBRDQzRSAvKiBDdGFwUmVzcG9uc2VUZXN0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkI0MDQzMjE3
ODFCNDIwMDBBRDQzRSAvKiBDdGFwUmVzcG9uc2VUZXN0LmNwcCAqLzsgfTsKQEAgLTE2MDQsNiAr
MTYwNSw3IEBACiAJCTU3MTRFQ0I4MUNBOEI1ODgwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RP
cmlnaW5hbFVSTC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gRG93bmxvYWRSZXF1
ZXN0T3JpZ2luYWxVUkwuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcxNEVD
QkExQ0E4QkZEMTAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMRnJhbWUuaHRt
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJM
RnJhbWUuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcxNEVDQkMxQ0E4QzIx
ODAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMMi5odG1sICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5odG1sOyBwYXRoID0gRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwyLmh0bWw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3MTUyQjVEMjFDQzIwNDUwMDBDMzdDQSAvKiBBcGR1
VGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcGR1VGVzdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MUY3RkNGMUYyOTYxRTEwMDk0NjY0
OCAvKiBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHkuc3FsaXRl
My13YWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBm
aWxlOyBwYXRoID0gIkluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0
eS5zcWxpdGUzLXdhbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkI0MDMzMjE3
NjlBODgwMDBBRDQzRSAvKiBDdGFwUmVxdWVzdFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ3RhcFJlcXVlc3RUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTcyQjQwMzUyMTc2QTAyOTAwMEFENDNFIC8qIEZpZG9UZXN0RGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGaWRvVGVzdERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI2MTYsNiArMjYxOCw3IEBACiAJCQkJMzE2MkFFOUExRTZGMkY4RjAwMEU0REJDIC8qIG1h
YyAqLywKIAkJCQlBQkY1MTA2MzJBMTlCOEFDN0VDNDBFMTcgLyogQWJvcnRhYmxlVGFza1F1ZXVl
LmNwcCAqLywKIAkJCQk3QTkwOUE2RjFEODc3NDc1MDA3RTEwRjggLyogQWZmaW5lVHJhbnNmb3Jt
LmNwcCAqLywKKwkJCQk1NzE1MkI1RDIxQ0MyMDQ1MDAwQzM3Q0EgLyogQXBkdVRlc3QuY3BwICov
LAogCQkJCTYzNTRGNEQwMUY3QzNBQjUwMEQ4OURGMyAvKiBBcHBsaWNhdGlvbk1hbmlmZXN0UGFy
c2VyLmNwcCAqLywKIAkJCQk5M0E3MjBFNTE4RjFBMEU4MDBBODQ4RTEgLyogQ2FsY3VsYXRpb25W
YWx1ZS5jcHAgKi8sCiAJCQkJMDdDMDQ2QzkxRTQyNTczRTAwNzIwMUU3IC8qIENBUmluZ0J1ZmZl
ci5jcHAgKi8sCkBAIC0zODM3LDYgKzM4NDAsNyBAQAogCQkJCTdBOTA5QTdEMUQ4Nzc0ODAwMDdF
MTBGOCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTFERjc0MzIx
QzQxQjY1ODAwQTJGNEQwIC8qIEFsd2F5c1JldmFsaWRhdGVkVVJMU2NoZW1lcy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTJERTcxQUZFMUQ0OUMwQkQwMDkwNDA5NCAvKiBBbmltYXRlZFJlc2l6ZS5t
bSBpbiBTb3VyY2VzICovLAorCQkJCTU3MTUyQjVFMjFDQzIwNDUwMDBDMzdDQSAvKiBBcGR1VGVz
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2M0Y2NjgyMjFGOTdGN0Y5MDAzMkVFNTEgLyogQXBw
bGljYXRpb25NYW5pZmVzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTYzNTRGNEQxMUY3QzNBQjUw
MEQ4OURGMyAvKiBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTgzNDEzOEM3MjAzMjYxQ0EwMEYyNjk2MCAvKiBBc3luY1BvbGljeUZvck5hdmlnYXRpb25S
ZXNwb25zZS5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0FwZHVUZXN0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9BcGR1VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzE5NjU1MDA2NmQ1ZWFlZjExNDg0Zjlk
NTcxYWI5MmQ2OTY0ODUzOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9BcGR1VGVzdC5jcHAKQEAgLTAsMCArMSwxOTQgQEAKKy8vIENvcHlyaWdo
dCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisv
LyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlv
bi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
Ky8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFdFQl9BVVRITikKKworI2luY2x1ZGUgPFdlYkNvcmUvQXBkdUNvbW1hbmQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0FwZHVSZXNwb25zZS5oPgorCituYW1lc3BhY2UgVGVzdFdl
YktpdEFQSSB7CisKK3VzaW5nIG5hbWVzcGFjZSBhcGR1OworCitURVNUKEFwZHVUZXN0LCBUZXN0
RGVzZXJpYWxpemVCYXNpYykKK3sKKyAgICB1aW50OF90IGNsYSA9IDB4QUE7CisgICAgdWludDhf
dCBpbnMgPSAweEFCOworICAgIHVpbnQ4X3QgcDEgPSAweEFDOworICAgIHVpbnQ4X3QgcDIgPSAw
eEFEOworICAgIFZlY3Rvcjx1aW50OF90PiBtZXNzYWdlKHsgY2xhLCBpbnMsIHAxLCBwMiB9KTsK
KyAgICBhdXRvIGNtZCA9IEFwZHVDb21tYW5kOjpjcmVhdGVGcm9tTWVzc2FnZShtZXNzYWdlKTsK
KyAgICBBU1NFUlRfVFJVRShjbWQpOworICAgIEVYUEVDVF9FUSgwdSwgY21kLT5yZXNwb25zZUxl
bmd0aCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjbWQtPmRhdGEoKS5pc0VtcHR5KCkpOworICAgIEVY
UEVDVF9FUShjbGEsIGNtZC0+Y2xhKCkpOworICAgIEVYUEVDVF9FUShpbnMsIGNtZC0+aW5zKCkp
OworICAgIEVYUEVDVF9FUShwMSwgY21kLT5wMSgpKTsKKyAgICBFWFBFQ1RfRVEocDIsIGNtZC0+
cDIoKSk7CisgICAgLy8gSW52YWxpZCBsZW5ndGguCisgICAgbWVzc2FnZSA9IHsgY2xhLCBpbnMs
IHAxIH07CisgICAgRVhQRUNUX0ZBTFNFKEFwZHVDb21tYW5kOjpjcmVhdGVGcm9tTWVzc2FnZSht
ZXNzYWdlKSk7CisgICAgbWVzc2FnZS5hcHBlbmQocDIpOworICAgIG1lc3NhZ2UuYXBwZW5kKDAp
OworICAgIC8vIFNldCBBUERVIGNvbW1hbmQgZGF0YSBzaXplIGFzIG1heGltdW0uCisgICAgbWVz
c2FnZS5hcHBlbmQoMHhGRik7CisgICAgbWVzc2FnZS5hcHBlbmQoMHhGRik7CisgICAgbWVzc2Fn
ZS5yZXNpemUobWVzc2FnZS5zaXplKCkgKyBBcGR1Q29tbWFuZDo6a0FwZHVNYXhEYXRhTGVuZ3Ro
KTsKKyAgICAvLyBTZXQgbWF4aW11bSByZXNwb25zZSBzaXplLgorICAgIG1lc3NhZ2UuYXBwZW5k
KDApOworICAgIG1lc3NhZ2UuYXBwZW5kKDApOworICAgIC8vIHxtZXNzYWdlfCBpcyBBUERVIGVu
Y29kZWQgYnl0ZSBhcnJheSB3aXRoIG1heGltdW0gZGF0YSBsZW5ndGguCisgICAgRVhQRUNUX1RS
VUUoQXBkdUNvbW1hbmQ6OmNyZWF0ZUZyb21NZXNzYWdlKG1lc3NhZ2UpKTsKKyAgICBtZXNzYWdl
LmFwcGVuZCgwKTsKKyAgICAvLyB8bWVzc2FnZXwgZW5jb2RpbmcgY29udGFpbmluZyBkYXRhIG9m
IHNpemUgIG1heGltdW0gZGF0YSBsZW5ndGggKyAxLgorICAgIEVYUEVDVF9GQUxTRShBcGR1Q29t
bWFuZDo6Y3JlYXRlRnJvbU1lc3NhZ2UobWVzc2FnZSkpOworfQorCitURVNUKEFwZHVUZXN0LCBU
ZXN0RGVzZXJpYWxpemVDb21wbGV4KQoreworICAgIHVpbnQ4X3QgY2xhID0gMHhBQTsKKyAgICB1
aW50OF90IGlucyA9IDB4QUI7CisgICAgdWludDhfdCBwMSA9IDB4QUM7CisgICAgdWludDhfdCBw
MiA9IDB4QUQ7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoQXBkdUNvbW1hbmQ6OmtBcGR1TWF4
RGF0YUxlbmd0aCAtIEFwZHVDb21tYW5kOjprQXBkdU1heEhlYWRlciAtIDIsIDB4N0YpOworICAg
IFZlY3Rvcjx1aW50OF90PiBtZXNzYWdlID0geyBjbGEsIGlucywgcDEsIHAyLCAwIH07CisgICAg
bWVzc2FnZS5hcHBlbmQoKGRhdGEuc2l6ZSgpID4+IDgpICYgMHhmZik7CisgICAgbWVzc2FnZS5h
cHBlbmQoZGF0YS5zaXplKCkgJiAweGZmKTsKKyAgICBtZXNzYWdlLmFwcGVuZFZlY3RvcihkYXRh
KTsKKworICAgIC8vIENyZWF0ZSBhIG1lc3NhZ2Ugd2l0aCBubyByZXNwb25zZSBleHBlY3RlZC4K
KyAgICBhdXRvIGNtZE5vUmVzcG9uc2UgPSBBcGR1Q29tbWFuZDo6Y3JlYXRlRnJvbU1lc3NhZ2Uo
bWVzc2FnZSk7CisgICAgQVNTRVJUX1RSVUUoY21kTm9SZXNwb25zZSk7CisgICAgRVhQRUNUX0VR
KDB1LCBjbWROb1Jlc3BvbnNlLT5yZXNwb25zZUxlbmd0aCgpKTsKKyAgICBFWFBFQ1RfRVEoZGF0
YSwgY21kTm9SZXNwb25zZS0+ZGF0YSgpKTsKKyAgICBFWFBFQ1RfRVEoY2xhLCBjbWROb1Jlc3Bv
bnNlLT5jbGEoKSk7CisgICAgRVhQRUNUX0VRKGlucywgY21kTm9SZXNwb25zZS0+aW5zKCkpOwor
ICAgIEVYUEVDVF9FUShwMSwgY21kTm9SZXNwb25zZS0+cDEoKSk7CisgICAgRVhQRUNUX0VRKHAy
LCBjbWROb1Jlc3BvbnNlLT5wMigpKTsKKworICAgIC8vIEFkZCByZXNwb25zZSBsZW5ndGggdG8g
bWVzc2FnZS4KKyAgICBtZXNzYWdlLmFwcGVuZCgweEYxKTsKKyAgICBtZXNzYWdlLmFwcGVuZCgw
eEQwKTsKKyAgICBhdXRvIGNtZCA9IEFwZHVDb21tYW5kOjpjcmVhdGVGcm9tTWVzc2FnZShtZXNz
YWdlKTsKKyAgICBBU1NFUlRfVFJVRShjbWQpOworICAgIEVYUEVDVF9FUShkYXRhLCBjbWQtPmRh
dGEoKSk7CisgICAgRVhQRUNUX0VRKGNsYSwgY21kLT5jbGEoKSk7CisgICAgRVhQRUNUX0VRKGlu
cywgY21kLT5pbnMoKSk7CisgICAgRVhQRUNUX0VRKHAxLCBjbWQtPnAxKCkpOworICAgIEVYUEVD
VF9FUShwMiwgY21kLT5wMigpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pigw
eEYxRDApLCBjbWQtPnJlc3BvbnNlTGVuZ3RoKCkpOworfQorCitURVNUKEFwZHVUZXN0LCBUZXN0
RGVzZXJpYWxpemVSZXNwb25zZSkKK3sKKyAgICBBcGR1UmVzcG9uc2U6OlN0YXR1cyBzdGF0dXM7
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRlc3RWZWN0b3I7CisgICAgLy8gSW52YWxpZCBsZW5ndGgu
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1lc3NhZ2UoeyAweEFBIH0pOworICAgIEVYUEVDVF9GQUxT
RShBcGR1UmVzcG9uc2U6OmNyZWF0ZUZyb21NZXNzYWdlKG1lc3NhZ2UpKTsKKyAgICAvLyBWYWxp
ZCBsZW5ndGggYW5kIHN0YXR1cy4KKyAgICBzdGF0dXMgPSBBcGR1UmVzcG9uc2U6OlN0YXR1czo6
U1dfQ09ORElUSU9OU19OT1RfU0FUSVNGSUVEOworICAgIG1lc3NhZ2UgPSB7IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PHVpbnQxNl90PihzdGF0dXMpID4+IDgpLCBzdGF0aWNfY2Fz
dDx1aW50OF90PihzdGF0dXMpIH07CisgICAgYXV0byByZXNwb25zZSA9IEFwZHVSZXNwb25zZTo6
Y3JlYXRlRnJvbU1lc3NhZ2UobWVzc2FnZSk7CisgICAgQVNTRVJUX1RSVUUocmVzcG9uc2UpOwor
ICAgIEVYUEVDVF9FUShBcGR1UmVzcG9uc2U6OlN0YXR1czo6U1dfQ09ORElUSU9OU19OT1RfU0FU
SVNGSUVELCByZXNwb25zZS0+c3RhdHVzKCkpOworICAgIEVYUEVDVF9FUShyZXNwb25zZS0+ZGF0
YSgpLCBWZWN0b3I8dWludDhfdD4oKSk7CisgICAgLy8gVmFsaWQgbGVuZ3RoIGFuZCBzdGF0dXMu
CisgICAgc3RhdHVzID0gQXBkdVJlc3BvbnNlOjpTdGF0dXM6OlNXX05PX0VSUk9SOworICAgIG1l
c3NhZ2UgPSB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PHVpbnQxNl90PihzdGF0
dXMpID4+IDgpLCBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0dXMpfTsKKyAgICB0ZXN0VmVjdG9y
ID0geyAweDAxLCAweDAyLCAweEVGLCAweEZGIH07CisgICAgbWVzc2FnZS5pbnNlcnRWZWN0b3Io
MCwgdGVzdFZlY3Rvcik7CisgICAgcmVzcG9uc2UgPSBBcGR1UmVzcG9uc2U6OmNyZWF0ZUZyb21N
ZXNzYWdlKG1lc3NhZ2UpOworICAgIEFTU0VSVF9UUlVFKHJlc3BvbnNlKTsKKyAgICBFWFBFQ1Rf
RVEoQXBkdVJlc3BvbnNlOjpTdGF0dXM6OlNXX05PX0VSUk9SLCByZXNwb25zZS0+c3RhdHVzKCkp
OworICAgIEVYUEVDVF9FUShyZXNwb25zZS0+ZGF0YSgpLCB0ZXN0VmVjdG9yKTsKK30KKworVEVT
VChBcGR1VGVzdCwgVGVzdFNlcmlhbGl6ZUNvbW1hbmQpCit7CisgICAgQXBkdUNvbW1hbmQgY21k
OworICAgIGNtZC5zZXRDbGEoMHhBKTsKKyAgICBjbWQuc2V0SW5zKDB4Qik7CisgICAgY21kLnNl
dFAxKDB4Qyk7CisgICAgY21kLnNldFAyKDB4RCk7CisgICAgLy8gTm8gZGF0YSwgbm8gcmVzcG9u
c2UgZXhwZWN0ZWQuCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGV4cGVjdGVkKHsgMHhBLCAweEIsIDB4
QywgMHhEIH0pOworICAgIEFTU0VSVChleHBlY3RlZCA9PSBjbWQuZ2V0RW5jb2RlZENvbW1hbmQo
KSk7CisgICAgYXV0byBkZXNlcmlhbGl6ZWRDbWQgPSBBcGR1Q29tbWFuZDo6Y3JlYXRlRnJvbU1l
c3NhZ2UoZXhwZWN0ZWQpOworICAgIEFTU0VSVF9UUlVFKGRlc2VyaWFsaXplZENtZCk7CisgICAg
RVhQRUNUX0VRKGV4cGVjdGVkLCBkZXNlcmlhbGl6ZWRDbWQtPmdldEVuY29kZWRDb21tYW5kKCkp
OworICAgIC8vIE5vIGRhdGEsIHJlc3BvbnNlIGV4cGVjdGVkLgorICAgIGNtZC5zZXRSZXNwb25z
ZUxlbmd0aCgweENBRkUpOworICAgIGV4cGVjdGVkID0geyAweEEsIDB4QiwgMHhDLCAweEQsIDB4
MCwgMHhDQSwgMHhGRSB9OworICAgIEVYUEVDVF9FUShleHBlY3RlZCwgY21kLmdldEVuY29kZWRD
b21tYW5kKCkpOworICAgIGRlc2VyaWFsaXplZENtZCA9IEFwZHVDb21tYW5kOjpjcmVhdGVGcm9t
TWVzc2FnZShleHBlY3RlZCk7CisgICAgQVNTRVJUX1RSVUUoZGVzZXJpYWxpemVkQ21kKTsKKyAg
ICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIGRlc2VyaWFsaXplZENtZC0+Z2V0RW5jb2RlZENvbW1hbmQo
KSk7CisgICAgLy8gRGF0YSBleGlzdHMsIHJlc3BvbnNlIGV4cGVjdGVkLgorICAgIFZlY3Rvcjx1
aW50OF90PiBkYXRhKHsgMHgxLCAweDIsIDB4MywgMHg0IH0pOworICAgIGNtZC5zZXREYXRhKFdU
Rk1vdmUoZGF0YSkpOworICAgIGV4cGVjdGVkID0geyAweEEsIDB4QiwgMHhDLCAweEQsIDB4MCwg
IDB4MCwgMHg0LCAweDEsIDB4MiwgMHgzLCAweDQsIDB4Q0EsIDB4RkUgfTsKKyAgICBFWFBFQ1Rf
RVEoZXhwZWN0ZWQsIGNtZC5nZXRFbmNvZGVkQ29tbWFuZCgpKTsKKyAgICBkZXNlcmlhbGl6ZWRD
bWQgPSBBcGR1Q29tbWFuZDo6Y3JlYXRlRnJvbU1lc3NhZ2UoZXhwZWN0ZWQpOworICAgIEFTU0VS
VF9UUlVFKGRlc2VyaWFsaXplZENtZCk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkLCBkZXNlcmlh
bGl6ZWRDbWQtPmdldEVuY29kZWRDb21tYW5kKCkpOworICAgIC8vIERhdGEgZXhpc3RzLCBubyBy
ZXNwb25zZSBleHBlY3RlZC4KKyAgICBjbWQuc2V0UmVzcG9uc2VMZW5ndGgoMCk7CisgICAgZXhw
ZWN0ZWQgPSB7IDB4QSwgMHhCLCAweEMsIDB4RCwgMHgwLCAweDAsIDB4NCwgMHgxLCAweDIsIDB4
MywgMHg0IH07CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkLCBjbWQuZ2V0RW5jb2RlZENvbW1hbmQo
KSk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkLCBBcGR1Q29tbWFuZDo6Y3JlYXRlRnJvbU1lc3Nh
Z2UoZXhwZWN0ZWQpLT5nZXRFbmNvZGVkQ29tbWFuZCgpKTsKK30KKworVEVTVChBcGR1VGVzdCwg
VGVzdFNlcmlhbGl6ZUVkZ2VDYXNlcykKK3sKKyAgICBBcGR1Q29tbWFuZCBjbWQ7CisgICAgY21k
LnNldENsYSgweEEpOworICAgIGNtZC5zZXRJbnMoMHhCKTsKKyAgICBjbWQuc2V0UDEoMHhDKTsK
KyAgICBjbWQuc2V0UDIoMHhEKTsKKyAgICAvLyBTZXQgcmVzcG9uc2UgbGVuZ3RoIHRvIG1heGlt
dW0sIHdoaWNoIHNob3VsZCBzZXJpYWxpemUgdG8gMHgwMDAwLgorICAgIGNtZC5zZXRSZXNwb25z
ZUxlbmd0aChBcGR1Q29tbWFuZDo6a0FwZHVNYXhSZXNwb25zZUxlbmd0aCk7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IGV4cGVjdGVkKHsgMHhBLCAweEIsIDB4QywgMHhELCAweDAsIDB4MCwgMHgwIH0p
OworICAgIEVYUEVDVF9FUShleHBlY3RlZCwgY21kLmdldEVuY29kZWRDb21tYW5kKCkpOworICAg
IGF1dG8gZGVzZXJpYWxpemVkQ21kID0gQXBkdUNvbW1hbmQ6OmNyZWF0ZUZyb21NZXNzYWdlKGV4
cGVjdGVkKTsKKyAgICBBU1NFUlRfVFJVRShkZXNlcmlhbGl6ZWRDbWQpOworICAgIEVYUEVDVF9F
UShleHBlY3RlZCwgZGVzZXJpYWxpemVkQ21kLT5nZXRFbmNvZGVkQ29tbWFuZCgpKTsKKyAgICAv
LyBNYXhpbXVtIGRhdGEgc2l6ZS4KKyAgICBWZWN0b3I8dWludDhfdD4gb3ZlcnNpemVkKEFwZHVD
b21tYW5kOjprQXBkdU1heERhdGFMZW5ndGgpOworICAgIGNtZC5zZXREYXRhKFdURk1vdmUob3Zl
cnNpemVkKSk7CisgICAgZGVzZXJpYWxpemVkQ21kID0gQXBkdUNvbW1hbmQ6OmNyZWF0ZUZyb21N
ZXNzYWdlKGNtZC5nZXRFbmNvZGVkQ29tbWFuZCgpKTsKKyAgICBBU1NFUlRfVFJVRShkZXNlcmlh
bGl6ZWRDbWQpOworICAgIEVYUEVDVF9FUShjbWQuZ2V0RW5jb2RlZENvbW1hbmQoKSwgZGVzZXJp
YWxpemVkQ21kLT5nZXRFbmNvZGVkQ29tbWFuZCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVVRITikK
</data>

          </attachment>
      

    </bug>

</bugzilla>